diff --git a/.claude/skills/devtools-commit/SKILL.md b/.claude/skills/devtools-commit/SKILL.md index 0298d361..219d326a 100644 --- a/.claude/skills/devtools-commit/SKILL.md +++ b/.claude/skills/devtools-commit/SKILL.md @@ -22,7 +22,7 @@ The rules are in `docs/contributing/commit-message-guidelines.md`. Summary: ## Pull requests - Pull requests are squash merged; the title becomes the commit on `main`, so it must follow the header format. -- A `commit-msg` hook (`scripts/commit-message.mjs`, enabled by `pnpm install`) warns about a bad message as you commit; CI checks the title and every commit in the pull request: a bad title fails the check, and problems in the commits show as warnings. Run `pnpm commit:check` before pushing, and fix flagged messages with `git commit --amend` or a reword rebase. +- A `commit-msg` hook (`scripts/commit-message.mjs`, enabled by `pnpm install`) warns about a bad message as you commit; CI checks the title and every commit in the pull request: a bad title or a bad commit message fails the check. Run `pnpm commit:check` before pushing, and fix flagged messages with `git commit --amend` or a reword rebase. - Address review feedback with fixup commits (`docs/contributing/using-fixup-commits.md`). - One feature per pull request, with its tests (including agent tool tests when tools change). - Rebuild and commit `extension/ui` when `app/` changed. diff --git a/.github/workflows/commit-message.yml b/.github/workflows/commit-message.yml index 1a455f3a..6e5b7c89 100644 --- a/.github/workflows/commit-message.yml +++ b/.github/workflows/commit-message.yml @@ -34,4 +34,4 @@ jobs: env: BASE: ${{ github.event.pull_request.base.sha }} HEAD: ${{ github.event.pull_request.head.sha }} - run: node scripts/commit-message.mjs --range "$BASE..$HEAD" --warn + run: node scripts/commit-message.mjs --range "$BASE..$HEAD" diff --git a/app/src/__tests__/live-route-apps.test.ts b/app/src/__tests__/live-route-apps.test.ts index 0789e11b..0c2ef33e 100644 --- a/app/src/__tests__/live-route-apps.test.ts +++ b/app/src/__tests__/live-route-apps.test.ts @@ -10,6 +10,7 @@ function routerPage(extra: Partial = {}): RouterPage { return { pageId: 'p1', reportedAt: 1, + changedAt: 1, snapshot: { url: '/home', queryParams: {}, fragment: null, root }, navigations: [ { diff --git a/app/src/__tests__/live-route-pinned.test.ts b/app/src/__tests__/live-route-pinned.test.ts index cbed1c1d..22ba8913 100644 --- a/app/src/__tests__/live-route-pinned.test.ts +++ b/app/src/__tests__/live-route-pinned.test.ts @@ -9,6 +9,7 @@ function routerPage(pageId: string): RouterPage { return { pageId, reportedAt: 1, + changedAt: 1, snapshot: { url: `/${pageId}`, queryParams: {}, diff --git a/app/src/__tests__/native-controls.test.ts b/app/src/__tests__/native-controls.test.ts index 95a82bee..7214a035 100644 --- a/app/src/__tests__/native-controls.test.ts +++ b/app/src/__tests__/native-controls.test.ts @@ -100,11 +100,12 @@ describe('browser-only controls', () => { }); it.each(['angular-native', 'nativescript'])( - 'hides the picker and the live views for a %s page, and keeps recording and the tree', + 'offers the device picker, hides the live views for a %s page, and keeps recording and the tree', async (platform) => { const fixture = await render(platform); const host = fixture.nativeElement as HTMLElement; expect(buttons(fixture)).not.toContain('Pick component on page'); + expect(buttons(fixture)).toContain('Pick component on device'); expect(buttons(fixture)).toContain('Record'); expect(host.querySelector('#cd-heading')).not.toBeNull(); expect(buttons(fixture)).not.toContain('Flash checks'); diff --git a/app/src/__tests__/network-payload-refetch.test.ts b/app/src/__tests__/network-payload-refetch.test.ts new file mode 100644 index 00000000..3c3e2cec --- /dev/null +++ b/app/src/__tests__/network-payload-refetch.test.ts @@ -0,0 +1,102 @@ +import { TestBed, type ComponentFixture } from '@angular/core/testing'; +import type { DevframeRpcClient } from 'devframe/client'; +import { afterEach, describe, expect, it, vi } from 'vitest'; + +const calls: [string, unknown][] = []; +let answer: unknown = { ok: true, found: true, entries: 2, status: 200 }; + +vi.mock('../rpc', () => ({ + rpcCall: async (_rpc: unknown, name: string, arg?: unknown) => { + calls.push([name, arg]); + return answer; + }, +})); + +const { NetworkInspector } = await import('../pages/network-inspector'); + +const page = { + pageId: 'p1', + url: 'http://localhost:4000/trips', + initialUrl: 'http://localhost:4000/trips', + title: 'Trips', + hydration: null, + calls: [], + reportedAt: 1, +}; + +function client( + actions: Record = {}, + payload: Record = { found: true, size: 7, entries: [] }, +): DevframeRpcClient { + const values: Record = { + http: { serverCalls: [], pages: [page], rules: [], ssrOverrides: [] }, + 'http-payloads': { pages: { p1: payload } }, + }; + const rpc = { + sharedState: (name: string) => + Promise.resolve({ value: () => values[name], on: () => () => {} }), + }; + return { + connectionMeta: { configs: { pangular: { actions } } }, + scope: () => ({ rpc }), + } as unknown as DevframeRpcClient; +} + +let fixture: ComponentFixture>; + +async function render(rpc: DevframeRpcClient) { + fixture = TestBed.createComponent(NetworkInspector); + fixture.componentRef.setInput('rpc', rpc); + await fixture.whenStable(); + await new Promise((resolve) => setTimeout(resolve)); + await fixture.whenStable(); + return fixture.nativeElement as HTMLElement; +} + +const button = (host: HTMLElement) => + host.querySelector('button[data-refetch-payload]')!; + +describe('NetworkInspector payload refetch', () => { + afterEach(() => { + fixture?.destroy(); + TestBed.resetTestingModule(); + calls.length = 0; + answer = { ok: true, found: true, entries: 2, status: 200 }; + }); + + it('asks the server to refetch the selected page and announces the result', async () => { + const host = await render(client()); + const refetch = button(host); + expect(refetch.textContent!.trim()).toBe('Refetch'); + expect(refetch.getAttribute('aria-describedby')).toBe('refetch-hint'); + refetch.click(); + await fixture.whenStable(); + expect(calls).toContainEqual(['request-http-payload-refetch', { pageId: 'p1' }]); + expect(host.querySelector('.toolbar [role="status"]')!.textContent).toBe( + 'Refetched: 2 entries.', + ); + }); + + it('reads out the reason when the refetch does nothing', async () => { + answer = { error: 'The page did not answer within 15s. Is the tab still open?' }; + const host = await render(client()); + button(host).click(); + await fixture.whenStable(); + expect(host.querySelector('.toolbar [role="status"]')!.textContent).toBe( + 'The page did not answer within 15s. Is the tab still open?', + ); + }); + + it('is off when HTTP actions are off, and says why', async () => { + const host = await render(client({ http: false })); + const refetch = button(host); + expect(refetch.disabled).toBe(true); + expect(refetch.getAttribute('aria-describedby')).toBe('http-writes-off refetch-hint'); + expect(host.querySelector('#http-writes-off')).not.toBeNull(); + }); + + it('marks a payload that came from a refetch', async () => { + const host = await render(client({}, { found: true, size: 7, entries: [], refetchedAt: 5 })); + expect(host.querySelector('[data-refetched]')!.textContent).toBe('Refetched'); + }); +}); diff --git a/app/src/__tests__/redaction-count.test.ts b/app/src/__tests__/redaction-count.test.ts new file mode 100644 index 00000000..aa37163b --- /dev/null +++ b/app/src/__tests__/redaction-count.test.ts @@ -0,0 +1,47 @@ +import type { Type } from '@angular/core'; +import { TestBed } from '@angular/core/testing'; +import { afterEach, describe, expect, it } from 'vitest'; +import { RedactionCount } from '../ui/redaction-count'; +import { StoreStateTree } from '../pages/store-state-tree'; + +function render(type: Type, inputs: Record) { + const fixture = TestBed.createComponent(type); + for (const [name, value] of Object.entries(inputs)) fixture.componentRef.setInput(name, value); + fixture.detectChanges(); + return fixture; +} + +describe('RedactionCount', () => { + afterEach(() => TestBed.resetTestingModule()); + + it('says how many values the redaction masked', () => { + const fixture = render(RedactionCount, { + value: { token: '[redacted]', user: { email: '[email]', name: 'Ada' } }, + }); + const line = (fixture.nativeElement as HTMLElement).querySelector('[data-redaction-count]')!; + expect(line.textContent!.replace(/\s+/g, ' ').trim()).toBe( + '2 values masked by redaction (secret names, tokens and emails).', + ); + }); + + it('shows nothing when nothing was masked', () => { + const fixture = render(RedactionCount, { value: { name: 'Ada' } }); + expect( + (fixture.nativeElement as HTMLElement).querySelector('[data-redaction-count]'), + ).toBeNull(); + }); + + it('marks a count past the budget as a lower bound', () => { + const fixture = render(RedactionCount, { + value: Array.from({ length: 30_000 }, () => '[redacted]'), + }); + const line = (fixture.nativeElement as HTMLElement).querySelector('[data-redaction-count]')!; + expect(line.textContent).toContain('At least 20000 values masked'); + }); + + it('shows the count above the store state tree', () => { + const fixture = render(StoreStateTree, { value: { auth: { token: '[redacted]' } } }); + const line = (fixture.nativeElement as HTMLElement).querySelector('[data-redaction-count]')!; + expect(line.textContent).toContain('1 value masked'); + }); +}); diff --git a/app/src/__tests__/route-diff.test.ts b/app/src/__tests__/route-diff.test.ts index 720cb3c9..f2478d3f 100644 --- a/app/src/__tests__/route-diff.test.ts +++ b/app/src/__tests__/route-diff.test.ts @@ -24,7 +24,7 @@ function nav(id: number, extra: Partial = {}): NavigationRecor } function page(navigations: NavigationRecord[]): RouterPage { - return { pageId: 'p1', reportedAt: 1, snapshot: null, navigations }; + return { pageId: 'p1', reportedAt: 1, changedAt: 1, snapshot: null, navigations }; } async function settle(fixture: ComponentFixture) { diff --git a/app/src/__tests__/route-preview.test.ts b/app/src/__tests__/route-preview.test.ts index 4ff0327a..7c8757dc 100644 --- a/app/src/__tests__/route-preview.test.ts +++ b/app/src/__tests__/route-preview.test.ts @@ -21,6 +21,7 @@ async function settle(fixture: ComponentFixture) { const page: RouterPage = { pageId: 'p1', reportedAt: 1, + changedAt: 1, snapshot: null, navigations: [], config: [{ id: '0', path: 'account', fullPath: '/account', kind: 'component', component: 'A' }], diff --git a/app/src/__tests__/route-timeline-clear.test.ts b/app/src/__tests__/route-timeline-clear.test.ts index 9bf54c96..f2a87368 100644 --- a/app/src/__tests__/route-timeline-clear.test.ts +++ b/app/src/__tests__/route-timeline-clear.test.ts @@ -24,7 +24,7 @@ function nav(id: number, url: string, extra: Partial = {}): Na } function page(extra: Partial = {}): RouterPage { - return { pageId: 'p1', reportedAt: 1, snapshot: null, navigations: [], ...extra }; + return { pageId: 'p1', reportedAt: 1, changedAt: 1, snapshot: null, navigations: [], ...extra }; } async function settle(fixture: ComponentFixture) { diff --git a/app/src/__tests__/route-timeline-extras.test.ts b/app/src/__tests__/route-timeline-extras.test.ts index 4062dd09..1d7fa73f 100644 --- a/app/src/__tests__/route-timeline-extras.test.ts +++ b/app/src/__tests__/route-timeline-extras.test.ts @@ -35,6 +35,7 @@ function mount(page: Partial, call?: (name: string, arg: unknown) => fixture.componentRef.setInput('page', { pageId: 'p1', reportedAt: 1, + changedAt: 1, snapshot: null, navigations: [], ...page, diff --git a/app/src/__tests__/route-timeline-phases.test.ts b/app/src/__tests__/route-timeline-phases.test.ts index 3d7195f5..841ff7c0 100644 --- a/app/src/__tests__/route-timeline-phases.test.ts +++ b/app/src/__tests__/route-timeline-phases.test.ts @@ -25,6 +25,7 @@ describe('RouteTimeline phase colors', () => { const page: RouterPage = { pageId: 'p1', reportedAt: 1, + changedAt: 1, snapshot: null, navigations: [ { diff --git a/app/src/__tests__/router-panels.test.ts b/app/src/__tests__/router-panels.test.ts index a008c25f..b1ffbccc 100644 --- a/app/src/__tests__/router-panels.test.ts +++ b/app/src/__tests__/router-panels.test.ts @@ -29,6 +29,7 @@ function page(extra: Partial = {}): RouterPage { return { pageId: 'p1', reportedAt: 1, + changedAt: 1, snapshot: { url: '/users/42', queryParams: {}, diff --git a/app/src/pages/component-tree.ts b/app/src/pages/component-tree.ts index b781febe..7c91ef80 100644 --- a/app/src/pages/component-tree.ts +++ b/app/src/pages/component-tree.ts @@ -61,6 +61,7 @@ import { LeaksSection, type LeaksPage } from './leaks-section'; import { VirtualWindow } from '../ui/virtual-window'; import { keepBelowSticky, stickyClearance } from '../ui/sticky-clearance'; import { SearchField } from '../ui/search-field'; +import { RedactionCount } from '../ui/redaction-count'; interface SourceComponent { selector: string; @@ -228,6 +229,7 @@ function storedDirectiveHosts(): boolean { selector: 'app-component-tree', imports: [ SearchField, + RedactionCount, NgTemplateOutlet, Select, CdRecording, @@ -317,20 +319,18 @@ function storedDirectiveHosts(): boolean { Collapse all - @if (!native()) { - - } +

{{ announcement() }}

@@ -604,6 +604,7 @@ function storedDirectiveHosts(): boolean { @if (shownValues(); as v) { + @if (propQuery() && !v.count) {

@@ -1907,7 +1908,13 @@ export class ComponentTree { readonly focusId = signal(null); /** The full text of the focused row when its name or tag is cut off, shown below the row. */ readonly nameTip = signal<{ text: string; top: number } | null>(null); - readonly pickLabel = computed(() => (this.picking() ? 'Cancel pick' : 'Pick component on page')); + readonly pickLabel = computed(() => + this.picking() + ? 'Cancel pick' + : this.native() + ? 'Pick component on device' + : 'Pick component on page', + ); private readonly bridge = inject(ExtensionBridge); readonly actionMessage = linkedSignal({ source: this.selectedId, @@ -2300,8 +2307,7 @@ export class ComponentTree { } if (command.kind === 'pick') { untracked(() => { - if (this.native()) this.say('Picking needs a page in a browser.'); - else if (!this.picking()) void this.pick(); + if (!this.picking()) void this.pick(); this.commandHandled.emit(); }); return; @@ -2615,7 +2621,9 @@ export class ComponentTree { this.pickPageId = this.page()?.pageId ?? null; this.picking.set(true); this.say( - 'Click a component in the app, or use the arrow keys to move between components and Enter to pick one. Press Escape to cancel.', + this.native() + ? 'Tap a component on the device, or use the arrow keys to move between components and Enter to pick one. Press Escape to cancel.' + : 'Click a component in the app, or use the arrow keys to move between components and Enter to pick one. Press Escape to cancel.', ); const result = (await client .scope('pangular') diff --git a/app/src/pages/forms-inspector.ts b/app/src/pages/forms-inspector.ts index 76c91460..d054e923 100644 --- a/app/src/pages/forms-inspector.ts +++ b/app/src/pages/forms-inspector.ts @@ -39,6 +39,7 @@ import { type FormSetupError, type WebMcpPage, } from './forms-types'; +import { RedactionCount } from '../ui/redaction-count'; type Tab = 'fields' | 'schema' | 'timeline' | 'submit' | 'lint'; @@ -71,6 +72,7 @@ function countFields(node: FormFieldNode): number { @Component({ selector: 'app-forms-inspector', imports: [ + RedactionCount, FormsActionBar, FormsExportTest, FormsFields, @@ -248,6 +250,7 @@ function countFields(node: FormFieldNode): number { > @switch (tab_()) { @case ('fields') { + {{ pattern }}

} +
         

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) {
@@ -1311,10 +1333,14 @@ const HTTP_STATUS_OPTIONS: SelectOption[] = [

{{ 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) { @@ -2179,6 +2205,17 @@ const HTTP_STATUS_OPTIONS: SelectOption[] = [ 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); } @@ -2335,6 +2372,7 @@ export class NetworkInspector { 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; @@ -2954,6 +2992,28 @@ export class NetworkInspector { ); } + /** 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. */ private announce(text: string) { if (this.message() !== text) { diff --git a/app/src/pages/route-current.ts b/app/src/pages/route-current.ts index 169b70fa..cec94aad 100644 --- a/app/src/pages/route-current.ts +++ b/app/src/pages/route-current.ts @@ -410,8 +410,9 @@ export class RouteCurrent { } guardList(route: ActiveRoute) { - return Object.entries(route.guards ?? {}).flatMap(([kind, names]) => - names.map((name) => `${kind} ${name}`), + return Object.entries(route.guards ?? {}).flatMap( + ([kind, names]: [string, string[] | undefined]) => + (names ?? []).map((name) => `${kind} ${name}`), ); } diff --git a/app/src/pages/route-tree.ts b/app/src/pages/route-tree.ts index cd0628bf..a8ca6912 100644 --- a/app/src/pages/route-tree.ts +++ b/app/src/pages/route-tree.ts @@ -542,8 +542,9 @@ export class RouteTree { } guardList(node: RouteNode) { - return Object.entries(node.guards ?? {}).flatMap(([kind, names]) => - names.map((name) => `${kind} ${name}`), + return Object.entries(node.guards ?? {}).flatMap( + ([kind, names]: [string, string[] | undefined]) => + (names ?? []).map((name) => `${kind} ${name}`), ); } diff --git a/app/src/pages/router-types.ts b/app/src/pages/router-types.ts index 41050845..ea96ddf6 100644 --- a/app/src/pages/router-types.ts +++ b/app/src/pages/router-types.ts @@ -1,131 +1,42 @@ import type { DevframeRpcClient } from 'devframe/client'; import { rpcTry } from '../rpc'; +import type { + NavigationCalls, + RouteNode, + RouterAppReport, + RouterLintResult, + RouterPage, + ScannedRoute, +} from '@pangular-inspector/devtools/internal/types'; -export interface ActiveRoute { - path: string; - url: string; - outlet: string; - component?: string; - title?: string; - ownTitle?: boolean; - params: Record; - data: Record; - paramSources?: Record; - dataSources?: Record; - guards?: Record; - resolvers?: string[]; - lazy?: boolean; - children: ActiveRoute[]; -} - -export interface GuardRun { - guard: string; - kind: string; - route: string; - result: string; - ms: number; -} - -export interface NavigationRecord { - id: number; - url: string; - trigger: string; - startedAt: number; - endedAt?: number; - outcome: string; - finalUrl?: string; - from?: string; - extras?: string[]; - caller?: string; - phases?: Record; - redirectedFrom?: number; - redirectTo?: string; - redirectKind?: string; - guards?: { names: string[]; passed?: boolean; ms?: number }; - resolvers?: { names: string[]; ms?: number }; - checked?: { activate: string[]; deactivate: string[] }; - runs?: GuardRun[]; - lazyLoaded?: string[]; - reused?: string[]; - requests?: { count: number; urls: string[] }; - warnings?: string[]; - errorCode?: string; - errorHandler?: string; - scroll?: string; - title?: string; - reason?: string; - code?: string; - beforeConnect?: boolean; - earlier?: number; - probe?: boolean; - routes?: MatchedRoute[]; - /** The target came from a query param of the URL: a possible open redirect. */ - queryRedirect?: { param: string; by: string }; - /** The browser Navigation API event it came with. */ - platform?: { type: string; userInitiated?: boolean }; -} +export type { + ActiveRoute, + DiffChange, + GuardRun, + LinkInfo, + LintFinding, + LoopHop, + MatchedRoute, + NavigationCalls, + NavigationDiffResult, + NavigationLoop, + NavigationRecord, + OutletInfo, + PlatformNavigation, + RouteNode, + RoutePreview, + RouterPage, + RouterSetup, +} from '@pangular-inspector/devtools/internal/types'; -/** A browser Navigation API `navigate` event the page recorded. */ -export interface PlatformNavigation { - at: number; - type: string; - url: string; - userInitiated?: boolean; - hashChange?: boolean; - navigationId?: number; - result?: 'succeeded' | 'failed'; - error?: string; -} +/** A route from the source scan (`get-routes` RPC). */ +export type SourceRoute = ScannedRoute; -export interface LoopHop { - id: number; - from: string; - to: string; - via: string; - by?: string; -} +/** Lint findings for the panel, or why no check could run (`router-lint` RPC). */ +export type LintResult = RouterLintResult; -export interface NavigationLoop { - kind: 'redirect' | 'burst' | 'config'; - ids: number[]; - cycle: string[]; - hops: LoopHop[]; - guards: string[]; - bounces: number; - end: string; -} - -export interface RouteNode { - id: string; - path: string; - fullPath: string; - kind: string; - component?: string; - redirectTo?: string; - pathMatch?: string; - outlet?: string; - lazy?: 'unloaded' | 'loaded'; - matcher?: string; - guards?: Record; - resolvers?: string[]; - title?: string; - providers?: number; - children?: RouteNode[]; -} - -export interface SourceRoute { - path: string; - fullPath: string; - kind: 'page' | 'group' | 'redirect' | 'wildcard'; - component?: string; - redirectTo?: string; - title?: string; - guards?: Record; - resolvers?: string[]; - hasChildren: boolean; - file: string; - line?: number; -} +/** An HttpClient call as the `router-http` RPC returns it. */ +export type TimelineCall = NavigationCalls['during'][number]; export function sourceLocation(source: SourceRoute): string { return source.line ? `${source.file}:${source.line}` : source.file; @@ -143,93 +54,8 @@ export function sourceOf(node: RouteNode, sources: SourceRoute[]): SourceRoute | ); } -export interface OutletInfo { - outlet: string; - route?: string; - component?: string; - element?: string; - /** Stable id of the routed component's host element, as the component tree uses it. */ - devtoolsId?: string; - activated: boolean; - detached?: boolean; - inputs?: { input: string; source: string }[]; - data?: string; - children?: OutletInfo[]; -} - -export interface LinkInfo { - text: string; - href?: string; - active?: boolean; - linkActive?: boolean; - exact?: boolean; - ariaCurrent?: string; -} - -export interface RouterSetup { - mode: 'full' | 'events-only'; - setupKind: string; - routers: number; - angularVersion?: string; - options: { name: string; value: string; set: boolean }[]; - features: Record; - strategies: Record; - baseHref?: string; - hydrated?: number; -} - -export interface RouterPage { - pageId: string; - reportedAt: number; - changedAt?: number; - snapshot: { - url: string; - queryParams: Record; - fragment: string | null; - root: ActiveRoute; - browserUrl?: string; - urlDrift?: boolean; - title?: string; - pending?: { id: number; url: string }; - } | null; - navigations: NavigationRecord[]; - dropped?: number; - generation?: number; - config?: RouteNode[]; - configTruncated?: number; - activeIds?: string[]; - setup?: RouterSetup; - outlets?: OutletInfo[]; - links?: LinkInfo[]; - /** Links past the first 100 that the page found but did not list. */ - linksTruncated?: number; - preloads?: { path: string; startedAt: number; ms?: number; failed?: boolean }[]; - instrumented?: boolean; - loops?: NavigationLoop[]; - platformNavigations?: PlatformNavigation[]; - /** Every Angular app on the page with a Router, when there is more than one. */ - apps?: RouterApp[]; - /** Set on the view of one app of a page that runs several (`routerAppView`). */ - appId?: string; -} - /** One Angular app with its own Router on a page that runs several. */ -export interface RouterApp { - id: string; - name: string; - selector: string; - /** The app the top level of the page describes. */ - primary?: true; - snapshot?: RouterPage['snapshot']; - navigations?: NavigationRecord[]; - dropped?: number; - generation?: number; - config?: RouteNode[]; - configTruncated?: number; - activeIds?: string[]; - setup?: RouterSetup; - loops?: NavigationLoop[]; -} +export type RouterApp = RouterAppReport; /** The apps of a page that runs more than one Angular app with a Router, else none. */ export function routerAppsOf(page: RouterPage | null | undefined): RouterApp[] { @@ -263,86 +89,6 @@ export function routerAppView(page: RouterPage, appId: string | null): RouterPag }; } -export interface LintFinding { - rule: string; - severity: 'error' | 'warning' | 'info'; - route: string; - message: string; - fix: string; - angular: string; -} - -export type LintResult = - | { checked: true; findings: LintFinding[] } - | { checked: false; reason: 'no-page' | 'events-only' | 'no-config' }; - -/** A field that differs between two navigations (`router-diff` RPC). */ -export interface DiffChange { - field: string; - before?: string; - after?: string; -} - -export type NavigationDiffResult = - | { - a: number; - b: number; - sections: { title: string; changes: DiffChange[] }[]; - same: string[]; - notes: string[]; - } - | { error: string }; - -/** One activated route kept on a navigation record. */ -export interface MatchedRoute { - path: string; - outlet?: string; - component?: string; - params?: Record; - data?: Record; -} - -/** An HttpClient call as the `router-http` RPC returns it. */ -export interface TimelineCall { - id: string; - url: string; - method: string; - status: number; - durationMs: number; - at: number; - cancelled?: boolean; - error?: string; -} - -/** The HTTP inspector's calls of one navigation (`router-http` RPC). */ -export interface NavigationCalls { - during: TimelineCall[]; - after: TimelineCall[]; -} - -/** What going to a URL would do (`router-preview` RPC). */ -export interface RoutePreview { - url: string; - finalUrl: string; - matched: boolean; - hops: { from: string; to: string; route: string }[]; - chain: { - path: string; - component?: string; - outlet?: string; - lazy?: string; - title?: string; - source?: string; - active?: boolean; - }[]; - params: Record; - steps: { phase: string; items: string[] }[]; - renderMode?: { mode: string; path: string; file: string }; - stopped?: string; - notes: string[]; - nearest: string[]; -} - export const routerCall = rpcTry; export function isReplayableUrl(url: string): boolean { diff --git a/app/src/pages/store-state-tree.ts b/app/src/pages/store-state-tree.ts index c085f6be..1e0d59e8 100644 --- a/app/src/pages/store-state-tree.ts +++ b/app/src/pages/store-state-tree.ts @@ -10,6 +10,7 @@ import { } from '@angular/core'; import { short } from './store-types'; import { SearchField } from '../ui/search-field'; +import { RedactionCount } from '../ui/redaction-count'; /** The serializer's type marker: a tagged value shows as one leaf. */ const TYPE = '@type'; @@ -112,8 +113,9 @@ export function stateRows( */ @Component({ selector: 'app-state-tree', - imports: [SearchField], + imports: [SearchField, RedactionCount], template: ` +
0) { +

+ {{ result().capped ? 'At least ' : '' }}{{ result().count }} + {{ result().count === 1 ? 'value' : 'values' }} masked + {{ why() }} +

+ } + `, + styles: ` + :host { + display: block; + } + .count { + margin: 0 0 8px; + color: var(--text-2); + font-size: 12px; + line-height: 1.5; + font-variant-numeric: tabular-nums; + } + .why { + color: var(--text-2); + } + `, +}) +export class RedactionCount { + /** What the view shows, already masked by the server or the page. */ + readonly value = input(undefined); + /** The second half of the line, saying where the masks come from. */ + readonly why = input('by redaction (secret names, tokens and emails).'); + + protected readonly result = computed(() => countRedacted(this.value())); +} diff --git a/app/tsconfig.json b/app/tsconfig.json index f1da4410..786965b5 100644 --- a/app/tsconfig.json +++ b/app/tsconfig.json @@ -23,7 +23,8 @@ "./**/*.ts", "../packages/devtools/src/config.ts", "../packages/devtools/src/cd-data.ts", - "../packages/devtools/src/http-data.ts" + "../packages/devtools/src/http-data.ts", + "../packages/devtools/src/redaction-count.ts" ], "exclude": ["node_modules", "vite.config.ts", "vitest.config.ts"] } diff --git a/apps/docs/src/content/agents/mcp-server.md b/apps/docs/src/content/agents/mcp-server.md index 599ebaa7..84b87ef5 100644 --- a/apps/docs/src/content/agents/mcp-server.md +++ b/apps/docs/src/content/agents/mcp-server.md @@ -275,7 +275,7 @@ Every tool answers with one plain text block, the answer as written: markdown fo ### Read and action tools -Each tool has a safety tier: `read`, `action` or `destructive`. The server marks `read` tools as read-only for your client, and `destructive` tools as destructive. Twenty-five tools act on the app, so the server does not mark them read-only: +Each tool has a safety tier: `read`, `action` or `destructive`. The server marks `read` tools as read-only for your client, and `destructive` tools as destructive. Twenty-six tools act on the app, so the server does not mark them read-only: | Tool | Tier | Reference | | -------------------------- | ------------- | --------------------------------------------------------------------------------- | @@ -291,6 +291,7 @@ Each tool has a safety tier: `read`, `action` or `destructive`. The server marks | `remove-http-rule` | `action` | [Fault rules](./tools.md#fault-rules) | | `set-ssr-override` | `action` | [TransferState and SSR overrides](./tools.md#transferstate-and-ssr-overrides) | | `remove-ssr-override` | `action` | [TransferState and SSR overrides](./tools.md#transferstate-and-ssr-overrides) | +| `refetch-transfer-state` | `action` | [TransferState and SSR overrides](./tools.md#transferstate-and-ssr-overrides) | | `set-component-property` | `action` | [Edit a component](./tools.md#edit-a-component) | | `set-signal` | `action` | [Edit a component](./tools.md#edit-a-component) | | `load-defer-block` | `action` | [load-defer-block](./tools.md#load-defer-block) | diff --git a/apps/docs/src/content/agents/tool-index.md b/apps/docs/src/content/agents/tool-index.md index ccdfc2cf..9ce61af2 100644 --- a/apps/docs/src/content/agents/tool-index.md +++ b/apps/docs/src/content/agents/tool-index.md @@ -110,6 +110,7 @@ Clients see each tool as `pangular_`. See [Names](./tools.md#names). Plugi | `list-http-rules` | SSR & HTTP | read | No | `inspectors.http` | [Fault rules](./tools.md#fault-rules) | | `list-ssr-overrides` | SSR & HTTP | read | No | `inspectors.http` | [TransferState and SSR overrides](./tools.md#transferstate-and-ssr-overrides) | | `list-ssr-requests` | SSR & HTTP | read | No | `inspectors.http` | [SSR & HTTP](./tools.md#ssr-http) | +| `refetch-transfer-state` | SSR & HTTP | action | No | `inspectors.http`, or blocking `actions.http` | [TransferState and SSR overrides](./tools.md#transferstate-and-ssr-overrides) | | `remove-http-rule` | SSR & HTTP | action | No | `inspectors.http`, or blocking `actions.http` | [Fault rules](./tools.md#fault-rules) | | `remove-ssr-override` | SSR & HTTP | action | No | `inspectors.http`, or blocking `actions.http` | [TransferState and SSR overrides](./tools.md#transferstate-and-ssr-overrides) | | `set-http-rule` | SSR & HTTP | action | No | `inspectors.http`, or blocking `actions.http` | [Fault rules](./tools.md#fault-rules) | diff --git a/apps/docs/src/content/agents/tools.md b/apps/docs/src/content/agents/tools.md index d3593229..6c087222 100644 --- a/apps/docs/src/content/agents/tools.md +++ b/apps/docs/src/content/agents/tools.md @@ -4,7 +4,7 @@ description: Every agent tool the devtools expose, grouped by inspector, with wh --- - One hundred and thirteen tools, grouped by inspector. Each one answers a question you would otherwise answer by clicking through the panel. + One hundred and fourteen tools, grouped by inspector. Each one answers a question you would otherwise answer by clicking through the panel. # Tools @@ -105,19 +105,19 @@ The URL comes from the HTTP or router report. A page that sends neither (no rout Gives one page's full picture in one bounded markdown answer, for an agent that wants everything at once or a bug report. Reads: page. Each section comes from the tool named under its heading, with the same masking, so call that tool for the rest. -| Section | What it holds | Full answer | -| ------------- | ---------------------------------------------------------- | ----------------------- | -| `page` | Page id, URL, title, platform, Angular version, inspectors | `list-pages` | -| `components` | The component outline | `list-components` | -| `route` | The URL and the active route tree | `inspect-route` | -| `navigations` | Recent navigations, one line each, newest first | `explain-navigation` | -| `http` | HttpClient calls, newest first | `list-http-calls` | -| `errors` | Error groups, most recent first | `list-errors` | -| `console` | Console calls, newest first | `list-console` | -| `forms` | Each form with its status and error count | `inspect-forms` | -| `signals` | The signal graph, without Angular's own nodes and history | `inspect-signals` | -| `stores` | NgRx stores and Redux DevTools stores | `ngrx-inspect-store` | -| `queries` | TanStack Query queries and mutations | `tanstack-list-queries` | +| Section | What it holds | Full answer | +| ------------- | ------------------------------------------------------------------------------- | ----------------------- | +| `page` | Page id, URL, title, platform, Angular version, inspectors | `list-pages` | +| `components` | The component outline | `list-components` | +| `route` | The URL and the active route tree | `inspect-route` | +| `navigations` | Recent navigations, one line each, newest first | `explain-navigation` | +| `http` | HttpClient calls, newest first, and a line that counts the `lint-http` findings | `list-http-calls` | +| `errors` | Error groups, most recent first | `list-errors` | +| `console` | Console calls, newest first | `list-console` | +| `forms` | Each form with its status and error count | `inspect-forms` | +| `signals` | The signal graph, without Angular's own nodes and history | `inspect-signals` | +| `stores` | NgRx stores and Redux DevTools stores | `ngrx-inspect-store` | +| `queries` | TanStack Query queries and mutations | `tanstack-list-queries` | | Argument | Required | What it is | | ---------- | -------- | ---------------------------------------------------------------------- | @@ -170,14 +170,14 @@ Without `url`, `navigation` holds as soon as no navigation is in progress, which Every tool has one of three safety tiers. The server sends the tier to your client as the tool's read-only and destructive hints. -| Tier | What the tool can do | Tools | -| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `read` | Reads your source, the page or the server. `highlight` only shows and selects a component. | Every other tool, and every resource | -| `action` | Changes the running page, the server's fault rules and SSR overrides, or what the page records, or runs a Nitro task. A reload or the next call undoes most of it, but a Nitro task can change data for good. | `navigate`, `probe-route`, `record-guards`, `ngrx-dispatch`, `ngrx-restore`, `tanstack-run-query`, `run-form-action`, `fill-form`, `set-http-rule`, `remove-http-rule`, `set-ssr-override`, `remove-ssr-override`, `set-component-property`, `set-signal`, `load-defer-block`, `watch-signal`, `record-pipes`, `track-subscriptions`, `record-change-detection`, `analog-run-nitro-task` and `audit` | -| `destructive` | Can lose data: it erases recordings or Store DevTools history, deletes the Nitro cache, or sends writes to your own API routes. | `clear-recordings`, `analog-run-api`, `analog-purge-nitro-cache` and `ngrx-store-devtools` | +| Tier | What the tool can do | Tools | +| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `read` | Reads your source, the page or the server. `highlight` only shows and selects a component. | Every other tool, and every resource | +| `action` | Changes the running page, the server's fault rules and SSR overrides, or what the page records, or runs a Nitro task. A reload or the next call undoes most of it, but a Nitro task can change data for good. | `navigate`, `probe-route`, `record-guards`, `ngrx-dispatch`, `ngrx-restore`, `tanstack-run-query`, `run-form-action`, `fill-form`, `set-http-rule`, `remove-http-rule`, `set-ssr-override`, `remove-ssr-override`, `refetch-transfer-state`, `set-component-property`, `set-signal`, `load-defer-block`, `watch-signal`, `record-pipes`, `track-subscriptions`, `record-change-detection`, `analog-run-nitro-task` and `audit` | +| `destructive` | Can lose data: it erases recordings or Store DevTools history, deletes the Nitro cache, or sends writes to your own API routes. | `clear-recordings`, `analog-run-api`, `analog-purge-nitro-cache` and `ngrx-store-devtools` | - The twenty-five action and destructive tools act on the app. Your client can ask you before it runs them. + The twenty-six action and destructive tools act on the app. Your client can ask you before it runs them. When the hub is mounted, each finished call of an `action` or `destructive` tool posts an `Agent ran ` message to the hub, so you can see what the agent changed. `record-change-detection` posts only when it starts, stops or clears a recording, or turns a live view on or off, and `audit` only when it runs axe. See [Messages and badges](../getting-started/popup-and-hub.md#messages-and-badges). @@ -962,23 +962,24 @@ These tools read the HttpClient calls that `withPangular()` recorded and the SSR These tools read and change the rules of [Fault injection](../inspectors/ssr-http.md#fault-injection), the same rules the panel shows. Rules live on the devtools server and apply to every connected tab, so the tools take no `page`. Reads: page. -| Tool | What it does | Arguments | -| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | -| `list-http-rules` | Lists the rules in match order: id, on or off, method, URL pattern, where it applies (client, SSR or both) and its effect (status, delay, mock body). | none | -| `set-http-rule` | Adds a rule, or replaces the rule with `id`, and returns the saved rules. | `pattern` (required), `id`, `method`, `target`, `status`, `delayMs`, `body`, `chance`, `enabled` | -| `remove-http-rule` | Removes the rule with `id` and returns the rules left. | `id` (required) | +| Tool | What it does | Arguments | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| `list-http-rules` | Lists the rules in match order: id, on or off, method, URL pattern, where it applies (client, SSR or both) and its effect (status, delay, mock body). | none | +| `set-http-rule` | Adds a rule, or replaces the rule with `id`, and returns the saved rules. With `preset`, adds the rules of a built-in preset instead. | `pattern` (required without `preset`), `id`, `method`, `target`, `status`, `delayMs`, `body`, `chance`, `enabled`, `preset` | +| `remove-http-rule` | Removes the rule with `id` and returns the rules left. | `id` (required) | -`set-http-rule` checks its input the way the panel's form does. `pattern` is a substring or a glob where `*` matches anything, up to 500 characters. A leading `^` anchors it at the start of the URL path. `target` is `client`, `server` or `both` (the default). `status` is one of the statuses the panel lists, or `0` to fail the request as a network error. `delayMs` runs from 0 to 10000. `chance` is a whole percent from 1 to 99: the rule then applies to that share of matching requests, rolled per request, and the others go on to the next rule. `body` is JSON text or a JSON value, up to 100,000 characters. A rule needs a `status`, a `delayMs` or a `body`, and there can be at most 50 rules. A rule that breaks one of these is refused with the reason, and nothing changes. A rule that applies to SSR takes effect on the next page load. Patterns and bodies in the answers are masked like recorded calls. The panel's presets are plain rules, so an agent sets the same ones: Offline is `pattern: "*", target: "client", status: 0`, Slow 3G is `delayMs: 2000` and Flaky is `status: 503, chance: 30`. +`set-http-rule` checks its input the way the panel's form does. `pattern` is a substring or a glob where `*` matches anything, up to 500 characters. A leading `^` anchors it at the start of the URL path. `target` is `client`, `server` or `both` (the default). `status` is one of the statuses the panel lists, or `0` to fail the request as a network error. `delayMs` runs from 0 to 10000. `chance` is a whole percent from 1 to 99: the rule then applies to that share of matching requests, rolled per request, and the others go on to the next rule. `body` is JSON text or a JSON value, up to 100,000 characters. A rule needs a `status`, a `delayMs` or a `body`, and there can be at most 50 rules. A rule that breaks one of these is refused with the reason, and nothing changes. A rule that applies to SSR takes effect on the next page load. Patterns and bodies in the answers are masked like recorded calls. `preset` adds the rules of one of the panel's presets after the existing ones, as plain rules that show, change and go away like any other: `offline` is `pattern: "*", target: "client", status: 0`, `slow-3g` is the same with `delayMs: 2000` and `flaky` with `status: 503, chance: 30`. Pass `preset` alone. With any other rule argument it is refused, and so is a preset that would go past 50 rules. With [`actions.http`](../getting-started/configuration.md#actions) set to `false`, `set-http-rule` and `remove-http-rule` are dropped, and `list-http-rules` says that no rule applies. ### TransferState and SSR overrides Action -These tools read the [TransferState payload](../inspectors/ssr-http.md#transferstate-payload) a page was served with, and read and change the [SSR overrides](../inspectors/ssr-http.md#ssr-overrides), the same overrides the panel shows. Overrides live on the devtools server and apply to every page load that matches, so the override tools take no `page`. Reads: page. +These tools read and refetch the [TransferState payload](../inspectors/ssr-http.md#transferstate-payload) a page was served with, and read and change the [SSR overrides](../inspectors/ssr-http.md#ssr-overrides), the same overrides the panel shows. Overrides live on the devtools server and apply to every page load that matches, so the override tools take no `page`. Reads: page. | Tool | What it does | Arguments | | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | | `inspect-transfer-state` | Lists the TransferState keys of a page with their kind (HTTP transfer cache, app state, hydration data, Analog) and size, or shows one key's value. | `page`, `key`, `search`, `limit` | +| `refetch-transfer-state` | Renders the page's URL again on the server, with the tab's cookies, and replaces the payload the panel and `inspect-transfer-state` show. | `page` | | `list-ssr-overrides` | Lists the overrides: id, on or off, kind, page pattern and effect. | none | | `set-ssr-override` | Adds an override, or replaces the one with `id`, and returns the saved overrides. | `kind` (required), `pattern` (required), `id`, `message`, `key`, `value`, `enabled` | | `remove-ssr-override` | Removes the override with `id` and returns the overrides left. | `id` (required) | @@ -995,7 +996,9 @@ These tools read the [TransferState payload](../inspectors/ssr-http.md#transfers `inspect-transfer-state` reads the default page among those that reported a payload unless `page` names another. `search` keeps keys and cached URLs that contain the text, and `limit` defaults to 50 (at most 500). The values are the masked and clipped copy the panel shows, so read them to find a key, and type the full value for `state-edit`. An HttpClient entry holds `b` (body), `s` (status), `st` (status text), `u` (URL) and `rt` (response type). Above the key list, it warns when the payload is over 100 KB, with its three largest entries, and names any URL the transfer cache stored under more than one key. -With [`actions.http`](../getting-started/configuration.md#actions) set to `false`, `set-ssr-override` and `remove-ssr-override` are dropped, and `list-ssr-overrides` says that no override applies. +`refetch-transfer-state` asks the tab to fetch its own URL with its cookies and `cache: "no-store"`, and reads the payload out of the HTML the server sends. The HTML is parsed into a detached document, so its scripts don't run and the tab does not reload. The refetched payload is masked like the first one, and the panel marks it **Refetched** until the tab reloads. It answers with the entry count and the key list, or refuses when no page reports HTTP data, the server sends no HTML or the tab doesn't answer within 15 seconds. On a platform without `fetch` or an HTML parser, such as a native app, it refuses. + +With [`actions.http`](../getting-started/configuration.md#actions) set to `false`, `set-ssr-override`, `remove-ssr-override` and `refetch-transfer-state` are dropped, and `list-ssr-overrides` says that no override applies. ### Clear recordings Destructive diff --git a/apps/docs/src/content/contributing/chrome-extension.md b/apps/docs/src/content/contributing/chrome-extension.md index 39fbaeba..4d8219db 100644 --- a/apps/docs/src/content/contributing/chrome-extension.md +++ b/apps/docs/src/content/contributing/chrome-extension.md @@ -79,6 +79,29 @@ If you change `panel.html`, `panel-bridge.js` or a status message, run `pnpm tes After a rebuild, click the reload icon on the extension card, then reopen DevTools. +## Build for Firefox + +```bash +pnpm extension:build:firefox +``` + +This runs `extension:build`, then copies `extension/` to `dist/extension-firefox` with a Firefox manifest. Nothing else in the copy changes. `scripts/extension-firefox.mjs` makes these changes to the manifest: + +| Change | Why | +| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ | +| Drops `key` and `minimum_chrome_version` | Only Chrome reads them. | +| Adds `browser_specific_settings.gecko` | Firefox needs the add-on ID (`pangular-inspector@pangular-inspector.dev`) and the oldest version, 140. | +| Declares `data_collection_permissions: { required: ["none"] }` | Firefox asks every add-on what it collects. The extension sends data only to the devtools server. | +| Turns `background.service_worker` into `scripts` | Firefox runs background scripts, not a service worker. The manifest has no background today. | + +`dist/` is not committed, and CI does not build the Firefox copy. `extension-firefox.test.ts` checks the manifest it writes. + +To try it, open `about:debugging#/runtime/this-firefox`, click **Load Temporary Add-on** and pick `dist/extension-firefox/manifest.json`. Then open the Firefox developer tools on an Angular app. + + + Firefox gives an extension a moz-extension:// origin with an ID of its own on each install, so the devtools server does not trust it the way it trusts the Chrome extension ID. If the panel says the server refused the request, add the origin it names to allowedOrigins. + + ## Package for the Chrome Web Store ```bash diff --git a/apps/docs/src/content/contributing/development.md b/apps/docs/src/content/contributing/development.md index 60eed746..98872929 100644 --- a/apps/docs/src/content/contributing/development.md +++ b/apps/docs/src/content/contributing/development.md @@ -154,6 +154,7 @@ pnpm test:axe # axe check of every panel page (needs Chrom pnpm test:axe:extension # axe check of the extension panel (after pnpm test:axe) pnpm test:coverage # Package and panel tests with v8 coverage, into dist/coverage pnpm extension:build # Chrome extension +pnpm extension:build:firefox # Firefox copy of the extension, into dist/extension-firefox pnpm skills:check # Agent skills and roles in .claude/ pnpm commit:check # Commit messages on your branch ``` @@ -247,12 +248,12 @@ To reproduce a job, add the same `overrides` block to `pnpm-workspace.yaml`, run ### Pull request checks -Two more workflows run on pull requests. Only a pull request title that breaks the commit format fails one; everything else they find is a warning. +Two more workflows run on pull requests. A pull request title or a commit message that breaks the commit format fails `Commit message`. `Docs check` only warns. -| Workflow | File | What it checks | -| ---------------- | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Commit message` | `.github/workflows/commit-message.yml` | The pull request title and every commit message. The title becomes the commit on `main` when the pull request is squash merged, so a bad title fails the check. | -| `Docs check` | `.github/workflows/docs-check.yml` | That a change to `packages/devtools/src/`, `app/src/` or the top-level files in `extension/` also changes a page in `apps/docs/src/content`. Tests don't count. | +| Workflow | File | What it checks | +| ---------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Commit message` | `.github/workflows/commit-message.yml` | The pull request title and every commit message. The title becomes the commit on `main` when the pull request is squash merged. A bad title or commit fails the check. | +| `Docs check` | `.github/workflows/docs-check.yml` | That a change to `packages/devtools/src/`, `app/src/` or the top-level files in `extension/` also changes a page in `apps/docs/src/content`. Tests don't count. | If a code change needs no docs change, add the `no-docs` label to the pull request and say why in the description. The `Docs check` workflow then skips the warning. diff --git a/apps/docs/src/content/getting-started/angular-native.md b/apps/docs/src/content/getting-started/angular-native.md index 0492e186..e8bd1f96 100644 --- a/apps/docs/src/content/getting-started/angular-native.md +++ b/apps/docs/src/content/getting-started/angular-native.md @@ -165,27 +165,26 @@ If the app reports to a hub (Express or the Vite plugin) instead, pick the **Ang ## What it shows -| Tab | On Angular Native | -| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Components | The component tree, paths and the detail panel. Pointing at a component in the panel outlines it on the device. **Change detection** records cycles with their causes and OnPush hints, and **Leaks** lists effects and subscriptions, with navigations counted from the app's Router. | -| Signals | The signal graph of the selected component, or of the first component with signals. There is no routed component to pick. | -| Injectors | Element injectors, including `` anchors, and environment injectors with their providers. **Show value** reads a created provider's value, and **Startup** shows the Angular version and when the app was first stable. | -| Store | Live `@ngrx/signals` and `@ngrx/store` state, the change log, sessions and restore, and NGXS, Elf and MiniRx stores. See [Other stores on a device](#other-stores-on-a-device). | -| Queries | The TanStack Query clients the app injected, with their queries and mutations. | -| Pipes | The pipes in use, with their instances and the components that use them. Recording pipe calls works as in the browser. | -| Errors | Errors from Angular's `ErrorHandler` and React Native's global error handler, the console, and the NG0100 and missing provider explainers. | -| Audit | The findings of change detection, leaks and errors, and before and after sessions. axe has no DOM to check. | -| Plugins | The views of [page plugins](../guides/write-a-plugin.md) the app registers. | +| Tab | On Angular Native | +| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Components | The component tree, paths and the detail panel. Pointing at a component in the panel draws a box over it on the device, and **Pick component on device** selects the component you tap. **Change detection** records cycles with their causes and OnPush hints, and **Leaks** lists effects and subscriptions, with navigations counted from the app's Router. | +| Signals | The signal graph of the selected component, or of the first component with signals. There is no routed component to pick. | +| Injectors | Element injectors, including `` anchors, and environment injectors with their providers. **Show value** reads a created provider's value, and **Startup** shows the Angular version and when the app was first stable. | +| Store | Live `@ngrx/signals` and `@ngrx/store` state, the change log, sessions and restore, and NGXS, Elf and MiniRx stores. See [Other stores on a device](#other-stores-on-a-device). | +| Queries | The TanStack Query clients the app injected, with their queries and mutations. | +| Pipes | The pipes in use, with their instances and the components that use them. Recording pipe calls works as in the browser. | +| Errors | Errors from Angular's `ErrorHandler` and React Native's global error handler, the console, and the NG0100 and missing provider explainers. | +| Audit | The findings of change detection, leaks and errors, and before and after sessions. axe has no DOM to check. | +| Plugins | The views of [page plugins](../guides/write-a-plugin.md) the app registers. | The source scans (routes, pipes, NgRx declarations) come from the server, so they work as with the [Standalone CLI](./cli.md). There is no in-app popup. ### What needs a browser -These features read or draw the DOM, or run in the browser, so an Angular Native app has none of them. The panel hides the picker and the live views for the app, **Run axe** says the app has no DOM, and the agent tools answer the same instead of asking another tab. +These features read or draw the DOM, or run in the browser, so an Angular Native app has none of them. The panel hides the live views for the app, **Run axe** says the app has no DOM, and the agent tools answer the same instead of asking another tab. | Feature | Why it is missing | | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Pick component on page** | Picking listens for a click on a DOM element. | | **Flash checks**, **Performance track** and **Angular profiling** | They draw over DOM elements or into the browser's Performance panel. | | Checks that changed nothing | The recording counts them by watching DOM updates. | | Destroyed and retained instances in **Leaks** | A development build keeps every destroyed instance in Angular's DI debug data, so only a detached view would show a leak, and telling one apart asks Angular about a DOM element. | @@ -193,7 +192,7 @@ These features read or draw the DOM, or run in the browser, so an Angular Native | axe, `screenshot-component`, hydration and the console handles | They read or copy the DOM. | | Router, Forms and SSR & HTTP tabs | The Angular Native overlay does not collect them. | -The controls stay for browser pages. Hovering a row still outlines the component on the device. +The controls stay for browser pages. Hovering a row still draws a box over the component on the device. ## Where it shows in the panel @@ -239,7 +238,8 @@ The hook does nothing when `ngDevMode` is off. Without it, only stores created a - **Reporting**: the app polls every `intervalMs`, sends a report only when it changed (with a keepalive), and reconnects after `retryMs` when the server restarts or the socket drops. It keeps one page id until the overlay stops. The **Leaks** scan walks the tree again when the component tree changed, and at least every 30 seconds. - **Angular version**: change detection recording and **Startup** read the version from the `ng-version` value *Angular sets on the root host. When the renderer keeps none, recording stays off and the **Change detection** section says the page has no profiler, as in a browser, since taking Angular's profiler without knowing the version could evict another one for good. - **Errors**: the overlay wraps the app's `ErrorHandler`, listens to the console, and hears React Native's global error handler (`ErrorUtils`), which it calls on with every error and puts back when the overlay stops. -- **Highlight**: when the panel or the `highlight` agent tool points at a component, the overlay sets `outlineWidth`, `outlineStyle` and `outlineColor` in the view's inline style, and restores the previous values when the panel clears it. +- **Highlight**: when the panel or the `highlight` agent tool points at a component, the overlay measures the view with the engine and adds a `view` node of its own to the root, with a 2 px `#68b6ff` border and `pointerEvents: 'none'`, so no view of the app changes. The collectors leave the box out of the tree. It goes away when the panel clears it. If the engine can't create or measure nodes, the overlay sets `outlineWidth`, `outlineStyle` and `outlineColor` in the view's inline style instead, and restores the previous values afterwards. +- **Pick**: **Pick component on device** sets a capturing responder on the root, so the root takes the next touch before the app's own responders. The overlay selects the component that hosts the node the touch landed on, and removes the responder. The arrow keys in the panel move between components as in a browser. A pick ends after 15 seconds without a tap. ## Try the demo diff --git a/apps/docs/src/content/getting-started/configuration.md b/apps/docs/src/content/getting-started/configuration.md index e3820469..d97040aa 100644 --- a/apps/docs/src/content/getting-started/configuration.md +++ b/apps/docs/src/content/getting-started/configuration.md @@ -144,12 +144,12 @@ interface PangularConfig { ### Inspectors and agent tools -| Option | Default | What it does | -| -------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `inspectors.` | `true` | `false` removes the inspector: no tab or dock, no page collector, no RPC functions, and no agent tools or resources. Its actions are blocked too. | -| `agent.readOnly` | `false` | `true` keeps only the agent tools in the `read` [safety tier](../agents/tools.md#action-tools). It drops every `action` and `destructive` tool in the [tier table](../agents/tools.md#action-tools): `run-form-action`, `fill-form`, `navigate`, `ngrx-dispatch`, `ngrx-restore`, `ngrx-store-devtools`, `tanstack-run-query`, `set-http-rule`, `remove-http-rule`, `set-ssr-override`, `remove-ssr-override`, `set-component-property`, `set-signal`, `load-defer-block`, `watch-signal`, `record-pipes`, `track-subscriptions`, `record-change-detection`, `probe-route`, `record-guards`, `analog-run-api`, `analog-run-nitro-task`, `analog-purge-nitro-cache` and `clear-recordings`. `audit` stays without its `axe` argument. | -| `agent.tools.` | `true` | `false` hides one inspector's agent tools and resources, and its [shared-state keys](../agents/resources.md#shared-state) over HTTP MCP. The tab stays. | -| `agent.browserTools` | `false` | `true` registers the `read` agent tools on the page for [browser agents](../agents/browser-agents.md) (WebMCP and Chrome DevTools for agents). Off by default, because any script on the development page could then call them. This is where the **Browser agent tools** switch in [Settings](./settings.md#browser-agents) starts. The switch changes it for every page until the dev server restarts. | +| Option | Default | What it does | +| -------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `inspectors.` | `true` | `false` removes the inspector: no tab or dock, no page collector, no RPC functions, and no agent tools or resources. Its actions are blocked too. | +| `agent.readOnly` | `false` | `true` keeps only the agent tools in the `read` [safety tier](../agents/tools.md#action-tools). It drops every `action` and `destructive` tool in the [tier table](../agents/tools.md#action-tools): `run-form-action`, `fill-form`, `navigate`, `ngrx-dispatch`, `ngrx-restore`, `ngrx-store-devtools`, `tanstack-run-query`, `set-http-rule`, `remove-http-rule`, `set-ssr-override`, `remove-ssr-override`, `refetch-transfer-state`, `set-component-property`, `set-signal`, `load-defer-block`, `watch-signal`, `record-pipes`, `track-subscriptions`, `record-change-detection`, `probe-route`, `record-guards`, `analog-run-api`, `analog-run-nitro-task`, `analog-purge-nitro-cache` and `clear-recordings`. `audit` stays without its `axe` argument. | +| `agent.tools.` | `true` | `false` hides one inspector's agent tools and resources, and its [shared-state keys](../agents/resources.md#shared-state) over HTTP MCP. The tab stays. | +| `agent.browserTools` | `false` | `true` registers the `read` agent tools on the page for [browser agents](../agents/browser-agents.md) (WebMCP and Chrome DevTools for agents). Off by default, because any script on the development page could then call them. This is where the **Browser agent tools** switch in [Settings](./settings.md#browser-agents) starts. The switch changes it for every page until the dev server restarts. | `agent.tools` has the same keys as `inspectors`. An inspector that is off has no agent tools, whatever `agent.tools` says. @@ -159,17 +159,17 @@ If you open a tab that is turned off, the panel says so, shows the option that t Actions are the writes that the panel and agents make to your app or the server. -| Option | Default | What `false` blocks | -| ----------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `actions.forms` | `true` | Form writes: set value, fill, mark touched, untouched, dirty or pristine, touch all, revalidate, reset, enable, disable, submit and restore. Drops `run-form-action` and `fill-form`. | -| `actions.router` | `true` | Navigate, abort, replay and probe, and clearing the navigations list. Drops the `navigate` and `probe-route` agent tools and router clearing in `clear-recordings`. `record-guards` and `list-routes` with `resolveLazy` stay. | -| `actions.ngrx` | `true` | Restoring NgRx state from the change log, dispatching `@ngrx/store` actions and changing the Store DevTools history. Drops the `ngrx-dispatch`, `ngrx-restore` and `ngrx-store-devtools` agent tools. | -| `actions.http` | `true` | Editing fault injection rules and SSR overrides, and clearing the HTTP timeline. Drops the `set-http-rule`, `remove-http-rule`, `set-ssr-override` and `remove-ssr-override` agent tools and HTTP clearing in `clear-recordings`. | -| `actions.analog` | `true` | The Analog request playground, clearing server calls, running Nitro tasks and purging the Nitro cache. Drops the `analog-run-api`, `analog-run-nitro-task` and `analog-purge-nitro-cache` agent tools and Analog clearing in `clear-recordings`. | -| `actions.components` | `true` | Editing component inputs, properties and writable signals from the **Components** tab, and **Restore** in the **Signals** value history. Drops the `set-component-property`, `set-signal` and `load-defer-block` agent tools. | -| `actions.tanstackQuery` | `true` | Invalidating and refetching a query from the **Queries** tab. Drops the `tanstack-run-query` agent tool. | -| `actions.plugins` | `true` | Every plugin's page actions, from the **Plugins** tab and from its tools. Drops the plugin tools that are not `read`. | -| `actions` | `true` | All of the above. | +| Option | Default | What `false` blocks | +| ----------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `actions.forms` | `true` | Form writes: set value, fill, mark touched, untouched, dirty or pristine, touch all, revalidate, reset, enable, disable, submit and restore. Drops `run-form-action` and `fill-form`. | +| `actions.router` | `true` | Navigate, abort, replay and probe, and clearing the navigations list. Drops the `navigate` and `probe-route` agent tools and router clearing in `clear-recordings`. `record-guards` and `list-routes` with `resolveLazy` stay. | +| `actions.ngrx` | `true` | Restoring NgRx state from the change log, dispatching `@ngrx/store` actions and changing the Store DevTools history. Drops the `ngrx-dispatch`, `ngrx-restore` and `ngrx-store-devtools` agent tools. | +| `actions.http` | `true` | Editing fault injection rules and SSR overrides, refetching the TransferState payload, and clearing the HTTP timeline. Drops the `set-http-rule`, `remove-http-rule`, `set-ssr-override`, `remove-ssr-override` and `refetch-transfer-state` agent tools and HTTP clearing in `clear-recordings`. | +| `actions.analog` | `true` | The Analog request playground, clearing server calls, running Nitro tasks and purging the Nitro cache. Drops the `analog-run-api`, `analog-run-nitro-task` and `analog-purge-nitro-cache` agent tools and Analog clearing in `clear-recordings`. | +| `actions.components` | `true` | Editing component inputs, properties and writable signals from the **Components** tab, and **Restore** in the **Signals** value history. Drops the `set-component-property`, `set-signal` and `load-defer-block` agent tools. | +| `actions.tanstackQuery` | `true` | Invalidating and refetching a query from the **Queries** tab. Drops the `tanstack-run-query` agent tool. | +| `actions.plugins` | `true` | Every plugin's page actions, from the **Plugins** tab and from its tools. Drops the plugin tools that are not `read`. | +| `actions` | `true` | All of the above. | Pass `actions: false` to block every action, or an object to block some. Keys you leave out of the object stay on. diff --git a/apps/docs/src/content/getting-started/nativescript.md b/apps/docs/src/content/getting-started/nativescript.md index 89cb1223..b8297f39 100644 --- a/apps/docs/src/content/getting-started/nativescript.md +++ b/apps/docs/src/content/getting-started/nativescript.md @@ -194,17 +194,17 @@ See [Standalone CLI](./cli.md) for the other server options and [Security](../se ## What it shows -| Tab | On NativeScript | -| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Components | The component tree, paths and the detail panel. Pointing at a component in the panel outlines it on the device. **Change detection** records cycles with their causes and OnPush hints, and **Leaks** lists effects and subscriptions, with navigations counted from the app's Router. | -| Signals | The signal graph of the selected component, with its write history. | -| Injectors | Element injectors and environment injectors with their providers. **Show value** reads a created provider's value, and **Startup** shows the Angular version and when the app was first stable. | -| Store | Live `@ngrx/signals` and `@ngrx/store` state, the change log, sessions and restore, and NGXS stores. The store list names the app `NativeScript (iOS)` or `NativeScript (Android)`. | -| Queries | The TanStack Query clients the app injected, with their queries and mutations. | -| Pipes | The pipes in use, with their instances and the components that use them. | -| Errors | Errors from Angular's `ErrorHandler` and the `Application` `uncaughtError` and `discardedError` events, the console, and the NG0100 and missing provider explainers. | -| Audit | The findings of change detection, leaks and errors, and before and after sessions. axe has no DOM to check. | -| Plugins | The views of [page plugins](../guides/write-a-plugin.md) the app registers. | +| Tab | On NativeScript | +| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Components | The component tree, paths and the detail panel. Pointing at a component in the panel draws a box over it on the device, and **Pick component on device** selects the component you tap. **Change detection** records cycles with their causes and OnPush hints, and **Leaks** lists effects and subscriptions, with navigations counted from the app's Router. | +| Signals | The signal graph of the selected component, with its write history. | +| Injectors | Element injectors and environment injectors with their providers. **Show value** reads a created provider's value, and **Startup** shows the Angular version and when the app was first stable. | +| Store | Live `@ngrx/signals` and `@ngrx/store` state, the change log, sessions and restore, and NGXS stores. The store list names the app `NativeScript (iOS)` or `NativeScript (Android)`. | +| Queries | The TanStack Query clients the app injected, with their queries and mutations. | +| Pipes | The pipes in use, with their instances and the components that use them. | +| Errors | Errors from Angular's `ErrorHandler` and the `Application` `uncaughtError` and `discardedError` events, the console, and the NG0100 and missing provider explainers. | +| Audit | The findings of change detection, leaks and errors, and before and after sessions. axe has no DOM to check. | +| Plugins | The views of [page plugins](../guides/write-a-plugin.md) the app registers. | The source scans (routes, pipes, NgRx declarations) come from the server, so they work as with the [Standalone CLI](./cli.md). There is no in-app popup. @@ -212,11 +212,10 @@ The server's [configuration](./configuration.md) applies to the app: inspectors ### What needs a browser -These features read or draw the DOM, or run in the browser, so a NativeScript app has none of them. The panel hides the picker and the live views for the app, **Run axe** says the app has no DOM, and the agent tools answer the same instead of asking another tab. +These features read or draw the DOM, or run in the browser, so a NativeScript app has none of them. The panel hides the live views for the app, **Run axe** says the app has no DOM, and the agent tools answer the same instead of asking another tab. | Feature | Why it is missing | | ----------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Pick component on page** | Picking listens for a click on a DOM element. | | **Flash checks**, **Performance track** and **Angular profiling** | They draw over DOM elements or into the browser's Performance panel. | | Checks that changed nothing | The recording counts them by watching DOM updates. | | Destroyed and retained instances in **Leaks** | A development build keeps every destroyed instance in Angular's DI debug data, so only a detached view would show a leak, and telling one apart asks Angular about a DOM element. | @@ -224,7 +223,7 @@ These features read or draw the DOM, or run in the browser, so a NativeScript ap | axe, `screenshot-component`, hydration and the console handles | They read or copy the DOM. | | Router, Forms and SSR & HTTP tabs | The NativeScript overlay does not collect them. | -Hovering a row still outlines the component on the device. +Hovering a row still draws a box over the component on the device. ## Where it shows in the panel @@ -271,7 +270,8 @@ The overlay marks its component reports with `platform: 'nativescript'`, the URL - **Store stand-in**: `initNativeScriptOverlay()` puts the [Redux DevTools stand-in](../inspectors/ngrx-store.md#other-stores) in place before the app starts, so NGXS stores report without the `store-hook` entry. A store library that looks for the extension on `window` finds nothing there, since a NativeScript app has no `window` once it started. When the server turns the `ngrx` inspector off, the overlay removes it again. - **Angular version**: change detection recording and **Startup** read the version from the `ng-version` value *Angular sets on the root view. When the renderer keeps none, recording stays off and the **Change detection** section says the page has no profiler, as in a browser, since taking Angular's profiler without knowing the version could evict another one for good. - **Reporting**: the app collects every `intervalMs` and sends a report when it changed. The **Leaks** scan walks the views again when the component tree changed, and at least every 30 seconds. When a report has not changed for a while, the app asks the server whether it still holds it, and sends it again only if not. When the connection fails or drops, it logs one warning and tries again every `retryMs`. The app keeps one page id for as long as the overlay runs, so a reconnect does not show it as a new page. -- **Highlight**: when the panel or the `highlight` agent tool points at a component, the overlay sets a 2 px `#68b6ff` border on the first view under the host that draws something. It restores the previous border when the pointer leaves the row, after the duration the `highlight` tool asks for, or after two seconds. +- **Highlight**: when the panel or the `highlight` agent tool points at a component, the overlay adds a native view of its own to the app's window, a `UIView` on iOS and a `View` on Android, with a 2 px `#68b6ff` border over the first view under the host that draws something. The box ignores touches, and no view of the app changes. It goes away when the pointer leaves the row, after the duration the `highlight` tool asks for, or after two seconds. If the overlay can't add the view, it sets the border on the app's view instead and restores it afterwards. +- **Pick**: **Pick component on device** adds a clear view over the whole window that catches the next tap, so the tap doesn't reach the app. The overlay finds the deepest laid-out view under the tap, selects the component that hosts it, and removes the view. The arrow keys in the panel move between components as in a browser, with the box on the one shown. A pick ends after 15 seconds without a tap. ## Try the demo diff --git a/apps/docs/src/content/inspectors/audit.md b/apps/docs/src/content/inspectors/audit.md index dfe26694..cc58a790 100644 --- a/apps/docs/src/content/inspectors/audit.md +++ b/apps/docs/src/content/inspectors/audit.md @@ -37,17 +37,17 @@ Errors come first, then warnings, then info. Within a severity, accessibility co The audit runs no check of its own. It reads what each inspector already collected and turns its results into findings. -| Area | Findings | Detail tool | -| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------- | -| Accessibility | Each axe rule the app breaks, per component, with the rule's impact as severity: critical and serious are errors, moderate a warning, minor info. | `audit` with `area` | -| Errors | Each error group, with its count and owning component. | `explain-error` | -| Hydration | Mismatches, server HTML that was not hydrated at all, and hosts that skip hydration. | `hydration` | -| Change detection | The hints of the [change detection diagnosis](./components.md#change-detection): OnPush candidates, inputs mutated in place, components that depend on zone.js. Also components whose slowest check took 16 ms or more. | `diagnose-change-detection` | -| Leaks | Components still retained after destroy, and subscriptions still open after their component went away. | `find-leaks` | -| Router | The findings of [Router Lint](./router.md), redirect loops included. | `lint-routes` | -| Forms | The findings of Forms Lint, and NG01xxx setup errors. | `lint-forms` | -| HTTP | Failed `HttpClient` calls by endpoint, calls a fault rule failed, and calls the browser fetched again because the transfer cache did not keep them. | `list-http-calls` | -| Pipes | The findings of the pipe lint, from the source scan. | `scan-pipe-usage` | +| Area | Findings | Detail tool | +| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ | +| Accessibility | Each axe rule the app breaks, per component, with the rule's impact as severity: critical and serious are errors, moderate a warning, minor info. | `audit` with `area` | +| Errors | Each error group, with its count and owning component. | `explain-error` | +| Hydration | Mismatches, server HTML that was not hydrated at all, and hosts that skip hydration. | `hydration` | +| Change detection | The hints of the [change detection diagnosis](./components.md#change-detection): OnPush candidates, inputs mutated in place, components that depend on zone.js. Also components whose slowest check took 16 ms or more. | `diagnose-change-detection` | +| Leaks | Components still retained after destroy, and subscriptions still open after their component went away. | `find-leaks` | +| Router | The findings of [Router Lint](./router.md), redirect loops included. | `lint-routes` | +| Forms | The findings of Forms Lint, and NG01xxx setup errors. | `lint-forms` | +| HTTP | Failed `HttpClient` calls by endpoint, calls a fault rule failed, and calls the browser fetched again because the transfer cache did not keep them. Also the [HTTP lint](./ssr-http.md#http-lint) findings: duplicate requests, request waterfalls and server calls the browser made again. | `list-http-calls`, `lint-http` | +| Pipes | The findings of the pipe lint, from the source scan. | `scan-pipe-usage` | ### Key numbers diff --git a/apps/docs/src/content/inspectors/components.md b/apps/docs/src/content/inspectors/components.md index 5640dcd8..f288e86a 100644 --- a/apps/docs/src/content/inspectors/components.md +++ b/apps/docs/src/content/inspectors/components.md @@ -386,6 +386,8 @@ On Angular 20 and later, the page reads the tree about 250 ms after Angular runs While picking, presses and clicks in the app don't reach it, so menus and drag handles stay as they are. +For an app on a device ([NativeScript](../getting-started/nativescript.md) or [Angular Native](../getting-started/angular-native.md)), the button reads **Pick component on device**. Tap a component on the simulator or device, and the tab selects the component that hosts the view you tapped. The tap doesn't reach the app. + You can also pick with the keyboard, from the panel or with focus in the app: | Key | What it does | diff --git a/apps/docs/src/content/inspectors/ssr-http.md b/apps/docs/src/content/inspectors/ssr-http.md index c405e898..5e89cea7 100644 --- a/apps/docs/src/content/inspectors/ssr-http.md +++ b/apps/docs/src/content/inspectors/ssr-http.md @@ -193,7 +193,7 @@ Checks the selected page's client calls for requests that cost time. Transfer ca | **Waterfall** | 3 or more calls ran one after another: each started within 50 ms after the previous one ended. | | **Repeated server call** | A call the server made while rendering the page ran again in the browser, so the transfer cache missed it. | -Each finding says what happened, how many milliseconds it costs where that can be told, and what to try, such as sharing one request or starting the calls together with `forkJoin`. A waterfall can be on purpose, when a call needs the response before it. **Show first call** opens the first call of the finding in the timeline preview. The `lint-http` agent tool runs the same checks. +Each finding says what happened, how many milliseconds it costs where that can be told, and what to try, such as sharing one request or starting the calls together with `forkJoin`. A waterfall can be on purpose, when a call needs the response before it. **Show first call** opens the first call of the finding in the timeline preview. The `lint-http` agent tool runs the same checks, and the [Audit](./audit.md) and the `snapshot` agent tool include their findings. ### Fault injection @@ -256,7 +256,7 @@ Each entry in the page's `{APP_ID}-state` script, with its size. Above the entri - **Largest entries**: the five biggest entries, by request URL or key, each with its size, its share of the payload and a bar of that share. - **Same URL stored more than once**: HttpClient entries that cached one URL under several keys, because their headers, params or body differ, with the key count and total size. Check whether one request could serve them all. -These views only read what the page reported. Nothing is fetched again. The tab decodes HttpClient and Analog cache entries to status, URL and body. It labels `__nghData__` and `__nghDeferData__` as hydration annotations, and Analog server function results seeded during server rendering by function name. +These views read what the page reported. **Refetch** renders the page's URL again on the server, with the tab's cookies, and shows the payload the server sends now, without reloading the tab. It needs the `actions.http` write action. The refetched payload is marked **Refetched** until the tab reloads, and hydration stats keep reading the payload the tab was served with. The tab decodes HttpClient and Analog cache entries to status, URL and body. It labels `__nghData__` and `__nghDeferData__` as hydration annotations, and Analog server function results seeded during server rendering by function name. Open an entry to see its cache key, even when the row shows the request URL. **Copy** puts the key on the clipboard. If the `actions.http` write action is on, **Edit in SSR overrides** opens the [SSR overrides](#ssr-overrides) form for that key. The button is hidden for keys longer than 200 characters, the most an override keeps, and for keys with spaces at either end, which an override would trim. @@ -352,21 +352,22 @@ The interceptor works in development builds only. In production it passes reques ## Agent tools -| Tool | What it answers | Arguments | -| --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | -| `pangular:list-ssr-requests` | Recent traced SSR requests: id, URL, status, render mode, render time, server calls, and whether a connected page loaded the response. | `limit` | -| `pangular:explain-ssr-request` | One request end to end: timings, kept response headers, the router's guard and resolver times, each server call with its transfer cache outcome, then the browser page with its hydration result and the calls the browser made again. | `id`, `url` | -| `pangular:list-http-calls` | The app's HttpClient calls, newest first: side (SSR or client), method, URL, status, duration, and flags for mocked, faulted, cancelled, redirected, transfer cache hit, the matched rule and the likely [call origin](#call-origin). With `view: "waterfall"`, one tab's client calls as a waterfall, grouped by navigation. | `page`, `url`, `failed`, `limit`, `preview`, `headers`, `view` | -| `pangular:lint-http` | The [HTTP lint](#http-lint) of one tab: duplicate GETs, waterfalls and server calls the browser made again, with call ids and a fix. | `page` | -| `pangular:list-http-rules` | The [fault rules](#fault-injection) in match order: id, on or off, method, URL pattern, where it applies and its effect. | none | -| `pangular:set-http-rule` | Adds a fault rule, or replaces the rule with `id`. Checks the input like the form does. | `pattern`, `id`, `method`, `target`, `status`, `delayMs`, `body`, `chance`, `enabled` | -| `pangular:remove-http-rule` | Removes the fault rule with `id`. | `id` | -| `pangular:inspect-transfer-state` | The [TransferState payload](#transferstate-payload) of a page: each key with its kind and size, or one key's value. | `page`, `key`, `search`, `limit` | -| `pangular:list-ssr-overrides` | The [SSR overrides](#ssr-overrides): id, on or off, kind, page pattern and effect. | none | -| `pangular:set-ssr-override` | Adds an override, or replaces the one with `id`. Checks the input like the form does. | `kind`, `pattern`, `id`, `message`, `key`, `value`, `enabled` | -| `pangular:remove-ssr-override` | Removes the override with `id`. | `id` | - -`set-http-rule` and `remove-http-rule` change the same rules as this tab, so the rule list in this tab updates as an agent edits it. `set-ssr-override` and `remove-ssr-override` do the same for the SSR overrides. All four need `actions.http`. See [Fault rules](../agents/tools.md#fault-rules) and [TransferState and SSR overrides](../agents/tools.md#transferstate-and-ssr-overrides). +| Tool | What it answers | Arguments | +| --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `pangular:list-ssr-requests` | Recent traced SSR requests: id, URL, status, render mode, render time, server calls, and whether a connected page loaded the response. | `limit` | +| `pangular:explain-ssr-request` | One request end to end: timings, kept response headers, the router's guard and resolver times, each server call with its transfer cache outcome, then the browser page with its hydration result and the calls the browser made again. | `id`, `url` | +| `pangular:list-http-calls` | The app's HttpClient calls, newest first: side (SSR or client), method, URL, status, duration, and flags for mocked, faulted, cancelled, redirected, transfer cache hit, the matched rule and the likely [call origin](#call-origin). With `view: "waterfall"`, one tab's client calls as a waterfall, grouped by navigation. | `page`, `url`, `failed`, `limit`, `preview`, `headers`, `view` | +| `pangular:lint-http` | The [HTTP lint](#http-lint) of one tab: duplicate GETs, waterfalls and server calls the browser made again, with call ids and a fix. | `page` | +| `pangular:list-http-rules` | The [fault rules](#fault-injection) in match order: id, on or off, method, URL pattern, where it applies and its effect. | none | +| `pangular:set-http-rule` | Adds a fault rule, or replaces the rule with `id`. Checks the input like the form does. `preset` adds the Offline, Slow 3G or Flaky rules instead. | `pattern`, `id`, `method`, `target`, `status`, `delayMs`, `body`, `chance`, `enabled`, `preset` | +| `pangular:remove-http-rule` | Removes the fault rule with `id`. | `id` | +| `pangular:inspect-transfer-state` | The [TransferState payload](#transferstate-payload) of a page: each key with its kind and size, or one key's value. | `page`, `key`, `search`, `limit` | +| `pangular:refetch-transfer-state` | Does what **Refetch** does: renders the page's URL again on the server and replaces the payload this tab shows. | `page` | +| `pangular:list-ssr-overrides` | The [SSR overrides](#ssr-overrides): id, on or off, kind, page pattern and effect. | none | +| `pangular:set-ssr-override` | Adds an override, or replaces the one with `id`. Checks the input like the form does. | `kind`, `pattern`, `id`, `message`, `key`, `value`, `enabled` | +| `pangular:remove-ssr-override` | Removes the override with `id`. | `id` | + +`set-http-rule` and `remove-http-rule` change the same rules as this tab, so the rule list in this tab updates as an agent edits it. `set-ssr-override` and `remove-ssr-override` do the same for the SSR overrides. These four and `refetch-transfer-state` need `actions.http`. See [Fault rules](../agents/tools.md#fault-rules) and [TransferState and SSR overrides](../agents/tools.md#transferstate-and-ssr-overrides). For the rest of this tab, agents read the `pangular:http` key with the `devframe_state_read` tool. See [Resources](../agents/resources.md). diff --git a/apps/docs/src/content/security.md b/apps/docs/src/content/security.md index 5f3608cc..9e52ed26 100644 --- a/apps/docs/src/content/security.md +++ b/apps/docs/src/content/security.md @@ -381,6 +381,19 @@ Request URLs, page URLs and error messages in the [SSR & HTTP tab](./inspectors/ The page title, the hydration warnings and mismatch details, and the TransferState parse error are redacted too. Response previews are redacted on the devtools server: keys that the forms rules treat as secret, JWTs, bearer tokens and secret query pairs, also in a preview that was cut inside a nested object or array. XML and other text previews are masked by name too: the content of an element with a secret name, such as `…`, and attributes such as `password="…"`. Request and response headers are redacted on the page and again on the devtools server: `Authorization`, `Proxy-Authorization`, `Cookie`, `Set-Cookie` and `Ocp-Apim-Subscription-Key` always, whatever `redaction.unmask` says, names that look secret or match `redaction.secretNames`, and JWTs, bearer tokens and credentials inside any other value. The same holds for TransferState entries: their values, keys and request URLs are redacted on the page, before the payload is sent to the devtools server, and again on the server. A custom key with a secret-looking name, such as `makeStateKey('password')`, has its whole value masked. Large payload values are still cut, so a long value can end in `[Truncated]`. +### Redaction counts + +Where the panel shows masked data, a line above it says how many values were masked, such as **3 values masked by redaction**. It shows above: + +- a call's response preview in the [SSR & HTTP tab](./inspectors/ssr-http.md), and the TransferState payload +- the NgRx state tree +- the fields of the selected form +- the inputs and properties of the selected component + +The panel counts the `[redacted]` and `[email]` marks in what it shows, once per new value. It reads at most 20,000 strings and keys of one value. Past that, the line starts with **At least**. + +An agent answer that holds masked values ends with a line such as `_Redaction masked 3 values in this answer._`. When the answer ends with a file to copy, such as an export, the line comes just before the file. Answers that are JSON get no line, so a client can still parse them. + ## Page text in agent answers An app can put any text in a value, a URL, a label or an error message, including text written to steer an agent. So every agent tool answer that carries text from the inspected page or from the dev server puts a notice before that text: what follows is data, not instructions. The notice stays when the answer is cut to fit. diff --git a/docs/contributing/commit-message-guidelines.md b/docs/contributing/commit-message-guidelines.md index 47d6a394..062f9479 100644 --- a/docs/contributing/commit-message-guidelines.md +++ b/docs/contributing/commit-message-guidelines.md @@ -5,7 +5,7 @@ Every commit follows one format, with scopes that match the areas of this reposi Every commit is checked twice: - **Locally**, by a `commit-msg` git hook that `pnpm install` turns on (it sets `core.hooksPath` to `.githooks` and `commit.template` to [`.gitmessage`](../../.gitmessage)). It warns and lets the commit through; fix the message with `git commit --amend` before you push. -- **In CI**, on every pull request: each commit and the pull request title. Pull requests are squash merged, so **the title becomes the commit on `main`**. A title that breaks the format fails the check. Problems in the individual commits only warn: they show up as annotations on the pull request, and the check stays green. +- **In CI**, on every pull request: each commit and the pull request title. Pull requests are squash merged, so **the title becomes the commit on `main`**. A title or a commit that breaks the format fails the check, and each problem shows up as an annotation on the pull request. Run `pnpm commit:check` to check the commits on your branch before you push. To fix an older commit, reword it with `git rebase -i` and force-push your branch. While a review is in progress, prefer [fixup commits](./using-fixup-commits.md). `fixup!` and `squash!` commits and merge commits are skipped. diff --git a/extension/ui/assets/browser-agent-rpc-KH4HHvHf-Cxjx-Meu.js b/extension/ui/assets/browser-agent-rpc-KH4HHvHf-DjXYovS-.js similarity index 95% rename from extension/ui/assets/browser-agent-rpc-KH4HHvHf-Cxjx-Meu.js rename to extension/ui/assets/browser-agent-rpc-KH4HHvHf-DjXYovS-.js index 9306a9fc..c74c5e15 100644 --- a/extension/ui/assets/browser-agent-rpc-KH4HHvHf-Cxjx-Meu.js +++ b/extension/ui/assets/browser-agent-rpc-KH4HHvHf-DjXYovS-.js @@ -1 +1 @@ -import{t as e}from"./index-LBnCVphy.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-WM6jjOIX.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-LBnCVphy.js b/extension/ui/assets/index-WM6jjOIX.js similarity index 75% rename from extension/ui/assets/index-LBnCVphy.js rename to extension/ui/assets/index-WM6jjOIX.js index 536b8613..9e03a60a 100644 --- a/extension/ui/assets/index-LBnCVphy.js +++ b/extension/ui/assets/index-WM6jjOIX.js @@ -3,12 +3,12 @@ \r \v ᠎ - \u2028\u2029   `;`${Gt}`,`${Gt}`;var Kt=(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})(Kt||{}),qt=(function(e){return e[e.Plain=0]=`Plain`,e[e.TemplateLiteralPart=1]=`TemplateLiteralPart`,e[e.TemplateLiteralEnd=2]=`TemplateLiteralEnd`,e})(qt||{});Kt.Character,jt.StyleMap,jt.ClassMap,jt.StyleProp,jt.ClassProp,jt.Attribute,jt.Property,jt.Attribute,jt.Control,jt.DomProperty,jt.DomProperty,jt.Attribute,jt.StyleMap,jt.ClassMap,jt.StyleProp,jt.ClassProp,jt.Listener,jt.TwoWayListener,jt.AnimationListener,jt.StyleMap,jt.ClassMap,jt.StyleProp,jt.ClassProp,jt.Property,jt.TwoWayProperty,jt.DomProperty,jt.Attribute,jt.Animation,jt.Control,Bt.Idle,y.deferOnIdle,y.deferPrefetchOnIdle,y.deferHydrateOnIdle,Bt.Immediate,y.deferOnImmediate,y.deferPrefetchOnImmediate,y.deferHydrateOnImmediate,Bt.Timer,y.deferOnTimer,y.deferPrefetchOnTimer,y.deferHydrateOnTimer,Bt.Hover,y.deferOnHover,y.deferPrefetchOnHover,y.deferHydrateOnHover,Bt.Interaction,y.deferOnInteraction,y.deferPrefetchOnInteraction,y.deferHydrateOnInteraction,Bt.Viewport,y.deferOnViewport,y.deferPrefetchOnViewport,y.deferHydrateOnViewport,Bt.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 Jt=(function(e){return e[e.None=0]=`None`,e[e.ViewContextRead=1]=`ViewContextRead`,e[e.ViewContextWrite=2]=`ViewContextWrite`,e[e.SideEffectful=4]=`SideEffectful`,e})(Jt||{});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,Ct.Property,Ft.Property,Ct.TwoWay,Ft.TwoWayProperty,Ct.Attribute,Ft.Attribute,Ct.Class,Ft.ClassName,Ct.Style,Ft.StyleProperty,Ct.LegacyAnimation,Ft.LegacyAnimation,Ct.Animation,Ft.Animation;var Yt=`%COMP%`;`${Yt}`,`${Yt}`,class e{static SINGLETON=new e;static veWillInferAnyFor(t){let n=e.SINGLETON;return t instanceof St?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 Xt=null,Zt=!1,Qt=1,$t=null,en=Symbol(`SIGNAL`);function tn(e){let t=Xt;return Xt=e,t}function nn(){return Xt}var rn={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 an(e){if(Zt)throw Error(``);if(Xt===null)return;Xt.consumerOnSignalRead(e);let t=Xt.producersTail;if(t!==void 0&&t.producer===e)return;let n,r=Xt.recomputing;if(r&&(n=t===void 0?Xt.producers:t.nextProducer,n!==void 0&&n.producer===e)){Xt.producersTail=n,n.lastReadVersion=e.version,n.knownValidAtEpoch=Qt;return}let i=e.consumersTail;if(i!==void 0&&i.consumer===Xt&&(!r||i.knownValidAtEpoch===Qt))return;let a=bn(Xt),o={producer:e,consumer:Xt,nextProducer:n,prevConsumer:void 0,knownValidAtEpoch:Qt,lastReadVersion:e.version,nextConsumer:void 0};Xt.producersTail=o,t===void 0?Xt.producers=o:t.nextProducer=o,a&&vn(e,o)}function on(){Qt++}function sn(e){if((!bn(e)||e.dirty)&&(e.dirty||e.lastCleanEpoch!==Qt)){if(!e.producerMustRecompute(e)&&!gn(e)){dn(e);return}e.producerRecomputeValue(e),dn(e)}}function cn(e){if(e.consumers===void 0)return;let t=Zt;Zt=!0;try{for(let t=e.consumers;t!==void 0;t=t.nextConsumer){let e=t.consumer;e.dirty||un(e)}}finally{Zt=t}}function ln(){return Xt?.consumerAllowSignalWrites!==!1}function un(e){e.dirty=!0,cn(e),e.consumerMarkedDirty?.(e)}function dn(e){e.dirty=!1,e.lastCleanEpoch=Qt}function fn(e){return e&&pn(e),tn(e)}function pn(e){if(e.producersTail?.knownValidAtEpoch===Qt){let t=e.producers;for(;t!==void 0;)t.knownValidAtEpoch=null,t=t.nextProducer}e.producersTail=void 0,e.recomputing=!0}function mn(e,t){tn(t),e&&hn(e)}function hn(e){e.recomputing=!1;let t=e.producersTail,n=t===void 0?e.producers:t.nextProducer;if(n!==void 0){if(bn(e))do n=yn(n);while(n!==void 0);t===void 0?e.producers=void 0:t.nextProducer=void 0}}function gn(e){for(let t=e.producers;t!==void 0;t=t.nextProducer){let e=t.producer,n=t.lastReadVersion;if(n!==e.version||(sn(e),n!==e.version))return!0}return!1}function _n(e){if(bn(e)){let t=e.producers;for(;t!==void 0;)t=yn(t)}e.producers=void 0,e.producersTail=void 0,e.consumers=void 0,e.consumersTail=void 0}function vn(e,t){let n=e.consumersTail,r=bn(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)vn(t.producer,t)}function yn(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,!bn(t)){let e=t.producers;for(;e!==void 0;)e=yn(e)}return n}function bn(e){return e.consumerIsAlwaysLive||e.consumers!==void 0}function xn(e){$t?.(e)}function Sn(e,t){return Object.is(e,t)}function Cn(e,t){let n=Object.create(pee);n.computation=e,t!==void 0&&(n.equal=t);let r=()=>{if(sn(n),an(n),n.value===En)throw n.error;return n.value};return r[en]=n,xn(n),r}var wn=Symbol(`UNSET`),Tn=Symbol(`COMPUTING`),En=Symbol(`ERRORED`),pee={...rn,value:wn,dirty:!0,error:null,equal:Sn,kind:`computed`,producerMustRecompute(e){return e.value===wn||e.value===Tn},producerRecomputeValue(e){if(e.value===Tn)throw Error(``);let t=e.value;e.value=Tn;let n=fn(e),r,i=!1;try{r=e.computation(),tn(null),i=t!==wn&&t!==En&&r!==En&&e.equal(t,r)}catch(t){r=En,e.error=t}finally{mn(e,n)}if(i){e.value=t;return}e.value=r,e.version++}};function mee(){throw Error()}var Dn=mee;function On(e){Dn(e)}function hee(e){Dn=e}var gee=null;function _ee(e,t){let n=Object.create(Mn);n.value=e,t!==void 0&&(n.equal=t);let r=()=>kn(n);return r[en]=n,xn(n),[r,e=>An(n,e),e=>jn(n,e)]}function kn(e){return an(e),e.value}function An(e,t){ln()||On(e),e.equal(e.value,t)||(e.value=t,Nn(e))}function jn(e,t){ln()||On(e),An(e,t(e.value))}var Mn={...rn,equal:Sn,value:void 0,kind:`signal`};function Nn(e){e.version++,on(),cn(e),gee?.(e)}var Pn={...rn,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,kind:`effect`};function Fn(e){if(e.dirty=!1,e.version>0&&!gn(e))return;e.version++;let t=fn(e);try{e.cleanup(),e.fn()}finally{mn(e,t)}}var In=void 0;function Ln(){return In}function Rn(e){let t=In;return In=e,t}var zn=Symbol(`NotFound`);function Bn(e){return e===zn||e?.name===`ɵNotFound`}function Vn(e,t,n){let r=Object.create(Wn);r.source=e,r.computation=t,n!=null&&(r.equal=n);let i=()=>{if(sn(r),an(r),r.value===En)throw r.error;return r.value};return i[en]=r,xn(r),i}function Hn(e,t){sn(e),An(e,t),dn(e)}function Un(e,t){if(sn(e),e.value===En)throw e.error;jn(e,t),dn(e)}var Wn={...rn,value:wn,dirty:!0,error:null,equal:Sn,kind:`linkedSignal`,producerMustRecompute(e){return e.value===wn||e.value===Tn},producerRecomputeValue(e){if(e.value===Tn)throw Error(``);let t=e.value;e.value=Tn;let n=fn(e),r,i=!1;try{let n=e.source(),a=t!==wn&&t!==En,o=a?{source:e.sourceValue,value:t}:void 0;r=e.computation(n,o),e.sourceValue=n,tn(null),i=a&&r!==En&&e.equal(t,r)}catch(t){r=En,e.error=t}finally{mn(e,n)}if(i){e.value=t;return}e.value=r,e.version++}};function Gn(e){let t=tn(null);try{return e()}finally{tn(t)}}var Kn=function(e,t){return Kn=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])},Kn(e,t)};function qn(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Class extends value `+String(t)+` is not a constructor or null`);Kn(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function Jn(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 Yn(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 Zn(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 Qn(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 $n?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 tr(e){if(!Symbol.asyncIterator)throw TypeError(`Symbol.asyncIterator is not defined.`);var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof Xn==`function`?Xn(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 nr(e){return typeof e==`function`}function rr(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 ir=rr(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 ar(e,t){if(e){var n=e.indexOf(t);0<=n&&e.splice(n,1)}}var or=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=Xn(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(nr(c))try{c()}catch(e){i=e instanceof ir?e.errors:[e]}var l=this._finalizers;if(l){this._finalizers=null;try{for(var u=Xn(l),d=u.next();!d.done;d=u.next()){var f=d.value;try{lr(f)}catch(e){i??=[],e instanceof ir?i=Qn(Qn([],Zn(i)),Zn(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 ir(i)}},e.prototype.add=function(t){if(t&&t!==this){if(this.closed)lr(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)&&ar(t,e)},e.prototype.remove=function(t){var n=this._finalizers;n&&ar(n,t),t instanceof e&&t._removeParent(this)},e.EMPTY=(function(){var t=new e;return t.closed=!0,t})(),e}(),sr=or.EMPTY;function cr(e){return e instanceof or||e&&`closed`in e&&nr(e.remove)&&nr(e.add)&&nr(e.unsubscribe)}function lr(e){nr(e)?e():e.unsubscribe()}var ur={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},dr={setTimeout:function(e,t){var n=[...arguments].slice(2),r=dr.delegate;return r?.setTimeout?r.setTimeout.apply(r,Qn([e,t],Zn(n))):setTimeout.apply(void 0,Qn([e,t],Zn(n)))},clearTimeout:function(e){return(dr.delegate?.clearTimeout||clearTimeout)(e)},delegate:void 0};function fr(e){dr.setTimeout(function(){var t=ur.onUnhandledError;if(t)t(e);else throw e})}function pr(){}var mr=(function(){return _r(`C`,void 0,void 0)})();function hr(e){return _r(`E`,void 0,e)}function gr(e){return _r(`N`,e,void 0)}function _r(e,t,n){return{kind:e,value:t,error:n}}var vr=null;function yr(e){if(ur.useDeprecatedSynchronousErrorHandling){var t=!vr;if(t&&(vr={errorThrown:!1,error:null}),e(),t){var n=vr,r=n.errorThrown,i=n.error;if(vr=null,r)throw i}}else e()}function br(e){ur.useDeprecatedSynchronousErrorHandling&&vr&&(vr.errorThrown=!0,vr.error=e)}var xr=function(e){qn(t,e);function t(t){var n=e.call(this)||this;return n.isStopped=!1,t?(n.destination=t,cr(t)&&t.add(n)):n.destination=kr,n}return t.create=function(e,t,n){return new Tr(e,t,n)},t.prototype.next=function(e){this.isStopped?Or(gr(e),this):this._next(e)},t.prototype.error=function(e){this.isStopped?Or(hr(e),this):(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped?Or(mr,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}(or),Sr=Function.prototype.bind;function Cr(e,t){return Sr.call(e,t)}var wr=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){Er(e)}},e.prototype.error=function(e){var t=this.partialObserver;if(t.error)try{t.error(e)}catch(e){Er(e)}else Er(e)},e.prototype.complete=function(){var e=this.partialObserver;if(e.complete)try{e.complete()}catch(e){Er(e)}},e}(),Tr=function(e){qn(t,e);function t(t,n,r){var i=e.call(this)||this,a;if(nr(t)||!t)a={next:t??void 0,error:n??void 0,complete:r??void 0};else{var o;i&&ur.useDeprecatedNextContext?(o=Object.create(t),o.unsubscribe=function(){return i.unsubscribe()},a={next:t.next&&Cr(t.next,o),error:t.error&&Cr(t.error,o),complete:t.complete&&Cr(t.complete,o)}):a=t}return i.destination=new wr(a),i}return t}(xr);function Er(e){ur.useDeprecatedSynchronousErrorHandling?br(e):fr(e)}function Dr(e){throw e}function Or(e,t){var n=ur.onStoppedNotification;n&&dr.setTimeout(function(){return n(e,t)})}var kr={closed:!0,next:pr,error:Dr,complete:pr},Ar=(function(){return typeof Symbol==`function`&&Symbol.observable||`@@observable`})();function jr(e){return e}function Mr(e){return e.length===0?jr:e.length===1?e[0]:function(t){return e.reduce(function(e,t){return t(e)},t)}}var Nr=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=Ir(e)?e:new Tr(e,t,n);return yr(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=Pr(t),new t(function(t,r){var i=new Tr({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[Ar]=function(){return this},e.prototype.pipe=function(){return Mr([...arguments])(this)},e.prototype.toPromise=function(e){var t=this;return e=Pr(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 Pr(e){return e??ur.Promise??Promise}function Fr(e){return e&&nr(e.next)&&nr(e.error)&&nr(e.complete)}function Ir(e){return e&&e instanceof xr||Fr(e)&&cr(e)}function Lr(e){return nr(e?.lift)}function Rr(e){return function(t){if(Lr(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 zr(e,t,n,r,i){return new Br(e,t,n,r,i)}var Br=function(e){qn(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}(xr),Vr=rr(function(e){return function(){e(this),this.name=`ObjectUnsubscribedError`,this.message=`object unsubscribed`}}),Hr=function(e){qn(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 Ur(this,this);return t.operator=e,t},t.prototype._throwIfClosed=function(){if(this.closed)throw new Vr},t.prototype.next=function(e){var t=this;yr(function(){var n,r;if(t._throwIfClosed(),!t.isStopped){t.currentObservers||=Array.from(t.observers);try{for(var i=Xn(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;yr(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;yr(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?sr:(this.currentObservers=null,a.push(e),new or(function(){t.currentObservers=null,ar(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 Nr;return e.source=this,e},t.create=function(e,t){return new Ur(e,t)},t}(Nr),Ur=function(e){qn(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)??sr},t}(Hr),Wr=function(e){qn(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}(Hr);function Gr(e){return e[e.length-1]}function Kr(e){return nr(Gr(e))?e.pop():void 0}var qr=(function(e){return e&&typeof e.length==`number`&&typeof e!=`function`});function Jr(e){return nr(e?.then)}function Yr(e){return nr(e[Ar])}function Xr(e){return Symbol.asyncIterator&&nr(e?.[Symbol.asyncIterator])}function Zr(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 Qr(){return typeof Symbol!=`function`||!Symbol.iterator?`@@iterator`:Symbol.iterator}var $r=Qr();function ei(e){return nr(e?.[$r])}function ti(e){return er(this,arguments,function(){var t,n,r,i;return Yn(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,$n(t.read())];case 3:return n=a.sent(),r=n.value,i=n.done,i?[4,$n(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,$n(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 ni(e){return nr(e?.getReader)}function ri(e){if(e instanceof Nr)return e;if(e!=null){if(Yr(e))return vee(e);if(qr(e))return yee(e);if(Jr(e))return bee(e);if(Xr(e))return ii(e);if(ei(e))return xee(e);if(ni(e))return See(e)}throw Zr(e)}function vee(e){return new Nr(function(t){var n=e[Ar]();if(nr(n.subscribe))return n.subscribe(t);throw TypeError(`Provided object does not correctly implement Symbol.observable`)})}function yee(e){return new Nr(function(t){for(var n=0;n=0?n.slice(0,r):n}function hi(e,t){return e?t?`${e} ${t}`:e:t||``}var Wee=pi({__forward_ref__:pi});function gi(e){return e.__forward_ref__=gi,e}function _i(e){return vi(e)?e():e}function vi(e){return typeof e==`function`&&Object.hasOwn(e,Wee)&&e.__forward_ref__===gi}function yi(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function bi(e){return xi(e,wi)}function xi(e,t){return Object.hasOwn(e,t)&&e[t]||null}function Si(e){return(e?.[wi]??null)||null}function Ci(e){return e&&Object.hasOwn(e,Ti)?e[Ti]:null}var wi=pi({ɵprov:pi}),Ti=pi({ɵinj:pi}),Ei=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=yi({token:this,providedIn:t.providedIn||`root`,factory:t.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function Di(e){return e&&!!e.ɵproviders}var Oi=pi({ɵcmp:pi}),ki=pi({ɵdir:pi}),Ai=pi({ɵpipe:pi}),ji=pi({ɵfac:pi}),Mi=pi({__NG_ELEMENT_ID__:pi}),Ni=pi({__NG_ENV_ID__:pi});function Pi(e){return Li(e,`@Component`),e[Oi]||null}function Fi(e){return Li(e,`@Directive`),e[ki]||null}function Ii(e){return Li(e,`@Pipe`),e[Ai]||null}function Li(e,t){if(e==null)throw new di(-919,!1)}function Ri(e){return typeof e==`string`?e:e==null?``:String(e)}var zi=pi({ngErrorCode:pi}),Bi=pi({ngErrorMessage:pi}),Vi=pi({ngTokenPath:pi});function Hi(e,t){return Wi(``,-200,t)}function Ui(e,t){throw new di(-201,!1)}function Wi(e,t,n){let r=new di(t,e);return r[zi]=t,r[Bi]=e,n&&(r[Vi]=n),r}function Gi(e){return e[zi]}var Ki;function qi(){return Ki}function Ji(e){let t=Ki;return Ki=e,t}function Yi(e,t,n){let r=bi(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;Ui(e,``)}var Xi=globalThis,Zi={},Qi=`__NG_DI_FLAG__`,$i=class{injector;constructor(e){this.injector=e}retrieve(e,t){let n=na(t)||0;try{return this.injector.get(e,n&8?null:Zi,n)}catch(e){if(Bn(e))return e;throw e}}};function ea(e,t=0){let n=Ln();if(n===void 0)throw new di(-203,!1);if(n===null)return Yi(e,void 0,t);{let r=ra(t),i=n.retrieve(e,r);if(Bn(i)){if(r.optional)return null;throw i}return i}}function ta(e,t=0){return(qi()||ea)(_i(e),t)}function x(e,t){return ta(e,na(t))}function na(e){return e===void 0||typeof e==`number`?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function ra(e){return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)}}function ia(e){let t=[];for(let n=0;nArray.isArray(e)?la(e,t):t(e))}function ua(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function da(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function fa(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 ma(e,t,n){let r=ga(e,t);return r>=0?e[r|1]=n:(r=~r,pa(e,r,t,n)),r}function ha(e,t){let n=ga(e,t);if(n>=0)return e[n|1]}function ga(e,t){return _a(e,t,1)}function _a(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 la(t,e=>{let t=e;Da(t,a,[],r)&&(i||=[],i.push(t))}),i!==void 0&&Ea(i,a),n}function Ea(e,t){for(let n=0;n{t(e,r)})}}function Da(e,t,n,r){if(e=_i(e),!e)return!1;let i=null,a=Ci(e),o=!a&&Pi(e);if(!a&&!o){let t=e.ngModule;if(a=Ci(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)Da(i,t,n,r)}}else if(a){if(a.imports!=null&&!s){r.add(i);let e;try{la(a.imports,i=>{Da(i,t,n,r)&&(e||=[],e.push(i))})}finally{}e!==void 0&&Ea(e,t)}if(!s){let e=oa(i)||(()=>new i);t({provide:i,useFactory:e,deps:ya},i),t({provide:Sa,useValue:i,multi:!0},i),t({provide:ba,useValue:()=>ta(i),multi:!0},i)}let o=a.providers;if(o!=null&&!s){let n=e;Oa(o,e=>{t(e,n)})}}else return!1;return i!==e&&e.providers!==void 0}function Oa(e,t){for(let n of e)Di(n)&&(n=n.ɵproviders),Array.isArray(n)?Oa(n,t):t(n)}var ka=pi({provide:String,useValue:pi});function Aa(e){return typeof e==`object`&&!!e&&ka in e}function ja(e){return!!(e&&e.useExisting)}function Ma(e){return!!(e&&e.useFactory)}function Na(e){return typeof e==`function`}function Pa(e){return!!e.useClass}var Fa=new Ei(``),Ia={},La={},Ra=void 0;function za(){return Ra===void 0&&(Ra=new Ca),Ra}var Ba=class{},Va=class extends Ba{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,Za(e,e=>this.processProvider(e)),this.records.set(xa,qa(void 0,this)),r.has(`environment`)&&this.records.set(Ba,qa(void 0,this));let i=this.records.get(Fa);i!=null&&typeof i.value==`string`&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(Sa,ya,{self:!0}))}retrieve(e,t){let n=na(t)||0;try{return this.get(e,Zi,n)}catch(e){if(Bn(e))return e;throw e}}destroy(){Ka(this),this._destroyed=!0;let e=tn(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(),tn(e)}}onDestroy(e){return Ka(this),this._onDestroyHooks.push(e),()=>this.removeOnDestroy(e)}runInContext(e){Ka(this);let t=Rn(this),n=Ji(void 0);try{return e()}finally{Rn(t),Ji(n)}}get(e,t=Zi,n){if(Ka(this),Object.hasOwn(e,Ni))return e[Ni](this);let r=na(n),i=Rn(this),a=Ji(void 0);try{if(!(r&4)){let t=this.records.get(e);if(t===void 0){let n=Xa(e)&&bi(e);t=n&&this.injectableDefInScope(n)?qa(Ha(e),Ia):null,this.records.set(e,t)}if(t!=null)return this.hydrate(e,t,r)}let n=r&2?za():this.parent;return t=r&8&&t===Zi?null:t,n.get(e,t)}catch(e){let t=Gi(e);throw t===-200||t===-201?new di(t,null):e}finally{Ji(a),Rn(i)}}resolveInjectorInitializers(){let e=tn(null),t=Rn(this),n=Ji(void 0);try{let e=this.get(ba,ya,{self:!0});for(let t of e)t()}finally{Rn(t),Ji(n),tn(e)}}toString(){return`R3Injector[...]`}processProvider(e){e=_i(e);let t=Na(e)?e:_i(e&&e.provide),n=Wa(e);if(!Na(e)&&e.multi===!0){let n=this.records.get(t);n||(n=qa(void 0,Ia,!0),n.factory=()=>ia(n.multi),this.records.set(t,n)),t=e,n.multi.push(e)}this.records.set(t,n)}hydrate(e,t,n){let r=tn(null);try{if(t.value===La)throw Hi(``);return t.value===Ia&&(t.value=La,t.value=t.factory(void 0,n)),typeof t.value==`object`&&t.value&&Ya(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}finally{tn(r)}}injectableDefInScope(e){if(!e.providedIn)return!1;let t=_i(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 Ha(e){let t=bi(e),n=t===null?oa(e):t.factory;if(n!==null)return n;if(e instanceof Ei)throw new di(-204,!1);if(e instanceof Function)return Ua(e);throw new di(-204,!1)}function Ua(e){if(e.length>0)throw new di(-204,!1);let t=Si(e);return t===null?()=>new e:()=>t.factory(e)}function Wa(e){return Aa(e)?qa(void 0,e.useValue):qa(Ga(e),Ia)}function Ga(e,t,n){let r;if(Na(e)){let t=_i(e);return oa(t)||Ha(t)}if(Aa(e))r=()=>_i(e.useValue);else if(Ma(e))r=()=>e.useFactory(...ia(e.deps||[]));else if(ja(e))r=(t,n)=>ta(_i(e.useExisting),n!==void 0&&n&8?8:void 0);else{let t=_i(e&&(e.useClass||e.provide));if(Ja(e))r=()=>new t(...ia(e.deps));else return oa(t)||Ha(t)}return r}function Ka(e){if(e.destroyed)throw new di(-205,!1)}function qa(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function Ja(e){return!!e.deps}function Ya(e){return typeof e==`object`&&!!e&&typeof e.ngOnDestroy==`function`}function Xa(e){return typeof e==`function`||typeof e==`object`&&e.ngMetadataName===`InjectionToken`}function Za(e,t){for(let n of e)Array.isArray(n)?Za(n,t):n&&Di(n)?Za(n.ɵproviders,t):t(n)}function Qa(e,t){let n;e instanceof Va?(Ka(e),n=e):n=new $i(e);let r=Rn(n),i=Ji(void 0);try{return t()}finally{Rn(r),Ji(i)}}function $a(){return qi()!==void 0||Ln()!=null}var eo=1;function to(e){return Array.isArray(e)&&typeof e[eo]==`object`}function no(e){return Array.isArray(e)&&e[eo]===!0}function ro(e){return!!(e.flags&4)}function io(e){return e.componentOffset>-1}function ao(e){return(e.flags&1)==1}function oo(e){return!!e.template}function so(e){return!!(e[2]&512)}function co(e){return(e[2]&256)==256}var lo=(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})(lo||{}),uo=`math`;function fo(e){for(;Array.isArray(e);)e=e[0];return e}function po(e,t){return fo(t[e])}function mo(e,t){return fo(t[e.index])}function ho(e,t){return e.data[t]}function go(e,t){return e[t]}function _o(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}function vo(e,t){let n=t[e];return to(n)?n:n[0]}function yo(e){return(e[2]&128)==128}function Gee(e){return no(e[3])}function bo(e,t){return t==null?null:e[t]}function xo(e){e[17]=0}function So(e){e[2]&1024||(e[2]|=1024,yo(e)&&To(e))}function Kee(e,t){for(;e>0;)t=t[14],e--;return t}function Co(e){return!!(e[2]&9216||e[24]?.dirty)}function wo(e){e[10].changeDetectionScheduler?.notify(8),e[2]&64&&(e[2]|=1024),Co(e)&&To(e)}function To(e){e[10].changeDetectionScheduler?.notify(0);let t=Do(e);for(;t!==null&&!(t[2]&8192||(t[2]|=8192,!yo(t)));)t=Do(t)}function Eo(e,t){if(co(e))throw new di(911,!1);e[21]===null&&(e[21]=[]),e[21].push(t)}function qee(e,t){if(e[21]===null)return;let n=e[21].indexOf(t);n!==-1&&e[21].splice(n,1)}function Do(e){let t=e[3];return no(t)?t[3]:t}function Oo(e){return e[7]??=[]}function ko(e){return e.cleanup??=[]}function Jee(e,t,n,r){let i=Oo(t);i.push(n),e.firstCreatePass&&ko(e).push(r,i.length-1)}var Ao={lFrame:ns(null),bindingsEnabled:!0,skipHydrationRootTNode:null},jo=!1;function Yee(){return Ao.lFrame.elementDepthCount}function Xee(){Ao.lFrame.elementDepthCount++}function Mo(){Ao.lFrame.elementDepthCount--}function No(){return Ao.bindingsEnabled}function Po(){return Ao.skipHydrationRootTNode!==null}function Fo(e){return Ao.skipHydrationRootTNode===e}function Io(){Ao.skipHydrationRootTNode=null}function Lo(){return Ao.lFrame.lView}function Ro(){return Ao.lFrame.tView}function S(e){return Ao.lFrame.contextLView=e,e[8]}function C(e){return Ao.lFrame.contextLView=null,e}function zo(){let e=Bo();for(;e!==null&&e.type===64;)e=e.parent;return e}function Bo(){return Ao.lFrame.currentTNode}function Zee(){let e=Ao.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}function Vo(e,t){let n=Ao.lFrame;n.currentTNode=e,n.isParent=t}function Ho(){return Ao.lFrame.isParent}function Uo(){Ao.lFrame.isParent=!1}function Wo(){return Ao.lFrame.contextLView}function Go(){return jo}function Ko(e){let t=jo;return jo=e,t}function qo(){let e=Ao.lFrame,t=e.bindingRootIndex;return t===-1&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function Jo(){return Ao.lFrame.bindingIndex}function Qee(e){return Ao.lFrame.bindingIndex=e}function Yo(){return Ao.lFrame.bindingIndex++}function Xo(e){let t=Ao.lFrame,n=t.bindingIndex;return t.bindingIndex+=e,n}function $ee(){return Ao.lFrame.inI18n}function ete(e,t){let n=Ao.lFrame;n.bindingIndex=n.bindingRootIndex=e,Zo(t)}function tte(){return Ao.lFrame.currentDirectiveIndex}function Zo(e){Ao.lFrame.currentDirectiveIndex=e}function nte(e){let t=Ao.lFrame.currentDirectiveIndex;return t===-1?null:e[t]}function rte(){return Ao.lFrame.currentQueryIndex}function Qo(e){Ao.lFrame.currentQueryIndex=e}function ite(e){let t=e[1];return t.type===2?t.declTNode:t.type===1?e[5]:null}function $o(e,t,n){if(n&4){let r=t,i=e;for(;r=r.parent,r===null&&!(n&1)&&(r=ite(i),!(r===null||(i=i[14],r.type&10))););if(r===null)return!1;t=r,e=i}let r=Ao.lFrame=ts();return r.currentTNode=t,r.lView=e,!0}function es(e){let t=ts(),n=e[1];Ao.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function ts(){let e=Ao.lFrame,t=e===null?null:e.child;return t===null?ns(e):t}function ns(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 rs(){let e=Ao.lFrame;return Ao.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var is=rs;function as(){let e=rs();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 ate(e){return(Ao.lFrame.contextLView=Kee(e,Ao.lFrame.contextLView))[8]}function os(){return Ao.lFrame.selectedIndex}function ss(e){Ao.lFrame.selectedIndex=e}function cs(){let e=Ao.lFrame;return ho(e.tView,e.selectedIndex)}function w(){Ao.lFrame.currentNamespace=`svg`}function ls(){us()}function us(){Ao.lFrame.currentNamespace=null}function ds(){return Ao.lFrame.currentNamespace}var fs=!0;function ps(){return fs}function ms(e){fs=e}function hs(e,t=null,n=null,r){let i=gs(e,t,n,r);return i.resolveInjectorInitializers(),i}function gs(e,t=null,n=null,r,i=new Set){return new Va([n||ya,wa(e)],t||za(),null,i)}var _s=class e{static THROW_IF_NOT_FOUND=Zi;static NULL=new Ca;static create(e,t){if(Array.isArray(e))return hs({name:``},t,e,``);{let t=e.name??``;return hs({name:t},e.parent,e.providers,t)}}static ɵprov=yi({token:e,providedIn:`any`,factory:()=>ta(xa)});static __NG_ELEMENT_ID__=-1},vs=new Ei(``),ys=class{static __NG_ELEMENT_ID__=xs;static __NG_ENV_ID__=e=>e},bs=class extends ys{_lView;constructor(e){super(),this._lView=e}get destroyed(){return co(this._lView)}onDestroy(e){let t=this._lView;return Eo(t,e),()=>qee(t,e)}};function xs(){return new bs(Lo())}var Ss=new Ei(``),Cs=(()=>{class e{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new Wr(!1);debugTaskTracker=x(Ss,{optional:!0});get hasPendingTasks(){return!this.destroyed&&this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new Nr(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=yi({token:e,providedIn:`root`,factory:()=>new e})}return e})(),ws=class extends Hr{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(e=!1){super(),this.__isAsync=e,$a()&&(this.destroyRef=x(ys,{optional:!0})??void 0,this.pendingTasks=x(Cs,{optional:!0})??void 0)}emit(e){let t=tn(null);try{super.next(e)}finally{tn(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 or&&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 Ts(...e){}function Es(e){let t,n;function r(){e=Ts;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 Ds(e){return queueMicrotask(()=>e()),()=>{e=Ts}}var Os=`isAngularZone`,ks=`isAngularZone_ID`,As=0,js=class e{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new ws(!1);onMicrotaskEmpty=new ws(!1);onStable=new ws(!1);onError=new ws(!1);constructor(e){let{enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1,scheduleInRootZone:i=!1}=e;if(typeof Zone>`u`)throw new di(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,Fs(a)}static isInAngularZone(){return typeof Zone<`u`&&Zone.current.get(Os)===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new di(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new di(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,Ms,Ts,Ts);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)}},Ms={};function Ns(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 Ps(e){if(e.isCheckStableRunning||e.callbackScheduled)return;e.callbackScheduled=!0;function t(){Es(()=>{e.callbackScheduled=!1,Is(e),e.isCheckStableRunning=!0,Ns(e),e.isCheckStableRunning=!1})}e.scheduleInRootZone?Zone.root.run(()=>{t()}):e._outer.run(()=>{t()}),Is(e)}function Fs(e){let t=()=>{Ps(e)},n=As++;e._inner=e._inner.fork({name:`angular`,properties:{[Os]:!0,[ks]:n,[ks+n]:!0},onInvokeTask:(n,r,i,a,o,s)=>{if(Bs(s))return n.invokeTask(i,a,o,s);try{return Ls(e),n.invokeTask(i,a,o,s)}finally{(e.shouldCoalesceEventChangeDetection&&a.type===`eventTask`||e.shouldCoalesceRunChangeDetection)&&t(),Rs(e)}},onInvoke:(n,r,i,a,o,s,c)=>{try{return Ls(e),n.invoke(i,a,o,s,c)}finally{e.shouldCoalesceRunChangeDetection&&!e.callbackScheduled&&!Vs(s)&&t(),Rs(e)}},onHasTask:(t,n,r,i)=>{t.hasTask(r,i),n===r&&(i.change==`microTask`?(e._hasPendingMicrotasks=i.microTask,Is(e),Ns(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 Is(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.callbackScheduled===!0)}function Ls(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function Rs(e){e._nesting--,Ns(e)}var zs=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new ws;onMicrotaskEmpty=new ws;onStable=new ws;onError=new ws;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 Bs(e){return Hs(e,`__ignore_ng_zone__`)}function Vs(e){return Hs(e,`__scheduler_tick__`)}function Hs(e,t){return!Array.isArray(e)||e.length!==1?!1:e[0]?.data?.[t]===!0}var Us=class{_console=console;handleError(e){this._console.error(`ERROR`,e)}},Ws=new Ei(``,{factory:()=>{let e=x(js),t=x(Ba),n;return r=>{e.runOutsideAngular(()=>{t.destroyed&&!n?setTimeout(()=>{throw r}):(n??=t.get(Us),n.handleError(r))})}}}),Gs={provide:ba,useValue:()=>{x(Us,{optional:!0})},multi:!0};function T(e,t){let[n,r,i]=_ee(e,t?.equal),a=n;return a[en],a.set=r,a.update=i,a.asReadonly=Ks.bind(a),a}function Ks(){let e=this[en];if(e.readonlyFn===void 0){let t=()=>this();t[en]=e,e.readonlyFn=t}return e.readonlyFn}var qs=new Ei(``,{factory:()=>Js}),Js=`ng`,Ys=new Ei(``),Xs=new Ei(``,{providedIn:`platform`,factory:()=>`unknown`}),Zs=new Ei(``,{factory:()=>x(vs).body?.querySelector(`[ngCspNonce]`)?.getAttribute(`ngCspNonce`)||null}),Qs=(()=>{class e{view;node;constructor(e,t){this.view=e,this.node=t}static __NG_ELEMENT_ID__=$s}return e})();function $s(){return new Qs(Lo(),zo())}var ec=class{},tc=new Ei(``,{factory:()=>!0}),nc=new Ei(``),rc=(()=>{class e{static ɵprov=yi({token:e,providedIn:`root`,factory:()=>new ic})}return e})(),ic=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}},ac=class{[en];constructor(e){this[en]=e}destroy(){this[en].destroy()}};function E(e,t){let n=t?.injector??x(_s),r=t?.manualCleanup===!0?null:n.get(ys),i,a=n.get(Qs,null,{optional:!0}),o=n.get(ec);return a===null?i=uc(e,n.get(rc),o):(i=lc(a.view,o,e),r instanceof bs&&r._lView===a.view&&(r=null)),i.injector=n,r!==null&&(i.onDestroyFns=[r.onDestroy(()=>i.destroy())]),new ac(i)}var oc={...Pn,cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let e=Ko(!1);try{Fn(this)}finally{Ko(e)}},cleanup(){if(!this.cleanupFns?.length)return;let e=tn(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],tn(e)}}},sc={...oc,consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){if(_n(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.scheduler.remove(this)}},cc={...oc,consumerMarkedDirty(){this.view[2]|=8192,To(this.view),this.notifier.notify(13)},destroy(){if(_n(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.view[23]?.delete(this)}};function lc(e,t,n){let r=Object.create(cc);return r.view=e,r.zone=typeof Zone<`u`?Zone.current:null,r.notifier=t,r.fn=dc(r,n),e[23]??=new Set,e[23].add(r),r.consumerMarkedDirty(r),r}function uc(e,t,n){let r=Object.create(sc);return r.fn=dc(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 dc(e,t){return()=>{t(t=>(e.cleanupFns??=[]).push(t))}}function fc(e){return typeof e==`function`&&e[en]!==void 0}function pc(e){return fc(e)&&typeof e.set==`function`}var mc=Symbol(`InputSignalNode#UNSET`),hc={...Mn,transformFn:void 0,applyValueToInputSignal(e,t){An(e,t)}};function gc(e){return{toString:e}.toString()}var _c=(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})(_c||{}),vc=class{previousValue;currentValue;firstChange;constructor(e,t,n){this.previousValue=e,this.currentValue=t,this.firstChange=n}isFirstChange(){return this.firstChange}};function yc(e,t,n,r){t===null?e[n]=r:t.applyValueToInputSignal(t,r)}var bc=null,xc=(()=>{bc=Cc;let e=()=>Cc;return e.ngInherit=!0,e})();function Sc(){return bc}function Cc(e){return e.type.prototype.ngOnChanges&&(e.setInput=Tc),wc}function wc(){let e=Dc(this),t=e?.current;if(t){let n=e.previous;if(n===va)e.previous=t;else for(let e in t)n[e]=t[e];e.current=null,this.ngOnChanges(t)}}function Tc(e,t,n,r,i){let a=this.declaredInputs[r],o=Dc(e)||Oc(e,{previous:va,current:null}),s=o.current||={},c=o.previous,l=c[a];s[a]=new vc(l&&l.currentValue,n,c===va),yc(e,t,i,n)}var Ec=`__ngSimpleChanges__`;function Dc(e){return Object.hasOwn(e,Ec)&&e[Ec]||null}function Oc(e,t){return e[Ec]=t}var kc=[],Ac=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,Lc(o,a)):Lc(o,a)}var zc=-1,Bc=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 Vc(e){return!!(e.flags&8)}function Hc(e){return!!(e.flags&16)}function Uc(e,t,n){let r=0;for(;rt){o=a-1;break}}}for(;a>16}function Zc(e,t){let n=Xc(e),r=t;for(;n>0;)r=r[14],n--;return r}var Qc=!0;function $c(e){let t=Qc;return Qc=e,t}var el=255,tl=5,nl=0,rl={};function il(e,t,n){let r;typeof n==`string`?r=n.charCodeAt(0)||0:Object.hasOwn(n,Mi)&&(r=n[Mi]),r??=n[Mi]=nl++;let i=r&el,a=1<>tl)]|=a}function al(e,t){let n=sl(e,t);if(n!==-1)return n;let r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,ol(r.data,e),ol(t,null),ol(r.blueprint,null));let i=cl(e,t),a=e.injectorIndex;if(Jc(i)){let e=Yc(i),n=Zc(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 ol(e,t){e.push(0,0,0,0,0,0,0,0,t)}function sl(e,t){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||t[e.injectorIndex+8]===null?-1:e.injectorIndex}function cl(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=Tl(i),r===null)return zc;if(n++,i=i[14],r.injectorIndex!==-1)return r.injectorIndex|n<<16}return zc}function ll(e,t,n){il(e,t,n)}function ul(e,t,n){if(n&8||e!==void 0)return e;Ui(t,`NodeInjector`)}function dl(e,t,n,r){if(n&8&&r===void 0&&(r=null),!(n&3)){let i=e[9],a=Ji(void 0);try{return i?i.get(t,r,n&8):Yi(t,r,n&8)}finally{Ji(a)}}return ul(r,t,n)}function fl(e,t,n,r=0,i){if(e!==null){if(t[2]&2048&&!(r&2)){let i=wl(e,t,n,r,rl);if(i!==rl)return i}let i=pl(e,t,n,r,rl);if(i!==rl)return i}return dl(t,n,r,i)}function pl(e,t,n,r,i){let a=_l(n);if(typeof a==`function`){if(!$o(t,e,r))return r&1?ul(i,n,r):dl(t,n,r,i);try{let e;if(e=a(r),e==null&&!(r&8))Ui(n);else return e}finally{is()}}else if(typeof a==`number`){let i=null,o=sl(e,t),s=zc,c=r&1?t[15][5]:null;for((o===-1||r&4)&&(s=o===-1?cl(e,t):t[o+8],s===zc||!yl(r,!1)?o=-1:(i=t[1],o=Yc(s),t=Zc(s,t)));o!==-1;){let e=t[1];if(vl(a,o,e.data)){let e=ml(o,t,n,i,r,c);if(e!==rl)return e}s=t[o+8],s!==zc&&yl(r,t[1].data[o+8]===c)&&vl(a,o,t)?(i=e,o=Yc(s),t=Zc(s,t)):o=-1}}return i}function ml(e,t,n,r,i,a){let o=t[1],s=o.data[e+8],c=hl(s,o,n,r==null?io(s)&&Qc:r!=o&&!!(s.type&3),i&1&&a===s);return c===null?rl:gl(t,o,c,s,i)}function hl(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&&oo(e)&&e.type===n)return c}return null}function gl(e,t,n,r,i){let a=e[n],o=t.data;if(a instanceof Bc){let s=a;if(s.resolving)throw Hi(``);let c=$c(s.canSeeViewProviders);s.resolving=!0,o[n].type||o[n];let l=s.injectImpl?Ji(s.injectImpl):null;$o(e,r,0);try{a=e[n]=s.factory(void 0,i,o,e,r),t.firstCreatePass&&n>=r.directiveStart&&jc(n,o[n],t)}finally{l!==null&&Ji(l),$c(c),s.resolving=!1,is()}}return a}function _l(e){if(typeof e==`string`)return e.charCodeAt(0)||0;let t=Object.hasOwn(e,Mi)?e[Mi]:void 0;return typeof t==`number`?t>=0?t&el:xl:t}function vl(e,t,n){let r=1<>tl)]&r)}function yl(e,t){return!(e&2)&&!(e&1&&t)}var bl=class{_tNode;_lView;constructor(e,t){this._tNode=e,this._lView=t}get(e,t,n){return fl(this._tNode,this._lView,e,na(n),t)}};function xl(){return new bl(zo(),Lo())}function Sl(e){return gc(()=>{let t=e.prototype.constructor,n=t[ji]||Cl(t),r=Object.prototype,i=Object.getPrototypeOf(e.prototype).constructor;for(;i&&i!==r;){let e=i[ji]||Cl(i);if(e&&e!==n)return e;i=Object.getPrototypeOf(i)}return e=>new e})}function Cl(e){return vi(e)?()=>{let t=Cl(_i(e));return t&&t()}:oa(e)}function wl(e,t,n,r,i){let a=e,o=t;for(;a!==null&&o!==null&&o[2]&2048&&!so(o);){let e=pl(a,o,n,r|2,rl);if(e!==rl)return e;r&=-5;let t=a.parent;if(!t){let e=o[20];if(e){let t=e.get(n,rl,r);if(t!==rl)return t}t=Tl(o),o=o[14]}a=t}return i}function Tl(e){let t=e[1],n=t.type;return n===2?t.declTNode:n===1?e[5]:null}function El(e){return{token:e.token,providedIn:e.autoProvided===!1?null:`root`,factory:e.factory,value:void 0}}function Dl(){return Ol(zo(),Lo())}function Ol(e,t){return new kl(mo(e,t))}var kl=(()=>{class e{nativeElement;constructor(e){this.nativeElement=e}static __NG_ELEMENT_ID__=Dl}return e})();function Al(e){return e instanceof kl?e.nativeElement:e}function jl(){return this._results[Symbol.iterator]()}var Ml=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 Hr}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=ca(e);(this._changesDetected=!sa(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]=jl};function Nl(e){return(e.flags&128)==128}var Pl=(function(e){return e[e.OnPush=0]=`OnPush`,e[e.Eager=1]=`Eager`,e[e.Default=1]=`Default`,e})(Pl||{}),Fl=new Map,Il=0;function Ll(){return Il++}function Rl(e){Fl.set(e[19],e)}function zl(e){Fl.delete(e[19])}var Bl=`__ngContext__`;function Vl(e,t){to(t)?(e[Bl]=t[19],Rl(t)):e[Bl]=t}function Hl(e){return Wl(e[12])}function Ul(e){return Wl(e[4])}function Wl(e){for(;e!==null&&!no(e);)e=e[4];return e}var Gl=void 0;function Kl(e){Gl=e}function ql(){if(Gl!==void 0)return Gl;if(typeof document<`u`)return document;throw new di(210,!1)}var Jl=!1,Yl=new Ei(``,{factory:()=>Jl}),Xl=new WeakMap;function Zl(e,t){if(typeof e!=`object`||!e)return;let n=Xl.get(e);n||(n=new WeakSet,Xl.set(e,n)),n.add(t)}function Ql(e){return(e.flags&32)==32}var $l=()=>null;function eu(e,t,n=!1){return $l(e,t,n)}function tu(e,t){let n=e.contentQueries;if(n!==null){let r=tn(null);try{for(let r=0;r|^->||--!>|)/g,pu=`​$1​`;function ote(e){return e.replace(du,e=>e.replace(fu,pu))}function ste(e,t){return e.createText(t)}function cte(e,t,n){e.setValue(t,n)}function lte(e,t){return e.createComment(ote(t))}function mu(e,t,n){return e.createElement(t,n)}function hu(e,t,n,r,i){e.insertBefore(t,n,r,i)}function gu(e,t,n){e.appendChild(t,n)}function _u(e,t,n,r,i){r===null?gu(e,t,n):hu(e,t,n,r,i)}function vu(e,t,n,r){e.removeChild(null,t,n,r)}function ute(e,t,n){e.setAttribute(t,`style`,n)}function dte(e,t,n){n===``?e.removeAttribute(t,`class`):e.setAttribute(t,`class`,n)}function yu(e,t,n){let{mergedAttrs:r,classes:i,styles:a}=n;r!==null&&Uc(e,t,r),i!==null&&dte(e,t,i),a!==null&&ute(e,t,a)}function bu(e){let t=fte();return t?t.sanitize(lo.URL,e)||``:su(e,`URL`)?ou(e):uu(Ri(e))}function fte(){let e=Lo();return e&&e[10].sanitizer}function xu(e){return e.ownerDocument.defaultView}function Su(e){return e.ownerDocument}function pte(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 Cu=`ng-template`;function mte(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(Tu(r))return!1;o=!0}}}}}return Tu(r)||o}function Tu(e){return!(e&1)}function _te(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!==``&&!Tu(o)&&(t+=Du(a,i),i=``),r=o,a||=!Tu(r);n++}return i!==``&&(t+=Du(a,i)),t}function Cte(e){return e.map(Ste).join(`,`)}function wte(e){let t=[],n=[],r=1,i=2;for(;r!1});function ju(e){if(!e)return 0;let t=e.toLowerCase().indexOf(`ms`)>-1?1:1e3;return parseFloat(e)*t}function Mu(e,t){return e.getPropertyValue(t).split(`,`).map(e=>e.trim())}function Dte(e){let t=Mu(e,`transition-property`),n=Mu(e,`transition-duration`),r=Mu(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 Ote(e){let t=Mu(e,`animation-name`),n=Mu(e,`animation-delay`),r=Mu(e,`animation-duration`),i=Mu(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 Nu(e,t){return e!==void 0&&e.duration>t.duration}function Pu(e){return(e.animationName!=null||e.propertyName!=null)&&e.duration>0}function Fu(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 kte(e,t){let n=getComputedStyle(e),r=Ote(n),i=Dte(n),a=r.duration>i.duration?r:i;Nu(t.get(e),a)||Pu(a)&&t.set(e,a)}function Ate(e,t,n){if(!n)return;let r=e.getAnimations();return r.length===0?kte(e,t):jte(e,t,r)}function jte(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=Fu(e)??0,n,i;e.animationName?i=e.animationName:n=e.transitionProperty,t>=r.duration&&(r={animationName:i,propertyName:n,duration:t})}Nu(t.get(e),r)||Pu(r)&&t.set(e,r)}var Iu=new Set,Mte=!1,Nte=1,Lu=typeof document<`u`&&typeof document?.documentElement?.getAnimations==`function`;function Pte(e){return e[9].get(Ete,Mte)}function Fte(e,t,n){let r=zu.get(e);if(r){for(let e of t)r.classList.push(e);for(let e of n)r.cleanupFns.push(e)}else zu.set(e,{classList:t,cleanupFns:n})}function Ru(e){let t=zu.get(e);if(t){for(let e of t.cleanupFns)e();zu.delete(e)}Bu.delete(e)}var zu=new WeakMap,Bu=new WeakMap,Vu=new WeakMap;function Hu(e){return e?e[14]??e:null}var Uu=new WeakSet;function Ite(e,t,n){let r=Vu.get(e);if(!r||r.length===0)return;let i=t.parentNode,a=t.previousSibling,o=Hu(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),Uu.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 Lte(e,t,n){let r=Hu(n),i=Vu.get(e);i?i.some(e=>e.el===t)||i.push({el:t,declarationView:r}):Vu.set(e,[{el:t,declarationView:r}])}function Wu(e){let t=e[26]??={};return t.enter??=new Map}function Rte(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 Gu(e){return e.composedPath?e.composedPath()[0]:e.target}function Ku(e,t){let n=Bu.get(t);if(n===void 0)return!0;if(t!==Gu(e))return!1;let r=e.animation;if(r){let e=Fu(r);if(e!==void 0&&e+Nte{class e{impl=null;execute(){this.impl?.execute()}static ɵprov=yi({token:e,providedIn:`root`,factory:()=>new e})}return e})(),Qu=[0,1,2,3],$u=(()=>{class e{ngZone=x(js);scheduler=x(ec);errorHandler=x(Us,{optional:!0});sequences=new Set;deferredRegistrations=new Set;executing=!1;constructor(){x(Ju,{optional:!0})}execute(){let e=this.sequences.size>0;e&&Ac(_c.AfterRenderHooksStart),this.executing=!0;for(let e of Qu)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&&Ac(_c.AfterRenderHooksEnd)}register(e){let{view:t}=e;t===void 0?this.executing?this.deferredRegistrations.add(e):this.addSequence(e):((t[25]??=[]).push(e),To(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(qu.AFTER_NEXT_RENDER,e):e()}static ɵprov=yi({token:e,providedIn:`root`,factory:()=>new e})}return e})(),ed=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 td(e,t){let n=t?.injector??x(_s);return Xu(`NgAfterNextRender`),Vte(e,n,t,!0)}function Bte(e){return e instanceof Function?[void 0,void 0,e,void 0]:[e.earlyRead,e.write,e.mixedReadWrite,e.read]}function Vte(e,t,n,r){let i=t.get(Zu);i.impl??=t.get($u);let a=t.get(Ju,null,{optional:!0}),o=n?.manualCleanup===!0?null:t.get(ys),s=t.get(Qs,null,{optional:!0}),c=new ed(i.impl,Bte(e),s?.view,r,o,a?.snapshot(null));return i.impl.register(c),c}var nd=new Ei(``,{factory:()=>{let e=x(Ba),t=new Set;return e.onDestroy(()=>t.clear()),{queue:t,isScheduled:!1,scheduler:null,injector:e}}});function rd(e,t,n){let r=e.get(nd);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 Hte(e,t){let n=e.get(nd);if(Array.isArray(t))for(let e of t)n.queue.delete(e);else n.queue.delete(t)}function Ute(e,t){let n=e.get(nd);if(t.detachedLeaveAnimationFns){for(let e of t.detachedLeaveAnimationFns)n.queue.delete(e);t.detachedLeaveAnimationFns=void 0}}function Wte(e){let t=e.get(nd);t.isScheduled||=(td(()=>{t.isScheduled=!1;for(let e of t.queue)e();t.queue.clear()},{injector:t.injector}),!0)}function Gte(e){let t=e.get(nd);t.scheduler=Wte,t.scheduler(e)}function id(e,t){for(let[n,r]of t)rd(e,r.animateFns)}function ad(e,t,n,r){let i=e?.[26]?.enter;t!==null&&i&&i.has(n.index)&&id(r,i)}function od(e,t,n,r){try{n.get(xa)}catch{return r(!1)}let i=e?.[26];i?.enter?.has(t.index)&&Hte(n,i.enter.get(t.index).animateFns);let a=Kte(e,t,i);if(a.size===0){let n=!1;if(e){let r=[];sd(e,t,r),n=r.length>0}if(!n)return r(!1)}e&&Iu.add(e[19]),rd(n,()=>qte(e,t,i||void 0,a,r),i||void 0)}function Kte(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 qte(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&&sd(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),Yte(e,t.running,i)}else Promise.allSettled(a).then(()=>{e&&Iu.delete(e[19]),i(!0)})}else e&&Iu.delete(e[19]),i(!1)}function sd(e,t,n){if(t.type&12){let r=e[t.index];if(no(r))for(let e=10;e{e[26]?.running===t&&(e[26].running=void 0,Iu.delete(e[19])),n(!0)})}function cd(e,t,n,r,i,a,o,s){if(i!=null){let c,l=!1;no(i)?c=i:to(i)&&(l=!0,i=i[0]);let u=fo(i);e===0&&r!==null?(ad(s,r,a,n),o==null?gu(t,r,u):hu(t,r,u,o||null,!0)):e===1&&r!==null?(ad(s,r,a,n),hu(t,r,u,o||null,!0),Ite(a,u,s)):e===2?(s?.[26]?.leave?.has(a.index)&&Lte(a,u,s),Uu.delete(u),od(s,a,n,e=>{if(Uu.has(u)){Uu.delete(u);return}vu(t,u,l,e)})):e===3&&(Uu.delete(u),od(s,a,n,()=>{t.destroyNode(u)})),c!=null&&wd(t,e,n,c,a,r,o)}}function Xte(e,t){ld(e,t),t[0]=null,t[5]=null}function Zte(e,t,n,r,i,a){r[0]=i,r[5]=t,bd(e,r,n,1,i,a)}function ld(e,t){t[10].changeDetectionScheduler?.notify(9),bd(e,t,t[11],2,null,null)}function Qte(e){let t=e[12];if(!t)return fd(e[1],e);for(;t;){let n=null;if(to(t))n=t[12];else{let e=t[10];e&&(n=e)}if(!n){for(;t&&!t[4]&&t!==e;)to(t)&&fd(t[1],t),t=t[3];t===null&&(t=e),to(t)&&fd(t[1],t),n=t&&t[4]}t=n}}function ud(e,t){let n=e[9],r=n.indexOf(t);n.splice(r,1)}function dd(e,t){if(co(t))return;let n=t[11];n.destroyNode&&bd(e,t,n,3,null,null),Qte(t)}function fd(e,t){if(co(t))return;let n=tn(null);try{t[2]&=-129,t[2]|=256,t[24]&&_n(t[24]),ene(e,t),$te(e,t),t[1].type===1&&t[11].destroy();let n=t[16];if(n!==null&&no(t[3])){n!==t[3]&&ud(n,t);let r=t[18];r!==null&&r.detachView(e)}zl(t)}finally{tn(n)}}function $te(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&&Pd(e,t,27,!1),Ac(o?_c.TemplateUpdateStart:_c.TemplateCreateStart,i,n),n(r,i)}finally{ss(a),Ac(o?_c.TemplateUpdateEnd:_c.TemplateCreateEnd,i,n)}}function Rd(e,t,n){Gd(e,t,n),(n.flags&64)==64&&Kd(e,t,n)}function zd(e,t,n=mo){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];Id(o,n[i],s,a),l=!0}else if(i>c)break}}return o!==null&&Object.hasOwn(r.inputs,i)&&(Id(r,n[o],i,a),l=!0),l}function rf(e,t){let n=vo(t,e),r=n[1];af(r,n);let i=n[0];i!==null&&n[6]===null&&(n[6]=eu(i,n[9])),Ac(_c.ComponentStart);try{of(r,n,n[8])}finally{Ac(_c.ComponentEnd,n[8])}}function af(e,t){for(let n=t.length;n{To(e.lView)},consumerOnSignalRead(){this.lView[24]=this}};function vf(e){let t=e[24]??Object.create(yf);return t.lView=e,t}var yf={...rn,consumerIsAlwaysLive:!0,kind:`template`,consumerMarkedDirty:e=>{let t=Do(e.lView);for(;t&&!bf(t[1]);)t=Do(t);t&&So(t)},consumerOnSignalRead(){this.lView[24]=this}};function bf(e){return e.type!==2}function xf(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 Sf=100;function Cf(e,t=0){let n=e[10].rendererFactory;n.begin?.();try{wf(e,t)}finally{n.end?.()}}function wf(e,t){let n=Go();try{Ko(!0),Af(e,t);let n=0;for(;Co(e);){if(n===Sf)throw new di(103,!1);n++,Af(e,1)}}finally{Ko(n)}}function Tf(e,t,n,r){if(co(t))return;let i=t[2];es(t);let a=!0,o=null,s=null;bf(e)?(s=mf(t),o=fn(s)):nn()===null?(a=!1,s=vf(t),o=fn(s)):t[24]&&=(_n(t[24]),null);try{xo(t),Qee(e.bindingStartIndex),n!==null&&Ld(e,t,n,2,r);let a=(i&3)==3;if(a){let n=e.preOrderCheckHooks;n!==null&&Nc(t,n,null)}else{let n=e.preOrderHooks;n!==null&&Pc(t,n,0,null),Fc(t,0)}if(Df(t),xf(t),Ef(t,0),e.contentQueries!==null&&tu(e,t),a){let n=e.contentCheckHooks;n!==null&&Nc(t,n)}else{let n=e.contentHooks;n!==null&&Pc(t,n,1),Fc(t,1)}Mf(e,t);let o=e.components;o!==null&&jf(t,o,0);let s=e.viewQuery;if(s!==null&&nu(2,s,r),a){let n=e.viewCheckHooks;n!==null&&Nc(t,n)}else{let n=e.viewHooks;n!==null&&Pc(t,n,2),Fc(t,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),t[22]){for(let e of t[22])e();t[22]=null}ff(t),t[2]&=-73}catch(e){throw To(t),e}finally{s!==null&&(mn(s,o),a&&gf(s)),as()}}function Ef(e,t){for(let n=Hl(e);n!==null;n=Ul(n))for(let e=10;e0&&(e[n-1][4]=r[4]);let a=da(e,10+t);Xte(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 zf(e,t,n,r){let i=10+r,a=n.length;r>0&&(n[i-1][4]=t),r-1&&(Rf(e,n),da(t,n))}this._attachedToViewContainer=!1}dd(this._lView[1],this._lView)}onDestroy(e){Eo(this._lView,e)}markForCheck(){Nf(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[2]&=-129}reattach(){wo(this._lView),this._lView[2]|=128}detectChanges(){this._lView[2]|=1024,Cf(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new di(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let e=so(this._lView),t=this._lView[16];t!==null&&!e&&ud(t,this._lView),ld(this._lView[1],this._lView)}attachToAppRef(e){if(this._attachedToViewContainer)throw new di(902,!1);this._appRef=e;let t=so(this._lView),n=this._lView[16];n!==null&&!t&&Bf(n,this._lView),wo(this._lView)}},Hf=(()=>{class e{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=Uf;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 Vf(cf(this._declarationLView,this._declarationTContainer,e,{embeddedViewInjector:t,dehydratedView:n}))}}return e})();function Uf(){return Wf(zo(),Lo())}function Wf(e,t){return e.type&4?new Hf(t,e,Ol(e,t)):null}function Gf(e,t,n,r,i){let a=e.data[t];if(a===null)a=Kf(e,t,n,r,i),$ee()&&(a.flags|=32);else if(a.type&64){a.type=n,a.value=r,a.attrs=i;let e=Zee();a.injectorIndex=e===null?-1:e.injectorIndex}return Vo(a,!0),a}function Kf(e,t,n,r,i){let a=Bo(),o=Ho(),s=o?a:a&&a.parent,c=e.data[t]=Jf(e,s,n,t,r,i);return qf(e,c,a,o),c}function qf(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 Jf(e,t,n,r,i,a){let o=t?t.injectorIndex:-1,s=0;return Po()&&(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:ds(),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 Yf(e){let t=e[6]??[],n=e[3][11],r=[];for(let e of t)e.data.di===void 0?Xf(e,n):r.push(e);e[6]=r}function Xf(e,t){let n=0,r=e.firstChild;if(r){let i=e.data.r;for(;nnull,Qf=()=>null;function $f(e,t){return Zf(e,t)}function ep(e,t,n){return Qf(e,t,n)}var tp=class{},np=class{},rp=class{destroyNode=null;static __NG_ELEMENT_ID__=()=>ip()};function ip(){let e=Lo(),t=vo(zo().index,e);return(to(t)?t:e)[11]}var ap=(()=>{class e{static ɵprov=yi({token:e,providedIn:`root`,factory:()=>null})}return e})();function op(e){return e.debugInfo?.className||e.type.name||null}var sp={},cp=class{injector;parentInjector;constructor(e,t){this.injector=e,this.parentInjector=t}get(e,t,n){let r=this.injector.get(e,sp,n);return r!==sp||t===sp?r:this.parentInjector.get(e,t,n)}};function lp(e,t,n){return e[t]=n}function up(e,t){return e[t]}function dp(e,t,n){if(n===Ou)return!1;let r=e[t];return!Object.is(r,n)&&(e[t]=n,!0)}function fp(e,t,n,r){let i=dp(e,t,n);return dp(e,t+1,r)||i}function pp(e,t,n,r,i){let a=fp(e,t,n,r);return dp(e,t+2,i)||a}function mp(e,t,n,r,i,a){let o=fp(e,t,n,r);return fp(e,t+2,i,a)||o}function hp(e,t,n){return function r(i){let a=r.__ngNativeEl__;a!==void 0&&Zl(i,a),Nf(io(e)?vo(e.index,t):t,5);let o=t[8],s=gp(t,o,n,i),c=r.__ngNextListenerFn__;for(;c;)s=gp(t,o,c,i)&&s,c=c.__ngNextListenerFn__;return s}}function gp(e,t,n,r){let i=tn(null);try{return Ac(_c.OutputStart,t,n),n(r)!==!1}catch(t){return ef(e,t),!1}finally{Ac(_c.OutputEnd,t,n),tn(i)}}function _p(e,t,n,r,i,a,o,s){let c=ao(e),l=!1,u=null;if(!r&&c&&(u=yp(t,n,a,e.index)),u!==null){let e=u.__ngLastListenerFn__||u;e.__ngNextListenerFn__=o,u.__ngLastListenerFn__=o,l=!0}else{let o=mo(e,n),c=r?r(o):o;r||(s.__ngNativeEl__=o);let l=i.listen(c,a,s);vp(a)||bp(r?t=>r(fo(t[e.index])):e.index,t,n,a,s,l,!1)}return l}function vp(e){return e.startsWith(`animation`)||e.startsWith(`transition`)}function yp(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 bp(e,t,n,r,i,a,o){let s=t.firstCreatePass?ko(t):null,c=Oo(n),l=c.length;c.push(i,a),s&&s.push(r,e,l,(l+1)*(o?-1:1))}function xp(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,Sp(e,t,l,n[a+1],r,i);else if(l>s)break}}return Object.hasOwn(n.outputs,r)&&(c=!0,Sp(e,t,a,r,r,i)),c}function Sp(e,t,n,r,i,a){let o=t[n],s=t[1],c=o[s.data[n].outputs[r]].subscribe(a);bp(e.index,s,t,i,a,c,!0)}function Cp(){wp()}function wp(){let e=Lo(),t=Ro(),n=zo();if(t.firstCreatePass&&Ap(t,n),n.controlDirectiveIndex===-1)return;Xu(`NgSignalForms`);let r=e[n.controlDirectiveIndex];t.data[n.controlDirectiveIndex].controlDef.create(r,new Dp(e,t,n))}function Tp(){Ep()}function Ep(){let e=Lo(),t=Ro(),n=cs();if(n.controlDirectiveIndex===-1)return;let r=t.data[n.controlDirectiveIndex].controlDef,i=e[n.controlDirectiveIndex];r.update(i,new Dp(e,t,n))}var Dp=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 mo(this.tNode,this.lView)}get descriptor(){return`<${this.tNode.value}>`}listenToCustomControlOutput(e,t){let n=this.tView.data[this.tNode.customControlIndex];xp(this.tNode,this.lView,n,e,hp(this.tNode,this.lView,t))}listenToCustomControlModel(e){let t=this.tNode.flags&1024?`valueChange`:`checkedChange`,n=this.tView.data[this.tNode.customControlIndex];xp(this.tNode,this.lView,n,t,hp(this.tNode,this.lView,e))}listenToDom(e,t){_p(this.tNode,this.tView,this.lView,void 0,this.lView[11],e,t,hp(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(kp(r,o,e)))&&(Id(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=Op(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}jp(e,t)}function jp(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 Mp(e,t){return Np(e,t)&&Pp(e,t+`Change`)}function Np(e,t){return t in e.inputs}function Pp(e,t){return t in e.outputs}var Fp=Symbol(`BINDING`),Ip=new Ei(``);function Lp(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 Zp(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&Fd.SignalBased)!==0};return i&&(a.transform=i),a})}function am(e){return Object.keys(e).map(t=>({propName:e[t],templateName:t}))}function om(e,t,n){let r=t instanceof Ba?t:t?.injector;return r&&e.getStandaloneInjector!==null&&(r=e.getStandaloneInjector(r)||r),r?new cp(n,r):n}function sm(e){let t=e.get(np,null);if(t===null)throw new di(407,!1);return{rendererFactory:t,sanitizer:e.get(ap,null),changeDetectionScheduler:e.get(ec,null),ngReflect:!1,tracingService:e.get(Ju,null,{optional:!0})}}function cm(e,t,n){let r=um(e);return mu(t,r,r===`svg`?`svg`:r===`math`?uo:n)}function lm(e){if((e&&`localName`in e&&typeof e.localName==`string`?e.localName:e?.tagName)?.toLowerCase()===`script`)throw new di(905,!1)}function um(e){return(e.selectors[0][0]||`div`).toLowerCase()}var dm=class{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=im(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=am(this.componentDef.outputs),this.cachedOutputs}constructor(e,t){this.componentDef=e,this.ngModule=t,this.componentType=e.type,this.selector=Cte(e.selectors),this.ngContentSelectors=e.ngContentSelectors??[],this.isBoundToModule=!!t}create(e,t,n,r,i,a,o){Ac(_c.DynamicComponentStart);let s=tn(null);try{let s=this.componentDef,c=om(s,r||this.ngModule,e),l=sm(c),u=l.tracingService;return u&&u.componentCreate?u.componentCreate(op(s),()=>this.createComponentRef(l,c,t,n,i,a,o)):this.createComponentRef(l,c,t,n,i,a,o)}finally{tn(s)}}createComponentRef(e,t,n,r,i,a,o){let s=this.componentDef,c=fm(r,s,a,i),l=e.rendererFactory.createRenderer(null,s),u=r?Bd(l,r,s.encapsulation,t):cm(s,l,o??null);lm(u);let d=t.get(Ip,null),f=pm(u,()=>t.get(vs,null)??ql());d&&d.addHost(f);let p=a?.some(hm)||i?.some(e=>typeof e!=`function`&&e.bindings.some(hm)),m=kd(null,c,null,512|jd(s),null,null,e,l,t,null,eu(u,t,!0));d&&nm&&f instanceof ShadowRoot&&Eo(m,()=>{d.removeHost(f)}),m[27]=u,es(m);let ee=null;try{let e=$p(27,m,2,`#host`,()=>c.directiveRegistry,!0,0);yu(l,u,e),Vl(u,m),Rd(c,m,e),ru(c,e,m),em(c,e),n!==void 0&&_m(e,this.ngContentSelectors,n),ee=vo(e.index,m),m[8]=ee[8],of(c,m,null)}catch(e){throw ee!==null&&zl(ee),zl(m),e}finally{Ac(_c.DynamicComponentEnd),as()}return new gm(this.componentType,m,!!p)}};function fm(e,t,n,r){let i=e?[`ng-version`,`22.1.7`]:wte(t.selectors[0]),a=null,o=null,s=0;if(n)for(let e of n)s+=e[Fp].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 hm(e){let t=e[Fp].kind;return t===`input`||t===`twoWay`}var gm=class extends tp{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(e,t,n){super(),this._rootLView=t,this._hasInputBindings=n,this._tNode=ho(t[1],27),this.location=Ol(this._tNode,t),this.instance=vo(this._tNode.index,t)[8],this.hostView=this.changeDetectorRef=new Vf(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;tf(n,r[1],r,e,t),this.previousInputValues.set(e,t),Nf(vo(n.index,r),1)}get injector(){return new bl(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(e){this.hostView.onDestroy(e)}};function _m(e,t,n){let r=e.projection=[];for(let e=0;e{class e{static __NG_ELEMENT_ID__=ym}return e})();function ym(){return Cm(zo(),Lo())}var bm=class e extends vm{_lContainer;_hostTNode;_hostLView;constructor(e,t,n){super(),this._lContainer=e,this._hostTNode=t,this._hostLView=n}get element(){return Ol(this._hostTNode,this._hostLView)}get injector(){return new bl(this._hostTNode,this._hostLView)}get parentInjector(){let e=cl(this._hostTNode,this._hostLView);if(Jc(e)){let t=Zc(e,this._hostLView),n=Yc(e),r=t[1].data[n+8];return new bl(r,t)}return new bl(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(e){let t=xm(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=$f(this._lContainer,e.ssrId),o=e.createEmbeddedViewImpl(t||{},i,a);return this.insertImpl(o,r,lf(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 dm(Pi(e)),u=n||this.parentInjector;if(!i&&l.ngModule==null){let e=this.parentInjector.get(Ba,null);e&&(i=e)}let d=Pi(l.componentType??{}),f=$f(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,lf(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(Gee(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 If(o,i,a,r),t.attachToViewContainerRef(),ua(Sm(o),a,t),t}move(e,t){return this.insert(e,t)}indexOf(e){let t=xm(this._lContainer);return t===null?-1:t.indexOf(e)}remove(e){let t=this._adjustIndex(e,-1),n=Rf(this._lContainer,t);n&&(da(Sm(this._lContainer),t),dd(n[1],n))}detach(e){let t=this._adjustIndex(e,-1),n=Rf(this._lContainer,t);return n&&da(Sm(this._lContainer),t)!=null?new Vf(n):null}_adjustIndex(e,t=0){return e??this.length+t}};function xm(e){return e[8]}function Sm(e){return e[8]||=[]}function Cm(e,t){let n,r=t[e.index];return no(r)?n=r:(n=Pf(r,t,null,e),t[e.index]=n,Nd(t,n)),Tm(n,t,e,r),new bm(n,e,t)}function wm(e,t){let n=e[11],r=n.createComment(``),i=mo(t,e);return hu(n,n.parentNode(i),r,n.nextSibling(i),!1),r}var Tm=Om,Em=()=>!1;function Dm(e,t,n){return Em(e,t,n)}function Om(e,t,n,r){if(e[7])return;let i;i=n.type&8?fo(r):wm(t,n),e[7]=i}var km=class e{queryList;matches=null;constructor(e){this.queryList=e}clone(){return new e(this.queryList)}setDirty(){this.queryList.setDirty()}},Am=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 Wm(e,t,n){e.queries===null&&(e.queries=new Mm),e.queries.track(new Nm(t,n))}function Gm(e,t){return e.queries.getByIndex(t)}function Km(e,t){let n=e[1],r=Gm(n,t);return r.crossesNgTemplate?zm(n,e,t,[]):Rm(n,e,r,t)}function qm(e,t,n){let r,i=Cn(()=>{r._dirtyCounter();let n=Zm(r,e);if(t&&n===void 0)throw new di(-951,!1);return n});return r=i[en],r._dirtyCounter=T(0),r._flatValue=void 0,i}function Jm(e){return qm(!0,!1,e)}function Ym(e){return qm(!0,!0,e)}function Xm(e,t){let n=e[en];n._lView=Lo(),n._queryIndex=t,n._queryList=Bm(n._lView,t),n._queryList.onDirty(()=>n._dirtyCounter.update(e=>e+1))}function Zm(e,t){let n=e._lView,r=e._queryIndex;if(n===void 0||r===void 0||n[2]&4)return t?void 0:ya;let i=Bm(n,r),a=Km(n,r);return i.reset(a,Al),t?i.first:i._changesDetected||e._flatValue===void 0?e._flatValue=i.toArray():e._flatValue}function Qm(e){return!!e&&typeof e.then==`function`}function $m(e){return!!e&&typeof e.subscribe==`function`}var eh=class{},th=class extends eh{injector;instance=null;constructor(e){super();let t=new Va([...e.providers,{provide:eh,useValue:this}],e.parent||za(),e.debugName,new Set([`environment`]));this.injector=t,e.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(e){this.injector.onDestroy(e)}};function nh(e,t,n=null){return new th({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}var rh=(()=>{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=Ta(!1,e.type),n=t.length>0?nh([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=yi({token:e,providedIn:`environment`,factory:()=>new e(ta(Ba))})}return e})();function O(e){return gc(()=>{let t=lh(e),n={...t,decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection!==Pl.Eager,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:t.standalone?e=>e.get(rh).getOrCreateStandaloneInjector(n):null,getExternalStyles:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||iu.Emulated,styles:e.styles||ya,_:null,schemas:e.schemas||null,tView:null,id:``};t.standalone&&Xu(`NgStandalone`),uh(n);let r=e.dependencies;return n.directiveDefs=dh(r,ih),n.pipeDefs=dh(r,Ii),n.id=fh(n),n})}function ih(e){return Pi(e)||Fi(e)}function ah(e,t){if(e==null)return va;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=Fd.None,c=null),n[a]=[r,s,c],t[a]=o}return n}function oh(e){if(e==null)return va;let t={};for(let n in e)Object.hasOwn(e,n)&&(t[e[n]]=n);return t}function sh(e){return gc(()=>{let t=lh(e);return uh(t),t})}function ch(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 lh(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||va,exportAs:e.exportAs||null,standalone:e.standalone??!0,signals:e.signals===!0,selectors:e.selectors||ya,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,controlDef:null,signalFormsInputPresence:null,inputs:ah(e.inputs,t),outputs:oh(e.outputs),debugInfo:null}}function uh(e){e.features?.forEach(t=>t(e))}function dh(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 fh(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 ph=new Ei(``),mh=(()=>{class e{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((e,t)=>{this.resolve=e,this.reject=t});appInits=x(ph,{optional:!0})??[];injector=x(_s);constructor(){}runInitializers(){if(this.initialized)return;let e=[];for(let t of this.appInits){let n=Qa(this.injector,t);if(Qm(n))e.push(n);else if($m(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=El({token:e,factory:e.ɵfac})}return e})();function hh(e){return t=>{t.controlDef={create:(e,t)=>{e?.ɵngControlCreate(t)},update:(e,t)=>{e?.ɵngControlUpdate?.(t)},passThroughInput:e}}}function gh(e){return Object.getPrototypeOf(e.prototype).constructor}function _h(e){let t=gh(e.type),n=!0,r=[e];for(;t&&t!==Function.prototype&&t!==Object.prototype;){let i,a=Object.hasOwn(t,Oi)?t[Oi]:void 0,o=Object.hasOwn(t,ki)?t[ki]:void 0;if(oo(e))i=a??o;else{if(a)throw new di(903,!1);i=o}if(i){if(n){r.push(i);let t=e;t.inputs=bh(e.inputs),t.declaredInputs=bh(e.declaredInputs),t.outputs=bh(e.outputs);let n=i.hostBindings;n&&Ch(e,n);let a=i.viewQuery,o=i.contentQueries;if(a&&xh(e,a),o&&Sh(e,o),vh(e,i),Uee(e.outputs,i.outputs),oo(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=Kc(i.hostAttrs,n=Kc(n,i.hostAttrs))}}function bh(e){return e===va?{}:e===ya?[]:e}function xh(e,t){let n=e.viewQuery;e.viewQuery=n?(e,r)=>{t(e,r),n(e,r)}:t}function Sh(e,t){let n=e.contentQueries;e.contentQueries=n?(e,r,i)=>{t(e,r,i),n(e,r,i)}:t}function Ch(e,t){let n=e.hostBindings;e.hostBindings=n?(e,r)=>{t(e,r),n(e,r)}:t}function wh(e,t,n,r,i,a,o,s){if(n.firstCreatePass){e.mergedAttrs=Kc(e.mergedAttrs,e.attrs);let t=e.tView=Ed(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),Vo(e,!1);let c=Oh(n,t,e,r);ps()&&hd(n,t,c,e),Vl(c,t);let l=Pf(c,t,c,e);t[r+27]=l,Nd(t,l),Dm(l,e,t)}function Th(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;return t.firstCreatePass?(f=Gf(t,d,4,o||null,s||null),No()&&zp(t,e,f,bo(t.consts,l),Jd),Mc(t,f)):f=t.data[d],wh(f,e,t,n,r,i,a,c),ao(f)&&Rd(t,e,f),l!=null&&zd(e,f,u),f}function Eh(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;if(t.firstCreatePass){if(f=Gf(t,d,4,o||null,s||null),l!=null){let e=bo(t.consts,l);f.localNames=[];for(let t=0;t{throw new di(600,``)})}var Nh=10,Ph=(()=>{class e{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=x(Ws);afterRenderManager=x(Zu);zonelessEnabled=x(tc);rootEffectScheduler=x(rc);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new Hr;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=x(Cs);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(li(e=>!e))}constructor(){x(Ju,{optional:!0})}whenStable(){let e;return new Promise(t=>{e=this.isStable.subscribe({next:e=>{e&&t()}})}).finally(()=>{e.unsubscribe()})}_injector=x(Ba);_rendererFactory=null;get injector(){return this._injector}bootstrap(e,t){return this.bootstrapImpl(e,t)}bootstrapImpl(e,t,n=_s.NULL){return this._injector.get(js).run(()=>{if(Ac(_c.BootstrapComponentStart),!this._injector.get(mh).done)throw new di(405,``);let r=Pi(e),i=this._injector.get(eh),a=new dm(r,i);this.componentTypes.push(e);let{hostElement:o,directives:s,bindings:c}=Fh(t),l=o||a.selector,u=a.create(n,[],l,i.injector,s,c),d=u.location.nativeElement,f=u.injector.get(Ah,null);return f?.registerApplication(d),u.onDestroy(()=>{this.detachView(u.hostView),Ih(this.components,u),f?.unregisterApplication(d)}),this._loadComponent(u),Ac(_c.BootstrapComponentEnd,u),u})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){Ac(_c.ChangeDetectionStart),this.tracingSnapshot===null?this.tickImpl():this.tracingSnapshot.run(qu.CHANGE_DETECTION,this.tickImpl)}tickImpl=()=>{if(this._runningTick)throw Ac(_c.ChangeDetectionEnd),new di(101,!1);let e=tn(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,tn(e),this.afterTick.next(),Ac(_c.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(np,null,{optional:!0}));let e=0;for(;this.dirtyFlags!==0&&e++Co(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;Ih(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(jh,[]).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),()=>Ih(this._destroyListeners,e)}destroy(){if(this._destroyed)throw new di(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=El({token:e,factory:e.ɵfac})}return e})();function Fh(e){return e===void 0||typeof e==`string`||e instanceof Element?{hostElement:e}:e}function Ih(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function k(e,t,n,r){let i=Lo();return dp(i,Yo(),t)&&(Ro(),Yd(cs(),i,e,t,n,r)),k}function Lh(e){if(Xu(`NgAnimateEnter`),!Lu)return Lh;let t=Lo();if(Pte(t))return Lh;let n=zo(),r=t[9].get(js);return zte(Wu(t),n,()=>Rh(t,n,e,r)),Gte(t[9]),id(t[9],Wu(t)),Lh}function Rh(e,t,n,r){let i=mo(t,e),a=e[11],o=Rte(n),s=[],c=!1,l=e=>{if(Gu(e)!==i)return;let t=e instanceof AnimationEvent?`animationend`:`transitionend`;r.runOutsideAngular(()=>{a.listen(i,t,u)})},u=e=>{Gu(e)===i&&(Ku(e,i)&&(c=!0),zh(e,i,a))};if(o&&o.length>0){r.runOutsideAngular(()=>{s.push(a.listen(i,`animationstart`,l)),s.push(a.listen(i,`transitionstart`,l))}),Fte(i,o,s);for(let e of o)a.addClass(i,e);r.runOutsideAngular(()=>{requestAnimationFrame(()=>{if(!c&&(Ate(i,Bu,Lu),!Bu.has(i))){for(let e of o)a.removeClass(i,e);Ru(i)}})})}}function zh(e,t,n){let r=zu.get(t);if(Gu(e)===t&&r&&Ku(e,t)){e.stopPropagation();for(let e of r.classList)n.removeClass(t,e);Ru(t)}}var Bh=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 Vh(e,t,n,r,i){return e===n&&Object.is(t,r)?1:Object.is(i(e,t),i(n,r))?-1:0}function Hh(e,t,n,r){let i,a,o=0,s=e.length-1;if(Array.isArray(t)){tn(r);let c=t.length-1;for(tn(null);o<=s&&o<=c;){let r=e.at(o),l=t[o],u=Vh(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=Vh(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 Kh,a??=Gh(e,o,s,n),Uh(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;)Wh(e,i,n,o,t[o]),o++}else if(t!=null){tn(r);let c=t[Symbol.iterator]();tn(null);let l=c.next();for(;!l.done&&o<=s;){let t=e.at(o),r=l.value,u=Vh(o,t,o,r,n);if(u!==0)u<0&&e.updateValue(o,r),o++,l=c.next();else{i??=new Kh,a??=Gh(e,o,s,n);let u=n(o,r);if(Uh(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;)Wh(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 Uh(e,t,n,r){return t!==void 0&&t.has(r)?(e.attach(n,t.get(r)),t.delete(r),!0):!1}function Wh(e,t,n,r,i){if(Uh(e,t,r,n(r,i)))e.updateValue(r,i);else{let t=e.create(r,i);e.attach(r,t)}}function Gh(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 Kh=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){Xu(`NgControlFlow`);let c=Lo(),l=Ro();return Eh(c,l,e,t,n,r,i,bo(l.consts,a),256,o,s),qh}function qh(e,t,n,r,i,a,o,s){Xu(`NgControlFlow`);let c=Lo(),l=Ro();return Eh(c,l,e,t,n,r,i,bo(l.consts,a),512,o,s),qh}function j(e,t){Xu(`NgControlFlow`);let n=Lo(),r=Yo(),i=n[r]===Ou?-1:n[r],a=i===-1?void 0:$h(n,27+i);if(dp(n,r,e)){let r=tn(null);try{if(a!==void 0&&Lf(a,0),e!==-1){let r=27+e,i=$h(n,r),a=ig(n[1],r),o=ep(i,a,n);If(i,cf(n,a,t,{dehydratedView:o}),0,lf(a,o))}}finally{tn(r)}}else if(a!==void 0){let e=Ff(a,0);e!==void 0&&(e[8]=t)}}var Jh=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 Yh(e){return e}function Xh(e,t){return t}var Zh=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){Xu(`NgControlFlow`);let p=Lo(),m=Ro(),ee=c!==void 0,h=Lo(),g=new Zh(ee,s?o.bind(h[15][8]):o);h[27+e]=g,Eh(p,m,e+1,t,n,r,i,bo(m.consts,a),256),ee&&Eh(p,m,e+2,c,l,u,d,bo(m.consts,f),512)}var Qh=class extends Bh{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,If(this.lContainer,t,e,lf(this.templateTNode,n)),eg(this.lContainer,e)}detach(e){return this.needsIndexUpdate||=e!==this.length-1,tg(this.lContainer,e),ng(this.lContainer,e)}create(e,t){let n=$f(this.lContainer,this.templateTNode.tView.ssrId);return cf(this.hostLView,this.templateTNode,new Jh(this.lContainer,t,e),{dehydratedView:n})}destroy(e){dd(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];Ute(e,r),Iu.delete(n[19]),r.detachedLeaveAnimationFns=void 0}}function tg(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 ng(e,t){return Rf(e,t)}function rg(e,t){return Ff(e,t)}function ig(e,t){return ho(e,t)}function P(e,t,n){let r=Lo();return dp(r,Yo(),t)&&(Ro(),Hd(cs(),r,e,t,r[11],n)),P}function ag(e,t,n,r,i){tf(t,e,n,i?`class`:`style`,r)}function F(e,t,n,r){let i=Lo(),a=i[1],o=e+27,s=a.firstCreatePass?$p(o,i,2,t,Jd,No(),n,r):a.data[o];if(io(s)){let n=i[10].tracingService;if(n&&n.componentCreate){let o=a.data[s.directiveStart+s.componentOffset];return n.componentCreate(op(o),()=>(og(e,t,i,s,r),F))}}return og(e,t,i,s,r),F}function og(e,t,n,r,i){if(Qd(r,n,e,t,cg),ao(r)){let e=n[1];Rd(e,n,r),ru(e,r,n)}i!=null&&zd(n,r)}function I(){let e=Ro(),t=$d(zo());return e.firstCreatePass&&em(e,t),Fo(t)&&Io(),Mo(),t.classesWithoutHost!=null&&Vc(t)&&ag(e,t,Lo(),t.classesWithoutHost,!0),t.stylesWithoutHost!=null&&Hc(t)&&ag(e,t,Lo(),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=Lo(),a=i[1],o=e+27,s=a.firstCreatePass?tm(o,a,2,t,n,r):a.data[o];return Qd(s,i,e,t,cg),r!=null&&zd(i,s),R}function z(){return Fo($d(zo()))&&Io(),Mo(),z}function sg(e,t,n,r){return R(e,t,n,r),z(),sg}var cg=(e,t,n,r,i)=>(ms(!0),mu(t[11],r,ds()));function lg(e,t,n){let r=Lo(),i=r[1],a=e+27,o=i.firstCreatePass?$p(a,r,8,`ng-container`,Jd,No(),t,n):i.data[a];if(Qd(o,r,e,`ng-container`,fg),ao(o)){let e=r[1];Rd(e,r,o),ru(e,o,r)}return n!=null&&zd(r,o),lg}function ug(){let e=Ro(),t=$d(zo());return e.firstCreatePass&&em(e,t),ug}function dg(e,t,n){return lg(e,t,n),ug(),dg}var fg=(e,t,n,r,i)=>(ms(!0),lte(t[11],``));function B(){return Lo()}function V(e,t,n){let r=Lo();return dp(r,Yo(),t)&&(Ro(),Ud(cs(),r,e,t,r[11],n)),V}var pg=void 0;function mg(e){let t=Math.floor(Math.abs(e)),n=e.toString().replace(/^[^.]*\.?/,``).length;return t===1&&n===0?1:5}var hg=[`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`]],pg,[[`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`]],pg,[[`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}`,pg,pg,pg],[`.`,`,`,`;`,`%`,`+`,`-`,`E`,`×`,`‰`,`∞`,`NaN`,`:`],[`#,##0.###`,`#,##0%`,`¤#,##0.00`,`#E0`],`USD`,`$`,`US Dollar`,{},`ltr`,mg],gg=Object.create(null);function _g(e){let t=bg(e),n=vg(t);if(n)return n;let r=t.split(`-`)[0];if(n=vg(r),n)return n;if(r===`en`)return hg;throw new di(701,!1)}function vg(e){if(!(e in gg)){let t=Xi.ng&&Xi.ng.common&&Xi.ng.common.locales&&Xi.ng.common.locales[e];return t!==void 0&&(gg[e]=t),t}return gg[e]}var yg={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 bg(e){return e.toLowerCase().replace(/_/g,`-`)}var xg=`en-US`;function Sg(e){typeof e==`string`&&e.toLowerCase().replace(/_/g,`-`)}function H(e,t,n){let r=Lo(),i=Ro(),a=zo();return Cg(i,r,r[11],a,e,t,n),H}function U(e,t,n){let r=Lo(),i=Ro(),a=zo();return(a.type&3||n)&&_p(a,i,r,n,r[11],e,t,hp(a,r,t)),U}function Cg(e,t,n,r,i,a,o){let s=!0,c=null;if((r.type&3||o)&&(c??=hp(r,t,a),_p(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 Ng(e){return(e&2)==2}function Pg(e,t){return e&131071|t<<17}function Fg(e){return e|2}function Ig(e){return(e&131068)>>2}function Lg(e,t){return e&-131069|t<<2}function Rg(e){return(e&1)==1}function zg(e){return e|1}function Bg(e,t,n,r,i,a){let o=a?t.classBindings:t.styleBindings,s=Mg(o),c=Ig(o);e[r]=n;let l=!1,u;if(Array.isArray(n)){let e=n;u=e[1],(u===null||ga(e,u)>0)&&(l=!0)}else u=n;if(i){if(c!==0){let t=Mg(e[s+1]);e[r+1]=jg(t,s),t!==0&&(e[t+1]=Lg(e[t+1],r)),e[s+1]=Pg(e[s+1],r)}else e[r+1]=jg(s,0),s!==0&&(e[s+1]=Lg(e[s+1],r)),s=r}else e[r+1]=jg(c,0),s===0?s=r:e[c+1]=Lg(e[c+1],r),c=r;l&&(e[r+1]=Fg(e[r+1])),Hg(e,u,r,!0),Hg(e,u,r,!1),Vg(t,u,e,r,a),o=jg(s,c),a?t.classBindings=o:t.styleBindings=o}function Vg(e,t,n,r,i){let a=i?e.residualClasses:e.residualStyles;a!=null&&typeof t==`string`&&ga(a,t)>=0&&(n[r+1]=zg(n[r+1]))}function Hg(e,t,n,r){let i=e[n+1],a=t===null,o=r?Mg(i):Ig(i),s=!1;for(;o!==0&&(s===!1||a);){let n=e[o],i=e[o+1];Ug(n,t)&&(s=!0,e[o+1]=r?zg(i):Fg(i)),o=r?Mg(i):Ig(i)}s&&(e[n+1]=r?Fg(i):zg(i))}function Ug(e,t){return e===null||t==null||(Array.isArray(e)?e[1]:e)===t?!0:Array.isArray(e)&&typeof t==`string`?ga(e,t)>=0:!1}var Wg={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function Gg(e){return e.substring(Wg.key,Wg.keyEnd)}function Kg(e){return Jg(e),qg(e,Yg(e,0,Wg.textEnd))}function qg(e,t){let n=Wg.textEnd;return n===t?-1:(t=Wg.keyEnd=Xg(e,Wg.key=t,n),Yg(e,t,n))}function Jg(e){Wg.key=0,Wg.keyEnd=0,Wg.value=0,Wg.valueEnd=0,Wg.textEnd=e.length}function Yg(e,t,n){for(;t32;)t++;return t}function Zg(e,t,n){return e_(e,t,n,!1),Zg}function G(e,t){return e_(e,t,null,!0),G}function Qg(e){t_(d_,$g,e,!0)}function $g(e,t){for(let n=Kg(t);n>=0;n=qg(t,n))ma(e,Gg(t),!0)}function e_(e,t,n,r){let i=Lo(),a=Ro(),o=Xo(2);if(a.firstUpdatePass&&r_(a,e,o,r),t!==Ou&&dp(i,o,t)){let s=a.data[os()];p_(a,s,i,i[11],e,i[o+1]=g_(t,n),r,o)}}function t_(e,t,n,r){let i=Ro(),a=Xo(2);i.firstUpdatePass&&r_(i,null,a,r);let o=Lo();if(n!==Ou&&dp(o,a,n)){let s=i.data[os()];if(__(s,r)&&!n_(i,a)){let e=r?s.classesWithoutHost:s.stylesWithoutHost;e!==null&&(n=hi(e,n||``)),ag(i,s,o,n,r)}else f_(i,s,o,o[11],o[a+1],o[a+1]=u_(e,t,n),r,a)}}function n_(e,t){return t>=e.expandoStartIndex}function r_(e,t,n,r){let i=e.data;if(i[n+1]===null){let a=i[os()],o=n_(e,n);__(a,r)&&t===null&&!o&&(t=!1),t=i_(i,a,t,r),Bg(i,a,t,n,o,r)}}function i_(e,t,n,r){let i=nte(e),a=r?t.residualClasses:t.residualStyles;if(i===null)(r?t.classBindings:t.styleBindings)===0&&(n=c_(null,e,t,n,r),n=l_(n,t.attrs,r),a=null);else{let o=t.directiveStylingLast;if(o===-1||e[o]!==i){if(n=c_(i,e,t,n,r),a===null){let n=a_(e,t,r);n!==void 0&&Array.isArray(n)&&(n=c_(null,e,t,n[1],r),n=l_(n,t.attrs,r),o_(e,t,r,n))}else a=s_(e,t,r)}}return a!==void 0&&(r?t.residualClasses=a:t.residualStyles=a),n}function a_(e,t,n){let r=n?t.classBindings:t.styleBindings;if(Ig(r)!==0)return e[Mg(r)]}function o_(e,t,n,r){let i=n?t.classBindings:t.styleBindings;e[Mg(i)]=r}function s_(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===Ou&&(u=l?ya:void 0);let d=l?ha(u,r):c===r?u:void 0;if(a&&!h_(d)&&(d=ha(t,r)),h_(d)&&(s=d,o))return s;let f=e[i+1];i=o?Mg(f):Ig(f)}if(t!==null){let e=a?t.residualClasses:t.residualStyles;e!=null&&(s=ha(e,r))}return s}function h_(e){return e!==void 0}function g_(e,t){return e==null||e===``||(typeof t==`string`?e=ou(e)+t:typeof e==`object`&&(e=mi(ou(e)))),e}function __(e,t){return!!(e.flags&(t?8:16))}function K(e,t=``){let n=Lo(),r=Ro(),i=e+27,a=r.firstCreatePass?Gf(r,i,1,t,null):r.data[i],o=ine(r,n,a,t);n[i]=o,ps()&&hd(r,n,o,a),Vo(a,!1)}var ine=(e,t,n,r)=>(ms(!0),ste(t[11],r));function v_(e,t,n,r=``){return dp(e,Yo(),n)?t+Ri(n)+r:Ou}function ane(e,t,n,r,i,a=``){let o=fp(e,Jo(),n,i);return Xo(2),o?t+Ri(n)+r+Ri(i)+a:Ou}function one(e,t,n,r,i,a,o,s=``){let c=pp(e,Jo(),n,i,o);return Xo(3),c?t+Ri(n)+r+Ri(i)+a+Ri(o)+s:Ou}function sne(e,t,n,r,i,a,o,s,c,l=``){let u=mp(e,Jo(),n,i,o,c);return Xo(4),u?t+Ri(n)+r+Ri(i)+a+Ri(o)+s+Ri(c)+l:Ou}function q(e){return J(``,e),q}function J(e,t,n){let r=Lo(),i=v_(r,e,t,n);return i!==Ou&&x_(r,os(),i),J}function Y(e,t,n,r,i){let a=Lo(),o=ane(a,e,t,n,r,i);return o!==Ou&&x_(a,os(),o),Y}function y_(e,t,n,r,i,a,o){let s=Lo(),c=one(s,e,t,n,r,i,a,o);return c!==Ou&&x_(s,os(),c),y_}function b_(e,t,n,r,i,a,o,s,c){let l=Lo(),u=sne(l,e,t,n,r,i,a,o,s,c);return u!==Ou&&x_(l,os(),u),b_}function x_(e,t,n){let r=po(t,e);cte(e[11],r,n)}function S_(e,t,n){pc(t)&&(t=t());let r=Lo();return dp(r,Yo(),t)&&(Ro(),Hd(cs(),r,e,t,r[11],n)),S_}function C_(e,t){let n=pc(e);return n&&e.set(t),n}function w_(e,t){let n=Lo(),r=Ro(),i=zo();return Cg(r,n,n[11],i,e,t),w_}var T_={};function E_(e){Xu(`NgLet`);let t=Ro(),n=Lo(),r=e+27;return Vo(Gf(t,r,128,null,null),!1),_o(t,n,r,T_),E_}function D_(e){return _o(Ro(),Lo(),os(),e),e}function O_(e){let t=go(Wo(),27+e);if(t===T_)throw new di(314,!1);return t}function k_(e,t,n=``){return v_(Lo(),e,t,n)}function A_(e,t,n){let r=Ro();r.firstCreatePass&&j_(t,r.data,r.blueprint,oo(e),n)}function j_(e,t,n,r,i){if(e=_i(e),Array.isArray(e))for(let a=0;a>20;if(Na(e)||!e.multi){let r=new Bc(l,i,Rp,null),p=P_(c,t,i?u:u+f,d);p===-1?(ll(al(s,o),a,c),M_(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=P_(c,t,u+f,d),m=P_(c,t,u,u+f),ee=p>=0&&n[p],h=m>=0&&n[m];if(i&&!h||!i&&!ee){ll(al(s,o),a,c);let u=une(i?lne:cne,n.length,i,r,l,e);!i&&h&&(n[m].providerFactory=u),M_(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=N_(n[i?m:p],l,!i&&r);M_(a,e,p>-1?p:m,t)}!i&&r&&h&&n[m].componentProviders++}}}function M_(e,t,n,r){let i=Na(t),a=Pa(t);if(i||a){let o=(a?_i(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 N_(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function P_(e,t,n,r){for(let i=n;i{n.providersResolver=(t,n)=>A_(t,n?n(e):e,!1),t&&(n.viewProvidersResolver=(e,n)=>A_(e,n?n(t):t,!0))}}function L_(e,t){let n=qo()+e,r=Lo();return r[n]===Ou?lp(r,n,t()):up(r,n)}function R_(e,t,n){return V_(Lo(),qo(),e,t,n)}function z_(e,t,n,r){return H_(Lo(),qo(),e,t,n,r)}function dne(e,t,n,r,i,a,o){return fne(Lo(),qo(),e,t,n,r,i,a)}function B_(e,t){let n=e[t];return n===Ou?void 0:n}function V_(e,t,n,r,i,a){let o=t+n;return dp(e,o,i)?lp(e,o+1,a?r.call(a,i):r(i)):B_(e,o+1)}function H_(e,t,n,r,i,a,o){let s=t+n;return fp(e,s,i,a)?lp(e,s+2,o?r.call(o,i,a):r(i,a)):B_(e,s+2)}function fne(e,t,n,r,i,a,o,s,c){let l=t+n;return mp(e,l,i,a,o,s)?lp(e,l+4,c?r.call(c,i,a,o,s):r(i,a,o,s)):B_(e,l+4)}function U_(e,t){let n=Ro(),r,i=e+27;n.firstCreatePass?(r=pne(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=oa(r.type,!0)),o=Ji(Rp);try{let e=$c(!1),t=a();return $c(e),_o(n,Lo(),i,t),t}finally{Ji(o)}}function pne(e,t){if(t)for(let n=t.length-1;n>=0;n--){let r=t[n];if(e===r.name)return r}}function W_(e,t,n){let r=e+27,i=Lo(),a=go(i,r);return K_(i,r)?V_(i,qo(),t,a.transform,n,a):a.transform(n)}function G_(e,t,n,r){let i=e+27,a=Lo(),o=go(a,i);return K_(a,i)?H_(a,qo(),t,o.transform,n,r,o):o.transform(n,r)}function K_(e,t){return e[1].data[t].pure}function q_(e,t){return Wf(e,t)}var mne=(()=>{class e{applicationErrorHandler=x(Ws);appRef=x(Ph);taskService=x(Cs);ngZone=x(js);zonelessEnabled=x(tc);tracing=x(Ju,{optional:!0});zoneIsDefined=typeof Zone<`u`&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new or;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(ks):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(x(nc,{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?Ds:Es;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=El({token:e,factory:e.ɵfac})}return e})();function hne(){return[{provide:ec,useExisting:mne},{provide:js,useClass:zs},{provide:tc,useValue:!0}]}function gne(){return typeof $localize<`u`&&$localize.locale||`en-US`}var J_=new Ei(``,{factory:()=>x(J_,{optional:!0,skipSelf:!0})||gne()}),Y_=class{destroyed=!1;listeners=null;errorHandler=x(Us,{optional:!0});isEmitting=!1;hasNullListeners=!1;destroyRef=x(ys);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(e){if(this.destroyed)throw new di(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(fi(953,!1));return}if(this.listeners===null)return;this.isEmitting=!0;let t=tn(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&&_ne(this.listeners)),tn(t),this.isEmitting=!1}}};function _ne(e){let t=e.length-1;for(;t>-1;)e[t]===null&&e.splice(t,1),t--}function X(e,t){return Cn(e,t?.equal)}function Z(e){return Gn(e)}(class e extends Error{_brand;constructor(e){super(e)}static IDLE=new e(`IDLE`);static LOADING=new e(`LOADING`)});var vne=e=>e;function Q(e,t){return typeof e==`function`?X_(Vn(e,vne,t?.equal),t?.debugName,t?.set):X_(Vn(e.source,e.computation,e.equal),e.debugName,e.set)}function X_(e,t,n){let r=e[en],i=e;if(n!==void 0){let t=e=>Hn(r,e);i.set=e=>n(e,t),i.update=r=>n(r(Z(e)),t)}else i.set=e=>Hn(r,e),i.update=e=>Un(r,e);return i.asReadonly=Ks.bind(e),i}var Z_=!1;function yne(){return Z_}function Q_(e){Z_=e}function $_(e,t){let n=Object.create(hc);n.value=e,n.transformFn=t?.transform;function r(){if(an(n),n.value===mc)throw new di(-950,null);return n.value}return r[en]=n,r}function ev(e){return new Y_}function tv(e,t){return $_(e,t)}function bne(e){return $_(mc,e)}var $=(tv.required=bne,tv);function nv(e,t){let n=Object.create(hc),r=new Y_;n.value=e;function i(){return an(n),rv(n.value),n.value}return i[en]=n,i.asReadonly=Ks.bind(i),i.set=e=>{n.equal(n.value,e)||(An(n,e),r.emit(e))},i.update=e=>{rv(n.value),i.set(e(n.value))},i.subscribe=r.subscribe.bind(r),i.destroyRef=r.destroyRef,i}function rv(e){if(e===mc)throw new di(952,!1)}function iv(e,t){return nv(e,t)}function xne(e){return nv(mc,e)}var av=(iv.required=xne,iv);function ov(e,t){return Jm(t)}function Sne(e,t){return Ym(t)}var sv=(ov.required=Sne,ov),Cne=(()=>{class e{static __NG_ELEMENT_ID__=wne}return e})();function wne(e){return Tne(zo(),Lo(),(e&16)==16)}function Tne(e,t,n){if(io(e)&&!n){let n=vo(e.index,t);return new Vf(n,n)}if(e.type&175){let e=t[15];return new Vf(e,t)}return null}var cv=new Ei(``),Ene=new Ei(``);function lv(e){return!e.moduleRef}function Dne(e){let t=lv(e)?e.r3Injector:e.moduleRef.injector,n=t.get(js);return n.run(()=>{lv(e)?e.r3Injector.resolveInjectorInitializers():e.moduleRef.resolveInjectorInitializers();let r=t.get(Ws),i;if(n.runOutsideAngular(()=>{i=n.onError.subscribe({next:r})}),lv(e)){let n=()=>t.destroy(),r=e.platformInjector.get(cv);r.add(n),t.onDestroy(()=>{i.unsubscribe(),r.delete(n)})}else{let t=()=>e.moduleRef.destroy(),n=e.platformInjector.get(cv);n.add(t),e.moduleRef.onDestroy(()=>{Ih(e.allPlatformModules,e.moduleRef),i.unsubscribe(),n.delete(t)})}return kne(r,n,()=>{let n=t.get(Cs),r=n.add(),i=t.get(mh);return i.runInitializers(),i.donePromise.then(()=>{if(Sg(t.get(J_,xg)||`en-US`),!t.get(Ene,!0))return lv(e)?t.get(Ph):(e.allPlatformModules.push(e.moduleRef),e.moduleRef);if(lv(e)){let n=t.get(Ph);return e.rootComponent!==void 0&&n.bootstrap(e.rootComponent),n}return One?.(e.moduleRef,e.allPlatformModules),e.moduleRef}).finally(()=>void n.remove(r))})})}var One;function kne(e,t,n){try{let r=n();return Qm(r)?r.catch(n=>{throw t.runOutsideAngular(()=>e(n)),n}):r}catch(n){throw t.runOutsideAngular(()=>e(n)),n}}var uv=null;function Ane(e=[],t){return _s.create({name:t,providers:[{provide:Fa,useValue:`platform`},{provide:cv,useValue:new Set([()=>uv=null])},...e]})}function jne(e=[]){if(uv)return uv;let t=Ane(e);return uv=t,Mh(),Mne(t),t}function Mne(e){let t=e.get(Ys,null);Qa(e,()=>{t?.forEach(e=>e())})}function Nne(e){let{rootComponent:t,appProviders:n,platformProviders:r,platformRef:i}=e;Ac(_c.BootstrapApplicationStart);try{let e=i?.injector??jne(r);return Dne({r3Injector:new th({providers:[hne(),Gs,...n||[]],parent:e,debugName:``,runEnvironmentInitializers:!1}).injector,platformInjector:e,rootComponent:t})}catch(e){return Promise.reject(e)}finally{Ac(_c.BootstrapApplicationEnd)}}function dv(e){return typeof e==`boolean`?e:e!=null&&e!==`false`}var fv=Symbol(`NOT_SET`),pv=new Set,Pne={...Mn,kind:`afterRenderEffectPhase`,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,value:fv,cleanup:null,consumerMarkedDirty(){if(this.sequence.impl.executing){if(this.sequence.lastPhase===null||this.sequence.lastPhase(an(r),r.value),r.signal[en]=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??pv)t()}finally{_n(e)}}};function mv(e,t){let n=t?.injector??x(_s),r=n.get(ec),i=n.get(Zu),a=n.get(Ju,null,{optional:!0});i.impl??=n.get($u);let o=e;typeof o==`function`&&(o={mixedReadWrite:e});let s=n.get(Qs,null,{optional:!0}),c=new Fne(i.impl,[o.earlyRead,o.write,o.mixedReadWrite,o.read],s?.view,r,n,a?.snapshot(null));return i.impl.register(c),c}var hv=null;function gv(){return hv}function Ine(e){hv??=e}var Lne=class{},_v=(function(e){return e[e.Format=0]=`Format`,e[e.Standalone=1]=`Standalone`,e})(_v||{}),vv=(function(e){return e[e.Narrow=0]=`Narrow`,e[e.Abbreviated=1]=`Abbreviated`,e[e.Wide=2]=`Wide`,e[e.Short=3]=`Short`,e})(vv||{}),yv=(function(e){return e[e.Short=0]=`Short`,e[e.Medium=1]=`Medium`,e[e.Long=2]=`Long`,e[e.Full=3]=`Full`,e})(yv||{}),bv={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 Rne(e){return _g(e)[yg.LocaleId]}function zne(e,t,n){let r=_g(e);return Ev(Ev([r[yg.DayPeriodsFormat],r[yg.DayPeriodsStandalone]],t),n)}function Bne(e,t,n){let r=_g(e);return Ev(Ev([r[yg.DaysFormat],r[yg.DaysStandalone]],t),n)}function Vne(e,t,n){let r=_g(e);return Ev(Ev([r[yg.MonthsFormat],r[yg.MonthsStandalone]],t),n)}function Hne(e,t){let n=_g(e)[yg.Eras];return Ev(n,t)}function xv(e,t){return Ev(_g(e)[yg.DateFormat],t)}function Sv(e,t){return Ev(_g(e)[yg.TimeFormat],t)}function Cv(e,t){let n=_g(e)[yg.DateTimeFormat];return Ev(n,t)}function wv(e,t){let n=_g(e),r=n[yg.NumberSymbols][t];if(r===void 0){if(t===bv.CurrencyDecimal)return n[yg.NumberSymbols][bv.Decimal];if(t===bv.CurrencyGroup)return n[yg.NumberSymbols][bv.Group]}return r}function Tv(e){if(!e[yg.ExtraData])throw new di(2303,!1)}function Une(e){let t=_g(e);return Tv(t),(t[yg.ExtraData][2]||[]).map(e=>typeof e==`string`?Dv(e):[Dv(e[0]),Dv(e[1])])}function Wne(e,t,n){let r=_g(e);return Tv(r),Ev(Ev([r[yg.ExtraData][0],r[yg.ExtraData][1]],t)||[],n)||[]}function Ev(e,t){for(let n=t;n>-1;n--)if(e[n]!==void 0)return e[n];throw new di(2304,!1)}function Dv(e){let[t,n]=e.split(`:`);return{hours:+t,minutes:+n}}var Gne=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,Ov=Object.create(null),Kne=/((?:[^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]*)/,qne=256;function Jne(e,t,n,r){let i=ire(e);Yne(t),t=Av(n,t)||t;let a=[],o;for(;t;)if(o=Kne.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=Vv(r,s),i=rre(i,r));let c=``;return a.forEach(e=>{let t=tre(e);c+=t?t(i,n,s):e===`''`?`'`:e.replace(/(^'|'$)/g,``).replace(/''/g,`'`)}),c}function Yne(e){if(e.length>qne)throw new di(2300,!1)}function kv(e,t,n){let r=new Date(0);return r.setFullYear(e,t,n),r.setHours(0,0,0),r}function Av(e,t){let n=Rne(e);if(Ov[n]??=Object.create(null),Ov[n][t])return Ov[n][t];let r=``;switch(t){case`shortDate`:r=xv(e,yv.Short);break;case`mediumDate`:r=xv(e,yv.Medium);break;case`longDate`:r=xv(e,yv.Long);break;case`fullDate`:r=xv(e,yv.Full);break;case`shortTime`:r=Sv(e,yv.Short);break;case`mediumTime`:r=Sv(e,yv.Medium);break;case`longTime`:r=Sv(e,yv.Long);break;case`fullTime`:r=Sv(e,yv.Full);break;case`short`:let t=Av(e,`shortTime`),n=Av(e,`shortDate`);r=jv(Cv(e,yv.Short),[t,n]);break;case`medium`:let i=Av(e,`mediumTime`),a=Av(e,`mediumDate`);r=jv(Cv(e,yv.Medium),[i,a]);break;case`long`:let o=Av(e,`longTime`),s=Av(e,`longDate`);r=jv(Cv(e,yv.Long),[o,s]);break;case`full`:let c=Av(e,`fullTime`),l=Av(e,`fullDate`);r=jv(Cv(e,yv.Full),[c,l])}return r&&(Ov[n][t]=r),r}function jv(e,t){return t&&(e=e.replace(/\{([^}]+)}/g,function(e,n){return Object.hasOwn(t,n)?t[n]:e})),e}function Mv(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 Xne(s,t);let c=wv(o,bv.MinusSign);return Mv(s,t,c,r,i)}}function Zne(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 di(2301,!1)}}function Pv(e,t,n=_v.Format,r=!1){return function(i,a){return Qne(i,a,e,t,n,r)}}function Qne(e,t,n,r,i,a){switch(n){case 2:return Vne(t,i,r)[e.getMonth()];case 1:return Bne(t,i,r)[e.getDay()];case 0:let n=e.getHours(),o=e.getMinutes();if(a){let e=Une(t),a=Wne(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?`+`:``)+Mv(o,2,a)+Mv(Math.abs(i%60),2,a);case 1:return`GMT`+(i>=0?`+`:``)+Mv(o,1,a);case 2:return`GMT`+(i>=0?`+`:``)+Mv(o,2,a)+`:`+Mv(Math.abs(i%60),2,a);case 3:return r===0?`Z`:(i>=0?`+`:``)+Mv(o,2,a)+`:`+Mv(Math.abs(i%60),2,a);default:throw new di(2310,!1)}}}var $ne=0,Iv=4;function ere(e){let t=kv(e,$ne,1).getDay();return kv(e,0,1+(t<=Iv?Iv:11)-t)}function Lv(e){let t=e.getDay(),n=t===0?-3:Iv-t;return kv(e.getFullYear(),e.getMonth(),e.getDate()+n)}function Rv(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=Lv(n),t=ere(e.getFullYear()),r=e.getTime()-t.getTime();i=1+Math.round(r/6048e5)}return Mv(i,e,wv(r,bv.MinusSign))}}function zv(e,t=!1){return function(n,r){return Mv(Lv(n).getFullYear(),e,wv(r,bv.MinusSign),t)}}var Bv=Object.create(null);function tre(e){if(Bv[e])return Bv[e];let t;switch(e){case`G`:case`GG`:case`GGG`:t=Pv(3,vv.Abbreviated);break;case`GGGG`:t=Pv(3,vv.Wide);break;case`GGGGG`:t=Pv(3,vv.Narrow);break;case`y`:t=Nv(0,1,0,!1,!0);break;case`yy`:t=Nv(0,2,0,!0,!0);break;case`yyy`:t=Nv(0,3,0,!1,!0);break;case`yyyy`:t=Nv(0,4,0,!1,!0);break;case`Y`:t=zv(1);break;case`YY`:t=zv(2,!0);break;case`YYY`:t=zv(3);break;case`YYYY`:t=zv(4);break;case`M`:case`L`:t=Nv(1,1,1);break;case`MM`:case`LL`:t=Nv(1,2,1);break;case`MMM`:t=Pv(2,vv.Abbreviated);break;case`MMMM`:t=Pv(2,vv.Wide);break;case`MMMMM`:t=Pv(2,vv.Narrow);break;case`LLL`:t=Pv(2,vv.Abbreviated,_v.Standalone);break;case`LLLL`:t=Pv(2,vv.Wide,_v.Standalone);break;case`LLLLL`:t=Pv(2,vv.Narrow,_v.Standalone);break;case`w`:t=Rv(1);break;case`ww`:t=Rv(2);break;case`W`:t=Rv(1,!0);break;case`d`:t=Nv(2,1);break;case`dd`:t=Nv(2,2);break;case`c`:case`cc`:t=Nv(7,1);break;case`ccc`:t=Pv(1,vv.Abbreviated,_v.Standalone);break;case`cccc`:t=Pv(1,vv.Wide,_v.Standalone);break;case`ccccc`:t=Pv(1,vv.Narrow,_v.Standalone);break;case`cccccc`:t=Pv(1,vv.Short,_v.Standalone);break;case`E`:case`EE`:case`EEE`:t=Pv(1,vv.Abbreviated);break;case`EEEE`:t=Pv(1,vv.Wide);break;case`EEEEE`:t=Pv(1,vv.Narrow);break;case`EEEEEE`:t=Pv(1,vv.Short);break;case`a`:case`aa`:case`aaa`:t=Pv(0,vv.Abbreviated);break;case`aaaa`:t=Pv(0,vv.Wide);break;case`aaaaa`:t=Pv(0,vv.Narrow);break;case`b`:case`bb`:case`bbb`:t=Pv(0,vv.Abbreviated,_v.Standalone,!0);break;case`bbbb`:t=Pv(0,vv.Wide,_v.Standalone,!0);break;case`bbbbb`:t=Pv(0,vv.Narrow,_v.Standalone,!0);break;case`B`:case`BB`:case`BBB`:t=Pv(0,vv.Abbreviated,_v.Format,!0);break;case`BBBB`:t=Pv(0,vv.Wide,_v.Format,!0);break;case`BBBBB`:t=Pv(0,vv.Narrow,_v.Format,!0);break;case`h`:t=Nv(3,1,-12);break;case`hh`:t=Nv(3,2,-12);break;case`H`:t=Nv(3,1);break;case`HH`:t=Nv(3,2);break;case`m`:t=Nv(4,1);break;case`mm`:t=Nv(4,2);break;case`s`:t=Nv(5,1);break;case`ss`:t=Nv(5,2);break;case`S`:t=Nv(6,1);break;case`SS`:t=Nv(6,2);break;case`SSS`:t=Nv(6,3);break;case`Z`:case`ZZ`:case`ZZZ`:t=Fv(0);break;case`ZZZZZ`:t=Fv(3);break;case`O`:case`OO`:case`OOO`:case`z`:case`zz`:case`zzz`:t=Fv(1);break;case`OOOO`:case`ZZZZ`:case`zzzz`:t=Fv(2);break;default:return null}return Bv[e]=t,t}function Vv(e,t){e=e.replace(/:/g,``);let n=Date.parse(`Jan 01, 1970 00:00:00 `+e)/6e4;return isNaN(n)?t:n}function nre(e,t){return e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+t),e}function rre(e,t,n){let r=e.getTimezoneOffset();return nre(e,-1*(Vv(t,r)-r))}function ire(e){if(Hv(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 kv(t,n-1,r)}let t=parseFloat(e);if(!isNaN(e-t))return new Date(t);let n;if(n=e.match(Gne))return are(n)}let t=new Date(e);if(!Hv(t))throw new di(2311,!1);return t}function are(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 Hv(e){return e instanceof Date&&!isNaN(e.valueOf())}var Uv=(()=>{class e{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;injector=x(_s);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)(Rp(vm))};static ɵdir=sh({type:e,selectors:[[``,`ngTemplateOutlet`,``]],inputs:{ngTemplateOutletContext:`ngTemplateOutletContext`,ngTemplateOutlet:`ngTemplateOutlet`,ngTemplateOutletInjector:`ngTemplateOutletInjector`},features:[xc]})}return e})();function ore(e,t){return new di(2100,!1)}var sre=`mediumDate`,cre=new Ei(``),lre=new Ei(``),Wv=(()=>{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??sre,a=r??this.defaultOptions?.timezone??this.defaultTimezone??void 0;return Jne(t,e,i||this.locale,a)}catch(t){throw ore(e,t.message)}}static ɵfac=function(t){return new(t||e)(Rp(J_,16),Rp(cre,24),Rp(lre,24))};static ɵpipe=ch({name:`date`,type:e,pure:!0})}return e})(),Gv=(()=>{class e{transform(e){return JSON.stringify(e,null,2)}static ɵfac=function(t){return new(t||e)};static ɵpipe=ch({name:`json`,type:e,pure:!1})}return e})();function ure(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 dre=`browser`,Kv=class{_doc;constructor(e){this._doc=e}manager},qv=(()=>{class e extends Kv{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)(ta(vs))};static ɵprov=yi({token:e,factory:e.ɵfac})}return e})(),Jv=new Ei(``),Yv=(()=>{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 qv));this._plugins=n.slice().reverse();let r=e.find(e=>e instanceof qv);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 di(-5101,!1);return this._eventNameToPlugin.set(e,t),t}static ɵfac=function(t){return new(t||e)(ta(Jv),ta(js))};static ɵprov=yi({token:e,factory:e.ɵfac})}return e})(),Xv=`ng-app-id`;function Zv(e){for(let t of e)t.remove()}function Qv(e,t){let n=t.createElement(`style`);return n.textContent=e,n}function fre(e,t,n,r){let i=e.head?.querySelectorAll(`style[${Xv}="${t}"],link[${Xv}="${t}"]`);if(!i||i.length===0)return!1;for(let e of i)e.removeAttribute(Xv),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 $v(e,t){let n=t.createElement(`link`);return n.setAttribute(`rel`,`stylesheet`),n.setAttribute(`href`,e),n}var ey=(()=>{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,fre(e,t,this.inline,this.external)&&this.hosts.add(e.head)}addStyles(e,t){for(let t of e)this.addUsage(t,this.inline,Qv);t?.forEach(e=>this.addUsage(e,this.external,$v))}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&&(Zv(n.elements),t.delete(e)))}ngOnDestroy(){for(let[,{elements:e}]of[...this.inline,...this.external])Zv(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,Qv(t,this.doc)));for(let[t,{elements:n}]of this.external)n.push(this.addElement(e,$v(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)(ta(vs),ta(qs),ta(Zs,8),ta(Xs))};static ɵprov=yi({token:e,factory:e.ɵfac})}return e})(),ty={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`},ny=/%COMP%/g,ry=`%COMP%`,pre=`_nghost-${ry}`,mre=`_ngcontent-${ry}`,hre=!0,gre=new Ei(``,{factory:()=>hre}),_re=new Ei(``);function vre(e){return mre.replace(ny,e)}function yre(e){return pre.replace(ny,e)}function iy(e,t){return t.map(t=>t.replace(ny,e))}var ay=(()=>{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 oy(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 uy?n.applyToHost(e):n instanceof ly&&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 iu.Emulated:r=new uy(o,s,t,this.appId,c,i,a,l,this.cssVarNamespace);break;case iu.ShadowDom:return new cy(o,e,t,i,a,this.nonce,l,this.cssVarNamespace,s);case iu.ExperimentalIsolatedShadowDom:return new cy(o,e,t,i,a,this.nonce,l,this.cssVarNamespace);default:r=new ly(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)(ta(Yv),ta(Ip),ta(qs),ta(gre),ta(vs),ta(js),ta(Zs),ta(Ju,8),ta(_re,8))};static ɵprov=yi({token:e,factory:e.ɵfac})}return e})(),oy=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(ty[t]||t,e):this.doc.createElement(e)}createComment(e){return this.doc.createComment(e)}createText(e){return this.doc.createTextNode(e)}appendChild(e,t){(sy(e)?e.content:e).appendChild(t)}insertBefore(e,t,n){if(e){let r=sy(e)?e.content:e;if(n!=null&&n.parentNode!==r)throw new di(-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 di(-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=ty[r];i?e.setAttributeNS(i,t,n):e.setAttribute(t,n)}else e.setAttribute(t,n)}removeAttribute(e,t,n){if(n){let r=ty[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&(ku.DashCase|ku.Important)?e.style.setProperty(t,n,r&ku.Important?`important`:``):e.style[t]=n}removeStyle(e,t,n){let r=t.startsWith(`--`);r&&(t=t.replace(`%NS%`,this.cssVarNamespace)),r||n&ku.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=gv().getGlobalEventTarget(this.doc,e),!e))throw new di(-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 sy(e){return e.tagName===`TEMPLATE`&&e.content!==void 0}var cy=class extends oy{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=iy(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=$v(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)}},ly=class extends oy{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?iy(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&&Iu.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},uy=class extends ly{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=vre(l),this.hostAttr=yre(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}},bre=class e extends Lne{supportsDOMEvents=!0;static makeCurrent(){Ine(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=xre();return t==null?null:Sre(t)}resetBaseElement(){dy=null}getUserAgent(){return window.navigator.userAgent}getCookie(e){return ure(document.cookie,e)}},dy=null;function xre(){return dy||=document.head.querySelector(`base`),dy?dy.getAttribute(`href`):null}function Sre(e){return new URL(e,document.baseURI).pathname}var fy=[`alt`,`control`,`meta`,`shift`],Cre={"\b":`Backspace`," ":`Tab`,"":`Delete`,"\x1B":`Escape`,Del:`Delete`,Esc:`Escape`,Left:`ArrowLeft`,Right:`ArrowRight`,Up:`ArrowUp`,Down:`ArrowDown`,Menu:`ContextMenu`,Scroll:`ScrollLock`,Win:`OS`},wre={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},Tre=(()=>{class e extends Kv{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(()=>gv().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.`),fy.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=Cre[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`),fy.forEach(t=>{if(t!==n){let n=wre[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)(ta(vs))};static ɵprov=yi({token:e,factory:e.ɵfac})}return e})();async function Ere(e,t,n){return Nne({rootComponent:e,...Dre(t,n)})}function Dre(e,t){return{platformRef:t?.platformRef,appProviders:[...my,...e?.providers??[]],platformProviders:py}}function Ore(){bre.makeCurrent()}function kre(){return new Us}function Are(){return Kl(document),document}var py=[{provide:Xs,useValue:dre},{provide:Ys,useValue:Ore,multi:!0},{provide:vs,useFactory:Are}],my=[{provide:Fa,useValue:`root`},{provide:Us,useFactory:kre},{provide:Jv,useClass:qv,multi:!0},{provide:Jv,useClass:Tre,multi:!0},ay,{provide:Ip,useClass:ey},{provide:ey,useExisting:Ip},Yv,{provide:np,useExisting:ay},[]];function hy(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 yy({code:i,why:_y(a.why,e),fix:_y(a.fix,e),docs:o,cause:e.cause,sources:e.sources,data:_y(a.data,e)},s);for(let e of t)e(r,n);return r};n[i]=s}return n}function Sy(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=0?n.slice(0,r):n}function hi(e,t){return e?t?`${e} ${t}`:e:t||``}var Wee=pi({__forward_ref__:pi});function gi(e){return e.__forward_ref__=gi,e}function _i(e){return vi(e)?e():e}function vi(e){return typeof e==`function`&&Object.hasOwn(e,Wee)&&e.__forward_ref__===gi}function yi(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function bi(e){return xi(e,wi)}function xi(e,t){return Object.hasOwn(e,t)&&e[t]||null}function Si(e){return(e?.[wi]??null)||null}function Ci(e){return e&&Object.hasOwn(e,Ti)?e[Ti]:null}var wi=pi({ɵprov:pi}),Ti=pi({ɵinj:pi}),Ei=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=yi({token:this,providedIn:t.providedIn||`root`,factory:t.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function Di(e){return e&&!!e.ɵproviders}var Oi=pi({ɵcmp:pi}),ki=pi({ɵdir:pi}),Ai=pi({ɵpipe:pi}),ji=pi({ɵfac:pi}),Mi=pi({__NG_ELEMENT_ID__:pi}),Ni=pi({__NG_ENV_ID__:pi});function Pi(e){return Li(e,`@Component`),e[Oi]||null}function Fi(e){return Li(e,`@Directive`),e[ki]||null}function Ii(e){return Li(e,`@Pipe`),e[Ai]||null}function Li(e,t){if(e==null)throw new di(-919,!1)}function Ri(e){return typeof e==`string`?e:e==null?``:String(e)}var zi=pi({ngErrorCode:pi}),Bi=pi({ngErrorMessage:pi}),Vi=pi({ngTokenPath:pi});function Hi(e,t){return Wi(``,-200,t)}function Ui(e,t){throw new di(-201,!1)}function Wi(e,t,n){let r=new di(t,e);return r[zi]=t,r[Bi]=e,n&&(r[Vi]=n),r}function Gi(e){return e[zi]}var Ki;function qi(){return Ki}function Ji(e){let t=Ki;return Ki=e,t}function Yi(e,t,n){let r=bi(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;Ui(e,``)}var Xi=globalThis,Zi={},Qi=`__NG_DI_FLAG__`,$i=class{injector;constructor(e){this.injector=e}retrieve(e,t){let n=na(t)||0;try{return this.injector.get(e,n&8?null:Zi,n)}catch(e){if(Bn(e))return e;throw e}}};function ea(e,t=0){let n=Ln();if(n===void 0)throw new di(-203,!1);if(n===null)return Yi(e,void 0,t);{let r=ra(t),i=n.retrieve(e,r);if(Bn(i)){if(r.optional)return null;throw i}return i}}function ta(e,t=0){return(qi()||ea)(_i(e),t)}function x(e,t){return ta(e,na(t))}function na(e){return e===void 0||typeof e==`number`?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function ra(e){return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)}}function ia(e){let t=[];for(let n=0;nArray.isArray(e)?la(e,t):t(e))}function ua(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function da(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function fa(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 ma(e,t,n){let r=ga(e,t);return r>=0?e[r|1]=n:(r=~r,pa(e,r,t,n)),r}function ha(e,t){let n=ga(e,t);if(n>=0)return e[n|1]}function ga(e,t){return _a(e,t,1)}function _a(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 la(t,e=>{let t=e;Da(t,a,[],r)&&(i||=[],i.push(t))}),i!==void 0&&Ea(i,a),n}function Ea(e,t){for(let n=0;n{t(e,r)})}}function Da(e,t,n,r){if(e=_i(e),!e)return!1;let i=null,a=Ci(e),o=!a&&Pi(e);if(!a&&!o){let t=e.ngModule;if(a=Ci(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)Da(i,t,n,r)}}else if(a){if(a.imports!=null&&!s){r.add(i);let e;try{la(a.imports,i=>{Da(i,t,n,r)&&(e||=[],e.push(i))})}finally{}e!==void 0&&Ea(e,t)}if(!s){let e=oa(i)||(()=>new i);t({provide:i,useFactory:e,deps:ya},i),t({provide:Sa,useValue:i,multi:!0},i),t({provide:ba,useValue:()=>ta(i),multi:!0},i)}let o=a.providers;if(o!=null&&!s){let n=e;Oa(o,e=>{t(e,n)})}}else return!1;return i!==e&&e.providers!==void 0}function Oa(e,t){for(let n of e)Di(n)&&(n=n.ɵproviders),Array.isArray(n)?Oa(n,t):t(n)}var ka=pi({provide:String,useValue:pi});function Aa(e){return typeof e==`object`&&!!e&&ka in e}function ja(e){return!!(e&&e.useExisting)}function Ma(e){return!!(e&&e.useFactory)}function Na(e){return typeof e==`function`}function Pa(e){return!!e.useClass}var Fa=new Ei(``),Ia={},La={},Ra=void 0;function za(){return Ra===void 0&&(Ra=new Ca),Ra}var Ba=class{},Va=class extends Ba{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,Za(e,e=>this.processProvider(e)),this.records.set(xa,qa(void 0,this)),r.has(`environment`)&&this.records.set(Ba,qa(void 0,this));let i=this.records.get(Fa);i!=null&&typeof i.value==`string`&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(Sa,ya,{self:!0}))}retrieve(e,t){let n=na(t)||0;try{return this.get(e,Zi,n)}catch(e){if(Bn(e))return e;throw e}}destroy(){Ka(this),this._destroyed=!0;let e=tn(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(),tn(e)}}onDestroy(e){return Ka(this),this._onDestroyHooks.push(e),()=>this.removeOnDestroy(e)}runInContext(e){Ka(this);let t=Rn(this),n=Ji(void 0);try{return e()}finally{Rn(t),Ji(n)}}get(e,t=Zi,n){if(Ka(this),Object.hasOwn(e,Ni))return e[Ni](this);let r=na(n),i=Rn(this),a=Ji(void 0);try{if(!(r&4)){let t=this.records.get(e);if(t===void 0){let n=Xa(e)&&bi(e);t=n&&this.injectableDefInScope(n)?qa(Ha(e),Ia):null,this.records.set(e,t)}if(t!=null)return this.hydrate(e,t,r)}let n=r&2?za():this.parent;return t=r&8&&t===Zi?null:t,n.get(e,t)}catch(e){let t=Gi(e);throw t===-200||t===-201?new di(t,null):e}finally{Ji(a),Rn(i)}}resolveInjectorInitializers(){let e=tn(null),t=Rn(this),n=Ji(void 0);try{let e=this.get(ba,ya,{self:!0});for(let t of e)t()}finally{Rn(t),Ji(n),tn(e)}}toString(){return`R3Injector[...]`}processProvider(e){e=_i(e);let t=Na(e)?e:_i(e&&e.provide),n=Wa(e);if(!Na(e)&&e.multi===!0){let n=this.records.get(t);n||(n=qa(void 0,Ia,!0),n.factory=()=>ia(n.multi),this.records.set(t,n)),t=e,n.multi.push(e)}this.records.set(t,n)}hydrate(e,t,n){let r=tn(null);try{if(t.value===La)throw Hi(``);return t.value===Ia&&(t.value=La,t.value=t.factory(void 0,n)),typeof t.value==`object`&&t.value&&Ya(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}finally{tn(r)}}injectableDefInScope(e){if(!e.providedIn)return!1;let t=_i(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 Ha(e){let t=bi(e),n=t===null?oa(e):t.factory;if(n!==null)return n;if(e instanceof Ei)throw new di(-204,!1);if(e instanceof Function)return Ua(e);throw new di(-204,!1)}function Ua(e){if(e.length>0)throw new di(-204,!1);let t=Si(e);return t===null?()=>new e:()=>t.factory(e)}function Wa(e){return Aa(e)?qa(void 0,e.useValue):qa(Ga(e),Ia)}function Ga(e,t,n){let r;if(Na(e)){let t=_i(e);return oa(t)||Ha(t)}if(Aa(e))r=()=>_i(e.useValue);else if(Ma(e))r=()=>e.useFactory(...ia(e.deps||[]));else if(ja(e))r=(t,n)=>ta(_i(e.useExisting),n!==void 0&&n&8?8:void 0);else{let t=_i(e&&(e.useClass||e.provide));if(Ja(e))r=()=>new t(...ia(e.deps));else return oa(t)||Ha(t)}return r}function Ka(e){if(e.destroyed)throw new di(-205,!1)}function qa(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function Ja(e){return!!e.deps}function Ya(e){return typeof e==`object`&&!!e&&typeof e.ngOnDestroy==`function`}function Xa(e){return typeof e==`function`||typeof e==`object`&&e.ngMetadataName===`InjectionToken`}function Za(e,t){for(let n of e)Array.isArray(n)?Za(n,t):n&&Di(n)?Za(n.ɵproviders,t):t(n)}function Qa(e,t){let n;e instanceof Va?(Ka(e),n=e):n=new $i(e);let r=Rn(n),i=Ji(void 0);try{return t()}finally{Rn(r),Ji(i)}}function $a(){return qi()!==void 0||Ln()!=null}var eo=1;function to(e){return Array.isArray(e)&&typeof e[eo]==`object`}function no(e){return Array.isArray(e)&&e[eo]===!0}function ro(e){return!!(e.flags&4)}function io(e){return e.componentOffset>-1}function ao(e){return(e.flags&1)==1}function oo(e){return!!e.template}function so(e){return!!(e[2]&512)}function co(e){return(e[2]&256)==256}var lo=(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})(lo||{}),uo=`math`;function fo(e){for(;Array.isArray(e);)e=e[0];return e}function po(e,t){return fo(t[e])}function mo(e,t){return fo(t[e.index])}function ho(e,t){return e.data[t]}function go(e,t){return e[t]}function _o(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}function vo(e,t){let n=t[e];return to(n)?n:n[0]}function yo(e){return(e[2]&128)==128}function Gee(e){return no(e[3])}function bo(e,t){return t==null?null:e[t]}function xo(e){e[17]=0}function So(e){e[2]&1024||(e[2]|=1024,yo(e)&&To(e))}function Kee(e,t){for(;e>0;)t=t[14],e--;return t}function Co(e){return!!(e[2]&9216||e[24]?.dirty)}function wo(e){e[10].changeDetectionScheduler?.notify(8),e[2]&64&&(e[2]|=1024),Co(e)&&To(e)}function To(e){e[10].changeDetectionScheduler?.notify(0);let t=Do(e);for(;t!==null&&!(t[2]&8192||(t[2]|=8192,!yo(t)));)t=Do(t)}function Eo(e,t){if(co(e))throw new di(911,!1);e[21]===null&&(e[21]=[]),e[21].push(t)}function qee(e,t){if(e[21]===null)return;let n=e[21].indexOf(t);n!==-1&&e[21].splice(n,1)}function Do(e){let t=e[3];return no(t)?t[3]:t}function Oo(e){return e[7]??=[]}function ko(e){return e.cleanup??=[]}function Jee(e,t,n,r){let i=Oo(t);i.push(n),e.firstCreatePass&&ko(e).push(r,i.length-1)}var Ao={lFrame:ns(null),bindingsEnabled:!0,skipHydrationRootTNode:null},jo=!1;function Yee(){return Ao.lFrame.elementDepthCount}function Xee(){Ao.lFrame.elementDepthCount++}function Mo(){Ao.lFrame.elementDepthCount--}function No(){return Ao.bindingsEnabled}function Po(){return Ao.skipHydrationRootTNode!==null}function Fo(e){return Ao.skipHydrationRootTNode===e}function Io(){Ao.skipHydrationRootTNode=null}function Lo(){return Ao.lFrame.lView}function Ro(){return Ao.lFrame.tView}function S(e){return Ao.lFrame.contextLView=e,e[8]}function C(e){return Ao.lFrame.contextLView=null,e}function zo(){let e=Bo();for(;e!==null&&e.type===64;)e=e.parent;return e}function Bo(){return Ao.lFrame.currentTNode}function Zee(){let e=Ao.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}function Vo(e,t){let n=Ao.lFrame;n.currentTNode=e,n.isParent=t}function Ho(){return Ao.lFrame.isParent}function Uo(){Ao.lFrame.isParent=!1}function Wo(){return Ao.lFrame.contextLView}function Go(){return jo}function Ko(e){let t=jo;return jo=e,t}function qo(){let e=Ao.lFrame,t=e.bindingRootIndex;return t===-1&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function Jo(){return Ao.lFrame.bindingIndex}function Qee(e){return Ao.lFrame.bindingIndex=e}function Yo(){return Ao.lFrame.bindingIndex++}function Xo(e){let t=Ao.lFrame,n=t.bindingIndex;return t.bindingIndex+=e,n}function $ee(){return Ao.lFrame.inI18n}function ete(e,t){let n=Ao.lFrame;n.bindingIndex=n.bindingRootIndex=e,Zo(t)}function tte(){return Ao.lFrame.currentDirectiveIndex}function Zo(e){Ao.lFrame.currentDirectiveIndex=e}function nte(e){let t=Ao.lFrame.currentDirectiveIndex;return t===-1?null:e[t]}function rte(){return Ao.lFrame.currentQueryIndex}function Qo(e){Ao.lFrame.currentQueryIndex=e}function ite(e){let t=e[1];return t.type===2?t.declTNode:t.type===1?e[5]:null}function $o(e,t,n){if(n&4){let r=t,i=e;for(;r=r.parent,r===null&&!(n&1)&&(r=ite(i),!(r===null||(i=i[14],r.type&10))););if(r===null)return!1;t=r,e=i}let r=Ao.lFrame=ts();return r.currentTNode=t,r.lView=e,!0}function es(e){let t=ts(),n=e[1];Ao.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function ts(){let e=Ao.lFrame,t=e===null?null:e.child;return t===null?ns(e):t}function ns(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 rs(){let e=Ao.lFrame;return Ao.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var is=rs;function as(){let e=rs();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 ate(e){return(Ao.lFrame.contextLView=Kee(e,Ao.lFrame.contextLView))[8]}function os(){return Ao.lFrame.selectedIndex}function ss(e){Ao.lFrame.selectedIndex=e}function cs(){let e=Ao.lFrame;return ho(e.tView,e.selectedIndex)}function w(){Ao.lFrame.currentNamespace=`svg`}function ls(){us()}function us(){Ao.lFrame.currentNamespace=null}function ds(){return Ao.lFrame.currentNamespace}var fs=!0;function ps(){return fs}function ms(e){fs=e}function hs(e,t=null,n=null,r){let i=gs(e,t,n,r);return i.resolveInjectorInitializers(),i}function gs(e,t=null,n=null,r,i=new Set){return new Va([n||ya,wa(e)],t||za(),null,i)}var _s=class e{static THROW_IF_NOT_FOUND=Zi;static NULL=new Ca;static create(e,t){if(Array.isArray(e))return hs({name:``},t,e,``);{let t=e.name??``;return hs({name:t},e.parent,e.providers,t)}}static ɵprov=yi({token:e,providedIn:`any`,factory:()=>ta(xa)});static __NG_ELEMENT_ID__=-1},vs=new Ei(``),ys=class{static __NG_ELEMENT_ID__=xs;static __NG_ENV_ID__=e=>e},bs=class extends ys{_lView;constructor(e){super(),this._lView=e}get destroyed(){return co(this._lView)}onDestroy(e){let t=this._lView;return Eo(t,e),()=>qee(t,e)}};function xs(){return new bs(Lo())}var Ss=new Ei(``),Cs=(()=>{class e{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new Wr(!1);debugTaskTracker=x(Ss,{optional:!0});get hasPendingTasks(){return!this.destroyed&&this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new Nr(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=yi({token:e,providedIn:`root`,factory:()=>new e})}return e})(),ws=class extends Hr{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(e=!1){super(),this.__isAsync=e,$a()&&(this.destroyRef=x(ys,{optional:!0})??void 0,this.pendingTasks=x(Cs,{optional:!0})??void 0)}emit(e){let t=tn(null);try{super.next(e)}finally{tn(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 or&&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 Ts(...e){}function Es(e){let t,n;function r(){e=Ts;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 Ds(e){return queueMicrotask(()=>e()),()=>{e=Ts}}var Os=`isAngularZone`,ks=`isAngularZone_ID`,As=0,js=class e{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new ws(!1);onMicrotaskEmpty=new ws(!1);onStable=new ws(!1);onError=new ws(!1);constructor(e){let{enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1,scheduleInRootZone:i=!1}=e;if(typeof Zone>`u`)throw new di(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,Fs(a)}static isInAngularZone(){return typeof Zone<`u`&&Zone.current.get(Os)===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new di(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new di(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,Ms,Ts,Ts);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)}},Ms={};function Ns(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 Ps(e){if(e.isCheckStableRunning||e.callbackScheduled)return;e.callbackScheduled=!0;function t(){Es(()=>{e.callbackScheduled=!1,Is(e),e.isCheckStableRunning=!0,Ns(e),e.isCheckStableRunning=!1})}e.scheduleInRootZone?Zone.root.run(()=>{t()}):e._outer.run(()=>{t()}),Is(e)}function Fs(e){let t=()=>{Ps(e)},n=As++;e._inner=e._inner.fork({name:`angular`,properties:{[Os]:!0,[ks]:n,[ks+n]:!0},onInvokeTask:(n,r,i,a,o,s)=>{if(Bs(s))return n.invokeTask(i,a,o,s);try{return Ls(e),n.invokeTask(i,a,o,s)}finally{(e.shouldCoalesceEventChangeDetection&&a.type===`eventTask`||e.shouldCoalesceRunChangeDetection)&&t(),Rs(e)}},onInvoke:(n,r,i,a,o,s,c)=>{try{return Ls(e),n.invoke(i,a,o,s,c)}finally{e.shouldCoalesceRunChangeDetection&&!e.callbackScheduled&&!Vs(s)&&t(),Rs(e)}},onHasTask:(t,n,r,i)=>{t.hasTask(r,i),n===r&&(i.change==`microTask`?(e._hasPendingMicrotasks=i.microTask,Is(e),Ns(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 Is(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.callbackScheduled===!0)}function Ls(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function Rs(e){e._nesting--,Ns(e)}var zs=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new ws;onMicrotaskEmpty=new ws;onStable=new ws;onError=new ws;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 Bs(e){return Hs(e,`__ignore_ng_zone__`)}function Vs(e){return Hs(e,`__scheduler_tick__`)}function Hs(e,t){return!Array.isArray(e)||e.length!==1?!1:e[0]?.data?.[t]===!0}var Us=class{_console=console;handleError(e){this._console.error(`ERROR`,e)}},Ws=new Ei(``,{factory:()=>{let e=x(js),t=x(Ba),n;return r=>{e.runOutsideAngular(()=>{t.destroyed&&!n?setTimeout(()=>{throw r}):(n??=t.get(Us),n.handleError(r))})}}}),Gs={provide:ba,useValue:()=>{x(Us,{optional:!0})},multi:!0};function T(e,t){let[n,r,i]=_ee(e,t?.equal),a=n;return a[en],a.set=r,a.update=i,a.asReadonly=Ks.bind(a),a}function Ks(){let e=this[en];if(e.readonlyFn===void 0){let t=()=>this();t[en]=e,e.readonlyFn=t}return e.readonlyFn}var qs=new Ei(``,{factory:()=>Js}),Js=`ng`,Ys=new Ei(``),Xs=new Ei(``,{providedIn:`platform`,factory:()=>`unknown`}),Zs=new Ei(``,{factory:()=>x(vs).body?.querySelector(`[ngCspNonce]`)?.getAttribute(`ngCspNonce`)||null}),Qs=(()=>{class e{view;node;constructor(e,t){this.view=e,this.node=t}static __NG_ELEMENT_ID__=$s}return e})();function $s(){return new Qs(Lo(),zo())}var ec=class{},tc=new Ei(``,{factory:()=>!0}),nc=new Ei(``),rc=(()=>{class e{static ɵprov=yi({token:e,providedIn:`root`,factory:()=>new ic})}return e})(),ic=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}},ac=class{[en];constructor(e){this[en]=e}destroy(){this[en].destroy()}};function E(e,t){let n=t?.injector??x(_s),r=t?.manualCleanup===!0?null:n.get(ys),i,a=n.get(Qs,null,{optional:!0}),o=n.get(ec);return a===null?i=uc(e,n.get(rc),o):(i=lc(a.view,o,e),r instanceof bs&&r._lView===a.view&&(r=null)),i.injector=n,r!==null&&(i.onDestroyFns=[r.onDestroy(()=>i.destroy())]),new ac(i)}var oc={...Pn,cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let e=Ko(!1);try{Fn(this)}finally{Ko(e)}},cleanup(){if(!this.cleanupFns?.length)return;let e=tn(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],tn(e)}}},sc={...oc,consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){if(_n(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.scheduler.remove(this)}},cc={...oc,consumerMarkedDirty(){this.view[2]|=8192,To(this.view),this.notifier.notify(13)},destroy(){if(_n(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.view[23]?.delete(this)}};function lc(e,t,n){let r=Object.create(cc);return r.view=e,r.zone=typeof Zone<`u`?Zone.current:null,r.notifier=t,r.fn=dc(r,n),e[23]??=new Set,e[23].add(r),r.consumerMarkedDirty(r),r}function uc(e,t,n){let r=Object.create(sc);return r.fn=dc(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 dc(e,t){return()=>{t(t=>(e.cleanupFns??=[]).push(t))}}function fc(e){return typeof e==`function`&&e[en]!==void 0}function pc(e){return fc(e)&&typeof e.set==`function`}var mc=Symbol(`InputSignalNode#UNSET`),hc={...Mn,transformFn:void 0,applyValueToInputSignal(e,t){An(e,t)}};function gc(e){return{toString:e}.toString()}var _c=(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})(_c||{}),vc=class{previousValue;currentValue;firstChange;constructor(e,t,n){this.previousValue=e,this.currentValue=t,this.firstChange=n}isFirstChange(){return this.firstChange}};function yc(e,t,n,r){t===null?e[n]=r:t.applyValueToInputSignal(t,r)}var bc=null,xc=(()=>{bc=Cc;let e=()=>Cc;return e.ngInherit=!0,e})();function Sc(){return bc}function Cc(e){return e.type.prototype.ngOnChanges&&(e.setInput=Tc),wc}function wc(){let e=Dc(this),t=e?.current;if(t){let n=e.previous;if(n===va)e.previous=t;else for(let e in t)n[e]=t[e];e.current=null,this.ngOnChanges(t)}}function Tc(e,t,n,r,i){let a=this.declaredInputs[r],o=Dc(e)||Oc(e,{previous:va,current:null}),s=o.current||={},c=o.previous,l=c[a];s[a]=new vc(l&&l.currentValue,n,c===va),yc(e,t,i,n)}var Ec=`__ngSimpleChanges__`;function Dc(e){return Object.hasOwn(e,Ec)&&e[Ec]||null}function Oc(e,t){return e[Ec]=t}var kc=[],Ac=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,Lc(o,a)):Lc(o,a)}var zc=-1,Bc=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 Vc(e){return!!(e.flags&8)}function Hc(e){return!!(e.flags&16)}function Uc(e,t,n){let r=0;for(;rt){o=a-1;break}}}for(;a>16}function Zc(e,t){let n=Xc(e),r=t;for(;n>0;)r=r[14],n--;return r}var Qc=!0;function $c(e){let t=Qc;return Qc=e,t}var el=255,tl=5,nl=0,rl={};function il(e,t,n){let r;typeof n==`string`?r=n.charCodeAt(0)||0:Object.hasOwn(n,Mi)&&(r=n[Mi]),r??=n[Mi]=nl++;let i=r&el,a=1<>tl)]|=a}function al(e,t){let n=sl(e,t);if(n!==-1)return n;let r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,ol(r.data,e),ol(t,null),ol(r.blueprint,null));let i=cl(e,t),a=e.injectorIndex;if(Jc(i)){let e=Yc(i),n=Zc(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 ol(e,t){e.push(0,0,0,0,0,0,0,0,t)}function sl(e,t){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||t[e.injectorIndex+8]===null?-1:e.injectorIndex}function cl(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=Tl(i),r===null)return zc;if(n++,i=i[14],r.injectorIndex!==-1)return r.injectorIndex|n<<16}return zc}function ll(e,t,n){il(e,t,n)}function ul(e,t,n){if(n&8||e!==void 0)return e;Ui(t,`NodeInjector`)}function dl(e,t,n,r){if(n&8&&r===void 0&&(r=null),!(n&3)){let i=e[9],a=Ji(void 0);try{return i?i.get(t,r,n&8):Yi(t,r,n&8)}finally{Ji(a)}}return ul(r,t,n)}function fl(e,t,n,r=0,i){if(e!==null){if(t[2]&2048&&!(r&2)){let i=wl(e,t,n,r,rl);if(i!==rl)return i}let i=pl(e,t,n,r,rl);if(i!==rl)return i}return dl(t,n,r,i)}function pl(e,t,n,r,i){let a=_l(n);if(typeof a==`function`){if(!$o(t,e,r))return r&1?ul(i,n,r):dl(t,n,r,i);try{let e;if(e=a(r),e==null&&!(r&8))Ui(n);else return e}finally{is()}}else if(typeof a==`number`){let i=null,o=sl(e,t),s=zc,c=r&1?t[15][5]:null;for((o===-1||r&4)&&(s=o===-1?cl(e,t):t[o+8],s===zc||!yl(r,!1)?o=-1:(i=t[1],o=Yc(s),t=Zc(s,t)));o!==-1;){let e=t[1];if(vl(a,o,e.data)){let e=ml(o,t,n,i,r,c);if(e!==rl)return e}s=t[o+8],s!==zc&&yl(r,t[1].data[o+8]===c)&&vl(a,o,t)?(i=e,o=Yc(s),t=Zc(s,t)):o=-1}}return i}function ml(e,t,n,r,i,a){let o=t[1],s=o.data[e+8],c=hl(s,o,n,r==null?io(s)&&Qc:r!=o&&!!(s.type&3),i&1&&a===s);return c===null?rl:gl(t,o,c,s,i)}function hl(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&&oo(e)&&e.type===n)return c}return null}function gl(e,t,n,r,i){let a=e[n],o=t.data;if(a instanceof Bc){let s=a;if(s.resolving)throw Hi(``);let c=$c(s.canSeeViewProviders);s.resolving=!0,o[n].type||o[n];let l=s.injectImpl?Ji(s.injectImpl):null;$o(e,r,0);try{a=e[n]=s.factory(void 0,i,o,e,r),t.firstCreatePass&&n>=r.directiveStart&&jc(n,o[n],t)}finally{l!==null&&Ji(l),$c(c),s.resolving=!1,is()}}return a}function _l(e){if(typeof e==`string`)return e.charCodeAt(0)||0;let t=Object.hasOwn(e,Mi)?e[Mi]:void 0;return typeof t==`number`?t>=0?t&el:xl:t}function vl(e,t,n){let r=1<>tl)]&r)}function yl(e,t){return!(e&2)&&!(e&1&&t)}var bl=class{_tNode;_lView;constructor(e,t){this._tNode=e,this._lView=t}get(e,t,n){return fl(this._tNode,this._lView,e,na(n),t)}};function xl(){return new bl(zo(),Lo())}function Sl(e){return gc(()=>{let t=e.prototype.constructor,n=t[ji]||Cl(t),r=Object.prototype,i=Object.getPrototypeOf(e.prototype).constructor;for(;i&&i!==r;){let e=i[ji]||Cl(i);if(e&&e!==n)return e;i=Object.getPrototypeOf(i)}return e=>new e})}function Cl(e){return vi(e)?()=>{let t=Cl(_i(e));return t&&t()}:oa(e)}function wl(e,t,n,r,i){let a=e,o=t;for(;a!==null&&o!==null&&o[2]&2048&&!so(o);){let e=pl(a,o,n,r|2,rl);if(e!==rl)return e;r&=-5;let t=a.parent;if(!t){let e=o[20];if(e){let t=e.get(n,rl,r);if(t!==rl)return t}t=Tl(o),o=o[14]}a=t}return i}function Tl(e){let t=e[1],n=t.type;return n===2?t.declTNode:n===1?e[5]:null}function El(e){return{token:e.token,providedIn:e.autoProvided===!1?null:`root`,factory:e.factory,value:void 0}}function Dl(){return Ol(zo(),Lo())}function Ol(e,t){return new kl(mo(e,t))}var kl=(()=>{class e{nativeElement;constructor(e){this.nativeElement=e}static __NG_ELEMENT_ID__=Dl}return e})();function Al(e){return e instanceof kl?e.nativeElement:e}function jl(){return this._results[Symbol.iterator]()}var Ml=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 Hr}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=ca(e);(this._changesDetected=!sa(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]=jl};function Nl(e){return(e.flags&128)==128}var Pl=(function(e){return e[e.OnPush=0]=`OnPush`,e[e.Eager=1]=`Eager`,e[e.Default=1]=`Default`,e})(Pl||{}),Fl=new Map,Il=0;function Ll(){return Il++}function Rl(e){Fl.set(e[19],e)}function zl(e){Fl.delete(e[19])}var Bl=`__ngContext__`;function Vl(e,t){to(t)?(e[Bl]=t[19],Rl(t)):e[Bl]=t}function Hl(e){return Wl(e[12])}function Ul(e){return Wl(e[4])}function Wl(e){for(;e!==null&&!no(e);)e=e[4];return e}var Gl=void 0;function Kl(e){Gl=e}function ql(){if(Gl!==void 0)return Gl;if(typeof document<`u`)return document;throw new di(210,!1)}var Jl=!1,Yl=new Ei(``,{factory:()=>Jl}),Xl=new WeakMap;function Zl(e,t){if(typeof e!=`object`||!e)return;let n=Xl.get(e);n||(n=new WeakSet,Xl.set(e,n)),n.add(t)}function Ql(e){return(e.flags&32)==32}var $l=()=>null;function eu(e,t,n=!1){return $l(e,t,n)}function tu(e,t){let n=e.contentQueries;if(n!==null){let r=tn(null);try{for(let r=0;r|^->||--!>|)/g,pu=`​$1​`;function mu(e){return e.replace(du,e=>e.replace(fu,pu))}function hu(e,t){return e.createText(t)}function ote(e,t,n){e.setValue(t,n)}function ste(e,t){return e.createComment(mu(t))}function gu(e,t,n){return e.createElement(t,n)}function _u(e,t,n,r,i){e.insertBefore(t,n,r,i)}function vu(e,t,n){e.appendChild(t,n)}function yu(e,t,n,r,i){r===null?vu(e,t,n):_u(e,t,n,r,i)}function bu(e,t,n,r){e.removeChild(null,t,n,r)}function cte(e,t,n){e.setAttribute(t,`style`,n)}function lte(e,t,n){n===``?e.removeAttribute(t,`class`):e.setAttribute(t,`class`,n)}function xu(e,t,n){let{mergedAttrs:r,classes:i,styles:a}=n;r!==null&&Uc(e,t,r),i!==null&<e(e,t,i),a!==null&&cte(e,t,a)}function Su(e){let t=ute();return t?t.sanitize(lo.URL,e)||``:su(e,`URL`)?ou(e):uu(Ri(e))}function ute(){let e=Lo();return e&&e[10].sanitizer}function Cu(e){return e.ownerDocument.defaultView}function wu(e){return e.ownerDocument}function dte(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 Tu=`ng-template`;function fte(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(Du(r))return!1;o=!0}}}}}return Du(r)||o}function Du(e){return!(e&1)}function hte(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!==``&&!Du(o)&&(t+=ku(a,i),i=``),r=o,a||=!Du(r);n++}return i!==``&&(t+=ku(a,i)),t}function xte(e){return e.map(bte).join(`,`)}function Ste(e){let t=[],n=[],r=1,i=2;for(;r!1});function Nu(e){if(!e)return 0;let t=e.toLowerCase().indexOf(`ms`)>-1?1:1e3;return parseFloat(e)*t}function Pu(e,t){return e.getPropertyValue(t).split(`,`).map(e=>e.trim())}function Tte(e){let t=Pu(e,`transition-property`),n=Pu(e,`transition-duration`),r=Pu(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 Ete(e){let t=Pu(e,`animation-name`),n=Pu(e,`animation-delay`),r=Pu(e,`animation-duration`),i=Pu(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 Fu(e,t){return e!==void 0&&e.duration>t.duration}function Iu(e){return(e.animationName!=null||e.propertyName!=null)&&e.duration>0}function Lu(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 Dte(e,t){let n=getComputedStyle(e),r=Ete(n),i=Tte(n),a=r.duration>i.duration?r:i;Fu(t.get(e),a)||Iu(a)&&t.set(e,a)}function Ote(e,t,n){if(!n)return;let r=e.getAnimations();return r.length===0?Dte(e,t):kte(e,t,r)}function kte(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=Lu(e)??0,n,i;e.animationName?i=e.animationName:n=e.transitionProperty,t>=r.duration&&(r={animationName:i,propertyName:n,duration:t})}Fu(t.get(e),r)||Iu(r)&&t.set(e,r)}var Ru=new Set,Ate=!1,jte=1,zu=typeof document<`u`&&typeof document?.documentElement?.getAnimations==`function`;function Mte(e){return e[9].get(wte,Ate)}function Nte(e,t,n){let r=Vu.get(e);if(r){for(let e of t)r.classList.push(e);for(let e of n)r.cleanupFns.push(e)}else Vu.set(e,{classList:t,cleanupFns:n})}function Bu(e){let t=Vu.get(e);if(t){for(let e of t.cleanupFns)e();Vu.delete(e)}Hu.delete(e)}var Vu=new WeakMap,Hu=new WeakMap,Uu=new WeakMap;function Wu(e){return e?e[14]??e:null}var Gu=new WeakSet;function Pte(e,t,n){let r=Uu.get(e);if(!r||r.length===0)return;let i=t.parentNode,a=t.previousSibling,o=Wu(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),Gu.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 Fte(e,t,n){let r=Wu(n),i=Uu.get(e);i?i.some(e=>e.el===t)||i.push({el:t,declarationView:r}):Uu.set(e,[{el:t,declarationView:r}])}function Ku(e){let t=e[26]??={};return t.enter??=new Map}function Ite(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 Ju(e,t){let n=Hu.get(t);if(n===void 0)return!0;if(t!==qu(e))return!1;let r=e.animation;if(r){let e=Lu(r);if(e!==void 0&&e+jte{class e{impl=null;execute(){this.impl?.execute()}static ɵprov=yi({token:e,providedIn:`root`,factory:()=>new e})}return e})(),ed=[0,1,2,3],td=(()=>{class e{ngZone=x(js);scheduler=x(ec);errorHandler=x(Us,{optional:!0});sequences=new Set;deferredRegistrations=new Set;executing=!1;constructor(){x(Xu,{optional:!0})}execute(){let e=this.sequences.size>0;e&&Ac(_c.AfterRenderHooksStart),this.executing=!0;for(let e of ed)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&&Ac(_c.AfterRenderHooksEnd)}register(e){let{view:t}=e;t===void 0?this.executing?this.deferredRegistrations.add(e):this.addSequence(e):((t[25]??=[]).push(e),To(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(Yu.AFTER_NEXT_RENDER,e):e()}static ɵprov=yi({token:e,providedIn:`root`,factory:()=>new e})}return e})(),nd=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 rd(e,t){let n=t?.injector??x(_s);return Qu(`NgAfterNextRender`),zte(e,n,t,!0)}function Rte(e){return e instanceof Function?[void 0,void 0,e,void 0]:[e.earlyRead,e.write,e.mixedReadWrite,e.read]}function zte(e,t,n,r){let i=t.get($u);i.impl??=t.get(td);let a=t.get(Xu,null,{optional:!0}),o=n?.manualCleanup===!0?null:t.get(ys),s=t.get(Qs,null,{optional:!0}),c=new nd(i.impl,Rte(e),s?.view,r,o,a?.snapshot(null));return i.impl.register(c),c}var id=new Ei(``,{factory:()=>{let e=x(Ba),t=new Set;return e.onDestroy(()=>t.clear()),{queue:t,isScheduled:!1,scheduler:null,injector:e}}});function ad(e,t,n){let r=e.get(id);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 Bte(e,t){let n=e.get(id);if(Array.isArray(t))for(let e of t)n.queue.delete(e);else n.queue.delete(t)}function Vte(e,t){let n=e.get(id);if(t.detachedLeaveAnimationFns){for(let e of t.detachedLeaveAnimationFns)n.queue.delete(e);t.detachedLeaveAnimationFns=void 0}}function Hte(e){let t=e.get(id);t.isScheduled||=(rd(()=>{t.isScheduled=!1;for(let e of t.queue)e();t.queue.clear()},{injector:t.injector}),!0)}function Ute(e){let t=e.get(id);t.scheduler=Hte,t.scheduler(e)}function od(e,t){for(let[n,r]of t)ad(e,r.animateFns)}function sd(e,t,n,r){let i=e?.[26]?.enter;t!==null&&i&&i.has(n.index)&&od(r,i)}function cd(e,t,n,r){try{n.get(xa)}catch{return r(!1)}let i=e?.[26];i?.enter?.has(t.index)&&Bte(n,i.enter.get(t.index).animateFns);let a=Wte(e,t,i);if(a.size===0){let n=!1;if(e){let r=[];ld(e,t,r),n=r.length>0}if(!n)return r(!1)}e&&Ru.add(e[19]),ad(n,()=>Gte(e,t,i||void 0,a,r),i||void 0)}function Wte(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 Gte(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&&ld(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),qte(e,t.running,i)}else Promise.allSettled(a).then(()=>{e&&Ru.delete(e[19]),i(!0)})}else e&&Ru.delete(e[19]),i(!1)}function ld(e,t,n){if(t.type&12){let r=e[t.index];if(no(r))for(let e=10;e{e[26]?.running===t&&(e[26].running=void 0,Ru.delete(e[19])),n(!0)})}function ud(e,t,n,r,i,a,o,s){if(i!=null){let c,l=!1;no(i)?c=i:to(i)&&(l=!0,i=i[0]);let u=fo(i);e===0&&r!==null?(sd(s,r,a,n),o==null?vu(t,r,u):_u(t,r,u,o||null,!0)):e===1&&r!==null?(sd(s,r,a,n),_u(t,r,u,o||null,!0),Pte(a,u,s)):e===2?(s?.[26]?.leave?.has(a.index)&&Fte(a,u,s),Gu.delete(u),cd(s,a,n,e=>{if(Gu.has(u)){Gu.delete(u);return}bu(t,u,l,e)})):e===3&&(Gu.delete(u),cd(s,a,n,()=>{t.destroyNode(u)})),c!=null&&Ed(t,e,n,c,a,r,o)}}function Jte(e,t){dd(e,t),t[0]=null,t[5]=null}function Yte(e,t,n,r,i,a){r[0]=i,r[5]=t,Sd(e,r,n,1,i,a)}function dd(e,t){t[10].changeDetectionScheduler?.notify(9),Sd(e,t,t[11],2,null,null)}function Xte(e){let t=e[12];if(!t)return md(e[1],e);for(;t;){let n=null;if(to(t))n=t[12];else{let e=t[10];e&&(n=e)}if(!n){for(;t&&!t[4]&&t!==e;)to(t)&&md(t[1],t),t=t[3];t===null&&(t=e),to(t)&&md(t[1],t),n=t&&t[4]}t=n}}function fd(e,t){let n=e[9],r=n.indexOf(t);n.splice(r,1)}function pd(e,t){if(co(t))return;let n=t[11];n.destroyNode&&Sd(e,t,n,3,null,null),Xte(t)}function md(e,t){if(co(t))return;let n=tn(null);try{t[2]&=-129,t[2]|=256,t[24]&&_n(t[24]),Qte(e,t),Zte(e,t),t[1].type===1&&t[11].destroy();let n=t[16];if(n!==null&&no(t[3])){n!==t[3]&&fd(n,t);let r=t[18];r!==null&&r.detachView(e)}zl(t)}finally{tn(n)}}function Zte(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&&Id(e,t,27,!1),Ac(o?_c.TemplateUpdateStart:_c.TemplateCreateStart,i,n),n(r,i)}finally{ss(a),Ac(o?_c.TemplateUpdateEnd:_c.TemplateCreateEnd,i,n)}}function Bd(e,t,n){qd(e,t,n),(n.flags&64)==64&&Jd(e,t,n)}function Vd(e,t,n=mo){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];Rd(o,n[i],s,a),l=!0}else if(i>c)break}}return o!==null&&Object.hasOwn(r.inputs,i)&&(Rd(r,n[o],i,a),l=!0),l}function of(e,t){let n=vo(t,e),r=n[1];sf(r,n);let i=n[0];i!==null&&n[6]===null&&(n[6]=eu(i,n[9])),Ac(_c.ComponentStart);try{cf(r,n,n[8])}finally{Ac(_c.ComponentEnd,n[8])}}function sf(e,t){for(let n=t.length;n{To(e.lView)},consumerOnSignalRead(){this.lView[24]=this}};function bf(e){let t=e[24]??Object.create(xf);return t.lView=e,t}var xf={...rn,consumerIsAlwaysLive:!0,kind:`template`,consumerMarkedDirty:e=>{let t=Do(e.lView);for(;t&&!Sf(t[1]);)t=Do(t);t&&So(t)},consumerOnSignalRead(){this.lView[24]=this}};function Sf(e){return e.type!==2}function Cf(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 wf=100;function Tf(e,t=0){let n=e[10].rendererFactory;n.begin?.();try{Ef(e,t)}finally{n.end?.()}}function Ef(e,t){let n=Go();try{Ko(!0),Mf(e,t);let n=0;for(;Co(e);){if(n===wf)throw new di(103,!1);n++,Mf(e,1)}}finally{Ko(n)}}function Df(e,t,n,r){if(co(t))return;let i=t[2];es(t);let a=!0,o=null,s=null;Sf(e)?(s=gf(t),o=fn(s)):nn()===null?(a=!1,s=bf(t),o=fn(s)):t[24]&&=(_n(t[24]),null);try{xo(t),Qee(e.bindingStartIndex),n!==null&&zd(e,t,n,2,r);let a=(i&3)==3;if(a){let n=e.preOrderCheckHooks;n!==null&&Nc(t,n,null)}else{let n=e.preOrderHooks;n!==null&&Pc(t,n,0,null),Fc(t,0)}if(kf(t),Cf(t),Of(t,0),e.contentQueries!==null&&tu(e,t),a){let n=e.contentCheckHooks;n!==null&&Nc(t,n)}else{let n=e.contentHooks;n!==null&&Pc(t,n,1),Fc(t,1)}Pf(e,t);let o=e.components;o!==null&&Nf(t,o,0);let s=e.viewQuery;if(s!==null&&nu(2,s,r),a){let n=e.viewCheckHooks;n!==null&&Nc(t,n)}else{let n=e.viewHooks;n!==null&&Pc(t,n,2),Fc(t,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),t[22]){for(let e of t[22])e();t[22]=null}mf(t),t[2]&=-73}catch(e){throw To(t),e}finally{s!==null&&(mn(s,o),a&&vf(s)),as()}}function Of(e,t){for(let n=Hl(e);n!==null;n=Ul(n))for(let e=10;e0&&(e[n-1][4]=r[4]);let a=da(e,10+t);Jte(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 Vf(e,t,n,r){let i=10+r,a=n.length;r>0&&(n[i-1][4]=t),r-1&&(Bf(e,n),da(t,n))}this._attachedToViewContainer=!1}pd(this._lView[1],this._lView)}onDestroy(e){Eo(this._lView,e)}markForCheck(){Ff(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[2]&=-129}reattach(){wo(this._lView),this._lView[2]|=128}detectChanges(){this._lView[2]|=1024,Tf(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new di(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let e=so(this._lView),t=this._lView[16];t!==null&&!e&&fd(t,this._lView),dd(this._lView[1],this._lView)}attachToAppRef(e){if(this._attachedToViewContainer)throw new di(902,!1);this._appRef=e;let t=so(this._lView),n=this._lView[16];n!==null&&!t&&Hf(n,this._lView),wo(this._lView)}},Wf=(()=>{class e{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=Gf;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 Uf(uf(this._declarationLView,this._declarationTContainer,e,{embeddedViewInjector:t,dehydratedView:n}))}}return e})();function Gf(){return Kf(zo(),Lo())}function Kf(e,t){return e.type&4?new Wf(t,e,Ol(e,t)):null}function qf(e,t,n,r,i){let a=e.data[t];if(a===null)a=Jf(e,t,n,r,i),$ee()&&(a.flags|=32);else if(a.type&64){a.type=n,a.value=r,a.attrs=i;let e=Zee();a.injectorIndex=e===null?-1:e.injectorIndex}return Vo(a,!0),a}function Jf(e,t,n,r,i){let a=Bo(),o=Ho(),s=o?a:a&&a.parent,c=e.data[t]=Xf(e,s,n,t,r,i);return Yf(e,c,a,o),c}function Yf(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 Xf(e,t,n,r,i,a){let o=t?t.injectorIndex:-1,s=0;return Po()&&(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:ds(),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 Zf(e){let t=e[6]??[],n=e[3][11],r=[];for(let e of t)e.data.di===void 0?Qf(e,n):r.push(e);e[6]=r}function Qf(e,t){let n=0,r=e.firstChild;if(r){let i=e.data.r;for(;nnull,ep=()=>null;function tp(e,t){return $f(e,t)}function np(e,t,n){return ep(e,t,n)}var rp=class{},ip=class{},ap=class{destroyNode=null;static __NG_ELEMENT_ID__=()=>op()};function op(){let e=Lo(),t=vo(zo().index,e);return(to(t)?t:e)[11]}var sp=(()=>{class e{static ɵprov=yi({token:e,providedIn:`root`,factory:()=>null})}return e})();function cp(e){return e.debugInfo?.className||e.type.name||null}var lp={},up=class{injector;parentInjector;constructor(e,t){this.injector=e,this.parentInjector=t}get(e,t,n){let r=this.injector.get(e,lp,n);return r!==lp||t===lp?r:this.parentInjector.get(e,t,n)}};function dp(e,t,n){return e[t]=n}function fp(e,t){return e[t]}function pp(e,t,n){if(n===Au)return!1;let r=e[t];return!Object.is(r,n)&&(e[t]=n,!0)}function mp(e,t,n,r){let i=pp(e,t,n);return pp(e,t+1,r)||i}function hp(e,t,n,r,i){let a=mp(e,t,n,r);return pp(e,t+2,i)||a}function gp(e,t,n,r,i,a){let o=mp(e,t,n,r);return mp(e,t+2,i,a)||o}function _p(e,t,n){return function r(i){let a=r.__ngNativeEl__;a!==void 0&&Zl(i,a),Ff(io(e)?vo(e.index,t):t,5);let o=t[8],s=vp(t,o,n,i),c=r.__ngNextListenerFn__;for(;c;)s=vp(t,o,c,i)&&s,c=c.__ngNextListenerFn__;return s}}function vp(e,t,n,r){let i=tn(null);try{return Ac(_c.OutputStart,t,n),n(r)!==!1}catch(t){return nf(e,t),!1}finally{Ac(_c.OutputEnd,t,n),tn(i)}}function yp(e,t,n,r,i,a,o,s){let c=ao(e),l=!1,u=null;if(!r&&c&&(u=xp(t,n,a,e.index)),u!==null){let e=u.__ngLastListenerFn__||u;e.__ngNextListenerFn__=o,u.__ngLastListenerFn__=o,l=!0}else{let o=mo(e,n),c=r?r(o):o;r||(s.__ngNativeEl__=o);let l=i.listen(c,a,s);bp(a)||Sp(r?t=>r(fo(t[e.index])):e.index,t,n,a,s,l,!1)}return l}function bp(e){return e.startsWith(`animation`)||e.startsWith(`transition`)}function xp(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 Sp(e,t,n,r,i,a,o){let s=t.firstCreatePass?ko(t):null,c=Oo(n),l=c.length;c.push(i,a),s&&s.push(r,e,l,(l+1)*(o?-1:1))}function Cp(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,wp(e,t,l,n[a+1],r,i);else if(l>s)break}}return Object.hasOwn(n.outputs,r)&&(c=!0,wp(e,t,a,r,r,i)),c}function wp(e,t,n,r,i,a){let o=t[n],s=t[1],c=o[s.data[n].outputs[r]].subscribe(a);Sp(e.index,s,t,i,a,c,!0)}function Tp(){Ep()}function Ep(){let e=Lo(),t=Ro(),n=zo();if(t.firstCreatePass&&Mp(t,n),n.controlDirectiveIndex===-1)return;Qu(`NgSignalForms`);let r=e[n.controlDirectiveIndex];t.data[n.controlDirectiveIndex].controlDef.create(r,new kp(e,t,n))}function Dp(){Op()}function Op(){let e=Lo(),t=Ro(),n=cs();if(n.controlDirectiveIndex===-1)return;let r=t.data[n.controlDirectiveIndex].controlDef,i=e[n.controlDirectiveIndex];r.update(i,new kp(e,t,n))}var kp=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 mo(this.tNode,this.lView)}get descriptor(){return`<${this.tNode.value}>`}listenToCustomControlOutput(e,t){let n=this.tView.data[this.tNode.customControlIndex];Cp(this.tNode,this.lView,n,e,_p(this.tNode,this.lView,t))}listenToCustomControlModel(e){let t=this.tNode.flags&1024?`valueChange`:`checkedChange`,n=this.tView.data[this.tNode.customControlIndex];Cp(this.tNode,this.lView,n,t,_p(this.tNode,this.lView,e))}listenToDom(e,t){yp(this.tNode,this.tView,this.lView,void 0,this.lView[11],e,t,_p(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(jp(r,o,e)))&&(Rd(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=Ap(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}Np(e,t)}function Np(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 Pp(e,t){return Fp(e,t)&&Ip(e,t+`Change`)}function Fp(e,t){return t in e.inputs}function Ip(e,t){return t in e.outputs}var Lp=Symbol(`BINDING`),Rp=new Ei(``);function zp(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 $p(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&Ld.SignalBased)!==0};return i&&(a.transform=i),a})}function sm(e){return Object.keys(e).map(t=>({propName:e[t],templateName:t}))}function cm(e,t,n){let r=t instanceof Ba?t:t?.injector;return r&&e.getStandaloneInjector!==null&&(r=e.getStandaloneInjector(r)||r),r?new up(n,r):n}function lm(e){let t=e.get(ip,null);if(t===null)throw new di(407,!1);return{rendererFactory:t,sanitizer:e.get(sp,null),changeDetectionScheduler:e.get(ec,null),ngReflect:!1,tracingService:e.get(Xu,null,{optional:!0})}}function um(e,t,n){let r=fm(e);return gu(t,r,r===`svg`?`svg`:r===`math`?uo:n)}function dm(e){if((e&&`localName`in e&&typeof e.localName==`string`?e.localName:e?.tagName)?.toLowerCase()===`script`)throw new di(905,!1)}function fm(e){return(e.selectors[0][0]||`div`).toLowerCase()}var pm=class{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=om(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=sm(this.componentDef.outputs),this.cachedOutputs}constructor(e,t){this.componentDef=e,this.ngModule=t,this.componentType=e.type,this.selector=xte(e.selectors),this.ngContentSelectors=e.ngContentSelectors??[],this.isBoundToModule=!!t}create(e,t,n,r,i,a,o){Ac(_c.DynamicComponentStart);let s=tn(null);try{let s=this.componentDef,c=cm(s,r||this.ngModule,e),l=lm(c),u=l.tracingService;return u&&u.componentCreate?u.componentCreate(cp(s),()=>this.createComponentRef(l,c,t,n,i,a,o)):this.createComponentRef(l,c,t,n,i,a,o)}finally{tn(s)}}createComponentRef(e,t,n,r,i,a,o){let s=this.componentDef,c=mm(r,s,a,i),l=e.rendererFactory.createRenderer(null,s),u=r?Hd(l,r,s.encapsulation,t):um(s,l,o??null);dm(u);let d=t.get(Rp,null),f=hm(u,()=>t.get(vs,null)??ql());d&&d.addHost(f);let p=a?.some(_m)||i?.some(e=>typeof e!=`function`&&e.bindings.some(_m)),m=jd(null,c,null,512|Nd(s),null,null,e,l,t,null,eu(u,t,!0));d&&im&&f instanceof ShadowRoot&&Eo(m,()=>{d.removeHost(f)}),m[27]=u,es(m);let ee=null;try{let e=tm(27,m,2,`#host`,()=>c.directiveRegistry,!0,0);xu(l,u,e),Vl(u,m),Bd(c,m,e),ru(c,e,m),nm(c,e),n!==void 0&&ym(e,this.ngContentSelectors,n),ee=vo(e.index,m),m[8]=ee[8],cf(c,m,null)}catch(e){throw ee!==null&&zl(ee),zl(m),e}finally{Ac(_c.DynamicComponentEnd),as()}return new vm(this.componentType,m,!!p)}};function mm(e,t,n,r){let i=e?[`ng-version`,`22.1.7`]:Ste(t.selectors[0]),a=null,o=null,s=0;if(n)for(let e of n)s+=e[Lp].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 _m(e){let t=e[Lp].kind;return t===`input`||t===`twoWay`}var vm=class extends rp{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(e,t,n){super(),this._rootLView=t,this._hasInputBindings=n,this._tNode=ho(t[1],27),this.location=Ol(this._tNode,t),this.instance=vo(this._tNode.index,t)[8],this.hostView=this.changeDetectorRef=new Uf(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;rf(n,r[1],r,e,t),this.previousInputValues.set(e,t),Ff(vo(n.index,r),1)}get injector(){return new bl(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(e){this.hostView.onDestroy(e)}};function ym(e,t,n){let r=e.projection=[];for(let e=0;e{class e{static __NG_ELEMENT_ID__=xm}return e})();function xm(){return Tm(zo(),Lo())}var Sm=class e extends bm{_lContainer;_hostTNode;_hostLView;constructor(e,t,n){super(),this._lContainer=e,this._hostTNode=t,this._hostLView=n}get element(){return Ol(this._hostTNode,this._hostLView)}get injector(){return new bl(this._hostTNode,this._hostLView)}get parentInjector(){let e=cl(this._hostTNode,this._hostLView);if(Jc(e)){let t=Zc(e,this._hostLView),n=Yc(e),r=t[1].data[n+8];return new bl(r,t)}return new bl(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(e){let t=Cm(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=tp(this._lContainer,e.ssrId),o=e.createEmbeddedViewImpl(t||{},i,a);return this.insertImpl(o,r,df(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 pm(Pi(e)),u=n||this.parentInjector;if(!i&&l.ngModule==null){let e=this.parentInjector.get(Ba,null);e&&(i=e)}let d=Pi(l.componentType??{}),f=tp(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,df(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(Gee(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 Rf(o,i,a,r),t.attachToViewContainerRef(),ua(wm(o),a,t),t}move(e,t){return this.insert(e,t)}indexOf(e){let t=Cm(this._lContainer);return t===null?-1:t.indexOf(e)}remove(e){let t=this._adjustIndex(e,-1),n=Bf(this._lContainer,t);n&&(da(wm(this._lContainer),t),pd(n[1],n))}detach(e){let t=this._adjustIndex(e,-1),n=Bf(this._lContainer,t);return n&&da(wm(this._lContainer),t)!=null?new Uf(n):null}_adjustIndex(e,t=0){return e??this.length+t}};function Cm(e){return e[8]}function wm(e){return e[8]||=[]}function Tm(e,t){let n,r=t[e.index];return no(r)?n=r:(n=If(r,t,null,e),t[e.index]=n,Fd(t,n)),Dm(n,t,e,r),new Sm(n,e,t)}function Em(e,t){let n=e[11],r=n.createComment(``),i=mo(t,e);return _u(n,n.parentNode(i),r,n.nextSibling(i),!1),r}var Dm=Am,Om=()=>!1;function km(e,t,n){return Om(e,t,n)}function Am(e,t,n,r){if(e[7])return;let i;i=n.type&8?fo(r):Em(t,n),e[7]=i}var jm=class e{queryList;matches=null;constructor(e){this.queryList=e}clone(){return new e(this.queryList)}setDirty(){this.queryList.setDirty()}},Mm=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 Km(e,t,n){e.queries===null&&(e.queries=new Pm),e.queries.track(new Fm(t,n))}function qm(e,t){return e.queries.getByIndex(t)}function Jm(e,t){let n=e[1],r=qm(n,t);return r.crossesNgTemplate?Vm(n,e,t,[]):Bm(n,e,r,t)}function Ym(e,t,n){let r,i=Cn(()=>{r._dirtyCounter();let n=$m(r,e);if(t&&n===void 0)throw new di(-951,!1);return n});return r=i[en],r._dirtyCounter=T(0),r._flatValue=void 0,i}function Xm(e){return Ym(!0,!1,e)}function Zm(e){return Ym(!0,!0,e)}function Qm(e,t){let n=e[en];n._lView=Lo(),n._queryIndex=t,n._queryList=Hm(n._lView,t),n._queryList.onDirty(()=>n._dirtyCounter.update(e=>e+1))}function $m(e,t){let n=e._lView,r=e._queryIndex;if(n===void 0||r===void 0||n[2]&4)return t?void 0:ya;let i=Hm(n,r),a=Jm(n,r);return i.reset(a,Al),t?i.first:i._changesDetected||e._flatValue===void 0?e._flatValue=i.toArray():e._flatValue}function eh(e){return!!e&&typeof e.then==`function`}function th(e){return!!e&&typeof e.subscribe==`function`}var nh=class{},rh=class extends nh{injector;instance=null;constructor(e){super();let t=new Va([...e.providers,{provide:nh,useValue:this}],e.parent||za(),e.debugName,new Set([`environment`]));this.injector=t,e.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(e){this.injector.onDestroy(e)}};function ih(e,t,n=null){return new rh({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}var ah=(()=>{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=Ta(!1,e.type),n=t.length>0?ih([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=yi({token:e,providedIn:`environment`,factory:()=>new e(ta(Ba))})}return e})();function O(e){return gc(()=>{let t=dh(e),n={...t,decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection!==Pl.Eager,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:t.standalone?e=>e.get(ah).getOrCreateStandaloneInjector(n):null,getExternalStyles:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||iu.Emulated,styles:e.styles||ya,_:null,schemas:e.schemas||null,tView:null,id:``};t.standalone&&Qu(`NgStandalone`),fh(n);let r=e.dependencies;return n.directiveDefs=ph(r,oh),n.pipeDefs=ph(r,Ii),n.id=mh(n),n})}function oh(e){return Pi(e)||Fi(e)}function sh(e,t){if(e==null)return va;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=Ld.None,c=null),n[a]=[r,s,c],t[a]=o}return n}function ch(e){if(e==null)return va;let t={};for(let n in e)Object.hasOwn(e,n)&&(t[e[n]]=n);return t}function lh(e){return gc(()=>{let t=dh(e);return fh(t),t})}function uh(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 dh(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||va,exportAs:e.exportAs||null,standalone:e.standalone??!0,signals:e.signals===!0,selectors:e.selectors||ya,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,controlDef:null,signalFormsInputPresence:null,inputs:sh(e.inputs,t),outputs:ch(e.outputs),debugInfo:null}}function fh(e){e.features?.forEach(t=>t(e))}function ph(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 mh(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 hh=new Ei(``),gh=(()=>{class e{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((e,t)=>{this.resolve=e,this.reject=t});appInits=x(hh,{optional:!0})??[];injector=x(_s);constructor(){}runInitializers(){if(this.initialized)return;let e=[];for(let t of this.appInits){let n=Qa(this.injector,t);if(eh(n))e.push(n);else if(th(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=El({token:e,factory:e.ɵfac})}return e})();function _h(e){return t=>{t.controlDef={create:(e,t)=>{e?.ɵngControlCreate(t)},update:(e,t)=>{e?.ɵngControlUpdate?.(t)},passThroughInput:e}}}function vh(e){return Object.getPrototypeOf(e.prototype).constructor}function yh(e){let t=vh(e.type),n=!0,r=[e];for(;t&&t!==Function.prototype&&t!==Object.prototype;){let i,a=Object.hasOwn(t,Oi)?t[Oi]:void 0,o=Object.hasOwn(t,ki)?t[ki]:void 0;if(oo(e))i=a??o;else{if(a)throw new di(903,!1);i=o}if(i){if(n){r.push(i);let t=e;t.inputs=Sh(e.inputs),t.declaredInputs=Sh(e.declaredInputs),t.outputs=Sh(e.outputs);let n=i.hostBindings;n&&Th(e,n);let a=i.viewQuery,o=i.contentQueries;if(a&&Ch(e,a),o&&wh(e,o),bh(e,i),Uee(e.outputs,i.outputs),oo(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=Kc(i.hostAttrs,n=Kc(n,i.hostAttrs))}}function Sh(e){return e===va?{}:e===ya?[]:e}function Ch(e,t){let n=e.viewQuery;e.viewQuery=n?(e,r)=>{t(e,r),n(e,r)}:t}function wh(e,t){let n=e.contentQueries;e.contentQueries=n?(e,r,i)=>{t(e,r,i),n(e,r,i)}:t}function Th(e,t){let n=e.hostBindings;e.hostBindings=n?(e,r)=>{t(e,r),n(e,r)}:t}function Eh(e,t,n,r,i,a,o,s){if(n.firstCreatePass){e.mergedAttrs=Kc(e.mergedAttrs,e.attrs);let t=e.tView=Od(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),Vo(e,!1);let c=Ah(n,t,e,r);ps()&&_d(n,t,c,e),Vl(c,t);let l=If(c,t,c,e);t[r+27]=l,Fd(t,l),km(l,e,t)}function Dh(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;return t.firstCreatePass?(f=qf(t,d,4,o||null,s||null),No()&&Vp(t,e,f,bo(t.consts,l),Xd),Mc(t,f)):f=t.data[d],Eh(f,e,t,n,r,i,a,c),ao(f)&&Bd(t,e,f),l!=null&&Vd(e,f,u),f}function Oh(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;if(t.firstCreatePass){if(f=qf(t,d,4,o||null,s||null),l!=null){let e=bo(t.consts,l);f.localNames=[];for(let t=0;t{throw new di(600,``)})}var Fh=10,Ih=(()=>{class e{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=x(Ws);afterRenderManager=x($u);zonelessEnabled=x(tc);rootEffectScheduler=x(rc);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new Hr;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=x(Cs);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(li(e=>!e))}constructor(){x(Xu,{optional:!0})}whenStable(){let e;return new Promise(t=>{e=this.isStable.subscribe({next:e=>{e&&t()}})}).finally(()=>{e.unsubscribe()})}_injector=x(Ba);_rendererFactory=null;get injector(){return this._injector}bootstrap(e,t){return this.bootstrapImpl(e,t)}bootstrapImpl(e,t,n=_s.NULL){return this._injector.get(js).run(()=>{if(Ac(_c.BootstrapComponentStart),!this._injector.get(gh).done)throw new di(405,``);let r=Pi(e),i=this._injector.get(nh),a=new pm(r,i);this.componentTypes.push(e);let{hostElement:o,directives:s,bindings:c}=Lh(t),l=o||a.selector,u=a.create(n,[],l,i.injector,s,c),d=u.location.nativeElement,f=u.injector.get(Mh,null);return f?.registerApplication(d),u.onDestroy(()=>{this.detachView(u.hostView),Rh(this.components,u),f?.unregisterApplication(d)}),this._loadComponent(u),Ac(_c.BootstrapComponentEnd,u),u})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){Ac(_c.ChangeDetectionStart),this.tracingSnapshot===null?this.tickImpl():this.tracingSnapshot.run(Yu.CHANGE_DETECTION,this.tickImpl)}tickImpl=()=>{if(this._runningTick)throw Ac(_c.ChangeDetectionEnd),new di(101,!1);let e=tn(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,tn(e),this.afterTick.next(),Ac(_c.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(ip,null,{optional:!0}));let e=0;for(;this.dirtyFlags!==0&&e++Co(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;Rh(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(Nh,[]).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),()=>Rh(this._destroyListeners,e)}destroy(){if(this._destroyed)throw new di(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=El({token:e,factory:e.ɵfac})}return e})();function Lh(e){return e===void 0||typeof e==`string`||e instanceof Element?{hostElement:e}:e}function Rh(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function k(e,t,n,r){let i=Lo();return pp(i,Yo(),t)&&(Ro(),Zd(cs(),i,e,t,n,r)),k}function zh(e){if(Qu(`NgAnimateEnter`),!zu)return zh;let t=Lo();if(Mte(t))return zh;let n=zo(),r=t[9].get(js);return Lte(Ku(t),n,()=>Bh(t,n,e,r)),Ute(t[9]),od(t[9],Ku(t)),zh}function Bh(e,t,n,r){let i=mo(t,e),a=e[11],o=Ite(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&&(Ju(e,i)&&(c=!0),Vh(e,i,a))};if(o&&o.length>0){r.runOutsideAngular(()=>{s.push(a.listen(i,`animationstart`,l)),s.push(a.listen(i,`transitionstart`,l))}),Nte(i,o,s);for(let e of o)a.addClass(i,e);r.runOutsideAngular(()=>{requestAnimationFrame(()=>{if(!c&&(Ote(i,Hu,zu),!Hu.has(i))){for(let e of o)a.removeClass(i,e);Bu(i)}})})}}function Vh(e,t,n){let r=Vu.get(t);if(qu(e)===t&&r&&Ju(e,t)){e.stopPropagation();for(let e of r.classList)n.removeClass(t,e);Bu(t)}}var Hh=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 Uh(e,t,n,r,i){return e===n&&Object.is(t,r)?1:Object.is(i(e,t),i(n,r))?-1:0}function Wh(e,t,n,r){let i,a,o=0,s=e.length-1;if(Array.isArray(t)){tn(r);let c=t.length-1;for(tn(null);o<=s&&o<=c;){let r=e.at(o),l=t[o],u=Uh(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=Uh(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 Jh,a??=qh(e,o,s,n),Gh(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;)Kh(e,i,n,o,t[o]),o++}else if(t!=null){tn(r);let c=t[Symbol.iterator]();tn(null);let l=c.next();for(;!l.done&&o<=s;){let t=e.at(o),r=l.value,u=Uh(o,t,o,r,n);if(u!==0)u<0&&e.updateValue(o,r),o++,l=c.next();else{i??=new Jh,a??=qh(e,o,s,n);let u=n(o,r);if(Gh(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;)Kh(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 Gh(e,t,n,r){return t!==void 0&&t.has(r)?(e.attach(n,t.get(r)),t.delete(r),!0):!1}function Kh(e,t,n,r,i){if(Gh(e,t,r,n(r,i)))e.updateValue(r,i);else{let t=e.create(r,i);e.attach(r,t)}}function qh(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 Jh=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){Qu(`NgControlFlow`);let c=Lo(),l=Ro();return Oh(c,l,e,t,n,r,i,bo(l.consts,a),256,o,s),Yh}function Yh(e,t,n,r,i,a,o,s){Qu(`NgControlFlow`);let c=Lo(),l=Ro();return Oh(c,l,e,t,n,r,i,bo(l.consts,a),512,o,s),Yh}function j(e,t){Qu(`NgControlFlow`);let n=Lo(),r=Yo(),i=n[r]===Au?-1:n[r],a=i===-1?void 0:tg(n,27+i);if(pp(n,r,e)){let r=tn(null);try{if(a!==void 0&&zf(a,0),e!==-1){let r=27+e,i=tg(n,r),a=og(n[1],r),o=np(i,a,n);Rf(i,uf(n,a,t,{dehydratedView:o}),0,df(a,o))}}finally{tn(r)}}else if(a!==void 0){let e=Lf(a,0);e!==void 0&&(e[8]=t)}}var Xh=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 Zh(e){return e}function Qh(e,t){return t}var $h=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){Qu(`NgControlFlow`);let p=Lo(),m=Ro(),ee=c!==void 0,h=Lo(),g=new $h(ee,s?o.bind(h[15][8]):o);h[27+e]=g,Oh(p,m,e+1,t,n,r,i,bo(m.consts,a),256),ee&&Oh(p,m,e+2,c,l,u,d,bo(m.consts,f),512)}var eg=class extends Hh{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,Rf(this.lContainer,t,e,df(this.templateTNode,n)),ng(this.lContainer,e)}detach(e){return this.needsIndexUpdate||=e!==this.length-1,rg(this.lContainer,e),ig(this.lContainer,e)}create(e,t){let n=tp(this.lContainer,this.templateTNode.tView.ssrId);return uf(this.hostLView,this.templateTNode,new Xh(this.lContainer,t,e),{dehydratedView:n})}destroy(e){pd(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];Vte(e,r),Ru.delete(n[19]),r.detachedLeaveAnimationFns=void 0}}function rg(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 ig(e,t){return Bf(e,t)}function ag(e,t){return Lf(e,t)}function og(e,t){return ho(e,t)}function P(e,t,n){let r=Lo();return pp(r,Yo(),t)&&(Ro(),Wd(cs(),r,e,t,r[11],n)),P}function sg(e,t,n,r,i){rf(t,e,n,i?`class`:`style`,r)}function F(e,t,n,r){let i=Lo(),a=i[1],o=e+27,s=a.firstCreatePass?tm(o,i,2,t,Xd,No(),n,r):a.data[o];if(io(s)){let n=i[10].tracingService;if(n&&n.componentCreate){let o=a.data[s.directiveStart+s.componentOffset];return n.componentCreate(cp(o),()=>(cg(e,t,i,s,r),F))}}return cg(e,t,i,s,r),F}function cg(e,t,n,r,i){if(ef(r,n,e,t,ug),ao(r)){let e=n[1];Bd(e,n,r),ru(e,r,n)}i!=null&&Vd(n,r)}function I(){let e=Ro(),t=tf(zo());return e.firstCreatePass&&nm(e,t),Fo(t)&&Io(),Mo(),t.classesWithoutHost!=null&&Vc(t)&&sg(e,t,Lo(),t.classesWithoutHost,!0),t.stylesWithoutHost!=null&&Hc(t)&&sg(e,t,Lo(),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=Lo(),a=i[1],o=e+27,s=a.firstCreatePass?rm(o,a,2,t,n,r):a.data[o];return ef(s,i,e,t,ug),r!=null&&Vd(i,s),R}function z(){return Fo(tf(zo()))&&Io(),Mo(),z}function lg(e,t,n,r){return R(e,t,n,r),z(),lg}var ug=(e,t,n,r,i)=>(ms(!0),gu(t[11],r,ds()));function dg(e,t,n){let r=Lo(),i=r[1],a=e+27,o=i.firstCreatePass?tm(a,r,8,`ng-container`,Xd,No(),t,n):i.data[a];if(ef(o,r,e,`ng-container`,mg),ao(o)){let e=r[1];Bd(e,r,o),ru(e,o,r)}return n!=null&&Vd(r,o),dg}function fg(){let e=Ro(),t=tf(zo());return e.firstCreatePass&&nm(e,t),fg}function pg(e,t,n){return dg(e,t,n),fg(),pg}var mg=(e,t,n,r,i)=>(ms(!0),ste(t[11],``));function B(){return Lo()}function V(e,t,n){let r=Lo();return pp(r,Yo(),t)&&(Ro(),Gd(cs(),r,e,t,r[11],n)),V}var hg=void 0;function gg(e){let t=Math.floor(Math.abs(e)),n=e.toString().replace(/^[^.]*\.?/,``).length;return t===1&&n===0?1:5}var _g=[`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`]],hg,[[`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`]],hg,[[`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}`,hg,hg,hg],[`.`,`,`,`;`,`%`,`+`,`-`,`E`,`×`,`‰`,`∞`,`NaN`,`:`],[`#,##0.###`,`#,##0%`,`¤#,##0.00`,`#E0`],`USD`,`$`,`US Dollar`,{},`ltr`,gg],vg=Object.create(null);function yg(e){let t=Sg(e),n=bg(t);if(n)return n;let r=t.split(`-`)[0];if(n=bg(r),n)return n;if(r===`en`)return _g;throw new di(701,!1)}function bg(e){if(!(e in vg)){let t=Xi.ng&&Xi.ng.common&&Xi.ng.common.locales&&Xi.ng.common.locales[e];return t!==void 0&&(vg[e]=t),t}return vg[e]}var xg={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 Sg(e){return e.toLowerCase().replace(/_/g,`-`)}var Cg=`en-US`;function wg(e){typeof e==`string`&&e.toLowerCase().replace(/_/g,`-`)}function H(e,t,n){let r=Lo(),i=Ro(),a=zo();return Tg(i,r,r[11],a,e,t,n),H}function U(e,t,n){let r=Lo(),i=Ro(),a=zo();return(a.type&3||n)&&yp(a,i,r,n,r[11],e,t,_p(a,r,t)),U}function Tg(e,t,n,r,i,a,o){let s=!0,c=null;if((r.type&3||o)&&(c??=_p(r,t,a),yp(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 Fg(e){return(e&2)==2}function Ig(e,t){return e&131071|t<<17}function Lg(e){return e|2}function Rg(e){return(e&131068)>>2}function zg(e,t){return e&-131069|t<<2}function Bg(e){return(e&1)==1}function Vg(e){return e|1}function Hg(e,t,n,r,i,a){let o=a?t.classBindings:t.styleBindings,s=Pg(o),c=Rg(o);e[r]=n;let l=!1,u;if(Array.isArray(n)){let e=n;u=e[1],(u===null||ga(e,u)>0)&&(l=!0)}else u=n;if(i){if(c!==0){let t=Pg(e[s+1]);e[r+1]=Ng(t,s),t!==0&&(e[t+1]=zg(e[t+1],r)),e[s+1]=Ig(e[s+1],r)}else e[r+1]=Ng(s,0),s!==0&&(e[s+1]=zg(e[s+1],r)),s=r}else e[r+1]=Ng(c,0),s===0?s=r:e[c+1]=zg(e[c+1],r),c=r;l&&(e[r+1]=Lg(e[r+1])),Wg(e,u,r,!0),Wg(e,u,r,!1),Ug(t,u,e,r,a),o=Ng(s,c),a?t.classBindings=o:t.styleBindings=o}function Ug(e,t,n,r,i){let a=i?e.residualClasses:e.residualStyles;a!=null&&typeof t==`string`&&ga(a,t)>=0&&(n[r+1]=Vg(n[r+1]))}function Wg(e,t,n,r){let i=e[n+1],a=t===null,o=r?Pg(i):Rg(i),s=!1;for(;o!==0&&(s===!1||a);){let n=e[o],i=e[o+1];Gg(n,t)&&(s=!0,e[o+1]=r?Vg(i):Lg(i)),o=r?Pg(i):Rg(i)}s&&(e[n+1]=r?Lg(i):Vg(i))}function Gg(e,t){return e===null||t==null||(Array.isArray(e)?e[1]:e)===t?!0:Array.isArray(e)&&typeof t==`string`?ga(e,t)>=0:!1}var Kg={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function qg(e){return e.substring(Kg.key,Kg.keyEnd)}function Jg(e){return Xg(e),Yg(e,Zg(e,0,Kg.textEnd))}function Yg(e,t){let n=Kg.textEnd;return n===t?-1:(t=Kg.keyEnd=Qg(e,Kg.key=t,n),Zg(e,t,n))}function Xg(e){Kg.key=0,Kg.keyEnd=0,Kg.value=0,Kg.valueEnd=0,Kg.textEnd=e.length}function Zg(e,t,n){for(;t32;)t++;return t}function $g(e,t,n){return n_(e,t,n,!1),$g}function G(e,t){return n_(e,t,null,!0),G}function e_(e){r_(p_,t_,e,!0)}function t_(e,t){for(let n=Jg(t);n>=0;n=Yg(t,n))ma(e,qg(t),!0)}function n_(e,t,n,r){let i=Lo(),a=Ro(),o=Xo(2);if(a.firstUpdatePass&&a_(a,e,o,r),t!==Au&&pp(i,o,t)){let s=a.data[os()];h_(a,s,i,i[11],e,i[o+1]=v_(t,n),r,o)}}function r_(e,t,n,r){let i=Ro(),a=Xo(2);i.firstUpdatePass&&a_(i,null,a,r);let o=Lo();if(n!==Au&&pp(o,a,n)){let s=i.data[os()];if(y_(s,r)&&!i_(i,a)){let e=r?s.classesWithoutHost:s.stylesWithoutHost;e!==null&&(n=hi(e,n||``)),sg(i,s,o,n,r)}else m_(i,s,o,o[11],o[a+1],o[a+1]=f_(e,t,n),r,a)}}function i_(e,t){return t>=e.expandoStartIndex}function a_(e,t,n,r){let i=e.data;if(i[n+1]===null){let a=i[os()],o=i_(e,n);y_(a,r)&&t===null&&!o&&(t=!1),t=o_(i,a,t,r),Hg(i,a,t,n,o,r)}}function o_(e,t,n,r){let i=nte(e),a=r?t.residualClasses:t.residualStyles;if(i===null)(r?t.classBindings:t.styleBindings)===0&&(n=u_(null,e,t,n,r),n=d_(n,t.attrs,r),a=null);else{let o=t.directiveStylingLast;if(o===-1||e[o]!==i){if(n=u_(i,e,t,n,r),a===null){let n=s_(e,t,r);n!==void 0&&Array.isArray(n)&&(n=u_(null,e,t,n[1],r),n=d_(n,t.attrs,r),c_(e,t,r,n))}else a=l_(e,t,r)}}return a!==void 0&&(r?t.residualClasses=a:t.residualStyles=a),n}function s_(e,t,n){let r=n?t.classBindings:t.styleBindings;if(Rg(r)!==0)return e[Pg(r)]}function c_(e,t,n,r){let i=n?t.classBindings:t.styleBindings;e[Pg(i)]=r}function l_(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===Au&&(u=l?ya:void 0);let d=l?ha(u,r):c===r?u:void 0;if(a&&!__(d)&&(d=ha(t,r)),__(d)&&(s=d,o))return s;let f=e[i+1];i=o?Pg(f):Rg(f)}if(t!==null){let e=a?t.residualClasses:t.residualStyles;e!=null&&(s=ha(e,r))}return s}function __(e){return e!==void 0}function v_(e,t){return e==null||e===``||(typeof t==`string`?e=ou(e)+t:typeof e==`object`&&(e=mi(ou(e)))),e}function y_(e,t){return!!(e.flags&(t?8:16))}function K(e,t=``){let n=Lo(),r=Ro(),i=e+27,a=r.firstCreatePass?qf(r,i,1,t,null):r.data[i],o=nne(r,n,a,t);n[i]=o,ps()&&_d(r,n,o,a),Vo(a,!1)}var nne=(e,t,n,r)=>(ms(!0),hu(t[11],r));function b_(e,t,n,r=``){return pp(e,Yo(),n)?t+Ri(n)+r:Au}function rne(e,t,n,r,i,a=``){let o=mp(e,Jo(),n,i);return Xo(2),o?t+Ri(n)+r+Ri(i)+a:Au}function ine(e,t,n,r,i,a,o,s=``){let c=hp(e,Jo(),n,i,o);return Xo(3),c?t+Ri(n)+r+Ri(i)+a+Ri(o)+s:Au}function ane(e,t,n,r,i,a,o,s,c,l=``){let u=gp(e,Jo(),n,i,o,c);return Xo(4),u?t+Ri(n)+r+Ri(i)+a+Ri(o)+s+Ri(c)+l:Au}function q(e){return J(``,e),q}function J(e,t,n){let r=Lo(),i=b_(r,e,t,n);return i!==Au&&C_(r,os(),i),J}function Y(e,t,n,r,i){let a=Lo(),o=rne(a,e,t,n,r,i);return o!==Au&&C_(a,os(),o),Y}function x_(e,t,n,r,i,a,o){let s=Lo(),c=ine(s,e,t,n,r,i,a,o);return c!==Au&&C_(s,os(),c),x_}function S_(e,t,n,r,i,a,o,s,c){let l=Lo(),u=ane(l,e,t,n,r,i,a,o,s,c);return u!==Au&&C_(l,os(),u),S_}function C_(e,t,n){let r=po(t,e);ote(e[11],r,n)}function w_(e,t,n){pc(t)&&(t=t());let r=Lo();return pp(r,Yo(),t)&&(Ro(),Wd(cs(),r,e,t,r[11],n)),w_}function T_(e,t){let n=pc(e);return n&&e.set(t),n}function E_(e,t){let n=Lo(),r=Ro(),i=zo();return Tg(r,n,n[11],i,e,t),E_}var D_={};function O_(e){Qu(`NgLet`);let t=Ro(),n=Lo(),r=e+27;return Vo(qf(t,r,128,null,null),!1),_o(t,n,r,D_),O_}function k_(e){return _o(Ro(),Lo(),os(),e),e}function A_(e){let t=go(Wo(),27+e);if(t===D_)throw new di(314,!1);return t}function j_(e,t,n=``){return b_(Lo(),e,t,n)}function M_(e,t,n){let r=Ro();r.firstCreatePass&&N_(t,r.data,r.blueprint,oo(e),n)}function N_(e,t,n,r,i){if(e=_i(e),Array.isArray(e))for(let a=0;a>20;if(Na(e)||!e.multi){let r=new Bc(l,i,Bp,null),p=I_(c,t,i?u:u+f,d);p===-1?(ll(al(s,o),a,c),P_(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=I_(c,t,u+f,d),m=I_(c,t,u,u+f),ee=p>=0&&n[p],h=m>=0&&n[m];if(i&&!h||!i&&!ee){ll(al(s,o),a,c);let u=cne(i?sne:one,n.length,i,r,l,e);!i&&h&&(n[m].providerFactory=u),P_(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=F_(n[i?m:p],l,!i&&r);P_(a,e,p>-1?p:m,t)}!i&&r&&h&&n[m].componentProviders++}}}function P_(e,t,n,r){let i=Na(t),a=Pa(t);if(i||a){let o=(a?_i(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 F_(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function I_(e,t,n,r){for(let i=n;i{n.providersResolver=(t,n)=>M_(t,n?n(e):e,!1),t&&(n.viewProvidersResolver=(e,n)=>M_(e,n?n(t):t,!0))}}function z_(e,t){let n=qo()+e,r=Lo();return r[n]===Au?dp(r,n,t()):fp(r,n)}function B_(e,t,n){return U_(Lo(),qo(),e,t,n)}function V_(e,t,n,r){return W_(Lo(),qo(),e,t,n,r)}function lne(e,t,n,r,i,a,o){return une(Lo(),qo(),e,t,n,r,i,a)}function H_(e,t){let n=e[t];return n===Au?void 0:n}function U_(e,t,n,r,i,a){let o=t+n;return pp(e,o,i)?dp(e,o+1,a?r.call(a,i):r(i)):H_(e,o+1)}function W_(e,t,n,r,i,a,o){let s=t+n;return mp(e,s,i,a)?dp(e,s+2,o?r.call(o,i,a):r(i,a)):H_(e,s+2)}function une(e,t,n,r,i,a,o,s,c){let l=t+n;return gp(e,l,i,a,o,s)?dp(e,l+4,c?r.call(c,i,a,o,s):r(i,a,o,s)):H_(e,l+4)}function G_(e,t){let n=Ro(),r,i=e+27;n.firstCreatePass?(r=dne(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=oa(r.type,!0)),o=Ji(Bp);try{let e=$c(!1),t=a();return $c(e),_o(n,Lo(),i,t),t}finally{Ji(o)}}function dne(e,t){if(t)for(let n=t.length-1;n>=0;n--){let r=t[n];if(e===r.name)return r}}function K_(e,t,n){let r=e+27,i=Lo(),a=go(i,r);return J_(i,r)?U_(i,qo(),t,a.transform,n,a):a.transform(n)}function q_(e,t,n,r){let i=e+27,a=Lo(),o=go(a,i);return J_(a,i)?W_(a,qo(),t,o.transform,n,r,o):o.transform(n,r)}function J_(e,t){return e[1].data[t].pure}function Y_(e,t){return Kf(e,t)}var fne=(()=>{class e{applicationErrorHandler=x(Ws);appRef=x(Ih);taskService=x(Cs);ngZone=x(js);zonelessEnabled=x(tc);tracing=x(Xu,{optional:!0});zoneIsDefined=typeof Zone<`u`&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new or;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(ks):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(x(nc,{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?Ds:Es;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=El({token:e,factory:e.ɵfac})}return e})();function pne(){return[{provide:ec,useExisting:fne},{provide:js,useClass:zs},{provide:tc,useValue:!0}]}function mne(){return typeof $localize<`u`&&$localize.locale||`en-US`}var X_=new Ei(``,{factory:()=>x(X_,{optional:!0,skipSelf:!0})||mne()}),Z_=class{destroyed=!1;listeners=null;errorHandler=x(Us,{optional:!0});isEmitting=!1;hasNullListeners=!1;destroyRef=x(ys);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(e){if(this.destroyed)throw new di(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(fi(953,!1));return}if(this.listeners===null)return;this.isEmitting=!0;let t=tn(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&&hne(this.listeners)),tn(t),this.isEmitting=!1}}};function hne(e){let t=e.length-1;for(;t>-1;)e[t]===null&&e.splice(t,1),t--}function X(e,t){return Cn(e,t?.equal)}function Z(e){return Gn(e)}(class e extends Error{_brand;constructor(e){super(e)}static IDLE=new e(`IDLE`);static LOADING=new e(`LOADING`)});var gne=e=>e;function Q(e,t){return typeof e==`function`?Q_(Vn(e,gne,t?.equal),t?.debugName,t?.set):Q_(Vn(e.source,e.computation,e.equal),e.debugName,e.set)}function Q_(e,t,n){let r=e[en],i=e;if(n!==void 0){let t=e=>Hn(r,e);i.set=e=>n(e,t),i.update=r=>n(r(Z(e)),t)}else i.set=e=>Hn(r,e),i.update=e=>Un(r,e);return i.asReadonly=Ks.bind(e),i}var $_=!1;function _ne(){return $_}function ev(e){$_=e}function tv(e,t){let n=Object.create(hc);n.value=e,n.transformFn=t?.transform;function r(){if(an(n),n.value===mc)throw new di(-950,null);return n.value}return r[en]=n,r}function nv(e){return new Z_}function rv(e,t){return tv(e,t)}function vne(e){return tv(mc,e)}var $=(rv.required=vne,rv);function iv(e,t){let n=Object.create(hc),r=new Z_;n.value=e;function i(){return an(n),av(n.value),n.value}return i[en]=n,i.asReadonly=Ks.bind(i),i.set=e=>{n.equal(n.value,e)||(An(n,e),r.emit(e))},i.update=e=>{av(n.value),i.set(e(n.value))},i.subscribe=r.subscribe.bind(r),i.destroyRef=r.destroyRef,i}function av(e){if(e===mc)throw new di(952,!1)}function ov(e,t){return iv(e,t)}function yne(e){return iv(mc,e)}var sv=(ov.required=yne,ov);function cv(e,t){return Xm(t)}function bne(e,t){return Zm(t)}var lv=(cv.required=bne,cv),xne=(()=>{class e{static __NG_ELEMENT_ID__=Sne}return e})();function Sne(e){return Cne(zo(),Lo(),(e&16)==16)}function Cne(e,t,n){if(io(e)&&!n){let n=vo(e.index,t);return new Uf(n,n)}if(e.type&175){let e=t[15];return new Uf(e,t)}return null}var uv=new Ei(``),wne=new Ei(``);function dv(e){return!e.moduleRef}function Tne(e){let t=dv(e)?e.r3Injector:e.moduleRef.injector,n=t.get(js);return n.run(()=>{dv(e)?e.r3Injector.resolveInjectorInitializers():e.moduleRef.resolveInjectorInitializers();let r=t.get(Ws),i;if(n.runOutsideAngular(()=>{i=n.onError.subscribe({next:r})}),dv(e)){let n=()=>t.destroy(),r=e.platformInjector.get(uv);r.add(n),t.onDestroy(()=>{i.unsubscribe(),r.delete(n)})}else{let t=()=>e.moduleRef.destroy(),n=e.platformInjector.get(uv);n.add(t),e.moduleRef.onDestroy(()=>{Rh(e.allPlatformModules,e.moduleRef),i.unsubscribe(),n.delete(t)})}return Dne(r,n,()=>{let n=t.get(Cs),r=n.add(),i=t.get(gh);return i.runInitializers(),i.donePromise.then(()=>{if(wg(t.get(X_,Cg)||`en-US`),!t.get(wne,!0))return dv(e)?t.get(Ih):(e.allPlatformModules.push(e.moduleRef),e.moduleRef);if(dv(e)){let n=t.get(Ih);return e.rootComponent!==void 0&&n.bootstrap(e.rootComponent),n}return Ene?.(e.moduleRef,e.allPlatformModules),e.moduleRef}).finally(()=>void n.remove(r))})})}var Ene;function Dne(e,t,n){try{let r=n();return eh(r)?r.catch(n=>{throw t.runOutsideAngular(()=>e(n)),n}):r}catch(n){throw t.runOutsideAngular(()=>e(n)),n}}var fv=null;function One(e=[],t){return _s.create({name:t,providers:[{provide:Fa,useValue:`platform`},{provide:uv,useValue:new Set([()=>fv=null])},...e]})}function kne(e=[]){if(fv)return fv;let t=One(e);return fv=t,Ph(),Ane(t),t}function Ane(e){let t=e.get(Ys,null);Qa(e,()=>{t?.forEach(e=>e())})}function jne(e){let{rootComponent:t,appProviders:n,platformProviders:r,platformRef:i}=e;Ac(_c.BootstrapApplicationStart);try{let e=i?.injector??kne(r);return Tne({r3Injector:new rh({providers:[pne(),Gs,...n||[]],parent:e,debugName:``,runEnvironmentInitializers:!1}).injector,platformInjector:e,rootComponent:t})}catch(e){return Promise.reject(e)}finally{Ac(_c.BootstrapApplicationEnd)}}function pv(e){return typeof e==`boolean`?e:e!=null&&e!==`false`}var mv=Symbol(`NOT_SET`),hv=new Set,Mne={...Mn,kind:`afterRenderEffectPhase`,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,value:mv,cleanup:null,consumerMarkedDirty(){if(this.sequence.impl.executing){if(this.sequence.lastPhase===null||this.sequence.lastPhase(an(r),r.value),r.signal[en]=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??hv)t()}finally{_n(e)}}};function gv(e,t){let n=t?.injector??x(_s),r=n.get(ec),i=n.get($u),a=n.get(Xu,null,{optional:!0});i.impl??=n.get(td);let o=e;typeof o==`function`&&(o={mixedReadWrite:e});let s=n.get(Qs,null,{optional:!0}),c=new Nne(i.impl,[o.earlyRead,o.write,o.mixedReadWrite,o.read],s?.view,r,n,a?.snapshot(null));return i.impl.register(c),c}var _v=null;function vv(){return _v}function Pne(e){_v??=e}var Fne=class{},yv=(function(e){return e[e.Format=0]=`Format`,e[e.Standalone=1]=`Standalone`,e})(yv||{}),bv=(function(e){return e[e.Narrow=0]=`Narrow`,e[e.Abbreviated=1]=`Abbreviated`,e[e.Wide=2]=`Wide`,e[e.Short=3]=`Short`,e})(bv||{}),xv=(function(e){return e[e.Short=0]=`Short`,e[e.Medium=1]=`Medium`,e[e.Long=2]=`Long`,e[e.Full=3]=`Full`,e})(xv||{}),Sv={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 Ine(e){return yg(e)[xg.LocaleId]}function Lne(e,t,n){let r=yg(e);return Ov(Ov([r[xg.DayPeriodsFormat],r[xg.DayPeriodsStandalone]],t),n)}function Rne(e,t,n){let r=yg(e);return Ov(Ov([r[xg.DaysFormat],r[xg.DaysStandalone]],t),n)}function zne(e,t,n){let r=yg(e);return Ov(Ov([r[xg.MonthsFormat],r[xg.MonthsStandalone]],t),n)}function Bne(e,t){let n=yg(e)[xg.Eras];return Ov(n,t)}function Cv(e,t){return Ov(yg(e)[xg.DateFormat],t)}function wv(e,t){return Ov(yg(e)[xg.TimeFormat],t)}function Tv(e,t){let n=yg(e)[xg.DateTimeFormat];return Ov(n,t)}function Ev(e,t){let n=yg(e),r=n[xg.NumberSymbols][t];if(r===void 0){if(t===Sv.CurrencyDecimal)return n[xg.NumberSymbols][Sv.Decimal];if(t===Sv.CurrencyGroup)return n[xg.NumberSymbols][Sv.Group]}return r}function Dv(e){if(!e[xg.ExtraData])throw new di(2303,!1)}function Vne(e){let t=yg(e);return Dv(t),(t[xg.ExtraData][2]||[]).map(e=>typeof e==`string`?kv(e):[kv(e[0]),kv(e[1])])}function Hne(e,t,n){let r=yg(e);return Dv(r),Ov(Ov([r[xg.ExtraData][0],r[xg.ExtraData][1]],t)||[],n)||[]}function Ov(e,t){for(let n=t;n>-1;n--)if(e[n]!==void 0)return e[n];throw new di(2304,!1)}function kv(e){let[t,n]=e.split(`:`);return{hours:+t,minutes:+n}}var Une=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,Av=Object.create(null),Wne=/((?:[^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]*)/,Gne=256;function Kne(e,t,n,r){let i=nre(e);qne(t),t=Mv(n,t)||t;let a=[],o;for(;t;)if(o=Wne.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=Uv(r,s),i=tre(i,r));let c=``;return a.forEach(e=>{let t=$ne(e);c+=t?t(i,n,s):e===`''`?`'`:e.replace(/(^'|'$)/g,``).replace(/''/g,`'`)}),c}function qne(e){if(e.length>Gne)throw new di(2300,!1)}function jv(e,t,n){let r=new Date(0);return r.setFullYear(e,t,n),r.setHours(0,0,0),r}function Mv(e,t){let n=Ine(e);if(Av[n]??=Object.create(null),Av[n][t])return Av[n][t];let r=``;switch(t){case`shortDate`:r=Cv(e,xv.Short);break;case`mediumDate`:r=Cv(e,xv.Medium);break;case`longDate`:r=Cv(e,xv.Long);break;case`fullDate`:r=Cv(e,xv.Full);break;case`shortTime`:r=wv(e,xv.Short);break;case`mediumTime`:r=wv(e,xv.Medium);break;case`longTime`:r=wv(e,xv.Long);break;case`fullTime`:r=wv(e,xv.Full);break;case`short`:let t=Mv(e,`shortTime`),n=Mv(e,`shortDate`);r=Nv(Tv(e,xv.Short),[t,n]);break;case`medium`:let i=Mv(e,`mediumTime`),a=Mv(e,`mediumDate`);r=Nv(Tv(e,xv.Medium),[i,a]);break;case`long`:let o=Mv(e,`longTime`),s=Mv(e,`longDate`);r=Nv(Tv(e,xv.Long),[o,s]);break;case`full`:let c=Mv(e,`fullTime`),l=Mv(e,`fullDate`);r=Nv(Tv(e,xv.Full),[c,l])}return r&&(Av[n][t]=r),r}function Nv(e,t){return t&&(e=e.replace(/\{([^}]+)}/g,function(e,n){return Object.hasOwn(t,n)?t[n]:e})),e}function Pv(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 Jne(s,t);let c=Ev(o,Sv.MinusSign);return Pv(s,t,c,r,i)}}function Yne(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 di(2301,!1)}}function Iv(e,t,n=yv.Format,r=!1){return function(i,a){return Xne(i,a,e,t,n,r)}}function Xne(e,t,n,r,i,a){switch(n){case 2:return zne(t,i,r)[e.getMonth()];case 1:return Rne(t,i,r)[e.getDay()];case 0:let n=e.getHours(),o=e.getMinutes();if(a){let e=Vne(t),a=Hne(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?`+`:``)+Pv(o,2,a)+Pv(Math.abs(i%60),2,a);case 1:return`GMT`+(i>=0?`+`:``)+Pv(o,1,a);case 2:return`GMT`+(i>=0?`+`:``)+Pv(o,2,a)+`:`+Pv(Math.abs(i%60),2,a);case 3:return r===0?`Z`:(i>=0?`+`:``)+Pv(o,2,a)+`:`+Pv(Math.abs(i%60),2,a);default:throw new di(2310,!1)}}}var Zne=0,Rv=4;function Qne(e){let t=jv(e,Zne,1).getDay();return jv(e,0,1+(t<=Rv?Rv:11)-t)}function zv(e){let t=e.getDay(),n=t===0?-3:Rv-t;return jv(e.getFullYear(),e.getMonth(),e.getDate()+n)}function Bv(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=zv(n),t=Qne(e.getFullYear()),r=e.getTime()-t.getTime();i=1+Math.round(r/6048e5)}return Pv(i,e,Ev(r,Sv.MinusSign))}}function Vv(e,t=!1){return function(n,r){return Pv(zv(n).getFullYear(),e,Ev(r,Sv.MinusSign),t)}}var Hv=Object.create(null);function $ne(e){if(Hv[e])return Hv[e];let t;switch(e){case`G`:case`GG`:case`GGG`:t=Iv(3,bv.Abbreviated);break;case`GGGG`:t=Iv(3,bv.Wide);break;case`GGGGG`:t=Iv(3,bv.Narrow);break;case`y`:t=Fv(0,1,0,!1,!0);break;case`yy`:t=Fv(0,2,0,!0,!0);break;case`yyy`:t=Fv(0,3,0,!1,!0);break;case`yyyy`:t=Fv(0,4,0,!1,!0);break;case`Y`:t=Vv(1);break;case`YY`:t=Vv(2,!0);break;case`YYY`:t=Vv(3);break;case`YYYY`:t=Vv(4);break;case`M`:case`L`:t=Fv(1,1,1);break;case`MM`:case`LL`:t=Fv(1,2,1);break;case`MMM`:t=Iv(2,bv.Abbreviated);break;case`MMMM`:t=Iv(2,bv.Wide);break;case`MMMMM`:t=Iv(2,bv.Narrow);break;case`LLL`:t=Iv(2,bv.Abbreviated,yv.Standalone);break;case`LLLL`:t=Iv(2,bv.Wide,yv.Standalone);break;case`LLLLL`:t=Iv(2,bv.Narrow,yv.Standalone);break;case`w`:t=Bv(1);break;case`ww`:t=Bv(2);break;case`W`:t=Bv(1,!0);break;case`d`:t=Fv(2,1);break;case`dd`:t=Fv(2,2);break;case`c`:case`cc`:t=Fv(7,1);break;case`ccc`:t=Iv(1,bv.Abbreviated,yv.Standalone);break;case`cccc`:t=Iv(1,bv.Wide,yv.Standalone);break;case`ccccc`:t=Iv(1,bv.Narrow,yv.Standalone);break;case`cccccc`:t=Iv(1,bv.Short,yv.Standalone);break;case`E`:case`EE`:case`EEE`:t=Iv(1,bv.Abbreviated);break;case`EEEE`:t=Iv(1,bv.Wide);break;case`EEEEE`:t=Iv(1,bv.Narrow);break;case`EEEEEE`:t=Iv(1,bv.Short);break;case`a`:case`aa`:case`aaa`:t=Iv(0,bv.Abbreviated);break;case`aaaa`:t=Iv(0,bv.Wide);break;case`aaaaa`:t=Iv(0,bv.Narrow);break;case`b`:case`bb`:case`bbb`:t=Iv(0,bv.Abbreviated,yv.Standalone,!0);break;case`bbbb`:t=Iv(0,bv.Wide,yv.Standalone,!0);break;case`bbbbb`:t=Iv(0,bv.Narrow,yv.Standalone,!0);break;case`B`:case`BB`:case`BBB`:t=Iv(0,bv.Abbreviated,yv.Format,!0);break;case`BBBB`:t=Iv(0,bv.Wide,yv.Format,!0);break;case`BBBBB`:t=Iv(0,bv.Narrow,yv.Format,!0);break;case`h`:t=Fv(3,1,-12);break;case`hh`:t=Fv(3,2,-12);break;case`H`:t=Fv(3,1);break;case`HH`:t=Fv(3,2);break;case`m`:t=Fv(4,1);break;case`mm`:t=Fv(4,2);break;case`s`:t=Fv(5,1);break;case`ss`:t=Fv(5,2);break;case`S`:t=Fv(6,1);break;case`SS`:t=Fv(6,2);break;case`SSS`:t=Fv(6,3);break;case`Z`:case`ZZ`:case`ZZZ`:t=Lv(0);break;case`ZZZZZ`:t=Lv(3);break;case`O`:case`OO`:case`OOO`:case`z`:case`zz`:case`zzz`:t=Lv(1);break;case`OOOO`:case`ZZZZ`:case`zzzz`:t=Lv(2);break;default:return null}return Hv[e]=t,t}function Uv(e,t){e=e.replace(/:/g,``);let n=Date.parse(`Jan 01, 1970 00:00:00 `+e)/6e4;return isNaN(n)?t:n}function ere(e,t){return e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+t),e}function tre(e,t,n){let r=e.getTimezoneOffset();return ere(e,-1*(Uv(t,r)-r))}function nre(e){if(Wv(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 jv(t,n-1,r)}let t=parseFloat(e);if(!isNaN(e-t))return new Date(t);let n;if(n=e.match(Une))return rre(n)}let t=new Date(e);if(!Wv(t))throw new di(2311,!1);return t}function rre(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 Wv(e){return e instanceof Date&&!isNaN(e.valueOf())}var Gv=(()=>{class e{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;injector=x(_s);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)(Bp(bm))};static ɵdir=lh({type:e,selectors:[[``,`ngTemplateOutlet`,``]],inputs:{ngTemplateOutletContext:`ngTemplateOutletContext`,ngTemplateOutlet:`ngTemplateOutlet`,ngTemplateOutletInjector:`ngTemplateOutletInjector`},features:[xc]})}return e})();function ire(e,t){return new di(2100,!1)}var are=`mediumDate`,ore=new Ei(``),sre=new Ei(``),Kv=(()=>{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??are,a=r??this.defaultOptions?.timezone??this.defaultTimezone??void 0;return Kne(t,e,i||this.locale,a)}catch(t){throw ire(e,t.message)}}static ɵfac=function(t){return new(t||e)(Bp(X_,16),Bp(ore,24),Bp(sre,24))};static ɵpipe=uh({name:`date`,type:e,pure:!0})}return e})(),qv=(()=>{class e{transform(e){return JSON.stringify(e,null,2)}static ɵfac=function(t){return new(t||e)};static ɵpipe=uh({name:`json`,type:e,pure:!1})}return e})();function cre(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 lre=`browser`,Jv=class{_doc;constructor(e){this._doc=e}manager},Yv=(()=>{class e extends Jv{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)(ta(vs))};static ɵprov=yi({token:e,factory:e.ɵfac})}return e})(),Xv=new Ei(``),Zv=(()=>{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 Yv));this._plugins=n.slice().reverse();let r=e.find(e=>e instanceof Yv);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 di(-5101,!1);return this._eventNameToPlugin.set(e,t),t}static ɵfac=function(t){return new(t||e)(ta(Xv),ta(js))};static ɵprov=yi({token:e,factory:e.ɵfac})}return e})(),Qv=`ng-app-id`;function $v(e){for(let t of e)t.remove()}function ey(e,t){let n=t.createElement(`style`);return n.textContent=e,n}function ure(e,t,n,r){let i=e.head?.querySelectorAll(`style[${Qv}="${t}"],link[${Qv}="${t}"]`);if(!i||i.length===0)return!1;for(let e of i)e.removeAttribute(Qv),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 ty(e,t){let n=t.createElement(`link`);return n.setAttribute(`rel`,`stylesheet`),n.setAttribute(`href`,e),n}var ny=(()=>{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,ure(e,t,this.inline,this.external)&&this.hosts.add(e.head)}addStyles(e,t){for(let t of e)this.addUsage(t,this.inline,ey);t?.forEach(e=>this.addUsage(e,this.external,ty))}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&&($v(n.elements),t.delete(e)))}ngOnDestroy(){for(let[,{elements:e}]of[...this.inline,...this.external])$v(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,ey(t,this.doc)));for(let[t,{elements:n}]of this.external)n.push(this.addElement(e,ty(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)(ta(vs),ta(qs),ta(Zs,8),ta(Xs))};static ɵprov=yi({token:e,factory:e.ɵfac})}return e})(),ry={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`},iy=/%COMP%/g,ay=`%COMP%`,dre=`_nghost-${ay}`,fre=`_ngcontent-${ay}`,pre=!0,mre=new Ei(``,{factory:()=>pre}),hre=new Ei(``);function gre(e){return fre.replace(iy,e)}function _re(e){return dre.replace(iy,e)}function oy(e,t){return t.map(t=>t.replace(iy,e))}var sy=(()=>{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 cy(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 fy?n.applyToHost(e):n instanceof dy&&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 iu.Emulated:r=new fy(o,s,t,this.appId,c,i,a,l,this.cssVarNamespace);break;case iu.ShadowDom:return new uy(o,e,t,i,a,this.nonce,l,this.cssVarNamespace,s);case iu.ExperimentalIsolatedShadowDom:return new uy(o,e,t,i,a,this.nonce,l,this.cssVarNamespace);default:r=new dy(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)(ta(Zv),ta(Rp),ta(qs),ta(mre),ta(vs),ta(js),ta(Zs),ta(Xu,8),ta(hre,8))};static ɵprov=yi({token:e,factory:e.ɵfac})}return e})(),cy=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(ry[t]||t,e):this.doc.createElement(e)}createComment(e){return this.doc.createComment(e)}createText(e){return this.doc.createTextNode(e)}appendChild(e,t){(ly(e)?e.content:e).appendChild(t)}insertBefore(e,t,n){if(e){let r=ly(e)?e.content:e;if(n!=null&&n.parentNode!==r)throw new di(-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 di(-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=ry[r];i?e.setAttributeNS(i,t,n):e.setAttribute(t,n)}else e.setAttribute(t,n)}removeAttribute(e,t,n){if(n){let r=ry[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&(ju.DashCase|ju.Important)?e.style.setProperty(t,n,r&ju.Important?`important`:``):e.style[t]=n}removeStyle(e,t,n){let r=t.startsWith(`--`);r&&(t=t.replace(`%NS%`,this.cssVarNamespace)),r||n&ju.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=vv().getGlobalEventTarget(this.doc,e),!e))throw new di(-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 ly(e){return e.tagName===`TEMPLATE`&&e.content!==void 0}var uy=class extends cy{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=oy(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=ty(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)}},dy=class extends cy{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?oy(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&&Ru.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},fy=class extends dy{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=gre(l),this.hostAttr=_re(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}},vre=class e extends Fne{supportsDOMEvents=!0;static makeCurrent(){Pne(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=yre();return t==null?null:bre(t)}resetBaseElement(){py=null}getUserAgent(){return window.navigator.userAgent}getCookie(e){return cre(document.cookie,e)}},py=null;function yre(){return py||=document.head.querySelector(`base`),py?py.getAttribute(`href`):null}function bre(e){return new URL(e,document.baseURI).pathname}var my=[`alt`,`control`,`meta`,`shift`],xre={"\b":`Backspace`," ":`Tab`,"":`Delete`,"\x1B":`Escape`,Del:`Delete`,Esc:`Escape`,Left:`ArrowLeft`,Right:`ArrowRight`,Up:`ArrowUp`,Down:`ArrowDown`,Menu:`ContextMenu`,Scroll:`ScrollLock`,Win:`OS`},Sre={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},Cre=(()=>{class e extends Jv{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(()=>vv().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.`),my.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=xre[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`),my.forEach(t=>{if(t!==n){let n=Sre[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)(ta(vs))};static ɵprov=yi({token:e,factory:e.ɵfac})}return e})();async function wre(e,t,n){return jne({rootComponent:e,...Tre(t,n)})}function Tre(e,t){return{platformRef:t?.platformRef,appProviders:[...Are,...e?.providers??[]],platformProviders:kre}}function Ere(){vre.makeCurrent()}function Dre(){return new Us}function Ore(){return Kl(document),document}var kre=[{provide:Xs,useValue:lre},{provide:Ys,useValue:Ere,multi:!0},{provide:vs,useFactory:Ore}],Are=[{provide:Fa,useValue:`root`},{provide:Us,useFactory:Dre},{provide:Xv,useClass:Yv,multi:!0},{provide:Xv,useClass:Cre,multi:!0},sy,{provide:Rp,useClass:ny},{provide:ny,useExisting:Rp},Zv,{provide:ip,useExisting:sy},[]];function hy(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 yy({code:i,why:_y(a.why,e),fix:_y(a.fix,e),docs:o,cause:e.cause,sources:e.sources,data:_y(a.data,e)},s);for(let e of t)e(r,n);return r};n[i]=s}return n}function Sy(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 Oy=Math.random.bind(Math),ky=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function Ay(e=21){let t=``,n=e;for(;n--;)t+=ky[Oy()*64|0];return t}var jy=6e4,My=e=>e,Ny=My,{clearTimeout:Py,setTimeout:Fy}=globalThis;function Iy(e,t){let{post:n,on:r,off:i=()=>{},eventNames:a=[],serialize:o=My,deserialize:s=Ny,resolver:c,bind:l=`rpc`,timeout:u=jy,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}=Dy(),g=Ay();s.i=g;let te;async function ne(n=s){return u>=0&&(te=Fy(()=>{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{Py(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&&(Py(r.timeoutId),n?r.reject(n):r.resolve(t)),p.delete(e)}}return m=r(re),ee}function Ly(e,t){return t.safety?t.safety:e===`static`||e===`query`||e==null?`read`:`action`}var Ry=Object.freeze({type:`object`,additionalProperties:!0});function zy(e){let t=e[`~standard`];if(t.jsonSchema)try{return t.jsonSchema.input({target:`draft-2020-12`})}catch{return Ry}return Ry}function By(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 Hy(e,t){return Vy(e,t)??[e]}function Uy(e){return typeof e==`string`?`'${e}'`:new qy().serialize(e)}var Wy=` _-,;:!?.'"()[]{}@*/\\&#%\`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz`,Gy=(function(){let e=new Uint8Array(128);for(let t=0;t<69;t++)e[Wy.charCodeAt(t)]=t+1;for(let t=65;t<=90;t++)e[t]=e[t+32];return e})();function Ky(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})(),Jy=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],Yy=[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],Xy=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`,Zy=[],Qy=class{_data=new $y;_hash=new $y([...Jy]);_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)Zy[n]=e[t+n]|0;else{let e=Zy[n-15],t=(e<<25|e>>>7)^(e<<14|e>>>18)^e>>>3,r=Zy[n-2],i=(r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10;Zy[n]=t+Zy[n-7]+i+Zy[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+Yy[n]+Zy[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=$y.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 eb(e){return new Qy().finalize(e).toBase64()}function tb(e){return eb(Uy(e))}function nb(e){return tb(e)}function rb(){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 ib=/^[\w+.-]{2,}:\/\//;function ab(e){return e.endsWith(`/`)?e:`${e}/`}function ob(e){return(e.endsWith(`/`)?e.slice(0,-1):e)||`/`}function sb(e,...t){let n=e;for(let e of t)e&&e!==`/`&&(n=n?ab(n)+e.replace(/^\.?\//,``):e);return n}function cb(e,t){if(!t||t===`/`||ib.test(e))return e;let n=ob(t);return e.startsWith(n)?e:sb(n,e)}function lb(e,t){let n=e.match(ib);return t+(n?e.slice(n[0].length):e)}var ub=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function db(e=21){let t=``,n=e;for(;n--;)t+=ub[Math.random()*64|0];return t}var fb=Symbol.for(`immer-nothing`),pb=Symbol.for(`immer-draftable`),mb=Symbol.for(`immer-state`),hb=[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 gb(e,...t){{let n=hb[e],r=Bb(n)?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}}var _b=Object,vb=_b.getPrototypeOf,yb=`constructor`,bb=`prototype`,xb=`configurable`,Sb=`enumerable`,Cb=`writable`,wb=`value`,Tb=e=>!!e&&!!e[mb];function Eb(e){return e?kb(e)||Ib(e)||!!e[pb]||!!e[yb]?.[pb]||Lb(e)||Rb(e):!1}var Db=_b[bb][yb].toString(),Ob=new WeakMap;function kb(e){if(!e||!zb(e))return!1;let t=vb(e);if(t===null||t===_b[bb])return!0;let n=_b.hasOwnProperty.call(t,yb)&&t[yb];if(n===Object)return!0;if(!Bb(n))return!1;let r=Ob.get(n);return r===void 0&&(r=Function.toString.call(n),Ob.set(n,r)),r===Db}function Ab(e,t,n=!0){jb(e)===0?(n?Reflect.ownKeys(e):_b.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function jb(e){let t=e[mb];return t?t.type_:Ib(e)?1:Lb(e)?2:Rb(e)?3:0}var Mb=(e,t,n=jb(e))=>n===2?e.has(t):_b[bb].hasOwnProperty.call(e,t),Nb=(e,t,n=jb(e))=>n===2?e.get(t):e[t],Pb=(e,t,n,r=jb(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function Fb(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var Ib=Array.isArray,Lb=e=>e instanceof Map,Rb=e=>e instanceof Set,zb=e=>typeof e==`object`,Bb=e=>typeof e==`function`,Vb=e=>typeof e==`boolean`;function Hb(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var Ub=e=>zb(e)?e?.[mb]:null,Wb=e=>e.copy_||e.base_,Gb=e=>e.modified_?e.copy_:e.base_;function Kb(e,t){if(Lb(e))return new Map(e);if(Rb(e))return new Set(e);if(Ib(e))return Array[bb].slice.call(e);let n=kb(e);if(t===!0||t===`class_only`&&!n){let t=_b.getOwnPropertyDescriptors(e);delete t[mb];let n=Reflect.ownKeys(t);for(let r=0;r1&&_b.defineProperties(e,{set:Yb,add:Yb,clear:Yb,delete:Yb}),_b.freeze(e),t&&Ab(e,(e,t)=>{qb(t,!0)},!1),e)}function Jb(){gb(2)}var Yb={[wb]:Jb};function Xb(e){return e===null||!zb(e)||_b.isFrozen(e)}var Zb=`MapSet`,Qb=`Patches`,$b=`ArrayMethods`,ex={};function tx(e){let t=ex[e];return t||gb(0,e),t}var nx=e=>!!ex[e];function rx(e,t){ex[e]||(ex[e]=t)}var ix,ax=()=>ix,ox=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:nx(Zb)?tx(Zb):void 0,arrayMethodsPlugin_:nx($b)?tx($b):void 0});function sx(e,t){t&&(e.patchPlugin_=tx(Qb),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function cx(e){lx(e),e.drafts_.forEach(dx),e.drafts_=null}function lx(e){e===ix&&(ix=e.parent_)}var ux=e=>ix=ox(ix,e);function dx(e){let t=e[mb];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function fx(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[mb].modified_&&(cx(t),gb(4)),Eb(e)&&(e=px(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[mb].base_,e,t)}else e=px(t,n);return mx(t,e,!0),cx(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===fb?void 0:e}function px(e,t){if(Xb(t))return t;let n=t[mb];if(!n)return Sx(t,e.handledSet_,e);if(!gx(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);bx(n,e)}return n.copy_}function mx(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&qb(t,n)}function hx(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var gx=(e,t)=>e.scope_===t,_x=[];function vx(e,t,n,r){let i=Wb(e),a=e.type_;if(r!==void 0&&Nb(i,r,a)===t){Pb(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;Ab(i,(e,n)=>{if(Tb(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??_x;for(let e of o)Pb(i,e,n,a)}function yx(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!gx(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=Gb(i);vx(e,i.draft_??i,a,n),bx(i,r)})}function bx(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)}hx(e)}}function xx(e,t,n){let{scope_:r}=e;if(Tb(n)){let i=n[mb];gx(i,r)&&i.callbacks_.push(function(){jx(e),vx(e,n,Gb(i),t)})}else Eb(n)&&e.callbacks_.push(function(){let i=Wb(e);e.type_===3?i.has(n)&&Sx(n,r.handledSet_,r):Nb(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&Sx(Nb(e.copy_,t,e.type_),r.handledSet_,r)})}function Sx(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||Tb(e)||t.has(e)||!Eb(e)||Xb(e)?e:(t.add(e),Ab(e,(r,i)=>{if(Tb(i)){let t=i[mb];gx(t,n)&&(Pb(e,r,Gb(t),e.type_),hx(t))}else Eb(i)&&Sx(i,t,n)}),e)}function Cx(e,t){let n=Ib(e),r={type_:+!!n,scope_:t?t.scope_:ax(),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=wx;n&&(i=[r],a=Tx);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var wx={get(e,t){if(t===mb)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=Wb(e);if(!Mb(i,t,e.type_))return Ox(e,i,t);let a=i[t];if(e.finalized_||!Eb(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&Hb(t))return a;if(a===Ex(e.base_,t)||Dx(e,t,a)){jx(e);let n=e.type_===1?+t:t,r=Nx(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in Wb(e)},ownKeys(e){return Reflect.ownKeys(Wb(e))},set(e,t,n){let r=kx(Wb(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=Ex(Wb(e),t),i=r?.[mb];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.delete(t),!0;if(Fb(n,r)&&(n!==void 0||Mb(e.base_,t,e.type_)))return!0;jx(e),Ax(e)}return e.copy_[t]===n&&(n!==void 0||Mb(e.copy_,t,e.type_))||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_.set(t,!0),xx(e,t,n),!0)},deleteProperty(e,t){return jx(e),Ex(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),Ax(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=Wb(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[Cb]:!0,[xb]:e.type_!==1||t!==`length`,[Sb]:r[Sb],[wb]:n[t]}},defineProperty(){gb(11)},getPrototypeOf(e){return vb(e.base_)},setPrototypeOf(){gb(12)}},Tx={};for(let e in wx){let t=wx[e];Tx[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}Tx.deleteProperty=function(e,t){return isNaN(parseInt(t))&&gb(13),Tx.set.call(this,e,t,void 0)},Tx.set=function(e,t,n){return t!==`length`&&isNaN(parseInt(t))&&gb(14),wx.set.call(this,e[0],t,n,e[0])};function Ex(e,t){let n=e[mb];return(n?Wb(n):e)[t]}function Dx(e,t,n){return e.type_!==1||!e.allIndicesReassigned_||e.assigned_?.get(t)||!Eb(n)||n[mb]?!1:e.baseRefs_.has(n)}function Ox(e,t,n){let r=kx(t,n);return r?wb in r?r[wb]:r.get?.call(e.draft_):void 0}function kx(e,t){if(!(t in e))return;let n=vb(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=vb(n)}}function Ax(e){e.modified_||(e.modified_=!0,e.parent_&&Ax(e.parent_))}function jx(e){e.copy_||=(e.assigned_=new Map,Kb(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var Mx=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(Bb(e)&&!Bb(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}Bb(t)||gb(6),n!==void 0&&!Bb(n)&&gb(7);let r;if(Eb(e)){let i=ux(this),a=Nx(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?cx(i):lx(i)}return sx(i,n),fx(r,i)}if(!e||!zb(e)){if(r=t(e),r===void 0&&(r=e),r===fb&&(r=void 0),this.autoFreeze_&&qb(r,!0),n){let t=[],i=[];tx(Qb).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}gb(1,e)},this.produceWithPatches=(e,t)=>{if(Bb(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]},Vb(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),Vb(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),Vb(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){Eb(e)||gb(8),Tb(e)&&(e=Px(e));let t=ux(this),n=Nx(t,e,void 0);return n[mb].isManual_=!0,lx(t),n}finishDraft(e,t){let n=e&&e[mb];(!n||!n.isManual_)&&gb(9);let{scope_:r}=n;return sx(r,t),fx(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=tx(Qb).applyPatches_;return Tb(e)?r(e,t):this.produce(e,e=>r(e,t))}};function Nx(e,t,n,r){let[i,a]=Lb(t)?tx(Zb).proxyMap_(t,n):Rb(t)?tx(Zb).proxySet_(t,n):Cx(t,n);return(n?.scope_??ax()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?yx(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 Px(e){return Tb(e)||gb(10,e),Fx(e)}function Fx(e){if(!Eb(e)||Xb(e))return e;let t=e[mb],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Kb(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Kb(e,!0);let i=n;return Rb(n)&&(n=new Set),Ab(i,(e,t)=>{Pb(n,e,Fx(t))},r),t&&(t.finalized_=!1),n}function Ix(){hb.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=Ub(Nb(e,n.key_)),i=Nb(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||Mb(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=Nb(o,e,c),f=Nb(s,e,c),p=l?Mb(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===fb?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(Rb(e))return new Set(Array.from(e).map(u));let t=Object.create(vb(e));for(let n in e)t[n]=u(e[n]);return Mb(e,pb)&&(t[pb]=e[pb]),t}function d(e){return Tb(e)?u(e):e}rx(Qb,{applyPatches_:l,generatePatches_:i,generateReplacementPatches_:c,getPath:e})}globalThis.Iterator?.from;var Lx=new Mx,Rx=Lx.produce,zx=Lx.produceWithPatches.bind(Lx),Bx=Lx.applyPatches.bind(Lx),Vx=1e3;function Hx(e,t){if(e.add(t),e.size>Vx){let t=e.values().next().value;t!==void 0&&e.delete(t)}}function Ux(e){let{enablePatches:t=!1}=e;t&&Ix();let n=rb(),r=e.initialValue,i=new Set;return{on:n.on,value:()=>r,patch:(e,t=db())=>{i.has(t)||(Ix(),r=Bx(r,e),Hx(i,t),n.emit(`updated`,r,void 0,t))},mutate:(e,a=db())=>{if(!i.has(a)){if(Hx(i,a),t){let[t,i]=zx(r,e);if(t===r)return;r=t,n.emit(`updated`,r,i,a)}else{let t=Rx(r,e);if(t===r)return;r=t,n.emit(`updated`,r,void 0,a)}}},syncIds:i}}var Wx=typeof self==`object`?self:globalThis,Gx=new Set([`Error`,`EvalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`,`AggregateError`]),Kx=new Set([`Boolean`,`Number`,`String`,`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float16Array`,`Float32Array`,`Float64Array`,`BigInt64Array`,`BigUint64Array`]);function qx(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=Gx.has(e)?Wx[e]:void 0;return n(new(r??Wx.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`&&Kx.has(a))return n(new Wx[a](o),i);throw TypeError(`unable to deserialize unsafe or unknown type: ${String(a)}`)};return r}function Jx(e){return qx(new Map,e)(0)}var Yx=``,{toString:Xx}={},{keys:Zx}=Object;function Qx(e){let t=typeof e;if(t!==`object`||!e)return[0,t];let n=Xx.call(e).slice(8,-1);switch(n){case`Array`:return[1,Yx];case`Object`:return[2,Yx];case`Date`:return[3,Yx];case`RegExp`:return[4,Yx];case`Map`:return[5,Yx];case`Set`:return[6,Yx];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]}function $x([e,t]){return e===0&&(t===`function`||t===`symbol`)}function eS(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]=Qx(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 Zx(r))(e||!$x(Qx(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||!($x(Qx(n))||$x(Qx(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!$x(Qx(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a}function tS(e,t={}){let n=[];return eS(!(t.json||t.lossy),!!t.json,new Map,n)(e),n}var{parse:nS,stringify:rS}=JSON,iS={json:!0,lossy:!0};function aS(e){return Jx(nS(e))}function oS(e){return rS(tS(e,iS))}function sS(e){return Jx(e)}function cS(e){return oS(e)}function lS(e){return aS(e)}var uS=256,dS=class extends Error{name=`StreamClosedError`};function fS(e={}){let t=e.id??db(),n=Math.max(0,e.replayWindow??0),r=rb(),i=new AbortController,a=[],o=!1,s=0;function c(e){if(o)throw new dS(`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=mS(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 pS(e={}){let t=e.id??db(),n=Math.max(1,e.highWaterMark??uS),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 mS(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 hS=128;function gS(e){return e.replace(/[^\w-]+/g,`_`).slice(0,hS)}var _S=`modulepreload`,vS=function(e,t){return new URL(e,t).href},yS={},bS=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=vS(t,n),t=s(t),t in yS)return;yS[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`:_S,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)})},xS=`__connection.json`,SS=`__DEVFRAME_CONNECTION__`,CS=`x-birpc-session`,wS=`__rpc-dump/index.json`,TS=`devframe:services`,ES=`devframe_otp`,DS=`devframe_auth_token`;Cy.postMessage.remoteAssetsError;var OS=class{cacheMap=new Map;options;keySerializer;constructor(e){this.options=e,this.keySerializer=e.keySerializer||(e=>nb(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()}},kS=Ey({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 AS(e){if(e.agent&&e.jsonSerializable===!1)throw kS.DF0019({name:e.name});e.agent&&!e.jsonSerializable&&(e.jsonSerializable=!0)}async function jS(e,t){let n=e[`~standard`].validate(t);return n instanceof Promise?await n:n}function MS(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 NS(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 IS(e,t){let n=e.handler;if(!n){let r=await FS(e,t);if(!r.handler)throw kS.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 NS(e.name,r,t),o=await a(...n);return await PS(e.name,i,o)}}var LS=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 IS(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 kS.DF0021({name:e.name});AS(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 kS.DF0022({name:e.name});AS(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 IS(this.definitions.get(e),this.context)}getSchema(e){let t=this.definitions.get(e);if(!t)throw kS.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 RS(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 BS(t,`undefined`,r,e);return n}return i!==null&&zS(i,r,e,t),n})}function zS(e,t,n,r){if(typeof e==`bigint`)throw BS(r,`BigInt`,t,n);if(typeof e!=`object`)return;if(e instanceof Map)throw BS(r,`Map`,t,n);if(e instanceof Set)throw BS(r,`Set`,t,n);if(e instanceof Date)throw BS(r,`Date`,t,n);if(Array.isArray(e))return;let i=Object.getPrototypeOf(e);if(i!==null&&i!==Object.prototype)throw BS(r,e.constructor?.name??`class instance`,t,n)}function BS(e,t,n,r){let i=VS(n,r);return kS.DF0020({name:e||``,type:t,path:i})}function VS(e,t){return Array.isArray(e)?`[${t}]`:t===``?``:t}var HS=`__DEVFRAME_CONNECTION_META__`,US=`__DEVFRAME_CONNECTION_AUTH_TOKEN__`;function WS(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 GS(){return WS(SS)}function KS(){return WS(HS)}function qS(e){if(e)return e;try{let e=localStorage.getItem(US);if(e)return e}catch{}return WS(US)}function JS(e){globalThis[SS]=e,globalThis[HS]={...e.connectionMeta,baseUrl:e.metaBaseUrl},e.authToken&&YS(e.authToken)}function YS(e){try{localStorage.setItem(US,e)}catch{}globalThis[US]=e;let t=GS();t&&(globalThis[SS]={...t,authToken:e})}function XS(e){let t=cb(xS,e);try{return new URL(t,globalThis.location?.href).href}catch{return t}}function ZS(e,t){return t&&t!==e.authToken?{...e,authToken:t}:e}function QS(){let e=GS();if(e)return ZS(e,qS()??e.authToken??e.connectionMeta.authToken);let t=KS();if(t)return{connectionMeta:t,metaBaseUrl:t.baseUrl??XS(`./`),authToken:qS(t.authToken)}}async function $S(e={}){if(e.connection){let t=ZS(e.connection,qS(e.authToken??e.connection.authToken??e.connection.connectionMeta.authToken));return JS(t),t}let t=Array.isArray(e.baseURL)?e.baseURL:[e.baseURL??`./`];if(e.connectionMeta){let n={connectionMeta:e.connectionMeta,metaBaseUrl:XS(t[0]??`./`),authToken:qS(e.authToken??e.connectionMeta.authToken)};return JS(n),n}let n=QS();if(n){let t=ZS(n,qS(e.authToken??n.authToken??n.connectionMeta.authToken));return JS(t),t}let r=[];for(let n of t){let t=cb(xS,n),i=XS(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:qS(e.authToken??r.authToken)};return JS(o),o}catch(e){r.push(e)}}throw Error(`Failed to get connection meta from ${t.join(`, `)}`,{cause:r})}var eC=class extends Error{name=`DevframeConnectionError`;kind;constructor(e,t,n){super(t,n),this.kind=e}};function tC(e=ES){try{let t=globalThis.location?.hash?.replace(/^#/,``)??``;return new URLSearchParams(t).get(e)||void 0}catch{return}}function nC(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 rC(e=ES){let t=tC(e);return t&&nC(e),t}async function iC(e,t={}){let n=rC(t.param??`devframe_otp`);return n?e.isTrusted?!0:e.requestTrustWithCode(n):!1}function aC(e){let t={},n=new WeakMap,r,i=()=>(r??=e.sharedState.get(TS,{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 oC(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=Ux({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 sC=new Map;function cC(e=sC){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?RS(n,r??``):`s:${cS(n)}`},deserialize:e=>{let n=e.startsWith(`s:`)?lS(e.slice(2)):JSON.parse(e);return n.t===`q`&&n.i&&n.m&&t.set(n.i,n.m),n}}}function lC(){}function uC(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 dC(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 fC(e){let{onConnected:t=lC,onError:n=lC,onDisconnected:r=lC,definitions:i,fetch:a=globalThis.fetch.bind(globalThis)}=e,o=e.url;e.authToken&&(o=`${o}${o.includes(`?`)?`&`:`?`}${DS}=${encodeURIComponent(e.authToken)}`);let s=cC(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=uC(r);if(!e)break;r=e.rest;let{event:t,data:n}=dC(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`,[CS]: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 pC(e,t){let{channel:n,rpcOptions:r={}}=t;return Iy(e,{...n,timeout:-1,...r,proxify:!1})}function mC(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 eC(`connection`,`[devframe] Not connected to the devframe server`,{cause:u??void 0}):l===`unauthorized`?new eC(`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 eC(`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 eC(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){l!==`error`&&f(`disconnected`),m(new eC(`connection`,`[devframe] Disconnected from the devframe server`,{cause:u??void 0}))}}),ne=pC(a.functions,{channel:te,rpcOptions:o});a.register({name:Cy.broadcast.authRevoked,type:`event`,handler:()=>{c=!1;let e=new eC(`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 eC(`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 hC(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 gC(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=hC(n.sse,r??`./`,location);return mC({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>fC({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 _C(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:vC(r)?_C(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function vC(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function yC(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function bC(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function xC(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function SC(e){if(e.error)throw _C(e.error);return e.output}function CC(e){return e.some(e=>e!=null)}function wC(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function TC(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?sS(e):e}function a(e,t){return i(wC(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 xC(r)?SC(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(yC(r)){if(CC(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(bC(r)){let e=nb(n),i=r.records[e];if(i)return SC(await s(i,r.serialization));if(r.fallback)return SC(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!CC(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 EC(e){let t=TC(await e.fetchJsonFromBases(wS),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 DC=``;function OC(e,t){return`${e}${DC}${t}`}function kC(e){let t=new Map,n=new Map;e.client.register({name:Cy.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(OC(e,n))?._push(r,i)}}),e.client.register({name:Cy.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=OC(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=OC(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(DC);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=OC(n,r),o=t.get(a);if(o)return o;let s=pS({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=OC(t,r),a=n.get(i);if(a)return a;let o=fS({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 AC(){}var jC=new Map;function MC(e){let t=e.url;e.authToken&&(t=`${t}?${DS}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=AC,onError:i=AC,onDisconnected:a=AC,definitions:o=jC}=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=cC(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 NC(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 lb(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function PC(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=NC(n.websocket,r??`./`,location);return mC({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>MC({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 FC(e){return e.includes(`:`)}function IC(e,t){return FC(t)?t:`${e}:${t}`}function LC(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 RC(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 LC(a)}function zC(e,t){return{global:RC(e,t,`global`),project:RC(e,t,`project`)}}function BC(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(FC(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(IC(t,n),...r)),callEvent:((n,...r)=>e.callEvent(IC(t,n),...r)),callOptional:((n,...r)=>e.callOptional(IC(t,n),...r)),sharedState:((n,r)=>e.sharedState.get(IC(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe(IC(t,n),r,i),upload:(n,r)=>e.streaming.upload(IC(t,n),r)}},settings:zC(e,t),scope:e.scope}}function VC(){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 HC(e,t={}){let n=t.modelContext??VC();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=gS(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=Ly(t.type,n),u=r.registerTool({name:o,description:n.description,inputSchema:By(t.args),annotations:{title:n.title??t.name,readOnlyHint:l===`read`,destructiveHint:l===`destructive`},execute:n=>UC(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 UC(e,t,n){try{let r=Hy(n,e.args?.length);return{content:[{type:`text`,text:WC(await(await IS(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:GC(e)}]}}}function WC(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function GC(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 KC(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 qC(e={}){let{baseURL:t=`./`,rpcOptions:n={},cacheOptions:r=!1}=e,i=rb(),a=Array.isArray(t)?t:[t],o=await $S(e),{connectionMeta:s,metaBaseUrl:c,authToken:l}=o,u=a[0]??`./`;try{u=new URL(`.`,c).href}catch{}let d=new OS({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),f={rpc:void 0},p=new LS(f),m=e.webmcp===!1?void 0:HC(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(cb(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 eC(`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=KC(e.transport??`auto`,s);oe=ce===`static`?await EC({fetchJsonFromBases:re}):ce===`sse`?gC({...se,sseOptions:e.sseOptions}):PC({...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=>(YS(e),o={...o,authToken:e},oe.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await oe.requestTrustWithCode(e);if(!t)return!1;YS(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=oC(me),me.streaming=kC(me),me.services=aC(me);let he=new Map;me.scope=(e=>{if(!e)return me;let t=he.get(e);return t||(t=BC(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 iC(me,{param:n}):!1;t||r||me.isTrusted||await _e()}return ue=ve().then(()=>{de=!0},()=>{de=!0}),s.mcp&&bS(async()=>{let{setupBrowserAgentRpcBridge:e}=await import(`./browser-agent-rpc-KH4HHvHf-Cxjx-Meu.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 JC=qC,YC=[`components`,`injectors`,`signals`,`ngrx`,`tanstackQuery`,`forms`,`router`,`pipes`,`http`,`analog`,`capacitor`,`errors`,`plugins`],XC=[`angular`,`ngrx`,`analog`,`angular-native`,`nativescript`,`capacitor`];function ZC(e){return`pangular:${e}`}var QC=[`forms`,`router`,`ngrx`,`http`,`analog`,`components`,`tanstackQuery`,`plugins`],$C={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}},ew={"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`},tw=[[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 nw(e){return tw.some(([t])=>t===e)}var rw=/^[a-z][a-z0-9-]{0,39}$/;function iw(e,t){let n=t.plugins?.[e],r=t.inspectors.plugins&&rw.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 aw=`pangular`,ow={mod:`Mod`,ctrl:`Ctrl`,control:`Ctrl`,meta:`Meta`,cmd:`Meta`,command:`Meta`,alt:`Alt`,option:`Alt`,opt:`Alt`,shift:`Shift`},sw=[`Mod`,`Ctrl`,`Meta`,`Alt`,`Shift`];function cw(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=ow[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[...sw.filter(e=>n.has(e)),r].join(`+`)}function lw(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 uw(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 dw=[{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:`capacitor`,label:`Capacitor`,inspector:`capacitor`},{id:`plugins`,label:`Plugins`,inspector:`plugins`}],fw=1e4;function pw(e){return dw.filter(t=>!(`inspector`in t)||e.inspectors[t.inspector])}var mw={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`},hw=200;function gw(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 _w(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=e=>{let n=t.get(e)?.trim();return n&&n.length<=hw?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 vw=[{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 yw(e){let t=pw(e).map(e=>({id:`tab:${e.id}`,title:`Go to ${e.label}`,group:`Go to`,keywords:`tab open`})),n=vw.filter(t=>!t.inspector||e.inspectors[t.inspector]).map(({inspector:e,...t})=>t);return[...t,...n]}function bw(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}var xw=Object.freeze({minLength:24,threshold:4.5}),Sw={min:16,max:512},Cw={min:2,max:6};function ww(e){return typeof e==`number`&&Number.isInteger(e)&&e>=Sw.min&&e<=Sw.max}function Tw(e){return typeof e==`number`&&Number.isFinite(e)&&e>=Cw.min&&e<=Cw.max}function Ew(e){if(e===!0)return{...xw};if(!e||typeof e!=`object`||Array.isArray(e))return;let{minLength:t,threshold:n}=e;return{minLength:ww(t)?t:xw.minLength,threshold:Tw(n)?n:xw.threshold}}function Dw(e){let t=Ew(e);return t?{entropy:t}:{}}function Ow(e,t){return typeof e==`boolean`?e:t}var kw=100,Aw=100;function jw(e){if(!Array.isArray(e))return[];let t=e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e&&e.length<=Aw);return[...new Set(t)].slice(0,kw)}function Mw(e,t){let{default:n,min:r,max:i}=$C[t];return typeof e!=`number`||!Number.isFinite(e)?n:Math.min(i,Math.max(r,Math.round(e)))}function Nw(e,t){return Object.fromEntries(e.map(e=>[e,t(e)]))}function Pw(e){let t=bw(e),n=bw(t.agent),r=bw(t.inspectors),i=bw(n.tools),a=bw(t.actions),o=Ow(t.actions,!0),s=bw(t.redaction),c=bw(t.limits),l=Nw(YC,e=>Ow(r[e],!0));return{inspectors:l,agent:{readOnly:Ow(n.readOnly,!1),tools:Nw(YC,e=>l[e]&&Ow(i[e],!0)),browserTools:Ow(n.browserTools,!1)},actions:Nw(QC,e=>l[e]&&Ow(a[e],o)),redaction:{secretNames:jw(s.secretNames),unmask:jw(s.unmask),...Dw(s.entropy)},limits:Object.fromEntries(Object.keys($C).map(e=>[e,Mw(c[e],e)])),popup:{hotkey:Vw(bw(t.popup).hotkey)},plugins:Bw(t.plugins),lint:{rules:Rw(t.lint)},analog:Iw(t.analog),ngrx:{trace:Ow(bw(t.ngrx).trace,!1)}}}var Fw=500;function Iw(e){let t=bw(e).contentSchema;return typeof t==`string`&&t.trim()&&t.length<=Fw?{contentSchema:t.trim()}:{}}var Lw=200;function Rw(e){let t=bw(bw(e).rules),n={};for(let[e,r]of Object.entries(t).slice(0,Lw))typeof r==`boolean`&&(n[e]=r);return n}var zw=100;function Bw(e){let t={};for(let[n,r]of Object.entries(bw(e)).slice(0,zw)){if(!rw.test(n))continue;if(typeof r==`boolean`){t[n]={enabled:r,tools:!0,actions:!0};continue}let e=bw(r);r!==void 0&&Object.keys(e).length&&(t[n]={enabled:Ow(e.enabled,!0),tools:Ow(e.tools,!0),actions:Ow(e.actions,!0)})}return t}function Vw(e){return e===!1?!1:cw(e)??`Alt+Shift+P`}function Hw(e){let t=e?.configs;return Pw(t?.[aw])}function Uw(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, 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 Ww=[`pangular:build-meta`],Gw={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`},Kw={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`},qw={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 Jw(e){if(!e)return[];let t=[`On`];return e.minLength!==xw.minLength&&t.push(`${e.minLength} characters or more`),e.threshold!==xw.threshold&&t.push(`up to ${e.threshold} bits per character`),t}function Yw(e){let t=[],n=(e,n)=>{n.length&&t.push({label:e,value:n.join(`, `)})},r=YC.filter(t=>e.inspectors[t]);n(`Inspectors off`,YC.filter(t=>!e.inspectors[t]).map(e=>Gw[e])),n(`Agent`,e.agent.readOnly?[`Read-only`]:[]),n(`Hidden from the agent`,r.filter(t=>!e.agent.tools[t]).map(e=>Gw[e])),n(`Blocked actions`,QC.filter(t=>e.inspectors[t]&&!e.actions[t]).map(e=>Kw[e])),n(`Extra secret names`,e.redaction.secretNames),n(`Unmasked names`,e.redaction.unmask),n(`Entropy masking`,Jw(e.redaction.entropy)),n(`Limits`,Object.keys($C).filter(t=>e.limits[t]!==$C[t].default).map(t=>qw[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 Xw(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 Zw(e){return!e.tags.length&&!e.directives.length&&!e.text}function Qw(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 $w={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 eT(e){let t=/^(\d+)\.(\d+)/.exec(e.trim());return t?`${t[1]}.${t[2]}`:e.trim()}function tT(e){let t=/^(\d+)(?:\.(\d+))?/.exec(e.trim());return t?[Number(t[1]),Number(t[2]??0)]:null}function nT(e,t){let n=tT(e),r=tT(t);return!n||!r?!1:n[0]===r[0]?n[1]>=r[1]:n[0]>r[0]}function rT(e,t){return e?.capabilities?.[t]===!1}function iT(e,t){let n=$w[e],r=`${n.subject} needs Angular ${n.since} or later`;if(!t)return`${r}; this page's Angular version is unknown.`;let i=eT(t);return nT(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 aT(e){return e.hydration===`hydrated`&&e.hydratedAt===void 0?`hydrated before inspection`:e.hydration}var oT=/^on (viewport|interaction|hover)\b/;function sT(e){let t=e.filter(e=>!/^(prefetch|hydrate) /.test(e));return t.length>0&&t.every(e=>oT.test(e))}function cT(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(sT(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 lT=`pangular-page-id`,uT=null;function dT(e){uT=e}function fT(){if(uT)return uT;try{return new URLSearchParams(location.search).get(`pageId`)||(window.top===window?null:sessionStorage.getItem(lT)||null)}catch{return null}}function pT(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 mT(e,t){return e?t?e.pages?.[t]??null:e:null}function hT(e,t){return e?t?e.pages?.[t]??null:e.graph??null:null}function gT(){return{functions:[...Ww]}}function _T(e,t,n){return e?e.scope(`pangular`).rpc.call(t,...n===void 0?[]:[n]):Promise.resolve(null)}function vT(e,t,n){return _T(e,t,n).then(e=>e,()=>null)}function yT(e){return e?.connectionMeta.backend===`static`}function bT(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 xT(e=globalThis){delete e.__DEVFRAME_CONNECTION__,delete e.__DEVFRAME_CONNECTION_META__}function ST(e){return e.split(`@`)[1]??``}var CT={signal:`Signal Forms`,reactive:`Reactive`,template:`Template-driven`},wT={own:`validator`,directive:`template attribute`,tree:`cross-field rule`,async:`async`,parse:`parse`,submission:`server`,schema:`schema`,manual:`setErrors`},TT=vT,ET={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 DT(e){return ET[e]??e}var OT=`https://pangular-inspector.dev/security/#opt-fields-in-or-out`;async function kT(e,t){return await TT(e,`request-form-action`,t)??{ok:!1,error:`The devtools server did not answer.`}}function AT(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 jT=/"(?:[^"\\\n]|\\.)*"|`([^`\n]*)`|\*\*/g;function MT(e){return(e??``).replace(/^_Labels, paths.*_\n\n/,``).replace(jT,(e,t)=>t??(e===`**`?``:e))}function NT(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 PT(e,t){return e.length?e.join(`, `):t}function FT(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 ${NT(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 ${NT(i??t,t)}`:`${r} tokens, the first expires ${NT(i??t,t)}, the last ${NT(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?`${PT(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 IT(e){return Hw(e?.connectionMeta)}function LT(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?[...e]:void 0}function RT(e,t){if(!t||typeof t!=`object`)return e;let n=LT(t.secretNames),r=LT(t.unmask);if(!n||!r)return e;let i=Ew(t.entropy);return{...e,redaction:i?{secretNames:n,unmask:r,entropy:i}:{secretNames:n,unmask:r}}}function zT(e,t){return IT(e).actions[t]}var BT={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`};function VT(e){return BT[e]}var HT=`https://pangular-inspector.dev/getting-started/configuration/#inspectors-and-agent-tools`;function UT(e,t){let n=BT[e];return!n||t.inspectors[n]}function WT(e,t){e&1&&(w(),sg(0,`rect`,5)(1,`rect`,6)(2,`rect`,7)(3,`rect`,8))}function GT(e,t){e&1&&(w(),sg(0,`path`,9)(1,`circle`,10)(2,`circle`,11)(3,`path`,12))}function KT(e,t){e&1&&(w(),sg(0,`path`,13)(1,`path`,14))}function qT(e,t){e&1&&(w(),sg(0,`path`,15)(1,`path`,16)(2,`path`,17))}function JT(e,t){e&1&&(w(),sg(0,`circle`,18)(1,`path`,19)(2,`circle`,20))}function YT(e,t){e&1&&(w(),sg(0,`path`,1))}function XT(e,t){e&1&&(w(),sg(0,`path`,21)(1,`path`,22)(2,`path`,23)(3,`path`,24))}function ZT(e,t){e&1&&(w(),sg(0,`ellipse`,25)(1,`path`,26)(2,`path`,27))}function QT(e,t){e&1&&(w(),sg(0,`rect`,28)(1,`path`,29)(2,`path`,30)(3,`path`,31))}function $T(e,t){e&1&&(w(),sg(0,`circle`,32)(1,`path`,9)(2,`path`,33))}function eE(e,t){e&1&&(w(),sg(0,`path`,34)(1,`path`,35)(2,`path`,36)(3,`path`,37)(4,`circle`,38))}function tE(e,t){e&1&&(w(),sg(0,`circle`,39)(1,`path`,40))}function nE(e,t){e&1&&(w(),sg(0,`ellipse`,41)(1,`path`,42)(2,`path`,43)(3,`path`,44)(4,`path`,45))}function rE(e,t){e&1&&(w(),sg(0,`circle`,32)(1,`path`,46)(2,`path`,47))}function iE(e,t){e&1&&(w(),sg(0,`path`,2))}function aE(e,t){e&1&&(w(),sg(0,`path`,3))}function oE(e,t){e&1&&(w(),sg(0,`path`,4))}var sE=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:18,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`]],template:function(e,t){if(e&1&&(w(),R(0,`svg`,0),A(1,WT,4,0)(2,GT,4,0)(3,KT,2,0)(4,qT,3,0)(5,JT,3,0)(6,YT,1,0,`:svg:path`,1)(7,XT,4,0)(8,ZT,3,0)(9,QT,4,0)(10,$T,3,0)(11,eE,5,0)(12,tE,2,0)(13,nE,5,0)(14,rE,3,0)(15,iE,1,0,`:svg:path`,2)(16,aE,1,0,`:svg:path`,3)(17,oE,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===`plugins`?15:e===`analog`?16:e===`capacitor`?17:-1)}},styles:[`[_nghost-%COMP%] { +`))}}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`,[CS]: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 pC(e,t){let{channel:n,rpcOptions:r={}}=t;return Iy(e,{...n,timeout:-1,...r,proxify:!1})}function mC(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 eC(`connection`,`[devframe] Not connected to the devframe server`,{cause:u??void 0}):l===`unauthorized`?new eC(`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 eC(`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 eC(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){l!==`error`&&f(`disconnected`),m(new eC(`connection`,`[devframe] Disconnected from the devframe server`,{cause:u??void 0}))}}),ne=pC(a.functions,{channel:te,rpcOptions:o});a.register({name:Cy.broadcast.authRevoked,type:`event`,handler:()=>{c=!1;let e=new eC(`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 eC(`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 hC(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 gC(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=hC(n.sse,r??`./`,location);return mC({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>fC({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 _C(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:vC(r)?_C(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function vC(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function yC(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function bC(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function xC(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function SC(e){if(e.error)throw _C(e.error);return e.output}function CC(e){return e.some(e=>e!=null)}function wC(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function TC(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?sS(e):e}function a(e,t){return i(wC(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 xC(r)?SC(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(yC(r)){if(CC(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(bC(r)){let e=nb(n),i=r.records[e];if(i)return SC(await s(i,r.serialization));if(r.fallback)return SC(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!CC(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 EC(e){let t=TC(await e.fetchJsonFromBases(wS),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 DC=``;function OC(e,t){return`${e}${DC}${t}`}function kC(e){let t=new Map,n=new Map;e.client.register({name:Cy.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(OC(e,n))?._push(r,i)}}),e.client.register({name:Cy.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=OC(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=OC(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(DC);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=OC(n,r),o=t.get(a);if(o)return o;let s=pS({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=OC(t,r),a=n.get(i);if(a)return a;let o=fS({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 AC(){}var jC=new Map;function MC(e){let t=e.url;e.authToken&&(t=`${t}?${DS}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=AC,onError:i=AC,onDisconnected:a=AC,definitions:o=jC}=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=cC(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 NC(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 lb(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function PC(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=NC(n.websocket,r??`./`,location);return mC({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>MC({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 FC(e){return e.includes(`:`)}function IC(e,t){return FC(t)?t:`${e}:${t}`}function LC(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 RC(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 LC(a)}function zC(e,t){return{global:RC(e,t,`global`),project:RC(e,t,`project`)}}function BC(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(FC(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(IC(t,n),...r)),callEvent:((n,...r)=>e.callEvent(IC(t,n),...r)),callOptional:((n,...r)=>e.callOptional(IC(t,n),...r)),sharedState:((n,r)=>e.sharedState.get(IC(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe(IC(t,n),r,i),upload:(n,r)=>e.streaming.upload(IC(t,n),r)}},settings:zC(e,t),scope:e.scope}}function VC(){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 HC(e,t={}){let n=t.modelContext??VC();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=gS(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=Ly(t.type,n),u=r.registerTool({name:o,description:n.description,inputSchema:By(t.args),annotations:{title:n.title??t.name,readOnlyHint:l===`read`,destructiveHint:l===`destructive`},execute:n=>UC(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 UC(e,t,n){try{let r=Hy(n,e.args?.length);return{content:[{type:`text`,text:WC(await(await IS(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:GC(e)}]}}}function WC(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function GC(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 KC(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 qC(e={}){let{baseURL:t=`./`,rpcOptions:n={},cacheOptions:r=!1}=e,i=rb(),a=Array.isArray(t)?t:[t],o=await $S(e),{connectionMeta:s,metaBaseUrl:c,authToken:l}=o,u=a[0]??`./`;try{u=new URL(`.`,c).href}catch{}let d=new OS({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),f={rpc:void 0},p=new LS(f),m=e.webmcp===!1?void 0:HC(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(cb(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 eC(`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=KC(e.transport??`auto`,s);oe=ce===`static`?await EC({fetchJsonFromBases:re}):ce===`sse`?gC({...se,sseOptions:e.sseOptions}):PC({...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=>(YS(e),o={...o,authToken:e},oe.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await oe.requestTrustWithCode(e);if(!t)return!1;YS(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=oC(me),me.streaming=kC(me),me.services=aC(me);let he=new Map;me.scope=(e=>{if(!e)return me;let t=he.get(e);return t||(t=BC(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 iC(me,{param:n}):!1;t||r||me.isTrusted||await _e()}return ue=ve().then(()=>{de=!0},()=>{de=!0}),s.mcp&&bS(async()=>{let{setupBrowserAgentRpcBridge:e}=await import(`./browser-agent-rpc-KH4HHvHf-DjXYovS-.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 JC=qC,YC=[`components`,`injectors`,`signals`,`ngrx`,`tanstackQuery`,`forms`,`router`,`pipes`,`http`,`analog`,`capacitor`,`errors`,`plugins`],XC=[`angular`,`ngrx`,`analog`,`angular-native`,`nativescript`,`capacitor`];function ZC(e){return`pangular:${e}`}var QC=[`forms`,`router`,`ngrx`,`http`,`analog`,`components`,`tanstackQuery`,`plugins`],$C={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}},ew={"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`},tw=[[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 nw(e){return tw.some(([t])=>t===e)}var rw=/^[a-z][a-z0-9-]{0,39}$/;function iw(e,t){let n=t.plugins?.[e],r=t.inspectors.plugins&&rw.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 aw=`pangular`,ow={mod:`Mod`,ctrl:`Ctrl`,control:`Ctrl`,meta:`Meta`,cmd:`Meta`,command:`Meta`,alt:`Alt`,option:`Alt`,opt:`Alt`,shift:`Shift`},sw=[`Mod`,`Ctrl`,`Meta`,`Alt`,`Shift`];function cw(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=ow[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[...sw.filter(e=>n.has(e)),r].join(`+`)}function lw(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 uw(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 dw=[{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:`capacitor`,label:`Capacitor`,inspector:`capacitor`},{id:`plugins`,label:`Plugins`,inspector:`plugins`}],fw=1e4;function pw(e){return dw.filter(t=>!(`inspector`in t)||e.inspectors[t.inspector])}var mw={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`},hw=200;function gw(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 _w(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=e=>{let n=t.get(e)?.trim();return n&&n.length<=hw?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 vw=[{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 yw(e){let t=pw(e).map(e=>({id:`tab:${e.id}`,title:`Go to ${e.label}`,group:`Go to`,keywords:`tab open`})),n=vw.filter(t=>!t.inspector||e.inspectors[t.inspector]).map(({inspector:e,...t})=>t);return[...t,...n]}function bw(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}var xw=Object.freeze({minLength:24,threshold:4.5}),Sw={min:16,max:512},Cw={min:2,max:6};function ww(e){return typeof e==`number`&&Number.isInteger(e)&&e>=Sw.min&&e<=Sw.max}function Tw(e){return typeof e==`number`&&Number.isFinite(e)&&e>=Cw.min&&e<=Cw.max}function Ew(e){if(e===!0)return{...xw};if(!e||typeof e!=`object`||Array.isArray(e))return;let{minLength:t,threshold:n}=e;return{minLength:ww(t)?t:xw.minLength,threshold:Tw(n)?n:xw.threshold}}function Dw(e){let t=Ew(e);return t?{entropy:t}:{}}function Ow(e,t){return typeof e==`boolean`?e:t}var kw=100,Aw=100;function jw(e){if(!Array.isArray(e))return[];let t=e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e&&e.length<=Aw);return[...new Set(t)].slice(0,kw)}function Mw(e,t){let{default:n,min:r,max:i}=$C[t];return typeof e!=`number`||!Number.isFinite(e)?n:Math.min(i,Math.max(r,Math.round(e)))}function Nw(e,t){return Object.fromEntries(e.map(e=>[e,t(e)]))}function Pw(e){let t=bw(e),n=bw(t.agent),r=bw(t.inspectors),i=bw(n.tools),a=bw(t.actions),o=Ow(t.actions,!0),s=bw(t.redaction),c=bw(t.limits),l=Nw(YC,e=>Ow(r[e],!0));return{inspectors:l,agent:{readOnly:Ow(n.readOnly,!1),tools:Nw(YC,e=>l[e]&&Ow(i[e],!0)),browserTools:Ow(n.browserTools,!1)},actions:Nw(QC,e=>l[e]&&Ow(a[e],o)),redaction:{secretNames:jw(s.secretNames),unmask:jw(s.unmask),...Dw(s.entropy)},limits:Object.fromEntries(Object.keys($C).map(e=>[e,Mw(c[e],e)])),popup:{hotkey:Vw(bw(t.popup).hotkey)},plugins:Bw(t.plugins),lint:{rules:Rw(t.lint)},analog:Iw(t.analog),ngrx:{trace:Ow(bw(t.ngrx).trace,!1)}}}var Fw=500;function Iw(e){let t=bw(e).contentSchema;return typeof t==`string`&&t.trim()&&t.length<=Fw?{contentSchema:t.trim()}:{}}var Lw=200;function Rw(e){let t=bw(bw(e).rules),n={};for(let[e,r]of Object.entries(t).slice(0,Lw))typeof r==`boolean`&&(n[e]=r);return n}var zw=100;function Bw(e){let t={};for(let[n,r]of Object.entries(bw(e)).slice(0,zw)){if(!rw.test(n))continue;if(typeof r==`boolean`){t[n]={enabled:r,tools:!0,actions:!0};continue}let e=bw(r);r!==void 0&&Object.keys(e).length&&(t[n]={enabled:Ow(e.enabled,!0),tools:Ow(e.tools,!0),actions:Ow(e.actions,!0)})}return t}function Vw(e){return e===!1?!1:cw(e)??`Alt+Shift+P`}function Hw(e){let t=e?.configs;return Pw(t?.[aw])}function Uw(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 Ww=[`pangular:build-meta`],Gw={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`},Kw={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`},qw={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 Jw(e){if(!e)return[];let t=[`On`];return e.minLength!==xw.minLength&&t.push(`${e.minLength} characters or more`),e.threshold!==xw.threshold&&t.push(`up to ${e.threshold} bits per character`),t}function Yw(e){let t=[],n=(e,n)=>{n.length&&t.push({label:e,value:n.join(`, `)})},r=YC.filter(t=>e.inspectors[t]);n(`Inspectors off`,YC.filter(t=>!e.inspectors[t]).map(e=>Gw[e])),n(`Agent`,e.agent.readOnly?[`Read-only`]:[]),n(`Hidden from the agent`,r.filter(t=>!e.agent.tools[t]).map(e=>Gw[e])),n(`Blocked actions`,QC.filter(t=>e.inspectors[t]&&!e.actions[t]).map(e=>Kw[e])),n(`Extra secret names`,e.redaction.secretNames),n(`Unmasked names`,e.redaction.unmask),n(`Entropy masking`,Jw(e.redaction.entropy)),n(`Limits`,Object.keys($C).filter(t=>e.limits[t]!==$C[t].default).map(t=>qw[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 Xw(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 Zw(e){return!e.tags.length&&!e.directives.length&&!e.text}function Qw(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 $w={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 eT(e){let t=/^(\d+)\.(\d+)/.exec(e.trim());return t?`${t[1]}.${t[2]}`:e.trim()}function tT(e){let t=/^(\d+)(?:\.(\d+))?/.exec(e.trim());return t?[Number(t[1]),Number(t[2]??0)]:null}function nT(e,t){let n=tT(e),r=tT(t);return!n||!r?!1:n[0]===r[0]?n[1]>=r[1]:n[0]>r[0]}function rT(e,t){return e?.capabilities?.[t]===!1}function iT(e,t){let n=$w[e],r=`${n.subject} needs Angular ${n.since} or later`;if(!t)return`${r}; this page's Angular version is unknown.`;let i=eT(t);return nT(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 aT(e){return e.hydration===`hydrated`&&e.hydratedAt===void 0?`hydrated before inspection`:e.hydration}var oT=/^on (viewport|interaction|hover)\b/;function sT(e){let t=e.filter(e=>!/^(prefetch|hydrate) /.test(e));return t.length>0&&t.every(e=>oT.test(e))}function cT(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(sT(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 lT=`pangular-page-id`,uT=null;function dT(e){uT=e}function fT(){if(uT)return uT;try{return new URLSearchParams(location.search).get(`pageId`)||(window.top===window?null:sessionStorage.getItem(lT)||null)}catch{return null}}function pT(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 mT(e,t){return e?t?e.pages?.[t]??null:e:null}function hT(e,t){return e?t?e.pages?.[t]??null:e.graph??null:null}function gT(){return{functions:[...Ww]}}function _T(e,t,n){return e?e.scope(`pangular`).rpc.call(t,...n===void 0?[]:[n]):Promise.resolve(null)}function vT(e,t,n){return _T(e,t,n).then(e=>e,()=>null)}function yT(e){return e?.connectionMeta.backend===`static`}function bT(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 xT(e=globalThis){delete e.__DEVFRAME_CONNECTION__,delete e.__DEVFRAME_CONNECTION_META__}function ST(e){return e.split(`@`)[1]??``}var CT={signal:`Signal Forms`,reactive:`Reactive`,template:`Template-driven`},wT={own:`validator`,directive:`template attribute`,tree:`cross-field rule`,async:`async`,parse:`parse`,submission:`server`,schema:`schema`,manual:`setErrors`},TT=vT,ET={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 DT(e){return ET[e]??e}var OT=`https://pangular-inspector.dev/security/#opt-fields-in-or-out`;async function kT(e,t){return await TT(e,`request-form-action`,t)??{ok:!1,error:`The devtools server did not answer.`}}function AT(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 jT=/"(?:[^"\\\n]|\\.)*"|`([^`\n]*)`|\*\*/g;function MT(e){return(e??``).replace(/^_Labels, paths.*_\n\n/,``).replace(jT,(e,t)=>t??(e===`**`?``:e))}function NT(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 PT(e,t){return e.length?e.join(`, `):t}function FT(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 ${NT(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 ${NT(i??t,t)}`:`${r} tokens, the first expires ${NT(i??t,t)}, the last ${NT(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?`${PT(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 IT(e){return Hw(e?.connectionMeta)}function LT(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?[...e]:void 0}function RT(e,t){if(!t||typeof t!=`object`)return e;let n=LT(t.secretNames),r=LT(t.unmask);if(!n||!r)return e;let i=Ew(t.entropy);return{...e,redaction:i?{secretNames:n,unmask:r,entropy:i}:{secretNames:n,unmask:r}}}function zT(e,t){return IT(e).actions[t]}var BT={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`};function VT(e){return BT[e]}var HT=`https://pangular-inspector.dev/getting-started/configuration/#inspectors-and-agent-tools`;function UT(e,t){let n=BT[e];return!n||t.inspectors[n]}function WT(e,t){e&1&&(w(),lg(0,`rect`,5)(1,`rect`,6)(2,`rect`,7)(3,`rect`,8))}function GT(e,t){e&1&&(w(),lg(0,`path`,9)(1,`circle`,10)(2,`circle`,11)(3,`path`,12))}function KT(e,t){e&1&&(w(),lg(0,`path`,13)(1,`path`,14))}function qT(e,t){e&1&&(w(),lg(0,`path`,15)(1,`path`,16)(2,`path`,17))}function JT(e,t){e&1&&(w(),lg(0,`circle`,18)(1,`path`,19)(2,`circle`,20))}function YT(e,t){e&1&&(w(),lg(0,`path`,1))}function XT(e,t){e&1&&(w(),lg(0,`path`,21)(1,`path`,22)(2,`path`,23)(3,`path`,24))}function ZT(e,t){e&1&&(w(),lg(0,`ellipse`,25)(1,`path`,26)(2,`path`,27))}function QT(e,t){e&1&&(w(),lg(0,`rect`,28)(1,`path`,29)(2,`path`,30)(3,`path`,31))}function $T(e,t){e&1&&(w(),lg(0,`circle`,32)(1,`path`,9)(2,`path`,33))}function eE(e,t){e&1&&(w(),lg(0,`path`,34)(1,`path`,35)(2,`path`,36)(3,`path`,37)(4,`circle`,38))}function tE(e,t){e&1&&(w(),lg(0,`circle`,39)(1,`path`,40))}function nE(e,t){e&1&&(w(),lg(0,`ellipse`,41)(1,`path`,42)(2,`path`,43)(3,`path`,44)(4,`path`,45))}function rE(e,t){e&1&&(w(),lg(0,`circle`,32)(1,`path`,46)(2,`path`,47))}function iE(e,t){e&1&&(w(),lg(0,`path`,2))}function aE(e,t){e&1&&(w(),lg(0,`path`,3))}function oE(e,t){e&1&&(w(),lg(0,`path`,4))}var sE=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:18,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`]],template:function(e,t){if(e&1&&(w(),R(0,`svg`,0),A(1,WT,4,0)(2,GT,4,0)(3,KT,2,0)(4,qT,3,0)(5,JT,3,0)(6,YT,1,0,`:svg:path`,1)(7,XT,4,0)(8,ZT,3,0)(9,QT,4,0)(10,$T,3,0)(11,eE,5,0)(12,tE,2,0)(13,nE,5,0)(14,rE,3,0)(15,iE,1,0,`:svg:path`,2)(16,aE,1,0,`:svg:path`,3)(17,oE,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===`plugins`?15:e===`analog`?16:e===`capacitor`?17:-1)}},styles:[`[_nghost-%COMP%] { display: inline-flex; flex-shrink: 0; -}`]})},cE=(e,t)=>t.tab,lE=(e,t)=>t.label;function uE(e,t){e&1&&K(0),e&2&&J(` `,W().meta()?.projectName,` `)}function dE(e,t){e&1&&K(0,` Project details unavailable `)}function fE(e,t){e&1&&K(0,` Loading… `)}function pE(e,t){e&1&&(K(0,` Run `),F(1,`code`),K(2,`pangular build`),I(),K(3,` again to rebuild the report. `))}function mE(e,t){e&1&&K(0,` Check that the dev server is running. `)}function hE(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 gE(e,t){if(e&1&&(F(0,`p`,11),A(1,pE,4,0)(2,mE,1,0),I(),A(3,hE,2,0,`button`,12)),e&2){let e=W();D(),j(e.staticReport()?1:2),D(2),j(e.staticReport()?-1:3)}}function _E(e,t){e&1&&(F(0,`li`,5)(1,`span`),K(2,`Analog`),I(),K(3),I()),e&2&&(D(3),q(t))}function vE(e,t){e&1&&(F(0,`li`)(1,`span`),K(2,`Change detection`),I(),K(3),I()),e&2&&(D(3),q(t))}function yE(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 bE(e,t){e&1&&(F(0,`span`,22),K(1,`–`),I(),F(2,`span`,21),K(3,`Count unavailable`),I())}function xE(e,t){e&1&&(L(0,`span`,23),F(1,`span`,21),K(2,`Counting…`),I())}function SE(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,yE,4,2)(9,bE,4,0)(10,xE,3,0),I()}if(e&2){let e,n=t.$implicit,r=t.$index,i=W().stateOf(n.tab);Zg(`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 CE(e,t){e&1&&(F(0,`p`),K(1,`Loading…`),I())}function wE(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 TE(e,t){if(e&1&&(F(0,`dl`),M(1,wE,5,2,`div`,null,lE),I()),e&2){let e=W();D(),N(e.configItems())}}function EE(e,t){e&1&&(F(0,`p`),K(1,`Defaults`),I())}function DE(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 OE(e,t){e&1&&(F(0,`section`,10)(1,`h2`,24),K(2,`Security`),I(),F(3,`dl`),M(4,DE,5,2,`div`,null,lE),I()()),e&2&&(D(4),N(t))}var kE=[{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 AE(e){return kE.filter(t=>UT(t.tab,e))}var jE={zoneless:`Zoneless`,zone:`zone.js`,"zone-unused":`Zoneless, zone.js loaded`};function ME(e){return e&&Object.hasOwn(jE,e)?jE[e]:null}var NE=new Set([`signal`,`computed`,`linkedSignal`,`effect`]),PE={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 FE(e,t,n){return`${e} ${e===1?t:n}`}function IE(e,t){for(let n of e??[])t(n),IE(n.children,t)}function LE(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 · ${FE(t,`directive`,`directives`)}`}}function RE(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 · ${FE(t,`redirect`,`redirects`)}`}}function zE(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]=PE[e]??[e,e];return FE(t,n,r)});return{value:e.length,sub:n.join(` · `)}}function BE(e,t){let n=e?.forms??[],r=t?n.filter(e=>ST(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 VE(e){return e.cancelled||e.status===void 0?!1:e.status===0||e.status>=400}function HE(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(VE).length;return{value:o.length,sub:`${o.length===1?`call`:`calls`} · ${s} failed`}}var UE=class e{rpc=$(null);navigate=ev();staticReport=X(()=>yT(this.rpc()));meta=T(null);security=T(null);redaction=T(null);config=X(()=>RT(IT(this.rpc()),this.redaction()));stats=X(()=>this.rpc()?AE(this.config()):[]);configItems=X(()=>Yw(this.config()));metaState=T(`loading`);states=T({});rows=T({});injectorTree=T(null);signalGraph=T(null);formsState=T(null);httpState=T(null);pageId=fT();destroyRef=x(ys);stopLive=[];zone=X(()=>ME(mT(this.injectorTree(),this.pageId)?.zone));liveInjectors=X(()=>{let e=mT(this.injectorTree(),this.pageId);if(!e?.roots?.length)return null;let t=0,n=0,r=e=>{t++,n+=e.providers?.length??0};return IE(e.roots,r),IE(e.environment,r),{injectors:t,providers:n}});liveSignals=X(()=>{let e=hT(this.signalGraph(),this.pageId);return e?.nodes?.length?e.nodes.filter(e=>NE.has(e.kind??``)).length:null});cards=X(()=>{let e=this.rows(),t={};if(e.components&&(t.components=LE(e.components)),e.routes&&(t.routes=RE(e.routes)),e.store&&(t.store=zE(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 · ${FE(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=BE(i,this.pageId));let a=this.httpState();return a&&(t.network=HE(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),!yT(e)&&_T(e,`redaction-config`).then(t=>{this.rpc()===e&&this.redaction.set(t)}).catch(()=>{})}loadSecurity(e){this.security.set(null),!yT(e)&&vT(e,`security-status`).then(t=>{this.rpc()===e&&t&&this.security.set(FT(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=IT(e),r=e=>UT(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)),UT(`forms`,t)&&r(`forms`,e=>this.formsState.set(e??{}),`forms`),UT(`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,uE,1,1)(6,dE,1,0)(7,fE,1,0),I(),A(8,gE,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,_E,4,1,`li`,5),A(23,vE,4,1,`li`),I()(),F(24,`div`,6),M(25,SE,11,6,`button`,7,cE),I(),F(27,`section`,8)(28,`h2`,9),K(29,`Configuration`),I(),A(30,CE,2,0,`p`)(31,TE,3,0,`dl`)(32,EE,2,0,`p`),I(),A(33,OE,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:[sE],styles:[`[_nghost-%COMP%] { +}`]})},cE=(e,t)=>t.tab,lE=(e,t)=>t.label;function uE(e,t){e&1&&K(0),e&2&&J(` `,W().meta()?.projectName,` `)}function dE(e,t){e&1&&K(0,` Project details unavailable `)}function fE(e,t){e&1&&K(0,` Loading… `)}function pE(e,t){e&1&&(K(0,` Run `),F(1,`code`),K(2,`pangular build`),I(),K(3,` again to rebuild the report. `))}function mE(e,t){e&1&&K(0,` Check that the dev server is running. `)}function hE(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 gE(e,t){if(e&1&&(F(0,`p`,11),A(1,pE,4,0)(2,mE,1,0),I(),A(3,hE,2,0,`button`,12)),e&2){let e=W();D(),j(e.staticReport()?1:2),D(2),j(e.staticReport()?-1:3)}}function _E(e,t){e&1&&(F(0,`li`,5)(1,`span`),K(2,`Analog`),I(),K(3),I()),e&2&&(D(3),q(t))}function vE(e,t){e&1&&(F(0,`li`)(1,`span`),K(2,`Change detection`),I(),K(3),I()),e&2&&(D(3),q(t))}function yE(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 bE(e,t){e&1&&(F(0,`span`,22),K(1,`–`),I(),F(2,`span`,21),K(3,`Count unavailable`),I())}function xE(e,t){e&1&&(L(0,`span`,23),F(1,`span`,21),K(2,`Counting…`),I())}function SE(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,yE,4,2)(9,bE,4,0)(10,xE,3,0),I()}if(e&2){let e,n=t.$implicit,r=t.$index,i=W().stateOf(n.tab);$g(`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 CE(e,t){e&1&&(F(0,`p`),K(1,`Loading…`),I())}function wE(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 TE(e,t){if(e&1&&(F(0,`dl`),M(1,wE,5,2,`div`,null,lE),I()),e&2){let e=W();D(),N(e.configItems())}}function EE(e,t){e&1&&(F(0,`p`),K(1,`Defaults`),I())}function DE(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 OE(e,t){e&1&&(F(0,`section`,10)(1,`h2`,24),K(2,`Security`),I(),F(3,`dl`),M(4,DE,5,2,`div`,null,lE),I()()),e&2&&(D(4),N(t))}var kE=[{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 AE(e){return kE.filter(t=>UT(t.tab,e))}var jE={zoneless:`Zoneless`,zone:`zone.js`,"zone-unused":`Zoneless, zone.js loaded`};function ME(e){return e&&Object.hasOwn(jE,e)?jE[e]:null}var NE=new Set([`signal`,`computed`,`linkedSignal`,`effect`]),PE={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 FE(e,t,n){return`${e} ${e===1?t:n}`}function IE(e,t){for(let n of e??[])t(n),IE(n.children,t)}function LE(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 · ${FE(t,`directive`,`directives`)}`}}function RE(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 · ${FE(t,`redirect`,`redirects`)}`}}function zE(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]=PE[e]??[e,e];return FE(t,n,r)});return{value:e.length,sub:n.join(` · `)}}function BE(e,t){let n=e?.forms??[],r=t?n.filter(e=>ST(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 VE(e){return e.cancelled||e.status===void 0?!1:e.status===0||e.status>=400}function HE(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(VE).length;return{value:o.length,sub:`${o.length===1?`call`:`calls`} · ${s} failed`}}var UE=class e{rpc=$(null);navigate=nv();staticReport=X(()=>yT(this.rpc()));meta=T(null);security=T(null);redaction=T(null);config=X(()=>RT(IT(this.rpc()),this.redaction()));stats=X(()=>this.rpc()?AE(this.config()):[]);configItems=X(()=>Yw(this.config()));metaState=T(`loading`);states=T({});rows=T({});injectorTree=T(null);signalGraph=T(null);formsState=T(null);httpState=T(null);pageId=fT();destroyRef=x(ys);stopLive=[];zone=X(()=>ME(mT(this.injectorTree(),this.pageId)?.zone));liveInjectors=X(()=>{let e=mT(this.injectorTree(),this.pageId);if(!e?.roots?.length)return null;let t=0,n=0,r=e=>{t++,n+=e.providers?.length??0};return IE(e.roots,r),IE(e.environment,r),{injectors:t,providers:n}});liveSignals=X(()=>{let e=hT(this.signalGraph(),this.pageId);return e?.nodes?.length?e.nodes.filter(e=>NE.has(e.kind??``)).length:null});cards=X(()=>{let e=this.rows(),t={};if(e.components&&(t.components=LE(e.components)),e.routes&&(t.routes=RE(e.routes)),e.store&&(t.store=zE(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 · ${FE(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=BE(i,this.pageId));let a=this.httpState();return a&&(t.network=HE(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),!yT(e)&&_T(e,`redaction-config`).then(t=>{this.rpc()===e&&this.redaction.set(t)}).catch(()=>{})}loadSecurity(e){this.security.set(null),!yT(e)&&vT(e,`security-status`).then(t=>{this.rpc()===e&&t&&this.security.set(FT(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=IT(e),r=e=>UT(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)),UT(`forms`,t)&&r(`forms`,e=>this.formsState.set(e??{}),`forms`),UT(`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,uE,1,1)(6,dE,1,0)(7,fE,1,0),I(),A(8,gE,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,_E,4,1,`li`,5),A(23,vE,4,1,`li`),I()(),F(24,`div`,6),M(25,SE,11,6,`button`,7,cE),I(),F(27,`section`,8)(28,`h2`,9),K(29,`Configuration`),I(),A(30,CE,2,0,`p`)(31,TE,3,0,`dl`)(32,EE,2,0,`p`),I(),A(33,OE,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:[sE],styles:[`[_nghost-%COMP%] { display: block; max-width: 1200px; } @@ -325,7 +325,7 @@ h2.muted[_ngcontent-%COMP%] { .skeleton[_ngcontent-%COMP%] { animation: none; } -}`]})},WE=`pangular:panel-action-result`,GE=6e3,KE=0;function qE(e=window){return e.location.protocol===`chrome-extension:`&&e.parent!==e}function JE(e,t=window){let n=`pa-${Date.now().toString(36)}-${++KE}`;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!==WE||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`}),GE);t.addEventListener(`message`,a),t.parent.postMessage({...e,requestId:n},t.location.origin)})}var YE=class e{available=qE();reveal(e,t){return JE({type:`pangular:reveal-element`,pageId:e,id:t})}openSource(e,t,n){return JE({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=El({token:e,factory:e.ɵfac})};function XE(e){return new Date(e).toLocaleTimeString()}var ZE=/[ \t\n\r]/;function QE(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 tD(e,t){e&1&&(R(0,`span`,11),K(1,`impure`),z())}function nD(e,t){e&1&&(R(0,`span`,11),K(1,`churning`),z())}function rD(e,t){e&1&&(R(0,`span`,11),K(1,`stale?`),z())}function iD(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 aD(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,tD,2,0,`span`,11),A(8,nD,2,0,`span`,11),A(9,rD,2,0,`span`,11),A(10,iD,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 oD(e,t){e&1&&(R(0,`span`,11),K(1,`impure`),z())}function sD(e,t){if(e&1&&(R(0,`span`,6)(1,`span`,9),K(2),z(),R(3,`span`,10),K(4),z(),A(5,oD,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 cD(e,t){if(e&1&&(R(0,`li`),A(1,aD,11,6,`button`,5)(2,sD,6,3,`span`,6),z()),e&2){let e=W(3);D(),j(e.canShowPipes()?1:2)}}function lD(e,t){if(e&1&&(R(0,`ul`,3),M(1,cD,3,1,`li`,null,eD),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 uD(e,t){e&1&&(R(0,`p`,2),K(1,`No pipe is in use in the rendered part of its template.`),z())}function dD(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,lD,5,0)(6,uD,2,0,`p`,2),z()),e&2){let e=W();D(4),q(e.rows().length),D(),j(e.rows().length?5:6)}}function fD(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 pD=class e{plural=$E;destroyRef=x(ys);rpc=$(null);pageId=$(void 0);component=$.required();canShowPipes=$(!1);showPipe=ev();snapshot=T(void 0);loaded=T(!1);rows=X(()=>fD(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,dD,7,2,`div`,0),e&2&&j(t.loaded()?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})},WE=`pangular:panel-action-result`,GE=6e3,KE=0;function qE(e=window){return e.location.protocol===`chrome-extension:`&&e.parent!==e}function JE(e,t=window){let n=`pa-${Date.now().toString(36)}-${++KE}`;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!==WE||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`}),GE);t.addEventListener(`message`,a),t.parent.postMessage({...e,requestId:n},t.location.origin)})}var YE=class e{available=qE();reveal(e,t){return JE({type:`pangular:reveal-element`,pageId:e,id:t})}openSource(e,t,n){return JE({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=El({token:e,factory:e.ɵfac})};function XE(e){return new Date(e).toLocaleTimeString()}var ZE=/[ \t\n\r]/;function QE(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 tD(e,t){e&1&&(R(0,`span`,11),K(1,`impure`),z())}function nD(e,t){e&1&&(R(0,`span`,11),K(1,`churning`),z())}function rD(e,t){e&1&&(R(0,`span`,11),K(1,`stale?`),z())}function iD(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 aD(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,tD,2,0,`span`,11),A(8,nD,2,0,`span`,11),A(9,rD,2,0,`span`,11),A(10,iD,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 oD(e,t){e&1&&(R(0,`span`,11),K(1,`impure`),z())}function sD(e,t){if(e&1&&(R(0,`span`,6)(1,`span`,9),K(2),z(),R(3,`span`,10),K(4),z(),A(5,oD,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 cD(e,t){if(e&1&&(R(0,`li`),A(1,aD,11,6,`button`,5)(2,sD,6,3,`span`,6),z()),e&2){let e=W(3);D(),j(e.canShowPipes()?1:2)}}function lD(e,t){if(e&1&&(R(0,`ul`,3),M(1,cD,3,1,`li`,null,eD),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 uD(e,t){e&1&&(R(0,`p`,2),K(1,`No pipe is in use in the rendered part of its template.`),z())}function dD(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,lD,5,0)(6,uD,2,0,`p`,2),z()),e&2){let e=W();D(4),q(e.rows().length),D(),j(e.rows().length?5:6)}}function fD(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 pD=class e{plural=$E;destroyRef=x(ys);rpc=$(null);pageId=$(void 0);component=$.required();canShowPipes=$(!1);showPipe=nv();snapshot=T(void 0);loaded=T(!1);rows=X(()=>fD(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,dD,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 mD(e){let t=e?.pages;return t&&typeof t==`object`?t:{}}function hD(e){let t=x(ys),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(mD(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 gD(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 _D=[`*`];function vD(e,t){if(e&1&&(R(0,`div`,1)(1,`p`,2),K(2),z(),R(3,`p`,3),K(4),Eg(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,bu)}}var yD=`https://pangular-inspector.dev/getting-started/installation/#supported-angular-versions`,bD=class e{page=$(null);capability=$.required();missing=$(!1,{transform:dv});compact=$(!1,{transform:dv});docsUrl=yD;text=X(()=>{let e=this.page();return!this.missing()&&!rT(e,this.capability())?null:iT(this.capability(),e?.version)});title=X(()=>{let e=this.page()?.version;return e?`Not available on Angular ${eT(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:_D,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&&(Tg(),A(0,vD,8,5,`div`,0)),e&2){let e;j((e=t.text())?0:-1,e)}},styles:[`[_nghost-%COMP%] { +}`]})};function mD(e){let t=e?.pages;return t&&typeof t==`object`?t:{}}function hD(e){let t=x(ys),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(mD(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 gD(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 _D=[`*`];function vD(e,t){if(e&1&&(R(0,`div`,1)(1,`p`,2),K(2),z(),R(3,`p`,3),K(4),Og(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,Su)}}var yD=`https://pangular-inspector.dev/getting-started/installation/#supported-angular-versions`,bD=class e{page=$(null);capability=$.required();missing=$(!1,{transform:pv});compact=$(!1,{transform:pv});docsUrl=yD;text=X(()=>{let e=this.page();return!this.missing()&&!rT(e,this.capability())?null:iT(this.capability(),e?.version)});title=X(()=>{let e=this.page()?.version;return e?`Not available on Angular ${eT(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:_D,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&&(Dg(),A(0,vD,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 xD(e){return e?.platform===`angular-native`}function SD(e){return xD(e)||e?.platform===`nativescript`}function CD(e,t){let n=Object.values(e??{}).filter(xD);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 wD=[`trigger`],TD=[`list`],ED=(e,t)=>t.value;function DD(e,t){if(e&1&&(R(0,`span`,4),K(1),z()),e&2){let e=W();D(),q(e.current().hint)}}function OD(e,t){if(e&1&&(R(0,`span`,15),K(1),z()),e&2){let e=W().$implicit;D(),q(e.hint)}}function kD(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),sg(2,`path`,13),z(),ls(),R(3,`span`,14),K(4),z(),A(5,OD,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 AD(e,t){if(e&1&&(R(0,`li`,10),K(1),z()),e&2){let e=W(2);D(),q(e.emptyText())}}function jD(e,t){if(e&1&&(R(0,`ul`,8,1),Lh(`list-in`),U(`pointerdown`,function(e){return e.preventDefault()}),M(2,kD,6,9,`li`,9,ED,!1,AD,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 MD=0,ND=class e{options=$.required();value=av(null);placeholder=$(`Select…`);ariaLabel=$(``);labelledBy=$(``);describedBy=$(``);disabled=$(!1);emptyText=$(`Nothing to choose`);uid=`app-select-${++MD}`;open=T(!1);active=T(-1);dropUp=T(!1);current=X(()=>this.options().find(e=>e.value===this.value())??null);host=x(kl);injector=x(_s);trigger=sv.required(`trigger`);list=sv(`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&&Og(t.trigger,wD,5)(t.list,TD,5),e&2&&kg(2)},hostAttrs:[1,`app-select`],hostVars:2,hostBindings:function(e,t){e&1&&H(`pointerdown`,function(e){return t.onOutside(e)},Su),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,DD,2,1,`span`,4),w(),R(5,`svg`,5),sg(6,`path`,6),z()(),A(7,jD,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 xD(e){return e?.platform===`angular-native`}function SD(e){return xD(e)||e?.platform===`nativescript`}function CD(e,t){let n=Object.values(e??{}).filter(xD);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 wD=[`trigger`],TD=[`list`],ED=(e,t)=>t.value;function DD(e,t){if(e&1&&(R(0,`span`,4),K(1),z()),e&2){let e=W();D(),q(e.current().hint)}}function OD(e,t){if(e&1&&(R(0,`span`,15),K(1),z()),e&2){let e=W().$implicit;D(),q(e.hint)}}function kD(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),lg(2,`path`,13),z(),ls(),R(3,`span`,14),K(4),z(),A(5,OD,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 AD(e,t){if(e&1&&(R(0,`li`,10),K(1),z()),e&2){let e=W(2);D(),q(e.emptyText())}}function jD(e,t){if(e&1&&(R(0,`ul`,8,1),zh(`list-in`),U(`pointerdown`,function(e){return e.preventDefault()}),M(2,kD,6,9,`li`,9,ED,!1,AD,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 MD=0,ND=class e{options=$.required();value=sv(null);placeholder=$(`Select…`);ariaLabel=$(``);labelledBy=$(``);describedBy=$(``);disabled=$(!1);emptyText=$(`Nothing to choose`);uid=`app-select-${++MD}`;open=T(!1);active=T(-1);dropUp=T(!1);current=X(()=>this.options().find(e=>e.value===this.value())??null);host=x(kl);injector=x(_s);trigger=lv.required(`trigger`);list=lv(`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&&Ag(t.trigger,wD,5)(t.list,TD,5),e&2&&jg(2)},hostAttrs:[1,`app-select`],hostVars:2,hostBindings:function(e,t){e&1&&H(`pointerdown`,function(e){return t.onOutside(e)},wu),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,DD,2,1,`span`,4),w(),R(5,`svg`,5),lg(6,`path`,6),z()(),A(7,jD,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 PD(e,t){let n=Xw(t);if(Zw(n))return{nodes:e,matches:0};let r=0,i=e=>e.flatMap(e=>{let t=Qw(e,n);t&&r++;let a=i(e.children);return t||a.length?[{...e,children:a}]:[]});return{nodes:i(e),matches:r}}function FD(e){return e.flatMap(e=>e.kind===`directive`?FD(e.children):[{...e,children:FD(e.children)}])}function ID(e){return(e.attributes?.length?e.attributes:e.directives??[e.name]).map(e=>`[${e}]`).join(` `)}var LD={hydrated:`Hydrated`,skipped:`Skipped`,mismatched:`Mismatch`,client:`Client`};function RD(e){return LD[e]}function zD(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 BD(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 VD(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 HD(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&&!UD(t.roots,i)?{pageId:r,selectedId:null,detailId:n,destroyed:i}:{pageId:r,selectedId:i,detailId:n,destroyed:null}}function UD(e,t){return e.some(e=>e.id===t||UD(e.children,t))}function WD(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 GD=(e,t)=>t.key,KD=(e,t)=>t.id;function qD(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 JD(e,t){if(e&1&&(R(0,`li`)(1,`span`,9),K(2),z(),K(3),z()),e&2){let e=t.$implicit;Qg(`count count-`+e.key),D(2),q(e.value),D(),J(` `,e.label,` `)}}function YD(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 XD(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 ZD(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,YD,4,1,`span`,15),A(7,XD,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 QD(e,t){if(e&1&&(R(0,`h3`,10),K(1,`Mismatches`),z(),R(2,`ul`,11),M(3,ZD,8,4,`li`,null,KD),z()),e&2){let e=W(2);D(3),N(e.mismatches)}}function $D(e,t){if(e&1){let e=B();R(0,`div`,3)(1,`ul`,4),M(2,JD,4,4,`li`,5,GD),z(),R(4,`button`,6),U(`click`,function(){return S(e),C(W(2).toggleOverlay())}),w(),R(5,`svg`,7),sg(6,`rect`,8),z(),K(7,` Outline on page `),z()(),A(8,QD,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 eO(e,t){e&1&&A(0,qD,5,0,`p`,2)(1,$D,9,2),e&2&&j(+!!t.hydrated)}function tO(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 nO=class e{report=$(void 0);overlay=ev();showNode=ev();highlight=ev();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,eO,2,1)(4,tO,5,0,`p`,2),z()),e&2){let e;D(3),j((e=t.report())?3:4,e)}},styles:[`.hydration[_ngcontent-%COMP%] { +}`]})};function PD(e,t){let n=Xw(t);if(Zw(n))return{nodes:e,matches:0};let r=0,i=e=>e.flatMap(e=>{let t=Qw(e,n);t&&r++;let a=i(e.children);return t||a.length?[{...e,children:a}]:[]});return{nodes:i(e),matches:r}}function FD(e){return e.flatMap(e=>e.kind===`directive`?FD(e.children):[{...e,children:FD(e.children)}])}function ID(e){return(e.attributes?.length?e.attributes:e.directives??[e.name]).map(e=>`[${e}]`).join(` `)}var LD={hydrated:`Hydrated`,skipped:`Skipped`,mismatched:`Mismatch`,client:`Client`};function RD(e){return LD[e]}function zD(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 BD(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 VD(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 HD(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&&!UD(t.roots,i)?{pageId:r,selectedId:null,detailId:n,destroyed:i}:{pageId:r,selectedId:i,detailId:n,destroyed:null}}function UD(e,t){return e.some(e=>e.id===t||UD(e.children,t))}function WD(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 GD=(e,t)=>t.key,KD=(e,t)=>t.id;function qD(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 JD(e,t){if(e&1&&(R(0,`li`)(1,`span`,9),K(2),z(),K(3),z()),e&2){let e=t.$implicit;e_(`count count-`+e.key),D(2),q(e.value),D(),J(` `,e.label,` `)}}function YD(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 XD(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 ZD(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,YD,4,1,`span`,15),A(7,XD,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 QD(e,t){if(e&1&&(R(0,`h3`,10),K(1,`Mismatches`),z(),R(2,`ul`,11),M(3,ZD,8,4,`li`,null,KD),z()),e&2){let e=W(2);D(3),N(e.mismatches)}}function $D(e,t){if(e&1){let e=B();R(0,`div`,3)(1,`ul`,4),M(2,JD,4,4,`li`,5,GD),z(),R(4,`button`,6),U(`click`,function(){return S(e),C(W(2).toggleOverlay())}),w(),R(5,`svg`,7),lg(6,`rect`,8),z(),K(7,` Outline on page `),z()(),A(8,QD,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 eO(e,t){e&1&&A(0,qD,5,0,`p`,2)(1,$D,9,2),e&2&&j(+!!t.hydrated)}function tO(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 nO=class e{report=$(void 0);overlay=nv();showNode=nv();highlight=nv();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,eO,2,1)(4,tO,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 rO(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(),b_(` 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,bu)}}var iO=`https://pangular-inspector.dev/getting-started/configuration/#limits`,aO=class e{dropped=$(0);max=$.required();what=$.required();limit=$.required();docsUrl=iO;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,rO,7,6,`p`,0),e&2&&j(t.dropped()>0?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})};function rO(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(),S_(` 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,Su)}}var iO=`https://pangular-inspector.dev/getting-started/configuration/#limits`,aO=class e{dropped=$(0);max=$.required();what=$.required();limit=$.required();docsUrl=iO;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,rO,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; -}`]})},oO=1e3;function sO(e){return typeof e==`number`&&Number.isFinite(e)&&e>0&&e<=oO?e:16}var cO=864e13,lO=200,uO=300,dO=100,fO=10,pO=100,mO=2e3,hO=2e3,gO=4e3,_O=1e3,vO=100,yO=3,bO=50,xO={component:`c`,hook:`h`,afterRender:`r`,output:`o`},SO=Object.values(xO),CO=e=>!!e&&typeof e==`object`&&!Array.isArray(e),wO=e=>typeof e==`number`&&Number.isFinite(e)&&e>=0?e:0,TO=(e,t)=>typeof e==`string`?e.slice(0,t):``,EO=e=>wO(e)>0?wO(e):void 0,DO=(e,t)=>Array.isArray(e)?e.slice(0,t):[];function OO(e){if(!CO(e))return null;let t=TO(e.name,lO);return t?{name:t,checks:wO(e.checks),ms:wO(e.ms)}:null}function kO(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>_O||typeof o!=`string`||!SO.includes(o)?null:[n,r,wO(i),a,o]}function AO(e,t,n){if(!CO(e)||typeof e.id!=`number`)return null;let r=DO(e.components,fO).map(OO).filter(e=>!!e),i=TO(e.trigger,uO),a=DO(e.spans,40).map(e=>kO(e,t)).filter(e=>!!e),o=Array.isArray(e.spans)?e.spans.length-40:0,s=Math.floor(wO(e.droppedSpans))+Math.max(0,o),c={t:typeof e.t==`number`?wO(e.t):void 0,hookMs:EO(e.hookMs),afterRenderMs:EO(e.afterRenderMs),outputMs:EO(e.outputMs)},l=PO(e.cause),u=EO(e.refreshed),d=EO(e.unchanged);return{id:wO(e.id),at:wO(e.at),ms:wO(e.ms),passes:wO(e.passes),...i?{trigger:i}:{},checks:wO(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}:{},...wO(e.ms)>n?{slow:!0}:{}}}var jO=[`event`,`http`,`timer`,`signal`,`effect`,`markForCheck`,`input`,`view`,`tick`,`zone`,`unknown`],MO={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`},NO=e=>typeof e==`string`&&jO.includes(e);function PO(e){if(!CO(e)||!NO(e.kind))return;let t=[`component`,`listener`,`event`,`target`,`signal`,`task`],n={kind:e.kind};NO(e.via)&&(n.via=e.via);for(let r of t){let t=TO(e[r],lO);t&&(n[r]=t)}e.zone===!0&&(n.zone=!0);let r=DO(e.stack,yO).map(e=>TO(e,uO)).filter(Boolean);r.length&&(n.stack=r);let i=Math.floor(wO(e.more));return i&&(n.more=i),n}function FO(e){if(!CO(e))return null;let t=TO(e.name,lO);if(!t)return null;let n=e.strategy;return{name:t,refreshed:Math.floor(wO(e.refreshed)),unchanged:Math.floor(wO(e.unchanged)),...n===`OnPush`||n===`Eager`?{strategy:n}:{}}}function IO(e){if(!CO(e))return null;let t=TO(e.name,lO),n=TO(e.input,lO);if(!t||!n)return null;let r=TO(e.parent,lO);return{name:t,input:n,...r?{parent:r}:{},inPlace:Math.floor(wO(e.inPlace)),sameContents:Math.floor(wO(e.sameContents))}}function LO(e){if(!CO(e))return null;let t=TO(e.name,lO);if(!t)return null;let n=DO(e.tasks,3).map(e=>TO(e,lO)).filter(Boolean);return{name:t,ticks:Math.floor(wO(e.ticks)),...n.length?{tasks:n}:{}}}function RO(e){if(!CO(e))return;let t={};if(CO(e.causes))for(let n of jO){let r=Math.floor(wO(e.causes[n]));r&&(t[n]=r)}let n=DO(e.components,pO).map(FO).filter(e=>!!e),r=DO(e.inputs,bO).map(IO).filter(e=>!!e),i=DO(e.zone,bO).map(LO).filter(e=>!!e),a=Math.floor(wO(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 zO(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(`${MO[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 ${MO[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 BO(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 VO(e){let t=OO(e);return!t||!CO(e)?null:{...t,maxMs:wO(e.maxMs),cycles:wO(e.cycles)}}function HO(e){if(!CO(e))return null;let t=TO(e.name,lO),n=TO(e.hook,dO);if(!t||!n)return null;let{calls:r,ms:i,maxMs:a}=e;return{name:t,hook:n,calls:wO(r),ms:wO(i),maxMs:wO(a)}}function UO(e){if(!CO(e))return null;let t=TO(e.name,lO);if(!t)return null;let n=TO(e.listener,lO);return{name:t,...n?{listener:n}:{},calls:wO(e.calls),ms:wO(e.ms),maxMs:wO(e.maxMs)}}function WO(e){if(CO(e)&&wO(e.runs))return{runs:wO(e.runs),ms:wO(e.ms),maxMs:wO(e.maxMs)}}function GO(e,t){if(!CO(e))return null;let n=DO(e.spanNames,gO).map(e=>TO(e,uO)),r=sO(e.slowMs),i=Array.isArray(e.cycles)?e.cycles.slice(-Math.min(t,hO)).map(e=>AO(e,n.length,r)).filter(e=>!!e):[],a={},o=0;if(CO(e.hosts)){let t=Object.entries(e.hosts);o=Math.max(0,t.length-mO);for(let[e,n]of t.slice(0,mO))e.length<50&&wO(n)&&(a[e]=wO(n))}let s=Array.isArray(e.components)?e.components:[],c=Math.floor(wO(e.droppedClasses))+Math.max(0,s.length-pO),l=Math.floor(wO(e.droppedHosts))+o,u=DO(e.hooks,vO).map(HO).filter(e=>!!e),d=DO(e.outputs,vO).map(UO).filter(e=>!!e),f=Math.max(0,DO(e.hooks,1/0).length-vO)+Math.max(0,DO(e.outputs,1/0).length-vO),p=Math.floor(wO(e.droppedTimings))+f,m=WO(e.afterRender),ee=i.some(e=>e.spans?.length),h=RO(e.diagnosis);return{recording:e.recording===!0,startedAt:typeof e.startedAt==`number`&&e.startedAt<=cO?wO(e.startedAt):null,dropped:wO(e.dropped),slowMs:r,cycles:i,components:s.slice(0,pO).map(VO).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 KO=`pangular-inspector/change-detection`;function qO(e,t,n=Date.now()){return{format:KO,version:1,exportedAt:n,pageId:t,recording:{...GO(e,hO)??e,recording:!1,hosts:{}}}}function JO(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(!CO(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=CO(n.recording)?n.recording:n;if(!Array.isArray(r.cycles))return{ok:!1,error:`The file has no change detection cycles.`};let i=GO(r,t);if(!i)return{ok:!1,error:`The file is not a recording.`};let a=TO(n.pageId??r.pageId,49)||`imported`,o=EO(n.exportedAt);return{ok:!0,pageId:a,...o?{exportedAt:o}:{},recording:{...i,recording:!1}}}var YO=1,XO=1,ZO=2,QO={c:`component`,h:`lifecycle-hook`,r:`after-render`,o:`output`},$O=e=>Math.round(e*1e6)/1e3;function ek(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:YO,tid:XO,ts:$O(e),dur:$O(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:zO(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===xO.output){let n=e+i;a.push({name:l,cat:QO[d],ph:`X`,pid:YO,tid:ZO,ts:$O(n),dur:$O(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=$O((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:YO,tid:e,args:{name:n}});return{traceEvents:[l(0,`process_name`,`Angular change detection (page ${t})`),l(XO,`thread_name`,`Change detection`),l(ZO,`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<=cO?{startedAt:new Date(e.startedAt).toISOString()}:{}}}}function tk(e,t=16){return e.ms>t}function nk(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}function rk(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 ik(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 ak(e,t=16){let n=e.reduce((e,t)=>Math.max(e,t.ms),0);return Math.max(n,t*1.25)}function ok(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 sk={c:`component`,h:`hook`,r:`afterRender`,o:`output`};function ck(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 lk(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,dk=(e,t)=>t.name,fk=(e,t)=>t.name+`.`+t.input;function pk(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 mk(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 hk(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,mk,5,2,`tr`,null,uk),z()()),e&2){let e=W(2);D(8),N(e.causes())}}function gk(e,t){e&1&&(R(0,`p`,3),K(1,`No cycle has a cause yet.`),z())}function _k(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 vk(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,_k,7,3,`tr`,null,dk),z()()),e&2){let e=W(3);D(10),N(e.zone())}}function yk(e,t){if(e&1&&(R(0,`p`,3),K(1),z()),e&2){let e=W(3);D(),q(e.zoneNote())}}function bk(e,t){if(e&1&&(R(0,`div`)(1,`h4`),K(2,`Depends on zone.js`),z(),A(3,vk,12,0,`table`)(4,yk,2,1,`p`,3),z()),e&2){let e=W(),t=W();D(3),j(t.zone().length?3:e.triggers?4:-1)}}function xk(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 Sk(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 Ck(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,Sk,9,5,`tr`,null,dk),z()()),e&2){let e=W(2);D(12),N(e.wasted())}}function wk(e,t){e&1&&(R(0,`p`,3),K(1,`Every refreshed check changed something.`),z())}function Tk(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 Ek(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,Tk,9,5,`tr`,null,fk),z()()),e&2){let e=W(2);D(14),N(e.inputs())}}function Dk(e,t){if(e&1&&(R(0,`li`),K(1),z()),e&2){let e=t.$implicit;D(),q(e.text)}}function Ok(e,t){if(e&1&&(R(0,`h4`),K(1,`Hints`),z(),R(2,`ul`,8),M(3,Dk,2,1,`li`,null,Yh),z()),e&2){let e=W(2);D(3),N(e.hints())}}function kk(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,pk,2,0,`p`,3)(8,hk,10,0,`table`)(9,gk,2,0,`p`,3),z(),A(10,bk,5,1,`div`),z(),R(11,`h4`),K(12,`Wasted checks`),z(),A(13,xk,2,0,`p`,3)(14,Ck,14,0,`table`)(15,wk,2,0,`p`,3),A(16,Ek,16,0),A(17,Ok,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 Ak=10,jk=class e{page=$(null);diagnosis=X(()=>this.page()?.diagnosis??null);causes=X(()=>{let e=this.diagnosis()?.causes??{};return jO.filter(t=>e[t]).map(t=>({kind:t,label:MO[t],count:e[t]}))});zone=X(()=>(this.diagnosis()?.zone??[]).slice(0,Ak));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,Ak));inputs=X(()=>(this.diagnosis()?.inputs??[]).slice(0,Ak));hints=X(()=>BO(this.diagnosis()??void 0).slice(0,Ak));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,kk,18,5,`section`,0),e&2){let e;j((e=t.diagnosis())?0:-1,e)}},styles:[`[_nghost-%COMP%] { +}`]})},oO=1e3;function sO(e){return typeof e==`number`&&Number.isFinite(e)&&e>0&&e<=oO?e:16}var cO=864e13,lO=200,uO=300,dO=100,fO=10,pO=100,mO=2e3,hO=2e3,gO=4e3,_O=1e3,vO=100,yO=3,bO=50,xO={component:`c`,hook:`h`,afterRender:`r`,output:`o`},SO=Object.values(xO),CO=e=>!!e&&typeof e==`object`&&!Array.isArray(e),wO=e=>typeof e==`number`&&Number.isFinite(e)&&e>=0?e:0,TO=(e,t)=>typeof e==`string`?e.slice(0,t):``,EO=e=>wO(e)>0?wO(e):void 0,DO=(e,t)=>Array.isArray(e)?e.slice(0,t):[];function OO(e){if(!CO(e))return null;let t=TO(e.name,lO);return t?{name:t,checks:wO(e.checks),ms:wO(e.ms)}:null}function kO(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>_O||typeof o!=`string`||!SO.includes(o)?null:[n,r,wO(i),a,o]}function AO(e,t,n){if(!CO(e)||typeof e.id!=`number`)return null;let r=DO(e.components,fO).map(OO).filter(e=>!!e),i=TO(e.trigger,uO),a=DO(e.spans,40).map(e=>kO(e,t)).filter(e=>!!e),o=Array.isArray(e.spans)?e.spans.length-40:0,s=Math.floor(wO(e.droppedSpans))+Math.max(0,o),c={t:typeof e.t==`number`?wO(e.t):void 0,hookMs:EO(e.hookMs),afterRenderMs:EO(e.afterRenderMs),outputMs:EO(e.outputMs)},l=PO(e.cause),u=EO(e.refreshed),d=EO(e.unchanged);return{id:wO(e.id),at:wO(e.at),ms:wO(e.ms),passes:wO(e.passes),...i?{trigger:i}:{},checks:wO(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}:{},...wO(e.ms)>n?{slow:!0}:{}}}var jO=[`event`,`http`,`timer`,`signal`,`effect`,`markForCheck`,`input`,`view`,`tick`,`zone`,`unknown`],MO={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`},NO=e=>typeof e==`string`&&jO.includes(e);function PO(e){if(!CO(e)||!NO(e.kind))return;let t=[`component`,`listener`,`event`,`target`,`signal`,`task`],n={kind:e.kind};NO(e.via)&&(n.via=e.via);for(let r of t){let t=TO(e[r],lO);t&&(n[r]=t)}e.zone===!0&&(n.zone=!0);let r=DO(e.stack,yO).map(e=>TO(e,uO)).filter(Boolean);r.length&&(n.stack=r);let i=Math.floor(wO(e.more));return i&&(n.more=i),n}function FO(e){if(!CO(e))return null;let t=TO(e.name,lO);if(!t)return null;let n=e.strategy;return{name:t,refreshed:Math.floor(wO(e.refreshed)),unchanged:Math.floor(wO(e.unchanged)),...n===`OnPush`||n===`Eager`?{strategy:n}:{}}}function IO(e){if(!CO(e))return null;let t=TO(e.name,lO),n=TO(e.input,lO);if(!t||!n)return null;let r=TO(e.parent,lO);return{name:t,input:n,...r?{parent:r}:{},inPlace:Math.floor(wO(e.inPlace)),sameContents:Math.floor(wO(e.sameContents))}}function LO(e){if(!CO(e))return null;let t=TO(e.name,lO);if(!t)return null;let n=DO(e.tasks,3).map(e=>TO(e,lO)).filter(Boolean);return{name:t,ticks:Math.floor(wO(e.ticks)),...n.length?{tasks:n}:{}}}function RO(e){if(!CO(e))return;let t={};if(CO(e.causes))for(let n of jO){let r=Math.floor(wO(e.causes[n]));r&&(t[n]=r)}let n=DO(e.components,pO).map(FO).filter(e=>!!e),r=DO(e.inputs,bO).map(IO).filter(e=>!!e),i=DO(e.zone,bO).map(LO).filter(e=>!!e),a=Math.floor(wO(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 zO(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(`${MO[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 ${MO[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 BO(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 VO(e){let t=OO(e);return!t||!CO(e)?null:{...t,maxMs:wO(e.maxMs),cycles:wO(e.cycles)}}function HO(e){if(!CO(e))return null;let t=TO(e.name,lO),n=TO(e.hook,dO);if(!t||!n)return null;let{calls:r,ms:i,maxMs:a}=e;return{name:t,hook:n,calls:wO(r),ms:wO(i),maxMs:wO(a)}}function UO(e){if(!CO(e))return null;let t=TO(e.name,lO);if(!t)return null;let n=TO(e.listener,lO);return{name:t,...n?{listener:n}:{},calls:wO(e.calls),ms:wO(e.ms),maxMs:wO(e.maxMs)}}function WO(e){if(CO(e)&&wO(e.runs))return{runs:wO(e.runs),ms:wO(e.ms),maxMs:wO(e.maxMs)}}function GO(e,t){if(!CO(e))return null;let n=DO(e.spanNames,gO).map(e=>TO(e,uO)),r=sO(e.slowMs),i=Array.isArray(e.cycles)?e.cycles.slice(-Math.min(t,hO)).map(e=>AO(e,n.length,r)).filter(e=>!!e):[],a={},o=0;if(CO(e.hosts)){let t=Object.entries(e.hosts);o=Math.max(0,t.length-mO);for(let[e,n]of t.slice(0,mO))e.length<50&&wO(n)&&(a[e]=wO(n))}let s=Array.isArray(e.components)?e.components:[],c=Math.floor(wO(e.droppedClasses))+Math.max(0,s.length-pO),l=Math.floor(wO(e.droppedHosts))+o,u=DO(e.hooks,vO).map(HO).filter(e=>!!e),d=DO(e.outputs,vO).map(UO).filter(e=>!!e),f=Math.max(0,DO(e.hooks,1/0).length-vO)+Math.max(0,DO(e.outputs,1/0).length-vO),p=Math.floor(wO(e.droppedTimings))+f,m=WO(e.afterRender),ee=i.some(e=>e.spans?.length),h=RO(e.diagnosis);return{recording:e.recording===!0,startedAt:typeof e.startedAt==`number`&&e.startedAt<=cO?wO(e.startedAt):null,dropped:wO(e.dropped),slowMs:r,cycles:i,components:s.slice(0,pO).map(VO).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 KO=`pangular-inspector/change-detection`;function qO(e,t,n=Date.now()){return{format:KO,version:1,exportedAt:n,pageId:t,recording:{...GO(e,hO)??e,recording:!1,hosts:{}}}}function JO(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(!CO(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=CO(n.recording)?n.recording:n;if(!Array.isArray(r.cycles))return{ok:!1,error:`The file has no change detection cycles.`};let i=GO(r,t);if(!i)return{ok:!1,error:`The file is not a recording.`};let a=TO(n.pageId??r.pageId,49)||`imported`,o=EO(n.exportedAt);return{ok:!0,pageId:a,...o?{exportedAt:o}:{},recording:{...i,recording:!1}}}var YO=1,XO=1,ZO=2,QO={c:`component`,h:`lifecycle-hook`,r:`after-render`,o:`output`},$O=e=>Math.round(e*1e6)/1e3;function ek(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:YO,tid:XO,ts:$O(e),dur:$O(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:zO(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===xO.output){let n=e+i;a.push({name:l,cat:QO[d],ph:`X`,pid:YO,tid:ZO,ts:$O(n),dur:$O(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=$O((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:YO,tid:e,args:{name:n}});return{traceEvents:[l(0,`process_name`,`Angular change detection (page ${t})`),l(XO,`thread_name`,`Change detection`),l(ZO,`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<=cO?{startedAt:new Date(e.startedAt).toISOString()}:{}}}}function tk(e,t=16){return e.ms>t}function nk(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}function rk(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 ik(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 ak(e,t=16){let n=e.reduce((e,t)=>Math.max(e,t.ms),0);return Math.max(n,t*1.25)}function ok(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 sk={c:`component`,h:`hook`,r:`afterRender`,o:`output`};function ck(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 lk(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,dk=(e,t)=>t.name,fk=(e,t)=>t.name+`.`+t.input;function pk(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 mk(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 hk(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,mk,5,2,`tr`,null,uk),z()()),e&2){let e=W(2);D(8),N(e.causes())}}function gk(e,t){e&1&&(R(0,`p`,3),K(1,`No cycle has a cause yet.`),z())}function _k(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 vk(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,_k,7,3,`tr`,null,dk),z()()),e&2){let e=W(3);D(10),N(e.zone())}}function yk(e,t){if(e&1&&(R(0,`p`,3),K(1),z()),e&2){let e=W(3);D(),q(e.zoneNote())}}function bk(e,t){if(e&1&&(R(0,`div`)(1,`h4`),K(2,`Depends on zone.js`),z(),A(3,vk,12,0,`table`)(4,yk,2,1,`p`,3),z()),e&2){let e=W(),t=W();D(3),j(t.zone().length?3:e.triggers?4:-1)}}function xk(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 Sk(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 Ck(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,Sk,9,5,`tr`,null,dk),z()()),e&2){let e=W(2);D(12),N(e.wasted())}}function wk(e,t){e&1&&(R(0,`p`,3),K(1,`Every refreshed check changed something.`),z())}function Tk(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 Ek(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,Tk,9,5,`tr`,null,fk),z()()),e&2){let e=W(2);D(14),N(e.inputs())}}function Dk(e,t){if(e&1&&(R(0,`li`),K(1),z()),e&2){let e=t.$implicit;D(),q(e.text)}}function Ok(e,t){if(e&1&&(R(0,`h4`),K(1,`Hints`),z(),R(2,`ul`,8),M(3,Dk,2,1,`li`,null,Zh),z()),e&2){let e=W(2);D(3),N(e.hints())}}function kk(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,pk,2,0,`p`,3)(8,hk,10,0,`table`)(9,gk,2,0,`p`,3),z(),A(10,bk,5,1,`div`),z(),R(11,`h4`),K(12,`Wasted checks`),z(),A(13,xk,2,0,`p`,3)(14,Ck,14,0,`table`)(15,wk,2,0,`p`,3),A(16,Ek,16,0),A(17,Ok,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 Ak=10,jk=class e{page=$(null);diagnosis=X(()=>this.page()?.diagnosis??null);causes=X(()=>{let e=this.diagnosis()?.causes??{};return jO.filter(t=>e[t]).map(t=>({kind:t,label:MO[t],count:e[t]}))});zone=X(()=>(this.diagnosis()?.zone??[]).slice(0,Ak));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,Ak));inputs=X(()=>(this.diagnosis()?.inputs??[]).slice(0,Ak));hints=X(()=>BO(this.diagnosis()??void 0).slice(0,Ak));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,kk,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; -}`]})},Mk=(e,t)=>t.cycle.id,Nk=(e,t)=>t.id;function Pk(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 Fk(e,t){if(e&1&&sg(0,`div`,28),e&2){let e=t;Zg(`left`,e.left,`%`)(`width`,e.width,`%`)}}function Ik(e,t){if(e&1&&(R(0,`div`,29),sg(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(),Zg(`height`,e.height,`%`)}}function Lk(e,t){e&1&&(R(0,`span`,33),K(1,`over budget`),z())}function Rk(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 zk(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 Bk(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,Lk,2,0,`span`,33),z(),A(7,Rk,4,1,`p`),R(8,`p`),K(9),z(),M(10,zk,5,2,`p`,34,Yh),z()),e&2){let e=t,n=W();Zg(`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),b_(` `,e.cycle.checks,` `,e.cycle.checks===1?`check`:`checks`,`, `,e.cycle.passes,` `,e.cycle.passes===1?`pass`:`passes`,` `),D(),N(e.top)}}function Vk(e,t){if(e&1&&sg(0,`span`),e&2){let e=t.$implicit;G(`over`,e.over)}}function Hk(e,t){if(e&1&&K(0),e&2){let e=t,n=W(2);Y(` `,e.name,` (`,n.fmt(e.ms),`) `)}}function Uk(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,Hk,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 Wk=0,Gk=80,Kk=10,qk=class e{cycles=$([]);range=av(null);slowMs=$(16);gapUntil=Gk;budgetLabel=X(()=>`${this.slowMs()} ms budget`);uid=`cd-chart-${Wk++}`;hintId=`${this.uid}-hint`;active=T(null);anchor=null;dragging=!1;hover=T(null);focused=T(!1);max=X(()=>ak(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:tk(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||ark(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=>tk(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:tk(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}`,nk(e.ms)];tk(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} ${nk(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+Kk;break;case`PageUp`:r=n-Kk;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()},xu)(`pointercancel`,function(){return t.endDrag()},xu)},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,Pk,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,Fk,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,Ik,2,12,`div`,13,Mk),z(),A(28,Bk,12,12,`div`,14),z()(),R(29,`div`,15),M(30,Vk,1,2,`span`,16,Mk),z(),R(32,`ul`,17)(33,`li`),sg(34,`span`,18),K(35,`Within budget`),z(),R(36,`li`),sg(37,`span`,19)(38,`span`,20),K(39,`Over budget `),z(),R(40,`li`),sg(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,Uk,15,7,`tr`,null,Nk),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(),Zg(`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%] { +}`]})},Mk=(e,t)=>t.cycle.id,Nk=(e,t)=>t.id;function Pk(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 Fk(e,t){if(e&1&&lg(0,`div`,28),e&2){let e=t;$g(`left`,e.left,`%`)(`width`,e.width,`%`)}}function Ik(e,t){if(e&1&&(R(0,`div`,29),lg(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(),$g(`height`,e.height,`%`)}}function Lk(e,t){e&1&&(R(0,`span`,33),K(1,`over budget`),z())}function Rk(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 zk(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 Bk(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,Lk,2,0,`span`,33),z(),A(7,Rk,4,1,`p`),R(8,`p`),K(9),z(),M(10,zk,5,2,`p`,34,Zh),z()),e&2){let e=t,n=W();$g(`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),S_(` `,e.cycle.checks,` `,e.cycle.checks===1?`check`:`checks`,`, `,e.cycle.passes,` `,e.cycle.passes===1?`pass`:`passes`,` `),D(),N(e.top)}}function Vk(e,t){if(e&1&&lg(0,`span`),e&2){let e=t.$implicit;G(`over`,e.over)}}function Hk(e,t){if(e&1&&K(0),e&2){let e=t,n=W(2);Y(` `,e.name,` (`,n.fmt(e.ms),`) `)}}function Uk(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,Hk,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 Wk=0,Gk=80,Kk=10,qk=class e{cycles=$([]);range=sv(null);slowMs=$(16);gapUntil=Gk;budgetLabel=X(()=>`${this.slowMs()} ms budget`);uid=`cd-chart-${Wk++}`;hintId=`${this.uid}-hint`;active=T(null);anchor=null;dragging=!1;hover=T(null);focused=T(!1);max=X(()=>ak(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:tk(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||ark(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=>tk(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:tk(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}`,nk(e.ms)];tk(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} ${nk(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+Kk;break;case`PageUp`:r=n-Kk;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()},Cu)(`pointercancel`,function(){return t.endDrag()},Cu)},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,Pk,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,Fk,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,Ik,2,12,`div`,13,Mk),z(),A(28,Bk,12,12,`div`,14),z()(),R(29,`div`,15),M(30,Vk,1,2,`span`,16,Mk),z(),R(32,`ul`,17)(33,`li`),lg(34,`span`,18),K(35,`Within budget`),z(),R(36,`li`),lg(37,`span`,19)(38,`span`,20),K(39,`Over budget `),z(),R(40,`li`),lg(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,Uk,15,7,`tr`,null,Nk),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(),$g(`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; } -}`]})},Jk=(e,t)=>t.id,Yk=(e,t)=>t.index,Xk=(e,t)=>t.kind;function Zk(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 Qk(e,t){if(e&1&&(R(0,`span`),K(1),z()),e&2){let e=t.$implicit;Zg(`left`,e.x,`%`)(`width`,e.w,`%`),D(),J(`cycle `,e.id)}}function $k(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);Qg(k_(`block kind-`,e.kind)),Zg(`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 eA(e,t){if(e&1&&(R(0,`li`),sg(1,`span`,13),K(2),z()),e&2){let e=t.$implicit;D(),Qg(k_(`key kind-`,e.kind)),D(),q(e.label)}}function tA(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 nA(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(),Zg(`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 rA(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,nA,15,9,`tr`,null,Yk),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 iA(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,Qk,2,5,`span`,3,Jk),z(),R(4,`div`,4),M(5,$k,3,16,`button`,5,Yk),z()(),R(7,`p`,6),K(8),z(),R(9,`ul`,7),M(10,eA,3,4,`li`,null,Xk),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,tA,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,rA,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),Zg(`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 aA(e,t){if(e&1&&(R(0,`h3`),K(1,`Spans in the picked cycles`),z(),A(2,Zk,2,2,`p`,0)(3,iA,19,6)),e&2){let e,t=W();D(2),j(t.tooMany()?2:(e=t.graph())?3:-1,e)}}var oA=22;function sA(e,t){for(let n=e.length-1;n>=0;n--)if(t(e[n]))return e[n]}var cA=class e{cycles=$([]);names=$([]);scope=$(`the recording`);pick=ev();row=oA;max=30;kinds=[`c`,`h`,`r`,`o`].map(e=>({kind:e,label:sk[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:lk(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 nk(e)}kindLabel(e){return sk[e.kind]}onToggle(e){this.tableOpen.set(e.target.open)}describe(e){let t=[e.name,sk[e.kind],`${nk(e.ms)} total`];return e.selfMs!==e.ms&&t.push(`${nk(e.selfMs)} self`),t.push(e.start<0?`cycle ${e.cycleId}, ${nk(-e.start)} before it started`:`cycle ${e.cycleId} at ${nk(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=sA(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,aA,4,1),e&2&&j(t.hasSpans()?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})},Jk=(e,t)=>t.id,Yk=(e,t)=>t.index,Xk=(e,t)=>t.kind;function Zk(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 Qk(e,t){if(e&1&&(R(0,`span`),K(1),z()),e&2){let e=t.$implicit;$g(`left`,e.x,`%`)(`width`,e.w,`%`),D(),J(`cycle `,e.id)}}function $k(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);e_(j_(`block kind-`,e.kind)),$g(`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 eA(e,t){if(e&1&&(R(0,`li`),lg(1,`span`,13),K(2),z()),e&2){let e=t.$implicit;D(),e_(j_(`key kind-`,e.kind)),D(),q(e.label)}}function tA(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 nA(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(),$g(`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 rA(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,nA,15,9,`tr`,null,Yk),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 iA(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,Qk,2,5,`span`,3,Jk),z(),R(4,`div`,4),M(5,$k,3,16,`button`,5,Yk),z()(),R(7,`p`,6),K(8),z(),R(9,`ul`,7),M(10,eA,3,4,`li`,null,Xk),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,tA,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,rA,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),$g(`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 aA(e,t){if(e&1&&(R(0,`h3`),K(1,`Spans in the picked cycles`),z(),A(2,Zk,2,2,`p`,0)(3,iA,19,6)),e&2){let e,t=W();D(2),j(t.tooMany()?2:(e=t.graph())?3:-1,e)}}var oA=22;function sA(e,t){for(let n=e.length-1;n>=0;n--)if(t(e[n]))return e[n]}var cA=class e{cycles=$([]);names=$([]);scope=$(`the recording`);pick=nv();row=oA;max=30;kinds=[`c`,`h`,`r`,`o`].map(e=>({kind:e,label:sk[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:lk(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 nk(e)}kindLabel(e){return sk[e.kind]}onToggle(e){this.tableOpen.set(e.target.open)}describe(e){let t=[e.name,sk[e.kind],`${nk(e.ms)} total`];return e.selfMs!==e.ms&&t.push(`${nk(e.selfMs)} self`),t.push(e.start<0?`cycle ${e.cycleId}, ${nk(-e.start)} before it started`:`cycle ${e.cycleId} at ${nk(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=sA(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,aA,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 lA(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 uA(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,lA,9,5,`tr`,null,Yh),z()()()),e&2){let e=W(2);D(15),N(e.hooks())}}function dA(e,t){if(e&1&&K(0),e&2){let e=W().$implicit;J(` (`,e.listener,`) `)}}function fA(e,t){if(e&1&&(R(0,`tr`)(1,`td`,5),K(2),A(3,dA,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 pA(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,fA,10,5,`tr`,null,Yh),z()()()),e&2){let e=W(2);D(15),N(e.outputs())}}function mA(e,t){if(e&1&&(R(0,`p`,1),K(1),z()),e&2){let e=t,n=W(2);D(),b_(` afterRender callbacks ran `,e.runs,` `,e.runs===1?`time`:`times`,`, `,n.ms(e.ms),` in total, slowest `,n.ms(e.maxMs),`. `)}}function hA(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 gA(e,t){if(e&1&&(R(0,`div`,0),A(1,uA,17,0,`div`),A(2,pA,17,0,`div`),z(),A(3,mA,2,4,`p`,1),A(4,hA,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 _A=10;function vA(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}var yA=class e{page=$(null);hooks=X(()=>(this.page()?.hooks??[]).slice(0,_A));outputs=X(()=>(this.page()?.outputs??[]).slice(0,_A));afterRender=X(()=>{let e=this.page()?.afterRender;return e?.runs?e:null});dropped=X(()=>this.page()?.droppedTimings??0);ms(e){return vA(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,gA,5,4),e&2&&j(t.hooks().length||t.outputs().length||t.afterRender()?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})};function lA(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 uA(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,lA,9,5,`tr`,null,Zh),z()()()),e&2){let e=W(2);D(15),N(e.hooks())}}function dA(e,t){if(e&1&&K(0),e&2){let e=W().$implicit;J(` (`,e.listener,`) `)}}function fA(e,t){if(e&1&&(R(0,`tr`)(1,`td`,5),K(2),A(3,dA,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 pA(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,fA,10,5,`tr`,null,Zh),z()()()),e&2){let e=W(2);D(15),N(e.outputs())}}function mA(e,t){if(e&1&&(R(0,`p`,1),K(1),z()),e&2){let e=t,n=W(2);D(),S_(` afterRender callbacks ran `,e.runs,` `,e.runs===1?`time`:`times`,`, `,n.ms(e.ms),` in total, slowest `,n.ms(e.maxMs),`. `)}}function hA(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 gA(e,t){if(e&1&&(R(0,`div`,0),A(1,uA,17,0,`div`),A(2,pA,17,0,`div`),z(),A(3,mA,2,4,`p`,1),A(4,hA,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 _A=10;function vA(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}var yA=class e{page=$(null);hooks=X(()=>(this.page()?.hooks??[]).slice(0,_A));outputs=X(()=>(this.page()?.outputs??[]).slice(0,_A));afterRender=X(()=>{let e=this.page()?.afterRender;return e?.runs?e:null});dropped=X(()=>this.page()?.droppedTimings??0);ms(e){return vA(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,gA,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 bA(e,t){if(e&1&&(R(0,`p`,5),K(1),z()),e&2){let e=W();D(),q(e.error())}}function xA(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 SA=class e{page=$(null);maxCycles=$(200);imported=ev();error=T(``);hasCycles(){return(this.page()?.cycles.length??0)>0}exportJson(){let e=this.page();e&&xA(qO(e,e.pageId),`change-detection-${e.pageId}.json`)}exportTrace(){let e=this.page();e&&xA(ek(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=JO(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(Ag(8).click())}),K(6,`Import`),z(),R(7,`input`,4,0),U(`change`,function(){S(e);let n=Ag(8);return C(t.read(n))}),z()(),A(9,bA,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 bA(e,t){if(e&1&&(R(0,`p`,5),K(1),z()),e&2){let e=W();D(),q(e.error())}}function xA(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 SA=class e{page=$(null);maxCycles=$(200);imported=nv();error=T(``);hasCycles(){return(this.page()?.cycles.length??0)>0}exportJson(){let e=this.page();e&&xA(qO(e,e.pageId),`change-detection-${e.pageId}.json`)}exportTrace(){let e=this.page();e&&xA(ek(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=JO(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(Mg(8).click())}),K(6,`Import`),z(),R(7,`input`,4,0),U(`change`,function(){S(e);let n=Mg(8);return C(t.read(n))}),z()(),A(9,bA,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; -}`]})},CA=(e,t)=>t.stat.name;function wA(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 TA(e,t){if(e&1&&(R(0,`div`,6)(1,`span`,7),K(2),z(),A(3,wA,2,1,`span`,8),z()),e&2){let e=W().$implicit;Zg(`--%NS%tone`,e.tone+`%`),D(2),q(e.label),D(),j(e.roomy?3:-1)}}function EA(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 DA(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,EA,4,2),z()}if(e&2){let e=W(),t=e.$implicit,n=e.$index,r=W(2);Zg(`--%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 OA(e,t){if(e&1&&(R(0,`li`),A(1,TA,4,4,`div`,4)(2,DA,2,6,`button`,5),z()),e&2){let e=t.$implicit;Zg(`left`,e.x,`%`)(`top`,e.y,`%`)(`width`,e.w,`%`)(`height`,e.h,`%`),D(),j(e.other?1:2)}}function kA(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,OA,3,9,`li`,3,CA),z()}if(e&2){let e=W();k(`aria-label`,e.label()),D(),N(e.cells())}}function AA(e,t){e&1&&(R(0,`p`,1),K(1,`No component time in these cycles.`),z())}var jA=24,MA=3,NA=class e{stats=$([]);scope=$(`the recording`);pick=ev();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,jA),n=e.slice(jA),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=ok(i,e=>e.stat.ms,MA);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, ${nk(t.ms)}, ${r}% of self time`:`${t.name}, ${nk(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 nk(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,kA,3,1,`ul`,0)(1,AA,2,0,`p`,1),e&2&&j(+!t.cells().length)},styles:[`[_nghost-%COMP%] { +}`]})},CA=(e,t)=>t.stat.name;function wA(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 TA(e,t){if(e&1&&(R(0,`div`,6)(1,`span`,7),K(2),z(),A(3,wA,2,1,`span`,8),z()),e&2){let e=W().$implicit;$g(`--%NS%tone`,e.tone+`%`),D(2),q(e.label),D(),j(e.roomy?3:-1)}}function EA(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 DA(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,EA,4,2),z()}if(e&2){let e=W(),t=e.$implicit,n=e.$index,r=W(2);$g(`--%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 OA(e,t){if(e&1&&(R(0,`li`),A(1,TA,4,4,`div`,4)(2,DA,2,6,`button`,5),z()),e&2){let e=t.$implicit;$g(`left`,e.x,`%`)(`top`,e.y,`%`)(`width`,e.w,`%`)(`height`,e.h,`%`),D(),j(e.other?1:2)}}function kA(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,OA,3,9,`li`,3,CA),z()}if(e&2){let e=W();k(`aria-label`,e.label()),D(),N(e.cells())}}function AA(e,t){e&1&&(R(0,`p`,1),K(1,`No component time in these cycles.`),z())}var jA=24,MA=3,NA=class e{stats=$([]);scope=$(`the recording`);pick=nv();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,jA),n=e.slice(jA),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=ok(i,e=>e.stat.ms,MA);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, ${nk(t.ms)}, ${r}% of self time`:`${t.name}, ${nk(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 nk(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,kA,3,1,`ul`,0)(1,AA,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); -}`]})},PA=(e,t)=>t.id;function FA(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 IA(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,FA,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 LA(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 RA(e,t){e&1&&K(0,` An app on a device has no DOM, so checks that changed nothing are not counted there. `)}function zA(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 BA(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 VA(e,t){e&1&&L(0,`app-angular-unavailable`,17),e&2&&P(`page`,W(2).angularPage())}function HA(e,t){e&1&&A(0,BA,2,0,`p`,9)(1,VA,1,1,`app-angular-unavailable`,17),e&2&&j(+!W().attachPending())}function UA(e,t){e&1&&(F(0,`p`,9),K(1,`Angular profiling stays on until the page reloads.`),I())}function WA(e,t){e&1&&L(0,`app-angular-unavailable`,21),e&2&&P(`page`,W(2).angularPage())}function GA(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,UA,2,0,`p`,9)(15,WA,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 KA(e,t){if(e&1&&(F(0,`p`,9),K(1),I()),e&2){let e=t.$implicit;D(),q(e)}}function qA(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 JA(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 YA(e,t){if(e&1){let e=B();F(0,`h3`),K(1,`Cycles`),I(),F(2,`app-cd-cycle-chart`,22),w_(`rangeChange`,function(t){S(e);let n=W();return C_(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,qA,2,1,`p`,24),F(5,`h3`),K(6,`Self time by component`),I(),A(7,JA,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()),S_(`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 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(n.ms(e.ms)),D(2),q(n.ms(e.maxMs))}}function ZA(e,t){e&1&&(F(0,`tr`)(1,`td`,33),K(2,`No component time in the picked cycles.`),I()())}function QA(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 $A(e,t){e&1&&(F(0,`tr`)(1,`td`,33),K(2,`No component checks in the picked cycles.`),I()())}function ej(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 tj(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 nj(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 rj(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 ij(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 aj(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 oj(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,ej,4,1,`span`,35)(8,tj,4,1,`span`,35),A(9,nj,2,1,`span`,36),A(10,rj,2,1,`span`,36),A(11,ij,2,1,`span`,36),A(12,aj,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),b_(` `,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 sj(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,XA,10,4,`tr`,null,Yh,!1,ZA,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,QA,10,4,`tr`,null,Yh,!1,$A,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,oj,13,11,`li`,null,PA),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 cj(e,t){e&1&&(F(0,`p`,10),K(1,`Use the app. Cycles show up here as Angular runs change detection.`),I())}var lj=3e3,uj=10,dj=class e{livePage=$(null,{alias:`page`});pageId=$(null);rpc=$(null);native=$(!1);angularPages=hD(()=>this.rpc());angularPage=X(()=>gD(this.angularPages(),this.pageId()));attachPending=X(()=>this.angularPage()?.capabilities.profiler===!0);showComponent=ev();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(()=>IT(this.rpc()).limits.cdCycles);picked=X(()=>rk(this.cycles(),this.range()));hasSpans=X(()=>this.picked().some(e=>e.spans?.length));spanNames=X(()=>this.page()?.spanNames??[]);stats=X(()=>this.range()?ik(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,uj));busiest=X(()=>[...this.stats()].sort((e,t)=>t.checks-e.checks).slice(0,uj));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 XE(e)}causeText(e){return zO(e)}confirming=T(null);confirmTimer;constructor(){E(()=>{let e=this.confirming();e!==null&&this.livePage()?.recording===!0===e&&Z(()=>this.confirmed(e))}),x(ys).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)},lj))}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 _T(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,IA,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,LA,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,RA,1,0)(14,zA,1,0),I(),A(15,HA,2,1),A(16,GA,16,7),L(17,`app-limit-note`,8),M(18,KA,2,1,`p`,9,Xh),A(20,YA,9,10),A(21,sj,46,6)(22,cj,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:[bD,aO,yA,jk,SA,qk,cA,NA],styles:[`[_nghost-%COMP%] { +}`]})},PA=(e,t)=>t.id;function FA(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 IA(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,FA,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 LA(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 RA(e,t){e&1&&K(0,` An app on a device has no DOM, so checks that changed nothing are not counted there. `)}function zA(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 BA(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 VA(e,t){e&1&&L(0,`app-angular-unavailable`,17),e&2&&P(`page`,W(2).angularPage())}function HA(e,t){e&1&&A(0,BA,2,0,`p`,9)(1,VA,1,1,`app-angular-unavailable`,17),e&2&&j(+!W().attachPending())}function UA(e,t){e&1&&(F(0,`p`,9),K(1,`Angular profiling stays on until the page reloads.`),I())}function WA(e,t){e&1&&L(0,`app-angular-unavailable`,21),e&2&&P(`page`,W(2).angularPage())}function GA(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,UA,2,0,`p`,9)(15,WA,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 KA(e,t){if(e&1&&(F(0,`p`,9),K(1),I()),e&2){let e=t.$implicit;D(),q(e)}}function qA(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 JA(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 YA(e,t){if(e&1){let e=B();F(0,`h3`),K(1,`Cycles`),I(),F(2,`app-cd-cycle-chart`,22),E_(`rangeChange`,function(t){S(e);let n=W();return T_(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,qA,2,1,`p`,24),F(5,`h3`),K(6,`Self time by component`),I(),A(7,JA,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()),w_(`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 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(n.ms(e.ms)),D(2),q(n.ms(e.maxMs))}}function ZA(e,t){e&1&&(F(0,`tr`)(1,`td`,33),K(2,`No component time in the picked cycles.`),I()())}function QA(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 $A(e,t){e&1&&(F(0,`tr`)(1,`td`,33),K(2,`No component checks in the picked cycles.`),I()())}function ej(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 tj(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 nj(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 rj(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 ij(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 aj(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 oj(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,ej,4,1,`span`,35)(8,tj,4,1,`span`,35),A(9,nj,2,1,`span`,36),A(10,rj,2,1,`span`,36),A(11,ij,2,1,`span`,36),A(12,aj,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),S_(` `,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 sj(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,XA,10,4,`tr`,null,Zh,!1,ZA,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,QA,10,4,`tr`,null,Zh,!1,$A,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,oj,13,11,`li`,null,PA),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 cj(e,t){e&1&&(F(0,`p`,10),K(1,`Use the app. Cycles show up here as Angular runs change detection.`),I())}var lj=3e3,uj=10,dj=class e{livePage=$(null,{alias:`page`});pageId=$(null);rpc=$(null);native=$(!1);angularPages=hD(()=>this.rpc());angularPage=X(()=>gD(this.angularPages(),this.pageId()));attachPending=X(()=>this.angularPage()?.capabilities.profiler===!0);showComponent=nv();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(()=>IT(this.rpc()).limits.cdCycles);picked=X(()=>rk(this.cycles(),this.range()));hasSpans=X(()=>this.picked().some(e=>e.spans?.length));spanNames=X(()=>this.page()?.spanNames??[]);stats=X(()=>this.range()?ik(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,uj));busiest=X(()=>[...this.stats()].sort((e,t)=>t.checks-e.checks).slice(0,uj));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 XE(e)}causeText(e){return zO(e)}confirming=T(null);confirmTimer;constructor(){E(()=>{let e=this.confirming();e!==null&&this.livePage()?.recording===!0===e&&Z(()=>this.confirmed(e))}),x(ys).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)},lj))}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 _T(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,IA,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,LA,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,RA,1,0)(14,zA,1,0),I(),A(15,HA,2,1),A(16,GA,16,7),L(17,`app-limit-note`,8),M(18,KA,2,1,`p`,9,Qh),A(20,YA,9,10),A(21,sj,46,6)(22,cj,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:[bD,aO,yA,jk,SA,qk,cA,NA],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 fj(e){return Object.fromEntries(e.map(e=>[e.name,e.value??null]))}function pj(e){return e.map(e=>({name:e.name,listened:!!e.listened}))}function mj(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=fj(e.inputs),t.outputs=pj(e.outputs),t.properties=fj(e.properties??[]),e.listeners.length&&(t.listeners=e.listeners),e.directives.length&&(t.directives=e.directives.map(e=>({name:e.name,inputs:fj(e.inputs),outputs:pj(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 hj(e){return e.selector||e.path}var gj=1e3;function _j(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 vj(e){try{return JSON.stringify(e)??`undefined`}catch{return String(e)}}var yj=class{ms;changed=T(new Set);owner=null;last=new Map;timers=new Map;constructor(e=gj){this.ms=e}update(e,t){let n=new Map([...t].map(([e,t])=>[e,vj(t)]));if(e!==this.owner){this.clear(),this.owner=e,this.last=n;return}let r=_j(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 bj(e,t,n=0){return e===`directive`?`directive:${n}:${t}`:`${e}:${t}`}var xj=[`*`];function Sj(e,t){e&1&&K(0),e&2&&q(W(2).label())}function Cj(e,t){e&1&&Eg(0,0,null,Sj,1,1)}function wj(e,t){if(e&1&&(F(0,`span`,4),K(1),I()),e&2){let e=W(2);D(),q(e.message())}}function Tj(e,t){if(e&1){let e=B();F(0,`button`,2),H(`click`,function(){return S(e),C(W().open())}),dg(1,3),I(),A(2,wj,2,1,`span`,4)}if(e&2){let e=W(),t=Ag(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 Ej(e,t){if(e&1&&(F(0,`span`,1),dg(1,3),I()),e&2){let e=W(),t=Ag(1);P(`title`,e.label()),D(),P(`ngTemplateOutlet`,t)}}var Dj=class e{source=T(T(null));client=X(()=>this.source()());available=X(()=>{let e=this.client();return!!e&&!yT(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 _T(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=El({token:e,factory:e.ɵfac})};function Oj(e,t){return t?`${e}:${t}`:e}var kj=class e{editor=x(Dj);file=$.required();line=$(void 0);label=X(()=>Oj(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:xj,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&&(Tg(),Dh(0,Cj,2,0,`ng-template`,null,0,q_),A(2,Tj,3,4)(3,Ej,2,2,`span`,1)),e&2&&(D(2),j(t.editor.available()?2:3))},dependencies:[Uv],styles:[`[_nghost-%COMP%] { +}`]})};function fj(e){return Object.fromEntries(e.map(e=>[e.name,e.value??null]))}function pj(e){return e.map(e=>({name:e.name,listened:!!e.listened}))}function mj(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=fj(e.inputs),t.outputs=pj(e.outputs),t.properties=fj(e.properties??[]),e.listeners.length&&(t.listeners=e.listeners),e.directives.length&&(t.directives=e.directives.map(e=>({name:e.name,inputs:fj(e.inputs),outputs:pj(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 hj(e){return e.selector||e.path}var gj=1e3;function _j(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 vj(e){try{return JSON.stringify(e)??`undefined`}catch{return String(e)}}var yj=class{ms;changed=T(new Set);owner=null;last=new Map;timers=new Map;constructor(e=gj){this.ms=e}update(e,t){let n=new Map([...t].map(([e,t])=>[e,vj(t)]));if(e!==this.owner){this.clear(),this.owner=e,this.last=n;return}let r=_j(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 bj(e,t,n=0){return e===`directive`?`directive:${n}:${t}`:`${e}:${t}`}var xj=[`*`];function Sj(e,t){e&1&&K(0),e&2&&q(W(2).label())}function Cj(e,t){e&1&&Og(0,0,null,Sj,1,1)}function wj(e,t){if(e&1&&(F(0,`span`,4),K(1),I()),e&2){let e=W(2);D(),q(e.message())}}function Tj(e,t){if(e&1){let e=B();F(0,`button`,2),H(`click`,function(){return S(e),C(W().open())}),pg(1,3),I(),A(2,wj,2,1,`span`,4)}if(e&2){let e=W(),t=Mg(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 Ej(e,t){if(e&1&&(F(0,`span`,1),pg(1,3),I()),e&2){let e=W(),t=Mg(1);P(`title`,e.label()),D(),P(`ngTemplateOutlet`,t)}}var Dj=class e{source=T(T(null));client=X(()=>this.source()());available=X(()=>{let e=this.client();return!!e&&!yT(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 _T(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=El({token:e,factory:e.ɵfac})};function Oj(e,t){return t?`${e}:${t}`:e}var kj=class e{editor=x(Dj);file=$.required();line=$(void 0);label=X(()=>Oj(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:xj,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&&(Dg(),kh(0,Cj,2,0,`ng-template`,null,0,Y_),A(2,Tj,3,4)(3,Ej,2,2,`span`,1)),e&2&&(D(2),j(t.editor.available()?2:3))},dependencies:[Gv],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; -}`]})},Aj=[`field`],jj=[`editButton`],Mj=[`valueBox`];function Nj(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 Pj(e,t){if(e&1&&(R(0,`pre`,null,1),K(2),U_(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(W_(3,4,e.prop().value))}}function Fj(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 Ij(e,t){if(e&1&&(R(0,`p`,13),K(1),z()),e&2){let e=W(2);D(),q(e.prop().locked)}}function Lj(e,t){if(e&1&&(R(0,`div`,11),A(1,Pj,4,6,`pre`),A(2,Fj,3,2,`button`,12),z(),A(3,Ij,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 Rj(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 zj=0;function Bj(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 Vj=class e{prop=$.required();componentId=$.required();pageId=$(null);rpc=$(null);writes=$(!1);bare=$(!1);readDraft=$(null);fieldId=`prop-edit-${++zj}`;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=sv(`field`);editButton=sv(`editButton`);valueBox=sv(`valueBox`);injector=x(_s);scrollable=T(!1);constructor(){mv(()=>{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),td(()=>{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=Bj(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(){td(()=>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&&Og(t.field,Aj,5)(t.editButton,jj,5)(t.valueBox,Mj,5),e&2&&kg(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,Nj,11,11)(1,Lj,4,3),A(2,Rj,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:[Gv],styles:[`[_nghost-%COMP%] { +}`]})},Aj=[`field`],jj=[`editButton`],Mj=[`valueBox`];function Nj(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 Pj(e,t){if(e&1&&(R(0,`pre`,null,1),K(2),G_(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(K_(3,4,e.prop().value))}}function Fj(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 Ij(e,t){if(e&1&&(R(0,`p`,13),K(1),z()),e&2){let e=W(2);D(),q(e.prop().locked)}}function Lj(e,t){if(e&1&&(R(0,`div`,11),A(1,Pj,4,6,`pre`),A(2,Fj,3,2,`button`,12),z(),A(3,Ij,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 Rj(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 zj=0;function Bj(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 Vj=class e{prop=$.required();componentId=$.required();pageId=$(null);rpc=$(null);writes=$(!1);bare=$(!1);readDraft=$(null);fieldId=`prop-edit-${++zj}`;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=lv(`field`);editButton=lv(`editButton`);valueBox=lv(`valueBox`);injector=x(_s);scrollable=T(!1);constructor(){gv(()=>{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),rd(()=>{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=Bj(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(){rd(()=>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&&Ag(t.field,Aj,5)(t.editButton,jj,5)(t.valueBox,Mj,5),e&2&&jg(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,Nj,11,11)(1,Lj,4,3),A(2,Rj,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:[qv],styles:[`[_nghost-%COMP%] { display: block; min-width: 0; } @@ -2104,7 +2104,7 @@ button.edit[_ngcontent-%COMP%] { .error[_ngcontent-%COMP%] { color: var(--%NS%danger-text); -}`]})},Hj=1e3,Uj={depth:5,limit:100},Wj=`[redacted]`;function Gj(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Kj(e){return Gj(e)&&typeof e.$more==`number`&&Object.keys(e).length===1}function qj(e){return Gj(e)&&typeof e.$collapsed==`string`&&typeof e.size==`number`&&Object.keys(e).length===2}function Jj(e){return e===`Array`?`array`:e===`Map`?`map`:e===`Set`?`set`:`object`}function Yj(e){return e.$type===`Map`&&Array.isArray(e.entries)}function Xj(e){return e.$type===`Set`&&Array.isArray(e.values)}function Zj(e){return Object.keys(e).filter(e=>e!==`$type`&&e!==`$more`)}function Qj(e){if(!e||typeof e!=`object`)return null;if(qj(e))return e.size<=0?null:{kind:Jj(e.$collapsed),type:e.$collapsed,size:e.size,collapsed:!0};if(Kj(e))return null;if(Array.isArray(e)){let t=e.at(-1),n=Kj(t)?t.$more:0,r=e.length-+!!n+n;return r?{kind:`array`,type:`Array`,size:r,collapsed:!1}:null}let t=e;if(Yj(t)||Xj(t)){let e=typeof t.size==`number`?t.size:0,n=Yj(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=Zj(t).length+n,i=typeof t.$type==`string`?t.$type:`Object`;return r?{kind:`object`,type:i,size:r,collapsed:!1}:null}function $j(e){if(typeof e==`string`)return JSON.stringify(e);let t=Qj(e);if(t)return nM(t);try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function eM(e){let t=Qj(e);if(!t||t.collapsed)return{children:[],more:0};if(Array.isArray(e)){let n=(Kj(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:$j(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:Zj(n).map(e=>({key:e,label:e,value:n[e]})),more:typeof n.$more==`number`?n.$more:0}}function tM(e,t,n){return`${e} ${e===1?t:n}`}function nM(e){let t={array:tM(e.size,`item`,`items`),object:tM(e.size,`key`,`keys`),map:tM(e.size,`entry`,`entries`),set:tM(e.size,`value`,`values`)}[e.kind];return`${e.type} (${t})`}function rM(e,t){return JSON.stringify(t===void 0?e:[t,...e])}function iM(e,t){return e.map((e,n)=>n===0?e:(t?t[n-1]!==`object`:/^\d+$/.test(e))?`[${e}]`:`.${e}`).join(``)}function aM(e){return e.every(e=>e&&e===e.trim()&&!/[.[\]]/.test(e))?e.join(`.`):null}var oM=/^\[(Getter|Unreadable|Circular|Truncated|Function\b.*|Promise)\]$/;function sM(e){return e===null||typeof e==`boolean`?!0:typeof e==`number`?Number.isFinite(e):typeof e==`string`&&e!==Wj&&!oM.test(e)&&!e.endsWith(`…`)}function cM(e,t){return!e||t.kind===`map`||t.kind===`set`||e===`signal`&&t.kind===`object`&&t.type!==`Object`?null:e}function lM(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=rM(e);if(!(s.has(r)||a.length>=i)){s.add(r);for(let r of eM(t).children){let t=[...e,r.key];if(r.label.toLowerCase().includes(o)&&a.push(t),!Qj(r.value))continue;let i=n(t)??(Qj(r.value)?.collapsed?void 0:r.value);i!==void 0&&c(t,i)}}};return c(e,n(e)??t),a}var uM=(e,t)=>t.id;function dM(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(),ls(),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 fM(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 pM(e,t){if(e&1&&(F(0,`span`,16),K(1),I()),e&2){let e=W(2).$implicit;D(),q(e.text)}}function mM(e,t){if(e&1&&(F(0,`span`,14),K(1),I(),A(2,fM,1,5,`app-prop-value`,15)(3,pM,2,1,`span`,16)),e&2){let e,t=W().$implicit;D(),J(``,t.label,`:`),D(),j((e=t.edit)?2:3,e)}}function hM(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 gM(e,t){e&1&&(F(0,`span`,12),K(1,`Reading from the page…`),I())}function _M(e,t){if(e&1&&(F(0,`span`,13),K(1),I()),e&2){let e=W().$implicit;D(),q(e.text)}}function vM(e,t){if(e&1&&(F(0,`li`,9),A(1,dM,7,4,`button`,10)(2,mM,4,2)(3,hM,4,2,`button`,11)(4,gM,2,0,`span`,12)(5,_M,2,1,`span`,13),I()),e&2){let e,n=t.$implicit;Zg(`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 yM(e,t){if(e&1&&(F(0,`ul`,7),M(1,vM,6,3,`li`,8,uM),I()),e&2){let e=W(2);P(`id`,e.listId),k(`aria-label`,e.prop().name+` entries`),D(),N(e.rows())}}function bM(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(),ls(),F(4,`span`,5),K(5),I()(),L(6,`app-prop-value`,6),I(),A(7,yM,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 xM(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 SM=0;function CM(e){if(e===void 0)return`undefined`;try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function wM(e){if(Array.isArray(e))return e.every(wM);if(e&&typeof e==`object`){let t=e;return![`$collapsed`,`$more`,`$type`].some(e=>Object.hasOwn(t,e))&&Object.values(t).every(wM)}return sM(e)}var TM=class e{prop=$.required();store=$.required();componentId=$.required();pageId=$(null);rpc=$(null);writes=$(!1);directive=$(void 0);query=$(``);listId=`value-tree-${++SM}`;host=x(kl);pendingMore=null;constructor(){mv(()=>{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(()=>Qj(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 lM(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(rM(e));for(let t=2;t<=e.length;t++)i.add(rM(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}=eM(e);for(let e of ee){let ee=[...o,e.key],h=rM(ee);if(r&&!m&&!i.has(h))continue;let g=Qj(e.value),te=rM(ee,n);if(!g){let t=p&&sM(e.value)?aM(ee):null;c.push({id:te,kind:`leaf`,depth:f,path:ee,label:e.label,text:CM(e.value),edit:s&&t&&p?{name:iM(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:nM(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,cM(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:`${rM(e,n)}:${r}`,kind:r,depth:t,path:e,label:``,text:``});return l(this.rootValue(),this.rootPath(),[e.kind],0,s?cM(o.editInside??null,e):null,!r),c});readWhole=async()=>{let e=await this.store().read(this.rootPath(),Uj.depth,Uj.limit);return e.ok?wM(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 nM(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,bM,8,12)(1,xM,1,5,`app-prop-value`,0),e&2){let e;j((e=t.root())?0:1,e)}},dependencies:[Vj],styles:[`[_nghost-%COMP%] { +}`]})},Hj=1e3,Uj={depth:5,limit:100},Wj=`[redacted]`;function Gj(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Kj(e){return Gj(e)&&typeof e.$more==`number`&&Object.keys(e).length===1}function qj(e){return Gj(e)&&typeof e.$collapsed==`string`&&typeof e.size==`number`&&Object.keys(e).length===2}function Jj(e){return e===`Array`?`array`:e===`Map`?`map`:e===`Set`?`set`:`object`}function Yj(e){return e.$type===`Map`&&Array.isArray(e.entries)}function Xj(e){return e.$type===`Set`&&Array.isArray(e.values)}function Zj(e){return Object.keys(e).filter(e=>e!==`$type`&&e!==`$more`)}function Qj(e){if(!e||typeof e!=`object`)return null;if(qj(e))return e.size<=0?null:{kind:Jj(e.$collapsed),type:e.$collapsed,size:e.size,collapsed:!0};if(Kj(e))return null;if(Array.isArray(e)){let t=e.at(-1),n=Kj(t)?t.$more:0,r=e.length-+!!n+n;return r?{kind:`array`,type:`Array`,size:r,collapsed:!1}:null}let t=e;if(Yj(t)||Xj(t)){let e=typeof t.size==`number`?t.size:0,n=Yj(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=Zj(t).length+n,i=typeof t.$type==`string`?t.$type:`Object`;return r?{kind:`object`,type:i,size:r,collapsed:!1}:null}function $j(e){if(typeof e==`string`)return JSON.stringify(e);let t=Qj(e);if(t)return nM(t);try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function eM(e){let t=Qj(e);if(!t||t.collapsed)return{children:[],more:0};if(Array.isArray(e)){let n=(Kj(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:$j(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:Zj(n).map(e=>({key:e,label:e,value:n[e]})),more:typeof n.$more==`number`?n.$more:0}}function tM(e,t,n){return`${e} ${e===1?t:n}`}function nM(e){let t={array:tM(e.size,`item`,`items`),object:tM(e.size,`key`,`keys`),map:tM(e.size,`entry`,`entries`),set:tM(e.size,`value`,`values`)}[e.kind];return`${e.type} (${t})`}function rM(e,t){return JSON.stringify(t===void 0?e:[t,...e])}function iM(e,t){return e.map((e,n)=>n===0?e:(t?t[n-1]!==`object`:/^\d+$/.test(e))?`[${e}]`:`.${e}`).join(``)}function aM(e){return e.every(e=>e&&e===e.trim()&&!/[.[\]]/.test(e))?e.join(`.`):null}var oM=/^\[(Getter|Unreadable|Circular|Truncated|Function\b.*|Promise)\]$/;function sM(e){return e===null||typeof e==`boolean`?!0:typeof e==`number`?Number.isFinite(e):typeof e==`string`&&e!==Wj&&!oM.test(e)&&!e.endsWith(`…`)}function cM(e,t){return!e||t.kind===`map`||t.kind===`set`||e===`signal`&&t.kind===`object`&&t.type!==`Object`?null:e}function lM(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=rM(e);if(!(s.has(r)||a.length>=i)){s.add(r);for(let r of eM(t).children){let t=[...e,r.key];if(r.label.toLowerCase().includes(o)&&a.push(t),!Qj(r.value))continue;let i=n(t)??(Qj(r.value)?.collapsed?void 0:r.value);i!==void 0&&c(t,i)}}};return c(e,n(e)??t),a}var uM=(e,t)=>t.id;function dM(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(),ls(),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 fM(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 pM(e,t){if(e&1&&(F(0,`span`,16),K(1),I()),e&2){let e=W(2).$implicit;D(),q(e.text)}}function mM(e,t){if(e&1&&(F(0,`span`,14),K(1),I(),A(2,fM,1,5,`app-prop-value`,15)(3,pM,2,1,`span`,16)),e&2){let e,t=W().$implicit;D(),J(``,t.label,`:`),D(),j((e=t.edit)?2:3,e)}}function hM(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 gM(e,t){e&1&&(F(0,`span`,12),K(1,`Reading from the page…`),I())}function _M(e,t){if(e&1&&(F(0,`span`,13),K(1),I()),e&2){let e=W().$implicit;D(),q(e.text)}}function vM(e,t){if(e&1&&(F(0,`li`,9),A(1,dM,7,4,`button`,10)(2,mM,4,2)(3,hM,4,2,`button`,11)(4,gM,2,0,`span`,12)(5,_M,2,1,`span`,13),I()),e&2){let e,n=t.$implicit;$g(`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 yM(e,t){if(e&1&&(F(0,`ul`,7),M(1,vM,6,3,`li`,8,uM),I()),e&2){let e=W(2);P(`id`,e.listId),k(`aria-label`,e.prop().name+` entries`),D(),N(e.rows())}}function bM(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(),ls(),F(4,`span`,5),K(5),I()(),L(6,`app-prop-value`,6),I(),A(7,yM,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 xM(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 SM=0;function CM(e){if(e===void 0)return`undefined`;try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function wM(e){if(Array.isArray(e))return e.every(wM);if(e&&typeof e==`object`){let t=e;return![`$collapsed`,`$more`,`$type`].some(e=>Object.hasOwn(t,e))&&Object.values(t).every(wM)}return sM(e)}var TM=class e{prop=$.required();store=$.required();componentId=$.required();pageId=$(null);rpc=$(null);writes=$(!1);directive=$(void 0);query=$(``);listId=`value-tree-${++SM}`;host=x(kl);pendingMore=null;constructor(){gv(()=>{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(()=>Qj(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 lM(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(rM(e));for(let t=2;t<=e.length;t++)i.add(rM(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}=eM(e);for(let e of ee){let ee=[...o,e.key],h=rM(ee);if(r&&!m&&!i.has(h))continue;let g=Qj(e.value),te=rM(ee,n);if(!g){let t=p&&sM(e.value)?aM(ee):null;c.push({id:te,kind:`leaf`,depth:f,path:ee,label:e.label,text:CM(e.value),edit:s&&t&&p?{name:iM(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:nM(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,cM(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:`${rM(e,n)}:${r}`,kind:r,depth:t,path:e,label:``,text:``});return l(this.rootValue(),this.rootPath(),[e.kind],0,s?cM(o.editInside??null,e):null,!r),c});readWhole=async()=>{let e=await this.store().read(this.rootPath(),Uj.depth,Uj.limit);return e.ok?wM(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 nM(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,bM,8,12)(1,xM,1,5,`app-prop-value`,0),e&2){let e;j((e=t.root())?0:1,e)}},dependencies:[Vj],styles:[`[_nghost-%COMP%] { display: block; min-width: 0; } @@ -2275,7 +2275,7 @@ button.edit[_ngcontent-%COMP%] { .status[_ngcontent-%COMP%]:empty { display: none; -}`]})},NM=(e,t)=>t.block.id,PM=(e,t)=>t.kind,FM=(e,t)=>t.id;function IM(e,t){if(e&1&&K(0),e&2){let e=W().$implicit;J(` `,e.label,` `)}}function LM(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 RM(e,t){if(e&1&&(R(0,`span`,9),A(1,IM,1,1)(2,LM,3,2),z()),e&2){let e=t.$implicit;Qg(`note-`+e.kind),k(`title`,e.text),D(),j(e.seconds===void 0?1:2)}}function zM(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 BM(e,t){e&1&&(R(0,`span`,9),K(1,`@error block`),z())}function VM(e,t){if(e&1&&(R(0,`span`,10),K(1),z()),e&2){let e=W().$implicit;D(),q(e.timings)}}function HM(e,t){e&1&&(R(0,`span`,11),K(1,`mismatch`),z())}function UM(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 WM(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 GM(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 KM(e,t){if(e&1&&(R(0,`span`,23),K(1),z()),e&2){let e=W().$implicit;D(),q(e.hydration)}}function qM(e,t){if(e&1&&(R(0,`li`)(1,`span`,22),K(2),z(),R(3,`span`,19),K(4),z(),A(5,KM,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 JM(e,t){if(e&1&&(R(0,`h3`,20),K(1,`Transitions`),z(),R(2,`ol`,21),M(3,qM,6,3,`li`,null,Yh),z()),e&2){let e=W(2).$implicit;D(3),N(e.block.transitions)}}function YM(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 XM(e,t){if(e&1&&(R(0,`h3`,20),K(1,`Hydration mismatches`),z(),R(2,`ul`,24),M(3,YM,5,2,`li`,null,FM),z()),e&2){let e=W(2).$implicit;D(3),N(e.mismatches)}}function ZM(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,UM,4,2),A(7,WM,4,1),A(8,GM,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,JM,5,0),A(18,XM,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 QM(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,RM,3,4,`span`,8,PM),A(8,zM,2,2,`span`,9),A(9,BM,2,0,`span`,9),A(10,VM,2,1,`span`,10),A(11,HM,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),sg(16,`path`,15),z(),ls(),R(17,`span`,16),K(18),z()(),A(19,ZM,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(),Qg(`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 $M(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,QM,20,14,`li`,4,NM),z()()),e&2){let e=W();D(4),Y(``,e.rows().length,``,e.truncated()?`+`:``),D(2),N(e.rows())}}function eN(e){return e<1e3?`${e}ms`:`${Number((e/1e3).toFixed(2))}s`}function tN(e){let t=[],n=e.placeholder?.minimumTime;n!=null&&t.push(`placeholder min ${eN(n)}`);let r=[e.loading?.afterTime==null?``:`after ${eN(e.loading.afterTime)}`,e.loading?.minimumTime==null?``:`min ${eN(e.loading.minimumTime)}`].filter(Boolean);return r.length&&t.push(`loading ${r.join(`, `)}`),t.join(` · `)}var nN=class e{blocks=$([]);truncated=$(!1);clockOffset=$(0);showOwner=ev();mismatches=$([]);showNode=ev();open=T(new Set);highlight=ev();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:cT({...t,since:t.since||e},e),timings:tN(t),mismatches:this.mismatches().filter(e=>t.rootIds.includes(e.id)),hydrated:t.hydration===`hydrated`?aT(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 XE(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(ys).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,$M,8,2,`section`,0),e&2&&j(t.rows().length?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})},NM=(e,t)=>t.block.id,PM=(e,t)=>t.kind,FM=(e,t)=>t.id;function IM(e,t){if(e&1&&K(0),e&2){let e=W().$implicit;J(` `,e.label,` `)}}function LM(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 RM(e,t){if(e&1&&(R(0,`span`,9),A(1,IM,1,1)(2,LM,3,2),z()),e&2){let e=t.$implicit;e_(`note-`+e.kind),k(`title`,e.text),D(),j(e.seconds===void 0?1:2)}}function zM(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 BM(e,t){e&1&&(R(0,`span`,9),K(1,`@error block`),z())}function VM(e,t){if(e&1&&(R(0,`span`,10),K(1),z()),e&2){let e=W().$implicit;D(),q(e.timings)}}function HM(e,t){e&1&&(R(0,`span`,11),K(1,`mismatch`),z())}function UM(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 WM(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 GM(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 KM(e,t){if(e&1&&(R(0,`span`,23),K(1),z()),e&2){let e=W().$implicit;D(),q(e.hydration)}}function qM(e,t){if(e&1&&(R(0,`li`)(1,`span`,22),K(2),z(),R(3,`span`,19),K(4),z(),A(5,KM,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 JM(e,t){if(e&1&&(R(0,`h3`,20),K(1,`Transitions`),z(),R(2,`ol`,21),M(3,qM,6,3,`li`,null,Zh),z()),e&2){let e=W(2).$implicit;D(3),N(e.block.transitions)}}function YM(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 XM(e,t){if(e&1&&(R(0,`h3`,20),K(1,`Hydration mismatches`),z(),R(2,`ul`,24),M(3,YM,5,2,`li`,null,FM),z()),e&2){let e=W(2).$implicit;D(3),N(e.mismatches)}}function ZM(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,UM,4,2),A(7,WM,4,1),A(8,GM,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,JM,5,0),A(18,XM,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 QM(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,RM,3,4,`span`,8,PM),A(8,zM,2,2,`span`,9),A(9,BM,2,0,`span`,9),A(10,VM,2,1,`span`,10),A(11,HM,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),lg(16,`path`,15),z(),ls(),R(17,`span`,16),K(18),z()(),A(19,ZM,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(),e_(`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 $M(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,QM,20,14,`li`,4,NM),z()()),e&2){let e=W();D(4),Y(``,e.rows().length,``,e.truncated()?`+`:``),D(2),N(e.rows())}}function eN(e){return e<1e3?`${e}ms`:`${Number((e/1e3).toFixed(2))}s`}function tN(e){let t=[],n=e.placeholder?.minimumTime;n!=null&&t.push(`placeholder min ${eN(n)}`);let r=[e.loading?.afterTime==null?``:`after ${eN(e.loading.afterTime)}`,e.loading?.minimumTime==null?``:`min ${eN(e.loading.minimumTime)}`].filter(Boolean);return r.length&&t.push(`loading ${r.join(`, `)}`),t.join(` · `)}var nN=class e{blocks=$([]);truncated=$(!1);clockOffset=$(0);showOwner=nv();mismatches=$([]);showNode=nv();open=T(new Set);highlight=nv();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:cT({...t,since:t.since||e},e),timings:tN(t),mismatches:this.mismatches().filter(e=>t.rootIds.includes(e.id)),hydrated:t.hydration===`hydrated`?aT(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 XE(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(ys).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,$M,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; -}`]})},rN=(e,t)=>t.id;function iN(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 aN(e,t){e&1&&(F(0,`span`,9),K(1,`@empty showing`),I())}function oN(e,t){e&1&&(F(0,`span`,10),K(1,`@empty`),I())}function sN(e,t){e&1&&(F(0,`span`,10),K(1,`renders nothing`),I())}function cN(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,aN,2,0,`span`,9)(7,oN,2,0,`span`,10)(8,sN,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 lN(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,iN,2,1,`p`,4),F(6,`ul`,5),M(7,cN,11,6,`li`,null,rN),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 uN(e,t){e&1&&A(0,lN,9,2,`section`,1),e&2&&j(t.length?0:-1)}function dN(e,t){e&1&&L(0,`app-angular-unavailable`,0),e&2&&P(`page`,W().angular())}var fN={$index:`track $index`,item:`track item`,function:`track expression`},pN=class e{blocks=$(void 0);truncated=$(!1);supported=$(null);angular=$(null);showOwner=ev();highlight=ev();target(e){return e.rootIds[0]??e.owner?.id??null}trackLabel(e){return e.track?fN[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,uN,1,1)(1,dN,1,1,`app-angular-unavailable`,0),e&2){let e;j((e=t.blocks())?0:t.supported()===!1?1:-1,e)}},dependencies:[bD],styles:[`[_nghost-%COMP%] { +}`]})},rN=(e,t)=>t.id;function iN(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 aN(e,t){e&1&&(F(0,`span`,9),K(1,`@empty showing`),I())}function oN(e,t){e&1&&(F(0,`span`,10),K(1,`@empty`),I())}function sN(e,t){e&1&&(F(0,`span`,10),K(1,`renders nothing`),I())}function cN(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,aN,2,0,`span`,9)(7,oN,2,0,`span`,10)(8,sN,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 lN(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,iN,2,1,`p`,4),F(6,`ul`,5),M(7,cN,11,6,`li`,null,rN),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 uN(e,t){e&1&&A(0,lN,9,2,`section`,1),e&2&&j(t.length?0:-1)}function dN(e,t){e&1&&L(0,`app-angular-unavailable`,0),e&2&&P(`page`,W().angular())}var fN={$index:`track $index`,item:`track item`,function:`track expression`},pN=class e{blocks=$(void 0);truncated=$(!1);supported=$(null);angular=$(null);showOwner=nv();highlight=nv();target(e){return e.rootIds[0]??e.owner?.id??null}trackLabel(e){return e.track?fN[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,uN,1,1)(1,dN,1,1,`app-angular-unavailable`,0),e&2){let e;j((e=t.blocks())?0:t.supported()===!1?1:-1,e)}},dependencies:[bD],styles:[`[_nghost-%COMP%] { display: block; } @@ -2631,7 +2631,7 @@ button.edit[_ngcontent-%COMP%] { min-width: 0; text-overflow: ellipsis; white-space: nowrap; -}`]})},mN=(e,t)=>t.id;function hN(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 gN(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 _N(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 vN(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,_N,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 yN(e,t){if(e&1&&(F(0,`p`,6),K(1),I(),F(2,`ul`,12),M(3,vN,10,5,`li`,13,mN),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 bN(e,t){e&1&&(F(0,`p`,6),K(1,`No destroyed component is still in memory after a few navigations.`),I())}function xN(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 SN(e,t){if(e&1&&(A(0,gN,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,yN,5,2)(8,bN,2,0,`p`,6),A(9,xN,5,2,`p`,6)),e&2){let e=W(),t=W();j(e.support.retention?-1:0),D(2),y_(` `,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 CN(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 wN(e,t){if(e&1&&(F(0,`span`,8),K(1),I()),e&2){let e=W();D(),q(e.subscriptions.length)}}function TN(e,t){if(e&1&&(F(0,`span`,15),K(1),I()),e&2){let e=W().$implicit;D(),q(e.source)}}function EN(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,TN,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 DN(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,EN,8,4,`li`,13,Yh),I()),e&2){let e=W(2),t=W();D(3),N(e.subscriptions.slice(0,t.shown))}}function ON(e,t){e&1&&(F(0,`p`,6),K(1,`No subscription is still open after its component went away.`),I())}function kN(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 AN(e,t){if(e&1&&(A(0,DN,5,0)(1,ON,2,0,`p`,6),A(2,kN,2,0,`p`,6)),e&2){let e=W();j(+!e.subscriptions.length),D(2),j(e.support.instances?-1:2)}}function jN(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 MN(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 NN(e,t){e&1&&L(0,`app-angular-unavailable`,10),e&2&&P(`page`,W(2).angular())}function PN(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 FN(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,PN,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 IN(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 LN(e,t){if(e&1&&(F(0,`ul`,12),M(1,FN,7,3,`li`,null,mN),I(),A(3,IN,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 RN(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 zN(e,t){if(e&1&&(A(0,hN,6,1)(1,SN,10,7),A(2,CN,5,1,`p`,6),F(3,`h3`,7),K(4,` Open subscriptions after destroy `),A(5,wN,2,1,`span`,8),I(),A(6,AN,3,2)(7,jN,2,0,`p`,9)(8,MN,2,0,`p`,6),F(9,`h3`,7),K(10,` Live effects and subscriptions `),F(11,`span`,8),K(12),I()(),A(13,NN,1,1,`app-angular-unavailable`,10),A(14,LN,4,1)(15,RN,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 BN(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 VN=20;function HN(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 UN=(e,t,n=`${t}s`)=>`${e} ${e===1?t:n}`,WN=class e{report=$(null);pageId=$(null);rpc=$(null);angular=$(null);now=$(()=>Date.now());showComponent=ev();highlight=ev();shown=VN;minNavigations=2;minSeconds=fw/1e3;plural=UN;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?`${HN(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=UN(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 _T(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,zN,16,7)(11,BN,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:[bD],styles:[`[_nghost-%COMP%] { +}`]})},mN=(e,t)=>t.id;function hN(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 gN(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 _N(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 vN(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,_N,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 yN(e,t){if(e&1&&(F(0,`p`,6),K(1),I(),F(2,`ul`,12),M(3,vN,10,5,`li`,13,mN),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 bN(e,t){e&1&&(F(0,`p`,6),K(1,`No destroyed component is still in memory after a few navigations.`),I())}function xN(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 SN(e,t){if(e&1&&(A(0,gN,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,yN,5,2)(8,bN,2,0,`p`,6),A(9,xN,5,2,`p`,6)),e&2){let e=W(),t=W();j(e.support.retention?-1:0),D(2),x_(` `,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 CN(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 wN(e,t){if(e&1&&(F(0,`span`,8),K(1),I()),e&2){let e=W();D(),q(e.subscriptions.length)}}function TN(e,t){if(e&1&&(F(0,`span`,15),K(1),I()),e&2){let e=W().$implicit;D(),q(e.source)}}function EN(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,TN,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 DN(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,EN,8,4,`li`,13,Zh),I()),e&2){let e=W(2),t=W();D(3),N(e.subscriptions.slice(0,t.shown))}}function ON(e,t){e&1&&(F(0,`p`,6),K(1,`No subscription is still open after its component went away.`),I())}function kN(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 AN(e,t){if(e&1&&(A(0,DN,5,0)(1,ON,2,0,`p`,6),A(2,kN,2,0,`p`,6)),e&2){let e=W();j(+!e.subscriptions.length),D(2),j(e.support.instances?-1:2)}}function jN(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 MN(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 NN(e,t){e&1&&L(0,`app-angular-unavailable`,10),e&2&&P(`page`,W(2).angular())}function PN(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 FN(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,PN,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 IN(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 LN(e,t){if(e&1&&(F(0,`ul`,12),M(1,FN,7,3,`li`,null,mN),I(),A(3,IN,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 RN(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 zN(e,t){if(e&1&&(A(0,hN,6,1)(1,SN,10,7),A(2,CN,5,1,`p`,6),F(3,`h3`,7),K(4,` Open subscriptions after destroy `),A(5,wN,2,1,`span`,8),I(),A(6,AN,3,2)(7,jN,2,0,`p`,9)(8,MN,2,0,`p`,6),F(9,`h3`,7),K(10,` Live effects and subscriptions `),F(11,`span`,8),K(12),I()(),A(13,NN,1,1,`app-angular-unavailable`,10),A(14,LN,4,1)(15,RN,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 BN(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 VN=20;function HN(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 UN=(e,t,n=`${t}s`)=>`${e} ${e===1?t:n}`,WN=class e{report=$(null);pageId=$(null);rpc=$(null);angular=$(null);now=$(()=>Date.now());showComponent=nv();highlight=nv();shown=VN;minNavigations=2;minSeconds=fw/1e3;plural=UN;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?`${HN(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=UN(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 _T(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,zN,16,7)(11,BN,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:[bD],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); -}`]})},GN=12,KN=900;function qN(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 JN=class{options;injector=x(_s);visibleTop=T(0);viewport=T(KN);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)-GN));return{start:a,end:Math.min(t,Math.max(a,Math.ceil((i+r)/n)+GN))}}),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(),td(()=>this.update(),{injector:this.injector})}),x(ys).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:KN)}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&&td(t,{injector:this.injector})}};function YN(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 XN=e=>{let t=parseFloat(e);return Number.isFinite(t)?t:0};function ZN(e,t=8){let n=e.ownerDocument.defaultView;if(!n)return e.offsetHeight+t;let r=YN(e),i=r?n.getComputedStyle(r):null,a=i?XN(i.paddingTop):0,o=i?XN(i.scrollPaddingTop):0,s=XN(n.getComputedStyle(e).top);return Math.max(0,Math.ceil(a+s+e.offsetHeight+t-o))}function QN(e,t,n=8){let r=YN(e),i=t.getBoundingClientRect().bottom+n-e.getBoundingClientRect().top;i<=0||(r?r.scrollTop-=i:e.ownerDocument.defaultView?.scrollBy(0,-i))}var $N=[`input`];function eP(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),sg(2,`path`,11),z(),ls(),R(3,`span`,12),K(4,`Save`),z()()}e&2&&k(`aria-label`,`Save filter `+W().query())}function tP(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),sg(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 nP(e,t){if(e&1&&(R(0,`ul`,7),M(1,tP,6,6,`li`,13,Xh),z()),e&2){let e=W();D(),N(e.saved())}}function rP(e,t){if(e&1&&(R(0,`span`,8),K(1),z()),e&2){let e=W();D(),q(e.announcement())}}var iP=`pangular-pref:filters`,aP=200;function oP(e){try{let t=localStorage.getItem(`${iP}:${e}`),n=t?JSON.parse(t):[];if(!Array.isArray(n))return[];let r=n.filter(e=>typeof e==`string`&&!!e.trim()&&e.length<=aP);return[...new Set(r)].slice(-8)}catch{return[]}}function sP(e,t){try{t.length?localStorage.setItem(`${iP}:${e}`,JSON.stringify(t)):localStorage.removeItem(`${iP}:${e}`)}catch{}}var cP=class e{value=av(``);label=$(`Filter`);placeholder=$(`Filter`);inputId=$(null);describedBy=$(null);saveKey=$(null);input=sv.required(`input`);host=x(kl);injector=x(_s);announcement=T(``);query=X(()=>this.value().trim());saved=Q(()=>{let e=this.saveKey();return e?oP(e):[]});canSave=X(()=>{let e=this.query();return!!this.saveKey()&&!!e&&e.length<=aP&&!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),sP(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),sP(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){td(()=>{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&&Og(t.input,$N,5),e&2&&kg()},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),sg(2,`circle`,3)(3,`path`,4),z(),ls(),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,eP,5,1,`button`,6),A(7,nP,3,0,`ul`,7),A(8,rP,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%] { +}`]})},GN=12,KN=900;function qN(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 JN=class{options;injector=x(_s);visibleTop=T(0);viewport=T(KN);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)-GN));return{start:a,end:Math.min(t,Math.max(a,Math.ceil((i+r)/n)+GN))}}),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(),rd(()=>this.update(),{injector:this.injector})}),x(ys).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:KN)}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&&rd(t,{injector:this.injector})}};function YN(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 XN=e=>{let t=parseFloat(e);return Number.isFinite(t)?t:0};function ZN(e,t=8){let n=e.ownerDocument.defaultView;if(!n)return e.offsetHeight+t;let r=YN(e),i=r?n.getComputedStyle(r):null,a=i?XN(i.paddingTop):0,o=i?XN(i.scrollPaddingTop):0,s=XN(n.getComputedStyle(e).top);return Math.max(0,Math.ceil(a+s+e.offsetHeight+t-o))}function QN(e,t,n=8){let r=YN(e),i=t.getBoundingClientRect().bottom+n-e.getBoundingClientRect().top;i<=0||(r?r.scrollTop-=i:e.ownerDocument.defaultView?.scrollBy(0,-i))}var $N=[`input`];function eP(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),lg(2,`path`,11),z(),ls(),R(3,`span`,12),K(4,`Save`),z()()}e&2&&k(`aria-label`,`Save filter `+W().query())}function tP(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),lg(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 nP(e,t){if(e&1&&(R(0,`ul`,7),M(1,tP,6,6,`li`,13,Qh),z()),e&2){let e=W();D(),N(e.saved())}}function rP(e,t){if(e&1&&(R(0,`span`,8),K(1),z()),e&2){let e=W();D(),q(e.announcement())}}var iP=`pangular-pref:filters`,aP=200;function oP(e){try{let t=localStorage.getItem(`${iP}:${e}`),n=t?JSON.parse(t):[];if(!Array.isArray(n))return[];let r=n.filter(e=>typeof e==`string`&&!!e.trim()&&e.length<=aP);return[...new Set(r)].slice(-8)}catch{return[]}}function sP(e,t){try{t.length?localStorage.setItem(`${iP}:${e}`,JSON.stringify(t)):localStorage.removeItem(`${iP}:${e}`)}catch{}}var cP=class e{value=sv(``);label=$(`Filter`);placeholder=$(`Filter`);inputId=$(null);describedBy=$(null);saveKey=$(null);input=lv.required(`input`);host=x(kl);injector=x(_s);announcement=T(``);query=X(()=>this.value().trim());saved=Q(()=>{let e=this.saveKey();return e?oP(e):[]});canSave=X(()=>{let e=this.query();return!!this.saveKey()&&!!e&&e.length<=aP&&!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),sP(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),sP(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){rd(()=>{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&&Ag(t.input,$N,5),e&2&&jg()},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),lg(2,`circle`,3)(3,`path`,4),z(),ls(),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,eP,5,1,`button`,6),A(7,nP,3,0,`ul`,7),A(8,rP,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,21 @@ input[_ngcontent-%COMP%]:focus { .save[_ngcontent-%COMP%] { transition: none; } -}`]})},lP=[`filterInput`],uP=[`treeEl`],dP=[`propFilterInput`],fP=()=>[],pP=e=>({$implicit:e}),mP=e=>({kind:`component`,id:e}),hP=(e,t)=>t.row.node.id,gP=(e,t)=>t.outlet+t.route,_P=(e,t)=>t+e;function vP(e,t){return this.sourceKey(t)}var yP=(e,t)=>t.formId,bP=(e,t)=>t.name+t.index,xP=(e,t)=>t.name,SP=(e,t)=>t.id,CP=(e,t)=>t.token+e;function wP(e,t){if(e&1){let e=B();F(0,`span`,37),K(1,`Page`),I(),F(2,`app-select`,38),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 TP(e,t){if(e&1){let e=B();F(0,`button`,39),H(`click`,function(){return S(e),C(W(2).toggleDirectiveHosts())}),w(),F(1,`svg`,12),L(2,`path`,40)(3,`path`,41),I(),ls(),F(4,`span`,15),K(5,`Directive hosts`),I()()}e&2&&k(`aria-pressed`,W(2).showDirectiveHosts())}function EP(e,t){if(e&1){let e=B();F(0,`button`,42),H(`click`,function(){S(e);let t=W(2);return C(t.picking()?t.cancelPick():t.pick())}),w(),F(1,`svg`,12),L(2,`path`,43),I(),ls(),F(3,`span`,15),K(4),I()()}if(e&2){let e=W(2);G(`on`,e.picking()),k(`title`,e.pickLabel()),D(4),q(e.pickLabel())}}function DP(e,t){if(e&1&&(F(0,`p`,21),K(1),I()),e&2){let e=W(2);D(),q(e.pickMessage())}}function OP(e,t){if(e&1&&(F(0,`p`,22),K(1),I()),e&2){let e=W(2);D(),q(e.truncationText())}}function kP(e,t){e&1&&(F(0,`p`,45),K(1,`The filter only searches the components the tree lists.`),I())}function AP(e,t){e&1&&(F(0,`p`,45),K(1,`Directive hosts are hidden, so they are not searched.`),I())}function jP(e,t){if(e&1){let e=B();F(0,`div`,26)(1,`p`,44),K(2),I(),A(3,kP,2,0,`p`,45),A(4,AP,2,0,`p`,45),F(5,`button`,46),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 MP(e,t){if(e&1&&(F(0,`p`,27),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 NP(e,t){if(e&1){let e=B();F(0,`span`,54),H(`click`,function(t){S(e),W();let n=O_(0);return C(W(2).toggle(n.node.id,t))}),w(),F(1,`svg`,55),L(2,`path`,56),I()()}e&2&&(W(),G(`open`,O_(0).expanded))}function PP(e,t){e&1&&L(0,`span`,49)}function FP(e,t){if(e&1&&(F(0,`span`,57),K(1),I(),F(2,`span`,58),K(3),I(),F(4,`span`,25),K(5,`directive host`),I()),e&2){W();let e=O_(0),t=W(2);D(),J(`<`,e.node.tag,`>`),D(),k(`title`,e.node.directives?.join(`, `)),D(),q(t.hostLabel(e.node))}}function IP(e,t){if(e&1&&(F(0,`span`,59),K(1),I(),F(2,`span`,60),K(3),I()),e&2){W();let e=O_(0);k(`title`,e.node.name),D(),q(e.node.name),D(),k(`title`,`<`+e.node.tag+`>`),D(),J(`<`,e.node.tag,`>`)}}function LP(e,t){if(e&1&&(F(0,`span`)(1,`span`,25),K(2,`Hydration: `),I(),K(3),I()),e&2){let e=t,n=W(3);Qg(`hyd hyd-`+e),D(3),q(n.hydrationText(e))}}function RP(e,t){if(e&1&&(F(0,`span`,51),K(1),I()),e&2){let e=t.$implicit;D(),q(e.route||`/`)}}function zP(e,t){if(e&1&&(F(0,`span`,52),K(1),F(2,`span`,25),K(3),I()()),e&2){let e=t;D(),J(` `,e),D(2),J(` `,e===1?`check`:`checks`,` while recording`)}}function BP(e,t){if(e&1&&(F(0,`span`,53),K(1),F(2,`span`,25),K(3),I()()),e&2){W();let e=O_(0);k(`title`,e.node.directives.join(`, `)),D(),J(` +`,e.node.directives.length,` `),D(2),J(` `,e.node.directives.length===1?`directive`:`directives`,` `)}}function VP(e,t){if(e&1){let e=B();E_(0),F(1,`div`,47),H(`click`,function(){S(e);let t=O_(0);return C(W(2).select(t.node.id))})(`focus`,function(t){S(e);let n=O_(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=O_(0);return C(W(2).highlight(t.node.id))})(`mouseleave`,function(){return S(e),C(W(2).highlight(null))}),A(2,NP,3,2,`span`,48)(3,PP,1,0,`span`,49),A(4,FP,6,3)(5,IP,4,4),A(6,LP,4,3,`span`,50),M(7,RP,2,1,`span`,51,gP),A(9,zP,4,2,`span`,52),A(10,BP,4,3,`span`,53),I()}if(e&2){let e,n,r=t.$implicit,i=W(2),a=D_(r.row);D(),Zg(`--%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)??L_(20,fP)),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 HP(e,t){if(e&1&&(F(0,`div`,61),K(1),I()),e&2){let e=t;Zg(`top`,e.top,`px`),D(),J(` `,e.text,` `)}}function UP(e,t){if(e&1&&(F(0,`li`,69),K(1),dg(2,72),I()),e&2){let e=t.$implicit;W(3);let n=Ag(3);D(),J(` `,e,` `),D(),P(`ngTemplateOutlet`,n)(`ngTemplateOutletContext`,R_(3,pP,e))}}function WP(e,t){if(e&1){let e=B();F(0,`div`,71)(1,`button`,46),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 GP(e,t){if(e&1&&(F(0,`section`,31)(1,`header`,62)(2,`span`,63),K(3,`directive host`),I(),F(4,`h2`,64),K(5),I(),F(6,`span`,65),K(7),I()(),F(8,`div`,66)(9,`h3`),K(10,` Directives `),F(11,`span`,67),K(12),I()(),F(13,`ul`,68),M(14,UP,3,5,`li`,69,_P),I()(),F(16,`div`,66)(17,`p`,70),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,WP,3,1,`div`,71),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??L_(4,fP)),D(5),j((e=r.ownerOf(n.id))?19:-1,e)}}function KP(e,t){if(e&1&&(F(0,`p`,73),L(1,`app-source-link`,77),I()),e&2){let e=t;D(),P(`file`,e.file)(`line`,e.line)}}function qP(e,t){if(e&1&&(F(0,`p`,78)(1,`span`,80),K(2,`Likely`),I(),F(3,`span`,25),K(4,`, matched by class name: `),I(),L(5,`app-source-link`,77),I()),e&2){W();let e=O_(0);P(`title`,W(3).guessTitle),D(5),P(`file`,e[0].file)(`line`,e[0].line)}}function JP(e,t){if(e&1&&(F(0,`li`),L(1,`app-source-link`,77),I()),e&2){let e=t.$implicit;D(),P(`file`,e.file)(`line`,e.line)}}function YP(e,t){if(e&1&&(F(0,`div`,79)(1,`p`,81)(2,`span`,80),K(3,`Not certain`),I(),K(4),I(),F(5,`ul`,82),M(6,JP,2,2,`li`,null,vP,!0),I()()),e&2){W();let e=O_(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 XP(e,t){if(e&1&&(E_(0),A(1,qP,6,3,`p`,78)(2,YP,8,3,`div`,79)),e&2){let e=W(),t=D_(W(2).sourceCandidates(e));D(),j(t.length===1?1:t.length>1?2:-1)}}function ZP(e,t){if(e&1){let e=B();F(0,`div`,83)(1,`button`,46),H(`click`,function(){S(e);let t=W();return C(W(2).revealInElements(t))}),K(2,`Reveal in Elements`),I(),F(3,`button`,46),H(`click`,function(){S(e);let t=W();return C(W(2).openSource(t))}),K(4,`Open source`),I()(),F(5,`p`,84),K(6),I()}if(e&2){let e=W(3);D(6),q(e.actionMessage())}}function QP(e,t){if(e&1){let e=B();F(0,`button`,86),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 $P(e,t){if(e&1&&(F(0,`div`,74),M(1,QP,2,1,`button`,85,yP),I()),e&2){let e=W(),t=W(3);D(),N(t.formsIn(e.file))}}function eF(e,t){e&1&&A(0,$P,3,0,`div`,74),e&2&&j(W(3).formsIn(t.file).length?0:-1)}function tF(e,t){if(e&1){let e=B();F(0,`button`,46),H(`click`,function(){S(e);let t=W(2);return C(W(2).openInjector(t))}),K(1,` Show in Injectors `),F(2,`span`,25),K(3),I()()}if(e&2){let e=W(2);D(3),J(`: `,e.name)}}function nF(e,t){if(e&1){let e=B();F(0,`button`,46),H(`click`,function(){S(e);let t=W(2);return C(W(2).openSignals(t))}),K(1,` Show in Signals `),F(2,`span`,25),K(3),I()()}if(e&2){let e=W(2);D(3),J(`: `,e.name)}}function rF(e,t){if(e&1&&(F(0,`div`,74),A(1,tF,4,1,`button`,87),A(2,nF,4,1,`button`,87),I()),e&2){let e=W(3);D(),j(e.canShowInjector()?1:-1),D(),j(e.canShowSignals()?2:-1)}}function iF(e,t){if(e&1){let e=B();F(0,`div`,88)(1,`button`,46),H(`click`,function(){let t=S(e);return C(W(3).copyJson(t))}),K(2,`Copy as JSON`),I(),F(3,`button`,46),H(`click`,function(){let t=S(e);return C(W(3).copyHostPath(t))}),K(4,`Copy host path`),I()(),F(5,`p`,84),K(6),I()}if(e&2){let e=W(3);D(6),q(e.copyMessage())}}function aF(e,t){if(e&1&&L(0,`app-store-global`,75),e&2){let e=W(),t=W(2);P(`rpc`,t.rpc())(`pageId`,t.page()?.pageId)(`target`,R_(4,mP,e.id))(`label`,e.name)}}function oF(e,t){if(e&1&&(F(0,`dt`),K(1,`Routed`),I(),F(2,`dd`,90),K(3),I()),e&2){let e=t.$implicit;D(3),Y(``,e.route||`/`,` in outlet `,e.outlet)}}function sF(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 cF(e,t){if(e&1){let e=B();F(0,`div`,95)(1,`p`,44),K(2),I(),F(3,`p`,45),K(4,` The filter searches names, and the nested keys of values you opened. `),I(),F(5,`button`,46),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 lF(e,t){if(e&1&&(F(0,`span`,100),K(1),I()),e&2){let e=W().$implicit;D(),J(`(`,e.prop,`)`)}}function uF(e,t){if(e&1&&(F(0,`li`,98)(1,`span`,99),K(2),A(3,lF,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 dF(e,t){if(e&1&&(F(0,`ul`,96),M(1,uF,5,11,`li`,97,xP),I()),e&2){let e=W(2);D(),N(e.inputs)}}function fF(e,t){e&1&&(F(0,`p`,70),K(1,`No inputs.`),I())}function pF(e,t){if(e&1&&(F(0,`div`,66)(1,`h3`),K(2,` Inputs `),F(3,`span`,67),K(4),I()(),A(5,dF,3,0,`ul`,96)(6,fF,2,0,`p`,70),I()),e&2){let e=W();D(4),q(e.inputs.length),D(),j(e.inputs.length?5:6)}}function mF(e,t){if(e&1&&(F(0,`li`,103)(1,`span`,90),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 hF(e,t){if(e&1&&(F(0,`ul`,68),M(1,mF,5,4,`li`,102,xP),I()),e&2){let e=W(2);D(),N(e.outputs)}}function gF(e,t){e&1&&(F(0,`p`,70),K(1,`No outputs.`),I())}function _F(e,t){if(e&1&&(F(0,`div`,66)(1,`h3`),K(2,` Outputs `),F(3,`span`,67),K(4),I()(),A(5,hF,3,0,`ul`,68)(6,gF,2,0,`p`,70),I()),e&2){let e=W();D(4),q(e.outputs.length),D(),j(e.outputs.length?5:6)}}function vF(e,t){if(e&1&&(F(0,`span`,105),K(1),I()),e&2){let e=W().$implicit;D(),q(e.kind)}}function yF(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`,25),K(3),I()()}if(e&2){let e=W().$implicit;D(3),J(`: `,e.name)}}function bF(e,t){if(e&1&&(F(0,`li`,98)(1,`span`,99),K(2),A(3,vF,2,1,`span`,105),A(4,yF,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 xF(e,t){if(e&1&&(F(0,`ul`,96),M(1,bF,6,12,`li`,97,xP),I()),e&2){let e=W(2);D(),N(e.properties)}}function SF(e,t){e&1&&(F(0,`p`,70),K(1,`No other properties.`),I())}function CF(e,t){if(e&1&&(F(0,`div`,66)(1,`h3`),K(2,` Properties `),F(3,`span`,67),K(4),I()(),A(5,xF,3,0,`ul`,96)(6,SF,2,0,`p`,70),I()),e&2){let e=W();D(4),q(e.properties.length),D(),j(e.properties.length?5:6)}}function wF(e,t){if(e&1&&(F(0,`li`,69),K(1),I()),e&2){let e=t.$implicit;D(),q(e)}}function TF(e,t){if(e&1&&(F(0,`div`,66)(1,`h3`),K(2,` DOM listeners `),F(3,`span`,67),K(4),I()(),F(5,`ul`,68),M(6,wF,2,1,`li`,69,Xh),I()()),e&2){let e=W(2);D(4),q(e.listeners.length),D(2),N(e.listeners)}}function EF(e,t){if(e&1&&(F(0,`li`,103)(1,`span`,90),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 DF(e,t){if(e&1&&(F(0,`div`,66)(1,`h3`),K(2,` Defer blocks `),F(3,`span`,67),K(4),I()(),F(5,`ul`,68),M(6,EF,5,2,`li`,103,SP),I()()),e&2){let e=W(5);D(4),q(e.ownedDeferBlocks().length),D(2),N(e.ownedDeferBlocks())}}function OF(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 kF(e,t){if(e&1&&(F(0,`ul`,96),M(1,OF,4,10,`li`,97,xP),I()),e&2){let e=W().$implicit;D(),N(e.inputs)}}function AF(e,t){if(e&1&&(F(0,`li`,103)(1,`span`,90),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 jF(e,t){if(e&1&&(F(0,`ul`,68),M(1,AF,5,4,`li`,102,xP),I()),e&2){let e=W().$implicit;D(),N(e.outputs)}}function MF(e,t){e&1&&(F(0,`p`,70),K(1,`No inputs or outputs.`),I())}function NF(e,t){if(e&1&&(F(0,`div`,66)(1,`h3`)(2,`span`,90),K(3),I(),F(4,`span`,105),K(5,`directive on host`),I()(),F(6,`p`,108),dg(7,72),I(),A(8,kF,3,0,`ul`,96),A(9,jF,3,0,`ul`,68),A(10,MF,2,0,`p`,70),I()),e&2){let e=t.$implicit;W(5);let n=Ag(3);D(3),q(e.name),D(4),P(`ngTemplateOutlet`,n)(`ngTemplateOutletContext`,R_(6,pP,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 PF(e,t){if(e&1&&(A(0,cF,7,1,`div`,95),A(1,pF,7,2,`div`,66),A(2,_F,7,2,`div`,66),A(3,CF,7,2,`div`,66),A(4,TF,8,1,`div`,66),A(5,DF,8,1,`div`,66),M(6,NF,11,8,`div`,66,bP)),e&2){let e=t,n=W(),r=W(3);j(r.propQuery()&&!e.count?0:-1),D(),j(!r.propQuery()||e.inputs.length?1:-1),D(),j(!r.propQuery()||e.outputs.length?2:-1),D(),j(!r.propQuery()||e.properties.length?3:-1),D(),j(!r.propQuery()&&n.listeners.length?4:-1),D(),j(!r.propQuery()&&r.ownedDeferBlocks().length?5:-1),D(),N(e.directives)}}function FF(e,t){if(e&1&&(F(0,`span`,105),K(1),I()),e&2){let e=t.$implicit;D(),q(e)}}function IF(e,t){if(e&1&&(F(0,`span`,112),K(1,`from `),F(2,`span`,90),K(3),I()()),e&2){let e=W().$implicit;D(3),q(e.providedByName??`an injector`)}}function LF(e,t){e&1&&(F(0,`span`,113),K(1,`not provided`),I())}function RF(e,t){if(e&1&&(F(0,`li`,110)(1,`span`,111),K(2),I(),M(3,FF,2,1,`span`,105,Xh),A(5,IF,4,1,`span`,112)(6,LF,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 zF(e,t){if(e&1&&(F(0,`ul`,93),M(1,RF,7,2,`li`,110,CP),I()),e&2){let e=W();D(),N(e.dependencies)}}function BF(e,t){e&1&&(F(0,`p`,70),K(1,`Nothing is injected through the constructor or inject().`),I())}function VF(e,t){if(e&1){let e=B();F(0,`app-component-pipes`,114),H(`showPipe`,function(t){return S(e),C(W(4).showPipe.emit(t))}),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 HF(e,t){if(e&1){let e=B();F(0,`dl`,89)(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`,90),K(12),I(),M(13,oF,4,2,null,null,gP),I(),F(15,`div`,91)(16,`app-search-field`,92,3),w_(`valueChange`,function(t){S(e);let n=W(3);return C_(n.propFilter,t)||(n.propFilter=t),C(t)}),I(),A(18,sF,2,2,`span`,8),F(19,`p`,20),K(20),I()(),A(21,PF,8,6),F(22,`div`,66)(23,`h3`),K(24,` Injected `),F(25,`span`,67),K(26),I()(),A(27,zF,3,0,`ul`,93)(28,BF,2,0,`p`,70),I(),A(29,VF,1,4,`app-component-pipes`,94)}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)??L_(10,fP)),D(3),S_(`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 UF(e,t){e&1&&(F(0,`div`,76),L(1,`span`,115),F(2,`p`,45),K(3,`Reading live values from the page…`),I()())}function WF(e,t){if(e&1&&(F(0,`section`,31)(1,`header`,62)(2,`span`,63),K(3,`component`),I(),F(4,`h2`,64),K(5),I(),F(6,`span`,65),K(7),I(),A(8,KP,2,2,`p`,73)(9,XP,3,2),A(10,ZP,7,1),A(11,eF,1,1),A(12,rF,3,2,`div`,74),A(13,iF,7,1),A(14,aF,1,6,`app-store-global`,75),I(),A(15,HF,30,11)(16,UF,4,0,`div`,76),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 GF(e,t){e&1&&(F(0,`p`,44),K(1,`The selected component was destroyed`),I(),F(2,`p`,45)(3,`span`,90),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 KF(e,t){e&1&&(F(0,`p`,45),K(1,` Select a component to see its live inputs, properties, outputs, change detection and injected services. `),I())}function qF(e,t){if(e&1&&(F(0,`div`,32),A(1,GF,6,1)(2,KF,2,0,`p`,45),I()),e&2){let e,t=W(2);D(),j((e=t.destroyed())?1:2,e)}}function JF(e,t){e&1&&L(0,`app-angular-unavailable`,34),e&2&&P(`page`,W(2).angularPage())}function YF(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 XF(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 ZF(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