diff --git a/app/src/__tests__/cd-cycle-chart.test.ts b/app/src/__tests__/cd-cycle-chart.test.ts index 24c6bca2..5713f7c8 100644 --- a/app/src/__tests__/cd-cycle-chart.test.ts +++ b/app/src/__tests__/cd-cycle-chart.test.ts @@ -342,8 +342,8 @@ describe('CdRecording with the chart', () => { await fixture.whenStable(); const host = fixture.nativeElement as HTMLElement; const table = () => - [...host.querySelectorAll('.cd-grid table tbody tr')].map( - (tr) => tr.querySelector('td')!.textContent, + [...host.querySelectorAll('.cd-grid table:first-of-type tbody tr')].map((tr) => + tr.querySelector('td')!.textContent!.trim(), ); expect(host.querySelector('app-cd-cycle-chart')).not.toBeNull(); expect(table()).toEqual(['List', 'Cart']); diff --git a/app/src/__tests__/component-detail-actions.test.ts b/app/src/__tests__/component-detail-actions.test.ts new file mode 100644 index 00000000..519f36ac --- /dev/null +++ b/app/src/__tests__/component-detail-actions.test.ts @@ -0,0 +1,216 @@ +import { TestBed, type ComponentFixture } from '@angular/core/testing'; +import type { DevframeRpcClient } from 'devframe/client'; +import { afterEach, describe, expect, it, vi } from 'vitest'; +import { ComponentTree } from '../pages/component-tree'; +import { componentJson, hostPathText } from '../pages/component-copy'; +import { ValueFlash, changedKeys } from '../pages/component-value-flash'; +import type { SignalFocus } from '../types/signal-focus.types'; + +function detail(count: number) { + return { + id: 'c1', + name: 'Cart', + tag: 'app-cart', + path: 'app-root > app-cart', + selector: 'body:nth-child(2) > app-root:nth-child(1) > app-cart:nth-child(1)', + inputs: [{ name: 'title', prop: 'title', value: 'Basket' }], + outputs: [{ name: 'checkout', prop: 'checkout', listened: true }], + properties: [ + { name: 'count', prop: 'count', value: count, kind: 'signal' }, + { name: 'token', prop: 'token', value: '[redacted]' }, + ], + listeners: [], + directives: [], + dependencies: [ + { from: 'c1', token: 'CartStore', flags: [], providedBy: 'r', providedByName: 'Root' }, + ], + }; +} + +function page(count: number) { + return { + pageId: 'p1', + roots: [{ id: 'c1', name: 'Cart', tag: 'app-cart', children: [] }], + count: 1, + detail: detail(count), + reportedAt: 1000, + deferBlocks: [ + { + id: 'd1', + owner: { id: 'c1', name: 'Cart', tag: 'app-cart' }, + state: 'placeholder', + hydration: 'not-configured', + triggers: ['on viewport'], + rootIds: [], + }, + ], + }; +} + +function client() { + const listeners: ((value: unknown) => void)[] = []; + let value: unknown = { pages: { p1: page(1) } }; + const rpc = { + call: () => Promise.resolve([]), + callEvent: () => Promise.resolve(), + sharedState: (name: string) => + Promise.resolve({ + value: () => (name === 'component-tree' ? value : null), + on: (_event: string, listener: (value: unknown) => void) => { + if (name === 'component-tree') listeners.push(listener); + return () => {}; + }, + }), + }; + const push = (next: unknown) => { + value = next; + for (const listener of listeners) listener(next); + }; + const rpcClient = { connectionMeta: {}, scope: () => ({ rpc }) } as unknown as DevframeRpcClient; + return { rpcClient, push }; +} + +async function settle(fixture: ComponentFixture) { + for (let i = 0; i < 3; i++) { + await new Promise((resolve) => setTimeout(resolve)); + await fixture.whenStable(); + } +} + +async function selected() { + const fixture = TestBed.createComponent(ComponentTree); + const { rpcClient, push } = client(); + fixture.componentRef.setInput('rpc', rpcClient); + fixture.componentRef.setInput('canShowSignals', true); + await settle(fixture); + fixture.componentInstance.selectedId.set('c1'); + await settle(fixture); + return { fixture, push, el: fixture.nativeElement as HTMLElement }; +} + +function button(el: HTMLElement, text: string): HTMLButtonElement { + const found = Array.from(el.querySelectorAll('button')).find((b) => + b.textContent?.replace(/\s+/g, ' ').trim().startsWith(text), + ); + if (!found) throw new Error(`no button ${text}`); + return found; +} + +describe('component detail actions', () => { + afterEach(() => { + document.body.innerHTML = ''; + vi.restoreAllMocks(); + vi.useRealTimers(); + }); + + it('copies the detail as JSON and the host selector', async () => { + const writeText = vi.fn((_text: string) => Promise.resolve()); + Object.defineProperty(navigator, 'clipboard', { value: { writeText }, configurable: true }); + const { fixture, el } = await selected(); + button(el, 'Copy as JSON').click(); + await settle(fixture); + const json = JSON.parse(writeText.mock.calls[0]![0]); + expect(json).toMatchObject({ + component: 'Cart', + hostPath: 'app-root > app-cart', + inputs: { title: 'Basket' }, + outputs: [{ name: 'checkout', listened: true }], + properties: { count: 1, token: '[redacted]' }, + injected: [{ token: 'CartStore', providedBy: 'Root' }], + }); + expect(el.textContent).toContain('Copied Cart as JSON.'); + button(el, 'Copy host path').click(); + await settle(fixture); + expect(writeText).toHaveBeenLastCalledWith(detail(1).selector); + expect(el.textContent).toContain('Copied the host selector.'); + }); + + it('says so when the clipboard refuses', async () => { + Object.defineProperty(navigator, 'clipboard', { + value: { writeText: () => Promise.reject(new Error('denied')) }, + configurable: true, + }); + const { fixture, el } = await selected(); + button(el, 'Copy host path').click(); + await settle(fixture); + expect(el.textContent).toContain('The clipboard is not available here.'); + }); + + it('outlines a value that changed in the last push', async () => { + const { fixture, push, el } = await selected(); + const rows = () => Array.from(el.querySelectorAll('.prop.changed')).map((r) => r.textContent); + expect(rows()).toEqual([]); + push({ pages: { p1: page(2) } }); + await settle(fixture); + expect(rows()).toHaveLength(1); + expect(rows()[0]).toContain('count'); + }); + + it('opens a signal property in the Signals tab', async () => { + const { fixture, el } = await selected(); + const opened: SignalFocus[] = []; + fixture.componentInstance.showSignals.subscribe((focus) => opened.push(focus)); + const link = el.querySelector('.signal-link')!; + expect(link.textContent).toContain('Show in Signals'); + link.click(); + button(el, 'Show in Signals').click(); + expect(opened).toEqual([ + { componentId: 'c1', pageId: 'p1', key: 'count' }, + { componentId: 'c1', pageId: 'p1' }, + ]); + }); + + it("lists the component's own defer blocks", async () => { + const { el } = await selected(); + const heading = Array.from(el.querySelectorAll('.detail h3')).find((h) => + h.textContent?.includes('Defer blocks'), + ); + expect(heading?.parentElement?.textContent).toContain('on viewport'); + }); +}); + +describe('component copy text', () => { + it('falls back to the component path without a selector', () => { + expect(hostPathText({ path: 'Page > Label' })).toBe('Page > Label'); + expect(hostPathText({ path: 'a > b', selector: 'a > b:nth-child(2)' })).toBe( + 'a > b:nth-child(2)', + ); + }); + + it('keeps the masked values the page sent', () => { + const text = componentJson({ ...detail(1), selector: undefined }); + expect(JSON.parse(text).properties.token).toBe('[redacted]'); + expect(JSON.parse(text).selector).toBeUndefined(); + }); +}); + +describe('ValueFlash', () => { + it('flashes changed keys for a second, and starts over for another component', () => { + vi.useFakeTimers(); + const flash = new ValueFlash(); + flash.update('p1|c1', new Map([['input:a', 1]])); + flash.update('p1|c1', new Map([['input:a', 2]])); + expect([...flash.changed()]).toEqual(['input:a']); + vi.advanceTimersByTime(999); + expect(flash.changed().size).toBe(1); + vi.advanceTimersByTime(1); + expect(flash.changed().size).toBe(0); + flash.update('p1|c2', new Map([['input:a', 3]])); + expect(flash.changed().size).toBe(0); + }); + + it('does not count a new or a removed key as a change', () => { + expect( + changedKeys( + new Map([ + ['a', '1'], + ['b', '2'], + ]), + new Map([ + ['a', '1'], + ['c', '3'], + ]), + ), + ).toEqual([]); + }); +}); diff --git a/app/src/__tests__/component-pick-keys.test.ts b/app/src/__tests__/component-pick-keys.test.ts new file mode 100644 index 00000000..816f97e1 --- /dev/null +++ b/app/src/__tests__/component-pick-keys.test.ts @@ -0,0 +1,74 @@ +import { TestBed, type ComponentFixture } from '@angular/core/testing'; +import type { DevframeRpcClient } from 'devframe/client'; +import { afterEach, describe, expect, it } from 'vitest'; +import { ComponentTree } from '../pages/component-tree'; + +const page = { + pageId: 'p1', + roots: [{ id: 'c1', name: 'App', tag: 'app-root', children: [] }], + count: 1, + detail: null, + reportedAt: 1000, +}; + +function client(calls: { name: string; args: unknown }[]) { + const rpc = { + call: (name: string, args: unknown) => { + calls.push({ name, args }); + if (name === 'request-component-pick') return new Promise(() => {}); + if (name === 'request-component-pick-move') { + return Promise.resolve({ moved: true, id: 'c1', name: 'App', tag: 'app-root' }); + } + return Promise.resolve([]); + }, + callEvent: () => Promise.resolve(), + sharedState: (name: string) => + Promise.resolve({ + value: () => (name === 'component-tree' ? { pages: { p1: page } } : null), + on: () => () => {}, + }), + }; + return { connectionMeta: {}, scope: () => ({ rpc }) } as unknown as DevframeRpcClient; +} + +async function settle(fixture: ComponentFixture) { + for (let i = 0; i < 3; i++) { + await new Promise((resolve) => setTimeout(resolve)); + await fixture.whenStable(); + } +} + +describe('keyboard pick', () => { + afterEach(() => { + document.body.innerHTML = ''; + }); + + it('sends the arrow keys and Enter to the page while picking, and announces the component', async () => { + const calls: { name: string; args: unknown }[] = []; + const fixture = TestBed.createComponent(ComponentTree); + fixture.componentRef.setInput('rpc', client(calls)); + await settle(fixture); + const el = fixture.nativeElement as HTMLElement; + const press = (key: string) => { + const event = new KeyboardEvent('keydown', { key, bubbles: true, cancelable: true }); + el.querySelector('.pick')!.dispatchEvent(event); + return event; + }; + expect(press('ArrowDown').defaultPrevented).toBe(false); + void fixture.componentInstance.pick(); + await settle(fixture); + expect(press('ArrowDown').defaultPrevented).toBe(true); + await settle(fixture); + expect(calls.filter((c) => c.name === 'request-component-pick-move')).toEqual([ + { name: 'request-component-pick-move', args: { pageId: 'p1', key: 'next' } }, + ]); + expect(fixture.componentInstance.announcement()).toBe( + 'App . Press Enter to pick it.', + ); + expect(press('Enter').defaultPrevented).toBe(true); + expect(calls.at(-1)).toEqual({ + name: 'request-component-pick-move', + args: { pageId: 'p1', key: 'pick' }, + }); + }); +}); diff --git a/app/src/__tests__/component-tree-defer.test.ts b/app/src/__tests__/component-tree-defer.test.ts index 3e3b2871..a48d95c1 100644 --- a/app/src/__tests__/component-tree-defer.test.ts +++ b/app/src/__tests__/component-tree-defer.test.ts @@ -58,6 +58,39 @@ describe('defer blocks', () => { expect(badge.classList.contains('defer-state-complete')).toBe(true); }); + it('says when a block hydrated before the devtools attached', async () => { + const fixture = TestBed.createComponent(ComponentTree); + const block = (id: string, hydratedAt?: number) => ({ + id, + state: 'complete', + hydration: 'hydrated', + triggers: ['hydrate on interaction'], + rootIds: [], + ...(hydratedAt ? { hydratedAt } : {}), + }); + const page = { + pageId: 'p1', + roots: [{ id: 'c1', name: 'App', tag: 'app-root', children: [] }], + count: 1, + detail: null, + reportedAt: 1000, + deferBlocks: [block('d1'), block('d2', 900)], + }; + fixture.componentRef.setInput('rpc', client({ p1: page })); + for (let i = 0; i < 3; i++) { + await new Promise((resolve) => setTimeout(resolve)); + await fixture.whenStable(); + } + const flags = Array.from( + (fixture.nativeElement as HTMLElement).querySelectorAll('.defer-row'), + ).map((row) => + Array.from(row.querySelectorAll('.flag')).map((flag) => flag.textContent?.trim()), + ); + expect(flags[0]).toContain('hydrated before inspection'); + expect(flags[1]).toContain('hydrated'); + expect(flags[1]).not.toContain('hydrated before inspection'); + }); + it('keeps a row without an owner focusable, marked aria-disabled', async () => { const fixture = TestBed.createComponent(ComponentTree); const page = { @@ -232,3 +265,62 @@ describe('defer blocks', () => { fixture.destroy(); }); }); + +describe('defer block details', () => { + afterEach(() => { + document.body.innerHTML = ''; + }); + + it('open below the row with the block id, transitions and mismatches inside it', async () => { + const fixture = TestBed.createComponent(ComponentTree); + const page = { + pageId: 'p1', + roots: [{ id: 'c1', name: 'App', tag: 'app-root', children: [] }], + count: 1, + detail: null, + reportedAt: 1000, + hydration: { + hydrated: true, + counts: { hydrated: 1, skipped: 0, mismatched: 1, clientOnly: 0, dehydratedBlocks: 0 }, + mismatches: [{ id: 'e9', name: 'Note', tag: 'app-note' }], + }, + deferBlocks: [ + { + id: 'd4', + owner: { id: 'c1', name: 'App', tag: 'app-root' }, + state: 'complete', + hydration: 'not-configured', + triggers: ['on idle'], + rootIds: ['e9'], + since: 2000, + transitions: [ + { state: 'placeholder', hydration: 'not-configured', at: 1000 }, + { state: 'complete', hydration: 'not-configured', at: 2000 }, + ], + }, + ], + }; + fixture.componentRef.setInput('rpc', client({ p1: page })); + for (let i = 0; i < 3; i++) { + await new Promise((resolve) => setTimeout(resolve)); + await fixture.whenStable(); + } + const el = fixture.nativeElement as HTMLElement; + expect(el.querySelector('.defer-row')!.textContent).toContain('mismatch'); + const toggle = el.querySelector('.defer-toggle')!; + expect(toggle.getAttribute('aria-expanded')).toBe('false'); + expect(el.querySelector('.defer-detail')).toBeNull(); + toggle.click(); + await fixture.whenStable(); + expect(toggle.getAttribute('aria-expanded')).toBe('true'); + const detail = el.querySelector('.defer-detail')!; + expect(toggle.getAttribute('aria-controls')).toBe(detail.id); + expect(detail.textContent).toContain('d4'); + expect(Array.from(detail.querySelectorAll('.transitions .mono'), (s) => s.textContent)).toEqual( + ['placeholder', 'complete'], + ); + const revealed = vi.spyOn(fixture.componentInstance, 'revealNode'); + detail.querySelector('.mismatch-links button')!.click(); + expect(revealed).toHaveBeenCalledWith('e9'); + }); +}); diff --git a/app/src/__tests__/component-tree-directive-source.test.ts b/app/src/__tests__/component-tree-directive-source.test.ts new file mode 100644 index 00000000..cc651f3c --- /dev/null +++ b/app/src/__tests__/component-tree-directive-source.test.ts @@ -0,0 +1,87 @@ +import { TestBed, type ComponentFixture } from '@angular/core/testing'; +import type { DevframeRpcClient } from 'devframe/client'; +import { afterEach, describe, expect, it } from 'vitest'; +import { ComponentTree } from '../pages/component-tree'; + +const directive = (className: string, file: string) => ({ + selector: '[appTooltip]', + className, + kind: 'directive', + file, + line: 7, + inputs: [], + outputs: [], + isStandalone: true, +}); + +function fakeClient(components: unknown[]): DevframeRpcClient { + const page = { + pageId: 'p1', + roots: [ + { + id: 'c1', + name: 'Card', + tag: 'app-card', + children: [ + { + id: 'h1', + name: 'button', + tag: 'button', + kind: 'directive', + directives: ['Tooltip', 'Ripple'], + children: [], + }, + ], + }, + ], + count: 1, + directiveHostCount: 1, + detail: null, + reportedAt: 1000, + }; + const rpc = { + call: (name: string) => Promise.resolve(name === 'get-components' ? components : []), + callEvent: () => Promise.resolve(), + sharedState: (name: string) => + Promise.resolve({ + value: () => (name === 'component-tree' ? { pages: { p1: page } } : null), + on: () => () => {}, + }), + }; + return { connectionMeta: {}, scope: () => ({ rpc }) } as unknown as DevframeRpcClient; +} + +async function settle(fixture: ComponentFixture) { + for (let i = 0; i < 3; i++) { + await new Promise((resolve) => setTimeout(resolve)); + await fixture.whenStable(); + } +} + +describe('directive sources', () => { + afterEach(() => { + document.body.innerHTML = ''; + }); + + it('marks a directive file found by class name as likely, and names several files', async () => { + const fixture = TestBed.createComponent(ComponentTree); + fixture.componentRef.setInput( + 'rpc', + fakeClient([ + directive('Tooltip', 'src/app/tooltip.directive.ts'), + directive('Ripple', 'src/app/a/ripple.ts'), + directive('Ripple', 'src/app/b/ripple.ts'), + ]), + ); + await settle(fixture); + fixture.componentInstance.select('h1'); + await settle(fixture); + const chips = Array.from( + (fixture.nativeElement as HTMLElement).querySelectorAll('.detail .chip'), + ).map((chip) => chip.textContent?.replace(/\s+/g, ' ').trim()); + expect(chips[0]).toContain('Tooltip'); + expect(chips[0]).toContain('Likely'); + expect(chips[0]).toContain('tooltip.directive.ts'); + expect(chips[1]).toContain('2 source files define Ripple'); + }); +}); diff --git a/app/src/__tests__/duplicate-track-keys.test.ts b/app/src/__tests__/duplicate-track-keys.test.ts index bc950f37..c5cecdc8 100644 --- a/app/src/__tests__/duplicate-track-keys.test.ts +++ b/app/src/__tests__/duplicate-track-keys.test.ts @@ -61,11 +61,17 @@ describe('lists with repeated keys', () => { await settle(fixture); fixture.componentRef.setInput('page', cdPage([2, 7])); await settle(fixture); - const rows = Array.from( - (fixture.nativeElement as HTMLElement).querySelectorAll('tbody tr'), - (row) => Array.from(row.querySelectorAll('td'), (cell) => cell.textContent?.trim()).join('|'), - ); - expect(rows).toEqual(['ItemComponent|1|7.00 ms|7.00 ms', 'ItemComponent|1|2.00 ms|2.00 ms']); + const rows = (table: number) => + Array.from( + (fixture.nativeElement as HTMLElement) + .querySelectorAll('.cd-grid table') + [table]!.querySelectorAll('tbody tr'), + (row) => + Array.from(row.querySelectorAll('td'), (cell) => cell.textContent?.trim()).join('|'), + ); + expect(rows(0)).toEqual(['ItemComponent|1|7.00 ms|7.00 ms', 'ItemComponent|1|2.00 ms|2.00 ms']); + // The "Most often checked" table lists the same two classes. + expect(rows(1)).toEqual(['ItemComponent|1|1|7.00 ms', 'ItemComponent|1|1|2.00 ms']); expect(logs(spies)).not.toContain('NG0955'); }); @@ -87,3 +93,29 @@ describe('lists with repeated keys', () => { expect(logs(spies)).not.toContain('NG0955'); }); }); + +describe('change detection component tables', () => { + it('lists the most checked classes and selects one from its name', async () => { + const fixture = TestBed.createComponent(CdRecording); + const stat = (name: string, checks: number, ms: number) => ({ + name, + checks, + ms, + maxMs: ms, + cycles: checks, + }); + fixture.componentRef.setInput('page', { + ...cdPage([1, 1]), + components: [stat('Slow', 1, 9), stat('Busy', 12, 1)], + }); + await settle(fixture); + const shown: string[] = []; + fixture.componentInstance.showComponent.subscribe((name) => shown.push(name)); + const tables = (fixture.nativeElement as HTMLElement).querySelectorAll('.cd-grid table'); + const first = (table: Element) => table.querySelector('tbody .name-link')!; + expect(first(tables[0]!).textContent?.trim()).toBe('Slow'); + expect(first(tables[1]!).textContent?.trim()).toBe('Busy'); + (first(tables[1]!) as HTMLButtonElement).click(); + expect(shown).toEqual(['Busy']); + }); +}); diff --git a/app/src/__tests__/shell-deep-link.test.ts b/app/src/__tests__/shell-deep-link.test.ts index 6d588d53..bb2431ca 100644 --- a/app/src/__tests__/shell-deep-link.test.ts +++ b/app/src/__tests__/shell-deep-link.test.ts @@ -81,9 +81,21 @@ describe('deep links', () => { fixture.destroy(); }); + it('selects the signal graph of the component a signals link names', async () => { + const { fixture, app } = await boot('#tab=signals&id=c3&page=p1'); + expect(app.tab()).toBe('signals'); + expect(app.signalFocus()).toEqual({ componentId: 'c3', pageId: 'p1' }); + fixture.destroy(); + }); + it('opens a tab without an item, and ignores an unknown tab', async () => { - let booted = await boot('#tab=signals&id=3'); + let booted = await boot('#tab=dashboard&id=3'); + expect(booted.app.tab()).toBe('dashboard'); + booted.fixture.destroy(); + TestBed.resetTestingModule(); + booted = await boot('#tab=signals'); expect(booted.app.tab()).toBe('signals'); + expect(booted.app.signalFocus()).toBeNull(); booted.fixture.destroy(); TestBed.resetTestingModule(); booted = await boot('#tab=nope&id=3'); diff --git a/app/src/__tests__/signal-focus.test.ts b/app/src/__tests__/signal-focus.test.ts new file mode 100644 index 00000000..5c800e38 --- /dev/null +++ b/app/src/__tests__/signal-focus.test.ts @@ -0,0 +1,81 @@ +import { TestBed, type ComponentFixture } from '@angular/core/testing'; +import type { DevframeRpcClient } from 'devframe/client'; +import { afterEach, describe, expect, it } from 'vitest'; +import { SignalInspector } from '../pages/signal-inspector'; + +const graphOf = (componentId: string) => ({ + pageId: 'p1', + component: { id: componentId, name: 'Cart', tag: 'app-cart', path: 'app-cart' }, + nodes: [ + { + id: '1', + kind: 'signal', + label: 'count', + epoch: 1, + value: 1, + locator: { id: componentId, key: 'count' }, + }, + { id: '2', kind: 'computed', label: 'doubled', epoch: 1, value: 2 }, + ], + edges: [{ consumer: 1, producer: 0 }], +}); + +function fakeClient() { + const calls: { name: string; args: unknown }[] = []; + const listeners: ((value: unknown) => void)[] = []; + let state: unknown = { graph: graphOf('c0'), pages: { p1: graphOf('c0') } }; + const rpc = { + call: (name: string, args: unknown) => { + calls.push({ name, args }); + return Promise.resolve([]); + }, + sharedState: (name: string) => + Promise.resolve({ + value: () => (name === 'signal-graph' ? state : {}), + on: (_event: string, listener: (value: unknown) => void) => { + if (name === 'signal-graph') listeners.push(listener); + return () => {}; + }, + }), + }; + const push = (next: unknown) => { + state = next; + for (const listener of listeners) listener(next); + }; + const client = { connectionMeta: {}, scope: () => ({ rpc }) } as unknown as DevframeRpcClient; + return { client, calls, push }; +} + +async function settle(fixture: ComponentFixture) { + for (let i = 0; i < 3; i++) { + await new Promise((resolve) => setTimeout(resolve)); + await fixture.whenStable(); + } +} + +afterEach(() => { + document.body.innerHTML = ''; +}); + +describe('SignalInspector focus', () => { + it('asks the page for the focused component and selects the signal once its graph arrives', async () => { + const fixture = TestBed.createComponent(SignalInspector); + const { client, calls, push } = fakeClient(); + fixture.componentRef.setInput('rpc', client); + document.body.append(fixture.nativeElement); + await settle(fixture); + + fixture.componentRef.setInput('focus', { componentId: 'c1', pageId: 'p1', key: 'count' }); + await settle(fixture); + expect(calls).toContainEqual({ + name: 'select-signal-target', + args: { pageId: 'p1', id: 'c1' }, + }); + // The graph of another component does not select anything. + expect(fixture.componentInstance.selectedId()).toBeNull(); + + push({ graph: graphOf('c1'), pages: { p1: graphOf('c1') } }); + await settle(fixture); + expect(fixture.componentInstance.selectedId()).toBe('1'); + }); +}); diff --git a/app/src/app.ts b/app/src/app.ts index b23a087e..cdc727ce 100644 --- a/app/src/app.ts +++ b/app/src/app.ts @@ -27,6 +27,7 @@ import { PipesInspector } from './pages/pipes-inspector'; import type { Tab, Tabs } from './types/tab.types'; import type { ComponentFocus } from './types/component-focus.types'; import type { InjectorFocus } from './types/injector-focus.types'; +import type { SignalFocus } from './types/signal-focus.types'; import { AnalogInspector } from './pages/analog-inspector'; import { NetworkInspector } from './pages/network-inspector'; import { ComingSoon, type ComingSoonInfo } from './pages/coming-soon'; @@ -544,11 +545,13 @@ function readView(): View | null { [focus]="componentFocus()" [command]="componentCommand()" [canShowInjector]="config().inspectors.injectors" + [canShowSignals]="config().inspectors.signals" [canShowPipes]="config().inspectors.pipes" (focusHandled)="componentFocus.set(null)" (commandHandled)="componentCommand.set(null)" (showForm)="showForm($event)" (showInjector)="showInjector($event)" + (showSignals)="showSignals($event)" (showPipe)="showPipe($event)" /> } @@ -556,7 +559,7 @@ function readView(): View | null { } @case ('signals') { - + } @case ('injectors') { null, }); + // Belongs to the Signals tab that received it, like `componentFocus`. + readonly signalFocus = linkedSignal({ + source: this.tab, + computation: () => null, + }); + + /** + * Opens the Signals tab on a component's graph, through the same deep link + * a `#tab=signals&id=` hash opens, then selects the signal `key` names. + */ + showSignals(focus: SignalFocus) { + if (!this.config().inspectors.signals) return; + const page = focus.pageId ? { page: focus.pageId } : {}; + if (!this.openLink({ tab: 'signals', id: focus.componentId, ...page })) return; + this.signalFocus.set(focus); + } + showInjector(focus: InjectorFocus) { if (!this.config().inspectors.injectors) return; this.switchTab('injectors'); diff --git a/app/src/pages/cd-recording.ts b/app/src/pages/cd-recording.ts index 5015753a..aad1d2e8 100644 --- a/app/src/pages/cd-recording.ts +++ b/app/src/pages/cd-recording.ts @@ -94,6 +94,9 @@ const SHOWN_CYCLES = 30; of it stops with the recording. @if (native()) { An app on a device has no DOM, so checks that changed nothing are not counted there. + } @else { + 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. }

@if (page()?.supported === false) { @@ -213,7 +216,11 @@ const SHOWN_CYCLES = 30; @for (c of slowest(); track $index) { - {{ c.name }} + + + {{ c.checks }} {{ ms(c.ms) }} {{ ms(c.maxMs) }} @@ -225,6 +232,41 @@ const SHOWN_CYCLES = 30; } +

+ {{ range() ? 'Most often checked in the picked cycles' : 'Most often checked' }} +

+ + + + + + + + + + + + @for (c of busiest(); track $index) { + + + + + + + } @empty { + + + + } + +
ComponentChecksCyclesSelf time
+ + {{ c.checks }}{{ c.cycles }}{{ ms(c.ms) }}
No component checks in the picked cycles.
+

+ Select a component name to show its most checked instance in the tree. +

Latest cycles

@@ -390,6 +432,26 @@ const SHOWN_CYCLES = 30; td.mono { overflow-wrap: anywhere; } + .name-link { + height: auto; + min-height: 0; + padding: 0; + border: 0; + background: none; + color: var(--text-strong); + font: inherit; + text-align: left; + text-decoration: underline; + text-underline-offset: 2px; + cursor: pointer; + } + .name-link:hover { + background: none; + text-decoration-thickness: 2px; + } + .name-link:focus-visible { + @include m.focus-ring(-2px); + } .num { text-align: right; font-variant-numeric: tabular-nums; @@ -506,6 +568,10 @@ export class CdRecording { : `cycles ${picked[0].id} to ${picked.at(-1)!.id}`; }); readonly slowest = computed(() => this.stats().slice(0, SHOWN)); + /** The classes Angular checked most often, as the change-detection tool lists them. */ + readonly busiest = computed(() => + [...this.stats()].sort((a, b) => b.checks - a.checks).slice(0, SHOWN), + ); readonly latest = computed(() => this.cycles().slice(-SHOWN_CYCLES).reverse()); /** Says when the recording checked more classes or instances than it keeps. */ readonly capNotes = computed(() => { diff --git a/app/src/pages/component-copy.ts b/app/src/pages/component-copy.ts new file mode 100644 index 00000000..9894baa0 --- /dev/null +++ b/app/src/pages/component-copy.ts @@ -0,0 +1,78 @@ +/** The fields of a component detail the copy actions read. */ +export interface CopyProp { + name: string; + value?: unknown; + listened?: boolean; + kind?: string; +} + +export interface CopyDetail { + name: string; + tag: string; + path: string; + selector?: string; + source?: { file: string; line: number }; + changeDetection?: string; + encapsulation?: string; + inputs: CopyProp[]; + outputs: CopyProp[]; + properties?: CopyProp[]; + listeners: string[]; + directives: { name: string; inputs: CopyProp[]; outputs: CopyProp[] }[]; + dependencies: { token: string; providedByName?: string; providedBy: string | null }[]; +} + +function valuesOf(props: readonly CopyProp[]): Record { + return Object.fromEntries(props.map((p) => [p.name, p.value ?? null])); +} + +function outputsOf(props: readonly CopyProp[]): { name: string; listened: boolean }[] { + return props.map((p) => ({ name: p.name, listened: !!p.listened })); +} + +/** + * The selected component as JSON for "Copy as JSON". It holds only what the + * panel already has: the page serialized and masked every value before it + * sent it (`serialize` and the redaction settings), so the copy carries the + * same `[redacted]` markers and cut levels as the detail on screen. + */ +export function componentJson(detail: CopyDetail): string { + const out: Record = { + component: detail.name, + tag: detail.tag, + hostPath: detail.path, + }; + if (detail.selector) out['selector'] = detail.selector; + if (detail.source) out['source'] = detail.source; + if (detail.changeDetection) out['changeDetection'] = detail.changeDetection; + if (detail.encapsulation) out['encapsulation'] = detail.encapsulation; + out['inputs'] = valuesOf(detail.inputs); + out['outputs'] = outputsOf(detail.outputs); + out['properties'] = valuesOf(detail.properties ?? []); + if (detail.listeners.length) out['listeners'] = detail.listeners; + if (detail.directives.length) { + out['directives'] = detail.directives.map((dir) => ({ + name: dir.name, + inputs: valuesOf(dir.inputs), + outputs: outputsOf(dir.outputs), + })); + } + out['injected'] = detail.dependencies.map((dep) => ({ + token: dep.token, + providedBy: dep.providedBy ? (dep.providedByName ?? 'an injector') : null, + })); + try { + return JSON.stringify(out, null, 2); + } catch { + return JSON.stringify({ component: detail.name, tag: detail.tag, hostPath: detail.path }); + } +} + +/** + * The text "Copy host path" copies: a CSS selector that finds the host with + * `document.querySelector`, or the component path (`app-root > app-list`) + * from a page that sends no selector, such as an app on a device. + */ +export function hostPathText(detail: Pick): string { + return detail.selector || detail.path; +} diff --git a/app/src/pages/component-tree.ts b/app/src/pages/component-tree.ts index 15e33526..c5888930 100644 --- a/app/src/pages/component-tree.ts +++ b/app/src/pages/component-tree.ts @@ -14,6 +14,7 @@ import { untracked, viewChild, } from '@angular/core'; +import { NgTemplateOutlet } from '@angular/common'; import type { DevframeRpcClient } from 'devframe/client'; import { ExtensionBridge, type SourceLocation } from '../extension-bridge'; import { hostPageId } from '../page-id'; @@ -45,6 +46,9 @@ import { CdRecording, type CdPage } from './cd-recording'; import type { ComponentFocus } from '../types/component-focus.types'; import type { ComponentCommand } from '../types/component-command.types'; import type { InjectorFocus } from '../types/injector-focus.types'; +import type { SignalFocus } from '../types/signal-focus.types'; +import { componentJson, hostPathText } from './component-copy'; +import { ValueFlash, flashKey } from './component-value-flash'; import { SourceLink } from '../ui/source-link'; import { actionAllowed } from '../devtools-config'; import { ValueTree } from './component-value-tree'; @@ -104,6 +108,8 @@ interface Detail { name: string; tag: string; path: string; + /** A CSS selector that finds the host with `querySelector`, from a browser page. */ + selector?: string; source?: SourceLocation; changeDetection?: string; encapsulation?: string; @@ -197,6 +203,15 @@ export function ancestors(parents: ReadonlyMap, id: string): str return out; } +/** The keys that move a running pick on the page, as the page names them. */ +const PICK_KEY_NAMES: Record = { + ArrowDown: 'next', + ArrowUp: 'previous', + ArrowLeft: 'parent', + ArrowRight: 'child', + Enter: 'pick', +}; + const DIRECTIVE_HOSTS_KEY = 'pangular:components:directive-hosts'; /** Whether this viewer last chose to show directive hosts; shown unless they hid them. */ @@ -211,6 +226,7 @@ function storedDirectiveHosts(): boolean { @Component({ selector: 'app-component-tree', imports: [ + NgTemplateOutlet, Select, CdRecording, SourceLink, @@ -223,7 +239,7 @@ function storedDirectiveHosts(): boolean { AngularUnavailable, ComponentPipesSection, ], - host: { '(keydown.escape)': 'cancelPick()' }, + host: { '(keydown.escape)': 'cancelPick()', '(keydown)': 'pickKey($event)' }, template: ` @if (live()) {

@@ -458,7 +474,13 @@ function storedDirectiveHosts(): boolean {

    @for (name of host.directives ?? []; track name + $index) { -
  • {{ name }}
  • +
  • + {{ name }} + +
  • }
@@ -526,14 +548,29 @@ function storedDirectiveHosts(): boolean { } } - @if (canShowInjector() && !staticReport()) { + @if ((canShowInjector() || canShowSignals()) && !staticReport()) {
- + @if (canShowInjector()) { + + } + @if (canShowSignals()) { + + }
} + @if (detail(); as d) { +
+ + +
+

{{ copyMessage() }}

+ } @if (!staticReport() && !native()) { @for (p of v.inputs; track p.name) { -
  • +
  • {{ p.name }} @if (p.prop !== p.name) { @@ -659,12 +696,21 @@ function storedDirectiveHosts(): boolean { @if (v.properties.length) {
      @for (p of v.properties; track p.name) { -
    • +
    • {{ p.name }} @if (p.kind) { {{ p.kind }} } + @if (p.kind === 'signal' && canShowSignals() && !staticReport()) { + + } } + @if (!propQuery() && ownedDeferBlocks().length) { +
      +

      + Defer blocks {{ ownedDeferBlocks().length }} +

      +
        + @for (block of ownedDeferBlocks(); track block.id) { +
      • + {{ block.state }} + {{ + block.triggers.join(', ') || 'no triggers' + }} +
      • + } +
      +
      + } + @for (dir of v.directives; track dir.name + dir.index) {

      {{ dir.name }} directive on host

      +

      + +

      @if (dir.inputs.length) {
        @for (p of dir.inputs; track p.name) { -
      • +
      • {{ p.name }} @if (deferUnavailable()) { @@ -998,6 +1073,21 @@ function storedDirectiveHosts(): boolean {
      } } + + + + @let found = directiveSources(name); + @if (found.length === 1) { + + Likely, matched by class name: + + } @else if (found.length > 1) { + {{ found.length }} source files define {{ bareName(name) }} + } + `, styles: ` @use 'mixins' as m; @@ -1437,6 +1527,18 @@ function storedDirectiveHosts(): boolean { font-size: 12px; overflow-wrap: anywhere; } + .directive-where { + margin: -4px 0 8px; + font-size: 12px; + } + .directive-where:empty { + display: none; + } + .directive-guess { + display: inline-flex; + align-items: center; + font-family: var(--font-sans); + } .likely { display: inline-block; margin-right: 6px; @@ -1551,6 +1653,37 @@ function storedDirectiveHosts(): boolean { border-radius: var(--radius-sm); background: var(--bg); } + .prop.changed { + outline: 2px solid var(--accent); + outline-offset: -1px; + animation: value-flash 1s var(--ease) forwards; + } + @keyframes value-flash { + from { + outline-color: var(--accent); + } + to { + outline-color: transparent; + } + } + @media (prefers-reduced-motion: reduce) { + .prop.changed { + animation: none; + } + } + .signal-link { + height: auto; + min-height: 0; + margin-left: 6px; + padding: 0 6px; + font-family: inherit; + font-size: 11px; + font-weight: 500; + line-height: 18px; + } + .signal-link:focus-visible { + @include m.focus-ring(-2px); + } .prop-name { display: block; margin-bottom: 4px; @@ -1780,6 +1913,9 @@ export class ComponentTree { /** Opens the Pipes tab on the pipe with this name. */ readonly showPipe = output(); readonly showInjector = output(); + /** Whether the Signals tab is on, so "Show in Signals" can open it. */ + readonly canShowSignals = input(false); + readonly showSignals = output(); readonly filter = signal(''); readonly loading = signal(false); @@ -1804,6 +1940,13 @@ export class ComponentTree { source: this.selectedId, computation: () => '', }); + /** What the last copy did, for the selected component only. */ + readonly copyMessage = linkedSignal({ + source: this.selectedId, + computation: () => '', + }); + /** Values of the selected component that changed in the last push, outlined for a second. */ + private readonly flash = new ValueFlash(); readonly collapsed = signal>(new Set()); /** Elements that host directives but no component show as rows; this viewer can hide them. */ readonly showDirectiveHosts = signal(storedDirectiveHosts()); @@ -1920,6 +2063,11 @@ export class ComponentTree { ); readonly deferBlocks = computed(() => this.page()?.deferBlocks ?? []); + /** The defer blocks in the selected component's template. */ + readonly ownedDeferBlocks = computed(() => { + const id = this.selectedId(); + return id ? this.deferBlocks().filter((block) => block.owner?.id === id) : []; + }); readonly countLabel = computed(() => countText( @@ -2134,6 +2282,18 @@ export class ComponentTree { if (this.picking() && shown !== this.pickPageId) this.dropPick(); }); }); + effect(() => { + const detail = this.detail(); + const owner = detail ? `${this.page()?.pageId ?? ''}|${detail.id}` : null; + const values = new Map(); + for (const p of detail?.inputs ?? []) values.set(flashKey('input', p.name), p.value); + for (const p of detail?.properties ?? []) values.set(flashKey('property', p.name), p.value); + detail?.directives.forEach((dir, index) => { + for (const p of dir.inputs) values.set(flashKey('directive', p.name, index), p.value); + }); + untracked(() => this.flash.update(owner, values)); + }); + this.destroyRef.onDestroy(() => this.flash.clear()); effect(() => { const client = this.rpc(); if (!client) return; @@ -2300,6 +2460,44 @@ export class ComponentTree { ); } + /** Whether a value of the detail changed in the last push, so it shows an outline. */ + flashed(section: 'input' | 'property' | 'directive', name: string, index?: number): boolean { + return this.flash.changed().has(flashKey(section, name, index)); + } + + /** Opens the Signals tab on this component's graph, with the signal in `key` selected. */ + openSignals(node: LiveNode, key?: string) { + const pageId = this.page()?.pageId; + this.showSignals.emit({ + componentId: node.id, + ...(pageId ? { pageId } : {}), + ...(key ? { key } : {}), + }); + } + + /** Copies only what the panel holds, which the page serialized and masked already. */ + async copyJson(detail: Detail) { + await this.copy(detail.id, componentJson(detail), `Copied ${detail.name} as JSON.`); + } + + async copyHostPath(detail: Detail) { + await this.copy( + detail.id, + hostPathText(detail), + detail.selector ? 'Copied the host selector.' : 'Copied the host path.', + ); + } + + private async copy(id: string, text: string, done: string) { + let message = done; + try { + await navigator.clipboard.writeText(text); + } catch { + message = 'The clipboard is not available here.'; + } + if (this.selectedId() === id) this.copyMessage.set(message); + } + /** Opens the Injectors tab on this component's element injector. */ openInjector(node: LiveNode) { const pageId = this.page()?.pageId; @@ -2349,6 +2547,14 @@ export class ComponentTree { return candidates.length === 1 ? candidates[0] : null; } + /** + * The source scan directives a directive on the page may be, by class name. Angular gives + * directives no debug location, so a match is only likely. + */ + directiveSources(name: string): SourceComponent[] { + return (this.sourceByClass().get(bare(name)) ?? []).filter((c) => c.kind === 'directive'); + } + sourceKey(comp: SourceComponent) { return `${comp.file}#${comp.className}`; } @@ -2435,7 +2641,9 @@ export class ComponentTree { const seq = ++this.pickSeq; this.pickPageId = this.page()?.pageId ?? null; this.picking.set(true); - this.say('Click a component in the app. Press Escape to cancel.'); + 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.', + ); const result = (await client .scope('pangular') .rpc.call('request-component-pick', { pageId: this.pickPageId ?? undefined }) @@ -2453,6 +2661,33 @@ export class ComponentTree { else this.selectedId.set(result.id); } + /** + * Moves a running pick with the keyboard: down and up go through the components in page + * order, left to the one around, right to the first one inside, and Enter picks. + */ + pickKey(event: KeyboardEvent) { + const key = PICK_KEY_NAMES[event.key]; + if (!this.picking() || !key || event.altKey || event.ctrlKey || event.metaKey) return; + // Enter would press the focused button, which cancels the pick. + event.preventDefault(); + const client = this.rpc(); + if (!client) return; + const seq = this.pickSeq; + void client + .scope('pangular') + .rpc.call('request-component-pick-move', { pageId: this.pickPageId ?? undefined, key }) + .then((answer) => { + const result = answer as { moved?: boolean; name?: string; tag?: string; error?: string }; + if (seq !== this.pickSeq || !this.picking() || key === 'pick') return; + this.say( + result?.moved + ? `${result.name ?? 'Component'} <${result.tag ?? ''}>. Press Enter to pick it.` + : (result?.error ?? 'The page did not move.'), + ); + }) + .catch(() => {}); + } + cancelPick() { const client = this.rpc(); if (!client || !this.picking()) return; diff --git a/app/src/pages/component-value-flash.ts b/app/src/pages/component-value-flash.ts new file mode 100644 index 00000000..0031cdf2 --- /dev/null +++ b/app/src/pages/component-value-flash.ts @@ -0,0 +1,79 @@ +import { signal } from '@angular/core'; + +/** How long a changed value keeps its outline, in ms. */ +export const FLASH_MS = 1000; + +/** The keys whose text differs between two reads; a key that is new or gone is not a change. */ +export function changedKeys( + before: ReadonlyMap, + after: ReadonlyMap, +): string[] { + const changed: string[] = []; + for (const [key, text] of after) { + const old = before.get(key); + if (old !== undefined && old !== text) changed.push(key); + } + return changed; +} + +function textOf(value: unknown): string { + try { + return JSON.stringify(value) ?? 'undefined'; + } catch { + return String(value); + } +} + +/** + * Which values of the selected component changed in the last push. Each one + * stays in `changed` for {@link FLASH_MS}, so the detail can outline it. A + * new component, or a new page, starts over without flashing anything. + */ +export class ValueFlash { + readonly changed = signal>(new Set()); + private owner: string | null = null; + private last = new Map(); + private readonly timers = new Map>(); + + constructor(private readonly ms = FLASH_MS) {} + + /** Reads the values of `owner` (a page and component id) as `key -> value`. */ + update(owner: string | null, values: ReadonlyMap) { + const texts = new Map([...values].map(([key, value]) => [key, textOf(value)])); + if (owner !== this.owner) { + this.clear(); + this.owner = owner; + this.last = texts; + return; + } + const changed = changedKeys(this.last, texts); + this.last = texts; + if (!changed.length) return; + this.changed.update((set) => new Set([...set, ...changed])); + for (const key of changed) { + clearTimeout(this.timers.get(key)); + this.timers.set( + key, + setTimeout(() => { + this.timers.delete(key); + this.changed.update((set) => { + const next = new Set(set); + next.delete(key); + return next; + }); + }, this.ms), + ); + } + } + + clear() { + for (const timer of this.timers.values()) clearTimeout(timer); + this.timers.clear(); + if (this.changed().size) this.changed.set(new Set()); + } +} + +/** The key of one value in the detail: `input:name`, `property:name`, `directive:0:name`. */ +export function flashKey(section: 'input' | 'property' | 'directive', name: string, index = 0) { + return section === 'directive' ? `directive:${index}:${name}` : `${section}:${name}`; +} diff --git a/app/src/pages/defer-blocks-section.ts b/app/src/pages/defer-blocks-section.ts index 77b84b75..e3c4e0b4 100644 --- a/app/src/pages/defer-blocks-section.ts +++ b/app/src/pages/defer-blocks-section.ts @@ -8,7 +8,12 @@ import { output, signal, } from '@angular/core'; -import { deferNotes, type DeferNote } from '@pangular-inspector/devtools/internal/config'; +import { + deferHydrationLabel, + deferNotes, + type DeferNote, +} from '@pangular-inspector/devtools/internal/config'; +import { time } from '../format'; export interface DeferBlock { id: string; @@ -20,6 +25,10 @@ export interface DeferBlock { rootIds: string[]; /** Page clock, ms since epoch, when the state or hydration state last changed. */ since?: number; + /** Page clock, ms since epoch, when the overlay saw the block hydrate. */ + hydratedAt?: number; + /** The state changes the overlay saw, oldest first, on the page clock. */ + transitions?: { state: string; hydration: string; at: number }[]; hasErrorBlock?: boolean; /** Times from `@loading (after …; minimum …)`, in ms. */ loading?: { minimumTime: number | null; afterTime: number | null }; @@ -27,10 +36,21 @@ export interface DeferBlock { placeholder?: { minimumTime: number | null }; } +/** A hydration mismatch of the page, as the Hydration section lists it. */ +export interface DeferMismatch { + id: string; + name: string; + tag: string; +} + interface Row { block: DeferBlock; + /** Mismatched components that are root elements of the block. */ + mismatches: DeferMismatch[]; notes: DeferNote[]; timings: string; + /** `hydrated`, or `hydrated before inspection` when the overlay attached later. */ + hydrated: string; } /** `500ms`, `1s`, `1.5s`. */ @@ -70,7 +90,7 @@ export function deferTimings(block: DeferBlock): string {
        @for (row of rows(); track row.block.id) { -
      • +
      • + + @if (isOpen(row.block.id)) { +
        +
        +
        Block
        +
        {{ row.block.id }}
        + @if (row.block.owner; as owner) { +
        Template of
        +
        {{ owner.name }} <{{ owner.tag }}>
        + } + @if (row.block.since) { +
        In this state since
        +
        {{ clock(row.block.since) }}
        + } + @if (row.block.hydration === 'hydrated') { +
        Hydrated
        +
        + {{ + row.block.hydratedAt === undefined + ? 'Before the devtools attached' + : clock(row.block.hydratedAt) + }} +
        + } +
        Root elements
        +
        {{ row.block.rootIds.length || 'None rendered' }}
        +
        Triggers
        +
        {{ row.block.triggers.join(', ') || 'None' }}
        +
        + @if (row.block.transitions?.length) { +

        Transitions

        +
          + @for (step of row.block.transitions; track $index) { +
        1. + {{ clock(step.at) }} + {{ step.state }} + @if (step.hydration !== 'not-configured') { + {{ step.hydration }} + } +
        2. + } +
        + } + @if (row.mismatches.length) { +

        Hydration mismatches

        + + } +
        + }
      • }
      @@ -151,6 +251,82 @@ export function deferTimings(block: DeferBlock): string { padding: 0; list-style: none; } + .defer-item { + display: grid; + grid-template-columns: minmax(0, 1fr) var(--control-h); + gap: 6px; + } + .defer-toggle { + width: var(--control-h); + padding: 0; + background: var(--surface); + } + .defer-toggle svg { + width: 14px; + height: 14px; + fill: none; + stroke: currentColor; + stroke-width: 2; + transition: transform 150ms var(--ease); + } + .defer-toggle[aria-expanded='true'] svg { + transform: rotate(90deg); + } + @media (prefers-reduced-motion: reduce) { + .defer-toggle svg { + transition: none; + } + } + .defer-toggle:focus-visible { + @include m.focus-ring; + } + .defer-detail { + grid-column: 1 / -1; + padding: 8px 12px; + border: 1px solid var(--border); + border-radius: var(--radius-sm); + background: var(--bg); + font-size: 12px; + } + .defer-detail dl { + display: grid; + grid-template-columns: max-content minmax(0, 1fr); + gap: 4px 12px; + margin: 0; + } + .defer-detail dt { + color: var(--text-2); + } + .defer-detail dd { + min-width: 0; + margin: 0; + color: var(--text); + overflow-wrap: anywhere; + } + .detail-label { + @include m.label; + margin: 10px 0 4px; + } + .transitions, + .mismatch-links { + display: grid; + gap: 4px; + margin: 0; + padding: 0; + list-style: none; + } + .transitions li { + display: flex; + flex-wrap: wrap; + gap: 8px; + } + .when, + .muted { + color: var(--text-2); + } + .mismatch-links button:focus-visible { + @include m.focus-ring; + } .defer-row { justify-content: flex-start; flex-wrap: wrap; @@ -230,6 +406,12 @@ export class DeferBlocksSection { /** The server clock minus the page clock, in ms, so ages are read on the page's clock. */ readonly clockOffset = input(0); readonly showOwner = output(); + /** The hydration mismatches of the page, linked from the blocks they sit in. */ + readonly mismatches = input([]); + /** A mismatched component to select in the tree. */ + readonly showNode = output(); + /** The blocks whose details are open. */ + private readonly open = signal>(new Set()); /** The block to highlight in the app, or `null` to clear it. */ readonly highlight = output(); @@ -249,9 +431,28 @@ export class DeferBlocksSection { // A block without a time (an older page) gets no age notes. notes: deferNotes({ ...block, since: block.since || pageNow }, pageNow), timings: deferTimings(block), + mismatches: this.mismatches().filter((m) => block.rootIds.includes(m.id)), + hydrated: block.hydration === 'hydrated' ? deferHydrationLabel(block) : '', })); }); + protected isOpen(id: string): boolean { + return this.open().has(id); + } + + protected toggle(id: string) { + this.open.update((set) => { + const next = new Set(set); + if (!next.delete(id)) next.add(id); + return next; + }); + } + + /** A page clock time, such as `14:02:11`. */ + protected clock(at: number): string { + return time(at); + } + constructor() { let tick: ReturnType | undefined; const stop = () => { diff --git a/app/src/pages/signal-inspector.ts b/app/src/pages/signal-inspector.ts index ceec0df2..5fa07614 100644 --- a/app/src/pages/signal-inspector.ts +++ b/app/src/pages/signal-inspector.ts @@ -26,6 +26,7 @@ import { RovingList } from '../ui/roving-list'; import { Select, type SelectOption } from '../ui/select'; import { SourceLink } from '../ui/source-link'; import type { GraphLink } from './signal-graph-layout'; +import type { SignalFocus } from '../types/signal-focus.types'; import { SignalGraphView } from './signal-graph-view'; interface SignalNode { @@ -1699,6 +1700,10 @@ const KIND_TOKENS: Record = { }) export class SignalInspector { rpc = input(null); + /** A component to show, from a deep link or the Components tab's "Show in Signals". */ + readonly focus = input(null); + /** The signal to select once the focused component's graph arrives. */ + private readonly focusedSignal = signal<{ componentId: string; key: string } | null>(null); private readonly destroyRef = inject(DestroyRef); private readonly host = inject>(ElementRef); @@ -2061,6 +2066,23 @@ export class SignalInspector { void this.loadSignalGraph(client); void this.loadSourceSignals(client); }); + effect(() => { + const focus = this.focus(); + if (focus) untracked(() => this.showComponent(focus)); + }); + // Selects the focused signal once the graph of its component is in. + effect(() => { + const wanted = this.focusedSignal(); + const graph = this.graph(); + if (!wanted || graph?.component?.id !== wanted.componentId) return; + const node = graph.nodes.find( + (n) => n.locator?.id === wanted.componentId && n.locator.key === wanted.key, + ); + untracked(() => { + this.focusedSignal.set(null); + if (node) this.jumpTo(node); + }); + }); this.destroyRef.onDestroy(() => { for (const cleanup of this.cleanups.splice(0)) cleanup(); }); @@ -2133,9 +2155,18 @@ export class SignalInspector { this.announcement.set(`Showing the signal graph of ${label}.`); } - pickComponent(value: string | null) { + /** Shows the graph of the component a focus names, on its page when it names one. */ + private showComponent(focus: SignalFocus) { + if (focus.pageId && !this.pageId && this.graphPages()[focus.pageId]) { + this.chosenPageId.set(focus.pageId); + } + this.focusedSignal.set(focus.key ? { componentId: focus.componentId, key: focus.key } : null); + this.pickComponent(focus.componentId, this.pageId ?? focus.pageId); + } + + pickComponent(value: string | null, forPage?: string) { const picked = value && value !== FOLLOW ? value : null; - const pageId = this.targetPageId() ?? undefined; + const pageId = forPage ?? this.targetPageId() ?? undefined; this.pickedByPage.update((all) => { const next = { ...all }; if (picked) next[pageId ?? ''] = picked; diff --git a/app/src/types/signal-focus.types.ts b/app/src/types/signal-focus.types.ts new file mode 100644 index 00000000..23d6e306 --- /dev/null +++ b/app/src/types/signal-focus.types.ts @@ -0,0 +1,11 @@ +/** + * A component whose signal graph the Signals tab should show, named by its id + * in the Components tab. `pageId` names the page it belongs to; without it the + * tab looks on the page it already shows. `key` is a property of the component + * that holds a signal, whose node the tab selects once the graph arrives. + */ +export interface SignalFocus { + componentId: string; + pageId?: string; + key?: string; +} diff --git a/apps/docs/src/content/agents/mcp-server.md b/apps/docs/src/content/agents/mcp-server.md index dfadd4a1..95beb76b 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-one 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-two tools act on the app, so the server does not mark them read-only: | Tool | Tier | Reference | | ------------------------- | ------------- | ----------------------------------------------------------------------------- | @@ -293,6 +293,7 @@ Each tool has a safety tier: `read`, `action` or `destructive`. The server marks | `remove-ssr-override` | `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) | | `watch-signal` | `action` | [watch-signal](./tools.md#watch-signal) | | `record-pipes` | `action` | [Record pipe calls](./tools.md#record-pipe-calls) | | `track-subscriptions` | `action` | [Track subscriptions](./tools.md#track-subscriptions) | diff --git a/apps/docs/src/content/agents/resources.md b/apps/docs/src/content/agents/resources.md index 00e1b723..2e464744 100644 --- a/apps/docs/src/content/agents/resources.md +++ b/apps/docs/src/content/agents/resources.md @@ -51,7 +51,7 @@ When `component-tree`, `signal-graph`, `ngrx-store` or `pipe-usages` runs past 1 ### component-tree -The component instances of each page, under `pages[pageId].roots`. Each node has an instance id, class name, host tag, the directives on its host, and `attributes`, the selector attribute names of those directives. In a page rendered on the server, each node also has its `hydration` status: `hydrated`, `skipped`, `mismatched` or `client`. An element that hosts directives but no component is a node too, with `kind: "directive"`, all of its directives in `directives`, and the first one as `name`. `platform` is `angular-native` for an Angular Native app, and missing for a browser page. `count` counts the component instances and `directiveHostCount` the directive hosts. `hydration` reports the page's hydration: counts by status, dehydrated `@defer` blocks, mismatches between what Angular expected and found, and whether the hydration overlay is on. It is missing when the page was not rendered on the server. `detail` holds the live inputs, outputs, other properties, listeners, change detection, encapsulation and injected dependencies of the selected instance, and `source`, the project-relative `file` and 1-based `line` of its class when a dev build has the debug info of Angular. `detail.properties` lists the other own fields, with signals and resources unwrapped. Each value shows its first level, with nested objects, arrays, `Map`s and `Set`s as `{"$collapsed": type, "size": n}`; read them with `inspect-component` and `path`. `detail.expanded` holds the nested levels opened in the panel. The selection is the one made in the panel, by clicking in the page with **Pick component on page**, or with the `highlight` or `inspect-component` tool. `truncated` is `true` when the page has more instances than it lists, and `truncatedBy` names the limit it hit: `components` (2000 instances), `depth` (256 levels of DOM nesting) or `directiveHosts` (1000 elements that host directives but no component). `deferBlocks` lists the page's `@defer` blocks, and is missing when the page has no util to read them. `nodes` repeats the roots of the most recent page. +The component instances of each page, under `pages[pageId].roots`. Each node has an instance id, class name, host tag, the directives on its host, and `attributes`, the selector attribute names of those directives. In a page rendered on the server, each node also has its `hydration` status: `hydrated`, `skipped`, `mismatched` or `client`. An element that hosts directives but no component is a node too, with `kind: "directive"`, all of its directives in `directives`, and the first one as `name`. `platform` is `angular-native` for an Angular Native app, and missing for a browser page. `count` counts the component instances and `directiveHostCount` the directive hosts. `hydration` reports the page's hydration: counts by status, dehydrated `@defer` blocks, mismatches between what Angular expected and found, and whether the hydration overlay is on. It is missing when the page was not rendered on the server. `detail` holds the live inputs, outputs, other properties, listeners, change detection, encapsulation and injected dependencies of the selected instance, and `source`, the project-relative `file` and 1-based `line` of its class when a dev build has the debug info of Angular. `detail.properties` lists the other own fields, with signals and resources unwrapped. Each value shows its first level, with nested objects, arrays, `Map`s and `Set`s as `{"$collapsed": type, "size": n}`; read them with `inspect-component` and `path`. `detail.expanded` holds the nested levels opened in the panel. The selection is the one made in the panel, by clicking in the page with **Pick component on page**, or with the `highlight` or `inspect-component` tool. `truncated` is `true` when the page has more instances than it lists, and `truncatedBy` names the limit it hit: `components` (2000 instances), `depth` (256 levels of DOM nesting) or `directiveHosts` (1000 elements that host directives but no component). `detail.selector` is a CSS selector that finds the host with `document.querySelector`, on a browser page. It is missing for a host inside a shadow root, which `document.querySelector` cannot reach. `deferBlocks` lists the page's `@defer` blocks, at most 500, and is missing when the page has no util to read them. `deferTruncated` is `true` when the page had more. A block's `transitions` lists at most the last 6 states the page saw, oldest first, with `state`, `hydration` and `at`, the time the page collected it on its own clock. The first entry is the state the page found when it started watching, and the list is set only once the block changed. `nodes` repeats the roots of the most recent page. The instance ids here are what `highlight` and `inspect-component` accept. diff --git a/apps/docs/src/content/agents/tools.md b/apps/docs/src/content/agents/tools.md index 788deb28..3e8b850e 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 three tools, grouped by inspector. Each one answers a question you would otherwise answer by clicking through the panel. + One hundred and four tools, grouped by inspector. Each one answers a question you would otherwise answer by clicking through the panel. # Tools @@ -131,11 +131,11 @@ Each section is also cut at 4,000 characters. When the answer reaches `maxChars` Gives the user a link that opens the panel on one tab with one item selected, and switches the panels that are open to it. Reads: page. Use it to point the user at what you found. -| Argument | Required | What it is | -| -------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `tab` | Yes | The tab: `dashboard`, `timeline`, `audit`, `components`, `routes`, `signals`, `injectors`, `store`, `queries`, `forms`, `pipes`, `network` (SSR & HTTP), `errors`, `analog`, `capacitor` or `plugins`. Only tabs that are on count. | -| `id` | No | The item to select: a component id on `components`, the id of the component whose element injector to show on `injectors`, a form id on `forms`. Other tabs ignore it. | -| `page` | No | The page the item belongs to, from `list-pages`. | +| Argument | Required | What it is | +| -------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tab` | Yes | The tab: `dashboard`, `timeline`, `audit`, `components`, `routes`, `signals`, `injectors`, `store`, `queries`, `forms`, `pipes`, `network` (SSR & HTTP), `errors`, `analog`, `capacitor` or `plugins`. Only tabs that are on count. | +| `id` | No | The item to select: a component id on `components`, the id of the component whose element injector to show on `injectors`, the id of the component whose signal graph to show on `signals`, a form id on `forms`. Other tabs ignore it. | +| `page` | No | The page the item belongs to, from `list-pages`. | The answer is a full URL, such as `http://localhost:4200/__devframes/pangular/#tab=components&id=12&page=k3x9`, when the hub serves the panel and a page has reported its address. Otherwise it is the hash to add to the panel's address. Each panel that is open and not in a background tab opens the link at once. The tool is `read`: it changes what the panel shows, not the app. See [Deep links](../getting-started/popup-and-hub.md#deep-links). @@ -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. A reload or the next call undoes it. | `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`, `watch-signal`, `record-pipes`, `track-subscriptions`, `record-change-detection` and `audit` | -| `destructive` | Can lose data: it erases recordings, or sends writes to your own API routes. | `clear-recordings` and `analog-run-api` | +| 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. A reload or the next call undoes it. | `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` and `audit` | +| `destructive` | Can lose data: it erases recordings, or sends writes to your own API routes. | `clear-recordings` and `analog-run-api` | - The twenty-one action and destructive tools act on the app. Your client can ask you before it runs them. + The twenty-two 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). @@ -263,8 +263,30 @@ It takes only `page`. Without a development build, the page has no util to read defer blocks, and the answer says so. +A block that hydrated before the devtools attached to the page shows `hydrated before inspection` in the **Hydration** column, because the page never saw it hydrate. + Each page lists at most 50 blocks in the table and 50 under **Needs attention**, with a note on how many more are not shown. The whole answer stops at 20,000 characters. If several tabs report, pass `page` to read one. The **Defer blocks** list on the [Components](../inspectors/components.md#defer-blocks) page has every block the page reported. A page reports its first 500 blocks. When it has more, the answer says so. +### load-defer-block Action + +Makes one `@defer` block fetch its dependencies and show its main content now, as if its trigger fired, in development only. Use it to check deferred content without scrolling, hovering or waiting. Reads: page. + +| Argument | Required | Value | +| -------- | -------- | -------------------------------------------------------------------------- | +| `block` | Yes | A block id from [`defer-blocks`](#defer-blocks), such as `d3`. | +| `page` | No | The page id. Required when more than one tab reports a block with that id. | + +The page loads the block the way `DeferBlockFixture.render` does in Angular's testing package, then runs change detection with `ng.applyChanges`. When the dependencies fail to load, the block shows its `@error` block and the answer says so. A block without an `@error` block is left on its placeholder. The block's own triggers do not fire, so a load does not prove they work. + +It refuses, and loads nothing, when: + +- the block already shows its main content +- the block is server HTML waiting for [incremental hydration](https://angular.dev/guide/incremental-hydration) (`dehydrated` or `hydrate never`), since a load would skip its hydrate trigger +- the page's Angular does not export the internals a load needs (`ɵgetDeferBlocks`, `ɵtriggerResourceLoading` and `ɵrenderDeferBlockState`) +- no page reports a block with that id, or several tabs do and `page` is missing + +A reload of the page undoes it. Set [`actions.components`](../getting-started/configuration.md#actions) to `false` to drop the tool. + ### for-blocks The `@for` blocks of each page: the component that holds each one, its item count, what its `track` expression tracks by and whether it has an `@empty` block and shows it. A block with no items and no `@empty` block gets a note that it renders nothing. Reads: page. @@ -339,7 +361,7 @@ Starts, stops or clears a change detection recording, and turns the live views o | `track` | no | `true` writes each component check, lifecycle hook and output listener to a **Pangular** track in the Chrome Performance panel. `false` turns it off. | | `angularProfiling` | no | `true` calls `ng.enableProfiling()` for Angular's own Performance panel track. It stays on until the page reloads, so `false` is refused. | -Pass `record`, a view or both. Without `page`, `record` goes to every connected page (`stop` only to the pages that record). `record` waits up to 3 seconds for each page to confirm and names the pages that did; when none does, or no page is connected, it refuses with `isError`. A page that answers a start with no recording says why: its Angular version lacks the profiler, with the version it runs, or it has the profiler but the recording could not attach yet. Call it with `record: "start"`, use the app, then call `change-detection`. +Pass `record`, a view or both. A recording keeps running when the tab reloads, until `stop`; the cycles from before the reload are gone. Without `page`, `record` goes to every connected page (`stop` only to the pages that record). `record` waits up to 3 seconds for each page to confirm and names the pages that did; when none does, or no page is connected, it refuses with `isError`. A page that answers a start with no recording says why: its Angular version lacks the profiler, with the version it runs, or it has the profiler but the recording could not attach yet. Call it with `record: "start"`, use the app, then call `change-detection`. `flash`, `track` and `angularProfiling` go to the page in `page`, or to every connected page. An [Angular Native](../getting-started/angular-native.md) or [NativeScript](../getting-started/nativescript.md) app has no live views. The tool says there is no DOM when `page` names such an app, or when `page` is left out and every page that reports is one. `record` works on these apps as on a browser page. They are the **Live views** toggles of the panel; see [Watch checks live](../inspectors/components.md#watch-checks-live). With `agent.readOnly` the tool is not registered, so start the recording from the panel. diff --git a/apps/docs/src/content/getting-started/configuration.md b/apps/docs/src/content/getting-started/configuration.md index b9ce5f84..b86bbb57 100644 --- a/apps/docs/src/content/getting-started/configuration.md +++ b/apps/docs/src/content/getting-started/configuration.md @@ -137,12 +137,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`, `tanstack-run-query`, `set-http-rule`, `remove-http-rule`, `set-ssr-override`, `remove-ssr-override`, `set-component-property`, `set-signal`, `watch-signal`, `record-pipes`, `track-subscriptions`, `record-change-detection`, `probe-route`, `record-guards`, `analog-run-api` 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`, `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` 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,7 +159,7 @@ Actions are the writes that the panel and agents make to your app or the server. | `actions.ngrx` | `true` | Restoring NgRx state from the change log and dispatching `@ngrx/store` actions. Drops the `ngrx-dispatch` and `ngrx-restore` 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 and clearing server calls. Drops the `analog-run-api` agent tool 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` and `set-signal` agent tools. | +| `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. | diff --git a/apps/docs/src/content/getting-started/popup-and-hub.md b/apps/docs/src/content/getting-started/popup-and-hub.md index e94bacae..1ef41a5b 100644 --- a/apps/docs/src/content/getting-started/popup-and-hub.md +++ b/apps/docs/src/content/getting-started/popup-and-hub.md @@ -240,6 +240,7 @@ A link can also select an item on its tab, on one page: `#tab=&id=&page | ---------- | ---------------------------------------------------------- | | Components | A component instance, by its id in the component tree | | Injectors | The element injector of a component, by the component's id | +| Signals | The signal graph of a component, by the component's id | | Forms | A form, by its id | On other tabs, `id` is ignored and the link opens the tab. `page` is the page id from `list-pages`. Without it, the tab looks on the page it shows. If the item is not on the page, the tab says so. The [`open-in-panel`](../agents/tools.md#open-in-panel) agent tool builds these links and switches the panels that are open to them. diff --git a/apps/docs/src/content/inspectors/components.md b/apps/docs/src/content/inspectors/components.md index 5c0b6f15..2dcbee13 100644 --- a/apps/docs/src/content/inspectors/components.md +++ b/apps/docs/src/content/inspectors/components.md @@ -30,7 +30,7 @@ Each row shows the class name and the host tag. Routed components get a chip wit ### Directive hosts -An element that hosts directives but no component is a row too, so you can see where directives such as `routerLink` or `ngModel` sit. The row shows the tag and the attributes from the directive selectors, as **<a> [routerLink]**, in a lighter style than component rows. When a selector has no attribute, the row shows the directive class names instead. Select the row to see its directives and a button that shows the component whose template renders it. A directive host has no inputs or properties of its own in the detail pane. +An element that hosts directives but no component is a row too, so you can see where directives such as `routerLink` or `ngModel` sit. The row shows the tag and the attributes from the directive selectors, as **<a> [routerLink]**, in a lighter style than component rows. When a selector has no attribute, the row shows the directive class names instead. Select the row to see its directives and a button that shows the component whose template renders it. Angular gives directives no source location, so each directive shows the file from the source scan with the same class name, marked **Likely**. When several files define the class, it says how many. A directive host has no inputs or properties of its own in the detail pane. **Directive hosts** in the toolbar hides or shows these rows. The panel remembers the choice in this browser. While they are hidden, their children move up to the nearest shown row, and the filter does not search them. The page lists up to 1000 directive hosts. Past that, the notice names the limit. Directives on an `` or `` are not listed, because the tree walks elements. @@ -79,6 +79,15 @@ When a form exists in the same source file, a **Show … in Forms** button opens **Show in Injectors** opens the [Injectors tab](./injectors.md#links-to-the-components-tab) with the element injector of the selected instance selected and scrolled into view. The button appears when the Injectors inspector is on. +**Show in Signals** opens the [Signals tab](./signals.md) on the signal graph of the selected instance, through the same `#tab=signals&id=` deep link an agent's `open-in-panel` gives. A signal in **Properties** has its own **Show in Signals** button, which also selects that signal's node once the graph arrives. The buttons appear when the Signals inspector is on. + +Two buttons copy the selected instance to the clipboard: + +| Button | What it copies | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Copy as JSON** | The class name, host tag, host path and selector, source, change detection, encapsulation, inputs, outputs, properties, DOM listeners, host directives and injected tokens. Values are the ones the panel shows, so secrets stay `[redacted]` and long values stay cut. | +| **Copy host path** | A CSS selector that finds the host element with `document.querySelector`. A page without a DOM, such as an app on a device, sends no selector, so the button copies the host path from **Facts** instead. | + **Store as global** stores the selected instance in the page console as `temp1`, then `temp2` and so on, and shows the name it used, for example **Stored as temp1.** See [Console handles](#console-handles). ### Facts @@ -101,6 +110,10 @@ A fact shows **Unknown** when Angular does not report it. **Properties** lists the component's other own fields: plain fields, state objects, signals and resources. It leaves out inputs, outputs, methods and injected services. Signals show their current value and a **signal** flag. A field that holds a `resource()` or `httpResource()` shows its status, value and error, with a **resource** flag. +When an input, property or directive input changes between two refreshes, its row gets an outline that fades over one second. With reduced motion, the outline shows for one second without fading. Selecting another instance starts over, so nothing flashes on the first read. + +When the component's template holds `@defer` blocks, a **Defer blocks** block lists each one with its state and triggers. The [Defer blocks](#defer-blocks) list below the tree has the full rows. + ### Nested values An input or property that holds an object, array, `Map` or `Set` shows a toggle with its type and size, such as **Object (3 keys)** or **Array (45 items)**. The page sends only the first level of each value. Open the toggle to see it. @@ -145,7 +158,7 @@ Set [`actions.components`](../getting-started/configuration.md#actions) to `fals ### Defer blocks -When the page renders `@defer` blocks, a **Defer blocks** list follows the tree. Each row shows the component whose template holds the block, its state (`placeholder`, `loading`, `complete` or `error`) and its triggers. With [incremental hydration](https://angular.dev/guide/incremental-hydration), a row also shows `dehydrated` or `hydrated`, and a **hydrate never** flag marks a block that stays as server HTML. +When the page renders `@defer` blocks, a **Defer blocks** list follows the tree. Each row shows the component whose template holds the block, its state (`placeholder`, `loading`, `complete` or `error`) and its triggers. With [incremental hydration](https://angular.dev/guide/incremental-hydration), a row also shows `dehydrated` or `hydrated`, and a **hydrate never** flag marks a block that stays as server HTML. A block that hydrated before the devtools attached to the page shows **hydrated before inspection**, because no one saw when it hydrated. A row also carries the notes the [`defer-blocks`](../agents/tools.md#defer-blocks) tool prints. Hover a note to read it in full. @@ -158,7 +171,9 @@ A row also carries the notes the [`defer-blocks`](../agents/tools.md#defer-block When the block sets times, the row lists them, such as `placeholder min 500ms · loading after 100ms, min 1s`. Ages are counted on the page's clock, so a page on another device with its clock set wrong still shows the right age. The panel counts on from its own clock, so it assumes the panel and the server agree on the time, as they do when both run on one machine. A screen reader reads the badge as **stuck** or **waiting** without the seconds, so the row's name does not change while the age counts up. -Hover or focus a row to highlight the block in the page. A block with several root elements gets one box around all of them. Click it to select the component that holds it. The list is hidden when the page renders no defer blocks, or when its Angular version has no util to read them. +Hover or focus a row to highlight the block in the page. A block with several root elements gets one box around all of them. Click it to select the component that holds it. + +The arrow button next to a row opens the block's details: its id (the one [`load-defer-block`](../agents/tools.md#load-defer-block) takes), the host tag of its component, when it entered its state and when it hydrated, on the page's clock, how many root elements it rendered and every trigger. **Transitions** lists the state changes the page saw, up to the last six, starting from the state it found when the devtools attached. A **mismatch** badge marks a block whose root element is a component with a [hydration mismatch](#hydration), and the details have a button that selects that component. The list is hidden when the page renders no defer blocks, or when its Angular version has no util to read them. The list holds the first 500 blocks of a page. When the page has more, the count reads **500+**. @@ -195,10 +210,13 @@ The list needs Angular 22.0 or later in a development build. On an older Angular Below the tree and the defer blocks, the **Change detection** section records change detection cycles with Angular's profiler. Click **Record**, use the app, then click **Stop recording**. A check is a component whose template Angular ran. A clean OnPush component that Angular only walked past is not a check, and neither is the second pass that development builds run to catch `ExpressionChangedAfterItHasBeenChecked` errors. The flash overlay and the Performance panel track count the same way. **Clear** empties the recording. Each new recording starts empty, but a start sent while the page records, such as an agent's `record-change-detection` call with `record: "start"`, keeps the cycles recorded so far. **Record** and **Stop recording** wait up to 3 seconds for the page to report the recording on or off before they announce it. If no report comes, the status says the page did not confirm, and the button keeps the state the page last reported. +A recording keeps running when the tab reloads, so it catches the next start of the app. The page remembers it in `sessionStorage` for its page id, which a reload keeps, so another tab does not start recording. The cycles from before the reload are gone with the old page. **Stop recording** ends it for the reloads that follow too. An app on a device does not resume a recording. + - **Cycles**: a bar chart with one bar per recorded cycle, its height the cycle's duration. A line marks the 16.6 ms frame budget (one frame at 60 frames per second). A cycle over the budget has a striped bar, a triangle under it, and says "over budget" in its tooltip and in the table. Hover or focus a bar to see the cycle number, duration, output trigger, checks and its three slowest components. - **Spans in the picked cycles**: when the page reports timed spans, a flame graph of the picked cycles. Time runs left to right, cycle after cycle with the idle time between them left out, and a span nested in another sits one row lower. Each span is a component check (solid), a lifecycle hook (stripes), an `afterRender` callback (dots) or the output listener that triggered the cycle (lines, drawn before the cycle's start), with a key under the graph. Hover or focus a span to read its total and self time. The arrow keys move along a row, **Up** goes to the enclosing span and **Down** to the first nested one. **Enter** or a click on a component, hook or output selects that component in the tree. **Show the spans as a table** lists the same spans. The graph shows at most 30 cycles; pick a smaller range when more are picked. - **Self time by component**: a treemap of each component class's self time in the picked cycles, largest first. The recording has no parent links between components, so the cells are not nested. Click a cell, or press **Enter** on it, to select an instance of that class in the tree (the one checked most often). - **Slowest components**: each component class with its check count, its self time (its own template and hooks, children excluded) and its slowest single check. +- **Most often checked**: the same classes by check count, with the number of cycles that checked them, as the [`change-detection`](../agents/tools.md#change-detection) tool lists them. In both tables, click a class name to select its most checked instance in the tree. - **Latest cycles**, newest first: the start time, the duration, how many components Angular checked, how many sync passes it ran, what started the cycle (see [Why it ran and what it wasted](#why-it-ran-and-what-it-wasted)), how many refreshed checks changed nothing, the time in lifecycle hooks and in `afterRender` callbacks, and the slowest component in it. A recording without causes shows the output listener that ran just before the cycle instead (an output that ended more than 50 ms before the cycle is not counted). - **Lifecycle hooks**: time per class and hook (`ngOnChanges`, `ngOnInit`, `ngDoCheck`, `ngAfterContentChecked`, `ngAfterViewChecked` and the others Angular calls), with call count and slowest call. A hook's time is also part of the self time of the component whose view runs it. - **Output listeners**: time per class and listener, without the time of outputs the listener emitted, with call count and slowest call. @@ -368,6 +386,18 @@ 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. +You can also pick with the keyboard, from the panel or with focus in the app: + +| Key | What it does | +| ----------- | --------------------------------------------------- | +| Down arrow | Highlights the next component in page order | +| Up arrow | Highlights the previous component | +| Left arrow | Highlights the component around the highlighted one | +| Right arrow | Highlights the first component inside it | +| Enter | Picks the highlighted component | + +The first arrow press starts from the component under the pointer, or from the first component on the page. The page scrolls the highlighted component into view, and the panel announces its name and tag. + Press Escape, in the app or in the panel, or click **Cancel pick** to stop. Picking also stops after 15 seconds. Hold Alt (Option on macOS) while you click to also open the file of the picked component in your editor, at its class line. The tab still selects the component. This needs the debug info of a development build. Without it, the click only picks. @@ -471,6 +501,7 @@ Press Escape in the filter box to clear it. When the filter matches nothing, **C | `pangular:inspect-component` | tool | Selects one instance and returns its live detail: inputs, outputs, properties, listeners, directives and injected services. With `path`, reads one nested value instead, with `depth` and `limit`. | | `pangular:list-components` | tool | Returns the live tree of one page as an indented outline with routed, directive host and hydration markers. Takes a `filter` with the search syntax, a `depth` and `directiveHosts`. | | `pangular:defer-blocks` | tool | Lists the `@defer` blocks of each page, and flags blocks that failed, blocks stuck on their placeholder and blocks still dehydrated. | +| `pangular:load-defer-block` | tool | Makes one `@defer` block fetch its dependencies and show its main content, as if its trigger fired. Leaves dehydrated server HTML alone. An action. | | `pangular:for-blocks` | tool | Lists the `@for` blocks of each page with their item count, track kind and `@empty` block. | | `pangular:scan-templates` | tool | Lints component templates in source with the project's Angular template parser: parse errors, `@for` tracking objects by `$index`, `` without `alt`, `(click)` without a key handler, `*ngIf`-style directives and `ngClass` or `ngStyle`. | | `pangular:hydration` | tool | Returns the hydration status of each page rendered on the server, and turns the outline on the page on or off. Turning the outline on or off is an action. | diff --git a/apps/docs/src/content/inspectors/signals.md b/apps/docs/src/content/inspectors/signals.md index 4e398fa5..b0c64141 100644 --- a/apps/docs/src/content/inspectors/signals.md +++ b/apps/docs/src/content/inspectors/signals.md @@ -29,6 +29,7 @@ The **Graph of** picker at the top selects whose graph you see. It appears when - **Root services** shows the effects registered on the root injector, such as an `effect()` in a `providedIn: 'root'` service, and the signals they read. - **Route: path** entries show the effects registered on the injector of a route with `providers`, on the active route chain. A route with an empty `path` is named by the path of its parent routes, such as **Route: review**, or **Route: /** at the top. Other environment injectors on that chain, such as the one of a lazy `loadChildren`, show as **Environment**. - Pick any live component to pin the graph to it. The picker numbers duplicates, for example `#2`. +- **Show in Signals** in the [Components tab](./components.md#detail-header) pins the graph to the selected instance the same way. From a signal property, it also selects that signal's node. A `#tab=signals&id=&page=` [deep link](../getting-started/popup-and-hub.md#link-to-an-item) does the same. - Without a routed component, the tab shows the first component that has signals, among the first 50 on the page. A line under the picker names the component, its host path, and why it was chosen: **picked**, **rendered by the router** or **first component with signals**. For an injector, it names the injector. diff --git a/extension/ui/assets/browser-agent-rpc-KH4HHvHf-Cnuzvx9N.js b/extension/ui/assets/browser-agent-rpc-KH4HHvHf-CnWgn3Pv.js similarity index 95% rename from extension/ui/assets/browser-agent-rpc-KH4HHvHf-Cnuzvx9N.js rename to extension/ui/assets/browser-agent-rpc-KH4HHvHf-CnWgn3Pv.js index 1b931a2d..068ed55c 100644 --- a/extension/ui/assets/browser-agent-rpc-KH4HHvHf-Cnuzvx9N.js +++ b/extension/ui/assets/browser-agent-rpc-KH4HHvHf-CnWgn3Pv.js @@ -1 +1 @@ -import{t as e}from"./index-CTniu9C2.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-Dfyn8fCo.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-CTniu9C2.js b/extension/ui/assets/index-Dfyn8fCo.js similarity index 54% rename from extension/ui/assets/index-CTniu9C2.js rename to extension/ui/assets/index-Dfyn8fCo.js index 5a9417fe..9a1c66d7 100644 --- a/extension/ui/assets/index-CTniu9C2.js +++ b/extension/ui/assets/index-Dfyn8fCo.js @@ -1,14 +1,14 @@ (function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=Object.defineProperty,t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable,i=(t,n,r)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r,a=(e,a)=>{for(var o in a||={})n.call(a,o)&&i(e,o,a[o]);if(t)for(var o of t(a))r.call(a,o)&&i(e,o,a[o]);return e},o=(e,t,n)=>(i(e,typeof t==`symbol`?t:t+``,n),n),s=globalThis;function c(e){let t=s.__Zone_symbol_prefix;return(typeof t==`string`?t:`__zone_symbol__`)+e}function l(){let e=s.performance;function t(t){e&&e.mark&&e.mark(t)}function n(t,n){e&&e.measure&&e.measure(t,n)}t(`Zone`);let r=class e{constructor(e,t){o(this,`_parent`),o(this,`_name`),o(this,`_properties`),o(this,`_zoneDelegate`),this._parent=e,this._name=t?t.name||`unnamed`:``,this._properties=t&&t.properties||{},this._zoneDelegate=new l(this,this._parent&&this._parent._zoneDelegate,t)}static assertZonePatched(){if(s.Promise!==pe.ZoneAwarePromise)throw Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let t=e.current;for(;t.parent;)t=t.parent;return t}static get current(){return he.zone}static get currentTask(){return ge}static __load_patch(r,i,a=!1){if(Object.hasOwn(pe,r)){let e=s[c(`forceDuplicateZoneCheck`)]===!0;if(!a&&e)throw Error(`Already loaded patch: `+r)}else if(!s[`__Zone_disable_`+r]){let a=`Zone:`+r;t(a),pe[r]=i(s,e,me),n(a,a)}}get parent(){return this._parent}get name(){return this._name}get(e){let t=this.getZoneWith(e);if(t)return t._properties[e]}getZoneWith(e){let t=this;for(;t;){if(Object.hasOwn(t._properties,e))return t;t=t._parent}return null}fork(e){if(!e)throw Error(`ZoneSpec required!`);return this._zoneDelegate.fork(this,e)}wrap(e,t){if(typeof e!=`function`)throw Error(`Expecting function got: `+e);let n=this._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}}run(e,t,n,r){he={parent:he,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{he=he.parent}}runGuarded(e,t=null,n,r){he={parent:he,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{he=he.parent}}runTask(e,t,n){if(e.zone!=this)throw Error(`A task can only be run in the zone of creation! (Creation: `+(e.zone||re).name+`; Execution: `+this.name+`)`);let r=e,{type:i,data:{isPeriodic:a=!1,isRefreshable:o=!1}={}}=e;if(e.state===ie&&(i===fe||i===de))return;let s=e.state!=se;s&&r._transitionTo(se,oe);let c=ge;ge=r,he={parent:he,zone:this};try{i==de&&e.data&&!a&&!o&&(e.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,r,t,n)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{let t=e.state;if(t!==ie&&t!==le){if(i==fe||a||o&&t===ae)s&&r._transitionTo(oe,se,ae);else{let e=r._zoneDelegates;this._updateTaskCount(r,-1),s&&r._transitionTo(ie,se,ie),o&&(r._zoneDelegates=e)}}he=he.parent,ge=c}}scheduleTask(e){if(e.zone&&e.zone!==this){let t=this;for(;t;){if(t===e.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${e.zone.name}`);t=t.parent}}e._transitionTo(ae,ie);let t=[];e._zoneDelegates=t,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(t){throw e._transitionTo(le,ae,ie),this._zoneDelegate.handleError(this,t),t}return e._zoneDelegates===t&&this._updateTaskCount(e,1),e.state==ae&&e._transitionTo(oe,ae),e}scheduleMicroTask(e,t,n,r){return this.scheduleTask(new u(ue,e,t,n,r,void 0))}scheduleMacroTask(e,t,n,r,i){return this.scheduleTask(new u(de,e,t,n,r,i))}scheduleEventTask(e,t,n,r,i){return this.scheduleTask(new u(fe,e,t,n,r,i))}cancelTask(e){if(e.zone!=this)throw Error(`A task can only be cancelled in the zone of creation! (Creation: `+(e.zone||re).name+`; Execution: `+this.name+`)`);if(e.state===oe||e.state===se){e._transitionTo(ce,oe,se);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(le,ce),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(ie,ce),e.runCount=-1,e}}_updateTaskCount(e,t){let n=e._zoneDelegates;t==-1&&(e._zoneDelegates=null);for(let r=0;re.hasTask(n,r),onScheduleTask:(e,t,n,r)=>e.scheduleTask(n,r),onInvokeTask:(e,t,n,r,i,a)=>e.invokeTask(n,r,i,a),onCancelTask:(e,t,n,r)=>e.cancelTask(n,r)};class l{constructor(e,t,n){o(this,`_zone`),o(this,`_taskCounts`,{microTask:0,macroTask:0,eventTask:0}),o(this,`_forkDlgt`),o(this,`_forkZS`),o(this,`_forkCurrZone`),o(this,`_interceptDlgt`),o(this,`_interceptZS`),o(this,`_interceptCurrZone`),o(this,`_invokeDlgt`),o(this,`_invokeZS`),o(this,`_invokeCurrZone`),o(this,`_handleErrorDlgt`),o(this,`_handleErrorZS`),o(this,`_handleErrorCurrZone`),o(this,`_scheduleTaskDlgt`),o(this,`_scheduleTaskZS`),o(this,`_scheduleTaskCurrZone`),o(this,`_invokeTaskDlgt`),o(this,`_invokeTaskZS`),o(this,`_invokeTaskCurrZone`),o(this,`_cancelTaskDlgt`),o(this,`_cancelTaskZS`),o(this,`_cancelTaskCurrZone`),o(this,`_hasTaskDlgt`),o(this,`_hasTaskDlgtOwner`),o(this,`_hasTaskZS`),o(this,`_hasTaskCurrZone`),this._zone=e,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),this._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this._zone:t._forkCurrZone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this._zone:t._interceptCurrZone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this._zone:t._invokeCurrZone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this._zone:t._handleErrorCurrZone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this._zone:t._scheduleTaskCurrZone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this._zone:t._invokeTaskCurrZone),this._cancelTaskZS=n&&(n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this._zone:t._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;let r=n&&n.onHasTask,i=t&&t._hasTaskZS;(r||i)&&(this._hasTaskZS=r?n:a,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=this._zone,n.onScheduleTask||(this._scheduleTaskZS=a,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this._zone),n.onInvokeTask||(this._invokeTaskZS=a,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this._zone),n.onCancelTask||(this._cancelTaskZS=a,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this._zone))}get zone(){return this._zone}fork(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new i(e,t)}intercept(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t}invoke(e,t,n,r,i){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,r,i):t.apply(n,r)}handleError(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)}scheduleTask(e,t){let n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t),n||=t;else if(t.scheduleFn)t.scheduleFn(t);else if(t.type==ue)te(t);else throw Error(`Task is missing scheduleFn.`);return n}invokeTask(e,t,n,r){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,r):t.callback.apply(n,r)}cancelTask(e,t){let n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error(`Task is not cancelable`);n=t.cancelFn(t)}return n}hasTask(e,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(t){this.handleError(e,t)}}_updateTaskCount(e,t){let n=this._taskCounts,r=n[e],i=n[e]=r+t;if(i<0)throw Error(`More tasks executed then were scheduled.`);if(r==0||i==0){let t={microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e};this.hasTask(this._zone,t)}}}class u{constructor(e,t,n,r,i,a){if(o(this,`type`),o(this,`source`),o(this,`invoke`),o(this,`callback`),o(this,`data`),o(this,`scheduleFn`),o(this,`cancelFn`),o(this,`_zone`,null),o(this,`runCount`,0),o(this,`_zoneDelegates`,null),o(this,`_state`,`notScheduled`),this.type=e,this.source=t,this.data=r,this.scheduleFn=i,this.cancelFn=a,!n)throw Error(`callback is not defined`);this.callback=n;let c=this;this.invoke=e===fe&&r&&r.useG?u.invokeTask:function(){return u.invokeTask.call(s,c,this,arguments)}}static invokeTask(e,t,n){e||=this,_e++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{try{_e===1&&!s[m]&&ne()}finally{_e--}}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(ie,ae)}_transitionTo(e,t,n){if(this._state===t||this._state===n)this._state=e,e==ie&&(this._zoneDelegates=null);else throw Error(`${this.type} '${this.source}': can not transition to '${e}', expecting state '${t}'${n?` or '`+n+`'`:``}, was '${this._state}'.`)}toString(){return this.data&&this.data.handleId!==void 0?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}let d=c(`setTimeout`),f=c(`Promise`),p=c(`then`),m=c(`enable_native_microtask_draining`),h=[],g=!1,_;function ee(e){!_&&s[f]&&(_=s[f].resolve(0)),_?(_[p]??_.then).call(_,e):s[d](e,0)}function te(e){let t=s[m],n=t&&h.length===0&&!g,r=!t&&_e===0&&h.length===0;(n||r)&&ee(ne),e&&h.push(e)}function ne(){if(!g){g=!0;try{for(;h.length;){let e=h;h=[];for(let t of e)try{t.zone.runTask(t,null,null)}catch(e){me.onUnhandledError(e)}}}finally{if(s[m])g=!1,me.microtaskDrainDone();else try{me.microtaskDrainDone()}finally{g=!1}}}}let re={name:`NO ZONE`},ie=`notScheduled`,ae=`scheduling`,oe=`scheduled`,se=`running`,ce=`canceling`,le=`unknown`,ue=`microTask`,de=`macroTask`,fe=`eventTask`,pe=Object.create(null),me={symbol:c,currentZoneFrame:()=>he,onUnhandledError:ve,microtaskDrainDone:ve,scheduleMicroTask:te,showUncaughtError:()=>!i[c(`ignoreConsoleErrorUncaughtError`)],patchEventTarget:()=>[],patchOnProperties:ve,patchMethod:()=>ve,bindArguments:()=>[],patchThen:()=>ve,patchMacroTask:()=>ve,patchEventPrototype:()=>ve,getGlobalObjects:()=>void 0,ObjectDefineProperty:()=>ve,ObjectGetOwnPropertyDescriptor:()=>void 0,ObjectCreate:()=>void 0,ArraySlice:()=>[],patchClass:()=>ve,wrapWithCurrentZone:()=>ve,filterProperties:()=>[],attachOriginToPatched:()=>ve,_redefineProperty:()=>ve,patchCallbacks:()=>ve,nativeScheduleMicroTask:ee},he={parent:null,zone:new i(null,null)},ge=null,_e=0;function ve(){}return n(`Zone`,`Zone`),i}function u(){let e=globalThis,t=e[c(`forceDuplicateZoneCheck`)]===!0;if(e.Zone&&(t||typeof e.Zone.__symbol__!=`function`))throw Error(`Zone already loaded.`);return e.Zone??=l(),e.Zone}var d=Object.getOwnPropertyDescriptor,f=Object.defineProperty,p=Object.getPrototypeOf,m=Object.create,h=Array.prototype.slice,g=`addEventListener`,_=`removeEventListener`,ee=c(g),te=c(_),ne=`true`,re=`false`,ie=c(``);function ae(e,t){return Zone.current.wrap(e,t)}function oe(e,t,n,r,i){return Zone.current.scheduleMacroTask(e,t,n,r,i)}var se=c,ce=typeof window<`u`,le=ce?window:void 0,ue=ce&&le||globalThis,de=`removeAttribute`;function fe(e,t){for(let n=e.length-1;n>=0;n--)typeof e[n]==`function`&&(e[n]=ae(e[n],t+`_`+n));return e}function pe(e,t){let n=e.constructor.name;for(let r=0;r{let t=function(){return e.apply(this,fe(arguments,n+`.`+i))};return Oe(t,e),t})(a)}}}function me(e){return e?e.writable===!1?!1:typeof e.get!=`function`||e.set!==void 0:!0}var he=typeof WorkerGlobalScope<`u`&&self instanceof WorkerGlobalScope,ge=!(`nw`in ue)&&ue.process!==void 0&&ue.process.toString()===`[object process]`,_e=!ge&&!he&&!!(ce&&le.HTMLElement),ve=ue.process!==void 0&&ue.process.toString()===`[object process]`&&!he&&!!(ce&&le.HTMLElement),ye=Object.create(null),be=se(`enable_beforeunload`),xe=function(e){if(e||=ue.event,!e)return;let t=ye[e.type];t||=ye[e.type]=se(`ON_PROPERTY`+e.type);let n=this||e.target||ue,r=n[t],i;if(_e&&n===le&&e.type===`error`){let t=e;i=r&&r.call(this,t.message,t.filename,t.lineno,t.colno,t.error),i===!0&&e.preventDefault()}else i=r&&r.apply(this,arguments),e.type===`beforeunload`&&ue[be]&&typeof i==`string`?e.returnValue=i:i!=null&&!i&&e.preventDefault();return i};function Se(e,t,n){let r=d(e,t);if(!r&&n&&d(n,t)&&(r={enumerable:!0,configurable:!0}),!r||!r.configurable)return;let i=se(`on`+t+`patched`);if(Object.hasOwn(e,i)&&e[i])return;delete r.writable,delete r.value;let a=r.get,o=r.set,s=t.slice(2),c=ye[s];c||=ye[s]=se(`ON_PROPERTY`+s),r.set=function(t){let n=this;!n&&e===ue&&(n=ue),n&&(typeof n[c]==`function`&&n.removeEventListener(s,xe),o?.call(n,null),n[c]=t,typeof t==`function`&&n.addEventListener(s,xe,!1))},r.get=function(){let n=this;if(!n&&e===ue&&(n=ue),!n)return null;let i=n[c];if(i)return i;if(a){let e=a.call(this);if(e)return r.set.call(this,e),typeof n[de]==`function`&&n.removeAttribute(t),e}return null},f(e,t,r),e[i]=!0}function Ce(e,t,n){if(t)for(let r=0;rfunction(t,r){let a=n(t,r);return a.cbIdx>=0&&typeof r[a.cbIdx]==`function`?oe(a.name,r[a.cbIdx],a,i):e.apply(t,r)})}function Oe(e,t){e[se(`OriginalDelegate`)]=t}function ke(e){return typeof e==`function`}function Ae(e){return typeof e==`number`}var je={useG:!0},Me=Object.create(null),Ne={},Pe=RegExp(`^`+ie+`(\\w+)(true|false)$`),Fe=se(`propagationStopped`),Ie=[`capture`,`once`,`passive`,`signal`];function Le(e,t){let n=(t?t(e):e)+re,r=(t?t(e):e)+ne,i=ie+n,a=ie+r;Me[e]={[re]:i,[ne]:a}}function Re(e,t,n,r){let i=r&&r.add||g,o=r&&r.rm||_,s=r&&r.listeners||`eventListeners`,c=r&&r.rmAll||`removeAllListeners`,l=se(i),u=`.`+i+`:`,d=function(e,t,n){if(e.isRemoved)return;let r=e.callback;typeof r==`object`&&r.handleEvent&&(e.callback=e=>r.handleEvent(e),e.originalDelegate=r);let i;try{e.invoke(e,t,[n])}catch(e){i=e}let a=e.options;if(a&&typeof a==`object`&&a.once){let r=e.originalDelegate?e.originalDelegate:e.callback;t[o].call(t,n.type,r,a)}return i};function f(n,r,i){if(r||=e.event,!r)return;let a=n||r.target||e,o=a[Me[r.type][i?ne:re]];if(o){let e=[];if(o.length===1){let t=d(o[0],a,r);t&&e.push(t)}else{let t=o.slice();for(let n=0;n{throw r})}}}let m=function(e){return f(this,e,!1)},h=function(e){return f(this,e,!0)};function ee(t,n){if(!t)return!1;let r=!0;n&&n.useG!==void 0&&(r=n.useG);let d=n&&n.vh,f=!0;n&&n.chkDup!==void 0&&(f=n.chkDup);let g=!1;n&&n.rt!==void 0&&(g=n.rt);let _=t;for(;_&&!Object.hasOwn(_,i);)_=p(_);if(!_&&t[i]&&(_=t),!_||_[l])return!1;let ee=n&&n.eventNameToString,te={},ae=_[l]=_[i],oe=_[se(o)]=_[o],ce=_[se(s)]=_[s],le=_[se(c)]=_[c],ue;n&&n.prepend&&(ue=_[se(n.prepend)]=_[n.prepend]);function de(e,t){return t?typeof e==`boolean`?{capture:e,passive:!0}:e?(typeof e==`object`&&e.passive!==!1&&(e.passive=!0),e):{passive:!0}:e}let fe=function(e){if(!te.isExisting)return ae.call(te.target,te.eventName,te.capture?h:m,te.options)},pe=function(e){if(!e.isRemoved){let t=Me[e.eventName],n;t&&(n=t[e.capture?ne:re]);let r=n&&e.target[n];if(r){for(let t=0;t_e.zone.cancelTask(_e);t.call(_,`abort`,e,{once:!0}),_e.removeAbortListener=()=>_.removeEventListener(`abort`,e)}if(te.target=null,he&&(he.taskData=null),ae&&(te.options.once=!0),typeof _e.options!=`boolean`&&(_e.options=g),_e.target=l,_e.capture=ie,_e.eventName=u,m&&(_e.originalDelegate=p),c?le.unshift(_e):le.push(_e),s)return l}};return _[i]=we(ae,u,ve,ye,g),ue&&(_.prependListener=we(ue,`.prependListener:`,he,ye,g,!0)),_[o]=function(){let t=this||e,r=arguments[0];n&&n.transferEventName&&(r=n.transferEventName(r));let i=arguments[2],a=i?typeof i==`boolean`||i.capture:!1,o=arguments[1];if(!o)return oe.apply(this,arguments);if(d&&!d(oe,o,t,arguments))return;let s=Me[r],c;s&&(c=s[a?ne:re]);let l=c&&t[c];if(l)for(let e=0;efunction(t,n){t[Fe]=!0,e&&e.apply(t,n)})}function Be(e,t){t.patchMethod(e,`queueMicrotask`,e=>function(e,t){Zone.current.scheduleMicroTask(`queueMicrotask`,t[0])})}var Ve=se(`zoneTask`);function He(e,t,n,r){let i=null,a=null;t+=r,n+=r;let o={};function s(t){let n=t.data;n.args[0]=function(){return t.invoke.apply(this,arguments)};let r=i.apply(e,n.args);return Ae(r)?n.handleId=r:(n.handle=r,n.isRefreshable=ke(r?.refresh)),t}function c(t){let{handle:n,handleId:r}=t.data;return a.call(e,n??r)}i=Ee(e,t,n=>function(i,a){if(ke(a[0])){let e={isRefreshable:!1,isPeriodic:r===`Interval`,delay:r===`Timeout`||r===`Interval`?a[1]||0:void 0,args:a},n=a[0];a[0]=function(){try{return n.apply(this,arguments)}finally{let{handle:t,handleId:n,isPeriodic:r,isRefreshable:i}=e;!r&&!i&&(n?delete o[n]:t&&(t[Ve]=null))}};let i=oe(t,a[0],e,s,c);if(!i)return i;let{handleId:l,handle:u,isRefreshable:d,isPeriodic:f}=i.data;if(l)o[l]=i;else if(u&&(u[Ve]=i,d&&!f)){let e=u.refresh;u.refresh=function(){let{zone:t,state:n}=i;return n===`notScheduled`?(i._state=`scheduled`,t._updateTaskCount(i,1)):n===`running`&&(i._state=`scheduling`),e.call(this)}}return u??l??i}return n.apply(e,a)}),a=Ee(e,n,t=>function(n,r){let i=r[0],a;Ae(i)?(a=o[i],delete o[i]):(a=i?.[Ve],a?i[Ve]=null:a=i),a?.type?a.cancelFn&&a.zone.cancelTask(a):t.apply(e,r)})}function Ue(e,t){let{isBrowser:n,isMix:r}=t.getGlobalObjects();(n||r)&&e.customElements&&`customElements`in e&&t.patchCallbacks(t,e.customElements,`customElements`,`define`,[`connectedCallback`,`disconnectedCallback`,`adoptedCallback`,`attributeChangedCallback`,`formAssociatedCallback`,`formDisabledCallback`,`formResetCallback`,`formStateRestoreCallback`])}function We(e,t){if(Zone[t.symbol(`patchEventTarget`)])return;let{eventNames:n,zoneSymbolEventNames:r,TRUE_STR:i,FALSE_STR:a,ZONE_SYMBOL_PREFIX:o}=t.getGlobalObjects();for(let e=0;et.target===e);if(r.length===0)return t;let i=r[0].ignoreProperties;return t.filter(e=>i.indexOf(e)===-1)}function qe(e,t,n,r){e&&Ce(e,Ke(e,t,n),r)}function Je(e){return Object.getOwnPropertyNames(e).filter(e=>e.startsWith(`on`)&&e.length>2).map(e=>e.substring(2))}function tee(e,t){if(ge&&!ve||Zone[e.symbol(`patchEvents`)])return;let n=t.__Zone_ignore_on_properties,r=[];if(_e){let e=window;r=r.concat([`Document`,`SVGElement`,`Element`,`HTMLElement`,`HTMLBodyElement`,`HTMLMediaElement`,`HTMLFrameSetElement`,`HTMLFrameElement`,`HTMLIFrameElement`,`HTMLMarqueeElement`,`Worker`]),qe(e,Je(e),n,p(e))}r=r.concat([`XMLHttpRequest`,`XMLHttpRequestEventTarget`,`IDBIndex`,`IDBRequest`,`IDBOpenDBRequest`,`IDBDatabase`,`IDBTransaction`,`IDBCursor`,`WebSocket`]);for(let e=0;e{let t=`clear`;He(e,`set`,t,`Timeout`),He(e,`set`,t,`Interval`),He(e,`set`,t,`Immediate`)}),e.__load_patch(`requestAnimationFrame`,e=>{He(e,`request`,`cancel`,`AnimationFrame`),He(e,`mozRequest`,`mozCancel`,`AnimationFrame`),He(e,`webkitRequest`,`webkitCancel`,`AnimationFrame`)}),e.__load_patch(`blocking`,(e,t)=>{let n=[`alert`,`prompt`,`confirm`];for(let r=0;rfunction(r,a){return t.current.run(n,e,a,i)})}}),e.__load_patch(`EventTarget`,(e,t,n)=>{Ge(e,n),We(e,n);let r=e.XMLHttpRequestEventTarget;r&&r.prototype&&n.patchEventTarget(e,n,[r.prototype])}),e.__load_patch(`MutationObserver`,(e,t,n)=>{Te(`MutationObserver`),Te(`WebKitMutationObserver`)}),e.__load_patch(`IntersectionObserver`,(e,t,n)=>{Te(`IntersectionObserver`)}),e.__load_patch(`FileReader`,(e,t,n)=>{Te(`FileReader`)}),e.__load_patch(`on_property`,(e,t,n)=>{tee(n,e)}),e.__load_patch(`customElements`,(e,t,n)=>{Ue(e,n)}),e.__load_patch(`XHR`,(e,t)=>{c(e);let n=se(`xhrTask`),r=se(`xhrSync`),i=se(`xhrListener`),a=se(`xhrScheduled`),o=se(`xhrURL`),s=se(`xhrErrorBeforeScheduled`);function c(e){let c=e.XMLHttpRequest;if(!c)return;let l=c.prototype;function u(e){return e[n]}let d=l[ee],f=l[te];if(!d){let t=e.XMLHttpRequestEventTarget;if(t){let e=t.prototype;d=e[ee],f=e[te]}}let p=`readystatechange`,m=`scheduled`;function h(e){let r=e.data,o=r.target;o[a]=!1,o[s]=!1;let c=o[i];d||(d=o[ee],f=o[te]),c&&f.call(o,p,c);let l=o[i]=()=>{if(o.readyState===o.DONE){if(!r.aborted&&o[a]&&e.state===m){let n=o[t.__symbol__(`loadfalse`)];if(o.status!==0&&n&&n.length>0){let i=e.invoke;e.invoke=function(){let n=o[t.__symbol__(`loadfalse`)];for(let t=0;tfunction(e,t){return e[r]=t[2]==0,e[o]=t[1],ne.apply(e,t)}),re=se(`fetchTaskAborting`),ie=se(`fetchTaskScheduling`),ae=Ee(l,`send`,()=>function(e,n){if(t.current[ie]===!0||e[r])return ae.apply(e,n);{let t={target:e,url:e[o],isPeriodic:!1,args:n,aborted:!1},r=oe(`XMLHttpRequest.send`,g,t,h,_);e&&e[s]===!0&&!t.aborted&&r.state===m&&r.invoke()}}),ce=Ee(l,`abort`,()=>function(e,n){let r=u(e);if(r&&typeof r.type==`string`){if(r.cancelFn==null||r.data&&r.data.aborted)return;r.zone.cancelTask(r)}else if(t.current[re]===!0)return ce.apply(e,n)})}}),e.__load_patch(`geolocation`,e=>{e.navigator&&e.navigator.geolocation&&pe(e.navigator.geolocation,[`getCurrentPosition`,`watchPosition`])}),e.__load_patch(`PromiseRejectionEvent`,(e,t)=>{function n(t){return function(n){ze(e,t).forEach(r=>{let i=e.PromiseRejectionEvent;if(i){let e=new i(t,{promise:n.promise,reason:n.rejection});r.invoke(e)}})}}e.PromiseRejectionEvent&&(t[se(`unhandledPromiseRejectionHandler`)]=n(`unhandledrejection`),t[se(`rejectionHandledHandler`)]=n(`rejectionhandled`))}),e.__load_patch(`queueMicrotask`,(e,t,n)=>{Be(e,n)})}function Xe(e){e.__load_patch(`ZoneAwarePromise`,(e,t,n)=>{let r=Object.getOwnPropertyDescriptor,i=Object.defineProperty;function a(e){return e&&e.toString===Object.prototype.toString?(e.constructor&&e.constructor.name||``)+`: `+JSON.stringify(e):e?e.toString():Object.prototype.toString.call(e)}let o=n.symbol,s=[],c=e[o(`DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION`)]!==!1,l=o(`Promise`),u=o(`then`);n.onUnhandledError=e=>{if(n.showUncaughtError()){let t=e&&e.rejection;t&&e.zone&&e.task?console.error(`Unhandled Promise rejection:`,t instanceof Error?t.message:t,`; Zone:`,e.zone.name,`; Task:`,e.task&&e.task.source,`; Value:`,t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=()=>{for(;s.length;){let e=s.shift();try{e.zone.runGuarded(()=>{throw e.throwOriginal?e.rejection:e})}catch(e){f(e)}}};let d=o(`unhandledPromiseRejectionHandler`);function f(e){n.onUnhandledError(e);try{let n=t[d];typeof n==`function`&&n.call(this,e)}catch{}}function p(e){return e&&typeof e.then==`function`}function m(e){return e}function h(e){return fe.reject(e)}let g=o(`state`),_=o(`value`),ee=o(`finally`),te=o(`parentPromiseValue`),ne=o(`parentPromiseState`);function re(e,t){return n=>{try{oe(e,t,n)}catch(t){oe(e,!1,t)}}}let ie=function(){let e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}},ae=o(`currentTaskTrace`);function oe(e,r,o){let l=ie();if(e===o)throw TypeError(`Promise resolved with itself`);if(e[g]===null){let u=null;try{(typeof o==`object`||typeof o==`function`)&&(u=o&&o.then)}catch(t){return l(()=>{oe(e,!1,t)})(),e}if(r!==!1&&o instanceof fe&&Object.hasOwn(o,g)&&Object.hasOwn(o,_)&&o[g]!==null)ce(o),oe(e,o[g],o[_]);else if(r!==!1&&typeof u==`function`)try{u.call(o,l(re(e,r)),l(re(e,!1)))}catch(t){l(()=>{oe(e,!1,t)})()}else{e[g]=r;let l=e[_];if(e[_]=o,e[ee]===ee&&r===!0&&(e[g]=e[ne],e[_]=e[te]),r===!1&&o instanceof Error){let e=t.currentTask&&t.currentTask.data&&t.currentTask.data.__creationTrace__;e&&i(o,ae,{configurable:!0,enumerable:!1,writable:!0,value:e})}for(let t=0;t{try{let r=e[_],i=!!n&&ee===n[ee];i&&(n[te]=r,n[ne]=a),oe(n,!0,t.run(o,void 0,i&&o!==h&&o!==m?[]:[r]))}catch(e){oe(n,!1,e)}},n)}let ue=function(){},de=e.AggregateError;class fe{static toString(){return`function ZoneAwarePromise() { [native code] }`}static resolve(e){return e instanceof fe?e:oe(new this(null),!0,e)}static reject(e){return oe(new this(null),!1,e)}static withResolvers(){let e={};return e.promise=new fe((t,n)=>{e.resolve=t,e.reject=n}),e}static any(e){if(!e||typeof e[Symbol.iterator]!=`function`)return Promise.reject(new de([],`All promises were rejected`));let t=[],n=0;try{for(let r of e)n++,t.push(fe.resolve(r))}catch{return Promise.reject(new de([],`All promises were rejected`))}if(n===0)return Promise.reject(new de([],`All promises were rejected`));let r=!1,i=[];return new fe((e,a)=>{for(let o=0;o{r||(r=!0,e(t))},e=>{i.push(e),n--,n===0&&(r=!0,a(new de(i,`All promises were rejected`)))})})}static race(e){let t,n,r=new this((e,r)=>{t=e,n=r});function i(e){t(e)}function a(e){n(e)}for(let t of e)p(t)||(t=this.resolve(t)),t.then(i,a);return r}static all(e){return fe.allWithCallback(e)}static allSettled(e){return(this&&this.prototype instanceof fe?this:fe).allWithCallback(e,{thenCallback:e=>({status:`fulfilled`,value:e}),errorCallback:e=>({status:`rejected`,reason:e})})}static allWithCallback(e,t){let n,r,i=new this((e,t)=>{n=e,r=t}),a=2,o=0,s=[];for(let i of e){p(i)||(i=this.resolve(i));let e=o;try{i.then(r=>{s[e]=t?t.thenCallback(r):r,a--,a===0&&n(s)},i=>{t?(s[e]=t.errorCallback(i),a--,a===0&&n(s)):r(i)})}catch(e){r(e)}a++,o++}return a-=2,a===0&&n(s),i}constructor(e){let t=this;if(!(t instanceof fe))throw Error(`Must be an instanceof Promise.`);t[g]=null,t[_]=[];try{let n=ie();e&&e(n(re(t,!0)),n(re(t,!1)))}catch(e){oe(t,!1,e)}}get[Symbol.toStringTag](){return`Promise`}get[Symbol.species](){return fe}then(e,n){let r=this.constructor?.[Symbol.species];(!r||typeof r!=`function`)&&(r=this.constructor||fe);let i=new r(ue),a=t.current;return this[g]==null?this[_].push(a,i,e,n):le(this,a,i,e,n),i}catch(e){return this.then(null,e)}finally(e){let n=this.constructor?.[Symbol.species];(!n||typeof n!=`function`)&&(n=fe);let r=new n(ue);r[ee]=ee;let i=t.current;return this[g]==null?this[_].push(i,r,e,e):le(this,i,r,e,e),r}}fe.resolve=fe.resolve,fe.reject=fe.reject,fe.race=fe.race,fe.all=fe.all;let pe=e[l]=e.Promise;e.Promise=fe;let me=o(`thenPatched`);function he(e){let t=e.prototype,n=r(t,`then`);if(n&&(n.writable===!1||!n.configurable))return;let i=t.then;t[u]=i,e.prototype.then=function(e,t){return new fe((e,t)=>{i.call(this,e,t)}).then(e,t)},e[me]=!0}n.patchThen=he;function ge(e){return function(t,n){let r=e.apply(t,n);if(r instanceof fe)return r;let i=r.constructor;return i[me]||he(i),r}}if(pe){he(pe);let t=pe.try;t&&typeof t==`function`&&(fe.try=t),Ee(e,`fetch`,e=>ge(e))}return Promise[t.__symbol__(`uncaughtPromiseErrors`)]=s,fe})}function Ze(e){e.__load_patch(`toString`,e=>{let t=Function.prototype.toString,n=se(`OriginalDelegate`),r=se(`Promise`),i=se(`Error`),a=function(){if(typeof this==`function`){let a=this[n];if(a)return typeof a==`function`?t.call(a):Object.prototype.toString.call(a);if(this===Promise){let n=e[r];if(n)return t.call(n)}if(this===Error){let n=e[i];if(n)return t.call(n)}}return t.call(this)};a[n]=t,Function.prototype.toString=a;let o=Object.prototype.toString;Object.prototype.toString=function(){return typeof Promise==`function`&&this instanceof Promise?`[object Promise]`:o.call(this)}})}function Qe(e,t,n,r,i){let a=Zone.__symbol__(r);if(t[a])return;let o=t[a]=t[r];t[r]=function(a,s,c){return s&&s.prototype&&i.forEach(function(t){let i=`${n}.${r}::`+t,a=s.prototype;try{if(Object.hasOwn(a,t)){let n=e.ObjectGetOwnPropertyDescriptor(a,t);n&&n.value?(n.value=e.wrapWithCurrentZone(n.value,i),e._redefineProperty(s.prototype,t,n)):a[t]&&(a[t]=e.wrapWithCurrentZone(a[t],i))}else a[t]&&(a[t]=e.wrapWithCurrentZone(a[t],i))}catch{}}),o.call(t,a,s,c)},e.attachOriginToPatched(t[r],o)}function $e(e){e.__load_patch(`util`,(e,t,n)=>{let r=Je(e);n.patchOnProperties=Ce,n.patchMethod=Ee,n.bindArguments=fe,n.patchMacroTask=De;let i=t.__symbol__(`BLACK_LISTED_EVENTS`),a=t.__symbol__(`UNPATCHED_EVENTS`);e[a]&&(e[i]=e[a]),e[i]&&(t[i]=t[a]=e[i]),n.patchEventPrototype=eee,n.patchEventTarget=Re,n.ObjectDefineProperty=f,n.ObjectGetOwnPropertyDescriptor=d,n.ObjectCreate=m,n.ArraySlice=h,n.patchClass=Te,n.wrapWithCurrentZone=ae,n.filterProperties=Ke,n.attachOriginToPatched=Oe,n._redefineProperty=Object.defineProperty,n.patchCallbacks=Qe,n.getGlobalObjects=()=>({globalSources:Ne,zoneSymbolEventNames:Me,eventNames:r,isBrowser:_e,isMix:ve,isNode:ge,TRUE_STR:ne,FALSE_STR:re,ZONE_SYMBOL_PREFIX:ie,ADD_EVENT_LISTENER_STR:g,REMOVE_EVENT_LISTENER_STR:_})})}function et(e){Xe(e),Ze(e),$e(e)}var tt=u();et(tt),Ye(tt);var nt=(function(e){return e[e.NONE=0]=`NONE`,e[e.HTML=1]=`HTML`,e[e.STYLE=2]=`STYLE`,e[e.SCRIPT=3]=`SCRIPT`,e[e.URL=4]=`URL`,e[e.RESOURCE_URL=5]=`RESOURCE_URL`,e[e.ATTRIBUTE_NO_BINDING=6]=`ATTRIBUTE_NO_BINDING`,e})(nt||{}),rt=(function(e){return e[e.None=0]=`None`,e[e.Const=1]=`Const`,e})(rt||{}),it=class{modifiers;constructor(e=rt.None){this.modifiers=e}hasModifier(e){return(this.modifiers&e)!==0}},at=(function(e){return e[e.Dynamic=0]=`Dynamic`,e[e.Bool=1]=`Bool`,e[e.String=2]=`String`,e[e.Int=3]=`Int`,e[e.Number=4]=`Number`,e[e.Function=5]=`Function`,e[e.Inferred=6]=`Inferred`,e[e.None=7]=`None`,e})(at||{}),ot=class extends it{name;constructor(e,t){super(t),this.name=e}visitType(e,t){return e.visitBuiltinType(this,t)}};at.Dynamic;var st=new ot(at.Inferred);at.Bool,at.Int,at.Number,at.String,at.Function,at.None;var v=(function(e){return e[e.Equals=0]=`Equals`,e[e.NotEquals=1]=`NotEquals`,e[e.Assign=2]=`Assign`,e[e.Identical=3]=`Identical`,e[e.NotIdentical=4]=`NotIdentical`,e[e.Minus=5]=`Minus`,e[e.Plus=6]=`Plus`,e[e.Divide=7]=`Divide`,e[e.Multiply=8]=`Multiply`,e[e.Modulo=9]=`Modulo`,e[e.And=10]=`And`,e[e.Or=11]=`Or`,e[e.BitwiseOr=12]=`BitwiseOr`,e[e.BitwiseAnd=13]=`BitwiseAnd`,e[e.Lower=14]=`Lower`,e[e.LowerEquals=15]=`LowerEquals`,e[e.Bigger=16]=`Bigger`,e[e.BiggerEquals=17]=`BiggerEquals`,e[e.NullishCoalesce=18]=`NullishCoalesce`,e[e.Exponentiation=19]=`Exponentiation`,e[e.In=20]=`In`,e[e.InstanceOf=21]=`InstanceOf`,e[e.AdditionAssignment=22]=`AdditionAssignment`,e[e.SubtractionAssignment=23]=`SubtractionAssignment`,e[e.MultiplicationAssignment=24]=`MultiplicationAssignment`,e[e.DivisionAssignment=25]=`DivisionAssignment`,e[e.RemainderAssignment=26]=`RemainderAssignment`,e[e.ExponentiationAssignment=27]=`ExponentiationAssignment`,e[e.AndAssignment=28]=`AndAssignment`,e[e.OrAssignment=29]=`OrAssignment`,e[e.NullishCoalesceAssignment=30]=`NullishCoalesceAssignment`,e})(v||{});function ct(e,t){return e==null||t==null?e==t:e.isEquivalent(t)}function lt(e,t,n){let r=e.length;if(r!==t.length)return!1;for(let i=0;ie.isEquivalent(t))}var dt=class{leadingComments;type;sourceSpan;constructor(e,t,n){this.leadingComments=n,this.type=e||null,this.sourceSpan=t||null}prop(e,t){return new ree(this,e,null,t)}key(e,t,n){return new iee(this,e,t,n)}callFn(e,t,n,r){return new mt(this,e,null,t,n,r)}instantiate(e,t,n,r){return new ht(this,e,t,n)}conditional(e,t=null,n,r){return new nee(this,e,t,null,n)}equals(e,t){return new yt(v.Equals,this,e,null,t)}notEquals(e,t){return new yt(v.NotEquals,this,e,null,t)}identical(e,t){return new yt(v.Identical,this,e,null,t)}notIdentical(e,t){return new yt(v.NotIdentical,this,e,null,t)}minus(e,t){return new yt(v.Minus,this,e,null,t)}plus(e,t){return new yt(v.Plus,this,e,null,t)}divide(e,t){return new yt(v.Divide,this,e,null,t)}multiply(e,t){return new yt(v.Multiply,this,e,null,t)}modulo(e,t){return new yt(v.Modulo,this,e,null,t)}power(e,t){return new yt(v.Exponentiation,this,e,null,t)}and(e,t){return new yt(v.And,this,e,null,t)}bitwiseOr(e,t){return new yt(v.BitwiseOr,this,e,null,t)}bitwiseAnd(e,t){return new yt(v.BitwiseAnd,this,e,null,t)}or(e,t){return new yt(v.Or,this,e,null,t)}lower(e,t){return new yt(v.Lower,this,e,null,t)}lowerEquals(e,t){return new yt(v.LowerEquals,this,e,null,t)}bigger(e,t){return new yt(v.Bigger,this,e,null,t)}biggerEquals(e,t){return new yt(v.BiggerEquals,this,e,null,t)}isBlank(e){return this.equals(lee,e)}nullishCoalesce(e,t){return new yt(v.NullishCoalesce,this,e,null,t)}toStmt(e){return new xt(this,null,e)}},ft=class e extends dt{name;constructor(e,t,n,r){super(t,n,r),this.name=e}isEquivalent(t){return t instanceof e&&this.name===t.name}isConstant(){return!1}visitExpression(e,t){return e.visitReadVarExpr(this,t)}clone(){return new e(this.name,this.type,this.sourceSpan)}set(e){return new yt(v.Assign,this,e,null,this.sourceSpan)}},pt=class e extends dt{expr;constructor(e,t,n,r){super(t,n,r),this.expr=e}visitExpression(e,t){return e.visitTypeofExpr(this,t)}isEquivalent(t){return t instanceof e&&t.expr.isEquivalent(this.expr)}isConstant(){return this.expr.isConstant()}clone(){return new e(this.expr.clone())}},mt=class e extends dt{fn;args;pure;isOptional;constructor(e,t,n,r,i=!1,a,o=!1){super(n,r,a),this.fn=e,this.args=t,this.pure=i,this.isOptional=o}get receiver(){return this.fn}isEquivalent(t){return t instanceof e&&this.fn.isEquivalent(t.fn)&&ut(this.args,t.args)&&this.pure===t.pure}isConstant(){return!1}visitExpression(e,t){return e.visitInvokeFunctionExpr(this,t)}clone(){return new e(this.fn.clone(),this.args.map(e=>e.clone()),this.type,this.sourceSpan,this.pure,[],this.isOptional)}},ht=class e extends dt{classExpr;args;constructor(e,t,n,r,i){super(n,r,i),this.classExpr=e,this.args=t}isEquivalent(t){return t instanceof e&&this.classExpr.isEquivalent(t.classExpr)&&ut(this.args,t.args)}isConstant(){return!1}visitExpression(e,t){return e.visitInstantiateExpr(this,t)}clone(){return new e(this.classExpr.clone(),this.args.map(e=>e.clone()),this.type,this.sourceSpan)}},gt=class e extends dt{body;flags;constructor(e,t,n,r){super(null,n,r),this.body=e,this.flags=t}isEquivalent(t){return t instanceof e&&this.body===t.body&&this.flags===t.flags}isConstant(){return!0}visitExpression(e,t){return e.visitRegularExpressionLiteral(this,t)}clone(){return new e(this.body,this.flags,this.sourceSpan)}},_t=class e extends dt{value;constructor(e,t,n,r){super(t,n,r),this.value=e}isEquivalent(t){return t instanceof e&&this.value===t.value}isConstant(){return!0}visitExpression(e,t){return e.visitLiteralExpr(this,t)}clone(){return new e(this.value,this.type,this.sourceSpan)}},vt=class e extends dt{value;typeParams;constructor(e,t,n=null,r,i){super(t,r,i),this.value=e,this.typeParams=n}isEquivalent(t){return t instanceof e&&this.value.name===t.value.name&&this.value.moduleName===t.value.moduleName}isConstant(){return!1}visitExpression(e,t){return e.visitExternalExpr(this,t)}clone(){return new e(this.value,this.type,this.typeParams,this.sourceSpan)}},nee=class e extends dt{condition;falseCase;trueCase;constructor(e,t,n=null,r,i,a){super(r||t.type,i,a),this.condition=e,this.falseCase=n,this.trueCase=t}isEquivalent(t){return t instanceof e&&this.condition.isEquivalent(t.condition)&&this.trueCase.isEquivalent(t.trueCase)&&ct(this.falseCase,t.falseCase)}isConstant(){return!1}visitExpression(e,t){return e.visitConditionalExpr(this,t)}clone(){return new e(this.condition.clone(),this.trueCase.clone(),this.falseCase?.clone(),this.type,this.sourceSpan)}},yt=class e extends dt{operator;rhs;lhs;constructor(e,t,n,r,i,a){super(r||t.type,i,a),this.operator=e,this.rhs=n,this.lhs=t}isEquivalent(t){return t instanceof e&&this.operator===t.operator&&this.lhs.isEquivalent(t.lhs)&&this.rhs.isEquivalent(t.rhs)}isConstant(){return!1}visitExpression(e,t){return e.visitBinaryOperatorExpr(this,t)}clone(){return new e(this.operator,this.lhs.clone(),this.rhs.clone(),this.type,this.sourceSpan)}isAssignment(){let e=this.operator;return e===v.Assign||e===v.AdditionAssignment||e===v.SubtractionAssignment||e===v.MultiplicationAssignment||e===v.DivisionAssignment||e===v.RemainderAssignment||e===v.ExponentiationAssignment||e===v.AndAssignment||e===v.OrAssignment||e===v.NullishCoalesceAssignment}},ree=class e extends dt{receiver;name;isOptional;constructor(e,t,n,r,i,a=!1){super(n,r,i),this.receiver=e,this.name=t,this.isOptional=a}get index(){return this.name}isEquivalent(t){return t instanceof e&&this.receiver.isEquivalent(t.receiver)&&this.name===t.name&&this.isOptional===t.isOptional}isConstant(){return!1}visitExpression(e,t){return e.visitReadPropExpr(this,t)}set(e){return new yt(v.Assign,this.receiver.prop(this.name),e,null,this.sourceSpan)}clone(){return new e(this.receiver.clone(),this.name,this.type,this.sourceSpan,[],this.isOptional)}},iee=class e extends dt{receiver;index;isOptional;constructor(e,t,n,r,i,a=!1){super(n,r,i),this.receiver=e,this.index=t,this.isOptional=a}isEquivalent(t){return t instanceof e&&this.receiver.isEquivalent(t.receiver)&&this.index.isEquivalent(t.index)&&this.isOptional===t.isOptional}isConstant(){return!1}visitExpression(e,t){return e.visitReadKeyExpr(this,t)}set(e){return new yt(v.Assign,this.receiver.key(this.index),e,null,this.sourceSpan)}clone(){return new e(this.receiver.clone(),this.index.clone(),this.type,this.sourceSpan,[],this.isOptional)}},aee=class e extends dt{entries;constructor(e,t,n,r){super(t,n,r),this.entries=e}isConstant(){return this.entries.every(e=>e.isConstant())}isEquivalent(t){return t instanceof e&&ut(this.entries,t.entries)}visitExpression(e,t){return e.visitLiteralArrayExpr(this,t)}clone(){return new e(this.entries.map(e=>e.clone()),this.type,this.sourceSpan)}},oee=class e{expression;constructor(e){this.expression=e}isEquivalent(t){return t instanceof e&&this.expression.isEquivalent(t.expression)}clone(){return new e(this.expression.clone())}isConstant(){return this.expression.isConstant()}},see=class e extends dt{entries;valueType=null;constructor(e,t,n,r){super(t,n,r),this.entries=e,t&&(this.valueType=t.valueType)}isEquivalent(t){return t instanceof e&&ut(this.entries,t.entries)}isConstant(){return this.entries.every(e=>e.isConstant())}visitExpression(e,t){return e.visitLiteralMapExpr(this,t)}clone(){let t=this.entries.map(e=>e.clone());return new e(t,this.type,this.sourceSpan)}},cee=class e extends dt{expression;constructor(e,t,n){super(null,t,n),this.expression=e}isEquivalent(t){return t instanceof e&&this.expression.isEquivalent(t.expression)}isConstant(){return this.expression.isConstant()}visitExpression(e,t){return e.visitSpreadElementExpr(this,t)}clone(){return new e(this.expression.clone(),this.sourceSpan)}},lee=new _t(null,st,null),bt=(function(e){return e[e.None=0]=`None`,e[e.Final=1]=`Final`,e[e.Private=2]=`Private`,e[e.Exported=4]=`Exported`,e[e.Static=8]=`Static`,e})(bt||{}),uee=class{modifiers;sourceSpan;leadingComments;constructor(e=bt.None,t=null,n){this.modifiers=e,this.sourceSpan=t,this.leadingComments=n}hasModifier(e){return(this.modifiers&e)!==0}addLeadingComment(e){this.leadingComments=this.leadingComments??[],this.leadingComments.push(e)}},xt=class e extends uee{expr;constructor(e,t,n){super(bt.None,t,n),this.expr=e}isEquivalent(t){return t instanceof e&&this.expr.isEquivalent(t.expr)}visitStatement(e,t){return e.visitExpressionStmt(this,t)}};(class e{static INSTANCE=new e;keyOf(e){if(e instanceof _t&&typeof e.value==`string`)return`"${e.value}"`;if(e instanceof _t)return String(e.value);if(e instanceof gt)return`/${e.body}/${e.flags??``}`;if(e instanceof aee){let t=[];for(let n of e.entries)t.push(this.keyOf(n));return`[${t.join(`,`)}]`}if(e instanceof see){let t=[];for(let n of e.entries)if(n instanceof oee)t.push(`...`+this.keyOf(n.expression));else{let e=n.key;n.quoted&&(e=`"${e}"`),t.push(e+`:`+this.keyOf(n.value))}return`{${t.join(`,`)}}`}if(e instanceof vt)return`import("${e.value.moduleName}", ${e.value.name})`;if(e instanceof ft)return`read(${e.name})`;if(e instanceof pt)return`typeof(${this.keyOf(e.expr)})`;if(e instanceof cee)return`...${this.keyOf(e.expression)}`;throw Error(`${this.constructor.name} does not handle expressions of type ${e.constructor.name}`)}});var y=`@angular/core`,b=(()=>{class e{static core={name:null,moduleName:y};static namespaceHTML={name:`ɵɵnamespaceHTML`,moduleName:y};static namespaceMathML={name:`ɵɵnamespaceMathML`,moduleName:y};static namespaceSVG={name:`ɵɵnamespaceSVG`,moduleName:y};static element={name:`ɵɵelement`,moduleName:y};static elementStart={name:`ɵɵelementStart`,moduleName:y};static elementEnd={name:`ɵɵelementEnd`,moduleName:y};static foreignComponent={name:`ɵɵforeignComponent`,moduleName:y};static foreignContent={name:`ɵɵforeignContent`,moduleName:y};static foreignContentFn={name:`ɵɵforeignContentFn`,moduleName:y};static domElement={name:`ɵɵdomElement`,moduleName:y};static domElementStart={name:`ɵɵdomElementStart`,moduleName:y};static domElementEnd={name:`ɵɵdomElementEnd`,moduleName:y};static domElementContainer={name:`ɵɵdomElementContainer`,moduleName:y};static domElementContainerStart={name:`ɵɵdomElementContainerStart`,moduleName:y};static domElementContainerEnd={name:`ɵɵdomElementContainerEnd`,moduleName:y};static domTemplate={name:`ɵɵdomTemplate`,moduleName:y};static domListener={name:`ɵɵdomListener`,moduleName:y};static advance={name:`ɵɵadvance`,moduleName:y};static syntheticHostProperty={name:`ɵɵsyntheticHostProperty`,moduleName:y};static syntheticHostListener={name:`ɵɵsyntheticHostListener`,moduleName:y};static attribute={name:`ɵɵattribute`,moduleName:y};static classProp={name:`ɵɵclassProp`,moduleName:y};static elementContainerStart={name:`ɵɵelementContainerStart`,moduleName:y};static elementContainerEnd={name:`ɵɵelementContainerEnd`,moduleName:y};static elementContainer={name:`ɵɵelementContainer`,moduleName:y};static styleMap={name:`ɵɵstyleMap`,moduleName:y};static classMap={name:`ɵɵclassMap`,moduleName:y};static styleProp={name:`ɵɵstyleProp`,moduleName:y};static interpolate={name:`ɵɵinterpolate`,moduleName:y};static interpolate1={name:`ɵɵinterpolate1`,moduleName:y};static interpolate2={name:`ɵɵinterpolate2`,moduleName:y};static interpolate3={name:`ɵɵinterpolate3`,moduleName:y};static interpolate4={name:`ɵɵinterpolate4`,moduleName:y};static interpolate5={name:`ɵɵinterpolate5`,moduleName:y};static interpolate6={name:`ɵɵinterpolate6`,moduleName:y};static interpolate7={name:`ɵɵinterpolate7`,moduleName:y};static interpolate8={name:`ɵɵinterpolate8`,moduleName:y};static interpolateV={name:`ɵɵinterpolateV`,moduleName:y};static nextContext={name:`ɵɵnextContext`,moduleName:y};static resetView={name:`ɵɵresetView`,moduleName:y};static templateCreate={name:`ɵɵtemplate`,moduleName:y};static defer={name:`ɵɵdefer`,moduleName:y};static deferWhen={name:`ɵɵdeferWhen`,moduleName:y};static deferOnIdle={name:`ɵɵdeferOnIdle`,moduleName:y};static deferOnImmediate={name:`ɵɵdeferOnImmediate`,moduleName:y};static deferOnTimer={name:`ɵɵdeferOnTimer`,moduleName:y};static deferOnHover={name:`ɵɵdeferOnHover`,moduleName:y};static deferOnInteraction={name:`ɵɵdeferOnInteraction`,moduleName:y};static deferOnViewport={name:`ɵɵdeferOnViewport`,moduleName:y};static deferPrefetchWhen={name:`ɵɵdeferPrefetchWhen`,moduleName:y};static deferPrefetchOnIdle={name:`ɵɵdeferPrefetchOnIdle`,moduleName:y};static deferPrefetchOnImmediate={name:`ɵɵdeferPrefetchOnImmediate`,moduleName:y};static deferPrefetchOnTimer={name:`ɵɵdeferPrefetchOnTimer`,moduleName:y};static deferPrefetchOnHover={name:`ɵɵdeferPrefetchOnHover`,moduleName:y};static deferPrefetchOnInteraction={name:`ɵɵdeferPrefetchOnInteraction`,moduleName:y};static deferPrefetchOnViewport={name:`ɵɵdeferPrefetchOnViewport`,moduleName:y};static deferHydrateWhen={name:`ɵɵdeferHydrateWhen`,moduleName:y};static deferHydrateNever={name:`ɵɵdeferHydrateNever`,moduleName:y};static deferHydrateOnIdle={name:`ɵɵdeferHydrateOnIdle`,moduleName:y};static deferHydrateOnImmediate={name:`ɵɵdeferHydrateOnImmediate`,moduleName:y};static deferHydrateOnTimer={name:`ɵɵdeferHydrateOnTimer`,moduleName:y};static deferHydrateOnHover={name:`ɵɵdeferHydrateOnHover`,moduleName:y};static deferHydrateOnInteraction={name:`ɵɵdeferHydrateOnInteraction`,moduleName:y};static deferHydrateOnViewport={name:`ɵɵdeferHydrateOnViewport`,moduleName:y};static deferEnableTimerScheduling={name:`ɵɵdeferEnableTimerScheduling`,moduleName:y};static enableIncrementalHydrationRuntime={name:`ɵɵenableIncrementalHydrationRuntime`,moduleName:y};static conditionalCreate={name:`ɵɵconditionalCreate`,moduleName:y};static conditionalBranchCreate={name:`ɵɵconditionalBranchCreate`,moduleName:y};static conditional={name:`ɵɵconditional`,moduleName:y};static repeater={name:`ɵɵrepeater`,moduleName:y};static repeaterCreate={name:`ɵɵrepeaterCreate`,moduleName:y};static repeaterTrackByIndex={name:`ɵɵrepeaterTrackByIndex`,moduleName:y};static repeaterTrackByIdentity={name:`ɵɵrepeaterTrackByIdentity`,moduleName:y};static componentInstance={name:`ɵɵcomponentInstance`,moduleName:y};static text={name:`ɵɵtext`,moduleName:y};static enableBindings={name:`ɵɵenableBindings`,moduleName:y};static disableBindings={name:`ɵɵdisableBindings`,moduleName:y};static getCurrentView={name:`ɵɵgetCurrentView`,moduleName:y};static textInterpolate={name:`ɵɵtextInterpolate`,moduleName:y};static textInterpolate1={name:`ɵɵtextInterpolate1`,moduleName:y};static textInterpolate2={name:`ɵɵtextInterpolate2`,moduleName:y};static textInterpolate3={name:`ɵɵtextInterpolate3`,moduleName:y};static textInterpolate4={name:`ɵɵtextInterpolate4`,moduleName:y};static textInterpolate5={name:`ɵɵtextInterpolate5`,moduleName:y};static textInterpolate6={name:`ɵɵtextInterpolate6`,moduleName:y};static textInterpolate7={name:`ɵɵtextInterpolate7`,moduleName:y};static textInterpolate8={name:`ɵɵtextInterpolate8`,moduleName:y};static textInterpolateV={name:`ɵɵtextInterpolateV`,moduleName:y};static restoreView={name:`ɵɵrestoreView`,moduleName:y};static pureFunction0={name:`ɵɵpureFunction0`,moduleName:y};static pureFunction1={name:`ɵɵpureFunction1`,moduleName:y};static pureFunction2={name:`ɵɵpureFunction2`,moduleName:y};static pureFunction3={name:`ɵɵpureFunction3`,moduleName:y};static pureFunction4={name:`ɵɵpureFunction4`,moduleName:y};static pureFunction5={name:`ɵɵpureFunction5`,moduleName:y};static pureFunction6={name:`ɵɵpureFunction6`,moduleName:y};static pureFunction7={name:`ɵɵpureFunction7`,moduleName:y};static pureFunction8={name:`ɵɵpureFunction8`,moduleName:y};static pureFunctionV={name:`ɵɵpureFunctionV`,moduleName:y};static pipeBind1={name:`ɵɵpipeBind1`,moduleName:y};static pipeBind2={name:`ɵɵpipeBind2`,moduleName:y};static pipeBind3={name:`ɵɵpipeBind3`,moduleName:y};static pipeBind4={name:`ɵɵpipeBind4`,moduleName:y};static pipeBindV={name:`ɵɵpipeBindV`,moduleName:y};static domProperty={name:`ɵɵdomProperty`,moduleName:y};static ariaProperty={name:`ɵɵariaProperty`,moduleName:y};static property={name:`ɵɵproperty`,moduleName:y};static control={name:`ɵɵcontrol`,moduleName:y};static controlCreate={name:`ɵɵcontrolCreate`,moduleName:y};static animationEnterListener={name:`ɵɵanimateEnterListener`,moduleName:y};static animationLeaveListener={name:`ɵɵanimateLeaveListener`,moduleName:y};static animationEnter={name:`ɵɵanimateEnter`,moduleName:y};static animationLeave={name:`ɵɵanimateLeave`,moduleName:y};static i18n={name:`ɵɵi18n`,moduleName:y};static i18nAttributes={name:`ɵɵi18nAttributes`,moduleName:y};static i18nExp={name:`ɵɵi18nExp`,moduleName:y};static i18nStart={name:`ɵɵi18nStart`,moduleName:y};static i18nEnd={name:`ɵɵi18nEnd`,moduleName:y};static i18nApply={name:`ɵɵi18nApply`,moduleName:y};static i18nPostprocess={name:`ɵɵi18nPostprocess`,moduleName:y};static pipe={name:`ɵɵpipe`,moduleName:y};static projection={name:`ɵɵprojection`,moduleName:y};static projectionDef={name:`ɵɵprojectionDef`,moduleName:y};static reference={name:`ɵɵreference`,moduleName:y};static inject={name:`ɵɵinject`,moduleName:y};static injectAttribute={name:`ɵɵinjectAttribute`,moduleName:y};static directiveInject={name:`ɵɵdirectiveInject`,moduleName:y};static invalidFactory={name:`ɵɵinvalidFactory`,moduleName:y};static invalidFactoryDep={name:`ɵɵinvalidFactoryDep`,moduleName:y};static templateRefExtractor={name:`ɵɵtemplateRefExtractor`,moduleName:y};static forwardRef={name:`forwardRef`,moduleName:y};static resolveForwardRef={name:`resolveForwardRef`,moduleName:y};static replaceMetadata={name:`ɵɵreplaceMetadata`,moduleName:y};static getReplaceMetadataURL={name:`ɵɵgetReplaceMetadataURL`,moduleName:y};static ɵɵdefineInjectable={name:`ɵɵdefineInjectable`,moduleName:y};static declareInjectable={name:`ɵɵngDeclareInjectable`,moduleName:y};static InjectableDeclaration={name:`ɵɵInjectableDeclaration`,moduleName:y};static defineService={name:`ɵɵdefineService`,moduleName:y};static declareService={name:`ɵɵngDeclareService`,moduleName:y};static resolveWindow={name:`ɵɵresolveWindow`,moduleName:y};static resolveDocument={name:`ɵɵresolveDocument`,moduleName:y};static resolveBody={name:`ɵɵresolveBody`,moduleName:y};static getComponentDepsFactory={name:`ɵɵgetComponentDepsFactory`,moduleName:y};static defineComponent={name:`ɵɵdefineComponent`,moduleName:y};static declareComponent={name:`ɵɵngDeclareComponent`,moduleName:y};static setComponentScope={name:`ɵɵsetComponentScope`,moduleName:y};static ChangeDetectionStrategy={name:`ChangeDetectionStrategy`,moduleName:y};static ViewEncapsulation={name:`ViewEncapsulation`,moduleName:y};static ComponentDeclaration={name:`ɵɵComponentDeclaration`,moduleName:y};static FactoryDeclaration={name:`ɵɵFactoryDeclaration`,moduleName:y};static declareFactory={name:`ɵɵngDeclareFactory`,moduleName:y};static FactoryTarget={name:`ɵɵFactoryTarget`,moduleName:y};static defineDirective={name:`ɵɵdefineDirective`,moduleName:y};static declareDirective={name:`ɵɵngDeclareDirective`,moduleName:y};static DirectiveDeclaration={name:`ɵɵDirectiveDeclaration`,moduleName:y};static InjectorDef={name:`ɵɵInjectorDef`,moduleName:y};static InjectorDeclaration={name:`ɵɵInjectorDeclaration`,moduleName:y};static defineInjector={name:`ɵɵdefineInjector`,moduleName:y};static declareInjector={name:`ɵɵngDeclareInjector`,moduleName:y};static NgModuleDeclaration={name:`ɵɵNgModuleDeclaration`,moduleName:y};static ModuleWithProviders={name:`ModuleWithProviders`,moduleName:y};static defineNgModule={name:`ɵɵdefineNgModule`,moduleName:y};static declareNgModule={name:`ɵɵngDeclareNgModule`,moduleName:y};static setNgModuleScope={name:`ɵɵsetNgModuleScope`,moduleName:y};static registerNgModuleType={name:`ɵɵregisterNgModuleType`,moduleName:y};static PipeDeclaration={name:`ɵɵPipeDeclaration`,moduleName:y};static definePipe={name:`ɵɵdefinePipe`,moduleName:y};static declarePipe={name:`ɵɵngDeclarePipe`,moduleName:y};static declareClassMetadata={name:`ɵɵngDeclareClassMetadata`,moduleName:y};static declareClassMetadataAsync={name:`ɵɵngDeclareClassMetadataAsync`,moduleName:y};static setClassMetadata={name:`ɵsetClassMetadata`,moduleName:y};static setClassMetadataAsync={name:`ɵsetClassMetadataAsync`,moduleName:y};static setClassDebugInfo={name:`ɵsetClassDebugInfo`,moduleName:y};static queryRefresh={name:`ɵɵqueryRefresh`,moduleName:y};static viewQuery={name:`ɵɵviewQuery`,moduleName:y};static loadQuery={name:`ɵɵloadQuery`,moduleName:y};static contentQuery={name:`ɵɵcontentQuery`,moduleName:y};static viewQuerySignal={name:`ɵɵviewQuerySignal`,moduleName:y};static contentQuerySignal={name:`ɵɵcontentQuerySignal`,moduleName:y};static queryAdvance={name:`ɵɵqueryAdvance`,moduleName:y};static twoWayProperty={name:`ɵɵtwoWayProperty`,moduleName:y};static twoWayBindingSet={name:`ɵɵtwoWayBindingSet`,moduleName:y};static twoWayListener={name:`ɵɵtwoWayListener`,moduleName:y};static declareLet={name:`ɵɵdeclareLet`,moduleName:y};static storeLet={name:`ɵɵstoreLet`,moduleName:y};static readContextLet={name:`ɵɵreadContextLet`,moduleName:y};static arrowFunction={name:`ɵɵarrowFunction`,moduleName:y};static attachSourceLocations={name:`ɵɵattachSourceLocations`,moduleName:y};static NgOnChangesFeature={name:`ɵɵNgOnChangesFeature`,moduleName:y};static ControlFeature={name:`ɵɵControlFeature`,moduleName:y};static InheritDefinitionFeature={name:`ɵɵInheritDefinitionFeature`,moduleName:y};static ProvidersFeature={name:`ɵɵProvidersFeature`,moduleName:y};static HostDirectivesFeature={name:`ɵɵHostDirectivesFeature`,moduleName:y};static ExternalStylesFeature={name:`ɵɵExternalStylesFeature`,moduleName:y};static listener={name:`ɵɵlistener`,moduleName:y};static getInheritedFactory={name:`ɵɵgetInheritedFactory`,moduleName:y};static sanitizeHtml={name:`ɵɵsanitizeHtml`,moduleName:y};static sanitizeStyle={name:`ɵɵsanitizeStyle`,moduleName:y};static validateAttribute={name:`ɵɵvalidateAttribute`,moduleName:y};static sanitizeResourceUrl={name:`ɵɵsanitizeResourceUrl`,moduleName:y};static sanitizeScript={name:`ɵɵsanitizeScript`,moduleName:y};static sanitizeUrl={name:`ɵɵsanitizeUrl`,moduleName:y};static sanitizeUrlOrResourceUrl={name:`ɵɵsanitizeUrlOrResourceUrl`,moduleName:y};static trustConstantHtml={name:`ɵɵtrustConstantHtml`,moduleName:y};static trustConstantResourceUrl={name:`ɵɵtrustConstantResourceUrl`,moduleName:y};static inputDecorator={name:`Input`,moduleName:y};static outputDecorator={name:`Output`,moduleName:y};static viewChildDecorator={name:`ViewChild`,moduleName:y};static viewChildrenDecorator={name:`ViewChildren`,moduleName:y};static contentChildDecorator={name:`ContentChild`,moduleName:y};static contentChildrenDecorator={name:`ContentChildren`,moduleName:y};static InputSignalBrandWriteType={name:`ɵINPUT_SIGNAL_BRAND_WRITE_TYPE`,moduleName:y};static UnwrapDirectiveSignalInputs={name:`ɵUnwrapDirectiveSignalInputs`,moduleName:y};static unwrapWritableSignal={name:`ɵunwrapWritableSignal`,moduleName:y};static assertType={name:`ɵassertType`,moduleName:y}}return e})();v.And,v.Bigger,v.BiggerEquals,v.BitwiseOr,v.BitwiseAnd,v.Divide,v.Assign,v.Equals,v.Identical,v.Lower,v.LowerEquals,v.Minus,v.Modulo,v.Exponentiation,v.Multiply,v.NotEquals,v.NotIdentical,v.NullishCoalesce,v.Or,v.Plus,v.In,v.InstanceOf,v.AdditionAssignment,v.SubtractionAssignment,v.MultiplicationAssignment,v.DivisionAssignment,v.RemainderAssignment,v.ExponentiationAssignment,v.AndAssignment,v.OrAssignment,v.NullishCoalesceAssignment;var St=class{span;sourceSpan;constructor(e,t){this.span=e,this.sourceSpan=t}toString(){return`AST`}},Ct=class extends St{receiver;args;argumentSpan;constructor(e,t,n,r,i){super(e,t),this.receiver=n,this.args=r,this.argumentSpan=i}visit(e,t=null){return e.visitCall(this,t)}},wt=(function(e){return e[e.Property=0]=`Property`,e[e.Attribute=1]=`Attribute`,e[e.Class=2]=`Class`,e[e.Style=3]=`Style`,e[e.LegacyAnimation=4]=`LegacyAnimation`,e[e.TwoWay=5]=`TwoWay`,e[e.Animation=6]=`Animation`,e})(wt||{}),Tt=`(:(where|is)\\()?`,Et=`-shadowcsshost`,Dt=`-shadowcsscontext`,Ot=`[^)(]*`,kt=String.raw`(?:\(${Ot}\)|${Ot})+?`,At=String.raw`(?:\(${kt}\)|${Ot})+?`,jt=String.raw`(?:\((${At})\))`;String.raw`(:nth-[-\w]+)`+jt,Et+jt+``,`${Tt}`,Dt+jt+``;var x=(function(e){return e[e.ListEnd=0]=`ListEnd`,e[e.Statement=1]=`Statement`,e[e.Variable=2]=`Variable`,e[e.ElementStart=3]=`ElementStart`,e[e.Element=4]=`Element`,e[e.ForeignComponent=5]=`ForeignComponent`,e[e.Template=6]=`Template`,e[e.ElementEnd=7]=`ElementEnd`,e[e.ContainerStart=8]=`ContainerStart`,e[e.Container=9]=`Container`,e[e.ContainerEnd=10]=`ContainerEnd`,e[e.DisableBindings=11]=`DisableBindings`,e[e.ConditionalCreate=12]=`ConditionalCreate`,e[e.ConditionalBranchCreate=13]=`ConditionalBranchCreate`,e[e.Conditional=14]=`Conditional`,e[e.EnableBindings=15]=`EnableBindings`,e[e.Text=16]=`Text`,e[e.Listener=17]=`Listener`,e[e.InterpolateText=18]=`InterpolateText`,e[e.Binding=19]=`Binding`,e[e.Property=20]=`Property`,e[e.StyleProp=21]=`StyleProp`,e[e.ClassProp=22]=`ClassProp`,e[e.StyleMap=23]=`StyleMap`,e[e.ClassMap=24]=`ClassMap`,e[e.Advance=25]=`Advance`,e[e.Pipe=26]=`Pipe`,e[e.Attribute=27]=`Attribute`,e[e.ExtractedAttribute=28]=`ExtractedAttribute`,e[e.Defer=29]=`Defer`,e[e.DeferOn=30]=`DeferOn`,e[e.DeferWhen=31]=`DeferWhen`,e[e.I18nMessage=32]=`I18nMessage`,e[e.DomProperty=33]=`DomProperty`,e[e.Namespace=34]=`Namespace`,e[e.ProjectionDef=35]=`ProjectionDef`,e[e.EnableIncrementalHydrationRuntime=36]=`EnableIncrementalHydrationRuntime`,e[e.Projection=37]=`Projection`,e[e.Content=38]=`Content`,e[e.RepeaterCreate=39]=`RepeaterCreate`,e[e.Repeater=40]=`Repeater`,e[e.TwoWayProperty=41]=`TwoWayProperty`,e[e.TwoWayListener=42]=`TwoWayListener`,e[e.DeclareLet=43]=`DeclareLet`,e[e.StoreLet=44]=`StoreLet`,e[e.I18nStart=45]=`I18nStart`,e[e.I18n=46]=`I18n`,e[e.I18nEnd=47]=`I18nEnd`,e[e.I18nExpression=48]=`I18nExpression`,e[e.I18nApply=49]=`I18nApply`,e[e.IcuStart=50]=`IcuStart`,e[e.IcuEnd=51]=`IcuEnd`,e[e.IcuPlaceholder=52]=`IcuPlaceholder`,e[e.I18nContext=53]=`I18nContext`,e[e.I18nAttributes=54]=`I18nAttributes`,e[e.SourceLocation=55]=`SourceLocation`,e[e.Animation=56]=`Animation`,e[e.AnimationString=57]=`AnimationString`,e[e.AnimationBinding=58]=`AnimationBinding`,e[e.AnimationListener=59]=`AnimationListener`,e[e.Control=60]=`Control`,e[e.ControlCreate=61]=`ControlCreate`,e})(x||{}),Mt=(function(e){return e[e.LexicalRead=0]=`LexicalRead`,e[e.Context=1]=`Context`,e[e.TrackContext=2]=`TrackContext`,e[e.ReadVariable=3]=`ReadVariable`,e[e.NextContext=4]=`NextContext`,e[e.Reference=5]=`Reference`,e[e.StoreLet=6]=`StoreLet`,e[e.ContextLetReference=7]=`ContextLetReference`,e[e.GetCurrentView=8]=`GetCurrentView`,e[e.RestoreView=9]=`RestoreView`,e[e.ResetView=10]=`ResetView`,e[e.PureFunctionExpr=11]=`PureFunctionExpr`,e[e.PureFunctionParameterExpr=12]=`PureFunctionParameterExpr`,e[e.PipeBinding=13]=`PipeBinding`,e[e.PipeBindingVariadic=14]=`PipeBindingVariadic`,e[e.SafePropertyRead=15]=`SafePropertyRead`,e[e.SafeKeyedRead=16]=`SafeKeyedRead`,e[e.SafeNavigationMigration=17]=`SafeNavigationMigration`,e[e.SafeTernaryExpr=18]=`SafeTernaryExpr`,e[e.EmptyExpr=19]=`EmptyExpr`,e[e.AssignTemporaryExpr=20]=`AssignTemporaryExpr`,e[e.ReadTemporaryExpr=21]=`ReadTemporaryExpr`,e[e.SlotLiteralExpr=22]=`SlotLiteralExpr`,e[e.ConditionalCase=23]=`ConditionalCase`,e[e.ConstCollected=24]=`ConstCollected`,e[e.TwoWayBindingSet=25]=`TwoWayBindingSet`,e[e.ForeignContent=26]=`ForeignContent`,e[e.ArrowFunction=27]=`ArrowFunction`,e})(Mt||{}),Nt=(function(e){return e[e.None=0]=`None`,e[e.AlwaysInline=1]=`AlwaysInline`,e})(Nt||{}),Pt=(function(e){return e[e.Context=0]=`Context`,e[e.Identifier=1]=`Identifier`,e[e.SavedView=2]=`SavedView`,e[e.Alias=3]=`Alias`,e})(Pt||{}),Ft=(function(e){return e[e.Attribute=0]=`Attribute`,e[e.ClassName=1]=`ClassName`,e[e.StyleProperty=2]=`StyleProperty`,e[e.Property=3]=`Property`,e[e.Template=4]=`Template`,e[e.I18n=5]=`I18n`,e[e.LegacyAnimation=6]=`LegacyAnimation`,e[e.TwoWayProperty=7]=`TwoWayProperty`,e[e.Animation=8]=`Animation`,e})(Ft||{}),It=(function(e){return e[e.Creation=0]=`Creation`,e[e.Postproccessing=1]=`Postproccessing`,e})(It||{}),Lt=(function(e){return e[e.I18nText=0]=`I18nText`,e[e.I18nAttribute=1]=`I18nAttribute`,e})(Lt||{}),Rt=(function(e){return e[e.None=0]=`None`,e[e.ElementTag=1]=`ElementTag`,e[e.TemplateTag=2]=`TemplateTag`,e[e.OpenTag=4]=`OpenTag`,e[e.CloseTag=8]=`CloseTag`,e[e.ExpressionIndex=16]=`ExpressionIndex`,e})(Rt||{}),zt=(function(e){return e[e.HTML=0]=`HTML`,e[e.SVG=1]=`SVG`,e[e.Math=2]=`Math`,e})(zt||{}),Bt=(function(e){return e[e.Idle=0]=`Idle`,e[e.Immediate=1]=`Immediate`,e[e.Timer=2]=`Timer`,e[e.Hover=3]=`Hover`,e[e.Interaction=4]=`Interaction`,e[e.Viewport=5]=`Viewport`,e[e.Never=6]=`Never`,e})(Bt||{}),Vt=(function(e){return e[e.RootI18n=0]=`RootI18n`,e[e.Icu=1]=`Icu`,e[e.Attr=2]=`Attr`,e})(Vt||{}),Ht=(function(e){return e[e.NgTemplate=0]=`NgTemplate`,e[e.Structural=1]=`Structural`,e[e.Block=2]=`Block`,e})(Ht||{}),Ut=(function(e){return e[e.None=0]=`None`,e[e.InChildOperation=1]=`InChildOperation`,e[e.InArrowFunctionOperation=2]=`InArrowFunctionOperation`,e[e.InSafeNavigationMigration=4]=`InSafeNavigationMigration`,e})(Ut||{});x.Element,x.ElementStart,x.Container,x.ContainerStart,x.Template,x.RepeaterCreate,x.ConditionalCreate,x.ConditionalBranchCreate;var S=(function(e){return e[e.Tmpl=0]=`Tmpl`,e[e.Host=1]=`Host`,e[e.Both=2]=`Both`,e})(S||{}),Wt=(function(e){return e[e.Full=0]=`Full`,e[e.DomOnly=1]=`DomOnly`,e})(Wt||{});b.ariaProperty,b.ariaProperty,b.attribute,b.attribute,b.classProp,b.classProp,b.element,b.element,b.elementContainer,b.elementContainer,b.elementContainerEnd,b.elementContainerEnd,b.elementContainerStart,b.elementContainerStart,b.elementEnd,b.elementEnd,b.elementStart,b.elementStart,b.domProperty,b.domProperty,b.i18nExp,b.i18nExp,b.listener,b.listener,b.listener,b.listener,b.property,b.property,b.styleProp,b.styleProp,b.syntheticHostListener,b.syntheticHostListener,b.syntheticHostProperty,b.syntheticHostProperty,b.templateCreate,b.templateCreate,b.twoWayProperty,b.twoWayProperty,b.twoWayListener,b.twoWayListener,b.declareLet,b.declareLet,b.conditionalCreate,b.conditionalBranchCreate,b.conditionalBranchCreate,b.conditionalBranchCreate,b.domElement,b.domElement,b.domElementStart,b.domElementStart,b.domElementEnd,b.domElementEnd,b.domElementContainer,b.domElementContainer,b.domElementContainerStart,b.domElementContainerStart,b.domElementContainerEnd,b.domElementContainerEnd,b.domListener,b.domListener,b.domTemplate,b.domTemplate,b.animationEnter,b.animationEnter,b.animationLeave,b.animationLeave,b.animationEnterListener,b.animationEnterListener,b.animationLeaveListener,b.animationLeaveListener,v.And,v.Bigger,v.BiggerEquals,v.BitwiseOr,v.BitwiseAnd,v.Divide,v.Assign,v.Equals,v.Identical,v.Lower,v.LowerEquals,v.Minus,v.Modulo,v.Exponentiation,v.Multiply,v.NotEquals,v.NotIdentical,v.NullishCoalesce,v.Or,v.Plus,v.In,v.InstanceOf,v.AdditionAssignment,v.SubtractionAssignment,v.MultiplicationAssignment,v.DivisionAssignment,v.RemainderAssignment,v.ExponentiationAssignment,v.AndAssignment,v.OrAssignment,v.NullishCoalesceAssignment,x.Property,x.Property,x.Property,x.Attribute,x.Attribute,x.Property,x.TwoWayProperty,x.Container,x.ContainerStart,x.ContainerEnd,x.Element,x.ElementStart,x.ElementEnd,x.Template,x.ElementEnd,x.ElementStart,x.Element,x.ContainerEnd,x.ContainerStart,x.Container,x.I18nEnd,x.I18nStart,x.I18n,x.Pipe;var Gt=` \f -\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,x.StyleMap,x.ClassMap,x.StyleProp,x.ClassProp,x.Attribute,x.Property,x.Attribute,x.Control,x.DomProperty,x.DomProperty,x.Attribute,x.StyleMap,x.ClassMap,x.StyleProp,x.ClassProp,x.Listener,x.TwoWayListener,x.AnimationListener,x.StyleMap,x.ClassMap,x.StyleProp,x.ClassProp,x.Property,x.TwoWayProperty,x.DomProperty,x.Attribute,x.Animation,x.Control,Bt.Idle,b.deferOnIdle,b.deferPrefetchOnIdle,b.deferHydrateOnIdle,Bt.Immediate,b.deferOnImmediate,b.deferPrefetchOnImmediate,b.deferHydrateOnImmediate,Bt.Timer,b.deferOnTimer,b.deferPrefetchOnTimer,b.deferHydrateOnTimer,Bt.Hover,b.deferOnHover,b.deferPrefetchOnHover,b.deferHydrateOnHover,Bt.Interaction,b.deferOnInteraction,b.deferPrefetchOnInteraction,b.deferHydrateOnInteraction,Bt.Viewport,b.deferOnViewport,b.deferPrefetchOnViewport,b.deferHydrateOnViewport,Bt.Never,b.deferHydrateNever,b.deferHydrateNever,b.deferHydrateNever,b.pipeBind1,b.pipeBind2,b.pipeBind3,b.pipeBind4,b.textInterpolate,b.textInterpolate1,b.textInterpolate2,b.textInterpolate3,b.textInterpolate4,b.textInterpolate5,b.textInterpolate6,b.textInterpolate7,b.textInterpolate8,b.textInterpolateV,b.interpolate,b.interpolate1,b.interpolate2,b.interpolate3,b.interpolate4,b.interpolate5,b.interpolate6,b.interpolate7,b.interpolate8,b.interpolateV,b.pureFunction0,b.pureFunction1,b.pureFunction2,b.pureFunction3,b.pureFunction4,b.pureFunction5,b.pureFunction6,b.pureFunction7,b.pureFunction8,b.pureFunctionV,b.resolveWindow,b.resolveDocument,b.resolveBody,nt.HTML,b.sanitizeHtml,nt.RESOURCE_URL,b.sanitizeResourceUrl,nt.SCRIPT,b.sanitizeScript,nt.STYLE,b.sanitizeStyle,nt.URL,b.sanitizeUrl,nt.ATTRIBUTE_NO_BINDING,b.validateAttribute,nt.HTML,b.trustConstantHtml,nt.RESOURCE_URL,b.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||{});S.Tmpl,S.Tmpl,S.Both,S.Host,S.Tmpl,S.Tmpl,S.Tmpl,S.Both,S.Both,S.Both,S.Tmpl,S.Both,S.Both,S.Tmpl,S.Both,S.Tmpl,S.Both,S.Both,S.Tmpl,S.Tmpl,S.Tmpl,S.Tmpl,S.Tmpl,S.Both,S.Both,S.Tmpl,S.Tmpl,S.Tmpl,S.Tmpl,S.Both,S.Both,S.Both,S.Tmpl,S.Tmpl,S.Both,S.Tmpl,S.Tmpl,S.Tmpl,S.Both,S.Both,S.Tmpl,S.Both,S.Both,S.Both,S.Both,S.Both,S.Tmpl,S.Tmpl,S.Tmpl,S.Tmpl,S.Tmpl,S.Tmpl,S.Tmpl,S.Tmpl,S.Tmpl,S.Tmpl,S.Tmpl,S.Tmpl,S.Both,S.Tmpl,S.Both,S.Tmpl,S.Both,S.Tmpl,S.Tmpl,S.Tmpl,S.Tmpl,S.Tmpl,S.Tmpl,S.Both,S.Both,S.Both,wt.Property,Ft.Property,wt.TwoWay,Ft.TwoWayProperty,wt.Attribute,Ft.Attribute,wt.Class,Ft.ClassName,wt.Style,Ft.StyleProperty,wt.LegacyAnimation,Ft.LegacyAnimation,wt.Animation,Ft.Animation;var Yt=`%COMP%`;`${Yt}`,`${Yt}`,class e{static SINGLETON=new e;static veWillInferAnyFor(t){let n=e.SINGLETON;return t instanceof Ct?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(Dn);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`),Dn={...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 On(){throw Error()}var kn=On;function An(e){kn(e)}function jn(e){kn=e}var Mn=null;function Nn(e,t){let n=Object.create(Ln);n.value=e,t!==void 0&&(n.equal=t);let r=()=>Pn(n);return r[en]=n,xn(n),[r,e=>Fn(n,e),e=>In(n,e)]}function Pn(e){return an(e),e.value}function Fn(e,t){ln()||An(e),e.equal(e.value,t)||(e.value=t,Rn(e))}function In(e,t){ln()||An(e),Fn(e,t(e.value))}var Ln={...rn,equal:Sn,value:void 0,kind:`signal`};function Rn(e){e.version++,on(),cn(e),Mn?.(e)}var zn={...rn,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,kind:`effect`};function Bn(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 Vn=void 0;function Hn(){return Vn}function Un(e){let t=Vn;return Vn=e,t}var Wn=Symbol(`NotFound`);function Gn(e){return e===Wn||e?.name===`ɵNotFound`}function Kn(e,t,n){let r=Object.create(Yn);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 qn(e,t){sn(e),Fn(e,t),dn(e)}function Jn(e,t){if(sn(e),e.value===En)throw e.error;In(e,t),dn(e)}var Yn={...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 Xn(e){let t=tn(null);try{return e()}finally{tn(t)}}var Zn=function(e,t){return Zn=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])},Zn(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`);Zn(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function $n(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 er(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 nr(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 rr(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 ir?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 or(e){if(!Symbol.asyncIterator)throw TypeError(`Symbol.asyncIterator is not defined.`);var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof tr==`function`?tr(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 sr(e){return typeof e==`function`}function cr(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 lr=cr(function(e){return function(t){e(this),this.message=t?t.length+` errors occurred during unsubscription: +`+o.stack:``))}catch(e){r=e}c&&(r.throwOriginal=!0),r.rejection=o,r.promise=e,r.zone=t.current,r.task=t.currentTask,s.push(r),n.scheduleMicroTask()}}}return e}let se=o(`rejectionHandledHandler`);function ce(e){if(e[g]===0){try{let n=t[se];n&&typeof n==`function`&&n.call(this,{rejection:e[_],promise:e})}catch{}e[g]=!1;for(let t=0;t{try{let r=e[_],i=!!n&&ee===n[ee];i&&(n[te]=r,n[ne]=a),oe(n,!0,t.run(o,void 0,i&&o!==h&&o!==m?[]:[r]))}catch(e){oe(n,!1,e)}},n)}let ue=function(){},de=e.AggregateError;class fe{static toString(){return`function ZoneAwarePromise() { [native code] }`}static resolve(e){return e instanceof fe?e:oe(new this(null),!0,e)}static reject(e){return oe(new this(null),!1,e)}static withResolvers(){let e={};return e.promise=new fe((t,n)=>{e.resolve=t,e.reject=n}),e}static any(e){if(!e||typeof e[Symbol.iterator]!=`function`)return Promise.reject(new de([],`All promises were rejected`));let t=[],n=0;try{for(let r of e)n++,t.push(fe.resolve(r))}catch{return Promise.reject(new de([],`All promises were rejected`))}if(n===0)return Promise.reject(new de([],`All promises were rejected`));let r=!1,i=[];return new fe((e,a)=>{for(let o=0;o{r||(r=!0,e(t))},e=>{i.push(e),n--,n===0&&(r=!0,a(new de(i,`All promises were rejected`)))})})}static race(e){let t,n,r=new this((e,r)=>{t=e,n=r});function i(e){t(e)}function a(e){n(e)}for(let t of e)p(t)||(t=this.resolve(t)),t.then(i,a);return r}static all(e){return fe.allWithCallback(e)}static allSettled(e){return(this&&this.prototype instanceof fe?this:fe).allWithCallback(e,{thenCallback:e=>({status:`fulfilled`,value:e}),errorCallback:e=>({status:`rejected`,reason:e})})}static allWithCallback(e,t){let n,r,i=new this((e,t)=>{n=e,r=t}),a=2,o=0,s=[];for(let i of e){p(i)||(i=this.resolve(i));let e=o;try{i.then(r=>{s[e]=t?t.thenCallback(r):r,a--,a===0&&n(s)},i=>{t?(s[e]=t.errorCallback(i),a--,a===0&&n(s)):r(i)})}catch(e){r(e)}a++,o++}return a-=2,a===0&&n(s),i}constructor(e){let t=this;if(!(t instanceof fe))throw Error(`Must be an instanceof Promise.`);t[g]=null,t[_]=[];try{let n=ie();e&&e(n(re(t,!0)),n(re(t,!1)))}catch(e){oe(t,!1,e)}}get[Symbol.toStringTag](){return`Promise`}get[Symbol.species](){return fe}then(e,n){let r=this.constructor?.[Symbol.species];(!r||typeof r!=`function`)&&(r=this.constructor||fe);let i=new r(ue),a=t.current;return this[g]==null?this[_].push(a,i,e,n):le(this,a,i,e,n),i}catch(e){return this.then(null,e)}finally(e){let n=this.constructor?.[Symbol.species];(!n||typeof n!=`function`)&&(n=fe);let r=new n(ue);r[ee]=ee;let i=t.current;return this[g]==null?this[_].push(i,r,e,e):le(this,i,r,e,e),r}}fe.resolve=fe.resolve,fe.reject=fe.reject,fe.race=fe.race,fe.all=fe.all;let pe=e[l]=e.Promise;e.Promise=fe;let me=o(`thenPatched`);function he(e){let t=e.prototype,n=r(t,`then`);if(n&&(n.writable===!1||!n.configurable))return;let i=t.then;t[u]=i,e.prototype.then=function(e,t){return new fe((e,t)=>{i.call(this,e,t)}).then(e,t)},e[me]=!0}n.patchThen=he;function ge(e){return function(t,n){let r=e.apply(t,n);if(r instanceof fe)return r;let i=r.constructor;return i[me]||he(i),r}}if(pe){he(pe);let t=pe.try;t&&typeof t==`function`&&(fe.try=t),Ee(e,`fetch`,e=>ge(e))}return Promise[t.__symbol__(`uncaughtPromiseErrors`)]=s,fe})}function Ze(e){e.__load_patch(`toString`,e=>{let t=Function.prototype.toString,n=se(`OriginalDelegate`),r=se(`Promise`),i=se(`Error`),a=function(){if(typeof this==`function`){let a=this[n];if(a)return typeof a==`function`?t.call(a):Object.prototype.toString.call(a);if(this===Promise){let n=e[r];if(n)return t.call(n)}if(this===Error){let n=e[i];if(n)return t.call(n)}}return t.call(this)};a[n]=t,Function.prototype.toString=a;let o=Object.prototype.toString;Object.prototype.toString=function(){return typeof Promise==`function`&&this instanceof Promise?`[object Promise]`:o.call(this)}})}function Qe(e,t,n,r,i){let a=Zone.__symbol__(r);if(t[a])return;let o=t[a]=t[r];t[r]=function(a,s,c){return s&&s.prototype&&i.forEach(function(t){let i=`${n}.${r}::`+t,a=s.prototype;try{if(Object.hasOwn(a,t)){let n=e.ObjectGetOwnPropertyDescriptor(a,t);n&&n.value?(n.value=e.wrapWithCurrentZone(n.value,i),e._redefineProperty(s.prototype,t,n)):a[t]&&(a[t]=e.wrapWithCurrentZone(a[t],i))}else a[t]&&(a[t]=e.wrapWithCurrentZone(a[t],i))}catch{}}),o.call(t,a,s,c)},e.attachOriginToPatched(t[r],o)}function $e(e){e.__load_patch(`util`,(e,t,n)=>{let r=Je(e);n.patchOnProperties=Ce,n.patchMethod=Ee,n.bindArguments=fe,n.patchMacroTask=De;let i=t.__symbol__(`BLACK_LISTED_EVENTS`),a=t.__symbol__(`UNPATCHED_EVENTS`);e[a]&&(e[i]=e[a]),e[i]&&(t[i]=t[a]=e[i]),n.patchEventPrototype=eee,n.patchEventTarget=Re,n.ObjectDefineProperty=f,n.ObjectGetOwnPropertyDescriptor=d,n.ObjectCreate=m,n.ArraySlice=h,n.patchClass=Te,n.wrapWithCurrentZone=ae,n.filterProperties=Ke,n.attachOriginToPatched=Oe,n._redefineProperty=Object.defineProperty,n.patchCallbacks=Qe,n.getGlobalObjects=()=>({globalSources:Ne,zoneSymbolEventNames:Me,eventNames:r,isBrowser:_e,isMix:ve,isNode:ge,TRUE_STR:ne,FALSE_STR:re,ZONE_SYMBOL_PREFIX:ie,ADD_EVENT_LISTENER_STR:g,REMOVE_EVENT_LISTENER_STR:_})})}function et(e){Xe(e),Ze(e),$e(e)}var tt=u();et(tt),Ye(tt);var nt=(function(e){return e[e.NONE=0]=`NONE`,e[e.HTML=1]=`HTML`,e[e.STYLE=2]=`STYLE`,e[e.SCRIPT=3]=`SCRIPT`,e[e.URL=4]=`URL`,e[e.RESOURCE_URL=5]=`RESOURCE_URL`,e[e.ATTRIBUTE_NO_BINDING=6]=`ATTRIBUTE_NO_BINDING`,e})(nt||{}),rt=(function(e){return e[e.None=0]=`None`,e[e.Const=1]=`Const`,e})(rt||{}),it=class{modifiers;constructor(e=rt.None){this.modifiers=e}hasModifier(e){return(this.modifiers&e)!==0}},at=(function(e){return e[e.Dynamic=0]=`Dynamic`,e[e.Bool=1]=`Bool`,e[e.String=2]=`String`,e[e.Int=3]=`Int`,e[e.Number=4]=`Number`,e[e.Function=5]=`Function`,e[e.Inferred=6]=`Inferred`,e[e.None=7]=`None`,e})(at||{}),ot=class extends it{name;constructor(e,t){super(t),this.name=e}visitType(e,t){return e.visitBuiltinType(this,t)}};at.Dynamic;var st=new ot(at.Inferred);at.Bool,at.Int,at.Number,at.String,at.Function,at.None;var v=(function(e){return e[e.Equals=0]=`Equals`,e[e.NotEquals=1]=`NotEquals`,e[e.Assign=2]=`Assign`,e[e.Identical=3]=`Identical`,e[e.NotIdentical=4]=`NotIdentical`,e[e.Minus=5]=`Minus`,e[e.Plus=6]=`Plus`,e[e.Divide=7]=`Divide`,e[e.Multiply=8]=`Multiply`,e[e.Modulo=9]=`Modulo`,e[e.And=10]=`And`,e[e.Or=11]=`Or`,e[e.BitwiseOr=12]=`BitwiseOr`,e[e.BitwiseAnd=13]=`BitwiseAnd`,e[e.Lower=14]=`Lower`,e[e.LowerEquals=15]=`LowerEquals`,e[e.Bigger=16]=`Bigger`,e[e.BiggerEquals=17]=`BiggerEquals`,e[e.NullishCoalesce=18]=`NullishCoalesce`,e[e.Exponentiation=19]=`Exponentiation`,e[e.In=20]=`In`,e[e.InstanceOf=21]=`InstanceOf`,e[e.AdditionAssignment=22]=`AdditionAssignment`,e[e.SubtractionAssignment=23]=`SubtractionAssignment`,e[e.MultiplicationAssignment=24]=`MultiplicationAssignment`,e[e.DivisionAssignment=25]=`DivisionAssignment`,e[e.RemainderAssignment=26]=`RemainderAssignment`,e[e.ExponentiationAssignment=27]=`ExponentiationAssignment`,e[e.AndAssignment=28]=`AndAssignment`,e[e.OrAssignment=29]=`OrAssignment`,e[e.NullishCoalesceAssignment=30]=`NullishCoalesceAssignment`,e})(v||{});function ct(e,t){return e==null||t==null?e==t:e.isEquivalent(t)}function lt(e,t,n){let r=e.length;if(r!==t.length)return!1;for(let i=0;ie.isEquivalent(t))}var dt=class{leadingComments;type;sourceSpan;constructor(e,t,n){this.leadingComments=n,this.type=e||null,this.sourceSpan=t||null}prop(e,t){return new ree(this,e,null,t)}key(e,t,n){return new iee(this,e,t,n)}callFn(e,t,n,r){return new mt(this,e,null,t,n,r)}instantiate(e,t,n,r){return new ht(this,e,t,n)}conditional(e,t=null,n,r){return new nee(this,e,t,null,n)}equals(e,t){return new yt(v.Equals,this,e,null,t)}notEquals(e,t){return new yt(v.NotEquals,this,e,null,t)}identical(e,t){return new yt(v.Identical,this,e,null,t)}notIdentical(e,t){return new yt(v.NotIdentical,this,e,null,t)}minus(e,t){return new yt(v.Minus,this,e,null,t)}plus(e,t){return new yt(v.Plus,this,e,null,t)}divide(e,t){return new yt(v.Divide,this,e,null,t)}multiply(e,t){return new yt(v.Multiply,this,e,null,t)}modulo(e,t){return new yt(v.Modulo,this,e,null,t)}power(e,t){return new yt(v.Exponentiation,this,e,null,t)}and(e,t){return new yt(v.And,this,e,null,t)}bitwiseOr(e,t){return new yt(v.BitwiseOr,this,e,null,t)}bitwiseAnd(e,t){return new yt(v.BitwiseAnd,this,e,null,t)}or(e,t){return new yt(v.Or,this,e,null,t)}lower(e,t){return new yt(v.Lower,this,e,null,t)}lowerEquals(e,t){return new yt(v.LowerEquals,this,e,null,t)}bigger(e,t){return new yt(v.Bigger,this,e,null,t)}biggerEquals(e,t){return new yt(v.BiggerEquals,this,e,null,t)}isBlank(e){return this.equals(lee,e)}nullishCoalesce(e,t){return new yt(v.NullishCoalesce,this,e,null,t)}toStmt(e){return new xt(this,null,e)}},ft=class e extends dt{name;constructor(e,t,n,r){super(t,n,r),this.name=e}isEquivalent(t){return t instanceof e&&this.name===t.name}isConstant(){return!1}visitExpression(e,t){return e.visitReadVarExpr(this,t)}clone(){return new e(this.name,this.type,this.sourceSpan)}set(e){return new yt(v.Assign,this,e,null,this.sourceSpan)}},pt=class e extends dt{expr;constructor(e,t,n,r){super(t,n,r),this.expr=e}visitExpression(e,t){return e.visitTypeofExpr(this,t)}isEquivalent(t){return t instanceof e&&t.expr.isEquivalent(this.expr)}isConstant(){return this.expr.isConstant()}clone(){return new e(this.expr.clone())}},mt=class e extends dt{fn;args;pure;isOptional;constructor(e,t,n,r,i=!1,a,o=!1){super(n,r,a),this.fn=e,this.args=t,this.pure=i,this.isOptional=o}get receiver(){return this.fn}isEquivalent(t){return t instanceof e&&this.fn.isEquivalent(t.fn)&&ut(this.args,t.args)&&this.pure===t.pure}isConstant(){return!1}visitExpression(e,t){return e.visitInvokeFunctionExpr(this,t)}clone(){return new e(this.fn.clone(),this.args.map(e=>e.clone()),this.type,this.sourceSpan,this.pure,[],this.isOptional)}},ht=class e extends dt{classExpr;args;constructor(e,t,n,r,i){super(n,r,i),this.classExpr=e,this.args=t}isEquivalent(t){return t instanceof e&&this.classExpr.isEquivalent(t.classExpr)&&ut(this.args,t.args)}isConstant(){return!1}visitExpression(e,t){return e.visitInstantiateExpr(this,t)}clone(){return new e(this.classExpr.clone(),this.args.map(e=>e.clone()),this.type,this.sourceSpan)}},gt=class e extends dt{body;flags;constructor(e,t,n,r){super(null,n,r),this.body=e,this.flags=t}isEquivalent(t){return t instanceof e&&this.body===t.body&&this.flags===t.flags}isConstant(){return!0}visitExpression(e,t){return e.visitRegularExpressionLiteral(this,t)}clone(){return new e(this.body,this.flags,this.sourceSpan)}},_t=class e extends dt{value;constructor(e,t,n,r){super(t,n,r),this.value=e}isEquivalent(t){return t instanceof e&&this.value===t.value}isConstant(){return!0}visitExpression(e,t){return e.visitLiteralExpr(this,t)}clone(){return new e(this.value,this.type,this.sourceSpan)}},vt=class e extends dt{value;typeParams;constructor(e,t,n=null,r,i){super(t,r,i),this.value=e,this.typeParams=n}isEquivalent(t){return t instanceof e&&this.value.name===t.value.name&&this.value.moduleName===t.value.moduleName}isConstant(){return!1}visitExpression(e,t){return e.visitExternalExpr(this,t)}clone(){return new e(this.value,this.type,this.typeParams,this.sourceSpan)}},nee=class e extends dt{condition;falseCase;trueCase;constructor(e,t,n=null,r,i,a){super(r||t.type,i,a),this.condition=e,this.falseCase=n,this.trueCase=t}isEquivalent(t){return t instanceof e&&this.condition.isEquivalent(t.condition)&&this.trueCase.isEquivalent(t.trueCase)&&ct(this.falseCase,t.falseCase)}isConstant(){return!1}visitExpression(e,t){return e.visitConditionalExpr(this,t)}clone(){return new e(this.condition.clone(),this.trueCase.clone(),this.falseCase?.clone(),this.type,this.sourceSpan)}},yt=class e extends dt{operator;rhs;lhs;constructor(e,t,n,r,i,a){super(r||t.type,i,a),this.operator=e,this.rhs=n,this.lhs=t}isEquivalent(t){return t instanceof e&&this.operator===t.operator&&this.lhs.isEquivalent(t.lhs)&&this.rhs.isEquivalent(t.rhs)}isConstant(){return!1}visitExpression(e,t){return e.visitBinaryOperatorExpr(this,t)}clone(){return new e(this.operator,this.lhs.clone(),this.rhs.clone(),this.type,this.sourceSpan)}isAssignment(){let e=this.operator;return e===v.Assign||e===v.AdditionAssignment||e===v.SubtractionAssignment||e===v.MultiplicationAssignment||e===v.DivisionAssignment||e===v.RemainderAssignment||e===v.ExponentiationAssignment||e===v.AndAssignment||e===v.OrAssignment||e===v.NullishCoalesceAssignment}},ree=class e extends dt{receiver;name;isOptional;constructor(e,t,n,r,i,a=!1){super(n,r,i),this.receiver=e,this.name=t,this.isOptional=a}get index(){return this.name}isEquivalent(t){return t instanceof e&&this.receiver.isEquivalent(t.receiver)&&this.name===t.name&&this.isOptional===t.isOptional}isConstant(){return!1}visitExpression(e,t){return e.visitReadPropExpr(this,t)}set(e){return new yt(v.Assign,this.receiver.prop(this.name),e,null,this.sourceSpan)}clone(){return new e(this.receiver.clone(),this.name,this.type,this.sourceSpan,[],this.isOptional)}},iee=class e extends dt{receiver;index;isOptional;constructor(e,t,n,r,i,a=!1){super(n,r,i),this.receiver=e,this.index=t,this.isOptional=a}isEquivalent(t){return t instanceof e&&this.receiver.isEquivalent(t.receiver)&&this.index.isEquivalent(t.index)&&this.isOptional===t.isOptional}isConstant(){return!1}visitExpression(e,t){return e.visitReadKeyExpr(this,t)}set(e){return new yt(v.Assign,this.receiver.key(this.index),e,null,this.sourceSpan)}clone(){return new e(this.receiver.clone(),this.index.clone(),this.type,this.sourceSpan,[],this.isOptional)}},aee=class e extends dt{entries;constructor(e,t,n,r){super(t,n,r),this.entries=e}isConstant(){return this.entries.every(e=>e.isConstant())}isEquivalent(t){return t instanceof e&&ut(this.entries,t.entries)}visitExpression(e,t){return e.visitLiteralArrayExpr(this,t)}clone(){return new e(this.entries.map(e=>e.clone()),this.type,this.sourceSpan)}},oee=class e{expression;constructor(e){this.expression=e}isEquivalent(t){return t instanceof e&&this.expression.isEquivalent(t.expression)}clone(){return new e(this.expression.clone())}isConstant(){return this.expression.isConstant()}},see=class e extends dt{entries;valueType=null;constructor(e,t,n,r){super(t,n,r),this.entries=e,t&&(this.valueType=t.valueType)}isEquivalent(t){return t instanceof e&&ut(this.entries,t.entries)}isConstant(){return this.entries.every(e=>e.isConstant())}visitExpression(e,t){return e.visitLiteralMapExpr(this,t)}clone(){let t=this.entries.map(e=>e.clone());return new e(t,this.type,this.sourceSpan)}},cee=class e extends dt{expression;constructor(e,t,n){super(null,t,n),this.expression=e}isEquivalent(t){return t instanceof e&&this.expression.isEquivalent(t.expression)}isConstant(){return this.expression.isConstant()}visitExpression(e,t){return e.visitSpreadElementExpr(this,t)}clone(){return new e(this.expression.clone(),this.sourceSpan)}},lee=new _t(null,st,null),bt=(function(e){return e[e.None=0]=`None`,e[e.Final=1]=`Final`,e[e.Private=2]=`Private`,e[e.Exported=4]=`Exported`,e[e.Static=8]=`Static`,e})(bt||{}),uee=class{modifiers;sourceSpan;leadingComments;constructor(e=bt.None,t=null,n){this.modifiers=e,this.sourceSpan=t,this.leadingComments=n}hasModifier(e){return(this.modifiers&e)!==0}addLeadingComment(e){this.leadingComments=this.leadingComments??[],this.leadingComments.push(e)}},xt=class e extends uee{expr;constructor(e,t,n){super(bt.None,t,n),this.expr=e}isEquivalent(t){return t instanceof e&&this.expr.isEquivalent(t.expr)}visitStatement(e,t){return e.visitExpressionStmt(this,t)}};(class e{static INSTANCE=new e;keyOf(e){if(e instanceof _t&&typeof e.value==`string`)return`"${e.value}"`;if(e instanceof _t)return String(e.value);if(e instanceof gt)return`/${e.body}/${e.flags??``}`;if(e instanceof aee){let t=[];for(let n of e.entries)t.push(this.keyOf(n));return`[${t.join(`,`)}]`}if(e instanceof see){let t=[];for(let n of e.entries)if(n instanceof oee)t.push(`...`+this.keyOf(n.expression));else{let e=n.key;n.quoted&&(e=`"${e}"`),t.push(e+`:`+this.keyOf(n.value))}return`{${t.join(`,`)}}`}if(e instanceof vt)return`import("${e.value.moduleName}", ${e.value.name})`;if(e instanceof ft)return`read(${e.name})`;if(e instanceof pt)return`typeof(${this.keyOf(e.expr)})`;if(e instanceof cee)return`...${this.keyOf(e.expression)}`;throw Error(`${this.constructor.name} does not handle expressions of type ${e.constructor.name}`)}});var y=`@angular/core`,b=(()=>{class e{static core={name:null,moduleName:y};static namespaceHTML={name:`ɵɵnamespaceHTML`,moduleName:y};static namespaceMathML={name:`ɵɵnamespaceMathML`,moduleName:y};static namespaceSVG={name:`ɵɵnamespaceSVG`,moduleName:y};static element={name:`ɵɵelement`,moduleName:y};static elementStart={name:`ɵɵelementStart`,moduleName:y};static elementEnd={name:`ɵɵelementEnd`,moduleName:y};static foreignComponent={name:`ɵɵforeignComponent`,moduleName:y};static foreignContent={name:`ɵɵforeignContent`,moduleName:y};static foreignContentFn={name:`ɵɵforeignContentFn`,moduleName:y};static domElement={name:`ɵɵdomElement`,moduleName:y};static domElementStart={name:`ɵɵdomElementStart`,moduleName:y};static domElementEnd={name:`ɵɵdomElementEnd`,moduleName:y};static domElementContainer={name:`ɵɵdomElementContainer`,moduleName:y};static domElementContainerStart={name:`ɵɵdomElementContainerStart`,moduleName:y};static domElementContainerEnd={name:`ɵɵdomElementContainerEnd`,moduleName:y};static domTemplate={name:`ɵɵdomTemplate`,moduleName:y};static domListener={name:`ɵɵdomListener`,moduleName:y};static advance={name:`ɵɵadvance`,moduleName:y};static syntheticHostProperty={name:`ɵɵsyntheticHostProperty`,moduleName:y};static syntheticHostListener={name:`ɵɵsyntheticHostListener`,moduleName:y};static attribute={name:`ɵɵattribute`,moduleName:y};static classProp={name:`ɵɵclassProp`,moduleName:y};static elementContainerStart={name:`ɵɵelementContainerStart`,moduleName:y};static elementContainerEnd={name:`ɵɵelementContainerEnd`,moduleName:y};static elementContainer={name:`ɵɵelementContainer`,moduleName:y};static styleMap={name:`ɵɵstyleMap`,moduleName:y};static classMap={name:`ɵɵclassMap`,moduleName:y};static styleProp={name:`ɵɵstyleProp`,moduleName:y};static interpolate={name:`ɵɵinterpolate`,moduleName:y};static interpolate1={name:`ɵɵinterpolate1`,moduleName:y};static interpolate2={name:`ɵɵinterpolate2`,moduleName:y};static interpolate3={name:`ɵɵinterpolate3`,moduleName:y};static interpolate4={name:`ɵɵinterpolate4`,moduleName:y};static interpolate5={name:`ɵɵinterpolate5`,moduleName:y};static interpolate6={name:`ɵɵinterpolate6`,moduleName:y};static interpolate7={name:`ɵɵinterpolate7`,moduleName:y};static interpolate8={name:`ɵɵinterpolate8`,moduleName:y};static interpolateV={name:`ɵɵinterpolateV`,moduleName:y};static nextContext={name:`ɵɵnextContext`,moduleName:y};static resetView={name:`ɵɵresetView`,moduleName:y};static templateCreate={name:`ɵɵtemplate`,moduleName:y};static defer={name:`ɵɵdefer`,moduleName:y};static deferWhen={name:`ɵɵdeferWhen`,moduleName:y};static deferOnIdle={name:`ɵɵdeferOnIdle`,moduleName:y};static deferOnImmediate={name:`ɵɵdeferOnImmediate`,moduleName:y};static deferOnTimer={name:`ɵɵdeferOnTimer`,moduleName:y};static deferOnHover={name:`ɵɵdeferOnHover`,moduleName:y};static deferOnInteraction={name:`ɵɵdeferOnInteraction`,moduleName:y};static deferOnViewport={name:`ɵɵdeferOnViewport`,moduleName:y};static deferPrefetchWhen={name:`ɵɵdeferPrefetchWhen`,moduleName:y};static deferPrefetchOnIdle={name:`ɵɵdeferPrefetchOnIdle`,moduleName:y};static deferPrefetchOnImmediate={name:`ɵɵdeferPrefetchOnImmediate`,moduleName:y};static deferPrefetchOnTimer={name:`ɵɵdeferPrefetchOnTimer`,moduleName:y};static deferPrefetchOnHover={name:`ɵɵdeferPrefetchOnHover`,moduleName:y};static deferPrefetchOnInteraction={name:`ɵɵdeferPrefetchOnInteraction`,moduleName:y};static deferPrefetchOnViewport={name:`ɵɵdeferPrefetchOnViewport`,moduleName:y};static deferHydrateWhen={name:`ɵɵdeferHydrateWhen`,moduleName:y};static deferHydrateNever={name:`ɵɵdeferHydrateNever`,moduleName:y};static deferHydrateOnIdle={name:`ɵɵdeferHydrateOnIdle`,moduleName:y};static deferHydrateOnImmediate={name:`ɵɵdeferHydrateOnImmediate`,moduleName:y};static deferHydrateOnTimer={name:`ɵɵdeferHydrateOnTimer`,moduleName:y};static deferHydrateOnHover={name:`ɵɵdeferHydrateOnHover`,moduleName:y};static deferHydrateOnInteraction={name:`ɵɵdeferHydrateOnInteraction`,moduleName:y};static deferHydrateOnViewport={name:`ɵɵdeferHydrateOnViewport`,moduleName:y};static deferEnableTimerScheduling={name:`ɵɵdeferEnableTimerScheduling`,moduleName:y};static enableIncrementalHydrationRuntime={name:`ɵɵenableIncrementalHydrationRuntime`,moduleName:y};static conditionalCreate={name:`ɵɵconditionalCreate`,moduleName:y};static conditionalBranchCreate={name:`ɵɵconditionalBranchCreate`,moduleName:y};static conditional={name:`ɵɵconditional`,moduleName:y};static repeater={name:`ɵɵrepeater`,moduleName:y};static repeaterCreate={name:`ɵɵrepeaterCreate`,moduleName:y};static repeaterTrackByIndex={name:`ɵɵrepeaterTrackByIndex`,moduleName:y};static repeaterTrackByIdentity={name:`ɵɵrepeaterTrackByIdentity`,moduleName:y};static componentInstance={name:`ɵɵcomponentInstance`,moduleName:y};static text={name:`ɵɵtext`,moduleName:y};static enableBindings={name:`ɵɵenableBindings`,moduleName:y};static disableBindings={name:`ɵɵdisableBindings`,moduleName:y};static getCurrentView={name:`ɵɵgetCurrentView`,moduleName:y};static textInterpolate={name:`ɵɵtextInterpolate`,moduleName:y};static textInterpolate1={name:`ɵɵtextInterpolate1`,moduleName:y};static textInterpolate2={name:`ɵɵtextInterpolate2`,moduleName:y};static textInterpolate3={name:`ɵɵtextInterpolate3`,moduleName:y};static textInterpolate4={name:`ɵɵtextInterpolate4`,moduleName:y};static textInterpolate5={name:`ɵɵtextInterpolate5`,moduleName:y};static textInterpolate6={name:`ɵɵtextInterpolate6`,moduleName:y};static textInterpolate7={name:`ɵɵtextInterpolate7`,moduleName:y};static textInterpolate8={name:`ɵɵtextInterpolate8`,moduleName:y};static textInterpolateV={name:`ɵɵtextInterpolateV`,moduleName:y};static restoreView={name:`ɵɵrestoreView`,moduleName:y};static pureFunction0={name:`ɵɵpureFunction0`,moduleName:y};static pureFunction1={name:`ɵɵpureFunction1`,moduleName:y};static pureFunction2={name:`ɵɵpureFunction2`,moduleName:y};static pureFunction3={name:`ɵɵpureFunction3`,moduleName:y};static pureFunction4={name:`ɵɵpureFunction4`,moduleName:y};static pureFunction5={name:`ɵɵpureFunction5`,moduleName:y};static pureFunction6={name:`ɵɵpureFunction6`,moduleName:y};static pureFunction7={name:`ɵɵpureFunction7`,moduleName:y};static pureFunction8={name:`ɵɵpureFunction8`,moduleName:y};static pureFunctionV={name:`ɵɵpureFunctionV`,moduleName:y};static pipeBind1={name:`ɵɵpipeBind1`,moduleName:y};static pipeBind2={name:`ɵɵpipeBind2`,moduleName:y};static pipeBind3={name:`ɵɵpipeBind3`,moduleName:y};static pipeBind4={name:`ɵɵpipeBind4`,moduleName:y};static pipeBindV={name:`ɵɵpipeBindV`,moduleName:y};static domProperty={name:`ɵɵdomProperty`,moduleName:y};static ariaProperty={name:`ɵɵariaProperty`,moduleName:y};static property={name:`ɵɵproperty`,moduleName:y};static control={name:`ɵɵcontrol`,moduleName:y};static controlCreate={name:`ɵɵcontrolCreate`,moduleName:y};static animationEnterListener={name:`ɵɵanimateEnterListener`,moduleName:y};static animationLeaveListener={name:`ɵɵanimateLeaveListener`,moduleName:y};static animationEnter={name:`ɵɵanimateEnter`,moduleName:y};static animationLeave={name:`ɵɵanimateLeave`,moduleName:y};static i18n={name:`ɵɵi18n`,moduleName:y};static i18nAttributes={name:`ɵɵi18nAttributes`,moduleName:y};static i18nExp={name:`ɵɵi18nExp`,moduleName:y};static i18nStart={name:`ɵɵi18nStart`,moduleName:y};static i18nEnd={name:`ɵɵi18nEnd`,moduleName:y};static i18nApply={name:`ɵɵi18nApply`,moduleName:y};static i18nPostprocess={name:`ɵɵi18nPostprocess`,moduleName:y};static pipe={name:`ɵɵpipe`,moduleName:y};static projection={name:`ɵɵprojection`,moduleName:y};static projectionDef={name:`ɵɵprojectionDef`,moduleName:y};static reference={name:`ɵɵreference`,moduleName:y};static inject={name:`ɵɵinject`,moduleName:y};static injectAttribute={name:`ɵɵinjectAttribute`,moduleName:y};static directiveInject={name:`ɵɵdirectiveInject`,moduleName:y};static invalidFactory={name:`ɵɵinvalidFactory`,moduleName:y};static invalidFactoryDep={name:`ɵɵinvalidFactoryDep`,moduleName:y};static templateRefExtractor={name:`ɵɵtemplateRefExtractor`,moduleName:y};static forwardRef={name:`forwardRef`,moduleName:y};static resolveForwardRef={name:`resolveForwardRef`,moduleName:y};static replaceMetadata={name:`ɵɵreplaceMetadata`,moduleName:y};static getReplaceMetadataURL={name:`ɵɵgetReplaceMetadataURL`,moduleName:y};static ɵɵdefineInjectable={name:`ɵɵdefineInjectable`,moduleName:y};static declareInjectable={name:`ɵɵngDeclareInjectable`,moduleName:y};static InjectableDeclaration={name:`ɵɵInjectableDeclaration`,moduleName:y};static defineService={name:`ɵɵdefineService`,moduleName:y};static declareService={name:`ɵɵngDeclareService`,moduleName:y};static resolveWindow={name:`ɵɵresolveWindow`,moduleName:y};static resolveDocument={name:`ɵɵresolveDocument`,moduleName:y};static resolveBody={name:`ɵɵresolveBody`,moduleName:y};static getComponentDepsFactory={name:`ɵɵgetComponentDepsFactory`,moduleName:y};static defineComponent={name:`ɵɵdefineComponent`,moduleName:y};static declareComponent={name:`ɵɵngDeclareComponent`,moduleName:y};static setComponentScope={name:`ɵɵsetComponentScope`,moduleName:y};static ChangeDetectionStrategy={name:`ChangeDetectionStrategy`,moduleName:y};static ViewEncapsulation={name:`ViewEncapsulation`,moduleName:y};static ComponentDeclaration={name:`ɵɵComponentDeclaration`,moduleName:y};static FactoryDeclaration={name:`ɵɵFactoryDeclaration`,moduleName:y};static declareFactory={name:`ɵɵngDeclareFactory`,moduleName:y};static FactoryTarget={name:`ɵɵFactoryTarget`,moduleName:y};static defineDirective={name:`ɵɵdefineDirective`,moduleName:y};static declareDirective={name:`ɵɵngDeclareDirective`,moduleName:y};static DirectiveDeclaration={name:`ɵɵDirectiveDeclaration`,moduleName:y};static InjectorDef={name:`ɵɵInjectorDef`,moduleName:y};static InjectorDeclaration={name:`ɵɵInjectorDeclaration`,moduleName:y};static defineInjector={name:`ɵɵdefineInjector`,moduleName:y};static declareInjector={name:`ɵɵngDeclareInjector`,moduleName:y};static NgModuleDeclaration={name:`ɵɵNgModuleDeclaration`,moduleName:y};static ModuleWithProviders={name:`ModuleWithProviders`,moduleName:y};static defineNgModule={name:`ɵɵdefineNgModule`,moduleName:y};static declareNgModule={name:`ɵɵngDeclareNgModule`,moduleName:y};static setNgModuleScope={name:`ɵɵsetNgModuleScope`,moduleName:y};static registerNgModuleType={name:`ɵɵregisterNgModuleType`,moduleName:y};static PipeDeclaration={name:`ɵɵPipeDeclaration`,moduleName:y};static definePipe={name:`ɵɵdefinePipe`,moduleName:y};static declarePipe={name:`ɵɵngDeclarePipe`,moduleName:y};static declareClassMetadata={name:`ɵɵngDeclareClassMetadata`,moduleName:y};static declareClassMetadataAsync={name:`ɵɵngDeclareClassMetadataAsync`,moduleName:y};static setClassMetadata={name:`ɵsetClassMetadata`,moduleName:y};static setClassMetadataAsync={name:`ɵsetClassMetadataAsync`,moduleName:y};static setClassDebugInfo={name:`ɵsetClassDebugInfo`,moduleName:y};static queryRefresh={name:`ɵɵqueryRefresh`,moduleName:y};static viewQuery={name:`ɵɵviewQuery`,moduleName:y};static loadQuery={name:`ɵɵloadQuery`,moduleName:y};static contentQuery={name:`ɵɵcontentQuery`,moduleName:y};static viewQuerySignal={name:`ɵɵviewQuerySignal`,moduleName:y};static contentQuerySignal={name:`ɵɵcontentQuerySignal`,moduleName:y};static queryAdvance={name:`ɵɵqueryAdvance`,moduleName:y};static twoWayProperty={name:`ɵɵtwoWayProperty`,moduleName:y};static twoWayBindingSet={name:`ɵɵtwoWayBindingSet`,moduleName:y};static twoWayListener={name:`ɵɵtwoWayListener`,moduleName:y};static declareLet={name:`ɵɵdeclareLet`,moduleName:y};static storeLet={name:`ɵɵstoreLet`,moduleName:y};static readContextLet={name:`ɵɵreadContextLet`,moduleName:y};static arrowFunction={name:`ɵɵarrowFunction`,moduleName:y};static attachSourceLocations={name:`ɵɵattachSourceLocations`,moduleName:y};static NgOnChangesFeature={name:`ɵɵNgOnChangesFeature`,moduleName:y};static ControlFeature={name:`ɵɵControlFeature`,moduleName:y};static InheritDefinitionFeature={name:`ɵɵInheritDefinitionFeature`,moduleName:y};static ProvidersFeature={name:`ɵɵProvidersFeature`,moduleName:y};static HostDirectivesFeature={name:`ɵɵHostDirectivesFeature`,moduleName:y};static ExternalStylesFeature={name:`ɵɵExternalStylesFeature`,moduleName:y};static listener={name:`ɵɵlistener`,moduleName:y};static getInheritedFactory={name:`ɵɵgetInheritedFactory`,moduleName:y};static sanitizeHtml={name:`ɵɵsanitizeHtml`,moduleName:y};static sanitizeStyle={name:`ɵɵsanitizeStyle`,moduleName:y};static validateAttribute={name:`ɵɵvalidateAttribute`,moduleName:y};static sanitizeResourceUrl={name:`ɵɵsanitizeResourceUrl`,moduleName:y};static sanitizeScript={name:`ɵɵsanitizeScript`,moduleName:y};static sanitizeUrl={name:`ɵɵsanitizeUrl`,moduleName:y};static sanitizeUrlOrResourceUrl={name:`ɵɵsanitizeUrlOrResourceUrl`,moduleName:y};static trustConstantHtml={name:`ɵɵtrustConstantHtml`,moduleName:y};static trustConstantResourceUrl={name:`ɵɵtrustConstantResourceUrl`,moduleName:y};static inputDecorator={name:`Input`,moduleName:y};static outputDecorator={name:`Output`,moduleName:y};static viewChildDecorator={name:`ViewChild`,moduleName:y};static viewChildrenDecorator={name:`ViewChildren`,moduleName:y};static contentChildDecorator={name:`ContentChild`,moduleName:y};static contentChildrenDecorator={name:`ContentChildren`,moduleName:y};static InputSignalBrandWriteType={name:`ɵINPUT_SIGNAL_BRAND_WRITE_TYPE`,moduleName:y};static UnwrapDirectiveSignalInputs={name:`ɵUnwrapDirectiveSignalInputs`,moduleName:y};static unwrapWritableSignal={name:`ɵunwrapWritableSignal`,moduleName:y};static assertType={name:`ɵassertType`,moduleName:y}}return e})();v.And,v.Bigger,v.BiggerEquals,v.BitwiseOr,v.BitwiseAnd,v.Divide,v.Assign,v.Equals,v.Identical,v.Lower,v.LowerEquals,v.Minus,v.Modulo,v.Exponentiation,v.Multiply,v.NotEquals,v.NotIdentical,v.NullishCoalesce,v.Or,v.Plus,v.In,v.InstanceOf,v.AdditionAssignment,v.SubtractionAssignment,v.MultiplicationAssignment,v.DivisionAssignment,v.RemainderAssignment,v.ExponentiationAssignment,v.AndAssignment,v.OrAssignment,v.NullishCoalesceAssignment;var St=class{span;sourceSpan;constructor(e,t){this.span=e,this.sourceSpan=t}toString(){return`AST`}},Ct=class extends St{receiver;args;argumentSpan;constructor(e,t,n,r,i){super(e,t),this.receiver=n,this.args=r,this.argumentSpan=i}visit(e,t=null){return e.visitCall(this,t)}},wt=(function(e){return e[e.Property=0]=`Property`,e[e.Attribute=1]=`Attribute`,e[e.Class=2]=`Class`,e[e.Style=3]=`Style`,e[e.LegacyAnimation=4]=`LegacyAnimation`,e[e.TwoWay=5]=`TwoWay`,e[e.Animation=6]=`Animation`,e})(wt||{}),Tt=`(:(where|is)\\()?`,Et=`-shadowcsshost`,Dt=`-shadowcsscontext`,Ot=`[^)(]*`,kt=String.raw`(?:\(${Ot}\)|${Ot})+?`,At=String.raw`(?:\(${kt}\)|${Ot})+?`,jt=String.raw`(?:\((${At})\))`;String.raw`(:nth-[-\w]+)`+jt,Et+jt+``,`${Tt}`,Dt+jt+``;var Mt=(function(e){return e[e.ListEnd=0]=`ListEnd`,e[e.Statement=1]=`Statement`,e[e.Variable=2]=`Variable`,e[e.ElementStart=3]=`ElementStart`,e[e.Element=4]=`Element`,e[e.ForeignComponent=5]=`ForeignComponent`,e[e.Template=6]=`Template`,e[e.ElementEnd=7]=`ElementEnd`,e[e.ContainerStart=8]=`ContainerStart`,e[e.Container=9]=`Container`,e[e.ContainerEnd=10]=`ContainerEnd`,e[e.DisableBindings=11]=`DisableBindings`,e[e.ConditionalCreate=12]=`ConditionalCreate`,e[e.ConditionalBranchCreate=13]=`ConditionalBranchCreate`,e[e.Conditional=14]=`Conditional`,e[e.EnableBindings=15]=`EnableBindings`,e[e.Text=16]=`Text`,e[e.Listener=17]=`Listener`,e[e.InterpolateText=18]=`InterpolateText`,e[e.Binding=19]=`Binding`,e[e.Property=20]=`Property`,e[e.StyleProp=21]=`StyleProp`,e[e.ClassProp=22]=`ClassProp`,e[e.StyleMap=23]=`StyleMap`,e[e.ClassMap=24]=`ClassMap`,e[e.Advance=25]=`Advance`,e[e.Pipe=26]=`Pipe`,e[e.Attribute=27]=`Attribute`,e[e.ExtractedAttribute=28]=`ExtractedAttribute`,e[e.Defer=29]=`Defer`,e[e.DeferOn=30]=`DeferOn`,e[e.DeferWhen=31]=`DeferWhen`,e[e.I18nMessage=32]=`I18nMessage`,e[e.DomProperty=33]=`DomProperty`,e[e.Namespace=34]=`Namespace`,e[e.ProjectionDef=35]=`ProjectionDef`,e[e.EnableIncrementalHydrationRuntime=36]=`EnableIncrementalHydrationRuntime`,e[e.Projection=37]=`Projection`,e[e.Content=38]=`Content`,e[e.RepeaterCreate=39]=`RepeaterCreate`,e[e.Repeater=40]=`Repeater`,e[e.TwoWayProperty=41]=`TwoWayProperty`,e[e.TwoWayListener=42]=`TwoWayListener`,e[e.DeclareLet=43]=`DeclareLet`,e[e.StoreLet=44]=`StoreLet`,e[e.I18nStart=45]=`I18nStart`,e[e.I18n=46]=`I18n`,e[e.I18nEnd=47]=`I18nEnd`,e[e.I18nExpression=48]=`I18nExpression`,e[e.I18nApply=49]=`I18nApply`,e[e.IcuStart=50]=`IcuStart`,e[e.IcuEnd=51]=`IcuEnd`,e[e.IcuPlaceholder=52]=`IcuPlaceholder`,e[e.I18nContext=53]=`I18nContext`,e[e.I18nAttributes=54]=`I18nAttributes`,e[e.SourceLocation=55]=`SourceLocation`,e[e.Animation=56]=`Animation`,e[e.AnimationString=57]=`AnimationString`,e[e.AnimationBinding=58]=`AnimationBinding`,e[e.AnimationListener=59]=`AnimationListener`,e[e.Control=60]=`Control`,e[e.ControlCreate=61]=`ControlCreate`,e})(Mt||{}),Nt=(function(e){return e[e.LexicalRead=0]=`LexicalRead`,e[e.Context=1]=`Context`,e[e.TrackContext=2]=`TrackContext`,e[e.ReadVariable=3]=`ReadVariable`,e[e.NextContext=4]=`NextContext`,e[e.Reference=5]=`Reference`,e[e.StoreLet=6]=`StoreLet`,e[e.ContextLetReference=7]=`ContextLetReference`,e[e.GetCurrentView=8]=`GetCurrentView`,e[e.RestoreView=9]=`RestoreView`,e[e.ResetView=10]=`ResetView`,e[e.PureFunctionExpr=11]=`PureFunctionExpr`,e[e.PureFunctionParameterExpr=12]=`PureFunctionParameterExpr`,e[e.PipeBinding=13]=`PipeBinding`,e[e.PipeBindingVariadic=14]=`PipeBindingVariadic`,e[e.SafePropertyRead=15]=`SafePropertyRead`,e[e.SafeKeyedRead=16]=`SafeKeyedRead`,e[e.SafeNavigationMigration=17]=`SafeNavigationMigration`,e[e.SafeTernaryExpr=18]=`SafeTernaryExpr`,e[e.EmptyExpr=19]=`EmptyExpr`,e[e.AssignTemporaryExpr=20]=`AssignTemporaryExpr`,e[e.ReadTemporaryExpr=21]=`ReadTemporaryExpr`,e[e.SlotLiteralExpr=22]=`SlotLiteralExpr`,e[e.ConditionalCase=23]=`ConditionalCase`,e[e.ConstCollected=24]=`ConstCollected`,e[e.TwoWayBindingSet=25]=`TwoWayBindingSet`,e[e.ForeignContent=26]=`ForeignContent`,e[e.ArrowFunction=27]=`ArrowFunction`,e})(Nt||{}),Pt=(function(e){return e[e.None=0]=`None`,e[e.AlwaysInline=1]=`AlwaysInline`,e})(Pt||{}),Ft=(function(e){return e[e.Context=0]=`Context`,e[e.Identifier=1]=`Identifier`,e[e.SavedView=2]=`SavedView`,e[e.Alias=3]=`Alias`,e})(Ft||{}),It=(function(e){return e[e.Attribute=0]=`Attribute`,e[e.ClassName=1]=`ClassName`,e[e.StyleProperty=2]=`StyleProperty`,e[e.Property=3]=`Property`,e[e.Template=4]=`Template`,e[e.I18n=5]=`I18n`,e[e.LegacyAnimation=6]=`LegacyAnimation`,e[e.TwoWayProperty=7]=`TwoWayProperty`,e[e.Animation=8]=`Animation`,e})(It||{}),Lt=(function(e){return e[e.Creation=0]=`Creation`,e[e.Postproccessing=1]=`Postproccessing`,e})(Lt||{}),Rt=(function(e){return e[e.I18nText=0]=`I18nText`,e[e.I18nAttribute=1]=`I18nAttribute`,e})(Rt||{}),zt=(function(e){return e[e.None=0]=`None`,e[e.ElementTag=1]=`ElementTag`,e[e.TemplateTag=2]=`TemplateTag`,e[e.OpenTag=4]=`OpenTag`,e[e.CloseTag=8]=`CloseTag`,e[e.ExpressionIndex=16]=`ExpressionIndex`,e})(zt||{}),Bt=(function(e){return e[e.HTML=0]=`HTML`,e[e.SVG=1]=`SVG`,e[e.Math=2]=`Math`,e})(Bt||{}),Vt=(function(e){return e[e.Idle=0]=`Idle`,e[e.Immediate=1]=`Immediate`,e[e.Timer=2]=`Timer`,e[e.Hover=3]=`Hover`,e[e.Interaction=4]=`Interaction`,e[e.Viewport=5]=`Viewport`,e[e.Never=6]=`Never`,e})(Vt||{}),Ht=(function(e){return e[e.RootI18n=0]=`RootI18n`,e[e.Icu=1]=`Icu`,e[e.Attr=2]=`Attr`,e})(Ht||{}),Ut=(function(e){return e[e.NgTemplate=0]=`NgTemplate`,e[e.Structural=1]=`Structural`,e[e.Block=2]=`Block`,e})(Ut||{}),Wt=(function(e){return e[e.None=0]=`None`,e[e.InChildOperation=1]=`InChildOperation`,e[e.InArrowFunctionOperation=2]=`InArrowFunctionOperation`,e[e.InSafeNavigationMigration=4]=`InSafeNavigationMigration`,e})(Wt||{});Mt.Element,Mt.ElementStart,Mt.Container,Mt.ContainerStart,Mt.Template,Mt.RepeaterCreate,Mt.ConditionalCreate,Mt.ConditionalBranchCreate;var x=(function(e){return e[e.Tmpl=0]=`Tmpl`,e[e.Host=1]=`Host`,e[e.Both=2]=`Both`,e})(x||{}),Gt=(function(e){return e[e.Full=0]=`Full`,e[e.DomOnly=1]=`DomOnly`,e})(Gt||{});b.ariaProperty,b.ariaProperty,b.attribute,b.attribute,b.classProp,b.classProp,b.element,b.element,b.elementContainer,b.elementContainer,b.elementContainerEnd,b.elementContainerEnd,b.elementContainerStart,b.elementContainerStart,b.elementEnd,b.elementEnd,b.elementStart,b.elementStart,b.domProperty,b.domProperty,b.i18nExp,b.i18nExp,b.listener,b.listener,b.listener,b.listener,b.property,b.property,b.styleProp,b.styleProp,b.syntheticHostListener,b.syntheticHostListener,b.syntheticHostProperty,b.syntheticHostProperty,b.templateCreate,b.templateCreate,b.twoWayProperty,b.twoWayProperty,b.twoWayListener,b.twoWayListener,b.declareLet,b.declareLet,b.conditionalCreate,b.conditionalBranchCreate,b.conditionalBranchCreate,b.conditionalBranchCreate,b.domElement,b.domElement,b.domElementStart,b.domElementStart,b.domElementEnd,b.domElementEnd,b.domElementContainer,b.domElementContainer,b.domElementContainerStart,b.domElementContainerStart,b.domElementContainerEnd,b.domElementContainerEnd,b.domListener,b.domListener,b.domTemplate,b.domTemplate,b.animationEnter,b.animationEnter,b.animationLeave,b.animationLeave,b.animationEnterListener,b.animationEnterListener,b.animationLeaveListener,b.animationLeaveListener,v.And,v.Bigger,v.BiggerEquals,v.BitwiseOr,v.BitwiseAnd,v.Divide,v.Assign,v.Equals,v.Identical,v.Lower,v.LowerEquals,v.Minus,v.Modulo,v.Exponentiation,v.Multiply,v.NotEquals,v.NotIdentical,v.NullishCoalesce,v.Or,v.Plus,v.In,v.InstanceOf,v.AdditionAssignment,v.SubtractionAssignment,v.MultiplicationAssignment,v.DivisionAssignment,v.RemainderAssignment,v.ExponentiationAssignment,v.AndAssignment,v.OrAssignment,v.NullishCoalesceAssignment,Mt.Property,Mt.Property,Mt.Property,Mt.Attribute,Mt.Attribute,Mt.Property,Mt.TwoWayProperty,Mt.Container,Mt.ContainerStart,Mt.ContainerEnd,Mt.Element,Mt.ElementStart,Mt.ElementEnd,Mt.Template,Mt.ElementEnd,Mt.ElementStart,Mt.Element,Mt.ContainerEnd,Mt.ContainerStart,Mt.Container,Mt.I18nEnd,Mt.I18nStart,Mt.I18n,Mt.Pipe;var Kt=` \f +\r \v ᠎ - \u2028\u2029   `;`${Kt}`,`${Kt}`;var qt=(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})(qt||{}),Jt=(function(e){return e[e.Plain=0]=`Plain`,e[e.TemplateLiteralPart=1]=`TemplateLiteralPart`,e[e.TemplateLiteralEnd=2]=`TemplateLiteralEnd`,e})(Jt||{});qt.Character,Mt.StyleMap,Mt.ClassMap,Mt.StyleProp,Mt.ClassProp,Mt.Attribute,Mt.Property,Mt.Attribute,Mt.Control,Mt.DomProperty,Mt.DomProperty,Mt.Attribute,Mt.StyleMap,Mt.ClassMap,Mt.StyleProp,Mt.ClassProp,Mt.Listener,Mt.TwoWayListener,Mt.AnimationListener,Mt.StyleMap,Mt.ClassMap,Mt.StyleProp,Mt.ClassProp,Mt.Property,Mt.TwoWayProperty,Mt.DomProperty,Mt.Attribute,Mt.Animation,Mt.Control,Vt.Idle,b.deferOnIdle,b.deferPrefetchOnIdle,b.deferHydrateOnIdle,Vt.Immediate,b.deferOnImmediate,b.deferPrefetchOnImmediate,b.deferHydrateOnImmediate,Vt.Timer,b.deferOnTimer,b.deferPrefetchOnTimer,b.deferHydrateOnTimer,Vt.Hover,b.deferOnHover,b.deferPrefetchOnHover,b.deferHydrateOnHover,Vt.Interaction,b.deferOnInteraction,b.deferPrefetchOnInteraction,b.deferHydrateOnInteraction,Vt.Viewport,b.deferOnViewport,b.deferPrefetchOnViewport,b.deferHydrateOnViewport,Vt.Never,b.deferHydrateNever,b.deferHydrateNever,b.deferHydrateNever,b.pipeBind1,b.pipeBind2,b.pipeBind3,b.pipeBind4,b.textInterpolate,b.textInterpolate1,b.textInterpolate2,b.textInterpolate3,b.textInterpolate4,b.textInterpolate5,b.textInterpolate6,b.textInterpolate7,b.textInterpolate8,b.textInterpolateV,b.interpolate,b.interpolate1,b.interpolate2,b.interpolate3,b.interpolate4,b.interpolate5,b.interpolate6,b.interpolate7,b.interpolate8,b.interpolateV,b.pureFunction0,b.pureFunction1,b.pureFunction2,b.pureFunction3,b.pureFunction4,b.pureFunction5,b.pureFunction6,b.pureFunction7,b.pureFunction8,b.pureFunctionV,b.resolveWindow,b.resolveDocument,b.resolveBody,nt.HTML,b.sanitizeHtml,nt.RESOURCE_URL,b.sanitizeResourceUrl,nt.SCRIPT,b.sanitizeScript,nt.STYLE,b.sanitizeStyle,nt.URL,b.sanitizeUrl,nt.ATTRIBUTE_NO_BINDING,b.validateAttribute,nt.HTML,b.trustConstantHtml,nt.RESOURCE_URL,b.trustConstantResourceUrl;var Yt=(function(e){return e[e.None=0]=`None`,e[e.ViewContextRead=1]=`ViewContextRead`,e[e.ViewContextWrite=2]=`ViewContextWrite`,e[e.SideEffectful=4]=`SideEffectful`,e})(Yt||{});x.Tmpl,x.Tmpl,x.Both,x.Host,x.Tmpl,x.Tmpl,x.Tmpl,x.Both,x.Both,x.Both,x.Tmpl,x.Both,x.Both,x.Tmpl,x.Both,x.Tmpl,x.Both,x.Both,x.Tmpl,x.Tmpl,x.Tmpl,x.Tmpl,x.Tmpl,x.Both,x.Both,x.Tmpl,x.Tmpl,x.Tmpl,x.Tmpl,x.Both,x.Both,x.Both,x.Tmpl,x.Tmpl,x.Both,x.Tmpl,x.Tmpl,x.Tmpl,x.Both,x.Both,x.Tmpl,x.Both,x.Both,x.Both,x.Both,x.Both,x.Tmpl,x.Tmpl,x.Tmpl,x.Tmpl,x.Tmpl,x.Tmpl,x.Tmpl,x.Tmpl,x.Tmpl,x.Tmpl,x.Tmpl,x.Tmpl,x.Both,x.Tmpl,x.Both,x.Tmpl,x.Both,x.Tmpl,x.Tmpl,x.Tmpl,x.Tmpl,x.Tmpl,x.Tmpl,x.Both,x.Both,x.Both,wt.Property,It.Property,wt.TwoWay,It.TwoWayProperty,wt.Attribute,It.Attribute,wt.Class,It.ClassName,wt.Style,It.StyleProperty,wt.LegacyAnimation,It.LegacyAnimation,wt.Animation,It.Animation;var Xt=`%COMP%`;`${Xt}`,`${Xt}`,class e{static SINGLETON=new e;static veWillInferAnyFor(t){let n=e.SINGLETON;return t instanceof Ct?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 Zt=null,Qt=!1,$t=1,en=null,tn=Symbol(`SIGNAL`);function nn(e){let t=Zt;return Zt=e,t}function rn(){return Zt}var an={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 on(e){if(Qt)throw Error(``);if(Zt===null)return;Zt.consumerOnSignalRead(e);let t=Zt.producersTail;if(t!==void 0&&t.producer===e)return;let n,r=Zt.recomputing;if(r&&(n=t===void 0?Zt.producers:t.nextProducer,n!==void 0&&n.producer===e)){Zt.producersTail=n,n.lastReadVersion=e.version,n.knownValidAtEpoch=$t;return}let i=e.consumersTail;if(i!==void 0&&i.consumer===Zt&&(!r||i.knownValidAtEpoch===$t))return;let a=xn(Zt),o={producer:e,consumer:Zt,nextProducer:n,prevConsumer:void 0,knownValidAtEpoch:$t,lastReadVersion:e.version,nextConsumer:void 0};Zt.producersTail=o,t===void 0?Zt.producers=o:t.nextProducer=o,a&&yn(e,o)}function sn(){$t++}function cn(e){if((!xn(e)||e.dirty)&&(e.dirty||e.lastCleanEpoch!==$t)){if(!e.producerMustRecompute(e)&&!_n(e)){fn(e);return}e.producerRecomputeValue(e),fn(e)}}function ln(e){if(e.consumers===void 0)return;let t=Qt;Qt=!0;try{for(let t=e.consumers;t!==void 0;t=t.nextConsumer){let e=t.consumer;e.dirty||dn(e)}}finally{Qt=t}}function un(){return Zt?.consumerAllowSignalWrites!==!1}function dn(e){e.dirty=!0,ln(e),e.consumerMarkedDirty?.(e)}function fn(e){e.dirty=!1,e.lastCleanEpoch=$t}function pn(e){return e&&mn(e),nn(e)}function mn(e){if(e.producersTail?.knownValidAtEpoch===$t){let t=e.producers;for(;t!==void 0;)t.knownValidAtEpoch=null,t=t.nextProducer}e.producersTail=void 0,e.recomputing=!0}function hn(e,t){nn(t),e&&gn(e)}function gn(e){e.recomputing=!1;let t=e.producersTail,n=t===void 0?e.producers:t.nextProducer;if(n!==void 0){if(xn(e))do n=bn(n);while(n!==void 0);t===void 0?e.producers=void 0:t.nextProducer=void 0}}function _n(e){for(let t=e.producers;t!==void 0;t=t.nextProducer){let e=t.producer,n=t.lastReadVersion;if(n!==e.version||(cn(e),n!==e.version))return!0}return!1}function vn(e){if(xn(e)){let t=e.producers;for(;t!==void 0;)t=bn(t)}e.producers=void 0,e.producersTail=void 0,e.consumers=void 0,e.consumersTail=void 0}function yn(e,t){let n=e.consumersTail,r=xn(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)yn(t.producer,t)}function bn(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,!xn(t)){let e=t.producers;for(;e!==void 0;)e=bn(e)}return n}function xn(e){return e.consumerIsAlwaysLive||e.consumers!==void 0}function Sn(e){en?.(e)}function Cn(e,t){return Object.is(e,t)}function wn(e,t){let n=Object.create(dee);n.computation=e,t!==void 0&&(n.equal=t);let r=()=>{if(cn(n),on(n),n.value===Dn)throw n.error;return n.value};return r[tn]=n,Sn(n),r}var Tn=Symbol(`UNSET`),En=Symbol(`COMPUTING`),Dn=Symbol(`ERRORED`),dee={...an,value:Tn,dirty:!0,error:null,equal:Cn,kind:`computed`,producerMustRecompute(e){return e.value===Tn||e.value===En},producerRecomputeValue(e){if(e.value===En)throw Error(``);let t=e.value;e.value=En;let n=pn(e),r,i=!1;try{r=e.computation(),nn(null),i=t!==Tn&&t!==Dn&&r!==Dn&&e.equal(t,r)}catch(t){r=Dn,e.error=t}finally{hn(e,n)}if(i){e.value=t;return}e.value=r,e.version++}};function fee(){throw Error()}var On=fee;function kn(e){On(e)}function An(e){On=e}var jn=null;function Mn(e,t){let n=Object.create(In);n.value=e,t!==void 0&&(n.equal=t);let r=()=>Nn(n);return r[tn]=n,Sn(n),[r,e=>Pn(n,e),e=>Fn(n,e)]}function Nn(e){return on(e),e.value}function Pn(e,t){un()||kn(e),e.equal(e.value,t)||(e.value=t,Ln(e))}function Fn(e,t){un()||kn(e),Pn(e,t(e.value))}var In={...an,equal:Cn,value:void 0,kind:`signal`};function Ln(e){e.version++,sn(),ln(e),jn?.(e)}var Rn={...an,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,kind:`effect`};function zn(e){if(e.dirty=!1,e.version>0&&!_n(e))return;e.version++;let t=pn(e);try{e.cleanup(),e.fn()}finally{hn(e,t)}}var Bn=void 0;function Vn(){return Bn}function Hn(e){let t=Bn;return Bn=e,t}var Un=Symbol(`NotFound`);function Wn(e){return e===Un||e?.name===`ɵNotFound`}function Gn(e,t,n){let r=Object.create(Jn);r.source=e,r.computation=t,n!=null&&(r.equal=n);let i=()=>{if(cn(r),on(r),r.value===Dn)throw r.error;return r.value};return i[tn]=r,Sn(r),i}function Kn(e,t){cn(e),Pn(e,t),fn(e)}function qn(e,t){if(cn(e),e.value===Dn)throw e.error;Fn(e,t),fn(e)}var Jn={...an,value:Tn,dirty:!0,error:null,equal:Cn,kind:`linkedSignal`,producerMustRecompute(e){return e.value===Tn||e.value===En},producerRecomputeValue(e){if(e.value===En)throw Error(``);let t=e.value;e.value=En;let n=pn(e),r,i=!1;try{let n=e.source(),a=t!==Tn&&t!==Dn,o=a?{source:e.sourceValue,value:t}:void 0;r=e.computation(n,o),e.sourceValue=n,nn(null),i=a&&r!==Dn&&e.equal(t,r)}catch(t){r=Dn,e.error=t}finally{hn(e,n)}if(i){e.value=t;return}e.value=r,e.version++}};function Yn(e){let t=nn(null);try{return e()}finally{nn(t)}}var Xn=function(e,t){return Xn=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])},Xn(e,t)};function Zn(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Class extends value `+String(t)+` is not a constructor or null`);Xn(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function Qn(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 $n(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 tr(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 nr(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 rr?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 ar(e){if(!Symbol.asyncIterator)throw TypeError(`Symbol.asyncIterator is not defined.`);var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof er==`function`?er(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 or(e){return typeof e==`function`}function sr(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 cr=sr(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 ur(e,t){if(e){var n=e.indexOf(t);0<=n&&e.splice(n,1)}}var dr=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=tr(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(sr(c))try{c()}catch(e){i=e instanceof lr?e.errors:[e]}var l=this._finalizers;if(l){this._finalizers=null;try{for(var u=tr(l),d=u.next();!d.done;d=u.next()){var f=d.value;try{mr(f)}catch(e){i??=[],e instanceof lr?i=rr(rr([],nr(i)),nr(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 lr(i)}},e.prototype.add=function(t){if(t&&t!==this){if(this.closed)mr(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)&&ur(t,e)},e.prototype.remove=function(t){var n=this._finalizers;n&&ur(n,t),t instanceof e&&t._removeParent(this)},e.EMPTY=(function(){var t=new e;return t.closed=!0,t})(),e}(),fr=dr.EMPTY;function pr(e){return e instanceof dr||e&&`closed`in e&&sr(e.remove)&&sr(e.add)&&sr(e.unsubscribe)}function mr(e){sr(e)?e():e.unsubscribe()}var hr={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},gr={setTimeout:function(e,t){var n=[...arguments].slice(2),r=gr.delegate;return r?.setTimeout?r.setTimeout.apply(r,rr([e,t],nr(n))):setTimeout.apply(void 0,rr([e,t],nr(n)))},clearTimeout:function(e){return(gr.delegate?.clearTimeout||clearTimeout)(e)},delegate:void 0};function _r(e){gr.setTimeout(function(){var t=hr.onUnhandledError;if(t)t(e);else throw e})}function vr(){}var yr=(function(){return Sr(`C`,void 0,void 0)})();function br(e){return Sr(`E`,void 0,e)}function xr(e){return Sr(`N`,e,void 0)}function Sr(e,t,n){return{kind:e,value:t,error:n}}var Cr=null;function wr(e){if(hr.useDeprecatedSynchronousErrorHandling){var t=!Cr;if(t&&(Cr={errorThrown:!1,error:null}),e(),t){var n=Cr,r=n.errorThrown,i=n.error;if(Cr=null,r)throw i}}else e()}function Tr(e){hr.useDeprecatedSynchronousErrorHandling&&Cr&&(Cr.errorThrown=!0,Cr.error=e)}var Er=function(e){Qn(t,e);function t(t){var n=e.call(this)||this;return n.isStopped=!1,t?(n.destination=t,pr(t)&&t.add(n)):n.destination=Pr,n}return t.create=function(e,t,n){return new Ar(e,t,n)},t.prototype.next=function(e){this.isStopped?Nr(xr(e),this):this._next(e)},t.prototype.error=function(e){this.isStopped?Nr(br(e),this):(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped?Nr(yr,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}(dr),Dr=Function.prototype.bind;function Or(e,t){return Dr.call(e,t)}var kr=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){jr(e)}},e.prototype.error=function(e){var t=this.partialObserver;if(t.error)try{t.error(e)}catch(e){jr(e)}else jr(e)},e.prototype.complete=function(){var e=this.partialObserver;if(e.complete)try{e.complete()}catch(e){jr(e)}},e}(),Ar=function(e){Qn(t,e);function t(t,n,r){var i=e.call(this)||this,a;if(sr(t)||!t)a={next:t??void 0,error:n??void 0,complete:r??void 0};else{var o;i&&hr.useDeprecatedNextContext?(o=Object.create(t),o.unsubscribe=function(){return i.unsubscribe()},a={next:t.next&&Or(t.next,o),error:t.error&&Or(t.error,o),complete:t.complete&&Or(t.complete,o)}):a=t}return i.destination=new kr(a),i}return t}(Er);function jr(e){hr.useDeprecatedSynchronousErrorHandling?Tr(e):_r(e)}function Mr(e){throw e}function Nr(e,t){var n=hr.onStoppedNotification;n&&gr.setTimeout(function(){return n(e,t)})}var Pr={closed:!0,next:vr,error:Mr,complete:vr},Fr=(function(){return typeof Symbol==`function`&&Symbol.observable||`@@observable`})();function Ir(e){return e}function Lr(e){return e.length===0?Ir:e.length===1?e[0]:function(t){return e.reduce(function(e,t){return t(e)},t)}}var Rr=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=Vr(e)?e:new Ar(e,t,n);return wr(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=zr(t),new t(function(t,r){var i=new Ar({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[Fr]=function(){return this},e.prototype.pipe=function(){return Lr([...arguments])(this)},e.prototype.toPromise=function(e){var t=this;return e=zr(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 zr(e){return e??hr.Promise??Promise}function Br(e){return e&&sr(e.next)&&sr(e.error)&&sr(e.complete)}function Vr(e){return e&&e instanceof Er||Br(e)&&pr(e)}function Hr(e){return sr(e?.lift)}function Ur(e){return function(t){if(Hr(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 Wr(e,t,n,r,i){return new Gr(e,t,n,r,i)}var Gr=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}(Er),Kr=cr(function(e){return function(){e(this),this.name=`ObjectUnsubscribedError`,this.message=`object unsubscribed`}}),qr=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 Jr(this,this);return t.operator=e,t},t.prototype._throwIfClosed=function(){if(this.closed)throw new Kr},t.prototype.next=function(e){var t=this;wr(function(){var n,r;if(t._throwIfClosed(),!t.isStopped){t.currentObservers||=Array.from(t.observers);try{for(var i=tr(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;wr(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;wr(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?fr:(this.currentObservers=null,a.push(e),new dr(function(){t.currentObservers=null,ur(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 Rr;return e.source=this,e},t.create=function(e,t){return new Jr(e,t)},t}(Rr),Jr=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)??fr},t}(qr),Yr=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}(qr);function Xr(e){return e[e.length-1]}function Zr(e){return sr(Xr(e))?e.pop():void 0}var Qr=(function(e){return e&&typeof e.length==`number`&&typeof e!=`function`});function $r(e){return sr(e?.then)}function ei(e){return sr(e[Fr])}function ti(e){return Symbol.asyncIterator&&sr(e?.[Symbol.asyncIterator])}function ni(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 ri(){return typeof Symbol!=`function`||!Symbol.iterator?`@@iterator`:Symbol.iterator}var ii=ri();function ai(e){return sr(e?.[ii])}function oi(e){return ar(this,arguments,function(){var t,n,r,i;return er(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,ir(t.read())];case 3:return n=a.sent(),r=n.value,i=n.done,i?[4,ir(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,ir(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 si(e){return sr(e?.getReader)}function ci(e){if(e instanceof Rr)return e;if(e!=null){if(ei(e))return dee(e);if(Qr(e))return fee(e);if($r(e))return pee(e);if(ti(e))return li(e);if(ai(e))return mee(e);if(si(e))return hee(e)}throw ni(e)}function dee(e){return new Rr(function(t){var n=e[Fr]();if(sr(n.subscribe))return n.subscribe(t);throw TypeError(`Provided object does not correctly implement Symbol.observable`)})}function fee(e){return new Rr(function(t){for(var n=0;n=0?n.slice(0,r):n}function Si(e,t){return e?t?`${e} ${t}`:e:t||``}var Ci=yi({__forward_ref__:yi});function wi(e){return e.__forward_ref__=wi,e}function Ti(e){return Ei(e)?e():e}function Ei(e){return typeof e==`function`&&Object.hasOwn(e,Ci)&&e.__forward_ref__===wi}function Di(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Oi(e){return ki(e,Mi)}function ki(e,t){return Object.hasOwn(e,t)&&e[t]||null}function Ai(e){return(e?.[Mi]??null)||null}function ji(e){return e&&Object.hasOwn(e,Ni)?e[Ni]:null}var Mi=yi({ɵprov:yi}),Ni=yi({ɵinj:yi}),Pi=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=Di({token:this,providedIn:t.providedIn||`root`,factory:t.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function Fi(e){return e&&!!e.ɵproviders}var Ii=yi({ɵcmp:yi}),Li=yi({ɵdir:yi}),Ri=yi({ɵpipe:yi}),zi=yi({ɵfac:yi}),Bi=yi({__NG_ELEMENT_ID__:yi}),Vi=yi({__NG_ENV_ID__:yi});function Hi(e){return Gi(e,`@Component`),e[Ii]||null}function Ui(e){return Gi(e,`@Directive`),e[Li]||null}function Wi(e){return Gi(e,`@Pipe`),e[Ri]||null}function Gi(e,t){if(e==null)throw new gi(-919,!1)}function Ki(e){return typeof e==`string`?e:e==null?``:String(e)}var qi=yi({ngErrorCode:yi}),Ji=yi({ngErrorMessage:yi}),Yi=yi({ngTokenPath:yi});function Xi(e,t){return Qi(``,-200,t)}function Zi(e,t){throw new gi(-201,!1)}function Qi(e,t,n){let r=new gi(t,e);return r[qi]=t,r[Ji]=e,n&&(r[Yi]=n),r}function $i(e){return e[qi]}var ea;function ta(){return ea}function na(e){let t=ea;return ea=e,t}function ra(e,t,n){let r=Oi(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;Zi(e,``)}var ia=globalThis,aa={},oa=`__NG_DI_FLAG__`,sa=class{injector;constructor(e){this.injector=e}retrieve(e,t){let n=ua(t)||0;try{return this.injector.get(e,n&8?null:aa,n)}catch(e){if(Gn(e))return e;throw e}}};function ca(e,t=0){let n=Hn();if(n===void 0)throw new gi(-203,!1);if(n===null)return ra(e,void 0,t);{let r=da(t),i=n.retrieve(e,r);if(Gn(i)){if(r.optional)return null;throw i}return i}}function la(e,t=0){return(ta()||ca)(Ti(e),t)}function C(e,t){return la(e,ua(t))}function ua(e){return e===void 0||typeof e==`number`?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function da(e){return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)}}function fa(e){let t=[];for(let n=0;nArray.isArray(e)?_a(e,t):t(e))}function va(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function ya(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function ba(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 Sa(e,t,n){let r=wa(e,t);return r>=0?e[r|1]=n:(r=~r,xa(e,r,t,n)),r}function Ca(e,t){let n=wa(e,t);if(n>=0)return e[n|1]}function wa(e,t){return Ta(e,t,1)}function Ta(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 _a(t,e=>{let t=e;Fa(t,a,[],r)&&(i||=[],i.push(t))}),i!==void 0&&Pa(i,a),n}function Pa(e,t){for(let n=0;n{t(e,r)})}}function Fa(e,t,n,r){if(e=Ti(e),!e)return!1;let i=null,a=ji(e),o=!a&&Hi(e);if(!a&&!o){let t=e.ngModule;if(a=ji(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)Fa(i,t,n,r)}}else if(a){if(a.imports!=null&&!s){r.add(i);let e;try{_a(a.imports,i=>{Fa(i,t,n,r)&&(e||=[],e.push(i))})}finally{}e!==void 0&&Pa(e,t)}if(!s){let e=ma(i)||(()=>new i);t({provide:i,useFactory:e,deps:Da},i),t({provide:Aa,useValue:i,multi:!0},i),t({provide:Oa,useValue:()=>la(i),multi:!0},i)}let o=a.providers;if(o!=null&&!s){let n=e;Ia(o,e=>{t(e,n)})}}else return!1;return i!==e&&e.providers!==void 0}function Ia(e,t){for(let n of e)Fi(n)&&(n=n.ɵproviders),Array.isArray(n)?Ia(n,t):t(n)}var La=yi({provide:String,useValue:yi});function Ra(e){return typeof e==`object`&&!!e&&La in e}function za(e){return!!(e&&e.useExisting)}function Ba(e){return!!(e&&e.useFactory)}function Va(e){return typeof e==`function`}function Ha(e){return!!e.useClass}var Ua=new Pi(``),Wa={},Ga={},Ka=void 0;function qa(){return Ka===void 0&&(Ka=new ja),Ka}var Ja=class{},Ya=class extends Ja{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,ao(e,e=>this.processProvider(e)),this.records.set(ka,to(void 0,this)),r.has(`environment`)&&this.records.set(Ja,to(void 0,this));let i=this.records.get(Ua);i!=null&&typeof i.value==`string`&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(Aa,Da,{self:!0}))}retrieve(e,t){let n=ua(t)||0;try{return this.get(e,aa,n)}catch(e){if(Gn(e))return e;throw e}}destroy(){eo(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 eo(this),this._onDestroyHooks.push(e),()=>this.removeOnDestroy(e)}runInContext(e){eo(this);let t=Un(this),n=na(void 0);try{return e()}finally{Un(t),na(n)}}get(e,t=aa,n){if(eo(this),Object.hasOwn(e,Vi))return e[Vi](this);let r=ua(n),i=Un(this),a=na(void 0);try{if(!(r&4)){let t=this.records.get(e);if(t===void 0){let n=io(e)&&Oi(e);t=n&&this.injectableDefInScope(n)?to(Xa(e),Wa):null,this.records.set(e,t)}if(t!=null)return this.hydrate(e,t,r)}let n=r&2?qa():this.parent;return t=r&8&&t===aa?null:t,n.get(e,t)}catch(e){let t=$i(e);throw t===-200||t===-201?new gi(t,null):e}finally{na(a),Un(i)}}resolveInjectorInitializers(){let e=tn(null),t=Un(this),n=na(void 0);try{let e=this.get(Oa,Da,{self:!0});for(let t of e)t()}finally{Un(t),na(n),tn(e)}}toString(){return`R3Injector[...]`}processProvider(e){e=Ti(e);let t=Va(e)?e:Ti(e&&e.provide),n=Qa(e);if(!Va(e)&&e.multi===!0){let n=this.records.get(t);n||(n=to(void 0,Wa,!0),n.factory=()=>fa(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===Ga)throw Xi(``);return t.value===Wa&&(t.value=Ga,t.value=t.factory(void 0,n)),typeof t.value==`object`&&t.value&&ro(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}finally{tn(r)}}injectableDefInScope(e){if(!e.providedIn)return!1;let t=Ti(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 Xa(e){let t=Oi(e),n=t===null?ma(e):t.factory;if(n!==null)return n;if(e instanceof Pi)throw new gi(-204,!1);if(e instanceof Function)return Za(e);throw new gi(-204,!1)}function Za(e){if(e.length>0)throw new gi(-204,!1);let t=Ai(e);return t===null?()=>new e:()=>t.factory(e)}function Qa(e){return Ra(e)?to(void 0,e.useValue):to($a(e),Wa)}function $a(e,t,n){let r;if(Va(e)){let t=Ti(e);return ma(t)||Xa(t)}if(Ra(e))r=()=>Ti(e.useValue);else if(Ba(e))r=()=>e.useFactory(...fa(e.deps||[]));else if(za(e))r=(t,n)=>la(Ti(e.useExisting),n!==void 0&&n&8?8:void 0);else{let t=Ti(e&&(e.useClass||e.provide));if(no(e))r=()=>new t(...fa(e.deps));else return ma(t)||Xa(t)}return r}function eo(e){if(e.destroyed)throw new gi(-205,!1)}function to(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function no(e){return!!e.deps}function ro(e){return typeof e==`object`&&!!e&&typeof e.ngOnDestroy==`function`}function io(e){return typeof e==`function`||typeof e==`object`&&e.ngMetadataName===`InjectionToken`}function ao(e,t){for(let n of e)Array.isArray(n)?ao(n,t):n&&Fi(n)?ao(n.ɵproviders,t):t(n)}function oo(e,t){let n;e instanceof Ya?(eo(e),n=e):n=new sa(e);let r=Un(n),i=na(void 0);try{return t()}finally{Un(r),na(i)}}function so(){return ta()!==void 0||Hn()!=null}var co=1;function lo(e){return Array.isArray(e)&&typeof e[co]==`object`}function uo(e){return Array.isArray(e)&&e[co]===!0}function fo(e){return!!(e.flags&4)}function po(e){return e.componentOffset>-1}function mo(e){return(e.flags&1)==1}function ho(e){return!!e.template}function go(e){return!!(e[2]&512)}function _o(e){return(e[2]&256)==256}var vo=(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})(vo||{}),yo=`math`;function bo(e){for(;Array.isArray(e);)e=e[0];return e}function xo(e,t){return bo(t[e])}function So(e,t){return bo(t[e.index])}function Co(e,t){return e.data[t]}function wo(e,t){return e[t]}function To(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}function Eo(e,t){let n=t[e];return lo(n)?n:n[0]}function Do(e){return(e[2]&128)==128}function Fee(e){return uo(e[3])}function Oo(e,t){return t==null?null:e[t]}function ko(e){e[17]=0}function Ao(e){e[2]&1024||(e[2]|=1024,Do(e)&&No(e))}function Iee(e,t){for(;e>0;)t=t[14],e--;return t}function jo(e){return!!(e[2]&9216||e[24]?.dirty)}function Mo(e){e[10].changeDetectionScheduler?.notify(8),e[2]&64&&(e[2]|=1024),jo(e)&&No(e)}function No(e){e[10].changeDetectionScheduler?.notify(0);let t=Fo(e);for(;t!==null&&!(t[2]&8192||(t[2]|=8192,!Do(t)));)t=Fo(t)}function Po(e,t){if(_o(e))throw new gi(911,!1);e[21]===null&&(e[21]=[]),e[21].push(t)}function Lee(e,t){if(e[21]===null)return;let n=e[21].indexOf(t);n!==-1&&e[21].splice(n,1)}function Fo(e){let t=e[3];return uo(t)?t[3]:t}function Io(e){return e[7]??=[]}function Lo(e){return e.cleanup??=[]}function Ree(e,t,n,r){let i=Io(t);i.push(n),e.firstCreatePass&&Lo(e).push(r,i.length-1)}var Ro={lFrame:us(null),bindingsEnabled:!0,skipHydrationRootTNode:null},zo=!1;function zee(){return Ro.lFrame.elementDepthCount}function Bee(){Ro.lFrame.elementDepthCount++}function Bo(){Ro.lFrame.elementDepthCount--}function Vo(){return Ro.bindingsEnabled}function Ho(){return Ro.skipHydrationRootTNode!==null}function Uo(e){return Ro.skipHydrationRootTNode===e}function Wo(){Ro.skipHydrationRootTNode=null}function Go(){return Ro.lFrame.lView}function Ko(){return Ro.lFrame.tView}function w(e){return Ro.lFrame.contextLView=e,e[8]}function T(e){return Ro.lFrame.contextLView=null,e}function qo(){let e=Jo();for(;e!==null&&e.type===64;)e=e.parent;return e}function Jo(){return Ro.lFrame.currentTNode}function Vee(){let e=Ro.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}function Yo(e,t){let n=Ro.lFrame;n.currentTNode=e,n.isParent=t}function Xo(){return Ro.lFrame.isParent}function Zo(){Ro.lFrame.isParent=!1}function Qo(){return Ro.lFrame.contextLView}function $o(){return zo}function es(e){let t=zo;return zo=e,t}function ts(){let e=Ro.lFrame,t=e.bindingRootIndex;return t===-1&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function ns(){return Ro.lFrame.bindingIndex}function Hee(e){return Ro.lFrame.bindingIndex=e}function rs(){return Ro.lFrame.bindingIndex++}function is(e){let t=Ro.lFrame,n=t.bindingIndex;return t.bindingIndex+=e,n}function Uee(){return Ro.lFrame.inI18n}function Wee(e,t){let n=Ro.lFrame;n.bindingIndex=n.bindingRootIndex=e,as(t)}function Gee(){return Ro.lFrame.currentDirectiveIndex}function as(e){Ro.lFrame.currentDirectiveIndex=e}function Kee(e){let t=Ro.lFrame.currentDirectiveIndex;return t===-1?null:e[t]}function qee(){return Ro.lFrame.currentQueryIndex}function os(e){Ro.lFrame.currentQueryIndex=e}function Jee(e){let t=e[1];return t.type===2?t.declTNode:t.type===1?e[5]:null}function ss(e,t,n){if(n&4){let r=t,i=e;for(;r=r.parent,r===null&&!(n&1)&&(r=Jee(i),!(r===null||(i=i[14],r.type&10))););if(r===null)return!1;t=r,e=i}let r=Ro.lFrame=ls();return r.currentTNode=t,r.lView=e,!0}function cs(e){let t=ls(),n=e[1];Ro.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function ls(){let e=Ro.lFrame,t=e===null?null:e.child;return t===null?us(e):t}function us(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 ds(){let e=Ro.lFrame;return Ro.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var fs=ds;function ps(){let e=ds();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 ms(e){return(Ro.lFrame.contextLView=Iee(e,Ro.lFrame.contextLView))[8]}function hs(){return Ro.lFrame.selectedIndex}function gs(e){Ro.lFrame.selectedIndex=e}function _s(){let e=Ro.lFrame;return Co(e.tView,e.selectedIndex)}function E(){Ro.lFrame.currentNamespace=`svg`}function vs(){ys()}function ys(){Ro.lFrame.currentNamespace=null}function bs(){return Ro.lFrame.currentNamespace}var xs=!0;function Ss(){return xs}function Cs(e){xs=e}function ws(e,t=null,n=null,r){let i=Ts(e,t,n,r);return i.resolveInjectorInitializers(),i}function Ts(e,t=null,n=null,r,i=new Set){return new Ya([n||Da,Ma(e)],t||qa(),null,i)}var Es=class e{static THROW_IF_NOT_FOUND=aa;static NULL=new ja;static create(e,t){if(Array.isArray(e))return ws({name:``},t,e,``);{let t=e.name??``;return ws({name:t},e.parent,e.providers,t)}}static ɵprov=Di({token:e,providedIn:`any`,factory:()=>la(ka)});static __NG_ELEMENT_ID__=-1},Ds=new Pi(``),Os=class{static __NG_ELEMENT_ID__=As;static __NG_ENV_ID__=e=>e},ks=class extends Os{_lView;constructor(e){super(),this._lView=e}get destroyed(){return _o(this._lView)}onDestroy(e){let t=this._lView;return Po(t,e),()=>Lee(t,e)}};function As(){return new ks(Go())}var js=new Pi(``),Ms=(()=>{class e{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new Yr(!1);debugTaskTracker=C(js,{optional:!0});get hasPendingTasks(){return!this.destroyed&&this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new Rr(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=Di({token:e,providedIn:`root`,factory:()=>new e})}return e})(),Ns=class extends qr{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(e=!1){super(),this.__isAsync=e,so()&&(this.destroyRef=C(Os,{optional:!0})??void 0,this.pendingTasks=C(Ms,{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 dr&&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 Ps(...e){}function Fs(e){let t,n;function r(){e=Ps;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 Is(e){return queueMicrotask(()=>e()),()=>{e=Ps}}var Ls=`isAngularZone`,Rs=`isAngularZone_ID`,zs=0,Bs=class e{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new Ns(!1);onMicrotaskEmpty=new Ns(!1);onStable=new Ns(!1);onError=new Ns(!1);constructor(e){let{enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1,scheduleInRootZone:i=!1}=e;if(typeof Zone>`u`)throw new gi(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,Ws(a)}static isInAngularZone(){return typeof Zone<`u`&&Zone.current.get(Ls)===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new gi(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new gi(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,Vs,Ps,Ps);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)}},Vs={};function Hs(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 Us(e){if(e.isCheckStableRunning||e.callbackScheduled)return;e.callbackScheduled=!0;function t(){Fs(()=>{e.callbackScheduled=!1,Gs(e),e.isCheckStableRunning=!0,Hs(e),e.isCheckStableRunning=!1})}e.scheduleInRootZone?Zone.root.run(()=>{t()}):e._outer.run(()=>{t()}),Gs(e)}function Ws(e){let t=()=>{Us(e)},n=zs++;e._inner=e._inner.fork({name:`angular`,properties:{[Ls]:!0,[Rs]:n,[Rs+n]:!0},onInvokeTask:(n,r,i,a,o,s)=>{if(Ys(s))return n.invokeTask(i,a,o,s);try{return Ks(e),n.invokeTask(i,a,o,s)}finally{(e.shouldCoalesceEventChangeDetection&&a.type===`eventTask`||e.shouldCoalesceRunChangeDetection)&&t(),qs(e)}},onInvoke:(n,r,i,a,o,s,c)=>{try{return Ks(e),n.invoke(i,a,o,s,c)}finally{e.shouldCoalesceRunChangeDetection&&!e.callbackScheduled&&!Xs(s)&&t(),qs(e)}},onHasTask:(t,n,r,i)=>{t.hasTask(r,i),n===r&&(i.change==`microTask`?(e._hasPendingMicrotasks=i.microTask,Gs(e),Hs(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 Gs(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.callbackScheduled===!0)}function Ks(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function qs(e){e._nesting--,Hs(e)}var Js=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new Ns;onMicrotaskEmpty=new Ns;onStable=new Ns;onError=new Ns;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 Ys(e){return Zs(e,`__ignore_ng_zone__`)}function Xs(e){return Zs(e,`__scheduler_tick__`)}function Zs(e,t){return!Array.isArray(e)||e.length!==1?!1:e[0]?.data?.[t]===!0}var Qs=class{_console=console;handleError(e){this._console.error(`ERROR`,e)}},$s=new Pi(``,{factory:()=>{let e=C(Bs),t=C(Ja),n;return r=>{e.runOutsideAngular(()=>{t.destroyed&&!n?setTimeout(()=>{throw r}):(n??=t.get(Qs),n.handleError(r))})}}}),ec={provide:Oa,useValue:()=>{C(Qs,{optional:!0})},multi:!0};function D(e,t){let[n,r,i]=Nn(e,t?.equal),a=n;return a[en],a.set=r,a.update=i,a.asReadonly=tc.bind(a),a}function tc(){let e=this[en];if(e.readonlyFn===void 0){let t=()=>this();t[en]=e,e.readonlyFn=t}return e.readonlyFn}var nc=new Pi(``,{factory:()=>rc}),rc=`ng`,ic=new Pi(``),ac=new Pi(``,{providedIn:`platform`,factory:()=>`unknown`}),oc=new Pi(``,{factory:()=>C(Ds).body?.querySelector(`[ngCspNonce]`)?.getAttribute(`ngCspNonce`)||null}),sc=(()=>{class e{view;node;constructor(e,t){this.view=e,this.node=t}static __NG_ELEMENT_ID__=cc}return e})();function cc(){return new sc(Go(),qo())}var lc=class{},uc=new Pi(``,{factory:()=>!0}),dc=new Pi(``),fc=(()=>{class e{static ɵprov=Di({token:e,providedIn:`root`,factory:()=>new pc})}return e})(),pc=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}},mc=class{[en];constructor(e){this[en]=e}destroy(){this[en].destroy()}};function hc(e,t){let n=t?.injector??C(Es),r=t?.manualCleanup===!0?null:n.get(Os),i,a=n.get(sc,null,{optional:!0}),o=n.get(lc);return a===null?i=bc(e,n.get(fc),o):(i=yc(a.view,o,e),r instanceof ks&&r._lView===a.view&&(r=null)),i.injector=n,r!==null&&(i.onDestroyFns=[r.onDestroy(()=>i.destroy())]),new mc(i)}var gc={...zn,cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let e=es(!1);try{Bn(this)}finally{es(e)}},cleanup(){if(!this.cleanupFns?.length)return;let e=tn(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],tn(e)}}},_c={...gc,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)}},vc={...gc,consumerMarkedDirty(){this.view[2]|=8192,No(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 yc(e,t,n){let r=Object.create(vc);return r.view=e,r.zone=typeof Zone<`u`?Zone.current:null,r.notifier=t,r.fn=xc(r,n),e[23]??=new Set,e[23].add(r),r.consumerMarkedDirty(r),r}function bc(e,t,n){let r=Object.create(_c);return r.fn=xc(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 xc(e,t){return()=>{t(t=>(e.cleanupFns??=[]).push(t))}}function Sc(e){return typeof e==`function`&&e[en]!==void 0}function Cc(e){return Sc(e)&&typeof e.set==`function`}var wc=Symbol(`InputSignalNode#UNSET`),Tc={...Ln,transformFn:void 0,applyValueToInputSignal(e,t){Fn(e,t)}};function Ec(e){return{toString:e}.toString()}var Dc=(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})(Dc||{}),Oc=class{previousValue;currentValue;firstChange;constructor(e,t,n){this.previousValue=e,this.currentValue=t,this.firstChange=n}isFirstChange(){return this.firstChange}};function kc(e,t,n,r){t===null?e[n]=r:t.applyValueToInputSignal(t,r)}var Ac=null,jc=(()=>{Ac=Nc;let e=()=>Nc;return e.ngInherit=!0,e})();function Mc(){return Ac}function Nc(e){return e.type.prototype.ngOnChanges&&(e.setInput=Fc),Pc}function Pc(){let e=Lc(this),t=e?.current;if(t){let n=e.previous;if(n===Ea)e.previous=t;else for(let e in t)n[e]=t[e];e.current=null,this.ngOnChanges(t)}}function Fc(e,t,n,r,i){let a=this.declaredInputs[r],o=Lc(e)||Rc(e,{previous:Ea,current:null}),s=o.current||={},c=o.previous,l=c[a];s[a]=new Oc(l&&l.currentValue,n,c===Ea),kc(e,t,i,n)}var Ic=`__ngSimpleChanges__`;function Lc(e){return Object.hasOwn(e,Ic)&&e[Ic]||null}function Rc(e,t){return e[Ic]=t}var zc=[],Bc=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,qc(o,a)):qc(o,a)}var Yc=-1,Xc=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 Zc(e){return!!(e.flags&8)}function Qc(e){return!!(e.flags&16)}function $c(e,t,n){let r=0;for(;rt){o=a-1;break}}}for(;a>16}function sl(e,t){let n=ol(e),r=t;for(;n>0;)r=r[14],n--;return r}var cl=!0;function ll(e){let t=cl;return cl=e,t}var ul=255,dl=5,fl=0,pl={};function ml(e,t,n){let r;typeof n==`string`?r=n.charCodeAt(0)||0:Object.hasOwn(n,Bi)&&(r=n[Bi]),r??=n[Bi]=fl++;let i=r&ul,a=1<>dl)]|=a}function hl(e,t){let n=_l(e,t);if(n!==-1)return n;let r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,gl(r.data,e),gl(t,null),gl(r.blueprint,null));let i=vl(e,t),a=e.injectorIndex;if(il(i)){let e=al(i),n=sl(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 gl(e,t){e.push(0,0,0,0,0,0,0,0,t)}function _l(e,t){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||t[e.injectorIndex+8]===null?-1:e.injectorIndex}function vl(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=Fl(i),r===null)return Yc;if(n++,i=i[14],r.injectorIndex!==-1)return r.injectorIndex|n<<16}return Yc}function yl(e,t,n){ml(e,t,n)}function bl(e,t,n){if(n&8||e!==void 0)return e;Zi(t,`NodeInjector`)}function xl(e,t,n,r){if(n&8&&r===void 0&&(r=null),!(n&3)){let i=e[9],a=na(void 0);try{return i?i.get(t,r,n&8):ra(t,r,n&8)}finally{na(a)}}return bl(r,t,n)}function Sl(e,t,n,r=0,i){if(e!==null){if(t[2]&2048&&!(r&2)){let i=Pl(e,t,n,r,pl);if(i!==pl)return i}let i=Cl(e,t,n,r,pl);if(i!==pl)return i}return xl(t,n,r,i)}function Cl(e,t,n,r,i){let a=Dl(n);if(typeof a==`function`){if(!ss(t,e,r))return r&1?bl(i,n,r):xl(t,n,r,i);try{let e;if(e=a(r),e==null&&!(r&8))Zi(n);else return e}finally{fs()}}else if(typeof a==`number`){let i=null,o=_l(e,t),s=Yc,c=r&1?t[15][5]:null;for((o===-1||r&4)&&(s=o===-1?vl(e,t):t[o+8],s===Yc||!kl(r,!1)?o=-1:(i=t[1],o=al(s),t=sl(s,t)));o!==-1;){let e=t[1];if(Ol(a,o,e.data)){let e=wl(o,t,n,i,r,c);if(e!==pl)return e}s=t[o+8],s!==Yc&&kl(r,t[1].data[o+8]===c)&&Ol(a,o,t)?(i=e,o=al(s),t=sl(s,t)):o=-1}}return i}function wl(e,t,n,r,i,a){let o=t[1],s=o.data[e+8],c=Tl(s,o,n,r==null?po(s)&&cl:r!=o&&!!(s.type&3),i&1&&a===s);return c===null?pl:El(t,o,c,s,i)}function Tl(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&&ho(e)&&e.type===n)return c}return null}function El(e,t,n,r,i){let a=e[n],o=t.data;if(a instanceof Xc){let s=a;if(s.resolving)throw Xi(``);let c=ll(s.canSeeViewProviders);s.resolving=!0,o[n].type||o[n];let l=s.injectImpl?na(s.injectImpl):null;ss(e,r,0);try{a=e[n]=s.factory(void 0,i,o,e,r),t.firstCreatePass&&n>=r.directiveStart&&Vc(n,o[n],t)}finally{l!==null&&na(l),ll(c),s.resolving=!1,fs()}}return a}function Dl(e){if(typeof e==`string`)return e.charCodeAt(0)||0;let t=Object.hasOwn(e,Bi)?e[Bi]:void 0;return typeof t==`number`?t>=0?t&ul:jl:t}function Ol(e,t,n){let r=1<>dl)]&r)}function kl(e,t){return!(e&2)&&!(e&1&&t)}var Al=class{_tNode;_lView;constructor(e,t){this._tNode=e,this._lView=t}get(e,t,n){return Sl(this._tNode,this._lView,e,ua(n),t)}};function jl(){return new Al(qo(),Go())}function Ml(e){return Ec(()=>{let t=e.prototype.constructor,n=t[zi]||Nl(t),r=Object.prototype,i=Object.getPrototypeOf(e.prototype).constructor;for(;i&&i!==r;){let e=i[zi]||Nl(i);if(e&&e!==n)return e;i=Object.getPrototypeOf(i)}return e=>new e})}function Nl(e){return Ei(e)?()=>{let t=Nl(Ti(e));return t&&t()}:ma(e)}function Pl(e,t,n,r,i){let a=e,o=t;for(;a!==null&&o!==null&&o[2]&2048&&!go(o);){let e=Cl(a,o,n,r|2,pl);if(e!==pl)return e;r&=-5;let t=a.parent;if(!t){let e=o[20];if(e){let t=e.get(n,pl,r);if(t!==pl)return t}t=Fl(o),o=o[14]}a=t}return i}function Fl(e){let t=e[1],n=t.type;return n===2?t.declTNode:n===1?e[5]:null}function Il(e){return{token:e.token,providedIn:e.autoProvided===!1?null:`root`,factory:e.factory,value:void 0}}function Ll(){return Rl(qo(),Go())}function Rl(e,t){return new zl(So(e,t))}var zl=(()=>{class e{nativeElement;constructor(e){this.nativeElement=e}static __NG_ELEMENT_ID__=Ll}return e})();function Bl(e){return e instanceof zl?e.nativeElement:e}function Vl(){return this._results[Symbol.iterator]()}var Hl=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 qr}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=ga(e);(this._changesDetected=!ha(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]=Vl};function Ul(e){return(e.flags&128)==128}var Wl=(function(e){return e[e.OnPush=0]=`OnPush`,e[e.Eager=1]=`Eager`,e[e.Default=1]=`Default`,e})(Wl||{}),Gl=new Map,Kl=0;function ql(){return Kl++}function Jl(e){Gl.set(e[19],e)}function Yl(e){Gl.delete(e[19])}var Xl=`__ngContext__`;function Zl(e,t){lo(t)?(e[Xl]=t[19],Jl(t)):e[Xl]=t}function Ql(e){return eu(e[12])}function $l(e){return eu(e[4])}function eu(e){for(;e!==null&&!uo(e);)e=e[4];return e}var tu=void 0;function nu(e){tu=e}function ru(){if(tu!==void 0)return tu;if(typeof document<`u`)return document;throw new gi(210,!1)}var iu=!1,au=new Pi(``,{factory:()=>iu}),ou=new WeakMap;function su(e,t){if(typeof e!=`object`||!e)return;let n=ou.get(e);n||(n=new WeakSet,ou.set(e,n)),n.add(t)}function cu(e){return(e.flags&32)==32}var lu=()=>null;function uu(e,t,n=!1){return lu(e,t,n)}function du(e,t){let n=e.contentQueries;if(n!==null){let r=tn(null);try{for(let r=0;r|^->||--!>|)/g,Cu=`​$1​`;function wu(e){return e.replace(xu,e=>e.replace(Su,Cu))}function Tu(e,t){return e.createText(t)}function Eu(e,t,n){e.setValue(t,n)}function Yee(e,t){return e.createComment(wu(t))}function Du(e,t,n){return e.createElement(t,n)}function Ou(e,t,n,r,i){e.insertBefore(t,n,r,i)}function ku(e,t,n){e.appendChild(t,n)}function Au(e,t,n,r,i){r===null?ku(e,t,n):Ou(e,t,n,r,i)}function ju(e,t,n,r){e.removeChild(null,t,n,r)}function Xee(e,t,n){e.setAttribute(t,`style`,n)}function Zee(e,t,n){n===``?e.removeAttribute(t,`class`):e.setAttribute(t,`class`,n)}function Mu(e,t,n){let{mergedAttrs:r,classes:i,styles:a}=n;r!==null&&$c(e,t,r),i!==null&&Zee(e,t,i),a!==null&&Xee(e,t,a)}function Nu(e){let t=Qee();return t?t.sanitize(vo.URL,e)||``:_u(e,`URL`)?gu(e):bu(Ki(e))}function Qee(){let e=Go();return e&&e[10].sanitizer}function Pu(e){return e.ownerDocument.defaultView}function Fu(e){return e.ownerDocument}function $ee(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 Iu=`ng-template`;function ete(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(Ru(r))return!1;o=!0}}}}}return Ru(r)||o}function Ru(e){return!(e&1)}function rte(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!==``&&!Ru(o)&&(t+=Bu(a,i),i=``),r=o,a||=!Ru(r);n++}return i!==``&&(t+=Bu(a,i)),t}function lte(e){return e.map(cte).join(`,`)}function ute(e){let t=[],n=[],r=1,i=2;for(;r!1});function Wu(e){if(!e)return 0;let t=e.toLowerCase().indexOf(`ms`)>-1?1:1e3;return parseFloat(e)*t}function Gu(e,t){return e.getPropertyValue(t).split(`,`).map(e=>e.trim())}function pte(e){let t=Gu(e,`transition-property`),n=Gu(e,`transition-duration`),r=Gu(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 mte(e){let t=Gu(e,`animation-name`),n=Gu(e,`animation-delay`),r=Gu(e,`animation-duration`),i=Gu(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 Ku(e,t){return e!==void 0&&e.duration>t.duration}function qu(e){return(e.animationName!=null||e.propertyName!=null)&&e.duration>0}function Ju(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 hte(e,t){let n=getComputedStyle(e),r=mte(n),i=pte(n),a=r.duration>i.duration?r:i;Ku(t.get(e),a)||qu(a)&&t.set(e,a)}function gte(e,t,n){if(!n)return;let r=e.getAnimations();return r.length===0?hte(e,t):_te(e,t,r)}function _te(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=Ju(e)??0,n,i;e.animationName?i=e.animationName:n=e.transitionProperty,t>=r.duration&&(r={animationName:i,propertyName:n,duration:t})}Ku(t.get(e),r)||qu(r)&&t.set(e,r)}var Yu=new Set,vte=!1,yte=1,Xu=typeof document<`u`&&typeof document?.documentElement?.getAnimations==`function`;function bte(e){return e[9].get(fte,vte)}function xte(e,t,n){let r=Qu.get(e);if(r){for(let e of t)r.classList.push(e);for(let e of n)r.cleanupFns.push(e)}else Qu.set(e,{classList:t,cleanupFns:n})}function Zu(e){let t=Qu.get(e);if(t){for(let e of t.cleanupFns)e();Qu.delete(e)}$u.delete(e)}var Qu=new WeakMap,$u=new WeakMap,ed=new WeakMap;function td(e){return e?e[14]??e:null}var nd=new WeakSet;function Ste(e,t,n){let r=ed.get(e);if(!r||r.length===0)return;let i=t.parentNode,a=t.previousSibling,o=td(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),nd.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 Cte(e,t,n){let r=td(n),i=ed.get(e);i?i.some(e=>e.el===t)||i.push({el:t,declarationView:r}):ed.set(e,[{el:t,declarationView:r}])}function rd(e){let t=e[26]??={};return t.enter??=new Map}function wte(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 id(e){return e.composedPath?e.composedPath()[0]:e.target}function ad(e,t){let n=$u.get(t);if(n===void 0)return!0;if(t!==id(e))return!1;let r=e.animation;if(r){let e=Ju(r);if(e!==void 0&&e+yte{class e{impl=null;execute(){this.impl?.execute()}static ɵprov=Di({token:e,providedIn:`root`,factory:()=>new e})}return e})(),dd=[0,1,2,3],fd=(()=>{class e{ngZone=C(Bs);scheduler=C(lc);errorHandler=C(Qs,{optional:!0});sequences=new Set;deferredRegistrations=new Set;executing=!1;constructor(){C(sd,{optional:!0})}execute(){let e=this.sequences.size>0;e&&Bc(Dc.AfterRenderHooksStart),this.executing=!0;for(let e of dd)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&&Bc(Dc.AfterRenderHooksEnd)}register(e){let{view:t}=e;t===void 0?this.executing?this.deferredRegistrations.add(e):this.addSequence(e):((t[25]??=[]).push(e),No(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(od.AFTER_NEXT_RENDER,e):e()}static ɵprov=Di({token:e,providedIn:`root`,factory:()=>new e})}return e})(),pd=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 md(e,t){let n=t?.injector??C(Es);return ld(`NgAfterNextRender`),Dte(e,n,t,!0)}function Ete(e){return e instanceof Function?[void 0,void 0,e,void 0]:[e.earlyRead,e.write,e.mixedReadWrite,e.read]}function Dte(e,t,n,r){let i=t.get(ud);i.impl??=t.get(fd);let a=t.get(sd,null,{optional:!0}),o=n?.manualCleanup===!0?null:t.get(Os),s=t.get(sc,null,{optional:!0}),c=new pd(i.impl,Ete(e),s?.view,r,o,a?.snapshot(null));return i.impl.register(c),c}var hd=new Pi(``,{factory:()=>{let e=C(Ja),t=new Set;return e.onDestroy(()=>t.clear()),{queue:t,isScheduled:!1,scheduler:null,injector:e}}});function gd(e,t,n){let r=e.get(hd);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 Ote(e,t){let n=e.get(hd);if(Array.isArray(t))for(let e of t)n.queue.delete(e);else n.queue.delete(t)}function kte(e,t){let n=e.get(hd);if(t.detachedLeaveAnimationFns){for(let e of t.detachedLeaveAnimationFns)n.queue.delete(e);t.detachedLeaveAnimationFns=void 0}}function Ate(e){let t=e.get(hd);t.isScheduled||=(md(()=>{t.isScheduled=!1;for(let e of t.queue)e();t.queue.clear()},{injector:t.injector}),!0)}function jte(e){let t=e.get(hd);t.scheduler=Ate,t.scheduler(e)}function _d(e,t){for(let[n,r]of t)gd(e,r.animateFns)}function vd(e,t,n,r){let i=e?.[26]?.enter;t!==null&&i&&i.has(n.index)&&_d(r,i)}function yd(e,t,n,r){try{n.get(ka)}catch{return r(!1)}let i=e?.[26];i?.enter?.has(t.index)&&Ote(n,i.enter.get(t.index).animateFns);let a=Mte(e,t,i);if(a.size===0){let n=!1;if(e){let r=[];bd(e,t,r),n=r.length>0}if(!n)return r(!1)}e&&Yu.add(e[19]),gd(n,()=>Nte(e,t,i||void 0,a,r),i||void 0)}function Mte(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 Nte(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&&bd(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),Fte(e,t.running,i)}else Promise.allSettled(a).then(()=>{e&&Yu.delete(e[19]),i(!0)})}else e&&Yu.delete(e[19]),i(!1)}function bd(e,t,n){if(t.type&12){let r=e[t.index];if(uo(r))for(let e=10;e{e[26]?.running===t&&(e[26].running=void 0,Yu.delete(e[19])),n(!0)})}function xd(e,t,n,r,i,a,o,s){if(i!=null){let c,l=!1;uo(i)?c=i:lo(i)&&(l=!0,i=i[0]);let u=bo(i);e===0&&r!==null?(vd(s,r,a,n),o==null?ku(t,r,u):Ou(t,r,u,o||null,!0)):e===1&&r!==null?(vd(s,r,a,n),Ou(t,r,u,o||null,!0),Ste(a,u,s)):e===2?(s?.[26]?.leave?.has(a.index)&&Cte(a,u,s),nd.delete(u),yd(s,a,n,e=>{if(nd.has(u)){nd.delete(u);return}ju(t,u,l,e)})):e===3&&(nd.delete(u),yd(s,a,n,()=>{t.destroyNode(u)})),c!=null&&Ud(t,e,n,c,a,r,o)}}function Ite(e,t){Sd(e,t),t[0]=null,t[5]=null}function Lte(e,t,n,r,i,a){r[0]=i,r[5]=t,zd(e,r,n,1,i,a)}function Sd(e,t){t[10].changeDetectionScheduler?.notify(9),zd(e,t,t[11],2,null,null)}function Cd(e){let t=e[12];if(!t)return Ed(e[1],e);for(;t;){let n=null;if(lo(t))n=t[12];else{let e=t[10];e&&(n=e)}if(!n){for(;t&&!t[4]&&t!==e;)lo(t)&&Ed(t[1],t),t=t[3];t===null&&(t=e),lo(t)&&Ed(t[1],t),n=t&&t[4]}t=n}}function wd(e,t){let n=e[9],r=n.indexOf(t);n.splice(r,1)}function Td(e,t){if(_o(t))return;let n=t[11];n.destroyNode&&zd(e,t,n,3,null,null),Cd(t)}function Ed(e,t){if(_o(t))return;let n=tn(null);try{t[2]&=-129,t[2]|=256,t[24]&&_n(t[24]),Od(e,t),Dd(e,t),t[1].type===1&&t[11].destroy();let n=t[16];if(n!==null&&uo(t[3])){n!==t[3]&&wd(n,t);let r=t[18];r!==null&&r.detachView(e)}Yl(t)}finally{tn(n)}}function Dd(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&&$d(e,t,27,!1),Bc(o?Dc.TemplateUpdateStart:Dc.TemplateCreateStart,i,n),n(r,i)}finally{gs(a),Bc(o?Dc.TemplateUpdateEnd:Dc.TemplateCreateEnd,i,n)}}function rf(e,t,n){df(e,t,n),(n.flags&64)==64&&ff(e,t,n)}function af(e,t,n=So){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];tf(o,n[i],s,a),l=!0}else if(i>c)break}}return o!==null&&Object.hasOwn(r.inputs,i)&&(tf(r,n[o],i,a),l=!0),l}function Cf(e,t){let n=Eo(t,e),r=n[1];wf(r,n);let i=n[0];i!==null&&n[6]===null&&(n[6]=uu(i,n[9])),Bc(Dc.ComponentStart);try{Tf(r,n,n[8])}finally{Bc(Dc.ComponentEnd,n[8])}}function wf(e,t){for(let n=t.length;n{No(e.lView)},consumerOnSignalRead(){this.lView[24]=this}};function Lf(e){let t=e[24]??Object.create(Rf);return t.lView=e,t}var Rf={...rn,consumerIsAlwaysLive:!0,kind:`template`,consumerMarkedDirty:e=>{let t=Fo(e.lView);for(;t&&!zf(t[1]);)t=Fo(t);t&&Ao(t)},consumerOnSignalRead(){this.lView[24]=this}};function zf(e){return e.type!==2}function Bf(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 Vf=100;function Hf(e,t=0){let n=e[10].rendererFactory;n.begin?.();try{Uf(e,t)}finally{n.end?.()}}function Uf(e,t){let n=$o();try{es(!0),Yf(e,t);let n=0;for(;jo(e);){if(n===Vf)throw new gi(103,!1);n++,Yf(e,1)}}finally{es(n)}}function Wf(e,t,n,r){if(_o(t))return;let i=t[2];cs(t);let a=!0,o=null,s=null;zf(e)?(s=Nf(t),o=fn(s)):nn()===null?(a=!1,s=Lf(t),o=fn(s)):t[24]&&=(_n(t[24]),null);try{ko(t),Hee(e.bindingStartIndex),n!==null&&nf(e,t,n,2,r);let a=(i&3)==3;if(a){let n=e.preOrderCheckHooks;n!==null&&Uc(t,n,null)}else{let n=e.preOrderHooks;n!==null&&Wc(t,n,0,null),Gc(t,0)}if(Kf(t),Bf(t),Gf(t,0),e.contentQueries!==null&&du(e,t),a){let n=e.contentCheckHooks;n!==null&&Uc(t,n)}else{let n=e.contentHooks;n!==null&&Wc(t,n,1),Gc(t,1)}Zf(e,t);let o=e.components;o!==null&&Xf(t,o,0);let s=e.viewQuery;if(s!==null&&fu(2,s,r),a){let n=e.viewCheckHooks;n!==null&&Uc(t,n)}else{let n=e.viewHooks;n!==null&&Wc(t,n,2),Gc(t,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),t[22]){for(let e of t[22])e();t[22]=null}jf(t),t[2]&=-73}catch(e){throw No(t),e}finally{s!==null&&(mn(s,o),a&&Ff(s)),ps()}}function Gf(e,t){for(let n=Ql(e);n!==null;n=$l(n))for(let e=10;e0&&(e[n-1][4]=r[4]);let a=ya(e,10+t);Ite(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 ip(e,t,n,r){let i=10+r,a=n.length;r>0&&(n[i-1][4]=t),r-1&&(rp(e,n),ya(t,n))}this._attachedToViewContainer=!1}Td(this._lView[1],this._lView)}onDestroy(e){Po(this._lView,e)}markForCheck(){Qf(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[2]&=-129}reattach(){Mo(this._lView),this._lView[2]|=128}detectChanges(){this._lView[2]|=1024,Hf(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new gi(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let e=go(this._lView),t=this._lView[16];t!==null&&!e&&wd(t,this._lView),Sd(this._lView[1],this._lView)}attachToAppRef(e){if(this._attachedToViewContainer)throw new gi(902,!1);this._appRef=e;let t=go(this._lView),n=this._lView[16];n!==null&&!t&&ap(n,this._lView),Mo(this._lView)}},sp=(()=>{class e{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=cp;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 op(Df(this._declarationLView,this._declarationTContainer,e,{embeddedViewInjector:t,dehydratedView:n}))}}return e})();function cp(){return lp(qo(),Go())}function lp(e,t){return e.type&4?new sp(t,e,Rl(e,t)):null}function up(e,t,n,r,i){let a=e.data[t];if(a===null)a=dp(e,t,n,r,i),Uee()&&(a.flags|=32);else if(a.type&64){a.type=n,a.value=r,a.attrs=i;let e=Vee();a.injectorIndex=e===null?-1:e.injectorIndex}return Yo(a,!0),a}function dp(e,t,n,r,i){let a=Jo(),o=Xo(),s=o?a:a&&a.parent,c=e.data[t]=pp(e,s,n,t,r,i);return fp(e,c,a,o),c}function fp(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 pp(e,t,n,r,i,a){let o=t?t.injectorIndex:-1,s=0;return Ho()&&(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:bs(),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 mp(e){let t=e[6]??[],n=e[3][11],r=[];for(let e of t)e.data.di===void 0?hp(e,n):r.push(e);e[6]=r}function hp(e,t){let n=0,r=e.firstChild;if(r){let i=e.data.r;for(;nnull,_p=()=>null;function vp(e,t){return gp(e,t)}function yp(e,t,n){return _p(e,t,n)}var bp=class{},xp=class{},Sp=class{destroyNode=null;static __NG_ELEMENT_ID__=()=>Cp()};function Cp(){let e=Go(),t=Eo(qo().index,e);return(lo(t)?t:e)[11]}var wp=(()=>{class e{static ɵprov=Di({token:e,providedIn:`root`,factory:()=>null})}return e})();function Tp(e){return e.debugInfo?.className||e.type.name||null}var Ep={},Dp=class{injector;parentInjector;constructor(e,t){this.injector=e,this.parentInjector=t}get(e,t,n){let r=this.injector.get(e,Ep,n);return r!==Ep||t===Ep?r:this.parentInjector.get(e,t,n)}};function Op(e,t,n){return e[t]=n}function kp(e,t){return e[t]}function Ap(e,t,n){if(n===Vu)return!1;let r=e[t];return!Object.is(r,n)&&(e[t]=n,!0)}function jp(e,t,n,r){let i=Ap(e,t,n);return Ap(e,t+1,r)||i}function Mp(e,t,n,r,i){let a=jp(e,t,n,r);return Ap(e,t+2,i)||a}function Np(e,t,n,r,i,a){let o=jp(e,t,n,r);return jp(e,t+2,i,a)||o}function Pp(e,t,n){return function r(i){let a=r.__ngNativeEl__;a!==void 0&&su(i,a),Qf(po(e)?Eo(e.index,t):t,5);let o=t[8],s=Fp(t,o,n,i),c=r.__ngNextListenerFn__;for(;c;)s=Fp(t,o,c,i)&&s,c=c.__ngNextListenerFn__;return s}}function Fp(e,t,n,r){let i=tn(null);try{return Bc(Dc.OutputStart,t,n),n(r)!==!1}catch(t){return bf(e,t),!1}finally{Bc(Dc.OutputEnd,t,n),tn(i)}}function Ip(e,t,n,r,i,a,o,s){let c=mo(e),l=!1,u=null;if(!r&&c&&(u=Rp(t,n,a,e.index)),u!==null){let e=u.__ngLastListenerFn__||u;e.__ngNextListenerFn__=o,u.__ngLastListenerFn__=o,l=!0}else{let o=So(e,n),c=r?r(o):o;r||(s.__ngNativeEl__=o);let l=i.listen(c,a,s);Lp(a)||zp(r?t=>r(bo(t[e.index])):e.index,t,n,a,s,l,!1)}return l}function Lp(e){return e.startsWith(`animation`)||e.startsWith(`transition`)}function Rp(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 zp(e,t,n,r,i,a,o){let s=t.firstCreatePass?Lo(t):null,c=Io(n),l=c.length;c.push(i,a),s&&s.push(r,e,l,(l+1)*(o?-1:1))}function Bp(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,Vp(e,t,l,n[a+1],r,i);else if(l>s)break}}return Object.hasOwn(n.outputs,r)&&(c=!0,Vp(e,t,a,r,r,i)),c}function Vp(e,t,n,r,i,a){let o=t[n],s=t[1],c=o[s.data[n].outputs[r]].subscribe(a);zp(e.index,s,t,i,a,c,!0)}function Hp(){Up()}function Up(){let e=Go(),t=Ko(),n=qo();if(t.firstCreatePass&&Yp(t,n),n.controlDirectiveIndex===-1)return;ld(`NgSignalForms`);let r=e[n.controlDirectiveIndex];t.data[n.controlDirectiveIndex].controlDef.create(r,new Kp(e,t,n))}function Wp(){Gp()}function Gp(){let e=Go(),t=Ko(),n=_s();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 So(this.tNode,this.lView)}get descriptor(){return`<${this.tNode.value}>`}listenToCustomControlOutput(e,t){let n=this.tView.data[this.tNode.customControlIndex];Bp(this.tNode,this.lView,n,e,Pp(this.tNode,this.lView,t))}listenToCustomControlModel(e){let t=this.tNode.flags&1024?`valueChange`:`checkedChange`,n=this.tView.data[this.tNode.customControlIndex];Bp(this.tNode,this.lView,n,t,Pp(this.tNode,this.lView,e))}listenToDom(e,t){Ip(this.tNode,this.tView,this.lView,void 0,this.lView[11],e,t,Pp(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)))&&(tf(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=qp(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}Xp(e,t)}function Xp(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 Zp(e,t){return Qp(e,t)&&$p(e,t+`Change`)}function Qp(e,t){return t in e.inputs}function $p(e,t){return t in e.outputs}var em=Symbol(`BINDING`),tm=new Pi(``);function nm(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 gm(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&ef.SignalBased)!==0};return i&&(a.transform=i),a})}function wm(e){return Object.keys(e).map(t=>({propName:e[t],templateName:t}))}function Tm(e,t,n){let r=t instanceof Ja?t:t?.injector;return r&&e.getStandaloneInjector!==null&&(r=e.getStandaloneInjector(r)||r),r?new Dp(n,r):n}function Em(e){let t=e.get(xp,null);if(t===null)throw new gi(407,!1);return{rendererFactory:t,sanitizer:e.get(wp,null),changeDetectionScheduler:e.get(lc,null),ngReflect:!1,tracingService:e.get(sd,null,{optional:!0})}}function Dm(e,t,n){let r=km(e);return Du(t,r,r===`svg`?`svg`:r===`math`?yo:n)}function Om(e){if((e&&`localName`in e&&typeof e.localName==`string`?e.localName:e?.tagName)?.toLowerCase()===`script`)throw new gi(905,!1)}function km(e){return(e.selectors[0][0]||`div`).toLowerCase()}var Am=class{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=Cm(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=wm(this.componentDef.outputs),this.cachedOutputs}constructor(e,t){this.componentDef=e,this.ngModule=t,this.componentType=e.type,this.selector=lte(e.selectors),this.ngContentSelectors=e.ngContentSelectors??[],this.isBoundToModule=!!t}create(e,t,n,r,i,a,o){Bc(Dc.DynamicComponentStart);let s=tn(null);try{let s=this.componentDef,c=Tm(s,r||this.ngModule,e),l=Em(c),u=l.tracingService;return u&&u.componentCreate?u.componentCreate(Tp(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=jm(r,s,a,i),l=e.rendererFactory.createRenderer(null,s),u=r?of(l,r,s.encapsulation,t):Dm(s,l,o??null);Om(u);let d=t.get(tm,null),f=Mm(u,()=>t.get(Ds,null)??ru());d&&d.addHost(f);let p=a?.some(Pm)||i?.some(e=>typeof e!=`function`&&e.bindings.some(Pm)),m=Jd(null,c,null,512|Xd(s),null,null,e,l,t,null,uu(u,t,!0));d&&xm&&f instanceof ShadowRoot&&Po(m,()=>{d.removeHost(f)}),m[27]=u,cs(m);let h=null;try{let e=vm(27,m,2,`#host`,()=>c.directiveRegistry,!0,0);Mu(l,u,e),Zl(u,m),rf(c,m,e),pu(c,e,m),ym(c,e),n!==void 0&&Im(e,this.ngContentSelectors,n),h=Eo(e.index,m),m[8]=h[8],Tf(c,m,null)}catch(e){throw h!==null&&Yl(h),Yl(m),e}finally{Bc(Dc.DynamicComponentEnd),ps()}return new Fm(this.componentType,m,!!p)}};function jm(e,t,n,r){let i=e?[`ng-version`,`22.1.7`]:ute(t.selectors[0]),a=null,o=null,s=0;if(n)for(let e of n)s+=e[em].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 Pm(e){let t=e[em].kind;return t===`input`||t===`twoWay`}var Fm=class extends bp{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(e,t,n){super(),this._rootLView=t,this._hasInputBindings=n,this._tNode=Co(t[1],27),this.location=Rl(this._tNode,t),this.instance=Eo(this._tNode.index,t)[8],this.hostView=this.changeDetectorRef=new op(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;xf(n,r[1],r,e,t),this.previousInputValues.set(e,t),Qf(Eo(n.index,r),1)}get injector(){return new Al(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(e){this.hostView.onDestroy(e)}};function Im(e,t,n){let r=e.projection=[];for(let e=0;e{class e{static __NG_ELEMENT_ID__=Rm}return e})();function Rm(){return Hm(qo(),Go())}var zm=class e extends Lm{_lContainer;_hostTNode;_hostLView;constructor(e,t,n){super(),this._lContainer=e,this._hostTNode=t,this._hostLView=n}get element(){return Rl(this._hostTNode,this._hostLView)}get injector(){return new Al(this._hostTNode,this._hostLView)}get parentInjector(){let e=vl(this._hostTNode,this._hostLView);if(il(e)){let t=sl(e,this._hostLView),n=al(e),r=t[1].data[n+8];return new Al(r,t)}return new Al(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(e){let t=Bm(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=vp(this._lContainer,e.ssrId),o=e.createEmbeddedViewImpl(t||{},i,a);return this.insertImpl(o,r,Of(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 Am(Hi(e)),u=n||this.parentInjector;if(!i&&l.ngModule==null){let e=this.parentInjector.get(Ja,null);e&&(i=e)}let d=Hi(l.componentType??{}),f=vp(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,Of(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(Fee(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 tp(o,i,a,r),t.attachToViewContainerRef(),va(Vm(o),a,t),t}move(e,t){return this.insert(e,t)}indexOf(e){let t=Bm(this._lContainer);return t===null?-1:t.indexOf(e)}remove(e){let t=this._adjustIndex(e,-1),n=rp(this._lContainer,t);n&&(ya(Vm(this._lContainer),t),Td(n[1],n))}detach(e){let t=this._adjustIndex(e,-1),n=rp(this._lContainer,t);return n&&ya(Vm(this._lContainer),t)!=null?new op(n):null}_adjustIndex(e,t=0){return e??this.length+t}};function Bm(e){return e[8]}function Vm(e){return e[8]||=[]}function Hm(e,t){let n,r=t[e.index];return uo(r)?n=r:(n=$f(r,t,null,e),t[e.index]=n,Qd(t,n)),Wm(n,t,e,r),new zm(n,e,t)}function Um(e,t){let n=e[11],r=n.createComment(``),i=So(t,e);return Ou(n,n.parentNode(i),r,n.nextSibling(i),!1),r}var Wm=qm,Gm=()=>!1;function Km(e,t,n){return Gm(e,t,n)}function qm(e,t,n,r){if(e[7])return;let i;i=n.type&8?bo(r):Um(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()}},Ym=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 lh(e,t,n){e.queries===null&&(e.queries=new Zm),e.queries.track(new Qm(t,n))}function uh(e,t){return e.queries.getByIndex(t)}function dh(e,t){let n=e[1],r=uh(n,t);return r.crossesNgTemplate?ih(n,e,t,[]):rh(n,e,r,t)}function fh(e,t,n){let r,i=Cn(()=>{r._dirtyCounter();let n=gh(r,e);if(t&&n===void 0)throw new gi(-951,!1);return n});return r=i[en],r._dirtyCounter=D(0),r._flatValue=void 0,i}function ph(e){return fh(!0,!1,e)}function mh(e){return fh(!0,!0,e)}function hh(e,t){let n=e[en];n._lView=Go(),n._queryIndex=t,n._queryList=ah(n._lView,t),n._queryList.onDirty(()=>n._dirtyCounter.update(e=>e+1))}function gh(e,t){let n=e._lView,r=e._queryIndex;if(n===void 0||r===void 0||n[2]&4)return t?void 0:Da;let i=ah(n,r),a=dh(n,r);return i.reset(a,Bl),t?i.first:i._changesDetected||e._flatValue===void 0?e._flatValue=i.toArray():e._flatValue}function _h(e){return!!e&&typeof e.then==`function`}function vh(e){return!!e&&typeof e.subscribe==`function`}var yh=class{},bh=class extends yh{injector;instance=null;constructor(e){super();let t=new Ya([...e.providers,{provide:yh,useValue:this}],e.parent||qa(),e.debugName,new Set([`environment`]));this.injector=t,e.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(e){this.injector.onDestroy(e)}};function xh(e,t,n=null){return new bh({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}var Sh=(()=>{class e{_injector;cachedInjectors=new Map;constructor(e){this._injector=e}getOrCreateStandaloneInjector(e){if(!e.standalone)return null;if(!this.cachedInjectors.has(e)){let t=Na(!1,e.type),n=t.length>0?xh([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=Di({token:e,providedIn:`environment`,factory:()=>new e(la(Ja))})}return e})();function k(e){return Ec(()=>{let t=Oh(e),n={...t,decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection!==Wl.Eager,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:t.standalone?e=>e.get(Sh).getOrCreateStandaloneInjector(n):null,getExternalStyles:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||mu.Emulated,styles:e.styles||Da,_:null,schemas:e.schemas||null,tView:null,id:``};t.standalone&&ld(`NgStandalone`),kh(n);let r=e.dependencies;return n.directiveDefs=Ah(r,Ch),n.pipeDefs=Ah(r,Wi),n.id=jh(n),n})}function Ch(e){return Hi(e)||Ui(e)}function wh(e,t){if(e==null)return Ea;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=ef.None,c=null),n[a]=[r,s,c],t[a]=o}return n}function Th(e){if(e==null)return Ea;let t={};for(let n in e)Object.hasOwn(e,n)&&(t[e[n]]=n);return t}function Eh(e){return Ec(()=>{let t=Oh(e);return kh(t),t})}function Dh(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 Oh(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||Ea,exportAs:e.exportAs||null,standalone:e.standalone??!0,signals:e.signals===!0,selectors:e.selectors||Da,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,controlDef:null,signalFormsInputPresence:null,inputs:wh(e.inputs,t),outputs:Th(e.outputs),debugInfo:null}}function kh(e){e.features?.forEach(t=>t(e))}function Ah(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 jh(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 Mh=new Pi(``),Nh=(()=>{class e{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((e,t)=>{this.resolve=e,this.reject=t});appInits=C(Mh,{optional:!0})??[];injector=C(Es);constructor(){}runInitializers(){if(this.initialized)return;let e=[];for(let t of this.appInits){let n=oo(this.injector,t);if(_h(n))e.push(n);else if(vh(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=Il({token:e,factory:e.ɵfac})}return e})();function Ph(e){return t=>{t.controlDef={create:(e,t)=>{e?.ɵngControlCreate(t)},update:(e,t)=>{e?.ɵngControlUpdate?.(t)},passThroughInput:e}}}function Fh(e){return Object.getPrototypeOf(e.prototype).constructor}function Ih(e){let t=Fh(e.type),n=!0,r=[e];for(;t&&t!==Function.prototype&&t!==Object.prototype;){let i,a=Object.hasOwn(t,Ii)?t[Ii]:void 0,o=Object.hasOwn(t,Li)?t[Li]:void 0;if(ho(e))i=a??o;else{if(a)throw new gi(903,!1);i=o}if(i){if(n){r.push(i);let t=e;t.inputs=zh(e.inputs),t.declaredInputs=zh(e.declaredInputs),t.outputs=zh(e.outputs);let n=i.hostBindings;n&&Hh(e,n);let a=i.viewQuery,o=i.contentQueries;if(a&&Bh(e,a),o&&Vh(e,o),Lh(e,i),bi(e.outputs,i.outputs),ho(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=nl(i.hostAttrs,n=nl(n,i.hostAttrs))}}function zh(e){return e===Ea?{}:e===Da?[]:e}function Bh(e,t){let n=e.viewQuery;e.viewQuery=n?(e,r)=>{t(e,r),n(e,r)}:t}function Vh(e,t){let n=e.contentQueries;e.contentQueries=n?(e,r,i)=>{t(e,r,i),n(e,r,i)}:t}function Hh(e,t){let n=e.hostBindings;e.hostBindings=n?(e,r)=>{t(e,r),n(e,r)}:t}function Uh(e,t,n,r,i,a,o,s){if(n.firstCreatePass){e.mergedAttrs=nl(e.mergedAttrs,e.attrs);let t=e.tView=Gd(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),Yo(e,!1);let c=qh(n,t,e,r);Ss()&&Pd(n,t,c,e),Zl(c,t);let l=$f(c,t,c,e);t[r+27]=l,Qd(t,l),Km(l,e,t)}function Wh(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;return t.firstCreatePass?(f=up(t,d,4,o||null,s||null),Vo()&&im(t,e,f,Oo(t.consts,l),mf),Hc(t,f)):f=t.data[d],Uh(f,e,t,n,r,i,a,c),mo(f)&&rf(t,e,f),l!=null&&af(e,f,u),f}function Gh(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;if(t.firstCreatePass){if(f=up(t,d,4,o||null,s||null),l!=null){let e=Oo(t.consts,l);f.localNames=[];for(let t=0;t{throw new gi(600,``)})}var Qh=10,$h=(()=>{class e{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=C($s);afterRenderManager=C(ud);zonelessEnabled=C(uc);rootEffectScheduler=C(fc);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new qr;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=C(Ms);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(mi(e=>!e))}constructor(){C(sd,{optional:!0})}whenStable(){let e;return new Promise(t=>{e=this.isStable.subscribe({next:e=>{e&&t()}})}).finally(()=>{e.unsubscribe()})}_injector=C(Ja);_rendererFactory=null;get injector(){return this._injector}bootstrap(e,t){return this.bootstrapImpl(e,t)}bootstrapImpl(e,t,n=Es.NULL){return this._injector.get(Bs).run(()=>{if(Bc(Dc.BootstrapComponentStart),!this._injector.get(Nh).done)throw new gi(405,``);let r=Hi(e),i=this._injector.get(yh),a=new Am(r,i);this.componentTypes.push(e);let{hostElement:o,directives:s,bindings:c}=eg(t),l=o||a.selector,u=a.create(n,[],l,i.injector,s,c),d=u.location.nativeElement,f=u.injector.get(Yh,null);return f?.registerApplication(d),u.onDestroy(()=>{this.detachView(u.hostView),tg(this.components,u),f?.unregisterApplication(d)}),this._loadComponent(u),Bc(Dc.BootstrapComponentEnd,u),u})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){Bc(Dc.ChangeDetectionStart),this.tracingSnapshot===null?this.tickImpl():this.tracingSnapshot.run(od.CHANGE_DETECTION,this.tickImpl)}tickImpl=()=>{if(this._runningTick)throw Bc(Dc.ChangeDetectionEnd),new gi(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(),Bc(Dc.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(xp,null,{optional:!0}));let e=0;for(;this.dirtyFlags!==0&&e++jo(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;tg(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(Xh,[]).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),()=>tg(this._destroyListeners,e)}destroy(){if(this._destroyed)throw new gi(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=Il({token:e,factory:e.ɵfac})}return e})();function eg(e){return e===void 0||typeof e==`string`||e instanceof Element?{hostElement:e}:e}function tg(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function A(e,t,n,r){let i=Go();return Ap(i,rs(),t)&&(Ko(),hf(_s(),i,e,t,n,r)),A}function ng(e){if(ld(`NgAnimateEnter`),!Xu)return ng;let t=Go();if(bte(t))return ng;let n=qo(),r=t[9].get(Bs);return Tte(rd(t),n,()=>rg(t,n,e,r)),jte(t[9]),_d(t[9],rd(t)),ng}function rg(e,t,n,r){let i=So(t,e),a=e[11],o=wte(n),s=[],c=!1,l=e=>{if(id(e)!==i)return;let t=e instanceof AnimationEvent?`animationend`:`transitionend`;r.runOutsideAngular(()=>{a.listen(i,t,u)})},u=e=>{id(e)===i&&(ad(e,i)&&(c=!0),ig(e,i,a))};if(o&&o.length>0){r.runOutsideAngular(()=>{s.push(a.listen(i,`animationstart`,l)),s.push(a.listen(i,`transitionstart`,l))}),xte(i,o,s);for(let e of o)a.addClass(i,e);r.runOutsideAngular(()=>{requestAnimationFrame(()=>{if(!c&&(gte(i,$u,Xu),!$u.has(i))){for(let e of o)a.removeClass(i,e);Zu(i)}})})}}function ig(e,t,n){let r=Qu.get(t);if(id(e)===t&&r&&ad(e,t)){e.stopPropagation();for(let e of r.classList)n.removeClass(t,e);Zu(t)}}var ag=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 og(e,t,n,r,i){return e===n&&Object.is(t,r)?1:Object.is(i(e,t),i(n,r))?-1:0}function sg(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=og(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=og(s,d,c,f,n);if(p!==0){p<0&&e.updateValue(s,f),s--,c--;continue}let m=n(o,r),h=n(s,d),g=n(o,l);if(Object.is(g,h)){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 dg,a??=ug(e,o,s,n),cg(e,i,o,g))e.updateValue(o,l),o++,s++;else if(a.has(g))i.set(m,e.detach(o)),s--;else{let n=e.create(o,t[o]);e.attach(o,n),o++,s++}}for(;o<=c;)lg(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=og(o,t,o,r,n);if(u!==0)u<0&&e.updateValue(o,r),o++,l=c.next();else{i??=new dg,a??=ug(e,o,s,n);let u=n(o,r);if(cg(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;)lg(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 cg(e,t,n,r){return t!==void 0&&t.has(r)?(e.attach(n,t.get(r)),t.delete(r),!0):!1}function lg(e,t,n,r,i){if(cg(e,t,r,n(r,i)))e.updateValue(r,i);else{let t=e.create(r,i);e.attach(r,t)}}function ug(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 dg=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 j(e,t,n,r,i,a,o,s){ld(`NgControlFlow`);let c=Go(),l=Ko();return Gh(c,l,e,t,n,r,i,Oo(l.consts,a),256,o,s),fg}function fg(e,t,n,r,i,a,o,s){ld(`NgControlFlow`);let c=Go(),l=Ko();return Gh(c,l,e,t,n,r,i,Oo(l.consts,a),512,o,s),fg}function M(e,t){ld(`NgControlFlow`);let n=Go(),r=rs(),i=n[r]===Vu?-1:n[r],a=i===-1?void 0:vg(n,27+i);if(Ap(n,r,e)){let r=tn(null);try{if(a!==void 0&&np(a,0),e!==-1){let r=27+e,i=vg(n,r),a=Cg(n[1],r),o=yp(i,a,n);tp(i,Df(n,a,t,{dehydratedView:o}),0,Of(a,o))}}finally{tn(r)}}else if(a!==void 0){let e=ep(a,0);e!==void 0&&(e[8]=t)}}var pg=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 mg(e){return e}function hg(e,t){return t}var gg=class{hasEmptyBlock;trackByFn;liveCollection;constructor(e,t,n){this.hasEmptyBlock=e,this.trackByFn=t,this.liveCollection=n}};function N(e,t,n,r,i,a,o,s,c,l,u,d,f){ld(`NgControlFlow`);let p=Go(),m=Ko(),h=c!==void 0,g=Go(),_=new gg(h,s?o.bind(g[15][8]):o);g[27+e]=_,Gh(p,m,e+1,t,n,r,i,Oo(m.consts,a),256),h&&Gh(p,m,e+2,c,l,u,d,Oo(m.consts,f),512)}var _g=class extends ag{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,tp(this.lContainer,t,e,Of(this.templateTNode,n)),yg(this.lContainer,e)}detach(e){return this.needsIndexUpdate||=e!==this.length-1,bg(this.lContainer,e),xg(this.lContainer,e)}create(e,t){let n=vp(this.lContainer,this.templateTNode.tView.ssrId);return Df(this.hostLView,this.templateTNode,new pg(this.lContainer,t,e),{dehydratedView:n})}destroy(e){Td(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];kte(e,r),Yu.delete(n[19]),r.detachedLeaveAnimationFns=void 0}}function bg(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 xg(e,t){return rp(e,t)}function Sg(e,t){return ep(e,t)}function Cg(e,t){return Co(e,t)}function F(e,t,n){let r=Go();return Ap(r,rs(),t)&&(Ko(),cf(_s(),r,e,t,r[11],n)),F}function wg(e,t,n,r,i){xf(t,e,n,i?`class`:`style`,r)}function I(e,t,n,r){let i=Go(),a=i[1],o=e+27,s=a.firstCreatePass?vm(o,i,2,t,mf,Vo(),n,r):a.data[o];if(po(s)){let n=i[10].tracingService;if(n&&n.componentCreate){let o=a.data[s.directiveStart+s.componentOffset];return n.componentCreate(Tp(o),()=>(Tg(e,t,i,s,r),I))}}return Tg(e,t,i,s,r),I}function Tg(e,t,n,r,i){if(vf(r,n,e,t,Dg),mo(r)){let e=n[1];rf(e,n,r),pu(e,r,n)}i!=null&&af(n,r)}function L(){let e=Ko(),t=yf(qo());return e.firstCreatePass&&ym(e,t),Uo(t)&&Wo(),Bo(),t.classesWithoutHost!=null&&Zc(t)&&wg(e,t,Go(),t.classesWithoutHost,!0),t.stylesWithoutHost!=null&&Qc(t)&&wg(e,t,Go(),t.stylesWithoutHost,!1),L}function R(e,t,n,r){return I(e,t,n,r),L(),R}function z(e,t,n,r){let i=Go(),a=i[1],o=e+27,s=a.firstCreatePass?bm(o,a,2,t,n,r):a.data[o];return vf(s,i,e,t,Dg),r!=null&&af(i,s),z}function B(){return Uo(yf(qo()))&&Wo(),Bo(),B}function Eg(e,t,n,r){return z(e,t,n,r),B(),Eg}var Dg=(e,t,n,r,i)=>(Cs(!0),Du(t[11],r,bs()));function Og(e,t,n){let r=Go(),i=r[1],a=e+27,o=i.firstCreatePass?vm(a,r,8,`ng-container`,mf,Vo(),t,n):i.data[a];if(vf(o,r,e,`ng-container`,jg),mo(o)){let e=r[1];rf(e,r,o),pu(e,o,r)}return n!=null&&af(r,o),Og}function kg(){let e=Ko(),t=yf(qo());return e.firstCreatePass&&ym(e,t),kg}function Ag(e,t,n){return Og(e,t,n),kg(),Ag}var jg=(e,t,n,r,i)=>(Cs(!0),Yee(t[11],``));function V(){return Go()}function Mg(e,t,n){let r=Go();return Ap(r,rs(),t)&&(Ko(),lf(_s(),r,e,t,r[11],n)),Mg}var Ng=void 0;function Pg(e){let t=Math.floor(Math.abs(e)),n=e.toString().replace(/^[^.]*\.?/,``).length;return t===1&&n===0?1:5}var Fg=[`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`]],Ng,[[`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`]],Ng,[[`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}`,Ng,Ng,Ng],[`.`,`,`,`;`,`%`,`+`,`-`,`E`,`×`,`‰`,`∞`,`NaN`,`:`],[`#,##0.###`,`#,##0%`,`¤#,##0.00`,`#E0`],`USD`,`$`,`US Dollar`,{},`ltr`,Pg],Ig=Object.create(null);function Lg(e){let t=Bg(e),n=Rg(t);if(n)return n;let r=t.split(`-`)[0];if(n=Rg(r),n)return n;if(r===`en`)return Fg;throw new gi(701,!1)}function Rg(e){if(!(e in Ig)){let t=ia.ng&&ia.ng.common&&ia.ng.common.locales&&ia.ng.common.locales[e];return t!==void 0&&(Ig[e]=t),t}return Ig[e]}var zg={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 Vg=`en-US`;function Hg(e){typeof e==`string`&&e.toLowerCase().replace(/_/g,`-`)}function H(e,t,n){let r=Go(),i=Ko(),a=qo();return Ug(i,r,r[11],a,e,t,n),H}function U(e,t,n){let r=Go(),i=Ko(),a=qo();return(a.type&3||n)&&Ip(a,i,r,n,r[11],e,t,Pp(a,r,t)),U}function Ug(e,t,n,r,i,a,o){let s=!0,c=null;if((r.type&3||o)&&(c??=Pp(r,t,a),Ip(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 $g(e){return(e&2)==2}function e_(e,t){return e&131071|t<<17}function t_(e){return e|2}function n_(e){return(e&131068)>>2}function r_(e,t){return e&-131069|t<<2}function i_(e){return(e&1)==1}function a_(e){return e|1}function o_(e,t,n,r,i,a){let o=a?t.classBindings:t.styleBindings,s=Qg(o),c=n_(o);e[r]=n;let l=!1,u;if(Array.isArray(n)){let e=n;u=e[1],(u===null||wa(e,u)>0)&&(l=!0)}else u=n;if(i){if(c!==0){let t=Qg(e[s+1]);e[r+1]=Zg(t,s),t!==0&&(e[t+1]=r_(e[t+1],r)),e[s+1]=e_(e[s+1],r)}else e[r+1]=Zg(s,0),s!==0&&(e[s+1]=r_(e[s+1],r)),s=r}else e[r+1]=Zg(c,0),s===0?s=r:e[c+1]=r_(e[c+1],r),c=r;l&&(e[r+1]=t_(e[r+1])),c_(e,u,r,!0),c_(e,u,r,!1),s_(t,u,e,r,a),o=Zg(s,c),a?t.classBindings=o:t.styleBindings=o}function s_(e,t,n,r,i){let a=i?e.residualClasses:e.residualStyles;a!=null&&typeof t==`string`&&wa(a,t)>=0&&(n[r+1]=a_(n[r+1]))}function c_(e,t,n,r){let i=e[n+1],a=t===null,o=r?Qg(i):n_(i),s=!1;for(;o!==0&&(s===!1||a);){let n=e[o],i=e[o+1];l_(n,t)&&(s=!0,e[o+1]=r?a_(i):t_(i)),o=r?Qg(i):n_(i)}s&&(e[n+1]=r?t_(i):a_(i))}function l_(e,t){return e===null||t==null||(Array.isArray(e)?e[1]:e)===t?!0:Array.isArray(e)&&typeof t==`string`?wa(e,t)>=0:!1}var u_={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function d_(e){return e.substring(u_.key,u_.keyEnd)}function f_(e){return m_(e),p_(e,h_(e,0,u_.textEnd))}function p_(e,t){let n=u_.textEnd;return n===t?-1:(t=u_.keyEnd=g_(e,u_.key=t,n),h_(e,t,n))}function m_(e){u_.key=0,u_.keyEnd=0,u_.value=0,u_.valueEnd=0,u_.textEnd=e.length}function h_(e,t,n){for(;t32;)t++;return t}function __(e,t,n){return b_(e,t,n,!1),__}function G(e,t){return b_(e,t,null,!0),G}function v_(e){x_(j_,y_,e,!0)}function y_(e,t){for(let n=f_(t);n>=0;n=p_(t,n))Sa(e,d_(t),!0)}function b_(e,t,n,r){let i=Go(),a=Ko(),o=is(2);if(a.firstUpdatePass&&C_(a,e,o,r),t!==Vu&&Ap(i,o,t)){let s=a.data[hs()];N_(a,s,i,i[11],e,i[o+1]=I_(t,n),r,o)}}function x_(e,t,n,r){let i=Ko(),a=is(2);i.firstUpdatePass&&C_(i,null,a,r);let o=Go();if(n!==Vu&&Ap(o,a,n)){let s=i.data[hs()];if(L_(s,r)&&!S_(i,a)){let e=r?s.classesWithoutHost:s.stylesWithoutHost;e!==null&&(n=Si(e,n||``)),wg(i,s,o,n,r)}else M_(i,s,o,o[11],o[a+1],o[a+1]=A_(e,t,n),r,a)}}function S_(e,t){return t>=e.expandoStartIndex}function C_(e,t,n,r){let i=e.data;if(i[n+1]===null){let a=i[hs()],o=S_(e,n);L_(a,r)&&t===null&&!o&&(t=!1),t=w_(i,a,t,r),o_(i,a,t,n,o,r)}}function w_(e,t,n,r){let i=Kee(e),a=r?t.residualClasses:t.residualStyles;if(i===null)(r?t.classBindings:t.styleBindings)===0&&(n=O_(null,e,t,n,r),n=k_(n,t.attrs,r),a=null);else{let o=t.directiveStylingLast;if(o===-1||e[o]!==i){if(n=O_(i,e,t,n,r),a===null){let n=T_(e,t,r);n!==void 0&&Array.isArray(n)&&(n=O_(null,e,t,n[1],r),n=k_(n,t.attrs,r),E_(e,t,r,n))}else a=D_(e,t,r)}}return a!==void 0&&(r?t.residualClasses=a:t.residualStyles=a),n}function T_(e,t,n){let r=n?t.classBindings:t.styleBindings;if(n_(r)!==0)return e[Qg(r)]}function E_(e,t,n,r){let i=n?t.classBindings:t.styleBindings;e[Qg(i)]=r}function D_(e,t,n){let r,i=t.directiveEnd;for(let a=1+t.directiveStylingLast;a0;){let t=e[i],a=Array.isArray(t),c=a?t[1]:t,l=c===null,u=n[i+1];u===Vu&&(u=l?Da:void 0);let d=l?Ca(u,r):c===r?u:void 0;if(a&&!F_(d)&&(d=Ca(t,r)),F_(d)&&(s=d,o))return s;let f=e[i+1];i=o?Qg(f):n_(f)}if(t!==null){let e=a?t.residualClasses:t.residualStyles;e!=null&&(s=Ca(e,r))}return s}function F_(e){return e!==void 0}function I_(e,t){return e==null||e===``||(typeof t==`string`?e=gu(e)+t:typeof e==`object`&&(e=xi(gu(e)))),e}function L_(e,t){return!!(e.flags&(t?8:16))}function K(e,t=``){let n=Go(),r=Ko(),i=e+27,a=r.firstCreatePass?up(r,i,1,t,null):r.data[i],o=R_(r,n,a,t);n[i]=o,Ss()&&Pd(r,n,o,a),Yo(a,!1)}var R_=(e,t,n,r)=>(Cs(!0),Tu(t[11],r));function z_(e,t,n,r=``){return Ap(e,rs(),n)?t+Ki(n)+r:Vu}function B_(e,t,n,r,i,a=``){let o=jp(e,ns(),n,i);return is(2),o?t+Ki(n)+r+Ki(i)+a:Vu}function Rte(e,t,n,r,i,a,o,s=``){let c=Mp(e,ns(),n,i,o);return is(3),c?t+Ki(n)+r+Ki(i)+a+Ki(o)+s:Vu}function zte(e,t,n,r,i,a,o,s,c,l=``){let u=Np(e,ns(),n,i,o,c);return is(4),u?t+Ki(n)+r+Ki(i)+a+Ki(o)+s+Ki(c)+l:Vu}function q(e){return J(``,e),q}function J(e,t,n){let r=Go(),i=z_(r,e,t,n);return i!==Vu&&U_(r,hs(),i),J}function Y(e,t,n,r,i){let a=Go(),o=B_(a,e,t,n,r,i);return o!==Vu&&U_(a,hs(),o),Y}function V_(e,t,n,r,i,a,o){let s=Go(),c=Rte(s,e,t,n,r,i,a,o);return c!==Vu&&U_(s,hs(),c),V_}function H_(e,t,n,r,i,a,o,s,c){let l=Go(),u=zte(l,e,t,n,r,i,a,o,s,c);return u!==Vu&&U_(l,hs(),u),H_}function U_(e,t,n){let r=xo(t,e);Eu(e[11],r,n)}function W_(e,t,n){Cc(t)&&(t=t());let r=Go();return Ap(r,rs(),t)&&(Ko(),cf(_s(),r,e,t,r[11],n)),W_}function G_(e,t){let n=Cc(e);return n&&e.set(t),n}function K_(e,t){let n=Go(),r=Ko(),i=qo();return Ug(r,n,n[11],i,e,t),K_}var q_={};function J_(e){ld(`NgLet`);let t=Ko(),n=Go(),r=e+27;return Yo(up(t,r,128,null,null),!1),To(t,n,r,q_),J_}function Y_(e){return To(Ko(),Go(),hs(),e),e}function X_(e){let t=wo(Qo(),27+e);if(t===q_)throw new gi(314,!1);return t}function Z_(e,t,n=``){return z_(Go(),e,t,n)}function Q_(e,t,n){let r=Ko();r.firstCreatePass&&$_(t,r.data,r.blueprint,ho(e),n)}function $_(e,t,n,r,i){if(e=Ti(e),Array.isArray(e))for(let a=0;a>20;if(Va(e)||!e.multi){let r=new Xc(l,i,rm,null),p=nv(c,t,i?u:u+f,d);p===-1?(yl(hl(s,o),a,c),ev(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=nv(c,t,u+f,d),m=nv(c,t,u,u+f),h=p>=0&&n[p],g=m>=0&&n[m];if(i&&!g||!i&&!h){yl(hl(s,o),a,c);let u=Hte(i?Vte:Bte,n.length,i,r,l,e);!i&&g&&(n[m].providerFactory=u),ev(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=tv(n[i?m:p],l,!i&&r);ev(a,e,p>-1?p:m,t)}!i&&r&&g&&n[m].componentProviders++}}}function ev(e,t,n,r){let i=Va(t),a=Ha(t);if(i||a){let o=(a?Ti(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 tv(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function nv(e,t,n,r){for(let i=n;i{n.providersResolver=(t,n)=>Q_(t,n?n(e):e,!1),t&&(n.viewProvidersResolver=(e,n)=>Q_(e,n?n(t):t,!0))}}function av(e,t){let n=ts()+e,r=Go();return r[n]===Vu?Op(r,n,t()):kp(r,n)}function ov(e,t,n){return lv(Go(),ts(),e,t,n)}function sv(e,t,n,r){return uv(Go(),ts(),e,t,n,r)}function Ute(e,t,n,r,i,a,o){return Wte(Go(),ts(),e,t,n,r,i,a)}function cv(e,t){let n=e[t];return n===Vu?void 0:n}function lv(e,t,n,r,i,a){let o=t+n;return Ap(e,o,i)?Op(e,o+1,a?r.call(a,i):r(i)):cv(e,o+1)}function uv(e,t,n,r,i,a,o){let s=t+n;return jp(e,s,i,a)?Op(e,s+2,o?r.call(o,i,a):r(i,a)):cv(e,s+2)}function Wte(e,t,n,r,i,a,o,s,c){let l=t+n;return Np(e,l,i,a,o,s)?Op(e,l+4,c?r.call(c,i,a,o,s):r(i,a,o,s)):cv(e,l+4)}function dv(e,t){let n=Ko(),r,i=e+27;n.firstCreatePass?(r=Gte(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=ma(r.type,!0)),o=na(rm);try{let e=ll(!1),t=a();return ll(e),To(n,Go(),i,t),t}finally{na(o)}}function Gte(e,t){if(t)for(let n=t.length-1;n>=0;n--){let r=t[n];if(e===r.name)return r}}function fv(e,t,n){let r=e+27,i=Go(),a=wo(i,r);return mv(i,r)?lv(i,ts(),t,a.transform,n,a):a.transform(n)}function pv(e,t,n,r){let i=e+27,a=Go(),o=wo(a,i);return mv(a,i)?uv(a,ts(),t,o.transform,n,r,o):o.transform(n,r)}function mv(e,t){return e[1].data[t].pure}function hv(e,t){return lp(e,t)}var Kte=(()=>{class e{applicationErrorHandler=C($s);appRef=C($h);taskService=C(Ms);ngZone=C(Bs);zonelessEnabled=C(uc);tracing=C(sd,{optional:!0});zoneIsDefined=typeof Zone<`u`&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new dr;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(Rs):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(C(dc,{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?Is:Fs;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=Il({token:e,factory:e.ɵfac})}return e})();function qte(){return[{provide:lc,useExisting:Kte},{provide:Bs,useClass:Js},{provide:uc,useValue:!0}]}function Jte(){return typeof $localize<`u`&&$localize.locale||`en-US`}var gv=new Pi(``,{factory:()=>C(gv,{optional:!0,skipSelf:!0})||Jte()}),_v=class{destroyed=!1;listeners=null;errorHandler=C(Qs,{optional:!0});isEmitting=!1;hasNullListeners=!1;destroyRef=C(Os);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(e){if(this.destroyed)throw new gi(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(vi(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&&Yte(this.listeners)),tn(t),this.isEmitting=!1}}};function Yte(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 Xn(e)}(class e extends Error{_brand;constructor(e){super(e)}static IDLE=new e(`IDLE`);static LOADING=new e(`LOADING`)});var Xte=e=>e;function Q(e,t){return typeof e==`function`?vv(Kn(e,Xte,t?.equal),t?.debugName,t?.set):vv(Kn(e.source,e.computation,e.equal),e.debugName,e.set)}function vv(e,t,n){let r=e[en],i=e;if(n!==void 0){let t=e=>qn(r,e);i.set=e=>n(e,t),i.update=r=>n(r(Z(e)),t)}else i.set=e=>qn(r,e),i.update=e=>Jn(r,e);return i.asReadonly=tc.bind(e),i}var yv=!1;function Zte(){return yv}function bv(e){yv=e}function xv(e,t){let n=Object.create(Tc);n.value=e,n.transformFn=t?.transform;function r(){if(an(n),n.value===wc)throw new gi(-950,null);return n.value}return r[en]=n,r}function Sv(e){return new _v}function Cv(e,t){return xv(e,t)}function Qte(e){return xv(wc,e)}var $=(Cv.required=Qte,Cv);function wv(e,t){let n=Object.create(Tc),r=new _v;n.value=e;function i(){return an(n),Tv(n.value),n.value}return i[en]=n,i.asReadonly=tc.bind(i),i.set=e=>{n.equal(n.value,e)||(Fn(n,e),r.emit(e))},i.update=e=>{Tv(n.value),i.set(e(n.value))},i.subscribe=r.subscribe.bind(r),i.destroyRef=r.destroyRef,i}function Tv(e){if(e===wc)throw new gi(952,!1)}function Ev(e,t){return wv(e,t)}function $te(e){return wv(wc,e)}var Dv=(Ev.required=$te,Ev);function Ov(e,t){return ph(t)}function ene(e,t){return mh(t)}var kv=(Ov.required=ene,Ov),tne=(()=>{class e{static __NG_ELEMENT_ID__=nne}return e})();function nne(e){return rne(qo(),Go(),(e&16)==16)}function rne(e,t,n){if(po(e)&&!n){let n=Eo(e.index,t);return new op(n,n)}if(e.type&175){let e=t[15];return new op(e,t)}return null}var Av=new Pi(``),ine=new Pi(``);function jv(e){return!e.moduleRef}function ane(e){let t=jv(e)?e.r3Injector:e.moduleRef.injector,n=t.get(Bs);return n.run(()=>{jv(e)?e.r3Injector.resolveInjectorInitializers():e.moduleRef.resolveInjectorInitializers();let r=t.get($s),i;if(n.runOutsideAngular(()=>{i=n.onError.subscribe({next:r})}),jv(e)){let n=()=>t.destroy(),r=e.platformInjector.get(Av);r.add(n),t.onDestroy(()=>{i.unsubscribe(),r.delete(n)})}else{let t=()=>e.moduleRef.destroy(),n=e.platformInjector.get(Av);n.add(t),e.moduleRef.onDestroy(()=>{tg(e.allPlatformModules,e.moduleRef),i.unsubscribe(),n.delete(t)})}return sne(r,n,()=>{let n=t.get(Ms),r=n.add(),i=t.get(Nh);return i.runInitializers(),i.donePromise.then(()=>{if(Hg(t.get(gv,Vg)||`en-US`),!t.get(ine,!0))return jv(e)?t.get($h):(e.allPlatformModules.push(e.moduleRef),e.moduleRef);if(jv(e)){let n=t.get($h);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 sne(e,t,n){try{let r=n();return _h(r)?r.catch(n=>{throw t.runOutsideAngular(()=>e(n)),n}):r}catch(n){throw t.runOutsideAngular(()=>e(n)),n}}var Mv=null;function cne(e=[],t){return Es.create({name:t,providers:[{provide:Ua,useValue:`platform`},{provide:Av,useValue:new Set([()=>Mv=null])},...e]})}function lne(e=[]){if(Mv)return Mv;let t=cne(e);return Mv=t,Zh(),une(t),t}function une(e){let t=e.get(ic,null);oo(e,()=>{t?.forEach(e=>e())})}function dne(e){let{rootComponent:t,appProviders:n,platformProviders:r,platformRef:i}=e;Bc(Dc.BootstrapApplicationStart);try{let e=i?.injector??lne(r);return ane({r3Injector:new bh({providers:[qte(),ec,...n||[]],parent:e,debugName:``,runEnvironmentInitializers:!1}).injector,platformInjector:e,rootComponent:t})}catch(e){return Promise.reject(e)}finally{Bc(Dc.BootstrapApplicationEnd)}}function Nv(e){return typeof e==`boolean`?e:e!=null&&e!==`false`}var Pv=Symbol(`NOT_SET`),Fv=new Set,fne={...Ln,kind:`afterRenderEffectPhase`,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,value:Pv,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??Fv)t()}finally{_n(e)}}};function Iv(e,t){let n=t?.injector??C(Es),r=n.get(lc),i=n.get(ud),a=n.get(sd,null,{optional:!0});i.impl??=n.get(fd);let o=e;typeof o==`function`&&(o={mixedReadWrite:e});let s=n.get(sc,null,{optional:!0}),c=new pne(i.impl,[o.earlyRead,o.write,o.mixedReadWrite,o.read],s?.view,r,n,a?.snapshot(null));return i.impl.register(c),c}var Lv=null;function Rv(){return Lv}function mne(e){Lv??=e}var hne=class{},zv=(function(e){return e[e.Format=0]=`Format`,e[e.Standalone=1]=`Standalone`,e})(zv||{}),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||{}),Vv=(function(e){return e[e.Short=0]=`Short`,e[e.Medium=1]=`Medium`,e[e.Long=2]=`Long`,e[e.Full=3]=`Full`,e})(Vv||{}),Hv={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 gne(e){return Lg(e)[zg.LocaleId]}function _ne(e,t,n){let r=Lg(e);return Jv(Jv([r[zg.DayPeriodsFormat],r[zg.DayPeriodsStandalone]],t),n)}function vne(e,t,n){let r=Lg(e);return Jv(Jv([r[zg.DaysFormat],r[zg.DaysStandalone]],t),n)}function yne(e,t,n){let r=Lg(e);return Jv(Jv([r[zg.MonthsFormat],r[zg.MonthsStandalone]],t),n)}function bne(e,t){let n=Lg(e)[zg.Eras];return Jv(n,t)}function Uv(e,t){return Jv(Lg(e)[zg.DateFormat],t)}function Wv(e,t){return Jv(Lg(e)[zg.TimeFormat],t)}function Gv(e,t){let n=Lg(e)[zg.DateTimeFormat];return Jv(n,t)}function Kv(e,t){let n=Lg(e),r=n[zg.NumberSymbols][t];if(r===void 0){if(t===Hv.CurrencyDecimal)return n[zg.NumberSymbols][Hv.Decimal];if(t===Hv.CurrencyGroup)return n[zg.NumberSymbols][Hv.Group]}return r}function qv(e){if(!e[zg.ExtraData])throw new gi(2303,!1)}function xne(e){let t=Lg(e);return qv(t),(t[zg.ExtraData][2]||[]).map(e=>typeof e==`string`?Yv(e):[Yv(e[0]),Yv(e[1])])}function Sne(e,t,n){let r=Lg(e);return qv(r),Jv(Jv([r[zg.ExtraData][0],r[zg.ExtraData][1]],t)||[],n)||[]}function Jv(e,t){for(let n=t;n>-1;n--)if(e[n]!==void 0)return e[n];throw new gi(2304,!1)}function Yv(e){let[t,n]=e.split(`:`);return{hours:+t,minutes:+n}}var Cne=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,Xv=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]*)/,Tne=256;function Ene(e,t,n,r){let i=Ine(e);Dne(t),t=Qv(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=ly(r,s),i=Fne(i,r));let c=``;return a.forEach(e=>{let t=Nne(e);c+=t?t(i,n,s):e===`''`?`'`:e.replace(/(^'|'$)/g,``).replace(/''/g,`'`)}),c}function Dne(e){if(e.length>Tne)throw new gi(2300,!1)}function Zv(e,t,n){let r=new Date(0);return r.setFullYear(e,t,n),r.setHours(0,0,0),r}function Qv(e,t){let n=gne(e);if(Xv[n]??=Object.create(null),Xv[n][t])return Xv[n][t];let r=``;switch(t){case`shortDate`:r=Uv(e,Vv.Short);break;case`mediumDate`:r=Uv(e,Vv.Medium);break;case`longDate`:r=Uv(e,Vv.Long);break;case`fullDate`:r=Uv(e,Vv.Full);break;case`shortTime`:r=Wv(e,Vv.Short);break;case`mediumTime`:r=Wv(e,Vv.Medium);break;case`longTime`:r=Wv(e,Vv.Long);break;case`fullTime`:r=Wv(e,Vv.Full);break;case`short`:let t=Qv(e,`shortTime`),n=Qv(e,`shortDate`);r=$v(Gv(e,Vv.Short),[t,n]);break;case`medium`:let i=Qv(e,`mediumTime`),a=Qv(e,`mediumDate`);r=$v(Gv(e,Vv.Medium),[i,a]);break;case`long`:let o=Qv(e,`longTime`),s=Qv(e,`longDate`);r=$v(Gv(e,Vv.Long),[o,s]);break;case`full`:let c=Qv(e,`fullTime`),l=Qv(e,`fullDate`);r=$v(Gv(e,Vv.Full),[c,l])}return r&&(Xv[n][t]=r),r}function $v(e,t){return t&&(e=e.replace(/\{([^}]+)}/g,function(e,n){return Object.hasOwn(t,n)?t[n]:e})),e}function ey(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 One(s,t);let c=Kv(o,Hv.MinusSign);return ey(s,t,c,r,i)}}function kne(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 gi(2301,!1)}}function ny(e,t,n=zv.Format,r=!1){return function(i,a){return Ane(i,a,e,t,n,r)}}function Ane(e,t,n,r,i,a){switch(n){case 2:return yne(t,i,r)[e.getMonth()];case 1:return vne(t,i,r)[e.getDay()];case 0:let n=e.getHours(),o=e.getMinutes();if(a){let e=xne(t),a=Sne(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?`+`:``)+ey(o,2,a)+ey(Math.abs(i%60),2,a);case 1:return`GMT`+(i>=0?`+`:``)+ey(o,1,a);case 2:return`GMT`+(i>=0?`+`:``)+ey(o,2,a)+`:`+ey(Math.abs(i%60),2,a);case 3:return r===0?`Z`:(i>=0?`+`:``)+ey(o,2,a)+`:`+ey(Math.abs(i%60),2,a);default:throw new gi(2310,!1)}}}var jne=0,iy=4;function Mne(e){let t=Zv(e,jne,1).getDay();return Zv(e,0,1+(t<=iy?iy:11)-t)}function ay(e){let t=e.getDay(),n=t===0?-3:iy-t;return Zv(e.getFullYear(),e.getMonth(),e.getDate()+n)}function oy(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=ay(n),t=Mne(e.getFullYear()),r=e.getTime()-t.getTime();i=1+Math.round(r/6048e5)}return ey(i,e,Kv(r,Hv.MinusSign))}}function sy(e,t=!1){return function(n,r){return ey(ay(n).getFullYear(),e,Kv(r,Hv.MinusSign),t)}}var cy=Object.create(null);function Nne(e){if(cy[e])return cy[e];let t;switch(e){case`G`:case`GG`:case`GGG`:t=ny(3,Bv.Abbreviated);break;case`GGGG`:t=ny(3,Bv.Wide);break;case`GGGGG`:t=ny(3,Bv.Narrow);break;case`y`:t=ty(0,1,0,!1,!0);break;case`yy`:t=ty(0,2,0,!0,!0);break;case`yyy`:t=ty(0,3,0,!1,!0);break;case`yyyy`:t=ty(0,4,0,!1,!0);break;case`Y`:t=sy(1);break;case`YY`:t=sy(2,!0);break;case`YYY`:t=sy(3);break;case`YYYY`:t=sy(4);break;case`M`:case`L`:t=ty(1,1,1);break;case`MM`:case`LL`:t=ty(1,2,1);break;case`MMM`:t=ny(2,Bv.Abbreviated);break;case`MMMM`:t=ny(2,Bv.Wide);break;case`MMMMM`:t=ny(2,Bv.Narrow);break;case`LLL`:t=ny(2,Bv.Abbreviated,zv.Standalone);break;case`LLLL`:t=ny(2,Bv.Wide,zv.Standalone);break;case`LLLLL`:t=ny(2,Bv.Narrow,zv.Standalone);break;case`w`:t=oy(1);break;case`ww`:t=oy(2);break;case`W`:t=oy(1,!0);break;case`d`:t=ty(2,1);break;case`dd`:t=ty(2,2);break;case`c`:case`cc`:t=ty(7,1);break;case`ccc`:t=ny(1,Bv.Abbreviated,zv.Standalone);break;case`cccc`:t=ny(1,Bv.Wide,zv.Standalone);break;case`ccccc`:t=ny(1,Bv.Narrow,zv.Standalone);break;case`cccccc`:t=ny(1,Bv.Short,zv.Standalone);break;case`E`:case`EE`:case`EEE`:t=ny(1,Bv.Abbreviated);break;case`EEEE`:t=ny(1,Bv.Wide);break;case`EEEEE`:t=ny(1,Bv.Narrow);break;case`EEEEEE`:t=ny(1,Bv.Short);break;case`a`:case`aa`:case`aaa`:t=ny(0,Bv.Abbreviated);break;case`aaaa`:t=ny(0,Bv.Wide);break;case`aaaaa`:t=ny(0,Bv.Narrow);break;case`b`:case`bb`:case`bbb`:t=ny(0,Bv.Abbreviated,zv.Standalone,!0);break;case`bbbb`:t=ny(0,Bv.Wide,zv.Standalone,!0);break;case`bbbbb`:t=ny(0,Bv.Narrow,zv.Standalone,!0);break;case`B`:case`BB`:case`BBB`:t=ny(0,Bv.Abbreviated,zv.Format,!0);break;case`BBBB`:t=ny(0,Bv.Wide,zv.Format,!0);break;case`BBBBB`:t=ny(0,Bv.Narrow,zv.Format,!0);break;case`h`:t=ty(3,1,-12);break;case`hh`:t=ty(3,2,-12);break;case`H`:t=ty(3,1);break;case`HH`:t=ty(3,2);break;case`m`:t=ty(4,1);break;case`mm`:t=ty(4,2);break;case`s`:t=ty(5,1);break;case`ss`:t=ty(5,2);break;case`S`:t=ty(6,1);break;case`SS`:t=ty(6,2);break;case`SSS`:t=ty(6,3);break;case`Z`:case`ZZ`:case`ZZZ`:t=ry(0);break;case`ZZZZZ`:t=ry(3);break;case`O`:case`OO`:case`OOO`:case`z`:case`zz`:case`zzz`:t=ry(1);break;case`OOOO`:case`ZZZZ`:case`zzzz`:t=ry(2);break;default:return null}return cy[e]=t,t}function ly(e,t){e=e.replace(/:/g,``);let n=Date.parse(`Jan 01, 1970 00:00:00 `+e)/6e4;return isNaN(n)?t:n}function Pne(e,t){return e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+t),e}function Fne(e,t,n){let r=e.getTimezoneOffset();return Pne(e,-1*(ly(t,r)-r))}function Ine(e){if(uy(e))return e;if(typeof e==`number`&&!isNaN(e))return new Date(e);if(typeof e==`string`){if(e=e.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(e)){let[t,n=1,r=1]=e.split(`-`).map(e=>+e);return Zv(t,n-1,r)}let t=parseFloat(e);if(!isNaN(e-t))return new Date(t);let n;if(n=e.match(Cne))return Lne(n)}let t=new Date(e);if(!uy(t))throw new gi(2311,!1);return t}function Lne(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 uy(e){return e instanceof Date&&!isNaN(e.valueOf())}var dy=(()=>{class e{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;injector=C(Es);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)(rm(Lm))};static ɵdir=Eh({type:e,selectors:[[``,`ngTemplateOutlet`,``]],inputs:{ngTemplateOutletContext:`ngTemplateOutletContext`,ngTemplateOutlet:`ngTemplateOutlet`,ngTemplateOutletInjector:`ngTemplateOutletInjector`},features:[jc]})}return e})();function Rne(e,t){return new gi(2100,!1)}var zne=`mediumDate`,Bne=new Pi(``),Vne=new Pi(``),fy=(()=>{class e{locale;defaultTimezone;defaultOptions;constructor(e,t,n){this.locale=e,this.defaultTimezone=t,this.defaultOptions=n}transform(t,n,r,i){if(t==null||t===``||t!==t)return null;try{let e=n??this.defaultOptions?.dateFormat??zne,a=r??this.defaultOptions?.timezone??this.defaultTimezone??void 0;return Ene(t,e,i||this.locale,a)}catch(t){throw Rne(e,t.message)}}static ɵfac=function(t){return new(t||e)(rm(gv,16),rm(Bne,24),rm(Vne,24))};static ɵpipe=Dh({name:`date`,type:e,pure:!0})}return e})(),py=(()=>{class e{transform(e){return JSON.stringify(e,null,2)}static ɵfac=function(t){return new(t||e)};static ɵpipe=Dh({name:`json`,type:e,pure:!1})}return e})();function Hne(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 Une=`browser`,my=class{_doc;constructor(e){this._doc=e}manager},hy=(()=>{class e extends my{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)(la(Ds))};static ɵprov=Di({token:e,factory:e.ɵfac})}return e})(),gy=new Pi(``),_y=(()=>{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 hy));this._plugins=n.slice().reverse();let r=e.find(e=>e instanceof hy);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 gi(-5101,!1);return this._eventNameToPlugin.set(e,t),t}static ɵfac=function(t){return new(t||e)(la(gy),la(Bs))};static ɵprov=Di({token:e,factory:e.ɵfac})}return e})(),vy=`ng-app-id`;function yy(e){for(let t of e)t.remove()}function by(e,t){let n=t.createElement(`style`);return n.textContent=e,n}function xy(e,t,n,r){let i=e.head?.querySelectorAll(`style[${vy}="${t}"],link[${vy}="${t}"]`);if(!i||i.length===0)return!1;for(let e of i)e.removeAttribute(vy),e instanceof HTMLLinkElement?r.set(e.href.slice(e.href.lastIndexOf(`/`)+1),{usage:0,elements:[e]}):e.textContent&&n.set(e.textContent,{usage:0,elements:[e]});return!0}function Sy(e,t){let n=t.createElement(`link`);return n.setAttribute(`rel`,`stylesheet`),n.setAttribute(`href`,e),n}var Cy=(()=>{class e{doc;appId;nonce;inline=new Map;external=new Map;hosts=new Set;constructor(e,t,n,r={}){this.doc=e,this.appId=t,this.nonce=n,xy(e,t,this.inline,this.external)&&this.hosts.add(e.head)}addStyles(e,t){for(let t of e)this.addUsage(t,this.inline,by);t?.forEach(e=>this.addUsage(e,this.external,Sy))}removeStyles(e,t){for(let t of e)this.removeUsage(t,this.inline);t?.forEach(e=>this.removeUsage(e,this.external))}addUsage(e,t,n){let r=t.get(e);r?r.usage++:t.set(e,{usage:1,elements:[...this.hosts].map(t=>this.addElement(t,n(e,this.doc)))})}removeUsage(e,t){let n=t.get(e);n&&(n.usage--,n.usage<=0&&(yy(n.elements),t.delete(e)))}ngOnDestroy(){for(let[,{elements:e}]of[...this.inline,...this.external])yy(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,by(t,this.doc)));for(let[t,{elements:n}]of this.external)n.push(this.addElement(e,Sy(t,this.doc)))}}removeHost(e){this.hosts.delete(e);for(let t of[...this.inline.values(),...this.external.values()]){let n=[];for(let r of t.elements)r.parentNode===e?r.remove():n.push(r);t.elements=n}}addElement(e,t){return this.nonce&&t.setAttribute(`nonce`,this.nonce),e.appendChild(t)}static ɵfac=function(t){return new(t||e)(la(Ds),la(nc),la(oc,8),la(ac))};static ɵprov=Di({token:e,factory:e.ɵfac})}return e})(),wy={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`},Ty=/%COMP%/g,Ey=`%COMP%`,Dy=`_nghost-${Ey}`,Oy=`_ngcontent-${Ey}`,ky=!0,Ay=new Pi(``,{factory:()=>ky}),jy=new Pi(``);function My(e){return Oy.replace(Ty,e)}function Ny(e){return Dy.replace(Ty,e)}function Py(e,t){return t.map(t=>t.replace(Ty,e))}var Fy=(()=>{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 Iy(e,i,a,this.tracingService,this.cssVarNamespace)}createRenderer(e,t){if(!e||!t)return this.defaultRenderer;let n=this.getOrCreateRenderer(e,t);return n instanceof By?n.applyToHost(e):n instanceof zy&&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 mu.Emulated:r=new By(o,s,t,this.appId,c,i,a,l,this.cssVarNamespace);break;case mu.ShadowDom:return new Ry(o,e,t,i,a,this.nonce,l,this.cssVarNamespace,s);case mu.ExperimentalIsolatedShadowDom:return new Ry(o,e,t,i,a,this.nonce,l,this.cssVarNamespace);default:r=new zy(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)(la(_y),la(tm),la(nc),la(Ay),la(Ds),la(Bs),la(oc),la(sd,8),la(jy,8))};static ɵprov=Di({token:e,factory:e.ɵfac})}return e})(),Iy=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(wy[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 gi(-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 gi(-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=wy[r];i?e.setAttributeNS(i,t,n):e.setAttribute(t,n)}else e.setAttribute(t,n)}removeAttribute(e,t,n){if(n){let r=wy[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&(Hu.DashCase|Hu.Important)?e.style.setProperty(t,n,r&Hu.Important?`important`:``):e.style[t]=n}removeStyle(e,t,n){let r=t.startsWith(`--`);r&&(t=t.replace(`%NS%`,this.cssVarNamespace)),r||n&Hu.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=Rv().getGlobalEventTarget(this.doc,e),!e))throw new gi(-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 Ry=class extends Iy{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=Py(n.id,l).map(e=>e.replace(/%NS%/g,s));for(let e of l){let t=document.createElement(`style`);a&&t.setAttribute(`nonce`,a),t.textContent=e,this.shadowRoot.appendChild(t)}let u=n.getExternalStyles?.();if(u)for(let e of u){let t=Sy(e,r);a&&t.setAttribute(`nonce`,a),this.shadowRoot.appendChild(t)}}nodeOrShadowRoot(e){return e===this.hostEl?this.shadowRoot:e}appendChild(e,t){return super.appendChild(this.nodeOrShadowRoot(e),t)}insertBefore(e,t,n){return super.insertBefore(this.nodeOrShadowRoot(e),t,n)}removeChild(e,t){return super.removeChild(null,t)}parentNode(e){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(e)))}destroy(){this.sharedStylesHost&&this.sharedStylesHost.removeHost(this.shadowRoot)}},zy=class extends Iy{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?Py(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&&Yu.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},By=class extends zy{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=My(l),this.hostAttr=Ny(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}},Vy=class e extends hne{supportsDOMEvents=!0;static makeCurrent(){mne(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=Uy();return t==null?null:Wy(t)}resetBaseElement(){Hy=null}getUserAgent(){return window.navigator.userAgent}getCookie(e){return Hne(document.cookie,e)}},Hy=null;function Uy(){return Hy||=document.head.querySelector(`base`),Hy?Hy.getAttribute(`href`):null}function Wy(e){return new URL(e,document.baseURI).pathname}var Gy=[`alt`,`control`,`meta`,`shift`],Ky={"\b":`Backspace`," ":`Tab`,"":`Delete`,"\x1B":`Escape`,Del:`Delete`,Esc:`Escape`,Left:`ArrowLeft`,Right:`ArrowRight`,Up:`ArrowUp`,Down:`ArrowDown`,Menu:`ContextMenu`,Scroll:`ScrollLock`,Win:`OS`},qy={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},Jy=(()=>{class e extends my{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(()=>Rv().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.`),Gy.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=Ky[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`),Gy.forEach(t=>{if(t!==n){let n=qy[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)(la(Ds))};static ɵprov=Di({token:e,factory:e.ɵfac})}return e})();async function Yy(e,t,n){return dne({rootComponent:e,...Xy(t,n)})}function Xy(e,t){return{platformRef:t?.platformRef,appProviders:[...tb,...e?.providers??[]],platformProviders:eb}}function Zy(){Vy.makeCurrent()}function Qy(){return new Qs}function $y(){return nu(document),document}var eb=[{provide:ac,useValue:Une},{provide:ic,useValue:Zy,multi:!0},{provide:Ds,useFactory:$y}],tb=[{provide:Ua,useValue:`root`},{provide:Qs,useFactory:Qy},{provide:gy,useClass:hy,multi:!0},{provide:gy,useClass:Jy,multi:!0},Fy,{provide:tm,useClass:Cy},{provide:Cy,useExisting:tm},_y,{provide:xp,useExisting:Fy},[]];function nb(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 ob({code:i,why:ib(a.why,e),fix:ib(a.fix,e),docs:o,cause:e.cause,sources:e.sources,data:ib(a.data,e)},s);for(let e of t)e(r,n);return r};n[i]=s}return n}function lb(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 hb=Math.random.bind(Math),gb=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function _b(e=21){let t=``,n=e;for(;n--;)t+=gb[hb()*64|0];return t}var vb=6e4,yb=e=>e,bb=yb,{clearTimeout:xb,setTimeout:Sb}=globalThis;function Cb(e,t){let{post:n,on:r,off:i=()=>{},eventNames:a=[],serialize:o=yb,deserialize:s=bb,resolver:c,bind:l=`rpc`,timeout:u=vb,proxify:d=!0}=t,f=!1,p=new Map,m,h;async function g(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:g}=mb(),_=_b();s.i=_;let ee;async function te(n=s){return u>=0&&(ee=Sb(()=>{try{if(t.onTimeoutError?.call(h,e,r)!==!0)throw Error(`[birpc] timeout on calling "${e}"`)}catch(e){g(e)}p.delete(_)},u),typeof ee==`object`&&(ee=ee.unref?.())),p.set(_,{resolve:d,reject:g,timeoutId:ee,method:e}),await c(n),l}try{t.onRequest?await t.onRequest.call(h,s,te,d):await te()}catch(e){if(t.onGeneralError?.call(h,e)!==!0)throw e;return}finally{xb(ee),p.delete(_)}return l}let _={$call:(e,...t)=>g(e,t,!1),$callOptional:(e,...t)=>g(e,t,!1,!0),$callEvent:(e,...t)=>g(e,t,!0),$callRaw:e=>g(e.method,e.args,e.event,e.optional),$rejectPendingCalls:te,get $closed(){return f},get $meta(){return t.meta},$close:ee,$functions:e};h=d?new Proxy({},{get(t,n){if(Object.hasOwn(_,n))return _[n];if(n===`then`&&!a.includes(`then`)&&!(`then`in e))return;let r=(...e)=>g(n,e,!0);if(a.includes(n))return r.asEvent=r,r;let i=(...e)=>g(n,e,!1);return i.asEvent=r,i}}):_;function ee(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(ne)}function te(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 ne(r,...i){let a;try{a=s(r)}catch(e){if(t.onGeneralError?.call(h,e)!==!0)throw e;return}if(a.t===`q`){let{m:r,a:s,o:u}=a,d,f,p=await(c?c.call(h,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`?h:e,s)}catch(e){f=e}if(a.i){if(f&&t.onFunctionError&&t.onFunctionError.call(h,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(h,e,r,s)!==!0)throw e}try{await n(o({t:`s`,i:a.i,e:f}),...i)}catch(e){if(t.onGeneralError?.call(h,e,r,s)!==!0)throw e}}}else{let{i:e,r:t,e:n}=a,r=p.get(e);r&&(xb(r.timeoutId),n?r.reject(n):r.resolve(t)),p.delete(e)}}return m=r(ne),h}function wb(e,t){return t.safety?t.safety:e===`static`||e===`query`||e==null?`read`:`action`}var Tb=Object.freeze({type:`object`,additionalProperties:!0});function Eb(e){let t=e[`~standard`];if(t.jsonSchema)try{return t.jsonSchema.input({target:`draft-2020-12`})}catch{return Tb}return Tb}function Db(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 kb(e,t){return Ob(e,t)??[e]}function Ab(e){return typeof e==`string`?`'${e}'`:new Pb().serialize(e)}var jb=` _-,;:!?.'"()[]{}@*/\\&#%\`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz`,Mb=(function(){let e=new Uint8Array(128);for(let t=0;t<69;t++)e[jb.charCodeAt(t)]=t+1;for(let t=65;t<=90;t++)e[t]=e[t+32];return e})();function Nb(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})(),Fb=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],Ib=[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],Lb=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`,Rb=[],zb=class{_data=new Bb;_hash=new Bb([...Fb]);_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)Rb[n]=e[t+n]|0;else{let e=Rb[n-15],t=(e<<25|e>>>7)^(e<<14|e>>>18)^e>>>3,r=Rb[n-2],i=(r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10;Rb[n]=t+Rb[n-7]+i+Rb[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),h=u+m+d+Ib[n]+Rb[n],g=p+f;u=l,l=c,c=s,s=o+h|0,o=a,a=i,i=r,r=h+g|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=Bb.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 Vb(e){return new zb().finalize(e).toBase64()}function Hb(e){return Vb(Ab(e))}function Ub(e){return Hb(e)}function Wb(){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 Gb=/^[\w+.-]{2,}:\/\//;function Kb(e){return e.endsWith(`/`)?e:`${e}/`}function qb(e){return(e.endsWith(`/`)?e.slice(0,-1):e)||`/`}function Jb(e,...t){let n=e;for(let e of t)e&&e!==`/`&&(n=n?Kb(n)+e.replace(/^\.?\//,``):e);return n}function Yb(e,t){if(!t||t===`/`||Gb.test(e))return e;let n=qb(t);return e.startsWith(n)?e:Jb(n,e)}function Xb(e,t){let n=e.match(Gb);return t+(n?e.slice(n[0].length):e)}var Zb=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function Qb(e=21){let t=``,n=e;for(;n--;)t+=Zb[Math.random()*64|0];return t}var $b=Symbol.for(`immer-nothing`),ex=Symbol.for(`immer-draftable`),tx=Symbol.for(`immer-state`),nx=[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 rx(e,...t){{let n=nx[e],r=Dx(n)?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}}var ix=Object,ax=ix.getPrototypeOf,ox=`constructor`,sx=`prototype`,cx=`configurable`,lx=`enumerable`,ux=`writable`,dx=`value`,fx=e=>!!e&&!!e[tx];function px(e){return e?gx(e)||Cx(e)||!!e[ex]||!!e[ox]?.[ex]||wx(e)||Tx(e):!1}var mx=ix[sx][ox].toString(),hx=new WeakMap;function gx(e){if(!e||!Ex(e))return!1;let t=ax(e);if(t===null||t===ix[sx])return!0;let n=ix.hasOwnProperty.call(t,ox)&&t[ox];if(n===Object)return!0;if(!Dx(n))return!1;let r=hx.get(n);return r===void 0&&(r=Function.toString.call(n),hx.set(n,r)),r===mx}function _x(e,t,n=!0){vx(e)===0?(n?Reflect.ownKeys(e):ix.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function vx(e){let t=e[tx];return t?t.type_:Cx(e)?1:wx(e)?2:Tx(e)?3:0}var yx=(e,t,n=vx(e))=>n===2?e.has(t):ix[sx].hasOwnProperty.call(e,t),bx=(e,t,n=vx(e))=>n===2?e.get(t):e[t],xx=(e,t,n,r=vx(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function Sx(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var Cx=Array.isArray,wx=e=>e instanceof Map,Tx=e=>e instanceof Set,Ex=e=>typeof e==`object`,Dx=e=>typeof e==`function`,Ox=e=>typeof e==`boolean`;function kx(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var Ax=e=>Ex(e)?e?.[tx]:null,jx=e=>e.copy_||e.base_,Mx=e=>e.modified_?e.copy_:e.base_;function Nx(e,t){if(wx(e))return new Map(e);if(Tx(e))return new Set(e);if(Cx(e))return Array[sx].slice.call(e);let n=gx(e);if(t===!0||t===`class_only`&&!n){let t=ix.getOwnPropertyDescriptors(e);delete t[tx];let n=Reflect.ownKeys(t);for(let r=0;r1&&ix.defineProperties(e,{set:Ix,add:Ix,clear:Ix,delete:Ix}),ix.freeze(e),t&&_x(e,(e,t)=>{Px(t,!0)},!1),e)}function Fx(){rx(2)}var Ix={[dx]:Fx};function Lx(e){return e===null||!Ex(e)||ix.isFrozen(e)}var Rx=`MapSet`,zx=`Patches`,Bx=`ArrayMethods`,Vx={};function Hx(e){let t=Vx[e];return t||rx(0,e),t}var Ux=e=>!!Vx[e];function Wx(e,t){Vx[e]||(Vx[e]=t)}var Gx,Kx=()=>Gx,qx=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:Ux(Rx)?Hx(Rx):void 0,arrayMethodsPlugin_:Ux(Bx)?Hx(Bx):void 0});function Jx(e,t){t&&(e.patchPlugin_=Hx(zx),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Yx(e){Xx(e),e.drafts_.forEach(Qx),e.drafts_=null}function Xx(e){e===Gx&&(Gx=e.parent_)}var Zx=e=>Gx=qx(Gx,e);function Qx(e){let t=e[tx];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function $x(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[tx].modified_&&(Yx(t),rx(4)),px(e)&&(e=eS(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[tx].base_,e,t)}else e=eS(t,n);return tS(t,e,!0),Yx(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===$b?void 0:e}function eS(e,t){if(Lx(t))return t;let n=t[tx];if(!n)return lS(t,e.handledSet_,e);if(!rS(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);sS(n,e)}return n.copy_}function tS(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Px(t,n)}function nS(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var rS=(e,t)=>e.scope_===t,iS=[];function aS(e,t,n,r){let i=jx(e),a=e.type_;if(r!==void 0&&bx(i,r,a)===t){xx(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;_x(i,(e,n)=>{if(fx(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??iS;for(let e of o)xx(i,e,n,a)}function oS(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!rS(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=Mx(i);aS(e,i.draft_??i,a,n),sS(i,r)})}function sS(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)}nS(e)}}function cS(e,t,n){let{scope_:r}=e;if(fx(n)){let i=n[tx];rS(i,r)&&i.callbacks_.push(function(){vS(e),aS(e,n,Mx(i),t)})}else px(n)&&e.callbacks_.push(function(){let i=jx(e);e.type_===3?i.has(n)&&lS(n,r.handledSet_,r):bx(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&lS(bx(e.copy_,t,e.type_),r.handledSet_,r)})}function lS(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||fx(e)||t.has(e)||!px(e)||Lx(e)?e:(t.add(e),_x(e,(r,i)=>{if(fx(i)){let t=i[tx];rS(t,n)&&(xx(e,r,Mx(t),e.type_),nS(t))}else px(i)&&lS(i,t,n)}),e)}function uS(e,t){let n=Cx(e),r={type_:+!!n,scope_:t?t.scope_:Kx(),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=dS;n&&(i=[r],a=fS);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var dS={get(e,t){if(t===tx)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=jx(e);if(!yx(i,t,e.type_))return hS(e,i,t);let a=i[t];if(e.finalized_||!px(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&kx(t))return a;if(a===pS(e.base_,t)||mS(e,t,a)){vS(e);let n=e.type_===1?+t:t,r=bS(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in jx(e)},ownKeys(e){return Reflect.ownKeys(jx(e))},set(e,t,n){let r=gS(jx(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=pS(jx(e),t),i=r?.[tx];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.delete(t),!0;if(Sx(n,r)&&(n!==void 0||yx(e.base_,t,e.type_)))return!0;vS(e),_S(e)}return e.copy_[t]===n&&(n!==void 0||yx(e.copy_,t,e.type_))||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_.set(t,!0),cS(e,t,n),!0)},deleteProperty(e,t){return vS(e),pS(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),_S(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=jx(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[ux]:!0,[cx]:e.type_!==1||t!==`length`,[lx]:r[lx],[dx]:n[t]}},defineProperty(){rx(11)},getPrototypeOf(e){return ax(e.base_)},setPrototypeOf(){rx(12)}},fS={};for(let e in dS){let t=dS[e];fS[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}fS.deleteProperty=function(e,t){return isNaN(parseInt(t))&&rx(13),fS.set.call(this,e,t,void 0)},fS.set=function(e,t,n){return t!==`length`&&isNaN(parseInt(t))&&rx(14),dS.set.call(this,e[0],t,n,e[0])};function pS(e,t){let n=e[tx];return(n?jx(n):e)[t]}function mS(e,t,n){return e.type_!==1||!e.allIndicesReassigned_||e.assigned_?.get(t)||!px(n)||n[tx]?!1:e.baseRefs_.has(n)}function hS(e,t,n){let r=gS(t,n);return r?dx in r?r[dx]:r.get?.call(e.draft_):void 0}function gS(e,t){if(!(t in e))return;let n=ax(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=ax(n)}}function _S(e){e.modified_||(e.modified_=!0,e.parent_&&_S(e.parent_))}function vS(e){e.copy_||=(e.assigned_=new Map,Nx(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var yS=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(Dx(e)&&!Dx(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}Dx(t)||rx(6),n!==void 0&&!Dx(n)&&rx(7);let r;if(px(e)){let i=Zx(this),a=bS(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?Yx(i):Xx(i)}return Jx(i,n),$x(r,i)}if(!e||!Ex(e)){if(r=t(e),r===void 0&&(r=e),r===$b&&(r=void 0),this.autoFreeze_&&Px(r,!0),n){let t=[],i=[];Hx(zx).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}rx(1,e)},this.produceWithPatches=(e,t)=>{if(Dx(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]},Ox(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),Ox(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),Ox(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){px(e)||rx(8),fx(e)&&(e=xS(e));let t=Zx(this),n=bS(t,e,void 0);return n[tx].isManual_=!0,Xx(t),n}finishDraft(e,t){let n=e&&e[tx];(!n||!n.isManual_)&&rx(9);let{scope_:r}=n;return Jx(r,t),$x(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=Hx(zx).applyPatches_;return fx(e)?r(e,t):this.produce(e,e=>r(e,t))}};function bS(e,t,n,r){let[i,a]=wx(t)?Hx(Rx).proxyMap_(t,n):Tx(t)?Hx(Rx).proxySet_(t,n):uS(t,n);return(n?.scope_??Kx()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?oS(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 xS(e){return fx(e)||rx(10,e),SS(e)}function SS(e){if(!px(e)||Lx(e))return e;let t=e[tx],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Nx(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Nx(e,!0);let i=n;return Tx(n)&&(n=new Set),_x(i,(e,t)=>{xx(n,e,SS(t))},r),t&&(t.finalized_=!1),n}function CS(){nx.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=Ax(bx(e,n.key_)),i=bx(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||yx(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=bx(o,e,c),f=bx(s,e,c),p=l?yx(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===$b?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(Tx(e))return new Set(Array.from(e).map(u));let t=Object.create(ax(e));for(let n in e)t[n]=u(e[n]);return yx(e,ex)&&(t[ex]=e[ex]),t}function d(e){return fx(e)?u(e):e}Wx(zx,{applyPatches_:l,generatePatches_:i,generateReplacementPatches_:c,getPath:e})}globalThis.Iterator?.from;var wS=new yS,TS=wS.produce,ES=wS.produceWithPatches.bind(wS),DS=wS.applyPatches.bind(wS),OS=1e3;function kS(e,t){if(e.add(t),e.size>OS){let t=e.values().next().value;t!==void 0&&e.delete(t)}}function AS(e){let{enablePatches:t=!1}=e;t&&CS();let n=Wb(),r=e.initialValue,i=new Set;return{on:n.on,value:()=>r,patch:(e,t=Qb())=>{i.has(t)||(CS(),r=DS(r,e),kS(i,t),n.emit(`updated`,r,void 0,t))},mutate:(e,a=Qb())=>{if(!i.has(a)){if(kS(i,a),t){let[t,i]=ES(r,e);if(t===r)return;r=t,n.emit(`updated`,r,i,a)}else{let t=TS(r,e);if(t===r)return;r=t,n.emit(`updated`,r,void 0,a)}}},syncIds:i}}var jS=typeof self==`object`?self:globalThis,MS=new Set([`Error`,`EvalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`,`AggregateError`]),NS=new Set([`Boolean`,`Number`,`String`,`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float16Array`,`Float32Array`,`Float64Array`,`BigInt64Array`,`BigUint64Array`]);function PS(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=MS.has(e)?jS[e]:void 0;return n(new(r??jS.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`&&NS.has(a))return n(new jS[a](o),i);throw TypeError(`unable to deserialize unsafe or unknown type: ${String(a)}`)};return r}function FS(e){return PS(new Map,e)(0)}var IS=``,{toString:LS}={},{keys:RS}=Object;function zS(e){let t=typeof e;if(t!==`object`||!e)return[0,t];let n=LS.call(e).slice(8,-1);switch(n){case`Array`:return[1,IS];case`Object`:return[2,IS];case`Date`:return[3,IS];case`RegExp`:return[4,IS];case`Map`:return[5,IS];case`Set`:return[6,IS];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]}function BS([e,t]){return e===0&&(t===`function`||t===`symbol`)}function VS(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]=zS(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 RS(r))(e||!BS(zS(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||!(BS(zS(n))||BS(zS(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!BS(zS(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a}function HS(e,t={}){let n=[];return VS(!(t.json||t.lossy),!!t.json,new Map,n)(e),n}var{parse:US,stringify:WS}=JSON,GS={json:!0,lossy:!0};function KS(e){return FS(US(e))}function qS(e){return WS(HS(e,GS))}function JS(e){return FS(e)}function YS(e){return qS(e)}function XS(e){return KS(e)}var ZS=256,QS=class extends Error{name=`StreamClosedError`};function $S(e={}){let t=e.id??Qb(),n=Math.max(0,e.replayWindow??0),r=Wb(),i=new AbortController,a=[],o=!1,s=0;function c(e){if(o)throw new QS(`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=tC(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 eC(e={}){let t=e.id??Qb(),n=Math.max(1,e.highWaterMark??ZS),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 h(){o||a||(o=!0,e.onCancel?.(),m(void 0))}function g(){return u||(u=new ReadableStream({start(e){l=e,f()},cancel(){h()}}),u)}return{id:t,get cancelled(){return o},get done(){return a},get lastSeenSeq(){return i},get readable(){return g()},cancel:h,_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 h(),Promise.resolve({value:void 0,done:!0})}}}}}function tC(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 nC=128;function rC(e){return e.replace(/[^\w-]+/g,`_`).slice(0,nC)}var iC=`modulepreload`,aC=function(e,t){return new URL(e,t).href},oC={},sC=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=aC(t,n),t=s(t),t in oC)return;oC[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`:iC,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)})},cC=`__connection.json`,lC=`__DEVFRAME_CONNECTION__`,uC=`x-birpc-session`,dC=`__rpc-dump/index.json`,fC=`devframe:services`,pC=`devframe_otp`,mC=`devframe_auth_token`;ub.postMessage.remoteAssetsError;var hC=class{cacheMap=new Map;options;keySerializer;constructor(e){this.options=e,this.keySerializer=e.keySerializer||(e=>Ub(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()}},gC=pb({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 _C(e){if(e.agent&&e.jsonSerializable===!1)throw gC.DF0019({name:e.name});e.agent&&!e.jsonSerializable&&(e.jsonSerializable=!0)}async function vC(e,t){let n=e[`~standard`].validate(t);return n instanceof Promise?await n:n}function yC(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 bC(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 CC(e,t){let n=e.handler;if(!n){let r=await SC(e,t);if(!r.handler)throw gC.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 bC(e.name,r,t),o=await a(...n);return await xC(e.name,i,o)}}var wC=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 CC(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 gC.DF0021({name:e.name});_C(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 gC.DF0022({name:e.name});_C(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 CC(this.definitions.get(e),this.context)}getSchema(e){let t=this.definitions.get(e);if(!t)throw gC.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 TC(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 DC(t,`undefined`,r,e);return n}return i!==null&&EC(i,r,e,t),n})}function EC(e,t,n,r){if(typeof e==`bigint`)throw DC(r,`BigInt`,t,n);if(typeof e!=`object`)return;if(e instanceof Map)throw DC(r,`Map`,t,n);if(e instanceof Set)throw DC(r,`Set`,t,n);if(e instanceof Date)throw DC(r,`Date`,t,n);if(Array.isArray(e))return;let i=Object.getPrototypeOf(e);if(i!==null&&i!==Object.prototype)throw DC(r,e.constructor?.name??`class instance`,t,n)}function DC(e,t,n,r){let i=OC(n,r);return gC.DF0020({name:e||``,type:t,path:i})}function OC(e,t){return Array.isArray(e)?`[${t}]`:t===``?``:t}var kC=`__DEVFRAME_CONNECTION_META__`,AC=`__DEVFRAME_CONNECTION_AUTH_TOKEN__`;function jC(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 MC(){return jC(lC)}function NC(){return jC(kC)}function PC(e){if(e)return e;try{let e=localStorage.getItem(AC);if(e)return e}catch{}return jC(AC)}function FC(e){globalThis[lC]=e,globalThis[kC]={...e.connectionMeta,baseUrl:e.metaBaseUrl},e.authToken&&IC(e.authToken)}function IC(e){try{localStorage.setItem(AC,e)}catch{}globalThis[AC]=e;let t=MC();t&&(globalThis[lC]={...t,authToken:e})}function LC(e){let t=Yb(cC,e);try{return new URL(t,globalThis.location?.href).href}catch{return t}}function RC(e,t){return t&&t!==e.authToken?{...e,authToken:t}:e}function zC(){let e=MC();if(e)return RC(e,PC()??e.authToken??e.connectionMeta.authToken);let t=NC();if(t)return{connectionMeta:t,metaBaseUrl:t.baseUrl??LC(`./`),authToken:PC(t.authToken)}}async function BC(e={}){if(e.connection){let t=RC(e.connection,PC(e.authToken??e.connection.authToken??e.connection.connectionMeta.authToken));return FC(t),t}let t=Array.isArray(e.baseURL)?e.baseURL:[e.baseURL??`./`];if(e.connectionMeta){let n={connectionMeta:e.connectionMeta,metaBaseUrl:LC(t[0]??`./`),authToken:PC(e.authToken??e.connectionMeta.authToken)};return FC(n),n}let n=zC();if(n){let t=RC(n,PC(e.authToken??n.authToken??n.connectionMeta.authToken));return FC(t),t}let r=[];for(let n of t){let t=Yb(cC,n),i=LC(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:PC(e.authToken??r.authToken)};return FC(o),o}catch(e){r.push(e)}}throw Error(`Failed to get connection meta from ${t.join(`, `)}`,{cause:r})}var VC=class extends Error{name=`DevframeConnectionError`;kind;constructor(e,t,n){super(t,n),this.kind=e}};function HC(e=pC){try{let t=globalThis.location?.hash?.replace(/^#/,``)??``;return new URLSearchParams(t).get(e)||void 0}catch{return}}function UC(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 WC(e=pC){let t=HC(e);return t&&UC(e),t}async function GC(e,t={}){let n=WC(t.param??`devframe_otp`);return n?e.isTrusted?!0:e.requestTrustWithCode(n):!1}function KC(e){let t={},n=new WeakMap,r,i=()=>(r??=e.sharedState.get(fC,{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 qC(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:ub.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:ub.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=AS({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(ub.client.isTrustedUpdated,e=>{e&&!n&&(n=!0,d())})}})}}}var JC=new Map;function YC(e=JC){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?TC(n,r??``):`s:${YS(n)}`},deserialize:e=>{let n=e.startsWith(`s:`)?XS(e.slice(2)):JSON.parse(e);return n.t===`q`&&n.i&&n.m&&t.set(n.i,n.m),n}}}function XC(){}function ZC(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 QC(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 $C(e){let{onConnected:t=XC,onError:n=XC,onDisconnected:r=XC,definitions:i,fetch:a=globalThis.fetch.bind(globalThis)}=e,o=e.url;e.authToken&&(o=`${o}${o.includes(`?`)?`&`:`?`}${mC}=${encodeURIComponent(e.authToken)}`);let s=YC(i),c=new AbortController,l=!1,u,d,f,p,m=new Promise((e,t)=>{f=e,p=t});m.catch(()=>{});function h(e){l||(l=!0,p(e),n(e),r())}function g(){l||(l=!0,p(Error(`Devframe SSE stream closed`)),r())}function _(e,n){if(e===`session`){f(n),t();return}u?.(n)}async function ee(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=ZC(r);if(!e)break;r=e.rest;let{event:t,data:n}=QC(e.frame);n.length>0&&_(t,n.join(` -`))}}g()}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 ee(e.body)}catch(e){if(c.signal.aborted){g();return}h(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`,[uC]: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 ew(e,t){let{channel:n,rpcOptions:r={}}=t;return Cb(e,{...n,timeout:-1,...r,proxify:!1})}function tw(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(ub.client.connectionStatus,e,n)}let p=new Set;function m(e){for(let t of[...p])t.reject(e)}function h(){return l===`disconnected`||l===`error`?new VC(`connection`,`[devframe] Not connected to the devframe server`,{cause:u??void 0}):l===`unauthorized`?new VC(`auth`,`[devframe] Not authorized by the devframe server`,{cause:u??void 0}):null}function g(e,t){return new Promise((n,r)=>{let a=!1,o,c={reject(e){a||(l(),i.emit(ub.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 VC(`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(ub.client.error,n,t),r(n)})})}let _=new Map;for(let e of r.jsonSerializableMethods??[])_.set(e,{jsonSerializable:!0});let ee=e.createChannel({definitions:_,onError(e){f(`error`,e),i.emit(ub.client.connectionError,e),m(new VC(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){l!==`error`&&f(`disconnected`),m(new VC(`connection`,`[devframe] Disconnected from the devframe server`,{cause:u??void 0}))}}),te=ew(a.functions,{channel:ee,rpcOptions:o});a.register({name:ub.broadcast.authRevoked,type:`event`,handler:()=>{c=!1;let e=new VC(`auth`,`[devframe] The devframe server revoked this client's trust`);f(`unauthorized`,e),i.emit(ub.client.connectionError,e),m(e),i.emit(ub.client.isTrustedUpdated,!1)}});let ne=n;async function re(e){ne=e;let t=await te.$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 VC(`auth`,`[devframe] The devframe server refused this client's credentials`);f(`unauthorized`,e),i.emit(ub.client.connectionError,e)}return i.emit(ub.client.isTrustedUpdated,c),t.isTrusted}async function ie(e){let t=(await te.$call(`anonymous:devframe:auth:exchange`,{code:e,ua:navigator.userAgent,origin:location.origin}))?.authToken??null;return t&&(ne=t,c=!0,d.resolve(!0),f(`connected`),i.emit(ub.client.isTrustedUpdated,!0)),t}async function ae(e={}){await te.$call(`anonymous:devframe:auth:request-code`,{ua:navigator.userAgent,origin:location.origin,...e.reissue?{reissue:!0}:{}})}async function oe(){return c?!0:re(ne??``)}async function se(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:oe,requestTrustWithToken:re,requestTrustWithCode:ie,requestAuthCode:ae,ensureTrusted:se,call:(...e)=>{let t=String(e[0]),n=h();return n?(i.emit(ub.client.error,n,t),Promise.reject(n)):g(te.$call(...e),t)},callEvent:(...e)=>{let t=h();if(t){i.emit(ub.client.error,t,String(e[0]));return}return te.$callEvent(...e)},callOptional:(...e)=>{let t=String(e[0]),n=h();return n?(i.emit(ub.client.error,n,t),Promise.reject(n)):g(te.$callOptional(...e),t)},close:()=>{ee.close()}}}function nw(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 rw(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=nw(n.sse,r??`./`,location);return tw({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>$C({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 iw(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:aw(r)?iw(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function aw(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function ow(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function sw(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function cw(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function lw(e){if(e.error)throw iw(e.error);return e.output}function uw(e){return e.some(e=>e!=null)}function dw(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function fw(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?JS(e):e}function a(e,t){return i(dw(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 cw(r)?lw(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(ow(r)){if(uw(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(sw(r)){let e=Ub(n),i=r.records[e];if(i)return lw(await s(i,r.serialization));if(r.fallback)return lw(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!uw(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 pw(e){let t=fw(await e.fetchJsonFromBases(dC),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 mw=``;function hw(e,t){return`${e}${mw}${t}`}function gw(e){let t=new Map,n=new Map;e.client.register({name:ub.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(hw(e,n))?._push(r,i)}}),e.client.register({name:ub.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=hw(e,n),a=t.get(i);a&&(a._end(r),t.delete(i))}}),e.client.register({name:ub.broadcast.streamingUploadCancel,type:`event`,handler(e,t){let r=hw(e,t),i=n.get(r);i&&(i.abort(`server cancelled upload`),n.delete(r))}}),e.events.on(ub.client.isTrustedUpdated,n=>{if(n)for(let[n,r]of t){if(r.cancelled||r.done)continue;let t=n.indexOf(mw);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=hw(n,r),o=t.get(a);if(o)return o;let s=eC({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(ub.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=hw(t,r),a=n.get(i);if(a)return a;let o=$S({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 _w(){}var vw=new Map;function yw(e){let t=e.url;e.authToken&&(t=`${t}?${mC}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=_w,onError:i=_w,onDisconnected:a=_w,definitions:o=vw}=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=YC(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 bw(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 Xb(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function xw(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=bw(n.websocket,r??`./`,location);return tw({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>yw({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 Sw(e){return e.includes(`:`)}function Cw(e,t){return Sw(t)?t:`${e}:${t}`}function ww(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 Tw(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 ww(a)}function Ew(e,t){return{global:Tw(e,t,`global`),project:Tw(e,t,`project`)}}function Dw(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(Sw(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(Cw(t,n),...r)),callEvent:((n,...r)=>e.callEvent(Cw(t,n),...r)),callOptional:((n,...r)=>e.callOptional(Cw(t,n),...r)),sharedState:((n,r)=>e.sharedState.get(Cw(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe(Cw(t,n),r,i),upload:(n,r)=>e.streaming.upload(Cw(t,n),r)}},settings:Ew(e,t),scope:e.scope}}function Ow(){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 kw(e,t={}){let n=t.modelContext??Ow();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=rC(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=wb(t.type,n),u=r.registerTool({name:o,description:n.description,inputSchema:Db(t.args),annotations:{title:n.title??t.name,readOnlyHint:l===`read`,destructiveHint:l===`destructive`},execute:n=>Aw(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 Aw(e,t,n){try{let r=kb(n,e.args?.length);return{content:[{type:`text`,text:jw(await(await CC(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:Mw(e)}]}}}function jw(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function Mw(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 Nw(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 Pw(e={}){let{baseURL:t=`./`,rpcOptions:n={},cacheOptions:r=!1}=e,i=Wb(),a=Array.isArray(t)?t:[t],o=await BC(e),{connectionMeta:s,metaBaseUrl:c,authToken:l}=o,u=a[0]??`./`;try{u=new URL(`.`,c).href}catch{}let d=new hC({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),f={rpc:void 0},p=new wC(f),m=e.webmcp===!1?void 0:kw(p),h,g=!1,_=0,ee;function te(){_++,ee=void 0,d.clear(),r===!0&&d.updateOptions({functions:[]})}r&&(p.register({name:ub.broadcast.cacheInvalidate,type:`event`,handler:te}),i.on(ub.client.connectionStatus,te),i.on(ub.client.isTrustedUpdated,te));async function ne(e){let t=[u,...a.filter(e=>e!==u)].filter(e=>e!=null),n=[];for(let r of t)try{return await fetch(Yb(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 re=e.callTimeout??0,ie=re>0?re:1/0,ae,oe={authToken:l,connectionMeta:s,metaBaseUrl:c,events:i,clientRpc:p,callTimeout:e.callTimeout,rpcOptions:{...n,async onRequest(e,t,i){let a=performance.now()+ie;if(await n.onRequest?.call(this,e,t,i),r===!0&&e.i&&ae.isTrusted&&!e.m.startsWith(`anonymous:`)&&e.m!==`devframe:rpc:cacheable-functions`){function t(){if(performance.now()>=a)throw new VC(`timeout`,`[devframe] RPC call "${e.m}" timed out after ${re}ms`)}for(;!ee&&(t(),!(g||ae.status!==`connected`));){let e=_;ee=ae.callOptional(`devframe:rpc:cacheable-functions`).then(t=>{e===_&&d.updateOptions({functions:t??[]})}).catch(t=>{throw e===_&&(ee=void 0),t}),await ee}await ee,t()}let o=_;if(r&&e.i&&!g&&ae.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&&d.apply(e,n)}else await t(e)}}},se=Nw(e.transport??`auto`,s);ae=se===`static`?await pw({fetchJsonFromBases:ne}):se===`sse`?rw({...oe,sseOptions:e.sseOptions}):xw({...oe,wsOptions:e.wsOptions});let ce;try{ce=new BroadcastChannel(`devframe-auth`)}catch{}let le,ue=!1;function de(e){return((...t)=>ue||!le?e(...t):le.then(()=>e(...t)))}function fe(){g=!0,te();try{h?.(),m?.()}finally{try{ce?.close()}finally{ae.close?.()}}}let pe={events:i,get isTrusted(){return ae.isTrusted},get status(){return ae.status},get connectionError(){return ae.connectionError},get transport(){return ae.transport??se},get connection(){return o},connectionMeta:s,ensureTrusted:ae.ensureTrusted,requestTrust:ae.requestTrust,requestTrustWithToken:async e=>(IC(e),o={...o,authToken:e},ae.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await ae.requestTrustWithCode(e);if(!t)return!1;IC(t),o={...o,authToken:t};try{ce?.postMessage({type:`auth-update`,authToken:t})}catch{}return!0},requestAuthCode:e=>ae.requestAuthCode(e),call:de(ae.call),callEvent:de(ae.callEvent),callOptional:de(ae.callOptional),client:p,sharedState:void 0,services:void 0,streaming:void 0,cacheManager:d,scope:void 0,close:fe};pe.sharedState=qC(pe),pe.streaming=gw(pe),pe.services=KC(pe);let me=new Map;pe.scope=(e=>{if(!e)return pe;let t=me.get(e);return t||(t=Dw(pe,e),me.set(e,t)),t}),f.rpc=pe;function he(){try{return typeof window<`u`&&window.self===window.top}catch{return!1}}async function ge(){if(e.simpleAuth!==!1&&he()&&typeof globalThis.prompt==`function`)for(await pe.requestAuthCode().catch(()=>{});!pe.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 pe.requestTrustWithCode(t))return}}async function _e(){let t=await ae.requestTrust(),n=e.otpParam??`devframe_otp`,r=n?await GC(pe,{param:n}):!1;t||r||pe.isTrusted||await ge()}return le=_e().then(()=>{ue=!0},()=>{ue=!0}),s.mcp&&sC(async()=>{let{setupBrowserAgentRpcBridge:e}=await import(`./browser-agent-rpc-KH4HHvHf-Cnuzvx9N.js`);return{setupBrowserAgentRpcBridge:e}},[],import.meta.url).then(({setupBrowserAgentRpcBridge:e})=>{g||(h=e(pe))}).catch(()=>{}),ce&&(ce.onmessage=e=>{e.data?.type===`auth-update`&&e.data.authToken&&pe.requestTrustWithToken(e.data.authToken)}),pe}var Fw=Pw,Iw=[`components`,`injectors`,`signals`,`ngrx`,`tanstackQuery`,`forms`,`router`,`pipes`,`http`,`analog`,`capacitor`,`errors`,`plugins`],Lw=[`angular`,`ngrx`,`analog`,`angular-native`,`nativescript`,`capacitor`];function Rw(e){return`pangular:${e}`}var zw=[`forms`,`router`,`ngrx`,`http`,`analog`,`components`,`tanstackQuery`,`plugins`],Bw={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},capacitorCalls:{default:200,min:10,max:2e3},idleAfterMs:{default:6e4,min:0,max:6e5}},Vw={"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`,"cache-off-or-filter":`the transfer cache is off, or its filter (or another withHttpTransferCacheOptions setting) left it out`},Hw=[[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 Uw(e){return Hw.some(([t])=>t===e)}var Ww=/^[a-z][a-z0-9-]{0,39}$/;function Gw(e,t){let n=t.plugins?.[e],r=t.inspectors.plugins&&Ww.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 Kw=`pangular`,qw={mod:`Mod`,ctrl:`Ctrl`,control:`Ctrl`,meta:`Meta`,cmd:`Meta`,command:`Meta`,alt:`Alt`,option:`Alt`,opt:`Alt`,shift:`Shift`},Jw=[`Mod`,`Ctrl`,`Meta`,`Alt`,`Shift`];function Yw(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=qw[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[...Jw.filter(e=>n.has(e)),r].join(`+`)}function Xw(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 Zw(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 Qw=[{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`}],$w=1e4;function eT(e){return Qw.filter(t=>!(`inspector`in t)||e.inspectors[t.inspector])}var tT={components:`a component instance, by its id in the component tree`,injectors:`a component's element injector, by the component's id`,forms:`a form, by its id`},nT=200;function rT(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 iT(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=e=>{let n=t.get(e)?.trim();return n&&n.length<=nT?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 aT=[{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 oT(e){let t=eT(e).map(e=>({id:`tab:${e.id}`,title:`Go to ${e.label}`,group:`Go to`,keywords:`tab open`})),n=aT.filter(t=>!t.inspector||e.inspectors[t.inspector]).map(({inspector:e,...t})=>t);return[...t,...n]}function sT(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function cT(e,t){return typeof e==`boolean`?e:t}var lT=100,uT=100;function dT(e){if(!Array.isArray(e))return[];let t=e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e&&e.length<=uT);return[...new Set(t)].slice(0,lT)}function fT(e,t){let{default:n,min:r,max:i}=Bw[t];return typeof e!=`number`||!Number.isFinite(e)?n:Math.min(i,Math.max(r,Math.round(e)))}function pT(e,t){return Object.fromEntries(e.map(e=>[e,t(e)]))}function mT(e){let t=sT(e),n=sT(t.agent),r=sT(t.inspectors),i=sT(n.tools),a=sT(t.actions),o=cT(t.actions,!0),s=sT(t.redaction),c=sT(t.limits),l=pT(Iw,e=>cT(r[e],!0));return{inspectors:l,agent:{readOnly:cT(n.readOnly,!1),tools:pT(Iw,e=>l[e]&&cT(i[e],!0)),browserTools:cT(n.browserTools,!1)},actions:pT(zw,e=>l[e]&&cT(a[e],o)),redaction:{secretNames:dT(s.secretNames),unmask:dT(s.unmask)},limits:Object.fromEntries(Object.keys(Bw).map(e=>[e,fT(c[e],e)])),popup:{hotkey:yT(sT(t.popup).hotkey)},plugins:vT(t.plugins),lint:{rules:gT(t.lint)}}}var hT=200;function gT(e){let t=sT(sT(e).rules),n={};for(let[e,r]of Object.entries(t).slice(0,hT))typeof r==`boolean`&&(n[e]=r);return n}var _T=100;function vT(e){let t={};for(let[n,r]of Object.entries(sT(e)).slice(0,_T)){if(!Ww.test(n))continue;if(typeof r==`boolean`){t[n]={enabled:r,tools:!0,actions:!0};continue}let e=sT(r);r!==void 0&&Object.keys(e).length&&(t[n]={enabled:cT(e.enabled,!0),tools:cT(e.tools,!0),actions:cT(e.actions,!0)})}return t}function yT(e){return e===!1?!1:Yw(e)??`Alt+Shift+P`}function bT(e){let t=e?.configs;return mT(t?.[Kw])}function xT(e){return`${{forms:`Writing to forms`,router:`Navigating and clearing navigations`,ngrx:`Restoring NgRx state and dispatching actions`,http:`Changing HTTP mock rules and SSR overrides, and clearing HTTP calls`,analog:`Calling API routes and clearing server calls`,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 ST=[`pangular:build-meta`],CT={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`},wT={forms:`Form writes`,router:`Navigation`,ngrx:`NgRx restore and dispatch`,http:`HTTP mocking`,analog:`Analog API calls`,components:`Component edits`,tanstackQuery:`TanStack Query invalidate and refetch`,plugins:`Plugin actions`},TT={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`,capacitorCalls:e=>`${e} Capacitor plugin calls`,idleAfterMs:e=>e?`idle ${e/1e3} s after the last agent call`:`never idle`};function ET(e){let t=[],n=(e,n)=>{n.length&&t.push({label:e,value:n.join(`, `)})},r=Iw.filter(t=>e.inspectors[t]);n(`Inspectors off`,Iw.filter(t=>!e.inspectors[t]).map(e=>CT[e])),n(`Agent`,e.agent.readOnly?[`Read-only`]:[]),n(`Hidden from the agent`,r.filter(t=>!e.agent.tools[t]).map(e=>CT[e])),n(`Blocked actions`,zw.filter(t=>e.inspectors[t]&&!e.actions[t]).map(e=>wT[e])),n(`Extra secret names`,e.redaction.secretNames),n(`Unmasked names`,e.redaction.unmask),n(`Limits`,Object.keys(Bw).filter(t=>e.limits[t]!==Bw[t].default).map(t=>TT[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 DT(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 OT(e){return!e.tags.length&&!e.directives.length&&!e.text}function kT(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 AT={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 jT(e){let t=/^(\d+)\.(\d+)/.exec(e.trim());return t?`${t[1]}.${t[2]}`:e.trim()}function MT(e){let t=/^(\d+)(?:\.(\d+))?/.exec(e.trim());return t?[Number(t[1]),Number(t[2]??0)]:null}function NT(e,t){let n=MT(e),r=MT(t);return!n||!r?!1:n[0]===r[0]?n[1]>=r[1]:n[0]>r[0]}function PT(e,t){return e?.capabilities?.[t]===!1}function FT(e,t){let n=AT[e],r=`${n.subject} needs Angular ${n.since} or later`;if(!t)return`${r}; this page's Angular version is unknown.`;let i=jT(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}.`}var IT=/^on (viewport|interaction|hover)\b/;function LT(e){let t=e.filter(e=>!/^(prefetch|hydrate) /.test(e));return t.length>0&&t.every(e=>IT.test(e))}function RT(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(LT(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 zT=`pangular-page-id`,BT=null;function VT(e){BT=e}function HT(){if(BT)return BT;try{return new URLSearchParams(location.search).get(`pageId`)||(window.top===window?null:sessionStorage.getItem(zT)||null)}catch{return null}}function UT(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 WT(e,t){return e?t?e.pages?.[t]??null:e:null}function GT(e,t){return e?t?e.pages?.[t]??null:e.graph??null:null}function KT(){return{functions:[...ST]}}function qT(e,t,n){return e?e.scope(`pangular`).rpc.call(t,...n===void 0?[]:[n]):Promise.resolve(null)}function JT(e,t,n){return qT(e,t,n).then(e=>e,()=>null)}function YT(e){return e?.connectionMeta.backend===`static`}function XT(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 ZT(e=globalThis){delete e.__DEVFRAME_CONNECTION__,delete e.__DEVFRAME_CONNECTION_META__}function QT(e){return e.split(`@`)[1]??``}var $T={signal:`Signal Forms`,reactive:`Reactive`,template:`Template-driven`},eE={own:`validator`,directive:`template attribute`,tree:`cross-field rule`,async:`async`,parse:`parse`,submission:`server`,schema:`schema`,manual:`setErrors`},tE=JT,nE={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 rE(e){return nE[e]??e}var iE=`https://pangular-inspector.dev/security/#opt-fields-in-or-out`;async function aE(e,t){return await tE(e,`request-form-action`,t)??{ok:!1,error:`The devtools server did not answer.`}}function oE(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 sE=/"(?:[^"\\\n]|\\.)*"|`([^`\n]*)`|\*\*/g;function cE(e){return(e??``).replace(/^_Labels, paths.*_\n\n/,``).replace(sE,(e,t)=>t??(e===`**`?``:e))}function lE(e){return bT(e?.connectionMeta)}function uE(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?[...e]:void 0}function dE(e,t){if(!t||typeof t!=`object`)return e;let n=uE(t.secretNames),r=uE(t.unmask);return!n||!r?e:{...e,redaction:{secretNames:n,unmask:r}}}function fE(e,t){return lE(e).actions[t]}var pE={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 mE(e){return pE[e]}var hE=`https://pangular-inspector.dev/getting-started/configuration/#inspectors-and-agent-tools`;function gE(e,t){let n=pE[e];return!n||t.inspectors[n]}function _E(e,t){e&1&&(E(),Eg(0,`rect`,5)(1,`rect`,6)(2,`rect`,7)(3,`rect`,8))}function vE(e,t){e&1&&(E(),Eg(0,`path`,9)(1,`circle`,10)(2,`circle`,11)(3,`path`,12))}function yE(e,t){e&1&&(E(),Eg(0,`path`,13)(1,`path`,14))}function bE(e,t){e&1&&(E(),Eg(0,`path`,15)(1,`path`,16)(2,`path`,17))}function xE(e,t){e&1&&(E(),Eg(0,`circle`,18)(1,`path`,19)(2,`circle`,20))}function SE(e,t){e&1&&(E(),Eg(0,`path`,1))}function CE(e,t){e&1&&(E(),Eg(0,`path`,21)(1,`path`,22)(2,`path`,23)(3,`path`,24))}function wE(e,t){e&1&&(E(),Eg(0,`ellipse`,25)(1,`path`,26)(2,`path`,27))}function TE(e,t){e&1&&(E(),Eg(0,`rect`,28)(1,`path`,29)(2,`path`,30)(3,`path`,31))}function EE(e,t){e&1&&(E(),Eg(0,`circle`,32)(1,`path`,9)(2,`path`,33))}function DE(e,t){e&1&&(E(),Eg(0,`path`,34)(1,`path`,35)(2,`path`,36)(3,`path`,37)(4,`circle`,38))}function OE(e,t){e&1&&(E(),Eg(0,`circle`,39)(1,`path`,40))}function kE(e,t){e&1&&(E(),Eg(0,`ellipse`,41)(1,`path`,42)(2,`path`,43)(3,`path`,44)(4,`path`,45))}function AE(e,t){e&1&&(E(),Eg(0,`circle`,32)(1,`path`,46)(2,`path`,47))}function jE(e,t){e&1&&(E(),Eg(0,`path`,2))}function ME(e,t){e&1&&(E(),Eg(0,`path`,3))}function NE(e,t){e&1&&(E(),Eg(0,`path`,4))}var PE=class e{name=$.required();static ɵfac=function(t){return new(t||e)};static ɵcmp=k({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&&(E(),z(0,`svg`,0),j(1,_E,4,0)(2,vE,4,0)(3,yE,2,0)(4,bE,3,0)(5,xE,3,0)(6,SE,1,0,`:svg:path`,1)(7,CE,4,0)(8,wE,3,0)(9,TE,4,0)(10,EE,3,0)(11,DE,5,0)(12,OE,2,0)(13,kE,5,0)(14,AE,3,0)(15,jE,1,0,`:svg:path`,2)(16,ME,1,0,`:svg:path`,3)(17,NE,1,0,`:svg:path`,4),B()),e&2){let e;O(),M((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%] { + `):``,this.name=`UnsubscriptionError`,this.errors=t}});function lr(e,t){if(e){var n=e.indexOf(t);0<=n&&e.splice(n,1)}}var ur=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=er(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(or(c))try{c()}catch(e){i=e instanceof cr?e.errors:[e]}var l=this._finalizers;if(l){this._finalizers=null;try{for(var u=er(l),d=u.next();!d.done;d=u.next()){var f=d.value;try{pr(f)}catch(e){i??=[],e instanceof cr?i=nr(nr([],tr(i)),tr(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 cr(i)}},e.prototype.add=function(t){if(t&&t!==this){if(this.closed)pr(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)&&lr(t,e)},e.prototype.remove=function(t){var n=this._finalizers;n&&lr(n,t),t instanceof e&&t._removeParent(this)},e.EMPTY=(function(){var t=new e;return t.closed=!0,t})(),e}(),dr=ur.EMPTY;function fr(e){return e instanceof ur||e&&`closed`in e&&or(e.remove)&&or(e.add)&&or(e.unsubscribe)}function pr(e){or(e)?e():e.unsubscribe()}var mr={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},hr={setTimeout:function(e,t){var n=[...arguments].slice(2),r=hr.delegate;return r?.setTimeout?r.setTimeout.apply(r,nr([e,t],tr(n))):setTimeout.apply(void 0,nr([e,t],tr(n)))},clearTimeout:function(e){return(hr.delegate?.clearTimeout||clearTimeout)(e)},delegate:void 0};function gr(e){hr.setTimeout(function(){var t=mr.onUnhandledError;if(t)t(e);else throw e})}function _r(){}var vr=(function(){return xr(`C`,void 0,void 0)})();function yr(e){return xr(`E`,void 0,e)}function br(e){return xr(`N`,e,void 0)}function xr(e,t,n){return{kind:e,value:t,error:n}}var Sr=null;function Cr(e){if(mr.useDeprecatedSynchronousErrorHandling){var t=!Sr;if(t&&(Sr={errorThrown:!1,error:null}),e(),t){var n=Sr,r=n.errorThrown,i=n.error;if(Sr=null,r)throw i}}else e()}function wr(e){mr.useDeprecatedSynchronousErrorHandling&&Sr&&(Sr.errorThrown=!0,Sr.error=e)}var Tr=function(e){Zn(t,e);function t(t){var n=e.call(this)||this;return n.isStopped=!1,t?(n.destination=t,fr(t)&&t.add(n)):n.destination=Nr,n}return t.create=function(e,t,n){return new kr(e,t,n)},t.prototype.next=function(e){this.isStopped?Mr(br(e),this):this._next(e)},t.prototype.error=function(e){this.isStopped?Mr(yr(e),this):(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped?Mr(vr,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}(ur),Er=Function.prototype.bind;function Dr(e,t){return Er.call(e,t)}var Or=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){Ar(e)}},e.prototype.error=function(e){var t=this.partialObserver;if(t.error)try{t.error(e)}catch(e){Ar(e)}else Ar(e)},e.prototype.complete=function(){var e=this.partialObserver;if(e.complete)try{e.complete()}catch(e){Ar(e)}},e}(),kr=function(e){Zn(t,e);function t(t,n,r){var i=e.call(this)||this,a;if(or(t)||!t)a={next:t??void 0,error:n??void 0,complete:r??void 0};else{var o;i&&mr.useDeprecatedNextContext?(o=Object.create(t),o.unsubscribe=function(){return i.unsubscribe()},a={next:t.next&&Dr(t.next,o),error:t.error&&Dr(t.error,o),complete:t.complete&&Dr(t.complete,o)}):a=t}return i.destination=new Or(a),i}return t}(Tr);function Ar(e){mr.useDeprecatedSynchronousErrorHandling?wr(e):gr(e)}function jr(e){throw e}function Mr(e,t){var n=mr.onStoppedNotification;n&&hr.setTimeout(function(){return n(e,t)})}var Nr={closed:!0,next:_r,error:jr,complete:_r},Pr=(function(){return typeof Symbol==`function`&&Symbol.observable||`@@observable`})();function Fr(e){return e}function Ir(e){return e.length===0?Fr:e.length===1?e[0]:function(t){return e.reduce(function(e,t){return t(e)},t)}}var Lr=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=Br(e)?e:new kr(e,t,n);return Cr(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=Rr(t),new t(function(t,r){var i=new kr({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[Pr]=function(){return this},e.prototype.pipe=function(){return Ir([...arguments])(this)},e.prototype.toPromise=function(e){var t=this;return e=Rr(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 Rr(e){return e??mr.Promise??Promise}function zr(e){return e&&or(e.next)&&or(e.error)&&or(e.complete)}function Br(e){return e&&e instanceof Tr||zr(e)&&fr(e)}function Vr(e){return or(e?.lift)}function Hr(e){return function(t){if(Vr(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 Ur(e,t,n,r,i){return new Wr(e,t,n,r,i)}var Wr=function(e){Zn(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}(Tr),Gr=sr(function(e){return function(){e(this),this.name=`ObjectUnsubscribedError`,this.message=`object unsubscribed`}}),Kr=function(e){Zn(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 qr(this,this);return t.operator=e,t},t.prototype._throwIfClosed=function(){if(this.closed)throw new Gr},t.prototype.next=function(e){var t=this;Cr(function(){var n,r;if(t._throwIfClosed(),!t.isStopped){t.currentObservers||=Array.from(t.observers);try{for(var i=er(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;Cr(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;Cr(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?dr:(this.currentObservers=null,a.push(e),new ur(function(){t.currentObservers=null,lr(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 Lr;return e.source=this,e},t.create=function(e,t){return new qr(e,t)},t}(Lr),qr=function(e){Zn(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)??dr},t}(Kr),Jr=function(e){Zn(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}(Kr);function Yr(e){return e[e.length-1]}function Xr(e){return or(Yr(e))?e.pop():void 0}var Zr=(function(e){return e&&typeof e.length==`number`&&typeof e!=`function`});function Qr(e){return or(e?.then)}function $r(e){return or(e[Pr])}function ei(e){return Symbol.asyncIterator&&or(e?.[Symbol.asyncIterator])}function ti(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 ni(){return typeof Symbol!=`function`||!Symbol.iterator?`@@iterator`:Symbol.iterator}var ri=ni();function ii(e){return or(e?.[ri])}function ai(e){return ir(this,arguments,function(){var t,n,r,i;return $n(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,rr(t.read())];case 3:return n=a.sent(),r=n.value,i=n.done,i?[4,rr(void 0)]:[3,5];case 4:return[2,a.sent()];case 5:return[4,rr(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 oi(e){return or(e?.getReader)}function si(e){if(e instanceof Lr)return e;if(e!=null){if($r(e))return pee(e);if(Zr(e))return mee(e);if(Qr(e))return hee(e);if(ei(e))return ci(e);if(ii(e))return gee(e);if(oi(e))return _ee(e)}throw ti(e)}function pee(e){return new Lr(function(t){var n=e[Pr]();if(or(n.subscribe))return n.subscribe(t);throw TypeError(`Provided object does not correctly implement Symbol.observable`)})}function mee(e){return new Lr(function(t){for(var n=0;n=0?n.slice(0,r):n}function bi(e,t){return e?t?`${e} ${t}`:e:t||``}var xi=_i({__forward_ref__:_i});function Si(e){return e.__forward_ref__=Si,e}function Ci(e){return wi(e)?e():e}function wi(e){return typeof e==`function`&&Object.hasOwn(e,xi)&&e.__forward_ref__===Si}function Ti(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Ei(e){return Di(e,Ai)}function Di(e,t){return Object.hasOwn(e,t)&&e[t]||null}function Oi(e){return(e?.[Ai]??null)||null}function ki(e){return e&&Object.hasOwn(e,ji)?e[ji]:null}var Ai=_i({ɵprov:_i}),ji=_i({ɵinj:_i}),Mi=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=Ti({token:this,providedIn:t.providedIn||`root`,factory:t.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function Ni(e){return e&&!!e.ɵproviders}var Pi=_i({ɵcmp:_i}),Fi=_i({ɵdir:_i}),Ii=_i({ɵpipe:_i}),Li=_i({ɵfac:_i}),Ri=_i({__NG_ELEMENT_ID__:_i}),zi=_i({__NG_ENV_ID__:_i});function Bi(e){return Ui(e,`@Component`),e[Pi]||null}function Vi(e){return Ui(e,`@Directive`),e[Fi]||null}function Hi(e){return Ui(e,`@Pipe`),e[Ii]||null}function Ui(e,t){if(e==null)throw new hi(-919,!1)}function Wi(e){return typeof e==`string`?e:e==null?``:String(e)}var Gi=_i({ngErrorCode:_i}),Ki=_i({ngErrorMessage:_i}),qi=_i({ngTokenPath:_i});function Ji(e,t){return Xi(``,-200,t)}function Yi(e,t){throw new hi(-201,!1)}function Xi(e,t,n){let r=new hi(t,e);return r[Gi]=t,r[Ki]=e,n&&(r[qi]=n),r}function Zi(e){return e[Gi]}var Qi;function $i(){return Qi}function ea(e){let t=Qi;return Qi=e,t}function ta(e,t,n){let r=Ei(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;Yi(e,``)}var na=globalThis,ra={},ia=`__NG_DI_FLAG__`,aa=class{injector;constructor(e){this.injector=e}retrieve(e,t){let n=ca(t)||0;try{return this.injector.get(e,n&8?null:ra,n)}catch(e){if(Wn(e))return e;throw e}}};function oa(e,t=0){let n=Vn();if(n===void 0)throw new hi(-203,!1);if(n===null)return ta(e,void 0,t);{let r=la(t),i=n.retrieve(e,r);if(Wn(i)){if(r.optional)return null;throw i}return i}}function sa(e,t=0){return($i()||oa)(Ci(e),t)}function S(e,t){return sa(e,ca(t))}function ca(e){return e===void 0||typeof e==`number`?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function la(e){return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)}}function ua(e){let t=[];for(let n=0;nArray.isArray(e)?ha(e,t):t(e))}function ga(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function _a(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function va(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 ba(e,t,n){let r=Sa(e,t);return r>=0?e[r|1]=n:(r=~r,ya(e,r,t,n)),r}function xa(e,t){let n=Sa(e,t);if(n>=0)return e[n|1]}function Sa(e,t){return Ca(e,t,1)}function Ca(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 ha(t,e=>{let t=e;Na(t,a,[],r)&&(i||=[],i.push(t))}),i!==void 0&&Ma(i,a),n}function Ma(e,t){for(let n=0;n{t(e,r)})}}function Na(e,t,n,r){if(e=Ci(e),!e)return!1;let i=null,a=ki(e),o=!a&&Bi(e);if(!a&&!o){let t=e.ngModule;if(a=ki(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)Na(i,t,n,r)}}else if(a){if(a.imports!=null&&!s){r.add(i);let e;try{ha(a.imports,i=>{Na(i,t,n,r)&&(e||=[],e.push(i))})}finally{}e!==void 0&&Ma(e,t)}if(!s){let e=fa(i)||(()=>new i);t({provide:i,useFactory:e,deps:Ta},i),t({provide:Oa,useValue:i,multi:!0},i),t({provide:Ea,useValue:()=>sa(i),multi:!0},i)}let o=a.providers;if(o!=null&&!s){let n=e;Pa(o,e=>{t(e,n)})}}else return!1;return i!==e&&e.providers!==void 0}function Pa(e,t){for(let n of e)Ni(n)&&(n=n.ɵproviders),Array.isArray(n)?Pa(n,t):t(n)}var Fa=_i({provide:String,useValue:_i});function Ia(e){return typeof e==`object`&&!!e&&Fa in e}function La(e){return!!(e&&e.useExisting)}function Ra(e){return!!(e&&e.useFactory)}function za(e){return typeof e==`function`}function Ba(e){return!!e.useClass}var Va=new Mi(``),Ha={},Ua={},Wa=void 0;function Ga(){return Wa===void 0&&(Wa=new ka),Wa}var Ka=class{},qa=class extends Ka{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,ro(e,e=>this.processProvider(e)),this.records.set(Da,$a(void 0,this)),r.has(`environment`)&&this.records.set(Ka,$a(void 0,this));let i=this.records.get(Va);i!=null&&typeof i.value==`string`&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(Oa,Ta,{self:!0}))}retrieve(e,t){let n=ca(t)||0;try{return this.get(e,ra,n)}catch(e){if(Wn(e))return e;throw e}}destroy(){Qa(this),this._destroyed=!0;let e=nn(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(),nn(e)}}onDestroy(e){return Qa(this),this._onDestroyHooks.push(e),()=>this.removeOnDestroy(e)}runInContext(e){Qa(this);let t=Hn(this),n=ea(void 0);try{return e()}finally{Hn(t),ea(n)}}get(e,t=ra,n){if(Qa(this),Object.hasOwn(e,zi))return e[zi](this);let r=ca(n),i=Hn(this),a=ea(void 0);try{if(!(r&4)){let t=this.records.get(e);if(t===void 0){let n=no(e)&&Ei(e);t=n&&this.injectableDefInScope(n)?$a(Ja(e),Ha):null,this.records.set(e,t)}if(t!=null)return this.hydrate(e,t,r)}let n=r&2?Ga():this.parent;return t=r&8&&t===ra?null:t,n.get(e,t)}catch(e){let t=Zi(e);throw t===-200||t===-201?new hi(t,null):e}finally{ea(a),Hn(i)}}resolveInjectorInitializers(){let e=nn(null),t=Hn(this),n=ea(void 0);try{let e=this.get(Ea,Ta,{self:!0});for(let t of e)t()}finally{Hn(t),ea(n),nn(e)}}toString(){return`R3Injector[...]`}processProvider(e){e=Ci(e);let t=za(e)?e:Ci(e&&e.provide),n=Xa(e);if(!za(e)&&e.multi===!0){let n=this.records.get(t);n||(n=$a(void 0,Ha,!0),n.factory=()=>ua(n.multi),this.records.set(t,n)),t=e,n.multi.push(e)}this.records.set(t,n)}hydrate(e,t,n){let r=nn(null);try{if(t.value===Ua)throw Ji(``);return t.value===Ha&&(t.value=Ua,t.value=t.factory(void 0,n)),typeof t.value==`object`&&t.value&&to(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}finally{nn(r)}}injectableDefInScope(e){if(!e.providedIn)return!1;let t=Ci(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 Ja(e){let t=Ei(e),n=t===null?fa(e):t.factory;if(n!==null)return n;if(e instanceof Mi)throw new hi(-204,!1);if(e instanceof Function)return Ya(e);throw new hi(-204,!1)}function Ya(e){if(e.length>0)throw new hi(-204,!1);let t=Oi(e);return t===null?()=>new e:()=>t.factory(e)}function Xa(e){return Ia(e)?$a(void 0,e.useValue):$a(Za(e),Ha)}function Za(e,t,n){let r;if(za(e)){let t=Ci(e);return fa(t)||Ja(t)}if(Ia(e))r=()=>Ci(e.useValue);else if(Ra(e))r=()=>e.useFactory(...ua(e.deps||[]));else if(La(e))r=(t,n)=>sa(Ci(e.useExisting),n!==void 0&&n&8?8:void 0);else{let t=Ci(e&&(e.useClass||e.provide));if(eo(e))r=()=>new t(...ua(e.deps));else return fa(t)||Ja(t)}return r}function Qa(e){if(e.destroyed)throw new hi(-205,!1)}function $a(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function eo(e){return!!e.deps}function to(e){return typeof e==`object`&&!!e&&typeof e.ngOnDestroy==`function`}function no(e){return typeof e==`function`||typeof e==`object`&&e.ngMetadataName===`InjectionToken`}function ro(e,t){for(let n of e)Array.isArray(n)?ro(n,t):n&&Ni(n)?ro(n.ɵproviders,t):t(n)}function io(e,t){let n;e instanceof qa?(Qa(e),n=e):n=new aa(e);let r=Hn(n),i=ea(void 0);try{return t()}finally{Hn(r),ea(i)}}function ao(){return $i()!==void 0||Vn()!=null}var oo=1;function so(e){return Array.isArray(e)&&typeof e[oo]==`object`}function co(e){return Array.isArray(e)&&e[oo]===!0}function lo(e){return!!(e.flags&4)}function uo(e){return e.componentOffset>-1}function fo(e){return(e.flags&1)==1}function po(e){return!!e.template}function mo(e){return!!(e[2]&512)}function ho(e){return(e[2]&256)==256}var go=(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})(go||{}),_o=`math`;function vo(e){for(;Array.isArray(e);)e=e[0];return e}function yo(e,t){return vo(t[e])}function bo(e,t){return vo(t[e.index])}function xo(e,t){return e.data[t]}function So(e,t){return e[t]}function Co(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}function wo(e,t){let n=t[e];return so(n)?n:n[0]}function To(e){return(e[2]&128)==128}function Ree(e){return co(e[3])}function Eo(e,t){return t==null?null:e[t]}function Do(e){e[17]=0}function Oo(e){e[2]&1024||(e[2]|=1024,To(e)&&jo(e))}function zee(e,t){for(;e>0;)t=t[14],e--;return t}function ko(e){return!!(e[2]&9216||e[24]?.dirty)}function Ao(e){e[10].changeDetectionScheduler?.notify(8),e[2]&64&&(e[2]|=1024),ko(e)&&jo(e)}function jo(e){e[10].changeDetectionScheduler?.notify(0);let t=No(e);for(;t!==null&&!(t[2]&8192||(t[2]|=8192,!To(t)));)t=No(t)}function Mo(e,t){if(ho(e))throw new hi(911,!1);e[21]===null&&(e[21]=[]),e[21].push(t)}function Bee(e,t){if(e[21]===null)return;let n=e[21].indexOf(t);n!==-1&&e[21].splice(n,1)}function No(e){let t=e[3];return co(t)?t[3]:t}function Po(e){return e[7]??=[]}function Fo(e){return e.cleanup??=[]}function Vee(e,t,n,r){let i=Po(t);i.push(n),e.firstCreatePass&&Fo(e).push(r,i.length-1)}var Io={lFrame:cs(null),bindingsEnabled:!0,skipHydrationRootTNode:null},Lo=!1;function Hee(){return Io.lFrame.elementDepthCount}function Uee(){Io.lFrame.elementDepthCount++}function Ro(){Io.lFrame.elementDepthCount--}function zo(){return Io.bindingsEnabled}function Bo(){return Io.skipHydrationRootTNode!==null}function Vo(e){return Io.skipHydrationRootTNode===e}function Ho(){Io.skipHydrationRootTNode=null}function Uo(){return Io.lFrame.lView}function Wo(){return Io.lFrame.tView}function C(e){return Io.lFrame.contextLView=e,e[8]}function w(e){return Io.lFrame.contextLView=null,e}function Go(){let e=Ko();for(;e!==null&&e.type===64;)e=e.parent;return e}function Ko(){return Io.lFrame.currentTNode}function Wee(){let e=Io.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}function qo(e,t){let n=Io.lFrame;n.currentTNode=e,n.isParent=t}function Jo(){return Io.lFrame.isParent}function Yo(){Io.lFrame.isParent=!1}function Xo(){return Io.lFrame.contextLView}function Zo(){return Lo}function Qo(e){let t=Lo;return Lo=e,t}function $o(){let e=Io.lFrame,t=e.bindingRootIndex;return t===-1&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function es(){return Io.lFrame.bindingIndex}function Gee(e){return Io.lFrame.bindingIndex=e}function ts(){return Io.lFrame.bindingIndex++}function ns(e){let t=Io.lFrame,n=t.bindingIndex;return t.bindingIndex+=e,n}function Kee(){return Io.lFrame.inI18n}function qee(e,t){let n=Io.lFrame;n.bindingIndex=n.bindingRootIndex=e,rs(t)}function Jee(){return Io.lFrame.currentDirectiveIndex}function rs(e){Io.lFrame.currentDirectiveIndex=e}function Yee(e){let t=Io.lFrame.currentDirectiveIndex;return t===-1?null:e[t]}function Xee(){return Io.lFrame.currentQueryIndex}function is(e){Io.lFrame.currentQueryIndex=e}function Zee(e){let t=e[1];return t.type===2?t.declTNode:t.type===1?e[5]:null}function as(e,t,n){if(n&4){let r=t,i=e;for(;r=r.parent,r===null&&!(n&1)&&(r=Zee(i),!(r===null||(i=i[14],r.type&10))););if(r===null)return!1;t=r,e=i}let r=Io.lFrame=ss();return r.currentTNode=t,r.lView=e,!0}function os(e){let t=ss(),n=e[1];Io.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function ss(){let e=Io.lFrame,t=e===null?null:e.child;return t===null?cs(e):t}function cs(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 ls(){let e=Io.lFrame;return Io.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var us=ls;function ds(){let e=ls();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 fs(e){return(Io.lFrame.contextLView=zee(e,Io.lFrame.contextLView))[8]}function ps(){return Io.lFrame.selectedIndex}function ms(e){Io.lFrame.selectedIndex=e}function hs(){let e=Io.lFrame;return xo(e.tView,e.selectedIndex)}function T(){Io.lFrame.currentNamespace=`svg`}function gs(){_s()}function _s(){Io.lFrame.currentNamespace=null}function vs(){return Io.lFrame.currentNamespace}var ys=!0;function bs(){return ys}function xs(e){ys=e}function Ss(e,t=null,n=null,r){let i=Cs(e,t,n,r);return i.resolveInjectorInitializers(),i}function Cs(e,t=null,n=null,r,i=new Set){return new qa([n||Ta,Aa(e)],t||Ga(),null,i)}var ws=class e{static THROW_IF_NOT_FOUND=ra;static NULL=new ka;static create(e,t){if(Array.isArray(e))return Ss({name:``},t,e,``);{let t=e.name??``;return Ss({name:t},e.parent,e.providers,t)}}static ɵprov=Ti({token:e,providedIn:`any`,factory:()=>sa(Da)});static __NG_ELEMENT_ID__=-1},Ts=new Mi(``),Es=class{static __NG_ELEMENT_ID__=Os;static __NG_ENV_ID__=e=>e},Ds=class extends Es{_lView;constructor(e){super(),this._lView=e}get destroyed(){return ho(this._lView)}onDestroy(e){let t=this._lView;return Mo(t,e),()=>Bee(t,e)}};function Os(){return new Ds(Uo())}var ks=new Mi(``),As=(()=>{class e{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new Jr(!1);debugTaskTracker=S(ks,{optional:!0});get hasPendingTasks(){return!this.destroyed&&this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new Lr(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=Ti({token:e,providedIn:`root`,factory:()=>new e})}return e})(),js=class extends Kr{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(e=!1){super(),this.__isAsync=e,ao()&&(this.destroyRef=S(Es,{optional:!0})??void 0,this.pendingTasks=S(As,{optional:!0})??void 0)}emit(e){let t=nn(null);try{super.next(e)}finally{nn(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 ur&&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 Ms(...e){}function Ns(e){let t,n;function r(){e=Ms;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 Ps(e){return queueMicrotask(()=>e()),()=>{e=Ms}}var Fs=`isAngularZone`,Is=`isAngularZone_ID`,Ls=0,Rs=class e{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new js(!1);onMicrotaskEmpty=new js(!1);onStable=new js(!1);onError=new js(!1);constructor(e){let{enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1,scheduleInRootZone:i=!1}=e;if(typeof Zone>`u`)throw new hi(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,Hs(a)}static isInAngularZone(){return typeof Zone<`u`&&Zone.current.get(Fs)===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new hi(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new hi(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,zs,Ms,Ms);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)}},zs={};function Bs(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 Vs(e){if(e.isCheckStableRunning||e.callbackScheduled)return;e.callbackScheduled=!0;function t(){Ns(()=>{e.callbackScheduled=!1,Us(e),e.isCheckStableRunning=!0,Bs(e),e.isCheckStableRunning=!1})}e.scheduleInRootZone?Zone.root.run(()=>{t()}):e._outer.run(()=>{t()}),Us(e)}function Hs(e){let t=()=>{Vs(e)},n=Ls++;e._inner=e._inner.fork({name:`angular`,properties:{[Fs]:!0,[Is]:n,[Is+n]:!0},onInvokeTask:(n,r,i,a,o,s)=>{if(qs(s))return n.invokeTask(i,a,o,s);try{return Ws(e),n.invokeTask(i,a,o,s)}finally{(e.shouldCoalesceEventChangeDetection&&a.type===`eventTask`||e.shouldCoalesceRunChangeDetection)&&t(),Gs(e)}},onInvoke:(n,r,i,a,o,s,c)=>{try{return Ws(e),n.invoke(i,a,o,s,c)}finally{e.shouldCoalesceRunChangeDetection&&!e.callbackScheduled&&!Js(s)&&t(),Gs(e)}},onHasTask:(t,n,r,i)=>{t.hasTask(r,i),n===r&&(i.change==`microTask`?(e._hasPendingMicrotasks=i.microTask,Us(e),Bs(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 Us(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.callbackScheduled===!0)}function Ws(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function Gs(e){e._nesting--,Bs(e)}var Ks=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new js;onMicrotaskEmpty=new js;onStable=new js;onError=new js;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 qs(e){return Ys(e,`__ignore_ng_zone__`)}function Js(e){return Ys(e,`__scheduler_tick__`)}function Ys(e,t){return!Array.isArray(e)||e.length!==1?!1:e[0]?.data?.[t]===!0}var Xs=class{_console=console;handleError(e){this._console.error(`ERROR`,e)}},Zs=new Mi(``,{factory:()=>{let e=S(Rs),t=S(Ka),n;return r=>{e.runOutsideAngular(()=>{t.destroyed&&!n?setTimeout(()=>{throw r}):(n??=t.get(Xs),n.handleError(r))})}}}),Qs={provide:Ea,useValue:()=>{S(Xs,{optional:!0})},multi:!0};function E(e,t){let[n,r,i]=Mn(e,t?.equal),a=n;return a[tn],a.set=r,a.update=i,a.asReadonly=$s.bind(a),a}function $s(){let e=this[tn];if(e.readonlyFn===void 0){let t=()=>this();t[tn]=e,e.readonlyFn=t}return e.readonlyFn}var ec=new Mi(``,{factory:()=>tc}),tc=`ng`,nc=new Mi(``),rc=new Mi(``,{providedIn:`platform`,factory:()=>`unknown`}),ic=new Mi(``,{factory:()=>S(Ts).body?.querySelector(`[ngCspNonce]`)?.getAttribute(`ngCspNonce`)||null}),ac=(()=>{class e{view;node;constructor(e,t){this.view=e,this.node=t}static __NG_ELEMENT_ID__=oc}return e})();function oc(){return new ac(Uo(),Go())}var sc=class{},cc=new Mi(``,{factory:()=>!0}),lc=new Mi(``),uc=(()=>{class e{static ɵprov=Ti({token:e,providedIn:`root`,factory:()=>new dc})}return e})(),dc=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}},fc=class{[tn];constructor(e){this[tn]=e}destroy(){this[tn].destroy()}};function pc(e,t){let n=t?.injector??S(ws),r=t?.manualCleanup===!0?null:n.get(Es),i,a=n.get(ac,null,{optional:!0}),o=n.get(sc);return a===null?i=vc(e,n.get(uc),o):(i=_c(a.view,o,e),r instanceof Ds&&r._lView===a.view&&(r=null)),i.injector=n,r!==null&&(i.onDestroyFns=[r.onDestroy(()=>i.destroy())]),new fc(i)}var mc={...Rn,cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let e=Qo(!1);try{zn(this)}finally{Qo(e)}},cleanup(){if(!this.cleanupFns?.length)return;let e=nn(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],nn(e)}}},hc={...mc,consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){if(vn(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.scheduler.remove(this)}},gc={...mc,consumerMarkedDirty(){this.view[2]|=8192,jo(this.view),this.notifier.notify(13)},destroy(){if(vn(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.view[23]?.delete(this)}};function _c(e,t,n){let r=Object.create(gc);return r.view=e,r.zone=typeof Zone<`u`?Zone.current:null,r.notifier=t,r.fn=yc(r,n),e[23]??=new Set,e[23].add(r),r.consumerMarkedDirty(r),r}function vc(e,t,n){let r=Object.create(hc);return r.fn=yc(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 yc(e,t){return()=>{t(t=>(e.cleanupFns??=[]).push(t))}}function bc(e){return typeof e==`function`&&e[tn]!==void 0}function xc(e){return bc(e)&&typeof e.set==`function`}var Sc=Symbol(`InputSignalNode#UNSET`),Cc={...In,transformFn:void 0,applyValueToInputSignal(e,t){Pn(e,t)}};function wc(e){return{toString:e}.toString()}var Tc=(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})(Tc||{}),Ec=class{previousValue;currentValue;firstChange;constructor(e,t,n){this.previousValue=e,this.currentValue=t,this.firstChange=n}isFirstChange(){return this.firstChange}};function Dc(e,t,n,r){t===null?e[n]=r:t.applyValueToInputSignal(t,r)}var Oc=null,kc=(()=>{Oc=jc;let e=()=>jc;return e.ngInherit=!0,e})();function Ac(){return Oc}function jc(e){return e.type.prototype.ngOnChanges&&(e.setInput=Nc),Mc}function Mc(){let e=Fc(this),t=e?.current;if(t){let n=e.previous;if(n===wa)e.previous=t;else for(let e in t)n[e]=t[e];e.current=null,this.ngOnChanges(t)}}function Nc(e,t,n,r,i){let a=this.declaredInputs[r],o=Fc(e)||Ic(e,{previous:wa,current:null}),s=o.current||={},c=o.previous,l=c[a];s[a]=new Ec(l&&l.currentValue,n,c===wa),Dc(e,t,i,n)}var Pc=`__ngSimpleChanges__`;function Fc(e){return Object.hasOwn(e,Pc)&&e[Pc]||null}function Ic(e,t){return e[Pc]=t}var Lc=[],Rc=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,Gc(o,a)):Gc(o,a)}var qc=-1,Jc=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 Yc(e){return!!(e.flags&8)}function Xc(e){return!!(e.flags&16)}function Zc(e,t,n){let r=0;for(;rt){o=a-1;break}}}for(;a>16}function al(e,t){let n=il(e),r=t;for(;n>0;)r=r[14],n--;return r}var ol=!0;function sl(e){let t=ol;return ol=e,t}var cl=255,ll=5,ul=0,dl={};function fl(e,t,n){let r;typeof n==`string`?r=n.charCodeAt(0)||0:Object.hasOwn(n,Ri)&&(r=n[Ri]),r??=n[Ri]=ul++;let i=r&cl,a=1<>ll)]|=a}function pl(e,t){let n=hl(e,t);if(n!==-1)return n;let r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,ml(r.data,e),ml(t,null),ml(r.blueprint,null));let i=gl(e,t),a=e.injectorIndex;if(nl(i)){let e=rl(i),n=al(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 ml(e,t){e.push(0,0,0,0,0,0,0,0,t)}function hl(e,t){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||t[e.injectorIndex+8]===null?-1:e.injectorIndex}function gl(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=Nl(i),r===null)return qc;if(n++,i=i[14],r.injectorIndex!==-1)return r.injectorIndex|n<<16}return qc}function _l(e,t,n){fl(e,t,n)}function vl(e,t,n){if(n&8||e!==void 0)return e;Yi(t,`NodeInjector`)}function yl(e,t,n,r){if(n&8&&r===void 0&&(r=null),!(n&3)){let i=e[9],a=ea(void 0);try{return i?i.get(t,r,n&8):ta(t,r,n&8)}finally{ea(a)}}return vl(r,t,n)}function bl(e,t,n,r=0,i){if(e!==null){if(t[2]&2048&&!(r&2)){let i=Ml(e,t,n,r,dl);if(i!==dl)return i}let i=xl(e,t,n,r,dl);if(i!==dl)return i}return yl(t,n,r,i)}function xl(e,t,n,r,i){let a=Tl(n);if(typeof a==`function`){if(!as(t,e,r))return r&1?vl(i,n,r):yl(t,n,r,i);try{let e;if(e=a(r),e==null&&!(r&8))Yi(n);else return e}finally{us()}}else if(typeof a==`number`){let i=null,o=hl(e,t),s=qc,c=r&1?t[15][5]:null;for((o===-1||r&4)&&(s=o===-1?gl(e,t):t[o+8],s===qc||!Dl(r,!1)?o=-1:(i=t[1],o=rl(s),t=al(s,t)));o!==-1;){let e=t[1];if(El(a,o,e.data)){let e=Sl(o,t,n,i,r,c);if(e!==dl)return e}s=t[o+8],s!==qc&&Dl(r,t[1].data[o+8]===c)&&El(a,o,t)?(i=e,o=rl(s),t=al(s,t)):o=-1}}return i}function Sl(e,t,n,r,i,a){let o=t[1],s=o.data[e+8],c=Cl(s,o,n,r==null?uo(s)&&ol:r!=o&&!!(s.type&3),i&1&&a===s);return c===null?dl:wl(t,o,c,s,i)}function Cl(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&&po(e)&&e.type===n)return c}return null}function wl(e,t,n,r,i){let a=e[n],o=t.data;if(a instanceof Jc){let s=a;if(s.resolving)throw Ji(``);let c=sl(s.canSeeViewProviders);s.resolving=!0,o[n].type||o[n];let l=s.injectImpl?ea(s.injectImpl):null;as(e,r,0);try{a=e[n]=s.factory(void 0,i,o,e,r),t.firstCreatePass&&n>=r.directiveStart&&zc(n,o[n],t)}finally{l!==null&&ea(l),sl(c),s.resolving=!1,us()}}return a}function Tl(e){if(typeof e==`string`)return e.charCodeAt(0)||0;let t=Object.hasOwn(e,Ri)?e[Ri]:void 0;return typeof t==`number`?t>=0?t&cl:kl:t}function El(e,t,n){let r=1<>ll)]&r)}function Dl(e,t){return!(e&2)&&!(e&1&&t)}var Ol=class{_tNode;_lView;constructor(e,t){this._tNode=e,this._lView=t}get(e,t,n){return bl(this._tNode,this._lView,e,ca(n),t)}};function kl(){return new Ol(Go(),Uo())}function Al(e){return wc(()=>{let t=e.prototype.constructor,n=t[Li]||jl(t),r=Object.prototype,i=Object.getPrototypeOf(e.prototype).constructor;for(;i&&i!==r;){let e=i[Li]||jl(i);if(e&&e!==n)return e;i=Object.getPrototypeOf(i)}return e=>new e})}function jl(e){return wi(e)?()=>{let t=jl(Ci(e));return t&&t()}:fa(e)}function Ml(e,t,n,r,i){let a=e,o=t;for(;a!==null&&o!==null&&o[2]&2048&&!mo(o);){let e=xl(a,o,n,r|2,dl);if(e!==dl)return e;r&=-5;let t=a.parent;if(!t){let e=o[20];if(e){let t=e.get(n,dl,r);if(t!==dl)return t}t=Nl(o),o=o[14]}a=t}return i}function Nl(e){let t=e[1],n=t.type;return n===2?t.declTNode:n===1?e[5]:null}function Pl(e){return{token:e.token,providedIn:e.autoProvided===!1?null:`root`,factory:e.factory,value:void 0}}function Fl(){return Il(Go(),Uo())}function Il(e,t){return new Ll(bo(e,t))}var Ll=(()=>{class e{nativeElement;constructor(e){this.nativeElement=e}static __NG_ELEMENT_ID__=Fl}return e})();function Rl(e){return e instanceof Ll?e.nativeElement:e}function zl(){return this._results[Symbol.iterator]()}var Bl=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 Kr}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=ma(e);(this._changesDetected=!pa(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]=zl};function Vl(e){return(e.flags&128)==128}var Hl=(function(e){return e[e.OnPush=0]=`OnPush`,e[e.Eager=1]=`Eager`,e[e.Default=1]=`Default`,e})(Hl||{}),Ul=new Map,Wl=0;function Gl(){return Wl++}function Kl(e){Ul.set(e[19],e)}function ql(e){Ul.delete(e[19])}var Jl=`__ngContext__`;function Yl(e,t){so(t)?(e[Jl]=t[19],Kl(t)):e[Jl]=t}function Xl(e){return Ql(e[12])}function Zl(e){return Ql(e[4])}function Ql(e){for(;e!==null&&!co(e);)e=e[4];return e}var $l=void 0;function eu(e){$l=e}function tu(){if($l!==void 0)return $l;if(typeof document<`u`)return document;throw new hi(210,!1)}var nu=!1,ru=new Mi(``,{factory:()=>nu}),iu=new WeakMap;function au(e,t){if(typeof e!=`object`||!e)return;let n=iu.get(e);n||(n=new WeakSet,iu.set(e,n)),n.add(t)}function ou(e){return(e.flags&32)==32}var su=()=>null;function cu(e,t,n=!1){return su(e,t,n)}function lu(e,t){let n=e.contentQueries;if(n!==null){let r=nn(null);try{for(let r=0;r|^->||--!>|)/g,xu=`​$1​`;function Su(e){return e.replace(yu,e=>e.replace(bu,xu))}function Cu(e,t){return e.createText(t)}function Qee(e,t,n){e.setValue(t,n)}function $ee(e,t){return e.createComment(Su(t))}function wu(e,t,n){return e.createElement(t,n)}function Tu(e,t,n,r,i){e.insertBefore(t,n,r,i)}function Eu(e,t,n){e.appendChild(t,n)}function Du(e,t,n,r,i){r===null?Eu(e,t,n):Tu(e,t,n,r,i)}function Ou(e,t,n,r){e.removeChild(null,t,n,r)}function ete(e,t,n){e.setAttribute(t,`style`,n)}function tte(e,t,n){n===``?e.removeAttribute(t,`class`):e.setAttribute(t,`class`,n)}function ku(e,t,n){let{mergedAttrs:r,classes:i,styles:a}=n;r!==null&&Zc(e,t,r),i!==null&&tte(e,t,i),a!==null&&ete(e,t,a)}function Au(e){let t=nte();return t?t.sanitize(go.URL,e)||``:hu(e,`URL`)?mu(e):vu(Wi(e))}function nte(){let e=Uo();return e&&e[10].sanitizer}function ju(e){return e.ownerDocument.defaultView}function Mu(e){return e.ownerDocument}function rte(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 Nu=`ng-template`;function ite(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(Fu(r))return!1;o=!0}}}}}return Fu(r)||o}function Fu(e){return!(e&1)}function ste(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!==``&&!Fu(o)&&(t+=Lu(a,i),i=``),r=o,a||=!Fu(r);n++}return i!==``&&(t+=Lu(a,i)),t}function pte(e){return e.map(fte).join(`,`)}function mte(e){let t=[],n=[],r=1,i=2;for(;r!1});function Vu(e){if(!e)return 0;let t=e.toLowerCase().indexOf(`ms`)>-1?1:1e3;return parseFloat(e)*t}function Hu(e,t){return e.getPropertyValue(t).split(`,`).map(e=>e.trim())}function _te(e){let t=Hu(e,`transition-property`),n=Hu(e,`transition-duration`),r=Hu(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 vte(e){let t=Hu(e,`animation-name`),n=Hu(e,`animation-delay`),r=Hu(e,`animation-duration`),i=Hu(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 Uu(e,t){return e!==void 0&&e.duration>t.duration}function Wu(e){return(e.animationName!=null||e.propertyName!=null)&&e.duration>0}function Gu(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 yte(e,t){let n=getComputedStyle(e),r=vte(n),i=_te(n),a=r.duration>i.duration?r:i;Uu(t.get(e),a)||Wu(a)&&t.set(e,a)}function bte(e,t,n){if(!n)return;let r=e.getAnimations();return r.length===0?yte(e,t):xte(e,t,r)}function xte(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=Gu(e)??0,n,i;e.animationName?i=e.animationName:n=e.transitionProperty,t>=r.duration&&(r={animationName:i,propertyName:n,duration:t})}Uu(t.get(e),r)||Wu(r)&&t.set(e,r)}var Ku=new Set,Ste=!1,Cte=1,qu=typeof document<`u`&&typeof document?.documentElement?.getAnimations==`function`;function wte(e){return e[9].get(gte,Ste)}function Tte(e,t,n){let r=Yu.get(e);if(r){for(let e of t)r.classList.push(e);for(let e of n)r.cleanupFns.push(e)}else Yu.set(e,{classList:t,cleanupFns:n})}function Ju(e){let t=Yu.get(e);if(t){for(let e of t.cleanupFns)e();Yu.delete(e)}Xu.delete(e)}var Yu=new WeakMap,Xu=new WeakMap,Zu=new WeakMap;function Qu(e){return e?e[14]??e:null}var $u=new WeakSet;function Ete(e,t,n){let r=Zu.get(e);if(!r||r.length===0)return;let i=t.parentNode,a=t.previousSibling,o=Qu(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),$u.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 Dte(e,t,n){let r=Qu(n),i=Zu.get(e);i?i.some(e=>e.el===t)||i.push({el:t,declarationView:r}):Zu.set(e,[{el:t,declarationView:r}])}function ed(e){let t=e[26]??={};return t.enter??=new Map}function Ote(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 td(e){return e.composedPath?e.composedPath()[0]:e.target}function nd(e,t){let n=Xu.get(t);if(n===void 0)return!0;if(t!==td(e))return!1;let r=e.animation;if(r){let e=Gu(r);if(e!==void 0&&e+Cte{class e{impl=null;execute(){this.impl?.execute()}static ɵprov=Ti({token:e,providedIn:`root`,factory:()=>new e})}return e})(),cd=[0,1,2,3],ld=(()=>{class e{ngZone=S(Rs);scheduler=S(sc);errorHandler=S(Xs,{optional:!0});sequences=new Set;deferredRegistrations=new Set;executing=!1;constructor(){S(id,{optional:!0})}execute(){let e=this.sequences.size>0;e&&Rc(Tc.AfterRenderHooksStart),this.executing=!0;for(let e of cd)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&&Rc(Tc.AfterRenderHooksEnd)}register(e){let{view:t}=e;t===void 0?this.executing?this.deferredRegistrations.add(e):this.addSequence(e):((t[25]??=[]).push(e),jo(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(rd.AFTER_NEXT_RENDER,e):e()}static ɵprov=Ti({token:e,providedIn:`root`,factory:()=>new e})}return e})(),ud=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 dd(e,t){let n=t?.injector??S(ws);return od(`NgAfterNextRender`),jte(e,n,t,!0)}function Ate(e){return e instanceof Function?[void 0,void 0,e,void 0]:[e.earlyRead,e.write,e.mixedReadWrite,e.read]}function jte(e,t,n,r){let i=t.get(sd);i.impl??=t.get(ld);let a=t.get(id,null,{optional:!0}),o=n?.manualCleanup===!0?null:t.get(Es),s=t.get(ac,null,{optional:!0}),c=new ud(i.impl,Ate(e),s?.view,r,o,a?.snapshot(null));return i.impl.register(c),c}var fd=new Mi(``,{factory:()=>{let e=S(Ka),t=new Set;return e.onDestroy(()=>t.clear()),{queue:t,isScheduled:!1,scheduler:null,injector:e}}});function pd(e,t,n){let r=e.get(fd);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 Mte(e,t){let n=e.get(fd);if(Array.isArray(t))for(let e of t)n.queue.delete(e);else n.queue.delete(t)}function Nte(e,t){let n=e.get(fd);if(t.detachedLeaveAnimationFns){for(let e of t.detachedLeaveAnimationFns)n.queue.delete(e);t.detachedLeaveAnimationFns=void 0}}function Pte(e){let t=e.get(fd);t.isScheduled||=(dd(()=>{t.isScheduled=!1;for(let e of t.queue)e();t.queue.clear()},{injector:t.injector}),!0)}function Fte(e){let t=e.get(fd);t.scheduler=Pte,t.scheduler(e)}function md(e,t){for(let[n,r]of t)pd(e,r.animateFns)}function hd(e,t,n,r){let i=e?.[26]?.enter;t!==null&&i&&i.has(n.index)&&md(r,i)}function gd(e,t,n,r){try{n.get(Da)}catch{return r(!1)}let i=e?.[26];i?.enter?.has(t.index)&&Mte(n,i.enter.get(t.index).animateFns);let a=Ite(e,t,i);if(a.size===0){let n=!1;if(e){let r=[];_d(e,t,r),n=r.length>0}if(!n)return r(!1)}e&&Ku.add(e[19]),pd(n,()=>Lte(e,t,i||void 0,a,r),i||void 0)}function Ite(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 Lte(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&&_d(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),zte(e,t.running,i)}else Promise.allSettled(a).then(()=>{e&&Ku.delete(e[19]),i(!0)})}else e&&Ku.delete(e[19]),i(!1)}function _d(e,t,n){if(t.type&12){let r=e[t.index];if(co(r))for(let e=10;e{e[26]?.running===t&&(e[26].running=void 0,Ku.delete(e[19])),n(!0)})}function vd(e,t,n,r,i,a,o,s){if(i!=null){let c,l=!1;co(i)?c=i:so(i)&&(l=!0,i=i[0]);let u=vo(i);e===0&&r!==null?(hd(s,r,a,n),o==null?Eu(t,r,u):Tu(t,r,u,o||null,!0)):e===1&&r!==null?(hd(s,r,a,n),Tu(t,r,u,o||null,!0),Ete(a,u,s)):e===2?(s?.[26]?.leave?.has(a.index)&&Dte(a,u,s),$u.delete(u),gd(s,a,n,e=>{if($u.has(u)){$u.delete(u);return}Ou(t,u,l,e)})):e===3&&($u.delete(u),gd(s,a,n,()=>{t.destroyNode(u)})),c!=null&&zd(t,e,n,c,a,r,o)}}function Bte(e,t){yd(e,t),t[0]=null,t[5]=null}function Vte(e,t,n,r,i,a){r[0]=i,r[5]=t,Fd(e,r,n,1,i,a)}function yd(e,t){t[10].changeDetectionScheduler?.notify(9),Fd(e,t,t[11],2,null,null)}function Hte(e){let t=e[12];if(!t)return Sd(e[1],e);for(;t;){let n=null;if(so(t))n=t[12];else{let e=t[10];e&&(n=e)}if(!n){for(;t&&!t[4]&&t!==e;)so(t)&&Sd(t[1],t),t=t[3];t===null&&(t=e),so(t)&&Sd(t[1],t),n=t&&t[4]}t=n}}function bd(e,t){let n=e[9],r=n.indexOf(t);n.splice(r,1)}function xd(e,t){if(ho(t))return;let n=t[11];n.destroyNode&&Fd(e,t,n,3,null,null),Hte(t)}function Sd(e,t){if(ho(t))return;let n=nn(null);try{t[2]&=-129,t[2]|=256,t[24]&&vn(t[24]),wd(e,t),Cd(e,t),t[1].type===1&&t[11].destroy();let n=t[16];if(n!==null&&co(t[3])){n!==t[3]&&bd(n,t);let r=t[18];r!==null&&r.detachView(e)}ql(t)}finally{nn(n)}}function Cd(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&&Yd(e,t,27,!1),Rc(o?Tc.TemplateUpdateStart:Tc.TemplateCreateStart,i,n),n(r,i)}finally{ms(a),Rc(o?Tc.TemplateUpdateEnd:Tc.TemplateCreateEnd,i,n)}}function $d(e,t,n){sf(e,t,n),(n.flags&64)==64&&cf(e,t,n)}function ef(e,t,n=bo){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];Zd(o,n[i],s,a),l=!0}else if(i>c)break}}return o!==null&&Object.hasOwn(r.inputs,i)&&(Zd(r,n[o],i,a),l=!0),l}function yf(e,t){let n=wo(t,e),r=n[1];bf(r,n);let i=n[0];i!==null&&n[6]===null&&(n[6]=cu(i,n[9])),Rc(Tc.ComponentStart);try{xf(r,n,n[8])}finally{Rc(Tc.ComponentEnd,n[8])}}function bf(e,t){for(let n=t.length;n{jo(e.lView)},consumerOnSignalRead(){this.lView[24]=this}};function Nf(e){let t=e[24]??Object.create(Pf);return t.lView=e,t}var Pf={...an,consumerIsAlwaysLive:!0,kind:`template`,consumerMarkedDirty:e=>{let t=No(e.lView);for(;t&&!Ff(t[1]);)t=No(t);t&&Oo(t)},consumerOnSignalRead(){this.lView[24]=this}};function Ff(e){return e.type!==2}function If(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 Lf=100;function Rf(e,t=0){let n=e[10].rendererFactory;n.begin?.();try{zf(e,t)}finally{n.end?.()}}function zf(e,t){let n=Zo();try{Qo(!0),Gf(e,t);let n=0;for(;ko(e);){if(n===Lf)throw new hi(103,!1);n++,Gf(e,1)}}finally{Qo(n)}}function Bf(e,t,n,r){if(ho(t))return;let i=t[2];os(t);let a=!0,o=null,s=null;Ff(e)?(s=kf(t),o=pn(s)):rn()===null?(a=!1,s=Nf(t),o=pn(s)):t[24]&&=(vn(t[24]),null);try{Do(t),Gee(e.bindingStartIndex),n!==null&&Qd(e,t,n,2,r);let a=(i&3)==3;if(a){let n=e.preOrderCheckHooks;n!==null&&Vc(t,n,null)}else{let n=e.preOrderHooks;n!==null&&Hc(t,n,0,null),Uc(t,0)}if(Hf(t),If(t),Vf(t,0),e.contentQueries!==null&&lu(e,t),a){let n=e.contentCheckHooks;n!==null&&Vc(t,n)}else{let n=e.contentHooks;n!==null&&Hc(t,n,1),Uc(t,1)}qf(e,t);let o=e.components;o!==null&&Kf(t,o,0);let s=e.viewQuery;if(s!==null&&uu(2,s,r),a){let n=e.viewCheckHooks;n!==null&&Vc(t,n)}else{let n=e.viewHooks;n!==null&&Hc(t,n,2),Uc(t,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),t[22]){for(let e of t[22])e();t[22]=null}Df(t),t[2]&=-73}catch(e){throw jo(t),e}finally{s!==null&&(hn(s,o),a&&jf(s)),ds()}}function Vf(e,t){for(let n=Xl(e);n!==null;n=Zl(n))for(let e=10;e0&&(e[n-1][4]=r[4]);let a=_a(e,10+t);Bte(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 ep(e,t,n,r){let i=10+r,a=n.length;r>0&&(n[i-1][4]=t),r-1&&($f(e,n),_a(t,n))}this._attachedToViewContainer=!1}xd(this._lView[1],this._lView)}onDestroy(e){Mo(this._lView,e)}markForCheck(){Jf(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[2]&=-129}reattach(){Ao(this._lView),this._lView[2]|=128}detectChanges(){this._lView[2]|=1024,Rf(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new hi(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let e=mo(this._lView),t=this._lView[16];t!==null&&!e&&bd(t,this._lView),yd(this._lView[1],this._lView)}attachToAppRef(e){if(this._attachedToViewContainer)throw new hi(902,!1);this._appRef=e;let t=mo(this._lView),n=this._lView[16];n!==null&&!t&&tp(n,this._lView),Ao(this._lView)}},rp=(()=>{class e{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=ip;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 np(Cf(this._declarationLView,this._declarationTContainer,e,{embeddedViewInjector:t,dehydratedView:n}))}}return e})();function ip(){return ap(Go(),Uo())}function ap(e,t){return e.type&4?new rp(t,e,Il(e,t)):null}function op(e,t,n,r,i){let a=e.data[t];if(a===null)a=sp(e,t,n,r,i),Kee()&&(a.flags|=32);else if(a.type&64){a.type=n,a.value=r,a.attrs=i;let e=Wee();a.injectorIndex=e===null?-1:e.injectorIndex}return qo(a,!0),a}function sp(e,t,n,r,i){let a=Ko(),o=Jo(),s=o?a:a&&a.parent,c=e.data[t]=lp(e,s,n,t,r,i);return cp(e,c,a,o),c}function cp(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 lp(e,t,n,r,i,a){let o=t?t.injectorIndex:-1,s=0;return Bo()&&(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:vs(),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 up(e){let t=e[6]??[],n=e[3][11],r=[];for(let e of t)e.data.di===void 0?dp(e,n):r.push(e);e[6]=r}function dp(e,t){let n=0,r=e.firstChild;if(r){let i=e.data.r;for(;nnull,pp=()=>null;function mp(e,t){return fp(e,t)}function hp(e,t,n){return pp(e,t,n)}var gp=class{},_p=class{},vp=class{destroyNode=null;static __NG_ELEMENT_ID__=()=>yp()};function yp(){let e=Uo(),t=wo(Go().index,e);return(so(t)?t:e)[11]}var bp=(()=>{class e{static ɵprov=Ti({token:e,providedIn:`root`,factory:()=>null})}return e})();function xp(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 wp(e,t,n){return e[t]=n}function Tp(e,t){return e[t]}function Ep(e,t,n){if(n===Ru)return!1;let r=e[t];return!Object.is(r,n)&&(e[t]=n,!0)}function Dp(e,t,n,r){let i=Ep(e,t,n);return Ep(e,t+1,r)||i}function Op(e,t,n,r,i){let a=Dp(e,t,n,r);return Ep(e,t+2,i)||a}function kp(e,t,n,r,i,a){let o=Dp(e,t,n,r);return Dp(e,t+2,i,a)||o}function Ap(e,t,n){return function r(i){let a=r.__ngNativeEl__;a!==void 0&&au(i,a),Jf(uo(e)?wo(e.index,t):t,5);let o=t[8],s=jp(t,o,n,i),c=r.__ngNextListenerFn__;for(;c;)s=jp(t,o,c,i)&&s,c=c.__ngNextListenerFn__;return s}}function jp(e,t,n,r){let i=nn(null);try{return Rc(Tc.OutputStart,t,n),n(r)!==!1}catch(t){return gf(e,t),!1}finally{Rc(Tc.OutputEnd,t,n),nn(i)}}function Mp(e,t,n,r,i,a,o,s){let c=fo(e),l=!1,u=null;if(!r&&c&&(u=Pp(t,n,a,e.index)),u!==null){let e=u.__ngLastListenerFn__||u;e.__ngNextListenerFn__=o,u.__ngLastListenerFn__=o,l=!0}else{let o=bo(e,n),c=r?r(o):o;r||(s.__ngNativeEl__=o);let l=i.listen(c,a,s);Np(a)||Fp(r?t=>r(vo(t[e.index])):e.index,t,n,a,s,l,!1)}return l}function Np(e){return e.startsWith(`animation`)||e.startsWith(`transition`)}function Pp(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 Fp(e,t,n,r,i,a,o){let s=t.firstCreatePass?Fo(t):null,c=Po(n),l=c.length;c.push(i,a),s&&s.push(r,e,l,(l+1)*(o?-1:1))}function Ip(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,Lp(e,t,l,n[a+1],r,i);else if(l>s)break}}return Object.hasOwn(n.outputs,r)&&(c=!0,Lp(e,t,a,r,r,i)),c}function Lp(e,t,n,r,i,a){let o=t[n],s=t[1],c=o[s.data[n].outputs[r]].subscribe(a);Fp(e.index,s,t,i,a,c,!0)}function Rp(){zp()}function zp(){let e=Uo(),t=Wo(),n=Go();if(t.firstCreatePass&&Gp(t,n),n.controlDirectiveIndex===-1)return;od(`NgSignalForms`);let r=e[n.controlDirectiveIndex];t.data[n.controlDirectiveIndex].controlDef.create(r,new Hp(e,t,n))}function Bp(){Vp()}function Vp(){let e=Uo(),t=Wo(),n=hs();if(n.controlDirectiveIndex===-1)return;let r=t.data[n.controlDirectiveIndex].controlDef,i=e[n.controlDirectiveIndex];r.update(i,new Hp(e,t,n))}var Hp=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 bo(this.tNode,this.lView)}get descriptor(){return`<${this.tNode.value}>`}listenToCustomControlOutput(e,t){let n=this.tView.data[this.tNode.customControlIndex];Ip(this.tNode,this.lView,n,e,Ap(this.tNode,this.lView,t))}listenToCustomControlModel(e){let t=this.tNode.flags&1024?`valueChange`:`checkedChange`,n=this.tView.data[this.tNode.customControlIndex];Ip(this.tNode,this.lView,n,t,Ap(this.tNode,this.lView,e))}listenToDom(e,t){Mp(this.tNode,this.tView,this.lView,void 0,this.lView[11],e,t,Ap(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(Wp(r,o,e)))&&(Zd(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=Up(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}Kp(e,t)}function Kp(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 qp(e,t){return Jp(e,t)&&Yp(e,t+`Change`)}function Jp(e,t){return t in e.inputs}function Yp(e,t){return t in e.outputs}var Xp=Symbol(`BINDING`),Zp=new Mi(``);function Qp(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 fm(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&Xd.SignalBased)!==0};return i&&(a.transform=i),a})}function bm(e){return Object.keys(e).map(t=>({propName:e[t],templateName:t}))}function xm(e,t,n){let r=t instanceof Ka?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(_p,null);if(t===null)throw new hi(407,!1);return{rendererFactory:t,sanitizer:e.get(bp,null),changeDetectionScheduler:e.get(sc,null),ngReflect:!1,tracingService:e.get(id,null,{optional:!0})}}function Cm(e,t,n){let r=Tm(e);return wu(t,r,r===`svg`?`svg`:r===`math`?_o:n)}function wm(e){if((e&&`localName`in e&&typeof e.localName==`string`?e.localName:e?.tagName)?.toLowerCase()===`script`)throw new hi(905,!1)}function Tm(e){return(e.selectors[0][0]||`div`).toLowerCase()}var Em=class{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=ym(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=bm(this.componentDef.outputs),this.cachedOutputs}constructor(e,t){this.componentDef=e,this.ngModule=t,this.componentType=e.type,this.selector=pte(e.selectors),this.ngContentSelectors=e.ngContentSelectors??[],this.isBoundToModule=!!t}create(e,t,n,r,i,a,o){Rc(Tc.DynamicComponentStart);let s=nn(null);try{let s=this.componentDef,c=xm(s,r||this.ngModule,e),l=Sm(c),u=l.tracingService;return u&&u.componentCreate?u.componentCreate(xp(s),()=>this.createComponentRef(l,c,t,n,i,a,o)):this.createComponentRef(l,c,t,n,i,a,o)}finally{nn(s)}}createComponentRef(e,t,n,r,i,a,o){let s=this.componentDef,c=Dm(r,s,a,i),l=e.rendererFactory.createRenderer(null,s),u=r?tf(l,r,s.encapsulation,t):Cm(s,l,o??null);wm(u);let d=t.get(Zp,null),f=Om(u,()=>t.get(Ts,null)??tu());d&&d.addHost(f);let p=a?.some(Am)||i?.some(e=>typeof e!=`function`&&e.bindings.some(Am)),m=Wd(null,c,null,512|Kd(s),null,null,e,l,t,null,cu(u,t,!0));d&&_m&&f instanceof ShadowRoot&&Mo(m,()=>{d.removeHost(f)}),m[27]=u,os(m);let h=null;try{let e=mm(27,m,2,`#host`,()=>c.directiveRegistry,!0,0);ku(l,u,e),Yl(u,m),$d(c,m,e),du(c,e,m),hm(c,e),n!==void 0&&Mm(e,this.ngContentSelectors,n),h=wo(e.index,m),m[8]=h[8],xf(c,m,null)}catch(e){throw h!==null&&ql(h),ql(m),e}finally{Rc(Tc.DynamicComponentEnd),ds()}return new jm(this.componentType,m,!!p)}};function Dm(e,t,n,r){let i=e?[`ng-version`,`22.1.7`]:mte(t.selectors[0]),a=null,o=null,s=0;if(n)for(let e of n)s+=e[Xp].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 Am(e){let t=e[Xp].kind;return t===`input`||t===`twoWay`}var jm=class extends gp{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(e,t,n){super(),this._rootLView=t,this._hasInputBindings=n,this._tNode=xo(t[1],27),this.location=Il(this._tNode,t),this.instance=wo(this._tNode.index,t)[8],this.hostView=this.changeDetectorRef=new np(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;_f(n,r[1],r,e,t),this.previousInputValues.set(e,t),Jf(wo(n.index,r),1)}get injector(){return new Ol(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(e){this.hostView.onDestroy(e)}};function Mm(e,t,n){let r=e.projection=[];for(let e=0;e{class e{static __NG_ELEMENT_ID__=Pm}return e})();function Pm(){return Rm(Go(),Uo())}var Fm=class e extends Nm{_lContainer;_hostTNode;_hostLView;constructor(e,t,n){super(),this._lContainer=e,this._hostTNode=t,this._hostLView=n}get element(){return Il(this._hostTNode,this._hostLView)}get injector(){return new Ol(this._hostTNode,this._hostLView)}get parentInjector(){let e=gl(this._hostTNode,this._hostLView);if(nl(e)){let t=al(e,this._hostLView),n=rl(e),r=t[1].data[n+8];return new Ol(r,t)}return new Ol(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(e){let t=Im(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=mp(this._lContainer,e.ssrId),o=e.createEmbeddedViewImpl(t||{},i,a);return this.insertImpl(o,r,wf(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 Em(Bi(e)),u=n||this.parentInjector;if(!i&&l.ngModule==null){let e=this.parentInjector.get(Ka,null);e&&(i=e)}let d=Bi(l.componentType??{}),f=mp(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,wf(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(Ree(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 Zf(o,i,a,r),t.attachToViewContainerRef(),ga(Lm(o),a,t),t}move(e,t){return this.insert(e,t)}indexOf(e){let t=Im(this._lContainer);return t===null?-1:t.indexOf(e)}remove(e){let t=this._adjustIndex(e,-1),n=$f(this._lContainer,t);n&&(_a(Lm(this._lContainer),t),xd(n[1],n))}detach(e){let t=this._adjustIndex(e,-1),n=$f(this._lContainer,t);return n&&_a(Lm(this._lContainer),t)!=null?new np(n):null}_adjustIndex(e,t=0){return e??this.length+t}};function Im(e){return e[8]}function Lm(e){return e[8]||=[]}function Rm(e,t){let n,r=t[e.index];return co(r)?n=r:(n=Yf(r,t,null,e),t[e.index]=n,Jd(t,n)),Bm(n,t,e,r),new Fm(n,e,t)}function zm(e,t){let n=e[11],r=n.createComment(``),i=bo(t,e);return Tu(n,n.parentNode(i),r,n.nextSibling(i),!1),r}var Bm=Um,Vm=()=>!1;function Hm(e,t,n){return Vm(e,t,n)}function Um(e,t,n,r){if(e[7])return;let i;i=n.type&8?vo(r):zm(t,n),e[7]=i}var Wm=class e{queryList;matches=null;constructor(e){this.queryList=e}clone(){return new e(this.queryList)}setDirty(){this.queryList.setDirty()}},Gm=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 ah(e,t,n){e.queries===null&&(e.queries=new qm),e.queries.track(new Jm(t,n))}function oh(e,t){return e.queries.getByIndex(t)}function sh(e,t){let n=e[1],r=oh(n,t);return r.crossesNgTemplate?eh(n,e,t,[]):$m(n,e,r,t)}function ch(e,t,n){let r,i=wn(()=>{r._dirtyCounter();let n=fh(r,e);if(t&&n===void 0)throw new hi(-951,!1);return n});return r=i[tn],r._dirtyCounter=E(0),r._flatValue=void 0,i}function lh(e){return ch(!0,!1,e)}function uh(e){return ch(!0,!0,e)}function dh(e,t){let n=e[tn];n._lView=Uo(),n._queryIndex=t,n._queryList=th(n._lView,t),n._queryList.onDirty(()=>n._dirtyCounter.update(e=>e+1))}function fh(e,t){let n=e._lView,r=e._queryIndex;if(n===void 0||r===void 0||n[2]&4)return t?void 0:Ta;let i=th(n,r),a=sh(n,r);return i.reset(a,Rl),t?i.first:i._changesDetected||e._flatValue===void 0?e._flatValue=i.toArray():e._flatValue}function ph(e){return!!e&&typeof e.then==`function`}function mh(e){return!!e&&typeof e.subscribe==`function`}var hh=class{},gh=class extends hh{injector;instance=null;constructor(e){super();let t=new qa([...e.providers,{provide:hh,useValue:this}],e.parent||Ga(),e.debugName,new Set([`environment`]));this.injector=t,e.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(e){this.injector.onDestroy(e)}};function _h(e,t,n=null){return new gh({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}var vh=(()=>{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=ja(!1,e.type),n=t.length>0?_h([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=Ti({token:e,providedIn:`environment`,factory:()=>new e(sa(Ka))})}return e})();function O(e){return wc(()=>{let t=wh(e),n={...t,decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection!==Hl.Eager,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:t.standalone?e=>e.get(vh).getOrCreateStandaloneInjector(n):null,getExternalStyles:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||fu.Emulated,styles:e.styles||Ta,_:null,schemas:e.schemas||null,tView:null,id:``};t.standalone&&od(`NgStandalone`),Th(n);let r=e.dependencies;return n.directiveDefs=Eh(r,yh),n.pipeDefs=Eh(r,Hi),n.id=Dh(n),n})}function yh(e){return Bi(e)||Vi(e)}function bh(e,t){if(e==null)return wa;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=Xd.None,c=null),n[a]=[r,s,c],t[a]=o}return n}function xh(e){if(e==null)return wa;let t={};for(let n in e)Object.hasOwn(e,n)&&(t[e[n]]=n);return t}function Sh(e){return wc(()=>{let t=wh(e);return Th(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 wh(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||wa,exportAs:e.exportAs||null,standalone:e.standalone??!0,signals:e.signals===!0,selectors:e.selectors||Ta,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,controlDef:null,signalFormsInputPresence:null,inputs:bh(e.inputs,t),outputs:xh(e.outputs),debugInfo:null}}function Th(e){e.features?.forEach(t=>t(e))}function Eh(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 Dh(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 Oh=new Mi(``),kh=(()=>{class e{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((e,t)=>{this.resolve=e,this.reject=t});appInits=S(Oh,{optional:!0})??[];injector=S(ws);constructor(){}runInitializers(){if(this.initialized)return;let e=[];for(let t of this.appInits){let n=io(this.injector,t);if(ph(n))e.push(n);else if(mh(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=Pl({token:e,factory:e.ɵfac})}return e})();function Ah(e){return t=>{t.controlDef={create:(e,t)=>{e?.ɵngControlCreate(t)},update:(e,t)=>{e?.ɵngControlUpdate?.(t)},passThroughInput:e}}}function jh(e){return Object.getPrototypeOf(e.prototype).constructor}function Mh(e){let t=jh(e.type),n=!0,r=[e];for(;t&&t!==Function.prototype&&t!==Object.prototype;){let i,a=Object.hasOwn(t,Pi)?t[Pi]:void 0,o=Object.hasOwn(t,Fi)?t[Fi]:void 0;if(po(e))i=a??o;else{if(a)throw new hi(903,!1);i=o}if(i){if(n){r.push(i);let t=e;t.inputs=Fh(e.inputs),t.declaredInputs=Fh(e.declaredInputs),t.outputs=Fh(e.outputs);let n=i.hostBindings;n&&Rh(e,n);let a=i.viewQuery,o=i.contentQueries;if(a&&Ih(e,a),o&&Lh(e,o),Nh(e,i),vi(e.outputs,i.outputs),po(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=el(i.hostAttrs,n=el(n,i.hostAttrs))}}function Fh(e){return e===wa?{}:e===Ta?[]:e}function Ih(e,t){let n=e.viewQuery;e.viewQuery=n?(e,r)=>{t(e,r),n(e,r)}:t}function Lh(e,t){let n=e.contentQueries;e.contentQueries=n?(e,r,i)=>{t(e,r,i),n(e,r,i)}:t}function Rh(e,t){let n=e.hostBindings;e.hostBindings=n?(e,r)=>{t(e,r),n(e,r)}:t}function zh(e,t,n,r,i,a,o,s){if(n.firstCreatePass){e.mergedAttrs=el(e.mergedAttrs,e.attrs);let t=e.tView=Vd(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),qo(e,!1);let c=Uh(n,t,e,r);bs()&&Ad(n,t,c,e),Yl(c,t);let l=Yf(c,t,c,e);t[r+27]=l,Jd(t,l),Hm(l,e,t)}function Bh(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;return t.firstCreatePass?(f=op(t,d,4,o||null,s||null),zo()&&em(t,e,f,Eo(t.consts,l),uf),Bc(t,f)):f=t.data[d],zh(f,e,t,n,r,i,a,c),fo(f)&&$d(t,e,f),l!=null&&ef(e,f,u),f}function Vh(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;if(t.firstCreatePass){if(f=op(t,d,4,o||null,s||null),l!=null){let e=Eo(t.consts,l);f.localNames=[];for(let t=0;t{throw new hi(600,``)})}var Jh=10,Yh=(()=>{class e{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=S(Zs);afterRenderManager=S(sd);zonelessEnabled=S(cc);rootEffectScheduler=S(uc);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new Kr;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=S(As);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(pi(e=>!e))}constructor(){S(id,{optional:!0})}whenStable(){let e;return new Promise(t=>{e=this.isStable.subscribe({next:e=>{e&&t()}})}).finally(()=>{e.unsubscribe()})}_injector=S(Ka);_rendererFactory=null;get injector(){return this._injector}bootstrap(e,t){return this.bootstrapImpl(e,t)}bootstrapImpl(e,t,n=ws.NULL){return this._injector.get(Rs).run(()=>{if(Rc(Tc.BootstrapComponentStart),!this._injector.get(kh).done)throw new hi(405,``);let r=Bi(e),i=this._injector.get(hh),a=new Em(r,i);this.componentTypes.push(e);let{hostElement:o,directives:s,bindings:c}=Xh(t),l=o||a.selector,u=a.create(n,[],l,i.injector,s,c),d=u.location.nativeElement,f=u.injector.get(Gh,null);return f?.registerApplication(d),u.onDestroy(()=>{this.detachView(u.hostView),Zh(this.components,u),f?.unregisterApplication(d)}),this._loadComponent(u),Rc(Tc.BootstrapComponentEnd,u),u})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){Rc(Tc.ChangeDetectionStart),this.tracingSnapshot===null?this.tickImpl():this.tracingSnapshot.run(rd.CHANGE_DETECTION,this.tickImpl)}tickImpl=()=>{if(this._runningTick)throw Rc(Tc.ChangeDetectionEnd),new hi(101,!1);let e=nn(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,nn(e),this.afterTick.next(),Rc(Tc.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(_p,null,{optional:!0}));let e=0;for(;this.dirtyFlags!==0&&e++ko(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;Zh(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(Kh,[]).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),()=>Zh(this._destroyListeners,e)}destroy(){if(this._destroyed)throw new hi(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=Pl({token:e,factory:e.ɵfac})}return e})();function Xh(e){return e===void 0||typeof e==`string`||e instanceof Element?{hostElement:e}:e}function Zh(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function k(e,t,n,r){let i=Uo();return Ep(i,ts(),t)&&(Wo(),df(hs(),i,e,t,n,r)),k}function Qh(e){if(od(`NgAnimateEnter`),!qu)return Qh;let t=Uo();if(wte(t))return Qh;let n=Go(),r=t[9].get(Rs);return kte(ed(t),n,()=>$h(t,n,e,r)),Fte(t[9]),md(t[9],ed(t)),Qh}function $h(e,t,n,r){let i=bo(t,e),a=e[11],o=Ote(n),s=[],c=!1,l=e=>{if(td(e)!==i)return;let t=e instanceof AnimationEvent?`animationend`:`transitionend`;r.runOutsideAngular(()=>{a.listen(i,t,u)})},u=e=>{td(e)===i&&(nd(e,i)&&(c=!0),eg(e,i,a))};if(o&&o.length>0){r.runOutsideAngular(()=>{s.push(a.listen(i,`animationstart`,l)),s.push(a.listen(i,`transitionstart`,l))}),Tte(i,o,s);for(let e of o)a.addClass(i,e);r.runOutsideAngular(()=>{requestAnimationFrame(()=>{if(!c&&(bte(i,Xu,qu),!Xu.has(i))){for(let e of o)a.removeClass(i,e);Ju(i)}})})}}function eg(e,t,n){let r=Yu.get(t);if(td(e)===t&&r&&nd(e,t)){e.stopPropagation();for(let e of r.classList)n.removeClass(t,e);Ju(t)}}var tg=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 ng(e,t,n,r,i){return e===n&&Object.is(t,r)?1:Object.is(i(e,t),i(n,r))?-1:0}function rg(e,t,n,r){let i,a,o=0,s=e.length-1;if(Array.isArray(t)){nn(r);let c=t.length-1;for(nn(null);o<=s&&o<=c;){let r=e.at(o),l=t[o],u=ng(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=ng(s,d,c,f,n);if(p!==0){p<0&&e.updateValue(s,f),s--,c--;continue}let m=n(o,r),h=n(s,d),g=n(o,l);if(Object.is(g,h)){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 sg,a??=og(e,o,s,n),ig(e,i,o,g))e.updateValue(o,l),o++,s++;else if(a.has(g))i.set(m,e.detach(o)),s--;else{let n=e.create(o,t[o]);e.attach(o,n),o++,s++}}for(;o<=c;)ag(e,i,n,o,t[o]),o++}else if(t!=null){nn(r);let c=t[Symbol.iterator]();nn(null);let l=c.next();for(;!l.done&&o<=s;){let t=e.at(o),r=l.value,u=ng(o,t,o,r,n);if(u!==0)u<0&&e.updateValue(o,r),o++,l=c.next();else{i??=new sg,a??=og(e,o,s,n);let u=n(o,r);if(ig(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;)ag(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 ig(e,t,n,r){return t!==void 0&&t.has(r)?(e.attach(n,t.get(r)),t.delete(r),!0):!1}function ag(e,t,n,r,i){if(ig(e,t,r,n(r,i)))e.updateValue(r,i);else{let t=e.create(r,i);e.attach(r,t)}}function og(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 sg=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){od(`NgControlFlow`);let c=Uo(),l=Wo();return Vh(c,l,e,t,n,r,i,Eo(l.consts,a),256,o,s),cg}function cg(e,t,n,r,i,a,o,s){od(`NgControlFlow`);let c=Uo(),l=Wo();return Vh(c,l,e,t,n,r,i,Eo(l.consts,a),512,o,s),cg}function j(e,t){od(`NgControlFlow`);let n=Uo(),r=ts(),i=n[r]===Ru?-1:n[r],a=i===-1?void 0:mg(n,27+i);if(Ep(n,r,e)){let r=nn(null);try{if(a!==void 0&&Qf(a,0),e!==-1){let r=27+e,i=mg(n,r),a=yg(n[1],r),o=hp(i,a,n);Zf(i,Cf(n,a,t,{dehydratedView:o}),0,wf(a,o))}}finally{nn(r)}}else if(a!==void 0){let e=Xf(a,0);e!==void 0&&(e[8]=t)}}var lg=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 ug(e){return e}function dg(e,t){return t}var fg=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){od(`NgControlFlow`);let p=Uo(),m=Wo(),h=c!==void 0,g=Uo(),_=new fg(h,s?o.bind(g[15][8]):o);g[27+e]=_,Vh(p,m,e+1,t,n,r,i,Eo(m.consts,a),256),h&&Vh(p,m,e+2,c,l,u,d,Eo(m.consts,f),512)}var pg=class extends tg{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,Zf(this.lContainer,t,e,wf(this.templateTNode,n)),hg(this.lContainer,e)}detach(e){return this.needsIndexUpdate||=e!==this.length-1,gg(this.lContainer,e),_g(this.lContainer,e)}create(e,t){let n=mp(this.lContainer,this.templateTNode.tView.ssrId);return Cf(this.hostLView,this.templateTNode,new lg(this.lContainer,t,e),{dehydratedView:n})}destroy(e){xd(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];Nte(e,r),Ku.delete(n[19]),r.detachedLeaveAnimationFns=void 0}}function gg(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 _g(e,t){return $f(e,t)}function vg(e,t){return Xf(e,t)}function yg(e,t){return xo(e,t)}function P(e,t,n){let r=Uo();return Ep(r,ts(),t)&&(Wo(),rf(hs(),r,e,t,r[11],n)),P}function bg(e,t,n,r,i){_f(t,e,n,i?`class`:`style`,r)}function F(e,t,n,r){let i=Uo(),a=i[1],o=e+27,s=a.firstCreatePass?mm(o,i,2,t,uf,zo(),n,r):a.data[o];if(uo(s)){let n=i[10].tracingService;if(n&&n.componentCreate){let o=a.data[s.directiveStart+s.componentOffset];return n.componentCreate(xp(o),()=>(xg(e,t,i,s,r),F))}}return xg(e,t,i,s,r),F}function xg(e,t,n,r,i){if(mf(r,n,e,t,Cg),fo(r)){let e=n[1];$d(e,n,r),du(e,r,n)}i!=null&&ef(n,r)}function I(){let e=Wo(),t=hf(Go());return e.firstCreatePass&&hm(e,t),Vo(t)&&Ho(),Ro(),t.classesWithoutHost!=null&&Yc(t)&&bg(e,t,Uo(),t.classesWithoutHost,!0),t.stylesWithoutHost!=null&&Xc(t)&&bg(e,t,Uo(),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=Uo(),a=i[1],o=e+27,s=a.firstCreatePass?gm(o,a,2,t,n,r):a.data[o];return mf(s,i,e,t,Cg),r!=null&&ef(i,s),R}function z(){return Vo(hf(Go()))&&Ho(),Ro(),z}function Sg(e,t,n,r){return R(e,t,n,r),z(),Sg}var Cg=(e,t,n,r,i)=>(xs(!0),wu(t[11],r,vs()));function wg(e,t,n){let r=Uo(),i=r[1],a=e+27,o=i.firstCreatePass?mm(a,r,8,`ng-container`,uf,zo(),t,n):i.data[a];if(mf(o,r,e,`ng-container`,Dg),fo(o)){let e=r[1];$d(e,r,o),du(e,o,r)}return n!=null&&ef(r,o),wg}function Tg(){let e=Wo(),t=hf(Go());return e.firstCreatePass&&hm(e,t),Tg}function Eg(e,t,n){return wg(e,t,n),Tg(),Eg}var Dg=(e,t,n,r,i)=>(xs(!0),$ee(t[11],``));function B(){return Uo()}function Og(e,t,n){let r=Uo();return Ep(r,ts(),t)&&(Wo(),af(hs(),r,e,t,r[11],n)),Og}var kg=void 0;function Ag(e){let t=Math.floor(Math.abs(e)),n=e.toString().replace(/^[^.]*\.?/,``).length;return t===1&&n===0?1:5}var jg=[`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`]],kg,[[`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`]],kg,[[`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}`,kg,kg,kg],[`.`,`,`,`;`,`%`,`+`,`-`,`E`,`×`,`‰`,`∞`,`NaN`,`:`],[`#,##0.###`,`#,##0%`,`¤#,##0.00`,`#E0`],`USD`,`$`,`US Dollar`,{},`ltr`,Ag],Mg=Object.create(null);function Ng(e){let t=Ig(e),n=Pg(t);if(n)return n;let r=t.split(`-`)[0];if(n=Pg(r),n)return n;if(r===`en`)return jg;throw new hi(701,!1)}function Pg(e){if(!(e in Mg)){let t=na.ng&&na.ng.common&&na.ng.common.locales&&na.ng.common.locales[e];return t!==void 0&&(Mg[e]=t),t}return Mg[e]}var Fg={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 Ig(e){return e.toLowerCase().replace(/_/g,`-`)}var Lg=`en-US`;function Rg(e){typeof e==`string`&&e.toLowerCase().replace(/_/g,`-`)}function V(e,t,n){let r=Uo(),i=Wo(),a=Go();return zg(i,r,r[11],a,e,t,n),V}function H(e,t,n){let r=Uo(),i=Wo(),a=Go();return(a.type&3||n)&&Mp(a,i,r,n,r[11],e,t,Ap(a,r,t)),H}function zg(e,t,n,r,i,a,o){let s=!0,c=null;if((r.type&3||o)&&(c??=Ap(r,t,a),Mp(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 Yg(e){return(e&2)==2}function Xg(e,t){return e&131071|t<<17}function Zg(e){return e|2}function Qg(e){return(e&131068)>>2}function $g(e,t){return e&-131069|t<<2}function e_(e){return(e&1)==1}function t_(e){return e|1}function n_(e,t,n,r,i,a){let o=a?t.classBindings:t.styleBindings,s=Jg(o),c=Qg(o);e[r]=n;let l=!1,u;if(Array.isArray(n)){let e=n;u=e[1],(u===null||Sa(e,u)>0)&&(l=!0)}else u=n;if(i){if(c!==0){let t=Jg(e[s+1]);e[r+1]=qg(t,s),t!==0&&(e[t+1]=$g(e[t+1],r)),e[s+1]=Xg(e[s+1],r)}else e[r+1]=qg(s,0),s!==0&&(e[s+1]=$g(e[s+1],r)),s=r}else e[r+1]=qg(c,0),s===0?s=r:e[c+1]=$g(e[c+1],r),c=r;l&&(e[r+1]=Zg(e[r+1])),i_(e,u,r,!0),i_(e,u,r,!1),r_(t,u,e,r,a),o=qg(s,c),a?t.classBindings=o:t.styleBindings=o}function r_(e,t,n,r,i){let a=i?e.residualClasses:e.residualStyles;a!=null&&typeof t==`string`&&Sa(a,t)>=0&&(n[r+1]=t_(n[r+1]))}function i_(e,t,n,r){let i=e[n+1],a=t===null,o=r?Jg(i):Qg(i),s=!1;for(;o!==0&&(s===!1||a);){let n=e[o],i=e[o+1];a_(n,t)&&(s=!0,e[o+1]=r?t_(i):Zg(i)),o=r?Jg(i):Qg(i)}s&&(e[n+1]=r?Zg(i):t_(i))}function a_(e,t){return e===null||t==null||(Array.isArray(e)?e[1]:e)===t?!0:Array.isArray(e)&&typeof t==`string`?Sa(e,t)>=0:!1}var o_={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function s_(e){return e.substring(o_.key,o_.keyEnd)}function c_(e){return u_(e),l_(e,d_(e,0,o_.textEnd))}function l_(e,t){let n=o_.textEnd;return n===t?-1:(t=o_.keyEnd=f_(e,o_.key=t,n),d_(e,t,n))}function u_(e){o_.key=0,o_.keyEnd=0,o_.value=0,o_.valueEnd=0,o_.textEnd=e.length}function d_(e,t,n){for(;t32;)t++;return t}function p_(e,t,n){return g_(e,t,n,!1),p_}function W(e,t){return g_(e,t,null,!0),W}function m_(e){__(D_,h_,e,!0)}function h_(e,t){for(let n=c_(t);n>=0;n=l_(t,n))ba(e,s_(t),!0)}function g_(e,t,n,r){let i=Uo(),a=Wo(),o=ns(2);if(a.firstUpdatePass&&y_(a,e,o,r),t!==Ru&&Ep(i,o,t)){let s=a.data[ps()];k_(a,s,i,i[11],e,i[o+1]=M_(t,n),r,o)}}function __(e,t,n,r){let i=Wo(),a=ns(2);i.firstUpdatePass&&y_(i,null,a,r);let o=Uo();if(n!==Ru&&Ep(o,a,n)){let s=i.data[ps()];if(N_(s,r)&&!v_(i,a)){let e=r?s.classesWithoutHost:s.stylesWithoutHost;e!==null&&(n=bi(e,n||``)),bg(i,s,o,n,r)}else O_(i,s,o,o[11],o[a+1],o[a+1]=E_(e,t,n),r,a)}}function v_(e,t){return t>=e.expandoStartIndex}function y_(e,t,n,r){let i=e.data;if(i[n+1]===null){let a=i[ps()],o=v_(e,n);N_(a,r)&&t===null&&!o&&(t=!1),t=b_(i,a,t,r),n_(i,a,t,n,o,r)}}function b_(e,t,n,r){let i=Yee(e),a=r?t.residualClasses:t.residualStyles;if(i===null)(r?t.classBindings:t.styleBindings)===0&&(n=w_(null,e,t,n,r),n=T_(n,t.attrs,r),a=null);else{let o=t.directiveStylingLast;if(o===-1||e[o]!==i){if(n=w_(i,e,t,n,r),a===null){let n=x_(e,t,r);n!==void 0&&Array.isArray(n)&&(n=w_(null,e,t,n[1],r),n=T_(n,t.attrs,r),S_(e,t,r,n))}else a=C_(e,t,r)}}return a!==void 0&&(r?t.residualClasses=a:t.residualStyles=a),n}function x_(e,t,n){let r=n?t.classBindings:t.styleBindings;if(Qg(r)!==0)return e[Jg(r)]}function S_(e,t,n,r){let i=n?t.classBindings:t.styleBindings;e[Jg(i)]=r}function C_(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===Ru&&(u=l?Ta:void 0);let d=l?xa(u,r):c===r?u:void 0;if(a&&!j_(d)&&(d=xa(t,r)),j_(d)&&(s=d,o))return s;let f=e[i+1];i=o?Jg(f):Qg(f)}if(t!==null){let e=a?t.residualClasses:t.residualStyles;e!=null&&(s=xa(e,r))}return s}function j_(e){return e!==void 0}function M_(e,t){return e==null||e===``||(typeof t==`string`?e=mu(e)+t:typeof e==`object`&&(e=yi(mu(e)))),e}function N_(e,t){return!!(e.flags&(t?8:16))}function G(e,t=``){let n=Uo(),r=Wo(),i=e+27,a=r.firstCreatePass?op(r,i,1,t,null):r.data[i],o=P_(r,n,a,t);n[i]=o,bs()&&Ad(r,n,o,a),qo(a,!1)}var P_=(e,t,n,r)=>(xs(!0),Cu(t[11],r));function F_(e,t,n,r=``){return Ep(e,ts(),n)?t+Wi(n)+r:Ru}function Ute(e,t,n,r,i,a=``){let o=Dp(e,es(),n,i);return ns(2),o?t+Wi(n)+r+Wi(i)+a:Ru}function Wte(e,t,n,r,i,a,o,s=``){let c=Op(e,es(),n,i,o);return ns(3),c?t+Wi(n)+r+Wi(i)+a+Wi(o)+s:Ru}function Gte(e,t,n,r,i,a,o,s,c,l=``){let u=kp(e,es(),n,i,o,c);return ns(4),u?t+Wi(n)+r+Wi(i)+a+Wi(o)+s+Wi(c)+l:Ru}function K(e){return q(``,e),K}function q(e,t,n){let r=Uo(),i=F_(r,e,t,n);return i!==Ru&&R_(r,ps(),i),q}function J(e,t,n,r,i){let a=Uo(),o=Ute(a,e,t,n,r,i);return o!==Ru&&R_(a,ps(),o),J}function I_(e,t,n,r,i,a,o){let s=Uo(),c=Wte(s,e,t,n,r,i,a,o);return c!==Ru&&R_(s,ps(),c),I_}function L_(e,t,n,r,i,a,o,s,c){let l=Uo(),u=Gte(l,e,t,n,r,i,a,o,s,c);return u!==Ru&&R_(l,ps(),u),L_}function R_(e,t,n){let r=yo(t,e);Qee(e[11],r,n)}function z_(e,t,n){xc(t)&&(t=t());let r=Uo();return Ep(r,ts(),t)&&(Wo(),rf(hs(),r,e,t,r[11],n)),z_}function B_(e,t){let n=xc(e);return n&&e.set(t),n}function V_(e,t){let n=Uo(),r=Wo(),i=Go();return zg(r,n,n[11],i,e,t),V_}var H_={};function U_(e){od(`NgLet`);let t=Wo(),n=Uo(),r=e+27;return qo(op(t,r,128,null,null),!1),Co(t,n,r,H_),U_}function W_(e){return Co(Wo(),Uo(),ps(),e),e}function Y(e){let t=So(Xo(),27+e);if(t===H_)throw new hi(314,!1);return t}function G_(e,t,n=``){return F_(Uo(),e,t,n)}function K_(e,t,n){let r=Wo();r.firstCreatePass&&q_(t,r.data,r.blueprint,po(e),n)}function q_(e,t,n,r,i){if(e=Ci(e),Array.isArray(e))for(let a=0;a>20;if(za(e)||!e.multi){let r=new Jc(l,i,$p,null),p=X_(c,t,i?u:u+f,d);p===-1?(_l(pl(s,o),a,c),J_(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=X_(c,t,u+f,d),m=X_(c,t,u,u+f),h=p>=0&&n[p],g=m>=0&&n[m];if(i&&!g||!i&&!h){_l(pl(s,o),a,c);let u=Jte(i?qte:Kte,n.length,i,r,l,e);!i&&g&&(n[m].providerFactory=u),J_(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=Y_(n[i?m:p],l,!i&&r);J_(a,e,p>-1?p:m,t)}!i&&r&&g&&n[m].componentProviders++}}}function J_(e,t,n,r){let i=za(t),a=Ba(t);if(i||a){let o=(a?Ci(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 Y_(e,t,n){return n&&e.componentProviders++,e.multi.push(t)-1}function X_(e,t,n,r){for(let i=n;i{n.providersResolver=(t,n)=>K_(t,n?n(e):e,!1),t&&(n.viewProvidersResolver=(e,n)=>K_(e,n?n(t):t,!0))}}function $_(e,t){let n=$o()+e,r=Uo();return r[n]===Ru?wp(r,n,t()):Tp(r,n)}function ev(e,t,n){return rv(Uo(),$o(),e,t,n)}function tv(e,t,n,r){return iv(Uo(),$o(),e,t,n,r)}function Yte(e,t,n,r,i,a,o){return Xte(Uo(),$o(),e,t,n,r,i,a)}function nv(e,t){let n=e[t];return n===Ru?void 0:n}function rv(e,t,n,r,i,a){let o=t+n;return Ep(e,o,i)?wp(e,o+1,a?r.call(a,i):r(i)):nv(e,o+1)}function iv(e,t,n,r,i,a,o){let s=t+n;return Dp(e,s,i,a)?wp(e,s+2,o?r.call(o,i,a):r(i,a)):nv(e,s+2)}function Xte(e,t,n,r,i,a,o,s,c){let l=t+n;return kp(e,l,i,a,o,s)?wp(e,l+4,c?r.call(c,i,a,o,s):r(i,a,o,s)):nv(e,l+4)}function av(e,t){let n=Wo(),r,i=e+27;n.firstCreatePass?(r=Zte(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=fa(r.type,!0)),o=ea($p);try{let e=sl(!1),t=a();return sl(e),Co(n,Uo(),i,t),t}finally{ea(o)}}function Zte(e,t){if(t)for(let n=t.length-1;n>=0;n--){let r=t[n];if(e===r.name)return r}}function ov(e,t,n){let r=e+27,i=Uo(),a=So(i,r);return cv(i,r)?rv(i,$o(),t,a.transform,n,a):a.transform(n)}function sv(e,t,n,r){let i=e+27,a=Uo(),o=So(a,i);return cv(a,i)?iv(a,$o(),t,o.transform,n,r,o):o.transform(n,r)}function cv(e,t){return e[1].data[t].pure}function lv(e,t){return ap(e,t)}var Qte=(()=>{class e{applicationErrorHandler=S(Zs);appRef=S(Yh);taskService=S(As);ngZone=S(Rs);zonelessEnabled=S(cc);tracing=S(id,{optional:!0});zoneIsDefined=typeof Zone<`u`&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new ur;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(Is):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(S(lc,{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?Ps:Ns;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=Pl({token:e,factory:e.ɵfac})}return e})();function $te(){return[{provide:sc,useExisting:Qte},{provide:Rs,useClass:Ks},{provide:cc,useValue:!0}]}function ene(){return typeof $localize<`u`&&$localize.locale||`en-US`}var uv=new Mi(``,{factory:()=>S(uv,{optional:!0,skipSelf:!0})||ene()}),dv=class{destroyed=!1;listeners=null;errorHandler=S(Xs,{optional:!0});isEmitting=!1;hasNullListeners=!1;destroyRef=S(Es);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(e){if(this.destroyed)throw new hi(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(gi(953,!1));return}if(this.listeners===null)return;this.isEmitting=!0;let t=nn(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&&tne(this.listeners)),nn(t),this.isEmitting=!1}}};function tne(e){let t=e.length-1;for(;t>-1;)e[t]===null&&e.splice(t,1),t--}function X(e,t){return wn(e,t?.equal)}function Z(e){return Yn(e)}(class e extends Error{_brand;constructor(e){super(e)}static IDLE=new e(`IDLE`);static LOADING=new e(`LOADING`)});var nne=e=>e;function Q(e,t){return typeof e==`function`?fv(Gn(e,nne,t?.equal),t?.debugName,t?.set):fv(Gn(e.source,e.computation,e.equal),e.debugName,e.set)}function fv(e,t,n){let r=e[tn],i=e;if(n!==void 0){let t=e=>Kn(r,e);i.set=e=>n(e,t),i.update=r=>n(r(Z(e)),t)}else i.set=e=>Kn(r,e),i.update=e=>qn(r,e);return i.asReadonly=$s.bind(e),i}var pv=!1;function rne(){return pv}function mv(e){pv=e}function hv(e,t){let n=Object.create(Cc);n.value=e,n.transformFn=t?.transform;function r(){if(on(n),n.value===Sc)throw new hi(-950,null);return n.value}return r[tn]=n,r}function gv(e){return new dv}function _v(e,t){return hv(e,t)}function ine(e){return hv(Sc,e)}var $=(_v.required=ine,_v);function vv(e,t){let n=Object.create(Cc),r=new dv;n.value=e;function i(){return on(n),yv(n.value),n.value}return i[tn]=n,i.asReadonly=$s.bind(i),i.set=e=>{n.equal(n.value,e)||(Pn(n,e),r.emit(e))},i.update=e=>{yv(n.value),i.set(e(n.value))},i.subscribe=r.subscribe.bind(r),i.destroyRef=r.destroyRef,i}function yv(e){if(e===Sc)throw new hi(952,!1)}function bv(e,t){return vv(e,t)}function ane(e){return vv(Sc,e)}var xv=(bv.required=ane,bv);function Sv(e,t){return lh(t)}function one(e,t){return uh(t)}var Cv=(Sv.required=one,Sv),sne=(()=>{class e{static __NG_ELEMENT_ID__=cne}return e})();function cne(e){return lne(Go(),Uo(),(e&16)==16)}function lne(e,t,n){if(uo(e)&&!n){let n=wo(e.index,t);return new np(n,n)}if(e.type&175){let e=t[15];return new np(e,t)}return null}var wv=new Mi(``),une=new Mi(``);function Tv(e){return!e.moduleRef}function dne(e){let t=Tv(e)?e.r3Injector:e.moduleRef.injector,n=t.get(Rs);return n.run(()=>{Tv(e)?e.r3Injector.resolveInjectorInitializers():e.moduleRef.resolveInjectorInitializers();let r=t.get(Zs),i;if(n.runOutsideAngular(()=>{i=n.onError.subscribe({next:r})}),Tv(e)){let n=()=>t.destroy(),r=e.platformInjector.get(wv);r.add(n),t.onDestroy(()=>{i.unsubscribe(),r.delete(n)})}else{let t=()=>e.moduleRef.destroy(),n=e.platformInjector.get(wv);n.add(t),e.moduleRef.onDestroy(()=>{Zh(e.allPlatformModules,e.moduleRef),i.unsubscribe(),n.delete(t)})}return pne(r,n,()=>{let n=t.get(As),r=n.add(),i=t.get(kh);return i.runInitializers(),i.donePromise.then(()=>{if(Rg(t.get(uv,Lg)||`en-US`),!t.get(une,!0))return Tv(e)?t.get(Yh):(e.allPlatformModules.push(e.moduleRef),e.moduleRef);if(Tv(e)){let n=t.get(Yh);return e.rootComponent!==void 0&&n.bootstrap(e.rootComponent),n}return fne?.(e.moduleRef,e.allPlatformModules),e.moduleRef}).finally(()=>void n.remove(r))})})}var fne;function pne(e,t,n){try{let r=n();return ph(r)?r.catch(n=>{throw t.runOutsideAngular(()=>e(n)),n}):r}catch(n){throw t.runOutsideAngular(()=>e(n)),n}}var Ev=null;function mne(e=[],t){return ws.create({name:t,providers:[{provide:Va,useValue:`platform`},{provide:wv,useValue:new Set([()=>Ev=null])},...e]})}function hne(e=[]){if(Ev)return Ev;let t=mne(e);return Ev=t,qh(),gne(t),t}function gne(e){let t=e.get(nc,null);io(e,()=>{t?.forEach(e=>e())})}function _ne(e){let{rootComponent:t,appProviders:n,platformProviders:r,platformRef:i}=e;Rc(Tc.BootstrapApplicationStart);try{let e=i?.injector??hne(r);return dne({r3Injector:new gh({providers:[$te(),Qs,...n||[]],parent:e,debugName:``,runEnvironmentInitializers:!1}).injector,platformInjector:e,rootComponent:t})}catch(e){return Promise.reject(e)}finally{Rc(Tc.BootstrapApplicationEnd)}}function Dv(e){return typeof e==`boolean`?e:e!=null&&e!==`false`}var Ov=Symbol(`NOT_SET`),kv=new Set,vne={...In,kind:`afterRenderEffectPhase`,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,value:Ov,cleanup:null,consumerMarkedDirty(){if(this.sequence.impl.executing){if(this.sequence.lastPhase===null||this.sequence.lastPhase(on(r),r.value),r.signal[tn]=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??kv)t()}finally{vn(e)}}};function Av(e,t){let n=t?.injector??S(ws),r=n.get(sc),i=n.get(sd),a=n.get(id,null,{optional:!0});i.impl??=n.get(ld);let o=e;typeof o==`function`&&(o={mixedReadWrite:e});let s=n.get(ac,null,{optional:!0}),c=new yne(i.impl,[o.earlyRead,o.write,o.mixedReadWrite,o.read],s?.view,r,n,a?.snapshot(null));return i.impl.register(c),c}var jv=null;function Mv(){return jv}function bne(e){jv??=e}var xne=class{},Nv=(function(e){return e[e.Format=0]=`Format`,e[e.Standalone=1]=`Standalone`,e})(Nv||{}),Pv=(function(e){return e[e.Narrow=0]=`Narrow`,e[e.Abbreviated=1]=`Abbreviated`,e[e.Wide=2]=`Wide`,e[e.Short=3]=`Short`,e})(Pv||{}),Fv=(function(e){return e[e.Short=0]=`Short`,e[e.Medium=1]=`Medium`,e[e.Long=2]=`Long`,e[e.Full=3]=`Full`,e})(Fv||{}),Iv={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 Sne(e){return Ng(e)[Fg.LocaleId]}function Cne(e,t,n){let r=Ng(e);return Hv(Hv([r[Fg.DayPeriodsFormat],r[Fg.DayPeriodsStandalone]],t),n)}function wne(e,t,n){let r=Ng(e);return Hv(Hv([r[Fg.DaysFormat],r[Fg.DaysStandalone]],t),n)}function Tne(e,t,n){let r=Ng(e);return Hv(Hv([r[Fg.MonthsFormat],r[Fg.MonthsStandalone]],t),n)}function Ene(e,t){let n=Ng(e)[Fg.Eras];return Hv(n,t)}function Lv(e,t){return Hv(Ng(e)[Fg.DateFormat],t)}function Rv(e,t){return Hv(Ng(e)[Fg.TimeFormat],t)}function zv(e,t){let n=Ng(e)[Fg.DateTimeFormat];return Hv(n,t)}function Bv(e,t){let n=Ng(e),r=n[Fg.NumberSymbols][t];if(r===void 0){if(t===Iv.CurrencyDecimal)return n[Fg.NumberSymbols][Iv.Decimal];if(t===Iv.CurrencyGroup)return n[Fg.NumberSymbols][Iv.Group]}return r}function Vv(e){if(!e[Fg.ExtraData])throw new hi(2303,!1)}function Dne(e){let t=Ng(e);return Vv(t),(t[Fg.ExtraData][2]||[]).map(e=>typeof e==`string`?Uv(e):[Uv(e[0]),Uv(e[1])])}function One(e,t,n){let r=Ng(e);return Vv(r),Hv(Hv([r[Fg.ExtraData][0],r[Fg.ExtraData][1]],t)||[],n)||[]}function Hv(e,t){for(let n=t;n>-1;n--)if(e[n]!==void 0)return e[n];throw new hi(2304,!1)}function Uv(e){let[t,n]=e.split(`:`);return{hours:+t,minutes:+n}}var kne=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,Wv=Object.create(null),Ane=/((?:[^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]*)/,jne=256;function Mne(e,t,n,r){let i=Hne(e);Nne(t),t=Kv(n,t)||t;let a=[],o;for(;t;)if(o=Ane.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=ry(r,s),i=Vne(i,r));let c=``;return a.forEach(e=>{let t=zne(e);c+=t?t(i,n,s):e===`''`?`'`:e.replace(/(^'|'$)/g,``).replace(/''/g,`'`)}),c}function Nne(e){if(e.length>jne)throw new hi(2300,!1)}function Gv(e,t,n){let r=new Date(0);return r.setFullYear(e,t,n),r.setHours(0,0,0),r}function Kv(e,t){let n=Sne(e);if(Wv[n]??=Object.create(null),Wv[n][t])return Wv[n][t];let r=``;switch(t){case`shortDate`:r=Lv(e,Fv.Short);break;case`mediumDate`:r=Lv(e,Fv.Medium);break;case`longDate`:r=Lv(e,Fv.Long);break;case`fullDate`:r=Lv(e,Fv.Full);break;case`shortTime`:r=Rv(e,Fv.Short);break;case`mediumTime`:r=Rv(e,Fv.Medium);break;case`longTime`:r=Rv(e,Fv.Long);break;case`fullTime`:r=Rv(e,Fv.Full);break;case`short`:let t=Kv(e,`shortTime`),n=Kv(e,`shortDate`);r=qv(zv(e,Fv.Short),[t,n]);break;case`medium`:let i=Kv(e,`mediumTime`),a=Kv(e,`mediumDate`);r=qv(zv(e,Fv.Medium),[i,a]);break;case`long`:let o=Kv(e,`longTime`),s=Kv(e,`longDate`);r=qv(zv(e,Fv.Long),[o,s]);break;case`full`:let c=Kv(e,`fullTime`),l=Kv(e,`fullDate`);r=qv(zv(e,Fv.Full),[c,l])}return r&&(Wv[n][t]=r),r}function qv(e,t){return t&&(e=e.replace(/\{([^}]+)}/g,function(e,n){return Object.hasOwn(t,n)?t[n]:e})),e}function Jv(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 Pne(s,t);let c=Bv(o,Iv.MinusSign);return Jv(s,t,c,r,i)}}function Fne(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 hi(2301,!1)}}function Xv(e,t,n=Nv.Format,r=!1){return function(i,a){return Ine(i,a,e,t,n,r)}}function Ine(e,t,n,r,i,a){switch(n){case 2:return Tne(t,i,r)[e.getMonth()];case 1:return wne(t,i,r)[e.getDay()];case 0:let n=e.getHours(),o=e.getMinutes();if(a){let e=Dne(t),a=One(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?`+`:``)+Jv(o,2,a)+Jv(Math.abs(i%60),2,a);case 1:return`GMT`+(i>=0?`+`:``)+Jv(o,1,a);case 2:return`GMT`+(i>=0?`+`:``)+Jv(o,2,a)+`:`+Jv(Math.abs(i%60),2,a);case 3:return r===0?`Z`:(i>=0?`+`:``)+Jv(o,2,a)+`:`+Jv(Math.abs(i%60),2,a);default:throw new hi(2310,!1)}}}var Lne=0,Qv=4;function Rne(e){let t=Gv(e,Lne,1).getDay();return Gv(e,0,1+(t<=Qv?Qv:11)-t)}function $v(e){let t=e.getDay(),n=t===0?-3:Qv-t;return Gv(e.getFullYear(),e.getMonth(),e.getDate()+n)}function ey(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=$v(n),t=Rne(e.getFullYear()),r=e.getTime()-t.getTime();i=1+Math.round(r/6048e5)}return Jv(i,e,Bv(r,Iv.MinusSign))}}function ty(e,t=!1){return function(n,r){return Jv($v(n).getFullYear(),e,Bv(r,Iv.MinusSign),t)}}var ny=Object.create(null);function zne(e){if(ny[e])return ny[e];let t;switch(e){case`G`:case`GG`:case`GGG`:t=Xv(3,Pv.Abbreviated);break;case`GGGG`:t=Xv(3,Pv.Wide);break;case`GGGGG`:t=Xv(3,Pv.Narrow);break;case`y`:t=Yv(0,1,0,!1,!0);break;case`yy`:t=Yv(0,2,0,!0,!0);break;case`yyy`:t=Yv(0,3,0,!1,!0);break;case`yyyy`:t=Yv(0,4,0,!1,!0);break;case`Y`:t=ty(1);break;case`YY`:t=ty(2,!0);break;case`YYY`:t=ty(3);break;case`YYYY`:t=ty(4);break;case`M`:case`L`:t=Yv(1,1,1);break;case`MM`:case`LL`:t=Yv(1,2,1);break;case`MMM`:t=Xv(2,Pv.Abbreviated);break;case`MMMM`:t=Xv(2,Pv.Wide);break;case`MMMMM`:t=Xv(2,Pv.Narrow);break;case`LLL`:t=Xv(2,Pv.Abbreviated,Nv.Standalone);break;case`LLLL`:t=Xv(2,Pv.Wide,Nv.Standalone);break;case`LLLLL`:t=Xv(2,Pv.Narrow,Nv.Standalone);break;case`w`:t=ey(1);break;case`ww`:t=ey(2);break;case`W`:t=ey(1,!0);break;case`d`:t=Yv(2,1);break;case`dd`:t=Yv(2,2);break;case`c`:case`cc`:t=Yv(7,1);break;case`ccc`:t=Xv(1,Pv.Abbreviated,Nv.Standalone);break;case`cccc`:t=Xv(1,Pv.Wide,Nv.Standalone);break;case`ccccc`:t=Xv(1,Pv.Narrow,Nv.Standalone);break;case`cccccc`:t=Xv(1,Pv.Short,Nv.Standalone);break;case`E`:case`EE`:case`EEE`:t=Xv(1,Pv.Abbreviated);break;case`EEEE`:t=Xv(1,Pv.Wide);break;case`EEEEE`:t=Xv(1,Pv.Narrow);break;case`EEEEEE`:t=Xv(1,Pv.Short);break;case`a`:case`aa`:case`aaa`:t=Xv(0,Pv.Abbreviated);break;case`aaaa`:t=Xv(0,Pv.Wide);break;case`aaaaa`:t=Xv(0,Pv.Narrow);break;case`b`:case`bb`:case`bbb`:t=Xv(0,Pv.Abbreviated,Nv.Standalone,!0);break;case`bbbb`:t=Xv(0,Pv.Wide,Nv.Standalone,!0);break;case`bbbbb`:t=Xv(0,Pv.Narrow,Nv.Standalone,!0);break;case`B`:case`BB`:case`BBB`:t=Xv(0,Pv.Abbreviated,Nv.Format,!0);break;case`BBBB`:t=Xv(0,Pv.Wide,Nv.Format,!0);break;case`BBBBB`:t=Xv(0,Pv.Narrow,Nv.Format,!0);break;case`h`:t=Yv(3,1,-12);break;case`hh`:t=Yv(3,2,-12);break;case`H`:t=Yv(3,1);break;case`HH`:t=Yv(3,2);break;case`m`:t=Yv(4,1);break;case`mm`:t=Yv(4,2);break;case`s`:t=Yv(5,1);break;case`ss`:t=Yv(5,2);break;case`S`:t=Yv(6,1);break;case`SS`:t=Yv(6,2);break;case`SSS`:t=Yv(6,3);break;case`Z`:case`ZZ`:case`ZZZ`:t=Zv(0);break;case`ZZZZZ`:t=Zv(3);break;case`O`:case`OO`:case`OOO`:case`z`:case`zz`:case`zzz`:t=Zv(1);break;case`OOOO`:case`ZZZZ`:case`zzzz`:t=Zv(2);break;default:return null}return ny[e]=t,t}function ry(e,t){e=e.replace(/:/g,``);let n=Date.parse(`Jan 01, 1970 00:00:00 `+e)/6e4;return isNaN(n)?t:n}function Bne(e,t){return e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+t),e}function Vne(e,t,n){let r=e.getTimezoneOffset();return Bne(e,-1*(ry(t,r)-r))}function Hne(e){if(iy(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 Gv(t,n-1,r)}let t=parseFloat(e);if(!isNaN(e-t))return new Date(t);let n;if(n=e.match(kne))return Une(n)}let t=new Date(e);if(!iy(t))throw new hi(2311,!1);return t}function Une(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 iy(e){return e instanceof Date&&!isNaN(e.valueOf())}var ay=(()=>{class e{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;injector=S(ws);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)($p(Nm))};static ɵdir=Sh({type:e,selectors:[[``,`ngTemplateOutlet`,``]],inputs:{ngTemplateOutletContext:`ngTemplateOutletContext`,ngTemplateOutlet:`ngTemplateOutlet`,ngTemplateOutletInjector:`ngTemplateOutletInjector`},features:[kc]})}return e})();function Wne(e,t){return new hi(2100,!1)}var Gne=`mediumDate`,Kne=new Mi(``),qne=new Mi(``),oy=(()=>{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??Gne,a=r??this.defaultOptions?.timezone??this.defaultTimezone??void 0;return Mne(t,e,i||this.locale,a)}catch(t){throw Wne(e,t.message)}}static ɵfac=function(t){return new(t||e)($p(uv,16),$p(Kne,24),$p(qne,24))};static ɵpipe=Ch({name:`date`,type:e,pure:!0})}return e})(),sy=(()=>{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 Jne(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 Yne=`browser`,cy=class{_doc;constructor(e){this._doc=e}manager},ly=(()=>{class e extends cy{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)(sa(Ts))};static ɵprov=Ti({token:e,factory:e.ɵfac})}return e})(),uy=new Mi(``),dy=(()=>{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 ly));this._plugins=n.slice().reverse();let r=e.find(e=>e instanceof ly);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 hi(-5101,!1);return this._eventNameToPlugin.set(e,t),t}static ɵfac=function(t){return new(t||e)(sa(uy),sa(Rs))};static ɵprov=Ti({token:e,factory:e.ɵfac})}return e})(),fy=`ng-app-id`;function py(e){for(let t of e)t.remove()}function my(e,t){let n=t.createElement(`style`);return n.textContent=e,n}function Xne(e,t,n,r){let i=e.head?.querySelectorAll(`style[${fy}="${t}"],link[${fy}="${t}"]`);if(!i||i.length===0)return!1;for(let e of i)e.removeAttribute(fy),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 hy(e,t){let n=t.createElement(`link`);return n.setAttribute(`rel`,`stylesheet`),n.setAttribute(`href`,e),n}var gy=(()=>{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,Xne(e,t,this.inline,this.external)&&this.hosts.add(e.head)}addStyles(e,t){for(let t of e)this.addUsage(t,this.inline,my);t?.forEach(e=>this.addUsage(e,this.external,hy))}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&&(py(n.elements),t.delete(e)))}ngOnDestroy(){for(let[,{elements:e}]of[...this.inline,...this.external])py(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,my(t,this.doc)));for(let[t,{elements:n}]of this.external)n.push(this.addElement(e,hy(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)(sa(Ts),sa(ec),sa(ic,8),sa(rc))};static ɵprov=Ti({token:e,factory:e.ɵfac})}return e})(),_y={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`},vy=/%COMP%/g,yy=`%COMP%`,by=`_nghost-${yy}`,xy=`_ngcontent-${yy}`,Sy=!0,Cy=new Mi(``,{factory:()=>Sy}),wy=new Mi(``);function Ty(e){return xy.replace(vy,e)}function Ey(e){return by.replace(vy,e)}function Dy(e,t){return t.map(t=>t.replace(vy,e))}var Oy=(()=>{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 ky(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 Ny?n.applyToHost(e):n instanceof My&&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 fu.Emulated:r=new Ny(o,s,t,this.appId,c,i,a,l,this.cssVarNamespace);break;case fu.ShadowDom:return new jy(o,e,t,i,a,this.nonce,l,this.cssVarNamespace,s);case fu.ExperimentalIsolatedShadowDom:return new jy(o,e,t,i,a,this.nonce,l,this.cssVarNamespace);default:r=new My(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)(sa(dy),sa(Zp),sa(ec),sa(Cy),sa(Ts),sa(Rs),sa(ic),sa(id,8),sa(wy,8))};static ɵprov=Ti({token:e,factory:e.ɵfac})}return e})(),ky=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(_y[t]||t,e):this.doc.createElement(e)}createComment(e){return this.doc.createComment(e)}createText(e){return this.doc.createTextNode(e)}appendChild(e,t){(Ay(e)?e.content:e).appendChild(t)}insertBefore(e,t,n){if(e){let r=Ay(e)?e.content:e;if(n!=null&&n.parentNode!==r)throw new hi(-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 hi(-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=_y[r];i?e.setAttributeNS(i,t,n):e.setAttribute(t,n)}else e.setAttribute(t,n)}removeAttribute(e,t,n){if(n){let r=_y[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&(zu.DashCase|zu.Important)?e.style.setProperty(t,n,r&zu.Important?`important`:``):e.style[t]=n}removeStyle(e,t,n){let r=t.startsWith(`--`);r&&(t=t.replace(`%NS%`,this.cssVarNamespace)),r||n&zu.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=Mv().getGlobalEventTarget(this.doc,e),!e))throw new hi(-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 Ay(e){return e.tagName===`TEMPLATE`&&e.content!==void 0}var jy=class extends ky{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=Dy(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=hy(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)}},My=class extends ky{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?Dy(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&&Ku.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},Ny=class extends My{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=Ty(l),this.hostAttr=Ey(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}},Py=class e extends xne{supportsDOMEvents=!0;static makeCurrent(){bne(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=Iy();return t==null?null:Ly(t)}resetBaseElement(){Fy=null}getUserAgent(){return window.navigator.userAgent}getCookie(e){return Jne(document.cookie,e)}},Fy=null;function Iy(){return Fy||=document.head.querySelector(`base`),Fy?Fy.getAttribute(`href`):null}function Ly(e){return new URL(e,document.baseURI).pathname}var Ry=[`alt`,`control`,`meta`,`shift`],zy={"\b":`Backspace`," ":`Tab`,"":`Delete`,"\x1B":`Escape`,Del:`Delete`,Esc:`Escape`,Left:`ArrowLeft`,Right:`ArrowRight`,Up:`ArrowUp`,Down:`ArrowDown`,Menu:`ContextMenu`,Scroll:`ScrollLock`,Win:`OS`},By={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},Vy=(()=>{class e extends cy{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(()=>Mv().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.`),Ry.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=zy[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`),Ry.forEach(t=>{if(t!==n){let n=By[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)(sa(Ts))};static ɵprov=Ti({token:e,factory:e.ɵfac})}return e})();async function Hy(e,t,n){return _ne({rootComponent:e,...Uy(t,n)})}function Uy(e,t){return{platformRef:t?.platformRef,appProviders:[...Jy,...e?.providers??[]],platformProviders:qy}}function Wy(){Py.makeCurrent()}function Gy(){return new Xs}function Ky(){return eu(document),document}var qy=[{provide:rc,useValue:Yne},{provide:nc,useValue:Wy,multi:!0},{provide:Ts,useFactory:Ky}],Jy=[{provide:Va,useValue:`root`},{provide:Xs,useFactory:Gy},{provide:uy,useClass:ly,multi:!0},{provide:uy,useClass:Vy,multi:!0},Oy,{provide:Zp,useClass:gy},{provide:gy,useExisting:Zp},dy,{provide:_p,useExisting:Oy},[]];function Yy(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 $y({code:i,why:Zy(a.why,e),fix:Zy(a.fix,e),docs:o,cause:e.cause,sources:e.sources,data:Zy(a.data,e)},s);for(let e of t)e(r,n);return r};n[i]=s}return n}function nb(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 cb=Math.random.bind(Math),lb=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function ub(e=21){let t=``,n=e;for(;n--;)t+=lb[cb()*64|0];return t}var db=6e4,fb=e=>e,pb=fb,{clearTimeout:mb,setTimeout:hb}=globalThis;function gb(e,t){let{post:n,on:r,off:i=()=>{},eventNames:a=[],serialize:o=fb,deserialize:s=pb,resolver:c,bind:l=`rpc`,timeout:u=db,proxify:d=!0}=t,f=!1,p=new Map,m,h;async function g(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:g}=sb(),_=ub();s.i=_;let ee;async function te(n=s){return u>=0&&(ee=hb(()=>{try{if(t.onTimeoutError?.call(h,e,r)!==!0)throw Error(`[birpc] timeout on calling "${e}"`)}catch(e){g(e)}p.delete(_)},u),typeof ee==`object`&&(ee=ee.unref?.())),p.set(_,{resolve:d,reject:g,timeoutId:ee,method:e}),await c(n),l}try{t.onRequest?await t.onRequest.call(h,s,te,d):await te()}catch(e){if(t.onGeneralError?.call(h,e)!==!0)throw e;return}finally{mb(ee),p.delete(_)}return l}let _={$call:(e,...t)=>g(e,t,!1),$callOptional:(e,...t)=>g(e,t,!1,!0),$callEvent:(e,...t)=>g(e,t,!0),$callRaw:e=>g(e.method,e.args,e.event,e.optional),$rejectPendingCalls:te,get $closed(){return f},get $meta(){return t.meta},$close:ee,$functions:e};h=d?new Proxy({},{get(t,n){if(Object.hasOwn(_,n))return _[n];if(n===`then`&&!a.includes(`then`)&&!(`then`in e))return;let r=(...e)=>g(n,e,!0);if(a.includes(n))return r.asEvent=r,r;let i=(...e)=>g(n,e,!1);return i.asEvent=r,i}}):_;function ee(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(ne)}function te(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 ne(r,...i){let a;try{a=s(r)}catch(e){if(t.onGeneralError?.call(h,e)!==!0)throw e;return}if(a.t===`q`){let{m:r,a:s,o:u}=a,d,f,p=await(c?c.call(h,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`?h:e,s)}catch(e){f=e}if(a.i){if(f&&t.onFunctionError&&t.onFunctionError.call(h,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(h,e,r,s)!==!0)throw e}try{await n(o({t:`s`,i:a.i,e:f}),...i)}catch(e){if(t.onGeneralError?.call(h,e,r,s)!==!0)throw e}}}else{let{i:e,r:t,e:n}=a,r=p.get(e);r&&(mb(r.timeoutId),n?r.reject(n):r.resolve(t)),p.delete(e)}}return m=r(ne),h}function _b(e,t){return t.safety?t.safety:e===`static`||e===`query`||e==null?`read`:`action`}var vb=Object.freeze({type:`object`,additionalProperties:!0});function yb(e){let t=e[`~standard`];if(t.jsonSchema)try{return t.jsonSchema.input({target:`draft-2020-12`})}catch{return vb}return vb}function bb(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 Sb(e,t){return xb(e,t)??[e]}function Cb(e){return typeof e==`string`?`'${e}'`:new Db().serialize(e)}var wb=` _-,;:!?.'"()[]{}@*/\\&#%\`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz`,Tb=(function(){let e=new Uint8Array(128);for(let t=0;t<69;t++)e[wb.charCodeAt(t)]=t+1;for(let t=65;t<=90;t++)e[t]=e[t+32];return e})();function Eb(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})(),Ob=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],kb=[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],Ab=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`,jb=[],Mb=class{_data=new Nb;_hash=new Nb([...Ob]);_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)jb[n]=e[t+n]|0;else{let e=jb[n-15],t=(e<<25|e>>>7)^(e<<14|e>>>18)^e>>>3,r=jb[n-2],i=(r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10;jb[n]=t+jb[n-7]+i+jb[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),h=u+m+d+kb[n]+jb[n],g=p+f;u=l,l=c,c=s,s=o+h|0,o=a,a=i,i=r,r=h+g|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=Nb.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 Pb(e){return new Mb().finalize(e).toBase64()}function Fb(e){return Pb(Cb(e))}function Ib(e){return Fb(e)}function Lb(){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 Rb=/^[\w+.-]{2,}:\/\//;function zb(e){return e.endsWith(`/`)?e:`${e}/`}function Bb(e){return(e.endsWith(`/`)?e.slice(0,-1):e)||`/`}function Vb(e,...t){let n=e;for(let e of t)e&&e!==`/`&&(n=n?zb(n)+e.replace(/^\.?\//,``):e);return n}function Hb(e,t){if(!t||t===`/`||Rb.test(e))return e;let n=Bb(t);return e.startsWith(n)?e:Vb(n,e)}function Ub(e,t){let n=e.match(Rb);return t+(n?e.slice(n[0].length):e)}var Wb=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function Gb(e=21){let t=``,n=e;for(;n--;)t+=Wb[Math.random()*64|0];return t}var Kb=Symbol.for(`immer-nothing`),qb=Symbol.for(`immer-draftable`),Jb=Symbol.for(`immer-state`),Yb=[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 Xb(e,...t){{let n=Yb[e],r=bx(n)?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}}var Zb=Object,Qb=Zb.getPrototypeOf,$b=`constructor`,ex=`prototype`,tx=`configurable`,nx=`enumerable`,rx=`writable`,ix=`value`,ax=e=>!!e&&!!e[Jb];function ox(e){return e?lx(e)||gx(e)||!!e[qb]||!!e[$b]?.[qb]||_x(e)||vx(e):!1}var sx=Zb[ex][$b].toString(),cx=new WeakMap;function lx(e){if(!e||!yx(e))return!1;let t=Qb(e);if(t===null||t===Zb[ex])return!0;let n=Zb.hasOwnProperty.call(t,$b)&&t[$b];if(n===Object)return!0;if(!bx(n))return!1;let r=cx.get(n);return r===void 0&&(r=Function.toString.call(n),cx.set(n,r)),r===sx}function ux(e,t,n=!0){dx(e)===0?(n?Reflect.ownKeys(e):Zb.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function dx(e){let t=e[Jb];return t?t.type_:gx(e)?1:_x(e)?2:vx(e)?3:0}var fx=(e,t,n=dx(e))=>n===2?e.has(t):Zb[ex].hasOwnProperty.call(e,t),px=(e,t,n=dx(e))=>n===2?e.get(t):e[t],mx=(e,t,n,r=dx(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function hx(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var gx=Array.isArray,_x=e=>e instanceof Map,vx=e=>e instanceof Set,yx=e=>typeof e==`object`,bx=e=>typeof e==`function`,xx=e=>typeof e==`boolean`;function Sx(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var Cx=e=>yx(e)?e?.[Jb]:null,wx=e=>e.copy_||e.base_,Tx=e=>e.modified_?e.copy_:e.base_;function Ex(e,t){if(_x(e))return new Map(e);if(vx(e))return new Set(e);if(gx(e))return Array[ex].slice.call(e);let n=lx(e);if(t===!0||t===`class_only`&&!n){let t=Zb.getOwnPropertyDescriptors(e);delete t[Jb];let n=Reflect.ownKeys(t);for(let r=0;r1&&Zb.defineProperties(e,{set:kx,add:kx,clear:kx,delete:kx}),Zb.freeze(e),t&&ux(e,(e,t)=>{Dx(t,!0)},!1),e)}function Ox(){Xb(2)}var kx={[ix]:Ox};function Ax(e){return e===null||!yx(e)||Zb.isFrozen(e)}var jx=`MapSet`,Mx=`Patches`,Nx=`ArrayMethods`,Px={};function Fx(e){let t=Px[e];return t||Xb(0,e),t}var Ix=e=>!!Px[e];function Lx(e,t){Px[e]||(Px[e]=t)}var Rx,zx=()=>Rx,Bx=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:Ix(jx)?Fx(jx):void 0,arrayMethodsPlugin_:Ix(Nx)?Fx(Nx):void 0});function Vx(e,t){t&&(e.patchPlugin_=Fx(Mx),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Hx(e){Ux(e),e.drafts_.forEach(Gx),e.drafts_=null}function Ux(e){e===Rx&&(Rx=e.parent_)}var Wx=e=>Rx=Bx(Rx,e);function Gx(e){let t=e[Jb];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function Kx(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[Jb].modified_&&(Hx(t),Xb(4)),ox(e)&&(e=qx(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[Jb].base_,e,t)}else e=qx(t,n);return Jx(t,e,!0),Hx(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===Kb?void 0:e}function qx(e,t){if(Ax(t))return t;let n=t[Jb];if(!n)return nS(t,e.handledSet_,e);if(!Xx(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);eS(n,e)}return n.copy_}function Jx(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Dx(t,n)}function Yx(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var Xx=(e,t)=>e.scope_===t,Zx=[];function Qx(e,t,n,r){let i=wx(e),a=e.type_;if(r!==void 0&&px(i,r,a)===t){mx(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;ux(i,(e,n)=>{if(ax(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??Zx;for(let e of o)mx(i,e,n,a)}function $x(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!Xx(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=Tx(i);Qx(e,i.draft_??i,a,n),eS(i,r)})}function eS(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)}Yx(e)}}function tS(e,t,n){let{scope_:r}=e;if(ax(n)){let i=n[Jb];Xx(i,r)&&i.callbacks_.push(function(){dS(e),Qx(e,n,Tx(i),t)})}else ox(n)&&e.callbacks_.push(function(){let i=wx(e);e.type_===3?i.has(n)&&nS(n,r.handledSet_,r):px(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&nS(px(e.copy_,t,e.type_),r.handledSet_,r)})}function nS(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||ax(e)||t.has(e)||!ox(e)||Ax(e)?e:(t.add(e),ux(e,(r,i)=>{if(ax(i)){let t=i[Jb];Xx(t,n)&&(mx(e,r,Tx(t),e.type_),Yx(t))}else ox(i)&&nS(i,t,n)}),e)}function rS(e,t){let n=gx(e),r={type_:+!!n,scope_:t?t.scope_:zx(),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=iS;n&&(i=[r],a=aS);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var iS={get(e,t){if(t===Jb)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=wx(e);if(!fx(i,t,e.type_))return cS(e,i,t);let a=i[t];if(e.finalized_||!ox(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&Sx(t))return a;if(a===oS(e.base_,t)||sS(e,t,a)){dS(e);let n=e.type_===1?+t:t,r=pS(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in wx(e)},ownKeys(e){return Reflect.ownKeys(wx(e))},set(e,t,n){let r=lS(wx(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=oS(wx(e),t),i=r?.[Jb];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.delete(t),!0;if(hx(n,r)&&(n!==void 0||fx(e.base_,t,e.type_)))return!0;dS(e),uS(e)}return e.copy_[t]===n&&(n!==void 0||fx(e.copy_,t,e.type_))||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_.set(t,!0),tS(e,t,n),!0)},deleteProperty(e,t){return dS(e),oS(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),uS(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=wx(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[rx]:!0,[tx]:e.type_!==1||t!==`length`,[nx]:r[nx],[ix]:n[t]}},defineProperty(){Xb(11)},getPrototypeOf(e){return Qb(e.base_)},setPrototypeOf(){Xb(12)}},aS={};for(let e in iS){let t=iS[e];aS[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}aS.deleteProperty=function(e,t){return isNaN(parseInt(t))&&Xb(13),aS.set.call(this,e,t,void 0)},aS.set=function(e,t,n){return t!==`length`&&isNaN(parseInt(t))&&Xb(14),iS.set.call(this,e[0],t,n,e[0])};function oS(e,t){let n=e[Jb];return(n?wx(n):e)[t]}function sS(e,t,n){return e.type_!==1||!e.allIndicesReassigned_||e.assigned_?.get(t)||!ox(n)||n[Jb]?!1:e.baseRefs_.has(n)}function cS(e,t,n){let r=lS(t,n);return r?ix in r?r[ix]:r.get?.call(e.draft_):void 0}function lS(e,t){if(!(t in e))return;let n=Qb(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=Qb(n)}}function uS(e){e.modified_||(e.modified_=!0,e.parent_&&uS(e.parent_))}function dS(e){e.copy_||=(e.assigned_=new Map,Ex(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var fS=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(bx(e)&&!bx(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}bx(t)||Xb(6),n!==void 0&&!bx(n)&&Xb(7);let r;if(ox(e)){let i=Wx(this),a=pS(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?Hx(i):Ux(i)}return Vx(i,n),Kx(r,i)}if(!e||!yx(e)){if(r=t(e),r===void 0&&(r=e),r===Kb&&(r=void 0),this.autoFreeze_&&Dx(r,!0),n){let t=[],i=[];Fx(Mx).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}Xb(1,e)},this.produceWithPatches=(e,t)=>{if(bx(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]},xx(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),xx(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),xx(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){ox(e)||Xb(8),ax(e)&&(e=mS(e));let t=Wx(this),n=pS(t,e,void 0);return n[Jb].isManual_=!0,Ux(t),n}finishDraft(e,t){let n=e&&e[Jb];(!n||!n.isManual_)&&Xb(9);let{scope_:r}=n;return Vx(r,t),Kx(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=Fx(Mx).applyPatches_;return ax(e)?r(e,t):this.produce(e,e=>r(e,t))}};function pS(e,t,n,r){let[i,a]=_x(t)?Fx(jx).proxyMap_(t,n):vx(t)?Fx(jx).proxySet_(t,n):rS(t,n);return(n?.scope_??zx()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?$x(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 mS(e){return ax(e)||Xb(10,e),hS(e)}function hS(e){if(!ox(e)||Ax(e))return e;let t=e[Jb],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Ex(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Ex(e,!0);let i=n;return vx(n)&&(n=new Set),ux(i,(e,t)=>{mx(n,e,hS(t))},r),t&&(t.finalized_=!1),n}function gS(){Yb.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=Cx(px(e,n.key_)),i=px(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||fx(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=px(o,e,c),f=px(s,e,c),p=l?fx(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===Kb?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(vx(e))return new Set(Array.from(e).map(u));let t=Object.create(Qb(e));for(let n in e)t[n]=u(e[n]);return fx(e,qb)&&(t[qb]=e[qb]),t}function d(e){return ax(e)?u(e):e}Lx(Mx,{applyPatches_:l,generatePatches_:i,generateReplacementPatches_:c,getPath:e})}globalThis.Iterator?.from;var _S=new fS,vS=_S.produce,yS=_S.produceWithPatches.bind(_S),bS=_S.applyPatches.bind(_S),xS=1e3;function SS(e,t){if(e.add(t),e.size>xS){let t=e.values().next().value;t!==void 0&&e.delete(t)}}function CS(e){let{enablePatches:t=!1}=e;t&&gS();let n=Lb(),r=e.initialValue,i=new Set;return{on:n.on,value:()=>r,patch:(e,t=Gb())=>{i.has(t)||(gS(),r=bS(r,e),SS(i,t),n.emit(`updated`,r,void 0,t))},mutate:(e,a=Gb())=>{if(!i.has(a)){if(SS(i,a),t){let[t,i]=yS(r,e);if(t===r)return;r=t,n.emit(`updated`,r,i,a)}else{let t=vS(r,e);if(t===r)return;r=t,n.emit(`updated`,r,void 0,a)}}},syncIds:i}}var wS=typeof self==`object`?self:globalThis,TS=new Set([`Error`,`EvalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`,`AggregateError`]),ES=new Set([`Boolean`,`Number`,`String`,`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float16Array`,`Float32Array`,`Float64Array`,`BigInt64Array`,`BigUint64Array`]);function DS(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=TS.has(e)?wS[e]:void 0;return n(new(r??wS.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`&&ES.has(a))return n(new wS[a](o),i);throw TypeError(`unable to deserialize unsafe or unknown type: ${String(a)}`)};return r}function OS(e){return DS(new Map,e)(0)}var kS=``,{toString:AS}={},{keys:jS}=Object;function MS(e){let t=typeof e;if(t!==`object`||!e)return[0,t];let n=AS.call(e).slice(8,-1);switch(n){case`Array`:return[1,kS];case`Object`:return[2,kS];case`Date`:return[3,kS];case`RegExp`:return[4,kS];case`Map`:return[5,kS];case`Set`:return[6,kS];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]}function NS([e,t]){return e===0&&(t===`function`||t===`symbol`)}function PS(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]=MS(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 jS(r))(e||!NS(MS(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||!(NS(MS(n))||NS(MS(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!NS(MS(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a}function FS(e,t={}){let n=[];return PS(!(t.json||t.lossy),!!t.json,new Map,n)(e),n}var{parse:IS,stringify:LS}=JSON,RS={json:!0,lossy:!0};function zS(e){return OS(IS(e))}function BS(e){return LS(FS(e,RS))}function VS(e){return OS(e)}function HS(e){return BS(e)}function US(e){return zS(e)}var WS=256,GS=class extends Error{name=`StreamClosedError`};function KS(e={}){let t=e.id??Gb(),n=Math.max(0,e.replayWindow??0),r=Lb(),i=new AbortController,a=[],o=!1,s=0;function c(e){if(o)throw new GS(`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=JS(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 qS(e={}){let t=e.id??Gb(),n=Math.max(1,e.highWaterMark??WS),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 h(){o||a||(o=!0,e.onCancel?.(),m(void 0))}function g(){return u||(u=new ReadableStream({start(e){l=e,f()},cancel(){h()}}),u)}return{id:t,get cancelled(){return o},get done(){return a},get lastSeenSeq(){return i},get readable(){return g()},cancel:h,_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 h(),Promise.resolve({value:void 0,done:!0})}}}}}function JS(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 YS=128;function XS(e){return e.replace(/[^\w-]+/g,`_`).slice(0,YS)}var ZS=`modulepreload`,QS=function(e,t){return new URL(e,t).href},$S={},eC=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=QS(t,n),t=s(t),t in $S)return;$S[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`:ZS,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)})},tC=`__connection.json`,nC=`__DEVFRAME_CONNECTION__`,rC=`x-birpc-session`,iC=`__rpc-dump/index.json`,aC=`devframe:services`,oC=`devframe_otp`,sC=`devframe_auth_token`;rb.postMessage.remoteAssetsError;var cC=class{cacheMap=new Map;options;keySerializer;constructor(e){this.options=e,this.keySerializer=e.keySerializer||(e=>Ib(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()}},lC=ob({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 uC(e){if(e.agent&&e.jsonSerializable===!1)throw lC.DF0019({name:e.name});e.agent&&!e.jsonSerializable&&(e.jsonSerializable=!0)}async function dC(e,t){let n=e[`~standard`].validate(t);return n instanceof Promise?await n:n}function fC(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 pC(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 gC(e,t){let n=e.handler;if(!n){let r=await hC(e,t);if(!r.handler)throw lC.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 pC(e.name,r,t),o=await a(...n);return await mC(e.name,i,o)}}var _C=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 gC(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 lC.DF0021({name:e.name});uC(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 lC.DF0022({name:e.name});uC(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 gC(this.definitions.get(e),this.context)}getSchema(e){let t=this.definitions.get(e);if(!t)throw lC.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 vC(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 bC(t,`undefined`,r,e);return n}return i!==null&&yC(i,r,e,t),n})}function yC(e,t,n,r){if(typeof e==`bigint`)throw bC(r,`BigInt`,t,n);if(typeof e!=`object`)return;if(e instanceof Map)throw bC(r,`Map`,t,n);if(e instanceof Set)throw bC(r,`Set`,t,n);if(e instanceof Date)throw bC(r,`Date`,t,n);if(Array.isArray(e))return;let i=Object.getPrototypeOf(e);if(i!==null&&i!==Object.prototype)throw bC(r,e.constructor?.name??`class instance`,t,n)}function bC(e,t,n,r){let i=xC(n,r);return lC.DF0020({name:e||``,type:t,path:i})}function xC(e,t){return Array.isArray(e)?`[${t}]`:t===``?``:t}var SC=`__DEVFRAME_CONNECTION_META__`,CC=`__DEVFRAME_CONNECTION_AUTH_TOKEN__`;function wC(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 TC(){return wC(nC)}function EC(){return wC(SC)}function DC(e){if(e)return e;try{let e=localStorage.getItem(CC);if(e)return e}catch{}return wC(CC)}function OC(e){globalThis[nC]=e,globalThis[SC]={...e.connectionMeta,baseUrl:e.metaBaseUrl},e.authToken&&kC(e.authToken)}function kC(e){try{localStorage.setItem(CC,e)}catch{}globalThis[CC]=e;let t=TC();t&&(globalThis[nC]={...t,authToken:e})}function AC(e){let t=Hb(tC,e);try{return new URL(t,globalThis.location?.href).href}catch{return t}}function jC(e,t){return t&&t!==e.authToken?{...e,authToken:t}:e}function MC(){let e=TC();if(e)return jC(e,DC()??e.authToken??e.connectionMeta.authToken);let t=EC();if(t)return{connectionMeta:t,metaBaseUrl:t.baseUrl??AC(`./`),authToken:DC(t.authToken)}}async function NC(e={}){if(e.connection){let t=jC(e.connection,DC(e.authToken??e.connection.authToken??e.connection.connectionMeta.authToken));return OC(t),t}let t=Array.isArray(e.baseURL)?e.baseURL:[e.baseURL??`./`];if(e.connectionMeta){let n={connectionMeta:e.connectionMeta,metaBaseUrl:AC(t[0]??`./`),authToken:DC(e.authToken??e.connectionMeta.authToken)};return OC(n),n}let n=MC();if(n){let t=jC(n,DC(e.authToken??n.authToken??n.connectionMeta.authToken));return OC(t),t}let r=[];for(let n of t){let t=Hb(tC,n),i=AC(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:DC(e.authToken??r.authToken)};return OC(o),o}catch(e){r.push(e)}}throw Error(`Failed to get connection meta from ${t.join(`, `)}`,{cause:r})}var PC=class extends Error{name=`DevframeConnectionError`;kind;constructor(e,t,n){super(t,n),this.kind=e}};function FC(e=oC){try{let t=globalThis.location?.hash?.replace(/^#/,``)??``;return new URLSearchParams(t).get(e)||void 0}catch{return}}function IC(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 LC(e=oC){let t=FC(e);return t&&IC(e),t}async function RC(e,t={}){let n=LC(t.param??`devframe_otp`);return n?e.isTrusted?!0:e.requestTrustWithCode(n):!1}function zC(e){let t={},n=new WeakMap,r,i=()=>(r??=e.sharedState.get(aC,{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 BC(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:rb.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:rb.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=CS({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(rb.client.isTrustedUpdated,e=>{e&&!n&&(n=!0,d())})}})}}}var VC=new Map;function HC(e=VC){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?vC(n,r??``):`s:${HS(n)}`},deserialize:e=>{let n=e.startsWith(`s:`)?US(e.slice(2)):JSON.parse(e);return n.t===`q`&&n.i&&n.m&&t.set(n.i,n.m),n}}}function UC(){}function WC(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 GC(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 KC(e){let{onConnected:t=UC,onError:n=UC,onDisconnected:r=UC,definitions:i,fetch:a=globalThis.fetch.bind(globalThis)}=e,o=e.url;e.authToken&&(o=`${o}${o.includes(`?`)?`&`:`?`}${sC}=${encodeURIComponent(e.authToken)}`);let s=HC(i),c=new AbortController,l=!1,u,d,f,p,m=new Promise((e,t)=>{f=e,p=t});m.catch(()=>{});function h(e){l||(l=!0,p(e),n(e),r())}function g(){l||(l=!0,p(Error(`Devframe SSE stream closed`)),r())}function _(e,n){if(e===`session`){f(n),t();return}u?.(n)}async function ee(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=WC(r);if(!e)break;r=e.rest;let{event:t,data:n}=GC(e.frame);n.length>0&&_(t,n.join(` +`))}}g()}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 ee(e.body)}catch(e){if(c.signal.aborted){g();return}h(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`,[rC]: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 qC(e,t){let{channel:n,rpcOptions:r={}}=t;return gb(e,{...n,timeout:-1,...r,proxify:!1})}function JC(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(rb.client.connectionStatus,e,n)}let p=new Set;function m(e){for(let t of[...p])t.reject(e)}function h(){return l===`disconnected`||l===`error`?new PC(`connection`,`[devframe] Not connected to the devframe server`,{cause:u??void 0}):l===`unauthorized`?new PC(`auth`,`[devframe] Not authorized by the devframe server`,{cause:u??void 0}):null}function g(e,t){return new Promise((n,r)=>{let a=!1,o,c={reject(e){a||(l(),i.emit(rb.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 PC(`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(rb.client.error,n,t),r(n)})})}let _=new Map;for(let e of r.jsonSerializableMethods??[])_.set(e,{jsonSerializable:!0});let ee=e.createChannel({definitions:_,onError(e){f(`error`,e),i.emit(rb.client.connectionError,e),m(new PC(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){l!==`error`&&f(`disconnected`),m(new PC(`connection`,`[devframe] Disconnected from the devframe server`,{cause:u??void 0}))}}),te=qC(a.functions,{channel:ee,rpcOptions:o});a.register({name:rb.broadcast.authRevoked,type:`event`,handler:()=>{c=!1;let e=new PC(`auth`,`[devframe] The devframe server revoked this client's trust`);f(`unauthorized`,e),i.emit(rb.client.connectionError,e),m(e),i.emit(rb.client.isTrustedUpdated,!1)}});let ne=n;async function re(e){ne=e;let t=await te.$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 PC(`auth`,`[devframe] The devframe server refused this client's credentials`);f(`unauthorized`,e),i.emit(rb.client.connectionError,e)}return i.emit(rb.client.isTrustedUpdated,c),t.isTrusted}async function ie(e){let t=(await te.$call(`anonymous:devframe:auth:exchange`,{code:e,ua:navigator.userAgent,origin:location.origin}))?.authToken??null;return t&&(ne=t,c=!0,d.resolve(!0),f(`connected`),i.emit(rb.client.isTrustedUpdated,!0)),t}async function ae(e={}){await te.$call(`anonymous:devframe:auth:request-code`,{ua:navigator.userAgent,origin:location.origin,...e.reissue?{reissue:!0}:{}})}async function oe(){return c?!0:re(ne??``)}async function se(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:oe,requestTrustWithToken:re,requestTrustWithCode:ie,requestAuthCode:ae,ensureTrusted:se,call:(...e)=>{let t=String(e[0]),n=h();return n?(i.emit(rb.client.error,n,t),Promise.reject(n)):g(te.$call(...e),t)},callEvent:(...e)=>{let t=h();if(t){i.emit(rb.client.error,t,String(e[0]));return}return te.$callEvent(...e)},callOptional:(...e)=>{let t=String(e[0]),n=h();return n?(i.emit(rb.client.error,n,t),Promise.reject(n)):g(te.$callOptional(...e),t)},close:()=>{ee.close()}}}function YC(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 XC(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=YC(n.sse,r??`./`,location);return JC({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>KC({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 ZC(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:QC(r)?ZC(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function QC(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function $C(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function ew(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function tw(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function nw(e){if(e.error)throw ZC(e.error);return e.output}function rw(e){return e.some(e=>e!=null)}function iw(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function aw(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?VS(e):e}function a(e,t){return i(iw(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 tw(r)?nw(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($C(r)){if(rw(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(ew(r)){let e=Ib(n),i=r.records[e];if(i)return nw(await s(i,r.serialization));if(r.fallback)return nw(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!rw(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 ow(e){let t=aw(await e.fetchJsonFromBases(iC),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 sw=``;function cw(e,t){return`${e}${sw}${t}`}function lw(e){let t=new Map,n=new Map;e.client.register({name:rb.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(cw(e,n))?._push(r,i)}}),e.client.register({name:rb.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=cw(e,n),a=t.get(i);a&&(a._end(r),t.delete(i))}}),e.client.register({name:rb.broadcast.streamingUploadCancel,type:`event`,handler(e,t){let r=cw(e,t),i=n.get(r);i&&(i.abort(`server cancelled upload`),n.delete(r))}}),e.events.on(rb.client.isTrustedUpdated,n=>{if(n)for(let[n,r]of t){if(r.cancelled||r.done)continue;let t=n.indexOf(sw);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=cw(n,r),o=t.get(a);if(o)return o;let s=qS({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(rb.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=cw(t,r),a=n.get(i);if(a)return a;let o=KS({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 uw(){}var dw=new Map;function fw(e){let t=e.url;e.authToken&&(t=`${t}?${sC}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=uw,onError:i=uw,onDisconnected:a=uw,definitions:o=dw}=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=HC(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 pw(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 Ub(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function mw(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=pw(n.websocket,r??`./`,location);return JC({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>fw({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 hw(e){return e.includes(`:`)}function gw(e,t){return hw(t)?t:`${e}:${t}`}function _w(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 vw(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 _w(a)}function yw(e,t){return{global:vw(e,t,`global`),project:vw(e,t,`project`)}}function bw(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(hw(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(gw(t,n),...r)),callEvent:((n,...r)=>e.callEvent(gw(t,n),...r)),callOptional:((n,...r)=>e.callOptional(gw(t,n),...r)),sharedState:((n,r)=>e.sharedState.get(gw(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe(gw(t,n),r,i),upload:(n,r)=>e.streaming.upload(gw(t,n),r)}},settings:yw(e,t),scope:e.scope}}function xw(){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 Sw(e,t={}){let n=t.modelContext??xw();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=XS(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=_b(t.type,n),u=r.registerTool({name:o,description:n.description,inputSchema:bb(t.args),annotations:{title:n.title??t.name,readOnlyHint:l===`read`,destructiveHint:l===`destructive`},execute:n=>Cw(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 Cw(e,t,n){try{let r=Sb(n,e.args?.length);return{content:[{type:`text`,text:ww(await(await gC(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:Tw(e)}]}}}function ww(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function Tw(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 Ew(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 Dw(e={}){let{baseURL:t=`./`,rpcOptions:n={},cacheOptions:r=!1}=e,i=Lb(),a=Array.isArray(t)?t:[t],o=await NC(e),{connectionMeta:s,metaBaseUrl:c,authToken:l}=o,u=a[0]??`./`;try{u=new URL(`.`,c).href}catch{}let d=new cC({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),f={rpc:void 0},p=new _C(f),m=e.webmcp===!1?void 0:Sw(p),h,g=!1,_=0,ee;function te(){_++,ee=void 0,d.clear(),r===!0&&d.updateOptions({functions:[]})}r&&(p.register({name:rb.broadcast.cacheInvalidate,type:`event`,handler:te}),i.on(rb.client.connectionStatus,te),i.on(rb.client.isTrustedUpdated,te));async function ne(e){let t=[u,...a.filter(e=>e!==u)].filter(e=>e!=null),n=[];for(let r of t)try{return await fetch(Hb(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 re=e.callTimeout??0,ie=re>0?re:1/0,ae,oe={authToken:l,connectionMeta:s,metaBaseUrl:c,events:i,clientRpc:p,callTimeout:e.callTimeout,rpcOptions:{...n,async onRequest(e,t,i){let a=performance.now()+ie;if(await n.onRequest?.call(this,e,t,i),r===!0&&e.i&&ae.isTrusted&&!e.m.startsWith(`anonymous:`)&&e.m!==`devframe:rpc:cacheable-functions`){function t(){if(performance.now()>=a)throw new PC(`timeout`,`[devframe] RPC call "${e.m}" timed out after ${re}ms`)}for(;!ee&&(t(),!(g||ae.status!==`connected`));){let e=_;ee=ae.callOptional(`devframe:rpc:cacheable-functions`).then(t=>{e===_&&d.updateOptions({functions:t??[]})}).catch(t=>{throw e===_&&(ee=void 0),t}),await ee}await ee,t()}let o=_;if(r&&e.i&&!g&&ae.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&&d.apply(e,n)}else await t(e)}}},se=Ew(e.transport??`auto`,s);ae=se===`static`?await ow({fetchJsonFromBases:ne}):se===`sse`?XC({...oe,sseOptions:e.sseOptions}):mw({...oe,wsOptions:e.wsOptions});let ce;try{ce=new BroadcastChannel(`devframe-auth`)}catch{}let le,ue=!1;function de(e){return((...t)=>ue||!le?e(...t):le.then(()=>e(...t)))}function fe(){g=!0,te();try{h?.(),m?.()}finally{try{ce?.close()}finally{ae.close?.()}}}let pe={events:i,get isTrusted(){return ae.isTrusted},get status(){return ae.status},get connectionError(){return ae.connectionError},get transport(){return ae.transport??se},get connection(){return o},connectionMeta:s,ensureTrusted:ae.ensureTrusted,requestTrust:ae.requestTrust,requestTrustWithToken:async e=>(kC(e),o={...o,authToken:e},ae.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await ae.requestTrustWithCode(e);if(!t)return!1;kC(t),o={...o,authToken:t};try{ce?.postMessage({type:`auth-update`,authToken:t})}catch{}return!0},requestAuthCode:e=>ae.requestAuthCode(e),call:de(ae.call),callEvent:de(ae.callEvent),callOptional:de(ae.callOptional),client:p,sharedState:void 0,services:void 0,streaming:void 0,cacheManager:d,scope:void 0,close:fe};pe.sharedState=BC(pe),pe.streaming=lw(pe),pe.services=zC(pe);let me=new Map;pe.scope=(e=>{if(!e)return pe;let t=me.get(e);return t||(t=bw(pe,e),me.set(e,t)),t}),f.rpc=pe;function he(){try{return typeof window<`u`&&window.self===window.top}catch{return!1}}async function ge(){if(e.simpleAuth!==!1&&he()&&typeof globalThis.prompt==`function`)for(await pe.requestAuthCode().catch(()=>{});!pe.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 pe.requestTrustWithCode(t))return}}async function _e(){let t=await ae.requestTrust(),n=e.otpParam??`devframe_otp`,r=n?await RC(pe,{param:n}):!1;t||r||pe.isTrusted||await ge()}return le=_e().then(()=>{ue=!0},()=>{ue=!0}),s.mcp&&eC(async()=>{let{setupBrowserAgentRpcBridge:e}=await import(`./browser-agent-rpc-KH4HHvHf-CnWgn3Pv.js`);return{setupBrowserAgentRpcBridge:e}},[],import.meta.url).then(({setupBrowserAgentRpcBridge:e})=>{g||(h=e(pe))}).catch(()=>{}),ce&&(ce.onmessage=e=>{e.data?.type===`auth-update`&&e.data.authToken&&pe.requestTrustWithToken(e.data.authToken)}),pe}var Ow=Dw,kw=[`components`,`injectors`,`signals`,`ngrx`,`tanstackQuery`,`forms`,`router`,`pipes`,`http`,`analog`,`capacitor`,`errors`,`plugins`],Aw=[`angular`,`ngrx`,`analog`,`angular-native`,`nativescript`,`capacitor`];function jw(e){return`pangular:${e}`}var Mw=[`forms`,`router`,`ngrx`,`http`,`analog`,`components`,`tanstackQuery`,`plugins`],Nw={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},capacitorCalls:{default:200,min:10,max:2e3},idleAfterMs:{default:6e4,min:0,max:6e5}},Pw={"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`,"cache-off-or-filter":`the transfer cache is off, or its filter (or another withHttpTransferCacheOptions setting) left it out`},Fw=[[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 Iw(e){return Fw.some(([t])=>t===e)}var Lw=/^[a-z][a-z0-9-]{0,39}$/;function Rw(e,t){let n=t.plugins?.[e],r=t.inspectors.plugins&&Lw.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 zw=`pangular`,Bw={mod:`Mod`,ctrl:`Ctrl`,control:`Ctrl`,meta:`Meta`,cmd:`Meta`,command:`Meta`,alt:`Alt`,option:`Alt`,opt:`Alt`,shift:`Shift`},Vw=[`Mod`,`Ctrl`,`Meta`,`Alt`,`Shift`];function Hw(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=Bw[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[...Vw.filter(e=>n.has(e)),r].join(`+`)}function Uw(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 Ww(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 Gw=[{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`}],Kw=1e4;function qw(e){return Gw.filter(t=>!(`inspector`in t)||e.inspectors[t.inspector])}var Jw={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`},Yw=200;function Xw(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 Zw(e){let t=new URLSearchParams(e.replace(/^#/,``)),n=e=>{let n=t.get(e)?.trim();return n&&n.length<=Yw?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 Qw=[{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 $w(e){let t=qw(e).map(e=>({id:`tab:${e.id}`,title:`Go to ${e.label}`,group:`Go to`,keywords:`tab open`})),n=Qw.filter(t=>!t.inspector||e.inspectors[t.inspector]).map(({inspector:e,...t})=>t);return[...t,...n]}function eT(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function tT(e,t){return typeof e==`boolean`?e:t}var nT=100,rT=100;function iT(e){if(!Array.isArray(e))return[];let t=e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e&&e.length<=rT);return[...new Set(t)].slice(0,nT)}function aT(e,t){let{default:n,min:r,max:i}=Nw[t];return typeof e!=`number`||!Number.isFinite(e)?n:Math.min(i,Math.max(r,Math.round(e)))}function oT(e,t){return Object.fromEntries(e.map(e=>[e,t(e)]))}function sT(e){let t=eT(e),n=eT(t.agent),r=eT(t.inspectors),i=eT(n.tools),a=eT(t.actions),o=tT(t.actions,!0),s=eT(t.redaction),c=eT(t.limits),l=oT(kw,e=>tT(r[e],!0));return{inspectors:l,agent:{readOnly:tT(n.readOnly,!1),tools:oT(kw,e=>l[e]&&tT(i[e],!0)),browserTools:tT(n.browserTools,!1)},actions:oT(Mw,e=>l[e]&&tT(a[e],o)),redaction:{secretNames:iT(s.secretNames),unmask:iT(s.unmask)},limits:Object.fromEntries(Object.keys(Nw).map(e=>[e,aT(c[e],e)])),popup:{hotkey:fT(eT(t.popup).hotkey)},plugins:dT(t.plugins),lint:{rules:lT(t.lint)}}}var cT=200;function lT(e){let t=eT(eT(e).rules),n={};for(let[e,r]of Object.entries(t).slice(0,cT))typeof r==`boolean`&&(n[e]=r);return n}var uT=100;function dT(e){let t={};for(let[n,r]of Object.entries(eT(e)).slice(0,uT)){if(!Lw.test(n))continue;if(typeof r==`boolean`){t[n]={enabled:r,tools:!0,actions:!0};continue}let e=eT(r);r!==void 0&&Object.keys(e).length&&(t[n]={enabled:tT(e.enabled,!0),tools:tT(e.tools,!0),actions:tT(e.actions,!0)})}return t}function fT(e){return e===!1?!1:Hw(e)??`Alt+Shift+P`}function pT(e){let t=e?.configs;return sT(t?.[zw])}function mT(e){return`${{forms:`Writing to forms`,router:`Navigating and clearing navigations`,ngrx:`Restoring NgRx state and dispatching actions`,http:`Changing HTTP mock rules and SSR overrides, and clearing HTTP calls`,analog:`Calling API routes and clearing server calls`,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 hT=[`pangular:build-meta`],gT={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`},_T={forms:`Form writes`,router:`Navigation`,ngrx:`NgRx restore and dispatch`,http:`HTTP mocking`,analog:`Analog API calls`,components:`Component edits`,tanstackQuery:`TanStack Query invalidate and refetch`,plugins:`Plugin actions`},vT={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`,capacitorCalls:e=>`${e} Capacitor plugin calls`,idleAfterMs:e=>e?`idle ${e/1e3} s after the last agent call`:`never idle`};function yT(e){let t=[],n=(e,n)=>{n.length&&t.push({label:e,value:n.join(`, `)})},r=kw.filter(t=>e.inspectors[t]);n(`Inspectors off`,kw.filter(t=>!e.inspectors[t]).map(e=>gT[e])),n(`Agent`,e.agent.readOnly?[`Read-only`]:[]),n(`Hidden from the agent`,r.filter(t=>!e.agent.tools[t]).map(e=>gT[e])),n(`Blocked actions`,Mw.filter(t=>e.inspectors[t]&&!e.actions[t]).map(e=>_T[e])),n(`Extra secret names`,e.redaction.secretNames),n(`Unmasked names`,e.redaction.unmask),n(`Limits`,Object.keys(Nw).filter(t=>e.limits[t]!==Nw[t].default).map(t=>vT[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 bT(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 xT(e){return!e.tags.length&&!e.directives.length&&!e.text}function ST(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 CT={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 wT(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 ET(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 DT(e,t){return e?.capabilities?.[t]===!1}function OT(e,t){let n=CT[e],r=`${n.subject} needs Angular ${n.since} or later`;if(!t)return`${r}; this page's Angular version is unknown.`;let i=wT(t);return ET(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 kT(e){return e.hydration===`hydrated`&&e.hydratedAt===void 0?`hydrated before inspection`:e.hydration}var AT=/^on (viewport|interaction|hover)\b/;function jT(e){let t=e.filter(e=>!/^(prefetch|hydrate) /.test(e));return t.length>0&&t.every(e=>AT.test(e))}function MT(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(jT(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 NT=`pangular-page-id`,PT=null;function FT(e){PT=e}function IT(){if(PT)return PT;try{return new URLSearchParams(location.search).get(`pageId`)||(window.top===window?null:sessionStorage.getItem(NT)||null)}catch{return null}}function LT(e,t){if(t.chosen&&e[t.chosen])return t.chosen;if(t.host)return t.host;if(t.previous&&e[t.previous])return t.previous;let n=null;for(let t of Object.values(e))(!n||t.reportedAt>n.reportedAt)&&(n=t);return n?.pageId??null}function RT(e,t){return e?t?e.pages?.[t]??null:e:null}function zT(e,t){return e?t?e.pages?.[t]??null:e.graph??null:null}function BT(){return{functions:[...hT]}}function VT(e,t,n){return e?e.scope(`pangular`).rpc.call(t,...n===void 0?[]:[n]):Promise.resolve(null)}function HT(e,t,n){return VT(e,t,n).then(e=>e,()=>null)}function UT(e){return e?.connectionMeta.backend===`static`}function WT(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 GT(e=globalThis){delete e.__DEVFRAME_CONNECTION__,delete e.__DEVFRAME_CONNECTION_META__}function KT(e){return e.split(`@`)[1]??``}var qT={signal:`Signal Forms`,reactive:`Reactive`,template:`Template-driven`},JT={own:`validator`,directive:`template attribute`,tree:`cross-field rule`,async:`async`,parse:`parse`,submission:`server`,schema:`schema`,manual:`setErrors`},YT=HT,XT={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 ZT(e){return XT[e]??e}var QT=`https://pangular-inspector.dev/security/#opt-fields-in-or-out`;async function $T(e,t){return await YT(e,`request-form-action`,t)??{ok:!1,error:`The devtools server did not answer.`}}function eE(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 tE=/"(?:[^"\\\n]|\\.)*"|`([^`\n]*)`|\*\*/g;function nE(e){return(e??``).replace(/^_Labels, paths.*_\n\n/,``).replace(tE,(e,t)=>t??(e===`**`?``:e))}function rE(e){return pT(e?.connectionMeta)}function iE(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?[...e]:void 0}function aE(e,t){if(!t||typeof t!=`object`)return e;let n=iE(t.secretNames),r=iE(t.unmask);return!n||!r?e:{...e,redaction:{secretNames:n,unmask:r}}}function oE(e,t){return rE(e).actions[t]}var sE={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 cE(e){return sE[e]}var lE=`https://pangular-inspector.dev/getting-started/configuration/#inspectors-and-agent-tools`;function uE(e,t){let n=sE[e];return!n||t.inspectors[n]}function dE(e,t){e&1&&(T(),Sg(0,`rect`,5)(1,`rect`,6)(2,`rect`,7)(3,`rect`,8))}function fE(e,t){e&1&&(T(),Sg(0,`path`,9)(1,`circle`,10)(2,`circle`,11)(3,`path`,12))}function pE(e,t){e&1&&(T(),Sg(0,`path`,13)(1,`path`,14))}function mE(e,t){e&1&&(T(),Sg(0,`path`,15)(1,`path`,16)(2,`path`,17))}function hE(e,t){e&1&&(T(),Sg(0,`circle`,18)(1,`path`,19)(2,`circle`,20))}function gE(e,t){e&1&&(T(),Sg(0,`path`,1))}function _E(e,t){e&1&&(T(),Sg(0,`path`,21)(1,`path`,22)(2,`path`,23)(3,`path`,24))}function vE(e,t){e&1&&(T(),Sg(0,`ellipse`,25)(1,`path`,26)(2,`path`,27))}function yE(e,t){e&1&&(T(),Sg(0,`rect`,28)(1,`path`,29)(2,`path`,30)(3,`path`,31))}function bE(e,t){e&1&&(T(),Sg(0,`circle`,32)(1,`path`,9)(2,`path`,33))}function xE(e,t){e&1&&(T(),Sg(0,`path`,34)(1,`path`,35)(2,`path`,36)(3,`path`,37)(4,`circle`,38))}function SE(e,t){e&1&&(T(),Sg(0,`circle`,39)(1,`path`,40))}function CE(e,t){e&1&&(T(),Sg(0,`ellipse`,41)(1,`path`,42)(2,`path`,43)(3,`path`,44)(4,`path`,45))}function wE(e,t){e&1&&(T(),Sg(0,`circle`,32)(1,`path`,46)(2,`path`,47))}function TE(e,t){e&1&&(T(),Sg(0,`path`,2))}function EE(e,t){e&1&&(T(),Sg(0,`path`,3))}function DE(e,t){e&1&&(T(),Sg(0,`path`,4))}var OE=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&&(T(),R(0,`svg`,0),A(1,dE,4,0)(2,fE,4,0)(3,pE,2,0)(4,mE,3,0)(5,hE,3,0)(6,gE,1,0,`:svg:path`,1)(7,_E,4,0)(8,vE,3,0)(9,yE,4,0)(10,bE,3,0)(11,xE,5,0)(12,SE,2,0)(13,CE,5,0)(14,wE,3,0)(15,TE,1,0,`:svg:path`,2)(16,EE,1,0,`:svg:path`,3)(17,DE,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; -}`]})},FE=(e,t)=>t.tab,IE=(e,t)=>t.label;function LE(e,t){e&1&&K(0),e&2&&J(` `,W().meta()?.projectName,` `)}function RE(e,t){e&1&&K(0,` Project details unavailable `)}function zE(e,t){e&1&&K(0,` Loading… `)}function BE(e,t){e&1&&(K(0,` Run `),I(1,`code`),K(2,`pangular build`),L(),K(3,` again to rebuild the report. `))}function VE(e,t){e&1&&K(0,` Check that the dev server is running. `)}function HE(e,t){if(e&1){let e=V();I(0,`button`,12),H(`click`,function(){return w(e),T(W(2).loadMeta())}),K(1,`Try again`),L()}}function UE(e,t){if(e&1&&(I(0,`p`,10),j(1,BE,4,0)(2,VE,1,0),L(),j(3,HE,2,0,`button`,11)),e&2){let e=W();O(),M(e.staticReport()?1:2),O(2),M(e.staticReport()?-1:3)}}function WE(e,t){e&1&&(I(0,`li`,5)(1,`span`),K(2,`Analog`),L(),K(3),L()),e&2&&(O(3),q(t))}function GE(e,t){e&1&&(I(0,`li`)(1,`span`),K(2,`Change detection`),L(),K(3),L()),e&2&&(O(3),q(t))}function KE(e,t){if(e&1&&(I(0,`span`,19),K(1),L(),I(2,`span`,20),K(3),L()),e&2){let e=W().$implicit,t=W();O(),q(t.cards()[e.tab]?.value),O(2),q(t.cards()[e.tab]?.sub)}}function qE(e,t){e&1&&(I(0,`span`,21),K(1,`–`),L(),I(2,`span`,20),K(3,`Count unavailable`),L())}function JE(e,t){e&1&&(R(0,`span`,22),I(1,`span`,20),K(2,`Counting…`),L())}function YE(e,t){if(e&1){let e=V();I(0,`button`,13),H(`click`,function(){let t=w(e).$implicit;return T(W().navigate.emit(t.tab))}),I(1,`span`,14)(2,`span`,15),R(3,`app-tab-icon`,16),L(),I(4,`span`,17),K(5,`→`),L()(),I(6,`span`,18),K(7),L(),j(8,KE,4,2)(9,qE,4,0)(10,JE,3,0),L()}if(e&2){let e,n=t.$implicit,r=t.$index,i=W().stateOf(n.tab);__(`animation-delay`,60*r,`ms`),A(`aria-busy`,i===`loading`),O(3),F(`name`,n.tab),O(4),q(n.label),O(),M((e=i)===`ready`?8:e===`error`?9:10)}}function XE(e,t){e&1&&(I(0,`p`),K(1,`Loading…`),L())}function ZE(e,t){if(e&1&&(I(0,`div`)(1,`dt`),K(2),L(),I(3,`dd`),K(4),L()()),e&2){let e=t.$implicit;O(2),q(e.label),O(2),q(e.value)}}function QE(e,t){if(e&1&&(I(0,`dl`),N(1,ZE,5,2,`div`,null,IE),L()),e&2){let e=W();O(),P(e.configItems())}}function $E(e,t){e&1&&(I(0,`p`),K(1,`Defaults`),L())}var eD=[{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 tD(e){return eD.filter(t=>gE(t.tab,e))}var nD={zoneless:`Zoneless`,zone:`zone.js`,"zone-unused":`Zoneless, zone.js loaded`};function rD(e){return e&&Object.hasOwn(nD,e)?nD[e]:null}var iD=new Set([`signal`,`computed`,`linkedSignal`,`effect`]),aD={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 oD(e,t,n){return`${e} ${e===1?t:n}`}function sD(e,t){for(let n of e??[])t(n),sD(n.children,t)}function cD(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 · ${oD(t,`directive`,`directives`)}`}}function lD(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 · ${oD(t,`redirect`,`redirects`)}`}}function uD(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]=aD[e]??[e,e];return oD(t,n,r)});return{value:e.length,sub:n.join(` · `)}}function dD(e,t){let n=e?.forms??[],r=t?n.filter(e=>QT(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 fD(e){return e.cancelled||e.status===void 0?!1:e.status===0||e.status>=400}function pD(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(fD).length;return{value:o.length,sub:`${o.length===1?`call`:`calls`} · ${s} failed`}}var mD=class e{rpc=$(null);navigate=Sv();staticReport=X(()=>YT(this.rpc()));meta=D(null);redaction=D(null);config=X(()=>dE(lE(this.rpc()),this.redaction()));stats=X(()=>this.rpc()?tD(this.config()):[]);configItems=X(()=>ET(this.config()));metaState=D(`loading`);states=D({});rows=D({});injectorTree=D(null);signalGraph=D(null);formsState=D(null);httpState=D(null);pageId=HT();destroyRef=C(Os);stopLive=[];zone=X(()=>rD(WT(this.injectorTree(),this.pageId)?.zone));liveInjectors=X(()=>{let e=WT(this.injectorTree(),this.pageId);if(!e?.roots?.length)return null;let t=0,n=0,r=e=>{t++,n+=e.providers?.length??0};return sD(e.roots,r),sD(e.environment,r),{injectors:t,providers:n}});liveSignals=X(()=>{let e=GT(this.signalGraph(),this.pageId);return e?.nodes?.length?e.nodes.filter(e=>iD.has(e.kind??``)).length:null});cards=X(()=>{let e=this.rows(),t={};if(e.components&&(t.components=cD(e.components)),e.routes&&(t.routes=lD(e.routes)),e.store&&(t.store=uD(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 · ${oD(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=dD(i,this.pageId));let a=this.httpState();return a&&(t.network=pD(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)&&qT(e,`redaction-config`).then(t=>{this.rpc()===e&&this.redaction.set(t)}).catch(()=>{})}constructor(){hc(()=>{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);let n=lE(e),r=e=>gE(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)),gE(`forms`,t)&&r(`forms`,e=>this.formsState.set(e??{}),`forms`),gE(`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=k({type:e,selectors:[[`app-dashboard`]],inputs:{rpc:[1,`rpc`]},outputs:{navigate:`navigate`},decls:33,vars:14,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`],[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`]],template:function(e,t){if(e&1&&(I(0,`section`,0)(1,`div`,1)(2,`p`,2),K(3,`Project`),L(),I(4,`h2`,3),j(5,LE,1,1)(6,RE,1,0)(7,zE,1,0),L(),j(8,UE,4,2),L(),I(9,`ul`,4)(10,`li`)(11,`span`),K(12,`Angular`),L(),K(13),L(),I(14,`li`)(15,`span`),K(16,`TypeScript`),L(),K(17),L(),I(18,`li`)(19,`span`),K(20,`SSR`),L(),K(21),L(),j(22,WE,4,1,`li`,5),j(23,GE,4,1,`li`),L()(),I(24,`div`,6),N(25,YE,11,6,`button`,7,FE),L(),I(27,`section`,8)(28,`h2`,9),K(29,`Configuration`),L(),j(30,XE,2,0,`p`)(31,QE,3,0,`dl`)(32,$E,2,0,`p`),L()),e&2){let e,n,r;A(`aria-busy`,t.metaState()===`loading`),O(4),G(`muted`,t.metaState()!==`ready`),O(),M((e=t.metaState())===`ready`?5:e===`error`?6:7),O(3),M(t.metaState()===`error`?8:-1),O(),G(`pending`,t.metaState()===`loading`),O(4),q(t.meta()?.angularVersion??`…`),O(4),q(t.meta()?.typescript??`…`),O(4),q(t.meta()?t.meta()?.ssr?`On`:`Off`:`…`),O(),M((n=t.meta()?.analog)?22:-1,n),O(),M((r=t.zone())?23:-1,r),O(2),P(t.stats()),O(2),A(`aria-busy`,!t.rpc()),O(3),M(t.rpc()?t.configItems().length?31:32:30)}},dependencies:[PE],styles:[`[_nghost-%COMP%] { +}`]})},kE=(e,t)=>t.tab,AE=(e,t)=>t.label;function jE(e,t){e&1&&G(0),e&2&&q(` `,U().meta()?.projectName,` `)}function ME(e,t){e&1&&G(0,` Project details unavailable `)}function NE(e,t){e&1&&G(0,` Loading… `)}function PE(e,t){e&1&&(G(0,` Run `),F(1,`code`),G(2,`pangular build`),I(),G(3,` again to rebuild the report. `))}function FE(e,t){e&1&&G(0,` Check that the dev server is running. `)}function IE(e,t){if(e&1){let e=B();F(0,`button`,12),V(`click`,function(){return C(e),w(U(2).loadMeta())}),G(1,`Try again`),I()}}function LE(e,t){if(e&1&&(F(0,`p`,10),A(1,PE,4,0)(2,FE,1,0),I(),A(3,IE,2,0,`button`,11)),e&2){let e=U();D(),j(e.staticReport()?1:2),D(2),j(e.staticReport()?-1:3)}}function RE(e,t){e&1&&(F(0,`li`,5)(1,`span`),G(2,`Analog`),I(),G(3),I()),e&2&&(D(3),K(t))}function zE(e,t){e&1&&(F(0,`li`)(1,`span`),G(2,`Change detection`),I(),G(3),I()),e&2&&(D(3),K(t))}function BE(e,t){if(e&1&&(F(0,`span`,19),G(1),I(),F(2,`span`,20),G(3),I()),e&2){let e=U().$implicit,t=U();D(),K(t.cards()[e.tab]?.value),D(2),K(t.cards()[e.tab]?.sub)}}function VE(e,t){e&1&&(F(0,`span`,21),G(1,`–`),I(),F(2,`span`,20),G(3,`Count unavailable`),I())}function HE(e,t){e&1&&(L(0,`span`,22),F(1,`span`,20),G(2,`Counting…`),I())}function UE(e,t){if(e&1){let e=B();F(0,`button`,13),V(`click`,function(){let t=C(e).$implicit;return w(U().navigate.emit(t.tab))}),F(1,`span`,14)(2,`span`,15),L(3,`app-tab-icon`,16),I(),F(4,`span`,17),G(5,`→`),I()(),F(6,`span`,18),G(7),I(),A(8,BE,4,2)(9,VE,4,0)(10,HE,3,0),I()}if(e&2){let e,n=t.$implicit,r=t.$index,i=U().stateOf(n.tab);p_(`animation-delay`,60*r,`ms`),k(`aria-busy`,i===`loading`),D(3),P(`name`,n.tab),D(4),K(n.label),D(),j((e=i)===`ready`?8:e===`error`?9:10)}}function WE(e,t){e&1&&(F(0,`p`),G(1,`Loading…`),I())}function GE(e,t){if(e&1&&(F(0,`div`)(1,`dt`),G(2),I(),F(3,`dd`),G(4),I()()),e&2){let e=t.$implicit;D(2),K(e.label),D(2),K(e.value)}}function KE(e,t){if(e&1&&(F(0,`dl`),M(1,GE,5,2,`div`,null,AE),I()),e&2){let e=U();D(),N(e.configItems())}}function qE(e,t){e&1&&(F(0,`p`),G(1,`Defaults`),I())}var JE=[{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 YE(e){return JE.filter(t=>uE(t.tab,e))}var XE={zoneless:`Zoneless`,zone:`zone.js`,"zone-unused":`Zoneless, zone.js loaded`};function ZE(e){return e&&Object.hasOwn(XE,e)?XE[e]:null}var QE=new Set([`signal`,`computed`,`linkedSignal`,`effect`]),$E={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 eD(e,t,n){return`${e} ${e===1?t:n}`}function tD(e,t){for(let n of e??[])t(n),tD(n.children,t)}function nD(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 · ${eD(t,`directive`,`directives`)}`}}function rD(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 · ${eD(t,`redirect`,`redirects`)}`}}function iD(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]=$E[e]??[e,e];return eD(t,n,r)});return{value:e.length,sub:n.join(` · `)}}function aD(e,t){let n=e?.forms??[],r=t?n.filter(e=>KT(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 oD(e){return e.cancelled||e.status===void 0?!1:e.status===0||e.status>=400}function sD(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(oD).length;return{value:o.length,sub:`${o.length===1?`call`:`calls`} · ${s} failed`}}var cD=class e{rpc=$(null);navigate=gv();staticReport=X(()=>UT(this.rpc()));meta=E(null);redaction=E(null);config=X(()=>aE(rE(this.rpc()),this.redaction()));stats=X(()=>this.rpc()?YE(this.config()):[]);configItems=X(()=>yT(this.config()));metaState=E(`loading`);states=E({});rows=E({});injectorTree=E(null);signalGraph=E(null);formsState=E(null);httpState=E(null);pageId=IT();destroyRef=S(Es);stopLive=[];zone=X(()=>ZE(RT(this.injectorTree(),this.pageId)?.zone));liveInjectors=X(()=>{let e=RT(this.injectorTree(),this.pageId);if(!e?.roots?.length)return null;let t=0,n=0,r=e=>{t++,n+=e.providers?.length??0};return tD(e.roots,r),tD(e.environment,r),{injectors:t,providers:n}});liveSignals=X(()=>{let e=zT(this.signalGraph(),this.pageId);return e?.nodes?.length?e.nodes.filter(e=>QE.has(e.kind??``)).length:null});cards=X(()=>{let e=this.rows(),t={};if(e.components&&(t.components=nD(e.components)),e.routes&&(t.routes=rD(e.routes)),e.store&&(t.store=iD(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 · ${eD(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=aD(i,this.pageId));let a=this.httpState();return a&&(t.network=sD(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),!UT(e)&&VT(e,`redaction-config`).then(t=>{this.rpc()===e&&this.redaction.set(t)}).catch(()=>{})}constructor(){pc(()=>{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);let n=rE(e),r=e=>uE(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)),uE(`forms`,t)&&r(`forms`,e=>this.formsState.set(e??{}),`forms`),uE(`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:33,vars:14,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`],[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`]],template:function(e,t){if(e&1&&(F(0,`section`,0)(1,`div`,1)(2,`p`,2),G(3,`Project`),I(),F(4,`h2`,3),A(5,jE,1,1)(6,ME,1,0)(7,NE,1,0),I(),A(8,LE,4,2),I(),F(9,`ul`,4)(10,`li`)(11,`span`),G(12,`Angular`),I(),G(13),I(),F(14,`li`)(15,`span`),G(16,`TypeScript`),I(),G(17),I(),F(18,`li`)(19,`span`),G(20,`SSR`),I(),G(21),I(),A(22,RE,4,1,`li`,5),A(23,zE,4,1,`li`),I()(),F(24,`div`,6),M(25,UE,11,6,`button`,7,kE),I(),F(27,`section`,8)(28,`h2`,9),G(29,`Configuration`),I(),A(30,WE,2,0,`p`)(31,KE,3,0,`dl`)(32,qE,2,0,`p`),I()),e&2){let e,n,r;k(`aria-busy`,t.metaState()===`loading`),D(4),W(`muted`,t.metaState()!==`ready`),D(),j((e=t.metaState())===`ready`?5:e===`error`?6:7),D(3),j(t.metaState()===`error`?8:-1),D(),W(`pending`,t.metaState()===`loading`),D(4),K(t.meta()?.angularVersion??`…`),D(4),K(t.meta()?.typescript??`…`),D(4),K(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)}},dependencies:[OE],styles:[`[_nghost-%COMP%] { display: block; max-width: 1200px; } @@ -325,7 +325,7 @@ h2.muted[_ngcontent-%COMP%] { .skeleton[_ngcontent-%COMP%] { animation: none; } -}`]})},hD=`pangular:panel-action-result`,gD=6e3,_D=0;function vD(e=window){return e.location.protocol===`chrome-extension:`&&e.parent!==e}function yD(e,t=window){let n=`pa-${Date.now().toString(36)}-${++_D}`;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!==hD||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`}),gD);t.addEventListener(`message`,a),t.parent.postMessage({...e,requestId:n},t.location.origin)})}var bD=class e{available=vD();reveal(e,t){return yD({type:`pangular:reveal-element`,pageId:e,id:t})}openSource(e,t,n){return yD({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=Il({token:e,factory:e.ɵfac})};function xD(e){return new Date(e).toLocaleTimeString()}var SD=/[ \t\n\r]/;function CD(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 ED(e,t){e&1&&(z(0,`span`,11),K(1,`impure`),B())}function DD(e,t){e&1&&(z(0,`span`,11),K(1,`churning`),B())}function OD(e,t){e&1&&(z(0,`span`,11),K(1,`stale?`),B())}function kD(e,t){if(e&1&&(z(0,`span`,10),K(1),B()),e&2){let e=W(2).$implicit,t=W(3);O(),q(t.plural(e.calls,`call`))}}function AD(e,t){if(e&1){let e=V();z(0,`button`,7),U(`click`,function(){w(e);let t=W().$implicit;return T(W(3).showPipe.emit(t.name))}),z(1,`span`,8),K(2,`Show in Pipes:`),B(),z(3,`span`,9),K(4),B(),z(5,`span`,10),K(6),B(),j(7,ED,2,0,`span`,11),j(8,DD,2,0,`span`,11),j(9,OD,2,0,`span`,11),j(10,kD,2,1,`span`,10),B()}if(e&2){let e=W().$implicit;O(4),q(e.name),O(2),J(``,e.uses,`×`),O(),M(e.isPure?-1:7),O(),M(e.churn?8:-1),O(),M(e.stale?9:-1),O(),M(e.calls===void 0?-1:10)}}function jD(e,t){e&1&&(z(0,`span`,11),K(1,`impure`),B())}function MD(e,t){if(e&1&&(z(0,`span`,6)(1,`span`,9),K(2),B(),z(3,`span`,10),K(4),B(),j(5,jD,2,0,`span`,11),B()),e&2){let e=W().$implicit;O(2),q(e.name),O(2),J(``,e.uses,`×`),O(),M(e.isPure?-1:5)}}function ND(e,t){if(e&1&&(z(0,`li`),j(1,AD,11,6,`button`,5)(2,MD,6,3,`span`,6),B()),e&2){let e=W(3);O(),M(e.canShowPipes()?1:2)}}function PD(e,t){if(e&1&&(z(0,`ul`,3),N(1,ND,3,1,`li`,null,TD),B(),z(3,`p`,4),K(4,` Call counts cover every component that uses the pipe. Record calls in the Pipes tab to see them. `),B()),e&2){let e=W(2);O(),P(e.rows())}}function FD(e,t){e&1&&(z(0,`p`,2),K(1,`No pipe is in use in the rendered part of its template.`),B())}function ID(e,t){if(e&1&&(z(0,`div`,0)(1,`h3`),K(2,` Pipes in template `),z(3,`span`,1),K(4),B()(),j(5,PD,5,0)(6,FD,2,0,`p`,2),B()),e&2){let e=W();O(4),q(e.rows().length),O(),M(e.rows().length?5:6)}}function LD(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 RD=class e{plural=wD;destroyRef=C(Os);rpc=$(null);pageId=$(void 0);component=$.required();canShowPipes=$(!1);showPipe=Sv();snapshot=D(void 0);loaded=D(!1);rows=X(()=>LD(this.snapshot(),this.pageId(),this.component()));unsubscribe;constructor(){hc(()=>{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=k({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&&j(0,ID,7,2,`div`,0),e&2&&M(t.loaded()?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})},lD=`pangular:panel-action-result`,uD=6e3,dD=0;function fD(e=window){return e.location.protocol===`chrome-extension:`&&e.parent!==e}function pD(e,t=window){let n=`pa-${Date.now().toString(36)}-${++dD}`;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!==lD||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`}),uD);t.addEventListener(`message`,a),t.parent.postMessage({...e,requestId:n},t.location.origin)})}var mD=class e{available=fD();reveal(e,t){return pD({type:`pangular:reveal-element`,pageId:e,id:t})}openSource(e,t,n){return pD({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=Pl({token:e,factory:e.ɵfac})};function hD(e){return new Date(e).toLocaleTimeString()}var gD=/[ \t\n\r]/;function _D(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 bD(e,t){e&1&&(R(0,`span`,11),G(1,`impure`),z())}function xD(e,t){e&1&&(R(0,`span`,11),G(1,`churning`),z())}function SD(e,t){e&1&&(R(0,`span`,11),G(1,`stale?`),z())}function CD(e,t){if(e&1&&(R(0,`span`,10),G(1),z()),e&2){let e=U(2).$implicit,t=U(3);D(),K(t.plural(e.calls,`call`))}}function wD(e,t){if(e&1){let e=B();R(0,`button`,7),H(`click`,function(){C(e);let t=U().$implicit;return w(U(3).showPipe.emit(t.name))}),R(1,`span`,8),G(2,`Show in Pipes:`),z(),R(3,`span`,9),G(4),z(),R(5,`span`,10),G(6),z(),A(7,bD,2,0,`span`,11),A(8,xD,2,0,`span`,11),A(9,SD,2,0,`span`,11),A(10,CD,2,1,`span`,10),z()}if(e&2){let e=U().$implicit;D(4),K(e.name),D(2),q(``,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 TD(e,t){e&1&&(R(0,`span`,11),G(1,`impure`),z())}function ED(e,t){if(e&1&&(R(0,`span`,6)(1,`span`,9),G(2),z(),R(3,`span`,10),G(4),z(),A(5,TD,2,0,`span`,11),z()),e&2){let e=U().$implicit;D(2),K(e.name),D(2),q(``,e.uses,`×`),D(),j(e.isPure?-1:5)}}function DD(e,t){if(e&1&&(R(0,`li`),A(1,wD,11,6,`button`,5)(2,ED,6,3,`span`,6),z()),e&2){let e=U(3);D(),j(e.canShowPipes()?1:2)}}function OD(e,t){if(e&1&&(R(0,`ul`,3),M(1,DD,3,1,`li`,null,yD),z(),R(3,`p`,4),G(4,` Call counts cover every component that uses the pipe. Record calls in the Pipes tab to see them. `),z()),e&2){let e=U(2);D(),N(e.rows())}}function kD(e,t){e&1&&(R(0,`p`,2),G(1,`No pipe is in use in the rendered part of its template.`),z())}function AD(e,t){if(e&1&&(R(0,`div`,0)(1,`h3`),G(2,` Pipes in template `),R(3,`span`,1),G(4),z()(),A(5,OD,5,0)(6,kD,2,0,`p`,2),z()),e&2){let e=U();D(4),K(e.rows().length),D(),j(e.rows().length?5:6)}}function jD(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 MD=class e{plural=vD;destroyRef=S(Es);rpc=$(null);pageId=$(void 0);component=$.required();canShowPipes=$(!1);showPipe=gv();snapshot=E(void 0);loaded=E(!1);rows=X(()=>jD(this.snapshot(),this.pageId(),this.component()));unsubscribe;constructor(){pc(()=>{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,AD,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 zD(e){let t=e?.pages;return t&&typeof t==`object`?t:{}}function BD(e){let t=C(Os),n=D({}),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(zD(e));o(a.value()),i=a.on(`updated`,o)}catch{r===e&&n.set({})}};return hc(()=>{let t=e();t&&t!==r&&Z(()=>void a(t))}),t.onDestroy(()=>i?.()),n.asReadonly()}function VD(e,t){if(t)return e[t]??null;let n=null;for(let t of Object.values(e))(!n||t.reportedAt>n.reportedAt)&&(n=t);return n}var HD=[`*`];function UD(e,t){if(e&1&&(z(0,`div`,1)(1,`p`,2),K(2),B(),z(3,`p`,3),K(4),Kg(5),z(6,`a`,4),K(7,`Supported versions`),B()()()),e&2){let e=W();G(`compact`,e.compact()),O(2),q(e.title()),O(2),J(` `,t,` `),O(2),Mg(`href`,e.docsUrl,Nu)}}var WD=`https://pangular-inspector.dev/getting-started/installation/#supported-angular-versions`,GD=class e{page=$(null);capability=$.required();missing=$(!1,{transform:Nv});compact=$(!1,{transform:Nv});docsUrl=WD;text=X(()=>{let e=this.page();return!this.missing()&&!PT(e,this.capability())?null:FT(this.capability(),e?.version)});title=X(()=>{let e=this.page()?.version;return e?`Not available on Angular ${jT(e)}`:`Not available on this page`});static ɵfac=function(t){return new(t||e)};static ɵcmp=k({type:e,selectors:[[`app-angular-unavailable`]],inputs:{page:[1,`page`],capability:[1,`capability`],missing:[1,`missing`],compact:[1,`compact`]},ngContentSelectors:HD,decls:1,vars:1,consts:[[`role`,`status`,1,`unavailable`,3,`compact`],[`role`,`status`,1,`unavailable`],[1,`title`],[1,`hint`],[`target`,`_blank`,`rel`,`noopener noreferrer`,3,`href`]],template:function(e,t){if(e&1&&(Gg(),j(0,UD,8,5,`div`,0)),e&2){let e;M((e=t.text())?0:-1,e)}},styles:[`[_nghost-%COMP%] { +}`]})};function ND(e){let t=e?.pages;return t&&typeof t==`object`?t:{}}function PD(e){let t=S(Es),n=E({}),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(ND(e));o(a.value()),i=a.on(`updated`,o)}catch{r===e&&n.set({})}};return pc(()=>{let t=e();t&&t!==r&&Z(()=>void a(t))}),t.onDestroy(()=>i?.()),n.asReadonly()}function FD(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 ID=[`*`];function LD(e,t){if(e&1&&(R(0,`div`,1)(1,`p`,2),G(2),z(),R(3,`p`,3),G(4),Hg(5),R(6,`a`,4),G(7,`Supported versions`),z()()()),e&2){let e=U();W(`compact`,e.compact()),D(2),K(e.title()),D(2),q(` `,t,` `),D(2),Og(`href`,e.docsUrl,Au)}}var RD=`https://pangular-inspector.dev/getting-started/installation/#supported-angular-versions`,zD=class e{page=$(null);capability=$.required();missing=$(!1,{transform:Dv});compact=$(!1,{transform:Dv});docsUrl=RD;text=X(()=>{let e=this.page();return!this.missing()&&!DT(e,this.capability())?null:OT(this.capability(),e?.version)});title=X(()=>{let e=this.page()?.version;return e?`Not available on Angular ${wT(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:ID,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&&(Vg(),A(0,LD,8,5,`div`,0)),e&2){let e;j((e=t.text())?0:-1,e)}},styles:[`[_nghost-%COMP%] { display: block; } @@ -483,7 +483,7 @@ a[_ngcontent-%COMP%] { a[_ngcontent-%COMP%]:focus-visible { outline: 2px solid var(--%NS%accent); outline-offset: 2px; -}`]})};function KD(e){return e?.platform===`angular-native`}function qD(e){return KD(e)||e?.platform===`nativescript`}function JD(e,t){let n=Object.values(e??{}).filter(KD);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 YD=[`trigger`],XD=[`list`],ZD=(e,t)=>t.value;function QD(e,t){if(e&1&&(z(0,`span`,4),K(1),B()),e&2){let e=W();O(),q(e.current().hint)}}function $D(e,t){if(e&1&&(z(0,`span`,15),K(1),B()),e&2){let e=W().$implicit;O(),q(e.hint)}}function eO(e,t){if(e&1){let e=V();z(0,`li`,11),U(`pointerenter`,function(){let t=w(e).$index;return T(W(2).active.set(t))})(`pointerdown`,function(e){return e.preventDefault()})(`click`,function(){let t=w(e).$index;return T(W(2).choose(t))}),E(),z(1,`svg`,12),Eg(2,`path`,13),B(),vs(),z(3,`span`,14),K(4),B(),j(5,$D,2,1,`span`,15),B()}if(e&2){let e=t.$implicit,n=t.$index,r=W(2);G(`active`,n===r.active())(`selected`,e.value===r.value()),A(`id`,r.uid+`-opt-`+n)(`aria-selected`,e.value===r.value())(`aria-disabled`,e.disabled||null),O(4),q(e.label),O(),M(e.hint?5:-1)}}function tO(e,t){if(e&1&&(z(0,`li`,10),K(1),B()),e&2){let e=W(2);O(),q(e.emptyText())}}function nO(e,t){if(e&1&&(z(0,`ul`,8,1),ng(`list-in`),U(`pointerdown`,function(e){return e.preventDefault()}),N(2,eO,6,9,`li`,9,ZD,!1,tO,2,1,`li`,10),B()),e&2){let e=W();G(`up`,e.dropUp()),A(`id`,e.uid+`-list`)(`aria-labelledby`,e.labelledBy()||e.uid+`-trigger`),O(2),P(e.options())}}var rO=0,iO=class e{options=$.required();value=Dv(null);placeholder=$(`Select…`);ariaLabel=$(``);labelledBy=$(``);describedBy=$(``);disabled=$(!1);emptyText=$(`Nothing to choose`);uid=`app-select-${++rO}`;open=D(!1);active=D(-1);dropUp=D(!1);current=X(()=>this.options().find(e=>e.value===this.value())??null);host=C(zl);injector=C(Es);trigger=kv.required(`trigger`);list=kv(`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=k({type:e,selectors:[[`app-select`]],viewQuery:function(e,t){e&1&&Jg(t.trigger,YD,5)(t.list,XD,5),e&2&&Yg(2)},hostAttrs:[1,`app-select`],hostVars:2,hostBindings:function(e,t){e&1&&H(`pointerdown`,function(e){return t.onOutside(e)},Fu),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&&(z(0,`button`,2,0),U(`click`,function(){return t.toggle()})(`keydown`,function(e){return t.onKey(e)})(`blur`,function(e){return t.onBlur(e)}),z(2,`span`,3),K(3),B(),j(4,QD,2,1,`span`,4),E(),z(5,`svg`,5),Eg(6,`path`,6),B()(),j(7,nO,5,5,`ul`,7)),e&2&&(Mg(`disabled`,t.disabled()),A(`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),O(2),G(`placeholder`,!t.current()),O(),J(` `,t.current()?.label??t.placeholder(),` `),O(),M(t.current()?.hint?4:-1),O(3),M(t.open()?7:-1))},styles:[`[_nghost-%COMP%] { +}`]})};function BD(e){return e?.platform===`angular-native`}function VD(e){return BD(e)||e?.platform===`nativescript`}function HD(e,t){let n=Object.values(e??{}).filter(BD);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 UD=[`trigger`],WD=[`list`],GD=(e,t)=>t.value;function KD(e,t){if(e&1&&(R(0,`span`,4),G(1),z()),e&2){let e=U();D(),K(e.current().hint)}}function qD(e,t){if(e&1&&(R(0,`span`,15),G(1),z()),e&2){let e=U().$implicit;D(),K(e.hint)}}function JD(e,t){if(e&1){let e=B();R(0,`li`,11),H(`pointerenter`,function(){let t=C(e).$index;return w(U(2).active.set(t))})(`pointerdown`,function(e){return e.preventDefault()})(`click`,function(){let t=C(e).$index;return w(U(2).choose(t))}),T(),R(1,`svg`,12),Sg(2,`path`,13),z(),gs(),R(3,`span`,14),G(4),z(),A(5,qD,2,1,`span`,15),z()}if(e&2){let e=t.$implicit,n=t.$index,r=U(2);W(`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),K(e.label),D(),j(e.hint?5:-1)}}function YD(e,t){if(e&1&&(R(0,`li`,10),G(1),z()),e&2){let e=U(2);D(),K(e.emptyText())}}function XD(e,t){if(e&1&&(R(0,`ul`,8,1),Qh(`list-in`),H(`pointerdown`,function(e){return e.preventDefault()}),M(2,JD,6,9,`li`,9,GD,!1,YD,2,1,`li`,10),z()),e&2){let e=U();W(`up`,e.dropUp()),k(`id`,e.uid+`-list`)(`aria-labelledby`,e.labelledBy()||e.uid+`-trigger`),D(2),N(e.options())}}var ZD=0,QD=class e{options=$.required();value=xv(null);placeholder=$(`Select…`);ariaLabel=$(``);labelledBy=$(``);describedBy=$(``);disabled=$(!1);emptyText=$(`Nothing to choose`);uid=`app-select-${++ZD}`;open=E(!1);active=E(-1);dropUp=E(!1);current=X(()=>this.options().find(e=>e.value===this.value())??null);host=S(Ll);injector=S(ws);trigger=Cv.required(`trigger`);list=Cv(`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&&Wg(t.trigger,UD,5)(t.list,WD,5),e&2&&Gg(2)},hostAttrs:[1,`app-select`],hostVars:2,hostBindings:function(e,t){e&1&&V(`pointerdown`,function(e){return t.onOutside(e)},Mu),e&2&&W(`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),H(`click`,function(){return t.toggle()})(`keydown`,function(e){return t.onKey(e)})(`blur`,function(e){return t.onBlur(e)}),R(2,`span`,3),G(3),z(),A(4,KD,2,1,`span`,4),T(),R(5,`svg`,5),Sg(6,`path`,6),z()(),A(7,XD,5,5,`ul`,7)),e&2&&(Og(`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),W(`placeholder`,!t.current()),D(),q(` `,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 aO(e,t){let n=DT(t);if(OT(n))return{nodes:e,matches:0};let r=0,i=e=>e.flatMap(e=>{let t=kT(e,n);t&&r++;let a=i(e.children);return t||a.length?[{...e,children:a}]:[]});return{nodes:i(e),matches:r}}function oO(e){return e.flatMap(e=>e.kind===`directive`?oO(e.children):[{...e,children:oO(e.children)}])}function sO(e){return(e.attributes?.length?e.attributes:e.directives??[e.name]).map(e=>`[${e}]`).join(` `)}var cO={hydrated:`Hydrated`,skipped:`Skipped`,mismatched:`Mismatch`,client:`Client`};function lO(e){return cO[e]}function uO(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 dO(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 fO(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 pO(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&&!mO(t.roots,i)?{pageId:r,selectedId:null,detailId:n,destroyed:i}:{pageId:r,selectedId:i,detailId:n,destroyed:null}}function mO(e,t){return e.some(e=>e.id===t||mO(e.children,t))}function hO(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 gO=(e,t)=>t.key,_O=(e,t)=>t.id;function vO(e,t){e&1&&(z(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 `),z(2,`code`),K(3,`provideClientHydration()`),B(),K(4,` and use a development build to see each component's status. `),B())}function yO(e,t){if(e&1&&(z(0,`li`)(1,`span`,9),K(2),B(),K(3),B()),e&2){let e=t.$implicit;v_(`count count-`+e.key),O(2),q(e.value),O(),J(` `,e.label,` `)}}function bO(e,t){if(e&1&&(z(0,`span`,15),K(1,`Expected `),z(2,`code`),K(3),B()()),e&2){let e=W().$implicit;O(3),q(e.expected)}}function xO(e,t){if(e&1&&(z(0,`span`,15),K(1,`Found `),z(2,`code`),K(3),B()()),e&2){let e=W().$implicit;O(3),q(e.actual)}}function SO(e,t){if(e&1){let e=V();z(0,`li`)(1,`button`,12),U(`click`,function(){let t=w(e).$implicit;return T(W(4).showNode.emit(t.id))})(`focus`,function(){let t=w(e).$implicit;return T(W(4).highlight.emit(t.id))})(`blur`,function(){return w(e),T(W(4).highlight.emit(null))})(`mouseenter`,function(){let t=w(e).$implicit;return T(W(4).highlight.emit(t.id))})(`mouseleave`,function(){return w(e),T(W(4).highlight.emit(null))}),z(2,`span`,13),K(3),B(),z(4,`span`,14),K(5),B(),j(6,bO,4,1,`span`,15),j(7,xO,4,1,`span`,15),B()()}if(e&2){let e=t.$implicit;O(3),q(e.name),O(2),J(`<`,e.tag,`>`),O(),M(e.expected?6:-1),O(),M(e.actual?7:-1)}}function CO(e,t){if(e&1&&(z(0,`h3`,10),K(1,`Mismatches`),B(),z(2,`ul`,11),N(3,SO,8,4,`li`,null,_O),B()),e&2){let e=W(2);O(3),P(e.mismatches)}}function wO(e,t){if(e&1){let e=V();z(0,`div`,3)(1,`ul`,4),N(2,yO,4,4,`li`,5,gO),B(),z(4,`button`,6),U(`click`,function(){return w(e),T(W(2).toggleOverlay())}),E(),z(5,`svg`,7),Eg(6,`rect`,8),B(),K(7,` Outline on page `),B()(),j(8,CO,5,0)}if(e&2){let e=W(),t=W();O(2),P(t.counts()),O(2),A(`aria-pressed`,t.overlayOn()),O(4),M(e.mismatches.length?8:-1)}}function TO(e,t){e&1&&j(0,vO,5,0,`p`,2)(1,wO,9,2),e&2&&M(+!!t.hydrated)}function EO(e,t){e&1&&(z(0,`p`,2),K(1,` This page was not rendered on the server, so there is nothing to hydrate. With server-side rendering and `),z(2,`code`),K(3,`provideClientHydration()`),B(),K(4,`, each component shows whether it was hydrated, skipped or mismatched. `),B())}var DO=class e{report=$(void 0);overlay=Sv();showNode=Sv();highlight=Sv();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=k({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&&(z(0,`section`,0)(1,`h2`,1),K(2,`Hydration`),B(),j(3,TO,2,1)(4,EO,5,0,`p`,2),B()),e&2){let e;O(3),M((e=t.report())?3:4,e)}},styles:[`.hydration[_ngcontent-%COMP%] { +}`]})};function $D(e,t){let n=bT(t);if(xT(n))return{nodes:e,matches:0};let r=0,i=e=>e.flatMap(e=>{let t=ST(e,n);t&&r++;let a=i(e.children);return t||a.length?[{...e,children:a}]:[]});return{nodes:i(e),matches:r}}function eO(e){return e.flatMap(e=>e.kind===`directive`?eO(e.children):[{...e,children:eO(e.children)}])}function tO(e){return(e.attributes?.length?e.attributes:e.directives??[e.name]).map(e=>`[${e}]`).join(` `)}var nO={hydrated:`Hydrated`,skipped:`Skipped`,mismatched:`Mismatch`,client:`Client`};function rO(e){return nO[e]}function iO(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 aO(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 oO(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 sO(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&&!cO(t.roots,i)?{pageId:r,selectedId:null,detailId:n,destroyed:i}:{pageId:r,selectedId:i,detailId:n,destroyed:null}}function cO(e,t){return e.some(e=>e.id===t||cO(e.children,t))}function lO(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 uO=(e,t)=>t.key,dO=(e,t)=>t.id;function fO(e,t){e&1&&(R(0,`p`,2),G(1,` The HTML came from the server, but no component was hydrated, so the app rendered again on the client. Add `),R(2,`code`),G(3,`provideClientHydration()`),z(),G(4,` and use a development build to see each component's status. `),z())}function pO(e,t){if(e&1&&(R(0,`li`)(1,`span`,9),G(2),z(),G(3),z()),e&2){let e=t.$implicit;m_(`count count-`+e.key),D(2),K(e.value),D(),q(` `,e.label,` `)}}function mO(e,t){if(e&1&&(R(0,`span`,15),G(1,`Expected `),R(2,`code`),G(3),z()()),e&2){let e=U().$implicit;D(3),K(e.expected)}}function hO(e,t){if(e&1&&(R(0,`span`,15),G(1,`Found `),R(2,`code`),G(3),z()()),e&2){let e=U().$implicit;D(3),K(e.actual)}}function gO(e,t){if(e&1){let e=B();R(0,`li`)(1,`button`,12),H(`click`,function(){let t=C(e).$implicit;return w(U(4).showNode.emit(t.id))})(`focus`,function(){let t=C(e).$implicit;return w(U(4).highlight.emit(t.id))})(`blur`,function(){return C(e),w(U(4).highlight.emit(null))})(`mouseenter`,function(){let t=C(e).$implicit;return w(U(4).highlight.emit(t.id))})(`mouseleave`,function(){return C(e),w(U(4).highlight.emit(null))}),R(2,`span`,13),G(3),z(),R(4,`span`,14),G(5),z(),A(6,mO,4,1,`span`,15),A(7,hO,4,1,`span`,15),z()()}if(e&2){let e=t.$implicit;D(3),K(e.name),D(2),q(`<`,e.tag,`>`),D(),j(e.expected?6:-1),D(),j(e.actual?7:-1)}}function _O(e,t){if(e&1&&(R(0,`h3`,10),G(1,`Mismatches`),z(),R(2,`ul`,11),M(3,gO,8,4,`li`,null,dO),z()),e&2){let e=U(2);D(3),N(e.mismatches)}}function vO(e,t){if(e&1){let e=B();R(0,`div`,3)(1,`ul`,4),M(2,pO,4,4,`li`,5,uO),z(),R(4,`button`,6),H(`click`,function(){return C(e),w(U(2).toggleOverlay())}),T(),R(5,`svg`,7),Sg(6,`rect`,8),z(),G(7,` Outline on page `),z()(),A(8,_O,5,0)}if(e&2){let e=U(),t=U();D(2),N(t.counts()),D(2),k(`aria-pressed`,t.overlayOn()),D(4),j(e.mismatches.length?8:-1)}}function yO(e,t){e&1&&A(0,fO,5,0,`p`,2)(1,vO,9,2),e&2&&j(+!!t.hydrated)}function bO(e,t){e&1&&(R(0,`p`,2),G(1,` This page was not rendered on the server, so there is nothing to hydrate. With server-side rendering and `),R(2,`code`),G(3,`provideClientHydration()`),z(),G(4,`, each component shows whether it was hydrated, skipped or mismatched. `),z())}var xO=class e{report=$(void 0);overlay=gv();showNode=gv();highlight=gv();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),G(2,`Hydration`),z(),A(3,yO,2,1)(4,bO,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 OO(e,t){if(e&1&&(z(0,`p`,0),K(1),z(2,`code`),K(3),B(),K(4,` to keep more. `),z(5,`a`,1),K(6,`About limits`),B()()),e&2){let e=W();O(),H_(` Showing the latest `,e.max(),` `,e.what(),`. `,e.dropped(),` older `,e.dropped()===1?`entry was`:`entries were`,` dropped. Raise `),O(2),J(`limits.`,e.limit()),O(2),Mg(`href`,e.docsUrl,Nu)}}var kO=`https://pangular-inspector.dev/getting-started/configuration/#limits`,AO=class e{dropped=$(0);max=$.required();what=$.required();limit=$.required();docsUrl=kO;static ɵfac=function(t){return new(t||e)};static ɵcmp=k({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&&j(0,OO,7,6,`p`,0),e&2&&M(t.dropped()>0?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})};function SO(e,t){if(e&1&&(R(0,`p`,0),G(1),R(2,`code`),G(3),z(),G(4,` to keep more. `),R(5,`a`,1),G(6,`About limits`),z()()),e&2){let e=U();D(),L_(` Showing the latest `,e.max(),` `,e.what(),`. `,e.dropped(),` older `,e.dropped()===1?`entry was`:`entries were`,` dropped. Raise `),D(2),q(`limits.`,e.limit()),D(2),Og(`href`,e.docsUrl,Au)}}var CO=`https://pangular-inspector.dev/getting-started/configuration/#limits`,wO=class e{dropped=$(0);max=$.required();what=$.required();limit=$.required();docsUrl=CO;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,SO,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; -}`]})},jO=864e13,MO=200,NO=300,PO=100,FO=10,IO=100,LO=2e3,RO=2e3,zO=4e3,BO=1e3,VO=100,HO=3,UO=50,WO={component:`c`,hook:`h`,afterRender:`r`,output:`o`},GO=Object.values(WO),KO=e=>!!e&&typeof e==`object`&&!Array.isArray(e),qO=e=>typeof e==`number`&&Number.isFinite(e)&&e>=0?e:0,JO=(e,t)=>typeof e==`string`?e.slice(0,t):``,YO=e=>qO(e)>0?qO(e):void 0,XO=(e,t)=>Array.isArray(e)?e.slice(0,t):[];function ZO(e){if(!KO(e))return null;let t=JO(e.name,MO);return t?{name:t,checks:qO(e.checks),ms:qO(e.ms)}:null}function QO(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>BO||typeof o!=`string`||!GO.includes(o)?null:[n,r,qO(i),a,o]}function $O(e,t){if(!KO(e)||typeof e.id!=`number`)return null;let n=XO(e.components,FO).map(ZO).filter(e=>!!e),r=JO(e.trigger,NO),i=XO(e.spans,40).map(e=>QO(e,t)).filter(e=>!!e),a=Array.isArray(e.spans)?e.spans.length-40:0,o=Math.floor(qO(e.droppedSpans))+Math.max(0,a),s={t:typeof e.t==`number`?qO(e.t):void 0,hookMs:YO(e.hookMs),afterRenderMs:YO(e.afterRenderMs),outputMs:YO(e.outputMs)},c=rk(e.cause),l=YO(e.refreshed),u=YO(e.unchanged);return{id:qO(e.id),at:qO(e.at),ms:qO(e.ms),passes:qO(e.passes),...r?{trigger:r}:{},checks:qO(e.checks),components:n,...Object.fromEntries(Object.entries(s).filter(([,e])=>e!==void 0)),...i.length?{spans:i}:{},...o?{droppedSpans:o}:{},...c?{cause:c}:{},...l?{refreshed:l}:{},...u?{unchanged:u}:{}}}var ek=[`event`,`http`,`timer`,`signal`,`effect`,`markForCheck`,`input`,`view`,`tick`,`zone`,`unknown`],tk={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`},nk=e=>typeof e==`string`&&ek.includes(e);function rk(e){if(!KO(e)||!nk(e.kind))return;let t=[`component`,`listener`,`event`,`target`,`signal`,`task`],n={kind:e.kind};nk(e.via)&&(n.via=e.via);for(let r of t){let t=JO(e[r],MO);t&&(n[r]=t)}e.zone===!0&&(n.zone=!0);let r=XO(e.stack,HO).map(e=>JO(e,NO)).filter(Boolean);r.length&&(n.stack=r);let i=Math.floor(qO(e.more));return i&&(n.more=i),n}function ik(e){if(!KO(e))return null;let t=JO(e.name,MO);if(!t)return null;let n=e.strategy;return{name:t,refreshed:Math.floor(qO(e.refreshed)),unchanged:Math.floor(qO(e.unchanged)),...n===`OnPush`||n===`Eager`?{strategy:n}:{}}}function ak(e){if(!KO(e))return null;let t=JO(e.name,MO),n=JO(e.input,MO);if(!t||!n)return null;let r=JO(e.parent,MO);return{name:t,input:n,...r?{parent:r}:{},inPlace:Math.floor(qO(e.inPlace)),sameContents:Math.floor(qO(e.sameContents))}}function ok(e){if(!KO(e))return null;let t=JO(e.name,MO);if(!t)return null;let n=XO(e.tasks,3).map(e=>JO(e,MO)).filter(Boolean);return{name:t,ticks:Math.floor(qO(e.ticks)),...n.length?{tasks:n}:{}}}function sk(e){if(!KO(e))return;let t={};if(KO(e.causes))for(let n of ek){let r=Math.floor(qO(e.causes[n]));r&&(t[n]=r)}let n=XO(e.components,IO).map(ik).filter(e=>!!e),r=XO(e.inputs,UO).map(ak).filter(e=>!!e),i=XO(e.zone,UO).map(ok).filter(e=>!!e),a=Math.floor(qO(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 ck(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(`${tk[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 ${tk[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 lk(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 uk(e){let t=ZO(e);return!t||!KO(e)?null:{...t,maxMs:qO(e.maxMs),cycles:qO(e.cycles)}}function dk(e){if(!KO(e))return null;let t=JO(e.name,MO),n=JO(e.hook,PO);if(!t||!n)return null;let{calls:r,ms:i,maxMs:a}=e;return{name:t,hook:n,calls:qO(r),ms:qO(i),maxMs:qO(a)}}function fk(e){if(!KO(e))return null;let t=JO(e.name,MO);if(!t)return null;let n=JO(e.listener,MO);return{name:t,...n?{listener:n}:{},calls:qO(e.calls),ms:qO(e.ms),maxMs:qO(e.maxMs)}}function pk(e){if(KO(e)&&qO(e.runs))return{runs:qO(e.runs),ms:qO(e.ms),maxMs:qO(e.maxMs)}}function mk(e,t){if(!KO(e))return null;let n=XO(e.spanNames,zO).map(e=>JO(e,NO)),r=Array.isArray(e.cycles)?e.cycles.slice(-Math.min(t,RO)).map(e=>$O(e,n.length)).filter(e=>!!e):[],i={},a=0;if(KO(e.hosts)){let t=Object.entries(e.hosts);a=Math.max(0,t.length-LO);for(let[e,n]of t.slice(0,LO))e.length<50&&qO(n)&&(i[e]=qO(n))}let o=Array.isArray(e.components)?e.components:[],s=Math.floor(qO(e.droppedClasses))+Math.max(0,o.length-IO),c=Math.floor(qO(e.droppedHosts))+a,l=XO(e.hooks,VO).map(dk).filter(e=>!!e),u=XO(e.outputs,VO).map(fk).filter(e=>!!e),d=Math.max(0,XO(e.hooks,1/0).length-VO)+Math.max(0,XO(e.outputs,1/0).length-VO),f=Math.floor(qO(e.droppedTimings))+d,p=pk(e.afterRender),m=r.some(e=>e.spans?.length),h=sk(e.diagnosis);return{recording:e.recording===!0,startedAt:typeof e.startedAt==`number`&&e.startedAt<=jO?qO(e.startedAt):null,dropped:qO(e.dropped),cycles:r,components:o.slice(0,IO).map(uk).filter(e=>!!e),...s?{droppedClasses:s}:{},hosts:i,...c?{droppedHosts:c}:{},...l.length?{hooks:l}:{},...u.length?{outputs:u}:{},...f?{droppedTimings:f}:{},...p?{afterRender:p}:{},...m?{spanNames:n}:{},...h?{diagnosis:h}:{}}}var hk=`pangular-inspector/change-detection`;function gk(e,t,n=Date.now()){return{format:hk,version:1,exportedAt:n,pageId:t,recording:{...mk(e,RO)??e,recording:!1,hosts:{}}}}function _k(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(!KO(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=KO(n.recording)?n.recording:n;if(!Array.isArray(r.cycles))return{ok:!1,error:`The file has no change detection cycles.`};let i=mk(r,t);if(!i)return{ok:!1,error:`The file is not a recording.`};let a=JO(n.pageId??r.pageId,49)||`imported`,o=YO(n.exportedAt);return{ok:!0,pageId:a,...o?{exportedAt:o}:{},recording:{...i,recording:!1}}}var vk=1,yk=1,bk=2,xk={c:`component`,h:`lifecycle-hook`,r:`after-render`,o:`output`},Sk=e=>Math.round(e*1e6)/1e3;function Ck(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:vk,tid:yk,ts:Sk(e),dur:Sk(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:ck(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===WO.output){let n=e+i;a.push({name:l,cat:xk[d],ph:`X`,pid:vk,tid:bk,ts:Sk(n),dur:Sk(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=Sk((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:vk,tid:e,args:{name:n}});return{traceEvents:[l(0,`process_name`,`Angular change detection (page ${t})`),l(yk,`thread_name`,`Change detection`),l(bk,`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<=jO?{startedAt:new Date(e.startedAt).toISOString()}:{}}}}var wk=16.6;function Tk(e){return e.ms>wk}function Ek(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}function Dk(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 Ok(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 kk(e){let t=e.reduce((e,t)=>Math.max(e,t.ms),0);return Math.max(t,wk*1.25)}function Ak(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 jk={c:`component`,h:`hook`,r:`afterRender`,o:`output`};function Mk(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 Nk(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],h=f>0&&m!==void 0&&ot.kind,Fk=(e,t)=>t.name,Ik=(e,t)=>t.name+`.`+t.input;function Lk(e,t){e&1&&(z(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. `),B())}function Rk(e,t){if(e&1&&(z(0,`tr`)(1,`td`),K(2),B(),z(3,`td`,6),K(4),B()()),e&2){let e=t.$implicit;O(2),q(e.label),O(2),q(e.count)}}function zk(e,t){if(e&1&&(z(0,`table`)(1,`thead`)(2,`tr`)(3,`th`,4),K(4,`Trigger`),B(),z(5,`th`,5),K(6,`Cycles`),B()()(),z(7,`tbody`),N(8,Rk,5,2,`tr`,null,Pk),B()()),e&2){let e=W(2);O(8),P(e.causes())}}function Bk(e,t){e&1&&(z(0,`p`,3),K(1,`No cycle has a cause yet.`),B())}function Vk(e,t){if(e&1&&(z(0,`tr`)(1,`td`,7),K(2),B(),z(3,`td`,6),K(4),B(),z(5,`td`,7),K(6),B()()),e&2){let e=t.$implicit;O(2),q(e.name),O(2),q(e.ticks),O(2),q(e.tasks?.join(`, `))}}function Hk(e,t){if(e&1&&(z(0,`table`)(1,`thead`)(2,`tr`)(3,`th`,4),K(4,`Component`),B(),z(5,`th`,5),K(6,`Zone-only ticks`),B(),z(7,`th`,4),K(8,`After`),B()()(),z(9,`tbody`),N(10,Vk,7,3,`tr`,null,Fk),B()()),e&2){let e=W(3);O(10),P(e.zone())}}function Uk(e,t){if(e&1&&(z(0,`p`,3),K(1),B()),e&2){let e=W(3);O(),q(e.zoneNote())}}function Wk(e,t){if(e&1&&(z(0,`div`)(1,`h4`),K(2,`Depends on zone.js`),B(),j(3,Hk,12,0,`table`)(4,Uk,2,1,`p`,3),B()),e&2){let e=W(),t=W();O(3),M(t.zone().length?3:e.triggers?4:-1)}}function Gk(e,t){e&1&&(z(0,`p`,3),K(1,`The page can't watch DOM updates, so wasted checks are not counted.`),B())}function Kk(e,t){if(e&1&&(z(0,`tr`)(1,`td`,7),K(2),B(),z(3,`td`,6),K(4),B(),z(5,`td`,6),K(6),B(),z(7,`td`),K(8),B()()),e&2){let e=t.$implicit,n=W(3);O(2),q(e.name),O(2),q(e.refreshed),O(2),Y(``,e.unchanged,` (`,n.share(e.unchanged,e.refreshed),`)`),O(2),q(e.strategy??`Unknown`)}}function qk(e,t){if(e&1&&(z(0,`table`)(1,`thead`)(2,`tr`)(3,`th`,4),K(4,`Component`),B(),z(5,`th`,5),K(6,`Refreshed`),B(),z(7,`th`,5),K(8,`Changed nothing`),B(),z(9,`th`,4),K(10,`Strategy`),B()()(),z(11,`tbody`),N(12,Kk,9,5,`tr`,null,Fk),B()()),e&2){let e=W(2);O(12),P(e.wasted())}}function Jk(e,t){e&1&&(z(0,`p`,3),K(1,`Every refreshed check changed something.`),B())}function Yk(e,t){if(e&1&&(z(0,`tr`)(1,`td`,7),K(2),B(),z(3,`td`,7),K(4),B(),z(5,`td`,6),K(6),B(),z(7,`td`,6),K(8),B()()),e&2){let e=t.$implicit;O(2),Y(``,e.name,`.`,e.input),O(2),q(e.parent??`Unknown`),O(2),q(e.inPlace),O(2),q(e.sameContents)}}function Xk(e,t){if(e&1&&(z(0,`h4`),K(1,`Inputs that break OnPush`),B(),z(2,`table`)(3,`thead`)(4,`tr`)(5,`th`,4),K(6,`Input`),B(),z(7,`th`,4),K(8,`Set by`),B(),z(9,`th`,5),K(10,`Changed in place`),B(),z(11,`th`,5),K(12,`Same contents, new reference`),B()()(),z(13,`tbody`),N(14,Yk,9,5,`tr`,null,Ik),B()()),e&2){let e=W(2);O(14),P(e.inputs())}}function Zk(e,t){if(e&1&&(z(0,`li`),K(1),B()),e&2){let e=t.$implicit;O(),q(e.text)}}function Qk(e,t){if(e&1&&(z(0,`h4`),K(1,`Hints`),B(),z(2,`ul`,8),N(3,Zk,2,1,`li`,null,mg),B()),e&2){let e=W(2);O(3),P(e.hints())}}function $k(e,t){if(e&1&&(z(0,`section`,0)(1,`h3`,1),K(2,`Why it ran and what it wasted`),B(),z(3,`div`,2)(4,`div`)(5,`h4`),K(6,`What started the cycles`),B(),j(7,Lk,2,0,`p`,3)(8,zk,10,0,`table`)(9,Bk,2,0,`p`,3),B(),j(10,Wk,5,1,`div`),B(),z(11,`h4`),K(12,`Wasted checks`),B(),j(13,Gk,2,0,`p`,3)(14,qk,14,0,`table`)(15,Jk,2,0,`p`,3),j(16,Xk,16,0),j(17,Qk,5,0),B()),e&2){let e=t,n=W();O(7),M(e.triggers?n.causes().length?8:9:7),O(3),M(n.hasZone()?10:-1),O(3),M(e.waste?n.wasted().length?14:15:13),O(3),M(n.inputs().length?16:-1),O(),M(n.hints().length?17:-1)}}var eA=10,tA=class e{page=$(null);diagnosis=X(()=>this.page()?.diagnosis??null);causes=X(()=>{let e=this.diagnosis()?.causes??{};return ek.filter(t=>e[t]).map(t=>({kind:t,label:tk[t],count:e[t]}))});zone=X(()=>(this.diagnosis()?.zone??[]).slice(0,eA));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,eA));inputs=X(()=>(this.diagnosis()?.inputs??[]).slice(0,eA));hints=X(()=>lk(this.diagnosis()??void 0).slice(0,eA));share(e,t){return t?`${Math.round(e/t*100)}%`:`0%`}static ɵfac=function(t){return new(t||e)};static ɵcmp=k({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&&j(0,$k,18,5,`section`,0),e&2){let e;M((e=t.diagnosis())?0:-1,e)}},styles:[`[_nghost-%COMP%] { +}`]})},TO=864e13,EO=200,DO=300,OO=100,kO=10,AO=100,jO=2e3,MO=2e3,NO=4e3,PO=1e3,FO=100,IO=3,LO=50,RO={component:`c`,hook:`h`,afterRender:`r`,output:`o`},zO=Object.values(RO),BO=e=>!!e&&typeof e==`object`&&!Array.isArray(e),VO=e=>typeof e==`number`&&Number.isFinite(e)&&e>=0?e:0,HO=(e,t)=>typeof e==`string`?e.slice(0,t):``,UO=e=>VO(e)>0?VO(e):void 0,WO=(e,t)=>Array.isArray(e)?e.slice(0,t):[];function GO(e){if(!BO(e))return null;let t=HO(e.name,EO);return t?{name:t,checks:VO(e.checks),ms:VO(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>PO||typeof o!=`string`||!zO.includes(o)?null:[n,r,VO(i),a,o]}function qO(e,t){if(!BO(e)||typeof e.id!=`number`)return null;let n=WO(e.components,kO).map(GO).filter(e=>!!e),r=HO(e.trigger,DO),i=WO(e.spans,40).map(e=>KO(e,t)).filter(e=>!!e),a=Array.isArray(e.spans)?e.spans.length-40:0,o=Math.floor(VO(e.droppedSpans))+Math.max(0,a),s={t:typeof e.t==`number`?VO(e.t):void 0,hookMs:UO(e.hookMs),afterRenderMs:UO(e.afterRenderMs),outputMs:UO(e.outputMs)},c=ZO(e.cause),l=UO(e.refreshed),u=UO(e.unchanged);return{id:VO(e.id),at:VO(e.at),ms:VO(e.ms),passes:VO(e.passes),...r?{trigger:r}:{},checks:VO(e.checks),components:n,...Object.fromEntries(Object.entries(s).filter(([,e])=>e!==void 0)),...i.length?{spans:i}:{},...o?{droppedSpans:o}:{},...c?{cause:c}:{},...l?{refreshed:l}:{},...u?{unchanged:u}:{}}}var JO=[`event`,`http`,`timer`,`signal`,`effect`,`markForCheck`,`input`,`view`,`tick`,`zone`,`unknown`],YO={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`},XO=e=>typeof e==`string`&&JO.includes(e);function ZO(e){if(!BO(e)||!XO(e.kind))return;let t=[`component`,`listener`,`event`,`target`,`signal`,`task`],n={kind:e.kind};XO(e.via)&&(n.via=e.via);for(let r of t){let t=HO(e[r],EO);t&&(n[r]=t)}e.zone===!0&&(n.zone=!0);let r=WO(e.stack,IO).map(e=>HO(e,DO)).filter(Boolean);r.length&&(n.stack=r);let i=Math.floor(VO(e.more));return i&&(n.more=i),n}function QO(e){if(!BO(e))return null;let t=HO(e.name,EO);if(!t)return null;let n=e.strategy;return{name:t,refreshed:Math.floor(VO(e.refreshed)),unchanged:Math.floor(VO(e.unchanged)),...n===`OnPush`||n===`Eager`?{strategy:n}:{}}}function $O(e){if(!BO(e))return null;let t=HO(e.name,EO),n=HO(e.input,EO);if(!t||!n)return null;let r=HO(e.parent,EO);return{name:t,input:n,...r?{parent:r}:{},inPlace:Math.floor(VO(e.inPlace)),sameContents:Math.floor(VO(e.sameContents))}}function ek(e){if(!BO(e))return null;let t=HO(e.name,EO);if(!t)return null;let n=WO(e.tasks,3).map(e=>HO(e,EO)).filter(Boolean);return{name:t,ticks:Math.floor(VO(e.ticks)),...n.length?{tasks:n}:{}}}function tk(e){if(!BO(e))return;let t={};if(BO(e.causes))for(let n of JO){let r=Math.floor(VO(e.causes[n]));r&&(t[n]=r)}let n=WO(e.components,AO).map(QO).filter(e=>!!e),r=WO(e.inputs,LO).map($O).filter(e=>!!e),i=WO(e.zone,LO).map(ek).filter(e=>!!e),a=Math.floor(VO(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 nk(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(`${YO[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 ${YO[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 rk(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 ik(e){let t=GO(e);return!t||!BO(e)?null:{...t,maxMs:VO(e.maxMs),cycles:VO(e.cycles)}}function ak(e){if(!BO(e))return null;let t=HO(e.name,EO),n=HO(e.hook,OO);if(!t||!n)return null;let{calls:r,ms:i,maxMs:a}=e;return{name:t,hook:n,calls:VO(r),ms:VO(i),maxMs:VO(a)}}function ok(e){if(!BO(e))return null;let t=HO(e.name,EO);if(!t)return null;let n=HO(e.listener,EO);return{name:t,...n?{listener:n}:{},calls:VO(e.calls),ms:VO(e.ms),maxMs:VO(e.maxMs)}}function sk(e){if(BO(e)&&VO(e.runs))return{runs:VO(e.runs),ms:VO(e.ms),maxMs:VO(e.maxMs)}}function ck(e,t){if(!BO(e))return null;let n=WO(e.spanNames,NO).map(e=>HO(e,DO)),r=Array.isArray(e.cycles)?e.cycles.slice(-Math.min(t,MO)).map(e=>qO(e,n.length)).filter(e=>!!e):[],i={},a=0;if(BO(e.hosts)){let t=Object.entries(e.hosts);a=Math.max(0,t.length-jO);for(let[e,n]of t.slice(0,jO))e.length<50&&VO(n)&&(i[e]=VO(n))}let o=Array.isArray(e.components)?e.components:[],s=Math.floor(VO(e.droppedClasses))+Math.max(0,o.length-AO),c=Math.floor(VO(e.droppedHosts))+a,l=WO(e.hooks,FO).map(ak).filter(e=>!!e),u=WO(e.outputs,FO).map(ok).filter(e=>!!e),d=Math.max(0,WO(e.hooks,1/0).length-FO)+Math.max(0,WO(e.outputs,1/0).length-FO),f=Math.floor(VO(e.droppedTimings))+d,p=sk(e.afterRender),m=r.some(e=>e.spans?.length),h=tk(e.diagnosis);return{recording:e.recording===!0,startedAt:typeof e.startedAt==`number`&&e.startedAt<=TO?VO(e.startedAt):null,dropped:VO(e.dropped),cycles:r,components:o.slice(0,AO).map(ik).filter(e=>!!e),...s?{droppedClasses:s}:{},hosts:i,...c?{droppedHosts:c}:{},...l.length?{hooks:l}:{},...u.length?{outputs:u}:{},...f?{droppedTimings:f}:{},...p?{afterRender:p}:{},...m?{spanNames:n}:{},...h?{diagnosis:h}:{}}}var lk=`pangular-inspector/change-detection`;function uk(e,t,n=Date.now()){return{format:lk,version:1,exportedAt:n,pageId:t,recording:{...ck(e,MO)??e,recording:!1,hosts:{}}}}function dk(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(!BO(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=BO(n.recording)?n.recording:n;if(!Array.isArray(r.cycles))return{ok:!1,error:`The file has no change detection cycles.`};let i=ck(r,t);if(!i)return{ok:!1,error:`The file is not a recording.`};let a=HO(n.pageId??r.pageId,49)||`imported`,o=UO(n.exportedAt);return{ok:!0,pageId:a,...o?{exportedAt:o}:{},recording:{...i,recording:!1}}}var fk=1,pk=1,mk=2,hk={c:`component`,h:`lifecycle-hook`,r:`after-render`,o:`output`},gk=e=>Math.round(e*1e6)/1e3;function _k(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:fk,tid:pk,ts:gk(e),dur:gk(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:nk(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===RO.output){let n=e+i;a.push({name:l,cat:hk[d],ph:`X`,pid:fk,tid:mk,ts:gk(n),dur:gk(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=gk((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:fk,tid:e,args:{name:n}});return{traceEvents:[l(0,`process_name`,`Angular change detection (page ${t})`),l(pk,`thread_name`,`Change detection`),l(mk,`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<=TO?{startedAt:new Date(e.startedAt).toISOString()}:{}}}}var vk=16.6;function yk(e){return e.ms>vk}function bk(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}function xk(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 Sk(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 Ck(e){let t=e.reduce((e,t)=>Math.max(e,t.ms),0);return Math.max(t,vk*1.25)}function wk(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 Tk={c:`component`,h:`hook`,r:`afterRender`,o:`output`};function Ek(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 Dk(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],h=f>0&&m!==void 0&&ot.kind,kk=(e,t)=>t.name,Ak=(e,t)=>t.name+`.`+t.input;function jk(e,t){e&1&&(R(0,`p`,3),G(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`),G(2),z(),R(3,`td`,6),G(4),z()()),e&2){let e=t.$implicit;D(2),K(e.label),D(2),K(e.count)}}function Nk(e,t){if(e&1&&(R(0,`table`)(1,`thead`)(2,`tr`)(3,`th`,4),G(4,`Trigger`),z(),R(5,`th`,5),G(6,`Cycles`),z()()(),R(7,`tbody`),M(8,Mk,5,2,`tr`,null,Ok),z()()),e&2){let e=U(2);D(8),N(e.causes())}}function Pk(e,t){e&1&&(R(0,`p`,3),G(1,`No cycle has a cause yet.`),z())}function Fk(e,t){if(e&1&&(R(0,`tr`)(1,`td`,7),G(2),z(),R(3,`td`,6),G(4),z(),R(5,`td`,7),G(6),z()()),e&2){let e=t.$implicit;D(2),K(e.name),D(2),K(e.ticks),D(2),K(e.tasks?.join(`, `))}}function Ik(e,t){if(e&1&&(R(0,`table`)(1,`thead`)(2,`tr`)(3,`th`,4),G(4,`Component`),z(),R(5,`th`,5),G(6,`Zone-only ticks`),z(),R(7,`th`,4),G(8,`After`),z()()(),R(9,`tbody`),M(10,Fk,7,3,`tr`,null,kk),z()()),e&2){let e=U(3);D(10),N(e.zone())}}function Lk(e,t){if(e&1&&(R(0,`p`,3),G(1),z()),e&2){let e=U(3);D(),K(e.zoneNote())}}function Rk(e,t){if(e&1&&(R(0,`div`)(1,`h4`),G(2,`Depends on zone.js`),z(),A(3,Ik,12,0,`table`)(4,Lk,2,1,`p`,3),z()),e&2){let e=U(),t=U();D(3),j(t.zone().length?3:e.triggers?4:-1)}}function zk(e,t){e&1&&(R(0,`p`,3),G(1,`The page can't watch DOM updates, so wasted checks are not counted.`),z())}function Bk(e,t){if(e&1&&(R(0,`tr`)(1,`td`,7),G(2),z(),R(3,`td`,6),G(4),z(),R(5,`td`,6),G(6),z(),R(7,`td`),G(8),z()()),e&2){let e=t.$implicit,n=U(3);D(2),K(e.name),D(2),K(e.refreshed),D(2),J(``,e.unchanged,` (`,n.share(e.unchanged,e.refreshed),`)`),D(2),K(e.strategy??`Unknown`)}}function Vk(e,t){if(e&1&&(R(0,`table`)(1,`thead`)(2,`tr`)(3,`th`,4),G(4,`Component`),z(),R(5,`th`,5),G(6,`Refreshed`),z(),R(7,`th`,5),G(8,`Changed nothing`),z(),R(9,`th`,4),G(10,`Strategy`),z()()(),R(11,`tbody`),M(12,Bk,9,5,`tr`,null,kk),z()()),e&2){let e=U(2);D(12),N(e.wasted())}}function Hk(e,t){e&1&&(R(0,`p`,3),G(1,`Every refreshed check changed something.`),z())}function Uk(e,t){if(e&1&&(R(0,`tr`)(1,`td`,7),G(2),z(),R(3,`td`,7),G(4),z(),R(5,`td`,6),G(6),z(),R(7,`td`,6),G(8),z()()),e&2){let e=t.$implicit;D(2),J(``,e.name,`.`,e.input),D(2),K(e.parent??`Unknown`),D(2),K(e.inPlace),D(2),K(e.sameContents)}}function Wk(e,t){if(e&1&&(R(0,`h4`),G(1,`Inputs that break OnPush`),z(),R(2,`table`)(3,`thead`)(4,`tr`)(5,`th`,4),G(6,`Input`),z(),R(7,`th`,4),G(8,`Set by`),z(),R(9,`th`,5),G(10,`Changed in place`),z(),R(11,`th`,5),G(12,`Same contents, new reference`),z()()(),R(13,`tbody`),M(14,Uk,9,5,`tr`,null,Ak),z()()),e&2){let e=U(2);D(14),N(e.inputs())}}function Gk(e,t){if(e&1&&(R(0,`li`),G(1),z()),e&2){let e=t.$implicit;D(),K(e.text)}}function Kk(e,t){if(e&1&&(R(0,`h4`),G(1,`Hints`),z(),R(2,`ul`,8),M(3,Gk,2,1,`li`,null,ug),z()),e&2){let e=U(2);D(3),N(e.hints())}}function qk(e,t){if(e&1&&(R(0,`section`,0)(1,`h3`,1),G(2,`Why it ran and what it wasted`),z(),R(3,`div`,2)(4,`div`)(5,`h4`),G(6,`What started the cycles`),z(),A(7,jk,2,0,`p`,3)(8,Nk,10,0,`table`)(9,Pk,2,0,`p`,3),z(),A(10,Rk,5,1,`div`),z(),R(11,`h4`),G(12,`Wasted checks`),z(),A(13,zk,2,0,`p`,3)(14,Vk,14,0,`table`)(15,Hk,2,0,`p`,3),A(16,Wk,16,0),A(17,Kk,5,0),z()),e&2){let e=t,n=U();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 Jk=10,Yk=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:YO[t],count:e[t]}))});zone=X(()=>(this.diagnosis()?.zone??[]).slice(0,Jk));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,Jk));inputs=X(()=>(this.diagnosis()?.inputs??[]).slice(0,Jk));hints=X(()=>rk(this.diagnosis()??void 0).slice(0,Jk));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,qk,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; -}`]})},nA=(e,t)=>t.cycle.id,rA=(e,t)=>t.id;function iA(e,t){if(e&1){let e=V();z(0,`button`,27),U(`click`,function(){return w(e),T(W().showAll())}),K(1,`Show all cycles`),B()}}function aA(e,t){if(e&1&&Eg(0,`div`,28),e&2){let e=t;__(`left`,e.left,`%`)(`width`,e.width,`%`)}}function oA(e,t){if(e&1&&(z(0,`div`,29),Eg(1,`span`,30),B()),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),Mg(`id`,n.optionId(e.index)),A(`data-index`,e.index)(`aria-selected`,n.inRange(e.index))(`aria-label`,e.label),O(),__(`height`,e.height,`%`)}}function sA(e,t){e&1&&(z(0,`span`,33),K(1,`over budget`),B())}function cA(e,t){if(e&1&&(z(0,`p`),K(1,` after `),z(2,`span`,35),K(3),B()()),e&2){let e=W();O(3),q(e.cycle.trigger)}}function lA(e,t){if(e&1&&(z(0,`p`,34)(1,`span`,36),K(2),B(),z(3,`span`),K(4),B()()),e&2){let e=t.$implicit,n=W(2);O(2),q(e.name),O(2),q(n.fmt(e.ms))}}function uA(e,t){if(e&1&&(z(0,`div`,31)(1,`p`,32)(2,`strong`),K(3),B(),z(4,`span`),K(5),B(),j(6,sA,2,0,`span`,33),B(),j(7,cA,4,1,`p`),z(8,`p`),K(9),B(),N(10,lA,5,2,`p`,34,mg),B()),e&2){let e=t,n=W();__(`left`,e.left)(`right`,e.right),O(3),q(n.fmt(e.cycle.ms)),O(2),J(`cycle `,e.cycle.id),O(),M(e.over?6:-1),O(),M(e.cycle.trigger?7:-1),O(2),H_(` `,e.cycle.checks,` `,e.cycle.checks===1?`check`:`checks`,`, `,e.cycle.passes,` `,e.cycle.passes===1?`pass`:`passes`,` `),O(),P(e.top)}}function dA(e,t){if(e&1&&Eg(0,`span`),e&2){let e=t.$implicit;G(`over`,e.over)}}function fA(e,t){if(e&1&&K(0),e&2){let e=t,n=W(2);Y(` `,e.name,` (`,n.fmt(e.ms),`) `)}}function pA(e,t){if(e&1&&(z(0,`tr`)(1,`td`,37),K(2),B(),z(3,`td`,37),K(4),B(),z(5,`td`),K(6),B(),z(7,`td`,37),K(8),B(),z(9,`td`,37),K(10),B(),z(11,`td`,35),K(12),B(),z(13,`td`,35),j(14,fA,1,2),B()()),e&2){let e,n=t.$implicit,r=W();O(2),q(n.id),O(2),q(r.fmt(n.ms)),O(2),q(r.isOver(n)?`Over`:`Within`),O(2),q(n.checks),O(2),q(n.passes),O(2),q(n.trigger??``),O(2),M((e=n.components[0])?14:-1,e)}}var mA=0,hA=80,gA=10,_A=class e{cycles=$([]);range=Dv(null);gapUntil=hA;budgetLabel=`${wk} ms budget`;uid=`cd-chart-${mA++}`;hintId=`${this.uid}-hint`;active=D(null);anchor=null;dragging=!1;hover=D(null);focused=D(!1);max=X(()=>kk(this.cycles()));budgetAt=X(()=>wk/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),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||aDk(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=e.filter(Tk).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`}`}. ${t} over the ${wk} 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),top:t.components.slice(0,3),...this.tipSide(e)}});tipSide(e){let t=this.cycles().length;return e+.5=t.start&&e<=t.end}describe(e){let t=[`Cycle ${e.id}`,Ek(e.ms)];Tk(e)&&t.push(`over budget`),e.trigger&&t.push(`after ${e.trigger}`),t.push(`${e.checks} ${e.checks===1?`check`:`checks`}`);let n=e.components[0];return n&&t.push(`slowest ${n.name} ${Ek(n.ms)}`),t.join(`, `)}select(e,t){let n=this.cycles(),r=n[Math.min(e,t)],i=n[Math.max(e,t)];r&&i&&this.range.set({from:r.id,to:i.id})}showAll(){this.range.set(null),this.anchor=null}setEnd(e,t){if(!this.cycles().length)return;let n=t.target,r=Number.parseInt(n.value,10);if(Number.isNaN(r)){n.value=String(e===`from`?this.startId():this.endId());return}let i=Math.min(Math.max(r,this.firstId()),this.lastId()),a=this.selected(),o=e===`from`?i:a[0]?.id??this.firstId(),s=e===`to`?i:a.at(-1)?.id??this.lastId();this.range.set({from:Math.min(o,s),to:Math.max(o,s)}),n.value=String(e===`from`?Math.min(o,s):Math.max(o,s))}onFocus(){this.focused.set(!0),(this.active()===null||this.active()>=this.cycles().length)&&this.active.set(this.span()?.start??Math.max(this.cycles().length-1,0)),this.anchor??=this.active()}onKey(e){let t=this.cycles().length;if(!t)return;let n=Math.min(this.active()??t-1,t-1),r=null;switch(e.key){case`ArrowRight`:case`ArrowDown`:r=n+1;break;case`ArrowLeft`:case`ArrowUp`:r=n-1;break;case`PageDown`:r=n+gA;break;case`PageUp`:r=n-gA;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=k({type:e,selectors:[[`app-cd-cycle-chart`]],hostBindings:function(e,t){e&1&&H(`pointerup`,function(){return t.endDrag()},Pu)(`pointercancel`,function(){return t.endDrag()},Pu)},inputs:{cycles:[1,`cycles`],range:[1,`range`]},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&&(z(0,`div`,0)(1,`label`)(2,`span`),K(3,`Start`),B(),z(4,`input`,1),U(`change`,function(e){return t.setEnd(`from`,e)}),B()(),z(5,`label`)(6,`span`),K(7,`End`),B(),z(8,`input`,1),U(`change`,function(e){return t.setEnd(`to`,e)}),B()(),j(9,iA,2,0,`button`,2),z(10,`p`,3),K(11),B()(),z(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. `),B(),z(14,`div`,5)(15,`div`,6)(16,`span`,7),K(17),B(),z(18,`span`,8),K(19,`0 ms`),B()(),z(20,`div`,9),j(21,aA,1,4,`div`,10),z(22,`div`,11)(23,`span`),K(24),B()(),z(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)}),N(26,oA,2,12,`div`,13,nA),B(),j(28,uA,12,12,`div`,14),B()(),z(29,`div`,15),N(30,dA,1,2,`span`,16,nA),B(),z(32,`ul`,17)(33,`li`),Eg(34,`span`,18),K(35,`Within budget`),B(),z(36,`li`),Eg(37,`span`,19)(38,`span`,20),K(39,`Over budget `),B(),z(40,`li`),Eg(41,`span`,21),K(42),B()(),z(43,`details`,22)(44,`summary`),K(45,`Show the cycles as a table`),B(),z(46,`div`,23)(47,`table`)(48,`caption`,24),K(49),B(),z(50,`thead`)(51,`tr`)(52,`th`,25),K(53,`Cycle`),B(),z(54,`th`,25),K(55,`Duration`),B(),z(56,`th`,26),K(57,`Budget`),B(),z(58,`th`,25),K(59,`Checks`),B(),z(60,`th`,25),K(61,`Passes`),B(),z(62,`th`,26),K(63,`After`),B(),z(64,`th`,26),K(65,`Slowest component`),B()()(),z(66,`tbody`),N(67,pA,15,7,`tr`,null,rA),B()()()()),e&2){let e,n;O(4),Mg(`min`,t.firstId())(`max`,t.lastId())(`value`,t.startId()),O(4),Mg(`min`,t.firstId())(`max`,t.lastId())(`value`,t.endId()),O(),M(t.range()?9:-1),O(2),q(t.summary()),O(),Mg(`id`,t.hintId),O(2),G(`flush`,t.bars().length>t.gapUntil),O(3),q(t.fmt(t.max())),O(4),M((e=t.band())?21:-1,e),O(),__(`bottom`,t.budgetAt(),`%`),O(2),q(t.budgetLabel),O(),A(`aria-label`,`Change detection cycles, `+t.summary())(`aria-describedby`,t.hintId)(`aria-activedescendant`,t.activeOptionId()),O(),P(t.bars()),O(2),M((n=t.tip())?28:-1,n),O(),G(`flush`,t.bars().length>t.gapUntil),O(),P(t.bars()),O(12),q(t.budgetLabel),O(4),A(`aria-label`,t.tableLabel()),O(3),J(` `,t.tableLabel(),` `),O(18),P(t.selected())}},styles:[`[_nghost-%COMP%] { +}`]})},Xk=(e,t)=>t.cycle.id,Zk=(e,t)=>t.id;function Qk(e,t){if(e&1){let e=B();R(0,`button`,27),H(`click`,function(){return C(e),w(U().showAll())}),G(1,`Show all cycles`),z()}}function $k(e,t){if(e&1&&Sg(0,`div`,28),e&2){let e=t;p_(`left`,e.left,`%`)(`width`,e.width,`%`)}}function eA(e,t){if(e&1&&(R(0,`div`,29),Sg(1,`span`,30),z()),e&2){let e=t.$implicit,n=U();W(`over`,e.over)(`out`,!n.inRange(e.index)&&!!n.range())(`active`,n.focused()&&n.active()===e.index),Og(`id`,n.optionId(e.index)),k(`data-index`,e.index)(`aria-selected`,n.inRange(e.index))(`aria-label`,e.label),D(),p_(`height`,e.height,`%`)}}function tA(e,t){e&1&&(R(0,`span`,33),G(1,`over budget`),z())}function nA(e,t){if(e&1&&(R(0,`p`),G(1,` after `),R(2,`span`,35),G(3),z()()),e&2){let e=U();D(3),K(e.cycle.trigger)}}function rA(e,t){if(e&1&&(R(0,`p`,34)(1,`span`,36),G(2),z(),R(3,`span`),G(4),z()()),e&2){let e=t.$implicit,n=U(2);D(2),K(e.name),D(2),K(n.fmt(e.ms))}}function iA(e,t){if(e&1&&(R(0,`div`,31)(1,`p`,32)(2,`strong`),G(3),z(),R(4,`span`),G(5),z(),A(6,tA,2,0,`span`,33),z(),A(7,nA,4,1,`p`),R(8,`p`),G(9),z(),M(10,rA,5,2,`p`,34,ug),z()),e&2){let e=t,n=U();p_(`left`,e.left)(`right`,e.right),D(3),K(n.fmt(e.cycle.ms)),D(2),q(`cycle `,e.cycle.id),D(),j(e.over?6:-1),D(),j(e.cycle.trigger?7:-1),D(2),L_(` `,e.cycle.checks,` `,e.cycle.checks===1?`check`:`checks`,`, `,e.cycle.passes,` `,e.cycle.passes===1?`pass`:`passes`,` `),D(),N(e.top)}}function aA(e,t){if(e&1&&Sg(0,`span`),e&2){let e=t.$implicit;W(`over`,e.over)}}function oA(e,t){if(e&1&&G(0),e&2){let e=t,n=U(2);J(` `,e.name,` (`,n.fmt(e.ms),`) `)}}function sA(e,t){if(e&1&&(R(0,`tr`)(1,`td`,37),G(2),z(),R(3,`td`,37),G(4),z(),R(5,`td`),G(6),z(),R(7,`td`,37),G(8),z(),R(9,`td`,37),G(10),z(),R(11,`td`,35),G(12),z(),R(13,`td`,35),A(14,oA,1,2),z()()),e&2){let e,n=t.$implicit,r=U();D(2),K(n.id),D(2),K(r.fmt(n.ms)),D(2),K(r.isOver(n)?`Over`:`Within`),D(2),K(n.checks),D(2),K(n.passes),D(2),K(n.trigger??``),D(2),j((e=n.components[0])?14:-1,e)}}var cA=0,lA=80,uA=10,dA=class e{cycles=$([]);range=xv(null);gapUntil=lA;budgetLabel=`${vk} ms budget`;uid=`cd-chart-${cA++}`;hintId=`${this.uid}-hint`;active=E(null);anchor=null;dragging=!1;hover=E(null);focused=E(!1);max=X(()=>Ck(this.cycles()));budgetAt=X(()=>vk/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:yk(t),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||axk(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=e.filter(yk).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`}`}. ${t} over the ${vk} 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:yk(t),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}`,bk(e.ms)];yk(e)&&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} ${bk(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+uA;break;case`PageUp`:r=n-uA;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&&V(`pointerup`,function(){return t.endDrag()},ju)(`pointercancel`,function(){return t.endDrag()},ju)},inputs:{cycles:[1,`cycles`],range:[1,`range`]},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`),G(3,`Start`),z(),R(4,`input`,1),H(`change`,function(e){return t.setEnd(`from`,e)}),z()(),R(5,`label`)(6,`span`),G(7,`End`),z(),R(8,`input`,1),H(`change`,function(e){return t.setEnd(`to`,e)}),z()(),A(9,Qk,2,0,`button`,2),R(10,`p`,3),G(11),z()(),R(12,`p`,4),G(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),G(17),z(),R(18,`span`,8),G(19,`0 ms`),z()(),R(20,`div`,9),A(21,$k,1,4,`div`,10),R(22,`div`,11)(23,`span`),G(24),z()(),R(25,`div`,12),H(`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,eA,2,12,`div`,13,Xk),z(),A(28,iA,12,12,`div`,14),z()(),R(29,`div`,15),M(30,aA,1,2,`span`,16,Xk),z(),R(32,`ul`,17)(33,`li`),Sg(34,`span`,18),G(35,`Within budget`),z(),R(36,`li`),Sg(37,`span`,19)(38,`span`,20),G(39,`Over budget `),z(),R(40,`li`),Sg(41,`span`,21),G(42),z()(),R(43,`details`,22)(44,`summary`),G(45,`Show the cycles as a table`),z(),R(46,`div`,23)(47,`table`)(48,`caption`,24),G(49),z(),R(50,`thead`)(51,`tr`)(52,`th`,25),G(53,`Cycle`),z(),R(54,`th`,25),G(55,`Duration`),z(),R(56,`th`,26),G(57,`Budget`),z(),R(58,`th`,25),G(59,`Checks`),z(),R(60,`th`,25),G(61,`Passes`),z(),R(62,`th`,26),G(63,`After`),z(),R(64,`th`,26),G(65,`Slowest component`),z()()(),R(66,`tbody`),M(67,sA,15,7,`tr`,null,Zk),z()()()()),e&2){let e,n;D(4),Og(`min`,t.firstId())(`max`,t.lastId())(`value`,t.startId()),D(4),Og(`min`,t.firstId())(`max`,t.lastId())(`value`,t.endId()),D(),j(t.range()?9:-1),D(2),K(t.summary()),D(),Og(`id`,t.hintId),D(2),W(`flush`,t.bars().length>t.gapUntil),D(3),K(t.fmt(t.max())),D(4),j((e=t.band())?21:-1,e),D(),p_(`bottom`,t.budgetAt(),`%`),D(2),K(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(),W(`flush`,t.bars().length>t.gapUntil),D(),N(t.bars()),D(12),K(t.budgetLabel),D(4),k(`aria-label`,t.tableLabel()),D(3),q(` `,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; } -}`]})},vA=(e,t)=>t.id,yA=(e,t)=>t.index,bA=(e,t)=>t.kind;function xA(e,t){if(e&1&&(z(0,`p`,0),K(1),B()),e&2){let e=W(2);O(),Y(` Pick `,e.max,` cycles or fewer to see their spans. `,e.count(),` are picked. `)}}function SA(e,t){if(e&1&&(z(0,`span`),K(1),B()),e&2){let e=t.$implicit;__(`left`,e.x,`%`)(`width`,e.w,`%`),O(),J(`cycle `,e.id)}}function CA(e,t){if(e&1){let e=V();z(0,`button`,11),U(`focus`,function(){let t=w(e).$implicit;return T(W(3).current.set(t.index))})(`mouseenter`,function(){let t=w(e).$implicit;return T(W(3).hover.set(t.index))})(`mouseleave`,function(){return w(e),T(W(3).hover.set(null))})(`click`,function(){let t=w(e).$implicit;return T(W(3).choose(t))}),z(1,`span`,12),K(2),B()()}if(e&2){let e=t.$implicit,n=W(3);v_(Z_(`block kind-`,e.kind)),__(`left`,e.x,`%`)(`width`,e.w,`%`)(`top`,e.depth*n.row,`px`),G(`narrow`,e.w<4),A(`tabindex`,e.index===n.tabStop()?0:-1)(`data-index`,e.index)(`aria-label`,n.describe(e))(`aria-disabled`,e.component?null:`true`),O(2),q(e.name)}}function wA(e,t){if(e&1&&(z(0,`li`),Eg(1,`span`,13),K(2),B()),e&2){let e=t.$implicit;O(),v_(Z_(`key kind-`,e.kind)),O(),q(e.label)}}function TA(e,t){if(e&1&&(z(0,`p`,0),K(1),B()),e&2){let e=W(3);O(),Y(` Each cycle keeps its longest spans. `,e.dropped(),` shorter `,e.dropped()===1?`span was`:`spans were`,` left out. `)}}function EA(e,t){if(e&1&&(z(0,`tr`)(1,`td`,17),K(2),B(),z(3,`td`,18),K(4),B(),z(5,`td`),K(6),B(),z(7,`td`,17),K(8),B(),z(9,`td`,17),K(10),B(),z(11,`td`,17),K(12),B(),z(13,`td`,17),K(14),B()()),e&2){let e=t.$implicit,n=W(4);O(2),q(e.cycleId),O(),__(`padding-left`,6+e.depth*8,`px`),O(),q(e.name),O(2),q(n.kindLabel(e)),O(2),q(e.depth),O(2),q(n.fmt(e.start)),O(2),q(n.fmt(e.ms)),O(2),q(n.fmt(e.selfMs))}}function DA(e,t){if(e&1&&(z(0,`div`,10)(1,`table`)(2,`caption`,14),K(3),B(),z(4,`thead`)(5,`tr`)(6,`th`,15),K(7,`Cycle`),B(),z(8,`th`,16),K(9,`Span`),B(),z(10,`th`,16),K(11,`Kind`),B(),z(12,`th`,15),K(13,`Depth`),B(),z(14,`th`,15),K(15,`Start`),B(),z(16,`th`,15),K(17,`Total`),B(),z(18,`th`,15),K(19,`Self`),B()()(),z(20,`tbody`),N(21,EA,15,9,`tr`,null,yA),B()()()),e&2){let e=W(),t=W(2);A(`aria-label`,t.tableLabel()),O(3),J(` `,t.tableLabel(),` `),O(18),P(e.blocks)}}function OA(e,t){if(e&1){let e=V();z(0,`div`,1),U(`keydown`,function(t){return w(e),T(W(2).onKey(t))}),z(1,`div`,2),N(2,SA,2,5,`span`,3,vA),B(),z(4,`div`,4),N(5,CA,3,16,`button`,5,yA),B()(),z(7,`p`,6),K(8),B(),z(9,`ul`,7),N(10,wA,3,4,`li`,null,bA),B(),z(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. `),B(),j(14,TA,2,2,`p`,0),z(15,`details`,9),U(`toggle`,function(t){return w(e),T(W(2).onToggle(t))}),z(16,`summary`),K(17,`Show the spans as a table`),B(),j(18,DA,23,2,`div`,10),B()}if(e&2){let e=t,n=W(2);A(`aria-label`,n.label()),O(2),P(e.cycles),O(2),__(`height`,e.depth*n.row,`px`),O(),P(e.blocks),O(3),q(n.readout()),O(2),P(n.kinds),O(4),M(n.dropped()?14:-1),O(4),M(n.tableOpen()?18:-1)}}function kA(e,t){if(e&1&&(z(0,`h3`),K(1,`Spans in the picked cycles`),B(),j(2,xA,2,2,`p`,0)(3,OA,19,6)),e&2){let e,t=W();O(2),M(t.tooMany()?2:(e=t.graph())?3:-1,e)}}var AA=22;function jA(e,t){for(let n=e.length-1;n>=0;n--)if(t(e[n]))return e[n]}var MA=class e{cycles=$([]);names=$([]);scope=$(`the recording`);pick=Sv();row=AA;max=30;kinds=[`c`,`h`,`r`,`o`].map(e=>({kind:e,label:jk[e]}));current=D(0);tableOpen=D(!1);hover=D(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:Nk(this.cycles(),this.names()));tabStop=X(()=>Math.min(this.current(),Math.max((this.graph()?.blocks.length??1)-1,0)));dropped=X(()=>this.graph()?.cycles.reduce((e,t)=>e+t.droppedSpans,0)??0);label=X(()=>`Spans in ${this.scope()} over time, nested by depth. Pick a component to show it in the tree.`);readout=X(()=>{let e=(this.graph()?.blocks??[])[this.hover()??this.tabStop()];return e?this.describe(e):``});tableLabel=X(()=>`Timed spans in ${this.scope()}`);fmt(e){return Ek(e)}kindLabel(e){return jk[e.kind]}onToggle(e){this.tableOpen.set(e.target.open)}describe(e){let t=[e.name,jk[e.kind],`${Ek(e.ms)} total`];return e.selfMs!==e.ms&&t.push(`${Ek(e.selfMs)} self`),t.push(e.start<0?`cycle ${e.cycleId}, ${Ek(-e.start)} before it started`:`cycle ${e.cycleId} at ${Ek(e.start)}`),t.join(`, `)}choose(e){this.current.set(e.index),e.component&&this.pick.emit(e.component)}onKey(e){let t=this.graph()?.blocks??[];if(!t.length)return;let n=t[this.tabStop()],r;switch(e.key){case`ArrowRight`:r=t.find(e=>e.index>n.index&&e.depth===n.depth);break;case`ArrowLeft`:r=jA(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=k({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&&j(0,kA,4,1),e&2&&M(t.hasSpans()?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})},fA=(e,t)=>t.id,pA=(e,t)=>t.index,mA=(e,t)=>t.kind;function hA(e,t){if(e&1&&(R(0,`p`,0),G(1),z()),e&2){let e=U(2);D(),J(` Pick `,e.max,` cycles or fewer to see their spans. `,e.count(),` are picked. `)}}function gA(e,t){if(e&1&&(R(0,`span`),G(1),z()),e&2){let e=t.$implicit;p_(`left`,e.x,`%`)(`width`,e.w,`%`),D(),q(`cycle `,e.id)}}function _A(e,t){if(e&1){let e=B();R(0,`button`,11),H(`focus`,function(){let t=C(e).$implicit;return w(U(3).current.set(t.index))})(`mouseenter`,function(){let t=C(e).$implicit;return w(U(3).hover.set(t.index))})(`mouseleave`,function(){return C(e),w(U(3).hover.set(null))})(`click`,function(){let t=C(e).$implicit;return w(U(3).choose(t))}),R(1,`span`,12),G(2),z()()}if(e&2){let e=t.$implicit,n=U(3);m_(G_(`block kind-`,e.kind)),p_(`left`,e.x,`%`)(`width`,e.w,`%`)(`top`,e.depth*n.row,`px`),W(`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),K(e.name)}}function vA(e,t){if(e&1&&(R(0,`li`),Sg(1,`span`,13),G(2),z()),e&2){let e=t.$implicit;D(),m_(G_(`key kind-`,e.kind)),D(),K(e.label)}}function yA(e,t){if(e&1&&(R(0,`p`,0),G(1),z()),e&2){let e=U(3);D(),J(` Each cycle keeps its longest spans. `,e.dropped(),` shorter `,e.dropped()===1?`span was`:`spans were`,` left out. `)}}function bA(e,t){if(e&1&&(R(0,`tr`)(1,`td`,17),G(2),z(),R(3,`td`,18),G(4),z(),R(5,`td`),G(6),z(),R(7,`td`,17),G(8),z(),R(9,`td`,17),G(10),z(),R(11,`td`,17),G(12),z(),R(13,`td`,17),G(14),z()()),e&2){let e=t.$implicit,n=U(4);D(2),K(e.cycleId),D(),p_(`padding-left`,6+e.depth*8,`px`),D(),K(e.name),D(2),K(n.kindLabel(e)),D(2),K(e.depth),D(2),K(n.fmt(e.start)),D(2),K(n.fmt(e.ms)),D(2),K(n.fmt(e.selfMs))}}function xA(e,t){if(e&1&&(R(0,`div`,10)(1,`table`)(2,`caption`,14),G(3),z(),R(4,`thead`)(5,`tr`)(6,`th`,15),G(7,`Cycle`),z(),R(8,`th`,16),G(9,`Span`),z(),R(10,`th`,16),G(11,`Kind`),z(),R(12,`th`,15),G(13,`Depth`),z(),R(14,`th`,15),G(15,`Start`),z(),R(16,`th`,15),G(17,`Total`),z(),R(18,`th`,15),G(19,`Self`),z()()(),R(20,`tbody`),M(21,bA,15,9,`tr`,null,pA),z()()()),e&2){let e=U(),t=U(2);k(`aria-label`,t.tableLabel()),D(3),q(` `,t.tableLabel(),` `),D(18),N(e.blocks)}}function SA(e,t){if(e&1){let e=B();R(0,`div`,1),H(`keydown`,function(t){return C(e),w(U(2).onKey(t))}),R(1,`div`,2),M(2,gA,2,5,`span`,3,fA),z(),R(4,`div`,4),M(5,_A,3,16,`button`,5,pA),z()(),R(7,`p`,6),G(8),z(),R(9,`ul`,7),M(10,vA,3,4,`li`,null,mA),z(),R(12,`p`,8),G(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,yA,2,2,`p`,0),R(15,`details`,9),H(`toggle`,function(t){return C(e),w(U(2).onToggle(t))}),R(16,`summary`),G(17,`Show the spans as a table`),z(),A(18,xA,23,2,`div`,10),z()}if(e&2){let e=t,n=U(2);k(`aria-label`,n.label()),D(2),N(e.cycles),D(2),p_(`height`,e.depth*n.row,`px`),D(),N(e.blocks),D(3),K(n.readout()),D(2),N(n.kinds),D(4),j(n.dropped()?14:-1),D(4),j(n.tableOpen()?18:-1)}}function CA(e,t){if(e&1&&(R(0,`h3`),G(1,`Spans in the picked cycles`),z(),A(2,hA,2,2,`p`,0)(3,SA,19,6)),e&2){let e,t=U();D(2),j(t.tooMany()?2:(e=t.graph())?3:-1,e)}}var wA=22;function TA(e,t){for(let n=e.length-1;n>=0;n--)if(t(e[n]))return e[n]}var EA=class e{cycles=$([]);names=$([]);scope=$(`the recording`);pick=gv();row=wA;max=30;kinds=[`c`,`h`,`r`,`o`].map(e=>({kind:e,label:Tk[e]}));current=E(0);tableOpen=E(!1);hover=E(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:Dk(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 bk(e)}kindLabel(e){return Tk[e.kind]}onToggle(e){this.tableOpen.set(e.target.open)}describe(e){let t=[e.name,Tk[e.kind],`${bk(e.ms)} total`];return e.selfMs!==e.ms&&t.push(`${bk(e.selfMs)} self`),t.push(e.start<0?`cycle ${e.cycleId}, ${bk(-e.start)} before it started`:`cycle ${e.cycleId} at ${bk(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=TA(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,CA,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 NA(e,t){if(e&1&&(z(0,`tr`)(1,`td`,5),K(2),B(),z(3,`td`,6),K(4),B(),z(5,`td`,6),K(6),B(),z(7,`td`,6),K(8),B()()),e&2){let e=t.$implicit,n=W(3);O(2),Y(``,e.name,`.`,e.hook),O(2),q(e.calls),O(2),q(n.ms(e.ms)),O(2),q(n.ms(e.maxMs))}}function PA(e,t){if(e&1&&(z(0,`div`)(1,`h3`),K(2,`Lifecycle hooks`),B(),z(3,`table`)(4,`thead`)(5,`tr`)(6,`th`,3),K(7,`Hook`),B(),z(8,`th`,4),K(9,`Calls`),B(),z(10,`th`,4),K(11,`Time`),B(),z(12,`th`,4),K(13,`Slowest`),B()()(),z(14,`tbody`),N(15,NA,9,5,`tr`,null,mg),B()()()),e&2){let e=W(2);O(15),P(e.hooks())}}function FA(e,t){if(e&1&&K(0),e&2){let e=W().$implicit;J(` (`,e.listener,`) `)}}function IA(e,t){if(e&1&&(z(0,`tr`)(1,`td`,5),K(2),j(3,FA,1,1),B(),z(4,`td`,6),K(5),B(),z(6,`td`,6),K(7),B(),z(8,`td`,6),K(9),B()()),e&2){let e=t.$implicit,n=W(3);O(2),J(` `,e.name,` `),O(),M(e.listener?3:-1),O(2),q(e.calls),O(2),q(n.ms(e.ms)),O(2),q(n.ms(e.maxMs))}}function LA(e,t){if(e&1&&(z(0,`div`)(1,`h3`),K(2,`Output listeners`),B(),z(3,`table`)(4,`thead`)(5,`tr`)(6,`th`,3),K(7,`Listener`),B(),z(8,`th`,4),K(9,`Calls`),B(),z(10,`th`,4),K(11,`Time`),B(),z(12,`th`,4),K(13,`Slowest`),B()()(),z(14,`tbody`),N(15,IA,10,5,`tr`,null,mg),B()()()),e&2){let e=W(2);O(15),P(e.outputs())}}function RA(e,t){if(e&1&&(z(0,`p`,1),K(1),B()),e&2){let e=t,n=W(2);O(),H_(` afterRender callbacks ran `,e.runs,` `,e.runs===1?`time`:`times`,`, `,n.ms(e.ms),` in total, slowest `,n.ms(e.maxMs),`. `)}}function zA(e,t){if(e&1&&(z(0,`p`,2),K(1),B()),e&2){let e=W(2);O(),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 BA(e,t){if(e&1&&(z(0,`div`,0),j(1,PA,17,0,`div`),j(2,LA,17,0,`div`),B(),j(3,RA,2,4,`p`,1),j(4,zA,2,2,`p`,2)),e&2){let e,t=W();O(),M(t.hooks().length?1:-1),O(),M(t.outputs().length?2:-1),O(),M((e=t.afterRender())?3:-1,e),O(),M(t.dropped()?4:-1)}}var VA=10;function HA(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}var UA=class e{page=$(null);hooks=X(()=>(this.page()?.hooks??[]).slice(0,VA));outputs=X(()=>(this.page()?.outputs??[]).slice(0,VA));afterRender=X(()=>{let e=this.page()?.afterRender;return e?.runs?e:null});dropped=X(()=>this.page()?.droppedTimings??0);ms(e){return HA(e)}static ɵfac=function(t){return new(t||e)};static ɵcmp=k({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&&j(0,BA,5,4),e&2&&M(t.hooks().length||t.outputs().length||t.afterRender()?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})};function DA(e,t){if(e&1&&(R(0,`tr`)(1,`td`,5),G(2),z(),R(3,`td`,6),G(4),z(),R(5,`td`,6),G(6),z(),R(7,`td`,6),G(8),z()()),e&2){let e=t.$implicit,n=U(3);D(2),J(``,e.name,`.`,e.hook),D(2),K(e.calls),D(2),K(n.ms(e.ms)),D(2),K(n.ms(e.maxMs))}}function OA(e,t){if(e&1&&(R(0,`div`)(1,`h3`),G(2,`Lifecycle hooks`),z(),R(3,`table`)(4,`thead`)(5,`tr`)(6,`th`,3),G(7,`Hook`),z(),R(8,`th`,4),G(9,`Calls`),z(),R(10,`th`,4),G(11,`Time`),z(),R(12,`th`,4),G(13,`Slowest`),z()()(),R(14,`tbody`),M(15,DA,9,5,`tr`,null,ug),z()()()),e&2){let e=U(2);D(15),N(e.hooks())}}function kA(e,t){if(e&1&&G(0),e&2){let e=U().$implicit;q(` (`,e.listener,`) `)}}function AA(e,t){if(e&1&&(R(0,`tr`)(1,`td`,5),G(2),A(3,kA,1,1),z(),R(4,`td`,6),G(5),z(),R(6,`td`,6),G(7),z(),R(8,`td`,6),G(9),z()()),e&2){let e=t.$implicit,n=U(3);D(2),q(` `,e.name,` `),D(),j(e.listener?3:-1),D(2),K(e.calls),D(2),K(n.ms(e.ms)),D(2),K(n.ms(e.maxMs))}}function jA(e,t){if(e&1&&(R(0,`div`)(1,`h3`),G(2,`Output listeners`),z(),R(3,`table`)(4,`thead`)(5,`tr`)(6,`th`,3),G(7,`Listener`),z(),R(8,`th`,4),G(9,`Calls`),z(),R(10,`th`,4),G(11,`Time`),z(),R(12,`th`,4),G(13,`Slowest`),z()()(),R(14,`tbody`),M(15,AA,10,5,`tr`,null,ug),z()()()),e&2){let e=U(2);D(15),N(e.outputs())}}function MA(e,t){if(e&1&&(R(0,`p`,1),G(1),z()),e&2){let e=t,n=U(2);D(),L_(` afterRender callbacks ran `,e.runs,` `,e.runs===1?`time`:`times`,`, `,n.ms(e.ms),` in total, slowest `,n.ms(e.maxMs),`. `)}}function NA(e,t){if(e&1&&(R(0,`p`,2),G(1),z()),e&2){let e=U(2);D(),J(` `,e.dropped(),` more hook or output `,e.dropped()===1?`row is`:`rows are`,` left out. A recording lists at most 100 of each. `)}}function PA(e,t){if(e&1&&(R(0,`div`,0),A(1,OA,17,0,`div`),A(2,jA,17,0,`div`),z(),A(3,MA,2,4,`p`,1),A(4,NA,2,2,`p`,2)),e&2){let e,t=U();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 FA=10;function IA(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}var LA=class e{page=$(null);hooks=X(()=>(this.page()?.hooks??[]).slice(0,FA));outputs=X(()=>(this.page()?.outputs??[]).slice(0,FA));afterRender=X(()=>{let e=this.page()?.afterRender;return e?.runs?e:null});dropped=X(()=>this.page()?.droppedTimings??0);ms(e){return IA(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,PA,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 WA(e,t){if(e&1&&(z(0,`p`,5),K(1),B()),e&2){let e=W();O(),q(e.error())}}function GA(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 KA=class e{page=$(null);maxCycles=$(200);imported=Sv();error=D(``);hasCycles(){return(this.page()?.cycles.length??0)>0}exportJson(){let e=this.page();e&&GA(gk(e,e.pageId),`change-detection-${e.pageId}.json`)}exportTrace(){let e=this.page();e&&GA(Ck(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=_k(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=k({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=V();z(0,`div`,1)(1,`button`,2),U(`click`,function(){return t.exportJson()}),K(2,`Export JSON`),B(),z(3,`button`,2),U(`click`,function(){return t.exportTrace()}),K(4,` Export trace (Perfetto) `),B(),z(5,`button`,3),U(`click`,function(){return w(e),T(Xg(8).click())}),K(6,`Import`),B(),z(7,`input`,4,0),U(`change`,function(){w(e);let n=Xg(8);return T(t.read(n))}),B()(),j(9,WA,2,1,`p`,5)}e&2&&(O(),Mg(`disabled`,!t.hasCycles()),O(2),Mg(`disabled`,!t.hasCycles()),O(6),M(t.error()?9:-1))},styles:[`[_nghost-%COMP%] { +}`]})};function RA(e,t){if(e&1&&(R(0,`p`,5),G(1),z()),e&2){let e=U();D(),K(e.error())}}function zA(e,t){let n=new Blob([JSON.stringify(e,null,2)],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=t,document.body.append(i),i.click(),i.remove(),setTimeout(()=>URL.revokeObjectURL(r),0)}var BA=class e{page=$(null);maxCycles=$(200);imported=gv();error=E(``);hasCycles(){return(this.page()?.cycles.length??0)>0}exportJson(){let e=this.page();e&&zA(uk(e,e.pageId),`change-detection-${e.pageId}.json`)}exportTrace(){let e=this.page();e&&zA(_k(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=dk(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),H(`click`,function(){return t.exportJson()}),G(2,`Export JSON`),z(),R(3,`button`,2),H(`click`,function(){return t.exportTrace()}),G(4,` Export trace (Perfetto) `),z(),R(5,`button`,3),H(`click`,function(){return C(e),w(Kg(8).click())}),G(6,`Import`),z(),R(7,`input`,4,0),H(`change`,function(){C(e);let n=Kg(8);return w(t.read(n))}),z()(),A(9,RA,2,1,`p`,5)}e&2&&(D(),Og(`disabled`,!t.hasCycles()),D(2),Og(`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; -}`]})},qA=(e,t)=>t.stat.name;function JA(e,t){if(e&1&&(z(0,`span`,8),K(1),B()),e&2){let e=W(2).$implicit;O(),J(``,e.other,` more`)}}function YA(e,t){if(e&1&&(z(0,`div`,6)(1,`span`,7),K(2),B(),j(3,JA,2,1,`span`,8),B()),e&2){let e=W().$implicit;__(`--%NS%tone`,e.tone+`%`),O(2),q(e.label),O(),M(e.roomy?3:-1)}}function XA(e,t){if(e&1&&(z(0,`span`,10),K(1),B(),z(2,`span`,11),K(3),B()),e&2){let e=W(2).$implicit,t=W(2);O(),q(e.stat.name),O(2),q(t.fmt(e.stat.ms))}}function ZA(e,t){if(e&1){let e=V();z(0,`button`,9),U(`focus`,function(){w(e);let t=W().$index;return T(W(2).current.set(t))})(`click`,function(){w(e);let t=W().$implicit;return T(W(2).pick.emit(t.stat.name))}),j(1,XA,4,2),B()}if(e&2){let e=W(),t=e.$implicit,n=e.$index,r=W(2);__(`--%NS%tone`,t.tone+`%`),A(`tabindex`,n===r.tabStop()?0:-1)(`aria-label`,t.label)(`data-index`,n),O(),M(t.roomy?1:-1)}}function QA(e,t){if(e&1&&(z(0,`li`),j(1,YA,4,4,`div`,4)(2,ZA,2,6,`button`,5),B()),e&2){let e=t.$implicit;__(`left`,e.x,`%`)(`top`,e.y,`%`)(`width`,e.w,`%`)(`height`,e.h,`%`),O(),M(e.other?1:2)}}function $A(e,t){if(e&1){let e=V();z(0,`ul`,2),U(`keydown`,function(t){return w(e),T(W().onKey(t))}),N(1,QA,3,9,`li`,3,qA),B()}if(e&2){let e=W();A(`aria-label`,e.label()),O(),P(e.cells())}}function ej(e,t){e&1&&(z(0,`p`,1),K(1,`No component time in these cycles.`),B())}var tj=24,nj=3,rj=class e{stats=$([]);scope=$(`the recording`);pick=Sv();current=D(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,tj),n=e.slice(tj),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=Ak(i,e=>e.stat.ms,nj);return s.sort((e,t)=>Number(e.item.other>0)-Number(t.item.other>0)),s.map(e=>{let{stat:t,other:n}=e.item,r=a?Math.round(t.ms/a*100):0;return{stat:t,other:n,x:e.x,y:e.y,w:e.w,h:e.h,tone:n?0:14+Math.round(26*Math.min(t.ms/o,1)),roomy:e.w>=10&&e.h>=22,label:n?`${n} more components, ${Ek(t.ms)}, ${r}% of self time`:`${t.name}, ${Ek(t.ms)} self time, ${r}%, ${t.checks} ${t.checks===1?`check`:`checks`}`}})});tabStop=X(()=>Math.min(this.current(),Math.max(this.cells().filter(e=>!e.other).length-1,0)));fmt(e){return Ek(e)}onKey(e){let t=this.cells().filter(e=>!e.other).length;if(!t)return;let n=this.tabStop(),r;switch(e.key){case`ArrowRight`:case`ArrowDown`:r=Math.min(n+1,t-1);break;case`ArrowLeft`:case`ArrowUp`:r=Math.max(n-1,0);break;case`Home`:r=0;break;case`End`:r=t-1;break;default:return}e.preventDefault(),this.current.set(r),e.currentTarget.querySelector(`button[data-index="${r}"]`)?.focus()}static ɵfac=function(t){return new(t||e)};static ɵcmp=k({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&&j(0,$A,3,1,`ul`,0)(1,ej,2,0,`p`,1),e&2&&M(+!t.cells().length)},styles:[`[_nghost-%COMP%] { +}`]})},VA=(e,t)=>t.stat.name;function HA(e,t){if(e&1&&(R(0,`span`,8),G(1),z()),e&2){let e=U(2).$implicit;D(),q(``,e.other,` more`)}}function UA(e,t){if(e&1&&(R(0,`div`,6)(1,`span`,7),G(2),z(),A(3,HA,2,1,`span`,8),z()),e&2){let e=U().$implicit;p_(`--%NS%tone`,e.tone+`%`),D(2),K(e.label),D(),j(e.roomy?3:-1)}}function WA(e,t){if(e&1&&(R(0,`span`,10),G(1),z(),R(2,`span`,11),G(3),z()),e&2){let e=U(2).$implicit,t=U(2);D(),K(e.stat.name),D(2),K(t.fmt(e.stat.ms))}}function GA(e,t){if(e&1){let e=B();R(0,`button`,9),H(`focus`,function(){C(e);let t=U().$index;return w(U(2).current.set(t))})(`click`,function(){C(e);let t=U().$implicit;return w(U(2).pick.emit(t.stat.name))}),A(1,WA,4,2),z()}if(e&2){let e=U(),t=e.$implicit,n=e.$index,r=U(2);p_(`--%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 KA(e,t){if(e&1&&(R(0,`li`),A(1,UA,4,4,`div`,4)(2,GA,2,6,`button`,5),z()),e&2){let e=t.$implicit;p_(`left`,e.x,`%`)(`top`,e.y,`%`)(`width`,e.w,`%`)(`height`,e.h,`%`),D(),j(e.other?1:2)}}function qA(e,t){if(e&1){let e=B();R(0,`ul`,2),H(`keydown`,function(t){return C(e),w(U().onKey(t))}),M(1,KA,3,9,`li`,3,VA),z()}if(e&2){let e=U();k(`aria-label`,e.label()),D(),N(e.cells())}}function JA(e,t){e&1&&(R(0,`p`,1),G(1,`No component time in these cycles.`),z())}var YA=24,XA=3,ZA=class e{stats=$([]);scope=$(`the recording`);pick=gv();current=E(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,YA),n=e.slice(YA),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=wk(i,e=>e.stat.ms,XA);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, ${bk(t.ms)}, ${r}% of self time`:`${t.name}, ${bk(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 bk(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,qA,3,1,`ul`,0)(1,JA,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); -}`]})},ij=(e,t)=>t.id;function aj(e,t){if(e&1){let e=V();I(0,`button`,14),H(`click`,function(){return w(e),T(W(2).clear())}),K(1,`Clear`),L()}}function oj(e,t){if(e&1){let e=V();I(0,`button`,11),H(`click`,function(){return w(e),T(W().toggle())}),R(1,`span`,12),K(2),L(),j(3,aj,2,0,`button`,13)}if(e&2){let e=W();G(`on`,e.recording()),F(`disabled`,!e.pageId()),O(2),J(` `,e.recording()?`Stop recording`:`Record`,` `),O(),M(e.cycles().length?3:-1)}}function sj(e,t){if(e&1){let e=V();I(0,`p`,6)(1,`span`,15),K(2,`Imported recording`),L(),I(3,`span`,16),K(4),L(),I(5,`button`,14),H(`click`,function(){return w(e),T(W().closeImport())}),K(6,`Back to live recording`),L()()}e&2&&(O(4),q(t.fileName))}function cj(e,t){e&1&&K(0,` An app on a device has no DOM, so checks that changed nothing are not counted there. `)}function lj(e,t){e&1&&(I(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. `),L())}function uj(e,t){e&1&&R(0,`app-angular-unavailable`,17),e&2&&F(`page`,W(2).angularPage())}function dj(e,t){e&1&&j(0,lj,2,0,`p`,9)(1,uj,1,1,`app-angular-unavailable`,17),e&2&&M(+!W().attachPending())}function fj(e,t){e&1&&(I(0,`p`,9),K(1,`Angular profiling stays on until the page reloads.`),L())}function pj(e,t){e&1&&R(0,`app-angular-unavailable`,21),e&2&&F(`page`,W(2).angularPage())}function mj(e,t){if(e&1){let e=V();I(0,`div`,18)(1,`span`,19),K(2,`Live views`),L(),I(3,`button`,20),H(`click`,function(){w(e);let t=W();return T(t.setView(`flash`,!t.views().flash))}),R(4,`span`,12),K(5,` Flash checks `),L(),I(6,`button`,20),H(`click`,function(){w(e);let t=W();return T(t.setView(`track`,!t.views().track))}),R(7,`span`,12),K(8,` Performance track `),L(),I(9,`button`,20),H(`click`,function(){return w(e),T(W().setView(`angularProfiling`,!0))}),R(10,`span`,12),K(11,` Angular profiling `),L()(),I(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. `),L(),j(14,fj,2,0,`p`,9)(15,pj,1,1,`app-angular-unavailable`,21)}if(e&2){let e=W();O(3),F(`disabled`,!e.canShowViews()),A(`aria-pressed`,e.views().flash),O(3),F(`disabled`,!e.canShowViews()),A(`aria-pressed`,e.views().track),O(3),F(`disabled`,!e.canShowViews()||e.views().angularProfiling||!e.views().angularProfilingAvailable),A(`aria-pressed`,e.views().angularProfiling),O(5),M(e.views().angularProfiling?14:e.views().angularProfilingAvailable?-1:15)}}function hj(e,t){if(e&1&&(I(0,`p`,9),K(1),L()),e&2){let e=t.$implicit;O(),q(e)}}function gj(e,t){if(e&1&&(I(0,`p`,24),K(1),L()),e&2){let e=W(2);O(),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 _j(e,t){e&1&&(I(0,`p`,9),K(1,` For picked cycles, totals come from the 10 slowest components each cycle lists. `),L())}function vj(e,t){if(e&1){let e=V();I(0,`h3`),K(1,`Cycles`),L(),I(2,`app-cd-cycle-chart`,22),K_(`rangeChange`,function(t){w(e);let n=W();return G_(n.range,t)||(n.range=t),T(t)}),L(),I(3,`app-cd-flame-graph`,23),H(`pick`,function(t){return w(e),T(W().showComponent.emit(t))}),L(),j(4,gj,2,1,`p`,24),I(5,`h3`),K(6,`Self time by component`),L(),j(7,_j,2,0,`p`,9),I(8,`app-cd-treemap`,25),H(`pick`,function(t){return w(e),T(W().showComponent.emit(t))}),L()}if(e&2){let e=W();O(2),F(`cycles`,e.cycles()),W_(`range`,e.range),O(),F(`cycles`,e.picked())(`names`,e.spanNames())(`scope`,e.scope()),O(),M(e.hasSpans()?-1:4),O(3),M(e.range()?7:-1),O(),F(`stats`,e.stats())(`scope`,e.scope())}}function yj(e,t){if(e&1&&(I(0,`tr`)(1,`td`,16),K(2),L(),I(3,`td`,31),K(4),L(),I(5,`td`,31),K(6),L(),I(7,`td`,31),K(8),L()()),e&2){let e=t.$implicit,n=W(2);O(2),q(e.name),O(2),q(e.checks),O(2),q(n.ms(e.ms)),O(2),q(n.ms(e.maxMs))}}function bj(e,t){e&1&&(I(0,`tr`)(1,`td`,32),K(2,`No component time in the picked cycles.`),L()())}function xj(e,t){if(e&1&&(I(0,`span`,34),K(1,`from `),I(2,`span`,16),K(3),L()()),e&2){let e=W(3);O(3),q(e.causeText(t))}}function Sj(e,t){if(e&1&&(I(0,`span`,34),K(1,`after `),I(2,`span`,16),K(3),L()()),e&2){let e=W().$implicit;O(3),q(e.trigger)}}function Cj(e,t){if(e&1&&(I(0,`span`,35),K(1),L()),e&2){let e=W().$implicit;O(),J(``,e.unchanged,` changed nothing`)}}function wj(e,t){if(e&1&&(I(0,`span`,35),K(1),L()),e&2){let e=W().$implicit,t=W(2);O(),J(`hooks `,t.ms(e.hookMs))}}function Tj(e,t){if(e&1&&(I(0,`span`,35),K(1),L()),e&2){let e=W().$implicit,t=W(2);O(),J(`afterRender `,t.ms(e.afterRenderMs))}}function Ej(e,t){if(e&1&&(I(0,`span`,36),K(1,` slowest `),I(2,`span`,16),K(3),L(),K(4),L()),e&2){let e=t,n=W(3);O(3),q(e.name),O(),J(` `,n.ms(e.ms),` `)}}function Dj(e,t){if(e&1&&(I(0,`li`)(1,`span`,33),K(2),L(),I(3,`span`,16),K(4),L(),I(5,`span`),K(6),L(),j(7,xj,4,1,`span`,34)(8,Sj,4,1,`span`,34),j(9,Cj,2,1,`span`,35),j(10,wj,2,1,`span`,35),j(11,Tj,2,1,`span`,35),j(12,Ej,5,2,`span`,36),L()),e&2){let e,n,r=t.$implicit,i=W(2);O(2),q(i.clock(r.at)),O(2),q(i.ms(r.ms)),O(2),H_(` `,r.checks,` `,r.checks===1?`check`:`checks`,`, `,r.passes,` `,r.passes===1?`pass`:`passes`,` `),O(),M((e=r.cause)?7:r.trigger?8:-1,e),O(2),M(r.unchanged?9:-1),O(),M(r.hookMs?10:-1),O(),M(r.afterRenderMs?11:-1),O(),M((n=r.components[0])?12:-1,n)}}function Oj(e,t){if(e&1&&(I(0,`div`,26)(1,`div`)(2,`h3`),K(3),L(),I(4,`table`)(5,`thead`)(6,`tr`)(7,`th`,27),K(8,`Component`),L(),I(9,`th`,28),K(10,`Checks`),L(),I(11,`th`,28),K(12,`Self time`),L(),I(13,`th`,28),K(14,`Slowest`),L()()(),I(15,`tbody`),N(16,yj,9,4,`tr`,null,mg,!1,bj,3,0,`tr`),L()()(),I(19,`div`)(20,`h3`),K(21,`Latest cycles`),L(),I(22,`ol`,29),N(23,Dj,13,11,`li`,null,ij),L()()(),R(25,`app-cd-timing`,30)(26,`app-cd-diagnosis`,30)),e&2){let e=W();O(3),J(` `,e.range()?`Slowest components in the picked cycles`:`Slowest components`,` `),O(13),P(e.slowest()),O(7),P(e.latest()),O(2),F(`page`,e.page()),O(),F(`page`,e.page())}}function kj(e,t){e&1&&(I(0,`p`,10),K(1,`Use the app. Cycles show up here as Angular runs change detection.`),L())}var Aj=3e3,jj=10,Mj=class e{livePage=$(null,{alias:`page`});pageId=$(null);rpc=$(null);native=$(!1);angularPages=BD(()=>this.rpc());angularPage=X(()=>VD(this.angularPages(),this.pageId()));attachPending=X(()=>this.angularPage()?.capabilities.profiler===!0);showComponent=Sv();range=D(null);imported=D(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=D(``);announcement=D(``);recording=X(()=>this.page()?.recording===!0);cycles=X(()=>this.page()?.cycles??[]);maxCycles=X(()=>lE(this.rpc()).limits.cdCycles);picked=X(()=>Dk(this.cycles(),this.range()));hasSpans=X(()=>this.picked().some(e=>e.spans?.length));spanNames=X(()=>this.page()?.spanNames??[]);stats=X(()=>this.range()?Ok(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,jj));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 xD(e)}causeText(e){return ck(e)}confirming=D(null);confirmTimer;constructor(){hc(()=>{let e=this.confirming();e!==null&&this.livePage()?.recording===!0===e&&Z(()=>this.confirmed(e))}),C(Os).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)},Aj))}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 qT(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=k({type:e,selectors:[[`app-cd-recording`]],inputs:{livePage:[1,`page`,`livePage`],pageId:[1,`pageId`],rpc:[1,`rpc`],native:[1,`native`]},outputs:{showComponent:`showComponent`},decls:22,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`,`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`],[1,`num`],[`colspan`,`4`],[1,`when`],[1,`trigger`],[1,`timing`],[1,`top`]],template:function(e,t){if(e&1&&(I(0,`section`,0)(1,`div`,1)(2,`h2`,2),K(3,`Change detection`),L(),j(4,oj,4,5),I(5,`app-cd-transfer`,3),H(`imported`,function(e){return t.showImport(e)}),L(),I(6,`p`,4),K(7),L(),I(8,`p`,5),K(9),L()(),j(10,sj,7,1,`p`,6),I(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. `),j(13,cj,1,0),L(),j(14,dj,2,1),j(15,mj,16,7),R(16,`app-limit-note`,8),N(17,hj,2,1,`p`,9,hg),j(19,vj,9,9),j(20,Oj,27,4)(21,kj,2,0,`p`,10),L()),e&2){let e;O(4),M(t.imported()?-1:4),O(),F(`page`,t.page())(`maxCycles`,t.maxCycles()),O(2),q(t.status()),O(2),q(t.announcement()),O(),M((e=t.imported())?10:-1,e),O(3),M(t.native()?13:-1),O(),M(t.page()?.supported===!1?14:-1),O(),M(!t.imported()&&!t.native()?15:-1),O(),F(`dropped`,t.page()?.dropped??0)(`max`,t.maxCycles()),O(),P(t.capNotes()),O(2),M(t.cycles().length?19:-1),O(),M(t.page()?.components?.length?20:t.recording()?21:-1)}},dependencies:[GD,AO,UA,tA,KA,_A,MA,rj],styles:[`[_nghost-%COMP%] { +}`]})},QA=(e,t)=>t.id;function $A(e,t){if(e&1){let e=B();F(0,`button`,14),V(`click`,function(){return C(e),w(U(2).clear())}),G(1,`Clear`),I()}}function ej(e,t){if(e&1){let e=B();F(0,`button`,11),V(`click`,function(){return C(e),w(U().toggle())}),L(1,`span`,12),G(2),I(),A(3,$A,2,0,`button`,13)}if(e&2){let e=U();W(`on`,e.recording()),P(`disabled`,!e.pageId()),D(2),q(` `,e.recording()?`Stop recording`:`Record`,` `),D(),j(e.cycles().length?3:-1)}}function tj(e,t){if(e&1){let e=B();F(0,`p`,6)(1,`span`,15),G(2,`Imported recording`),I(),F(3,`span`,16),G(4),I(),F(5,`button`,14),V(`click`,function(){return C(e),w(U().closeImport())}),G(6,`Back to live recording`),I()()}e&2&&(D(4),K(t.fileName))}function nj(e,t){e&1&&G(0,` An app on a device has no DOM, so checks that changed nothing are not counted there. `)}function rj(e,t){e&1&&G(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 ij(e,t){e&1&&(F(0,`p`,9),G(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 aj(e,t){e&1&&L(0,`app-angular-unavailable`,17),e&2&&P(`page`,U(2).angularPage())}function oj(e,t){e&1&&A(0,ij,2,0,`p`,9)(1,aj,1,1,`app-angular-unavailable`,17),e&2&&j(+!U().attachPending())}function sj(e,t){e&1&&(F(0,`p`,9),G(1,`Angular profiling stays on until the page reloads.`),I())}function cj(e,t){e&1&&L(0,`app-angular-unavailable`,21),e&2&&P(`page`,U(2).angularPage())}function lj(e,t){if(e&1){let e=B();F(0,`div`,18)(1,`span`,19),G(2,`Live views`),I(),F(3,`button`,20),V(`click`,function(){C(e);let t=U();return w(t.setView(`flash`,!t.views().flash))}),L(4,`span`,12),G(5,` Flash checks `),I(),F(6,`button`,20),V(`click`,function(){C(e);let t=U();return w(t.setView(`track`,!t.views().track))}),L(7,`span`,12),G(8,` Performance track `),I(),F(9,`button`,20),V(`click`,function(){return C(e),w(U().setView(`angularProfiling`,!0))}),L(10,`span`,12),G(11,` Angular profiling `),I()(),F(12,`p`,7),G(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,sj,2,0,`p`,9)(15,cj,1,1,`app-angular-unavailable`,21)}if(e&2){let e=U();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 uj(e,t){if(e&1&&(F(0,`p`,9),G(1),I()),e&2){let e=t.$implicit;D(),K(e)}}function dj(e,t){if(e&1&&(F(0,`p`,24),G(1),I()),e&2){let e=U(2);D(),q(` `,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 fj(e,t){e&1&&(F(0,`p`,9),G(1,` For picked cycles, totals come from the 10 slowest components each cycle lists. `),I())}function pj(e,t){if(e&1){let e=B();F(0,`h3`),G(1,`Cycles`),I(),F(2,`app-cd-cycle-chart`,22),V_(`rangeChange`,function(t){C(e);let n=U();return B_(n.range,t)||(n.range=t),w(t)}),I(),F(3,`app-cd-flame-graph`,23),V(`pick`,function(t){return C(e),w(U().showComponent.emit(t))}),I(),A(4,dj,2,1,`p`,24),F(5,`h3`),G(6,`Self time by component`),I(),A(7,fj,2,0,`p`,9),F(8,`app-cd-treemap`,25),V(`pick`,function(t){return C(e),w(U().showComponent.emit(t))}),I()}if(e&2){let e=U();D(2),P(`cycles`,e.cycles()),z_(`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 mj(e,t){if(e&1){let e=B();F(0,`tr`)(1,`td`,16)(2,`button`,31),V(`click`,function(){let t=C(e).$implicit;return w(U(2).showComponent.emit(t.name))}),G(3),I()(),F(4,`td`,32),G(5),I(),F(6,`td`,32),G(7),I(),F(8,`td`,32),G(9),I()()}if(e&2){let e=t.$implicit,n=U(2);D(3),q(` `,e.name,` `),D(2),K(e.checks),D(2),K(n.ms(e.ms)),D(2),K(n.ms(e.maxMs))}}function hj(e,t){e&1&&(F(0,`tr`)(1,`td`,33),G(2,`No component time in the picked cycles.`),I()())}function gj(e,t){if(e&1){let e=B();F(0,`tr`)(1,`td`,16)(2,`button`,31),V(`click`,function(){let t=C(e).$implicit;return w(U(2).showComponent.emit(t.name))}),G(3),I()(),F(4,`td`,32),G(5),I(),F(6,`td`,32),G(7),I(),F(8,`td`,32),G(9),I()()}if(e&2){let e=t.$implicit,n=U(2);D(3),q(` `,e.name,` `),D(2),K(e.checks),D(2),K(e.cycles),D(2),K(n.ms(e.ms))}}function _j(e,t){e&1&&(F(0,`tr`)(1,`td`,33),G(2,`No component checks in the picked cycles.`),I()())}function vj(e,t){if(e&1&&(F(0,`span`,35),G(1,`from `),F(2,`span`,16),G(3),I()()),e&2){let e=U(3);D(3),K(e.causeText(t))}}function yj(e,t){if(e&1&&(F(0,`span`,35),G(1,`after `),F(2,`span`,16),G(3),I()()),e&2){let e=U().$implicit;D(3),K(e.trigger)}}function bj(e,t){if(e&1&&(F(0,`span`,36),G(1),I()),e&2){let e=U().$implicit;D(),q(``,e.unchanged,` changed nothing`)}}function xj(e,t){if(e&1&&(F(0,`span`,36),G(1),I()),e&2){let e=U().$implicit,t=U(2);D(),q(`hooks `,t.ms(e.hookMs))}}function Sj(e,t){if(e&1&&(F(0,`span`,36),G(1),I()),e&2){let e=U().$implicit,t=U(2);D(),q(`afterRender `,t.ms(e.afterRenderMs))}}function Cj(e,t){if(e&1&&(F(0,`span`,37),G(1,` slowest `),F(2,`span`,16),G(3),I(),G(4),I()),e&2){let e=t,n=U(3);D(3),K(e.name),D(),q(` `,n.ms(e.ms),` `)}}function wj(e,t){if(e&1&&(F(0,`li`)(1,`span`,34),G(2),I(),F(3,`span`,16),G(4),I(),F(5,`span`),G(6),I(),A(7,vj,4,1,`span`,35)(8,yj,4,1,`span`,35),A(9,bj,2,1,`span`,36),A(10,xj,2,1,`span`,36),A(11,Sj,2,1,`span`,36),A(12,Cj,5,2,`span`,37),I()),e&2){let e,n,r=t.$implicit,i=U(2);D(2),K(i.clock(r.at)),D(2),K(i.ms(r.ms)),D(2),L_(` `,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 Tj(e,t){if(e&1&&(F(0,`div`,26)(1,`div`)(2,`h3`),G(3),I(),F(4,`table`)(5,`thead`)(6,`tr`)(7,`th`,27),G(8,`Component`),I(),F(9,`th`,28),G(10,`Checks`),I(),F(11,`th`,28),G(12,`Self time`),I(),F(13,`th`,28),G(14,`Slowest`),I()()(),F(15,`tbody`),M(16,mj,10,4,`tr`,null,ug,!1,hj,3,0,`tr`),I()(),F(19,`h3`),G(20),I(),F(21,`table`)(22,`thead`)(23,`tr`)(24,`th`,27),G(25,`Component`),I(),F(26,`th`,28),G(27,`Checks`),I(),F(28,`th`,28),G(29,`Cycles`),I(),F(30,`th`,28),G(31,`Self time`),I()()(),F(32,`tbody`),M(33,gj,10,4,`tr`,null,ug,!1,_j,3,0,`tr`),I()(),F(36,`p`,7),G(37,` Select a component name to show its most checked instance in the tree. `),I()(),F(38,`div`)(39,`h3`),G(40,`Latest cycles`),I(),F(41,`ol`,29),M(42,wj,13,11,`li`,null,QA),I()()(),L(44,`app-cd-timing`,30)(45,`app-cd-diagnosis`,30)),e&2){let e=U();D(3),q(` `,e.range()?`Slowest components in the picked cycles`:`Slowest components`,` `),D(13),N(e.slowest()),D(4),q(` `,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 Ej(e,t){e&1&&(F(0,`p`,10),G(1,`Use the app. Cycles show up here as Angular runs change detection.`),I())}var Dj=3e3,Oj=10,kj=class e{livePage=$(null,{alias:`page`});pageId=$(null);rpc=$(null);native=$(!1);angularPages=PD(()=>this.rpc());angularPage=X(()=>FD(this.angularPages(),this.pageId()));attachPending=X(()=>this.angularPage()?.capabilities.profiler===!0);showComponent=gv();range=E(null);imported=E(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=E(``);announcement=E(``);recording=X(()=>this.page()?.recording===!0);cycles=X(()=>this.page()?.cycles??[]);maxCycles=X(()=>rE(this.rpc()).limits.cdCycles);picked=X(()=>xk(this.cycles(),this.range()));hasSpans=X(()=>this.picked().some(e=>e.spans?.length));spanNames=X(()=>this.page()?.spanNames??[]);stats=X(()=>this.range()?Sk(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,Oj));busiest=X(()=>[...this.stats()].sort((e,t)=>t.checks-e.checks).slice(0,Oj));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 hD(e)}causeText(e){return nk(e)}confirming=E(null);confirmTimer;constructor(){pc(()=>{let e=this.confirming();e!==null&&this.livePage()?.recording===!0===e&&Z(()=>this.confirmed(e))}),S(Es).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)},Dj))}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 VT(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`,`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),G(3,`Change detection`),I(),A(4,ej,4,5),F(5,`app-cd-transfer`,3),V(`imported`,function(e){return t.showImport(e)}),I(),F(6,`p`,4),G(7),I(),F(8,`p`,5),G(9),I()(),A(10,tj,7,1,`p`,6),F(11,`p`,7),G(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,nj,1,0)(14,rj,1,0),I(),A(15,oj,2,1),A(16,lj,16,7),L(17,`app-limit-note`,8),M(18,uj,2,1,`p`,9,dg),A(20,pj,9,9),A(21,Tj,46,6)(22,Ej,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),K(t.status()),D(2),K(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:[zD,wO,LA,Yk,BA,dA,EA,ZA],styles:[`[_nghost-%COMP%] { display: block; margin-top: 16px; } @@ -1867,6 +1867,30 @@ td.mono[_ngcontent-%COMP%] { overflow-wrap: anywhere; } +.name-link[_ngcontent-%COMP%] { + height: auto; + min-height: 0; + padding: 0; + border: 0; + background: none; + color: var(--%NS%text-strong); + font: inherit; + text-align: left; + text-decoration: underline; + text-underline-offset: 2px; + cursor: pointer; +} + +.name-link[_ngcontent-%COMP%]:hover { + background: none; + text-decoration-thickness: 2px; +} + +.name-link[_ngcontent-%COMP%]:focus-visible { + outline: 2px solid var(--%NS%accent); + outline-offset: -2px; +} + .num[_ngcontent-%COMP%] { text-align: right; font-variant-numeric: tabular-nums; @@ -1922,7 +1946,7 @@ td.mono[_ngcontent-%COMP%] { .trigger[_ngcontent-%COMP%] .mono[_ngcontent-%COMP%], .top[_ngcontent-%COMP%] .mono[_ngcontent-%COMP%] { overflow-wrap: anywhere; -}`]})},Nj=[`*`];function Pj(e,t){e&1&&K(0),e&2&&q(W(2).label())}function Fj(e,t){e&1&&Kg(0,0,null,Pj,1,1)}function Ij(e,t){if(e&1&&(I(0,`span`,4),K(1),L()),e&2){let e=W(2);O(),q(e.message())}}function Lj(e,t){if(e&1){let e=V();I(0,`button`,2),H(`click`,function(){return w(e),T(W().open())}),Ag(1,3),L(),j(2,Ij,2,1,`span`,4)}if(e&2){let e=W(),t=Xg(1);F(`title`,`Open `+e.label()+` in your editor`),A(`aria-label`,`Open `+e.label()+` in your editor`),O(),F(`ngTemplateOutlet`,t),O(),M(e.message()?2:-1)}}function Rj(e,t){if(e&1&&(I(0,`span`,1),Ag(1,3),L()),e&2){let e=W(),t=Xg(1);F(`title`,e.label()),O(),F(`ngTemplateOutlet`,t)}}var zj=class e{source=D(D(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 qT(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=Il({token:e,factory:e.ɵfac})};function Bj(e,t){return t?`${e}:${t}`:e}var Vj=class e{editor=C(zj);file=$.required();line=$(void 0);label=X(()=>Bj(this.file(),this.line()));message=D(``);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=k({type:e,selectors:[[`app-source-link`]],inputs:{file:[1,`file`],line:[1,`line`]},ngContentSelectors:Nj,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&&(Gg(),Kh(0,Fj,2,0,`ng-template`,null,0,hv),j(2,Lj,3,4)(3,Rj,2,2,`span`,1)),e&2&&(O(2),M(t.editor.available()?2:3))},dependencies:[dy],styles:[`[_nghost-%COMP%] { +}`]})};function Aj(e){return Object.fromEntries(e.map(e=>[e.name,e.value??null]))}function jj(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=Aj(e.inputs),t.outputs=jj(e.outputs),t.properties=Aj(e.properties??[]),e.listeners.length&&(t.listeners=e.listeners),e.directives.length&&(t.directives=e.directives.map(e=>({name:e.name,inputs:Aj(e.inputs),outputs:jj(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 Nj(e){return e.selector||e.path}var Pj=1e3;function Fj(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 Ij(e){try{return JSON.stringify(e)??`undefined`}catch{return String(e)}}var Lj=class{ms;changed=E(new Set);owner=null;last=new Map;timers=new Map;constructor(e=Pj){this.ms=e}update(e,t){let n=new Map([...t].map(([e,t])=>[e,Ij(t)]));if(e!==this.owner){this.clear(),this.owner=e,this.last=n;return}let r=Fj(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 Rj(e,t,n=0){return e===`directive`?`directive:${n}:${t}`:`${e}:${t}`}var zj=[`*`];function Bj(e,t){e&1&&G(0),e&2&&K(U(2).label())}function Vj(e,t){e&1&&Hg(0,0,null,Bj,1,1)}function Hj(e,t){if(e&1&&(F(0,`span`,4),G(1),I()),e&2){let e=U(2);D(),K(e.message())}}function Uj(e,t){if(e&1){let e=B();F(0,`button`,2),V(`click`,function(){return C(e),w(U().open())}),Eg(1,3),I(),A(2,Hj,2,1,`span`,4)}if(e&2){let e=U(),t=Kg(1);P(`title`,`Open `+e.label()+` in your editor`),k(`aria-label`,`Open `+e.label()+` in your editor`),D(),P(`ngTemplateOutlet`,t),D(),j(e.message()?2:-1)}}function Wj(e,t){if(e&1&&(F(0,`span`,1),Eg(1,3),I()),e&2){let e=U(),t=Kg(1);P(`title`,e.label()),D(),P(`ngTemplateOutlet`,t)}}var Gj=class e{source=E(E(null));client=X(()=>this.source()());available=X(()=>{let e=this.client();return!!e&&!UT(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 VT(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=Pl({token:e,factory:e.ɵfac})};function Kj(e,t){return t?`${e}:${t}`:e}var qj=class e{editor=S(Gj);file=$.required();line=$(void 0);label=X(()=>Kj(this.file(),this.line()));message=E(``);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:zj,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&&(Vg(),Hh(0,Vj,2,0,`ng-template`,null,0,lv),A(2,Uj,3,4)(3,Wj,2,2,`span`,1)),e&2&&(D(2),j(t.editor.available()?2:3))},dependencies:[ay],styles:[`[_nghost-%COMP%] { display: inline; min-width: 0; } @@ -1957,7 +1981,7 @@ td.mono[_ngcontent-%COMP%] { color: var(--%NS%danger-text); font-family: var(--%NS%font-sans); font-size: 0.92em; -}`]})},Hj=[`field`],Uj=[`editButton`],Wj=[`valueBox`];function Gj(e,t){if(e&1){let e=V();z(0,`div`,5)(1,`label`,6),K(2),B(),z(3,`input`,7,0),U(`input`,function(t){return w(e),T(W().draft.set(t.target.value))})(`keydown.enter`,function(t){w(e);let n=W();return t.preventDefault(),T(n.apply())})(`keydown.escape`,function(t){w(e);let n=W();return t.preventDefault(),t.stopPropagation(),T(n.cancel())}),B(),z(5,`button`,8),U(`click`,function(){return w(e),T(W().apply())}),K(6,`Apply`),B(),z(7,`button`,9),U(`click`,function(){return w(e),T(W().cancel())}),K(8,`Cancel`),B()(),z(9,`p`,10),K(10),B()}if(e&2){let e=W();O(),Mg(`htmlFor`,e.fieldId),O(),J(`New value of `,e.prop().name,`, as JSON`),O(),Mg(`id`,e.fieldId)(`value`,e.draft())(`readOnly`,e.busy()),A(`aria-busy`,e.busy()?`true`:null)(`aria-invalid`,e.error()?`true`:null)(`aria-describedby`,e.hintId+(e.error()?` `+e.errorId:``)),O(2),Mg(`disabled`,e.busy()),O(4),Mg(`id`,e.hintId),O(),J(` JSON, such as "text", 42, true or `,e.objectSample,`. Enter applies, Escape cancels. `)}}function Kj(e,t){if(e&1&&(z(0,`pre`,null,1),K(2),dv(3,`json`),B()),e&2){let e=W(2);A(`tabindex`,e.scrollable()?0:null)(`role`,e.scrollable()?`region`:null)(`aria-label`,e.scrollable()?`Value of `+e.prop().name:null),O(2),q(fv(3,4,e.prop().value))}}function qj(e,t){if(e&1){let e=V();z(0,`button`,14,2),U(`click`,function(){return w(e),T(W(2).start())}),K(2,` Edit `),B()}if(e&2){let e=W(2);Mg(`disabled`,e.busy()),A(`aria-label`,`Edit `+e.prop().name)}}function Jj(e,t){if(e&1&&(z(0,`p`,13),K(1),B()),e&2){let e=W(2);O(),q(e.prop().locked)}}function Yj(e,t){if(e&1&&(z(0,`div`,11),j(1,Kj,4,6,`pre`),j(2,qj,3,2,`button`,12),B(),j(3,Jj,2,1,`p`,13)),e&2){let e=W();O(),M(e.bare()?-1:1),O(),M(e.editable()?2:-1),O(),M(e.writes()&&e.prop().locked?3:-1)}}function Xj(e,t){if(e&1&&(z(0,`p`,3),K(1),B()),e&2){let e=W();Mg(`id`,e.errorId),O(),q(e.error())}}var Zj=0;function Qj(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 $j=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=D(!1);draft=D(``);busy=D(!1);error=D(``);done=D(``);editable=X(()=>this.writes()&&!!this.prop().edit&&!!this.pageId()&&!!this.rpc());field=kv(`field`);editButton=kv(`editButton`);valueBox=kv(`valueBox`);injector=C(Es);scrollable=D(!1);constructor(){Iv(()=>{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),md(()=>{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=Qj(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(){md(()=>this.editButton()?.nativeElement.focus(),{injector:this.injector})}static ɵfac=function(t){return new(t||e)};static ɵcmp=k({type:e,selectors:[[`app-prop-value`]],viewQuery:function(e,t){e&1&&Jg(t.field,Hj,5)(t.editButton,Uj,5)(t.valueBox,Wj,5),e&2&&Yg(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&&(j(0,Gj,11,11)(1,Yj,4,3),j(2,Xj,2,2,`p`,3),z(3,`p`,4),K(4),B()),e&2&&(M(+!t.editing()),O(2),M(t.error()?2:-1),O(2),q(t.done()))},dependencies:[py],styles:[`[_nghost-%COMP%] { +}`]})},Jj=[`field`],Yj=[`editButton`],Xj=[`valueBox`];function Zj(e,t){if(e&1){let e=B();R(0,`div`,5)(1,`label`,6),G(2),z(),R(3,`input`,7,0),H(`input`,function(t){return C(e),w(U().draft.set(t.target.value))})(`keydown.enter`,function(t){C(e);let n=U();return t.preventDefault(),w(n.apply())})(`keydown.escape`,function(t){C(e);let n=U();return t.preventDefault(),t.stopPropagation(),w(n.cancel())}),z(),R(5,`button`,8),H(`click`,function(){return C(e),w(U().apply())}),G(6,`Apply`),z(),R(7,`button`,9),H(`click`,function(){return C(e),w(U().cancel())}),G(8,`Cancel`),z()(),R(9,`p`,10),G(10),z()}if(e&2){let e=U();D(),Og(`htmlFor`,e.fieldId),D(),q(`New value of `,e.prop().name,`, as JSON`),D(),Og(`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),Og(`disabled`,e.busy()),D(4),Og(`id`,e.hintId),D(),q(` JSON, such as "text", 42, true or `,e.objectSample,`. Enter applies, Escape cancels. `)}}function Qj(e,t){if(e&1&&(R(0,`pre`,null,1),G(2),av(3,`json`),z()),e&2){let e=U(2);k(`tabindex`,e.scrollable()?0:null)(`role`,e.scrollable()?`region`:null)(`aria-label`,e.scrollable()?`Value of `+e.prop().name:null),D(2),K(ov(3,4,e.prop().value))}}function $j(e,t){if(e&1){let e=B();R(0,`button`,14,2),H(`click`,function(){return C(e),w(U(2).start())}),G(2,` Edit `),z()}if(e&2){let e=U(2);Og(`disabled`,e.busy()),k(`aria-label`,`Edit `+e.prop().name)}}function eM(e,t){if(e&1&&(R(0,`p`,13),G(1),z()),e&2){let e=U(2);D(),K(e.prop().locked)}}function tM(e,t){if(e&1&&(R(0,`div`,11),A(1,Qj,4,6,`pre`),A(2,$j,3,2,`button`,12),z(),A(3,eM,2,1,`p`,13)),e&2){let e=U();D(),j(e.bare()?-1:1),D(),j(e.editable()?2:-1),D(),j(e.writes()&&e.prop().locked?3:-1)}}function nM(e,t){if(e&1&&(R(0,`p`,3),G(1),z()),e&2){let e=U();Og(`id`,e.errorId),D(),K(e.error())}}var rM=0;function iM(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 aM=class e{prop=$.required();componentId=$.required();pageId=$(null);rpc=$(null);writes=$(!1);bare=$(!1);readDraft=$(null);fieldId=`prop-edit-${++rM}`;hintId=`${this.fieldId}-hint`;errorId=`${this.fieldId}-error`;objectSample=`{"a": 1}`;editing=E(!1);draft=E(``);busy=E(!1);error=E(``);done=E(``);editable=X(()=>this.writes()&&!!this.prop().edit&&!!this.pageId()&&!!this.rpc());field=Cv(`field`);editButton=Cv(`editButton`);valueBox=Cv(`valueBox`);injector=S(ws);scrollable=E(!1);constructor(){Av(()=>{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),dd(()=>{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=iM(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(){dd(()=>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&&Wg(t.field,Jj,5)(t.editButton,Yj,5)(t.valueBox,Xj,5),e&2&&Gg(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,Zj,11,11)(1,tM,4,3),A(2,nM,2,2,`p`,3),R(3,`p`,4),G(4),z()),e&2&&(j(+!t.editing()),D(2),j(t.error()?2:-1),D(2),K(t.done()))},dependencies:[sy],styles:[`[_nghost-%COMP%] { display: block; min-width: 0; } @@ -2080,7 +2104,7 @@ button.edit[_ngcontent-%COMP%] { .error[_ngcontent-%COMP%] { color: var(--%NS%danger-text); -}`]})},eM=1e3,tM={depth:5,limit:100},nM=`[redacted]`;function rM(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function iM(e){return rM(e)&&typeof e.$more==`number`&&Object.keys(e).length===1}function aM(e){return rM(e)&&typeof e.$collapsed==`string`&&typeof e.size==`number`&&Object.keys(e).length===2}function oM(e){return e===`Array`?`array`:e===`Map`?`map`:e===`Set`?`set`:`object`}function sM(e){return e.$type===`Map`&&Array.isArray(e.entries)}function cM(e){return e.$type===`Set`&&Array.isArray(e.values)}function lM(e){return Object.keys(e).filter(e=>e!==`$type`&&e!==`$more`)}function uM(e){if(!e||typeof e!=`object`)return null;if(aM(e))return e.size<=0?null:{kind:oM(e.$collapsed),type:e.$collapsed,size:e.size,collapsed:!0};if(iM(e))return null;if(Array.isArray(e)){let t=e.at(-1),n=iM(t)?t.$more:0,r=e.length-+!!n+n;return r?{kind:`array`,type:`Array`,size:r,collapsed:!1}:null}let t=e;if(sM(t)||cM(t)){let e=typeof t.size==`number`?t.size:0,n=sM(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=lM(t).length+n,i=typeof t.$type==`string`?t.$type:`Object`;return r?{kind:`object`,type:i,size:r,collapsed:!1}:null}function dM(e){if(typeof e==`string`)return JSON.stringify(e);let t=uM(e);if(t)return mM(t);try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function fM(e){let t=uM(e);if(!t||t.collapsed)return{children:[],more:0};if(Array.isArray(e)){let n=(iM(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:dM(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:lM(n).map(e=>({key:e,label:e,value:n[e]})),more:typeof n.$more==`number`?n.$more:0}}function pM(e,t,n){return`${e} ${e===1?t:n}`}function mM(e){let t={array:pM(e.size,`item`,`items`),object:pM(e.size,`key`,`keys`),map:pM(e.size,`entry`,`entries`),set:pM(e.size,`value`,`values`)}[e.kind];return`${e.type} (${t})`}function hM(e,t){return JSON.stringify(t===void 0?e:[t,...e])}function gM(e,t){return e.map((e,n)=>n===0?e:(t?t[n-1]!==`object`:/^\d+$/.test(e))?`[${e}]`:`.${e}`).join(``)}function _M(e){return e.every(e=>e&&e===e.trim()&&!/[.[\]]/.test(e))?e.join(`.`):null}var vM=/^\[(Getter|Unreadable|Circular|Truncated|Function\b.*|Promise)\]$/;function yM(e){return e===null||typeof e==`boolean`?!0:typeof e==`number`?Number.isFinite(e):typeof e==`string`&&e!==nM&&!vM.test(e)&&!e.endsWith(`…`)}function bM(e,t){return!e||t.kind===`map`||t.kind===`set`||e===`signal`&&t.kind===`object`&&t.type!==`Object`?null:e}function xM(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=hM(e);if(!(s.has(r)||a.length>=i)){s.add(r);for(let r of fM(t).children){let t=[...e,r.key];if(r.label.toLowerCase().includes(o)&&a.push(t),!uM(r.value))continue;let i=n(t)??(uM(r.value)?.collapsed?void 0:r.value);i!==void 0&&c(t,i)}}};return c(e,n(e)??t),a}var SM=(e,t)=>t.id;function CM(e,t){if(e&1){let e=V();I(0,`button`,2),H(`click`,function(){w(e);let t=W().$implicit;return T(W(3).toggle(t))}),E(),I(1,`svg`,3),R(2,`path`,4),L(),vs(),I(3,`span`,14),K(4),L(),I(5,`span`,5),K(6),L()()}if(e&2){let e=W().$implicit;A(`aria-expanded`,e.open)(`aria-label`,e.label+`: `+e.text),O(4),J(``,e.label,`:`),O(2),q(e.text)}}function wM(e,t){if(e&1&&R(0,`app-prop-value`,15),e&2){let e=W(5);F(`prop`,t)(`componentId`,e.componentId())(`pageId`,e.pageId())(`rpc`,e.rpc())(`writes`,e.writes())}}function TM(e,t){if(e&1&&(I(0,`span`,16),K(1),L()),e&2){let e=W(2).$implicit;O(),q(e.text)}}function EM(e,t){if(e&1&&(I(0,`span`,14),K(1),L(),j(2,wM,1,5,`app-prop-value`,15)(3,TM,2,1,`span`,16)),e&2){let e,t=W().$implicit;O(),J(``,t.label,`:`),O(),M((e=t.edit)?2:3,e)}}function DM(e,t){if(e&1){let e=V();I(0,`button`,17),H(`click`,function(){w(e);let t=W().$implicit;return T(W(3).more(t))}),K(1),I(2,`span`,18),K(3),L()()}if(e&2){let e=W().$implicit,t=W(3);O(),J(` Show `,t.step(e),` more `),O(2),J(`(`,e.more,` not listed)`)}}function OM(e,t){e&1&&(I(0,`span`,12),K(1,`Reading from the page…`),L())}function kM(e,t){if(e&1&&(I(0,`span`,13),K(1),L()),e&2){let e=W().$implicit;O(),q(e.text)}}function AM(e,t){if(e&1&&(I(0,`li`,9),j(1,CM,7,4,`button`,10)(2,EM,4,2)(3,DM,4,2,`button`,11)(4,OM,2,0,`span`,12)(5,kM,2,1,`span`,13),L()),e&2){let e,n=t.$implicit;__(`padding-left`,n.depth*14,`px`),O(),M((e=n.kind)===`node`?1:e===`leaf`?2:e===`more`?3:e===`loading`?4:e===`error`?5:-1)}}function jM(e,t){if(e&1&&(I(0,`ul`,7),N(1,AM,6,3,`li`,8,SM),L()),e&2){let e=W(2);F(`id`,e.listId),A(`aria-label`,e.prop().name+` entries`),O(),P(e.rows())}}function MM(e,t){if(e&1){let e=V();I(0,`div`,1)(1,`button`,2),H(`click`,function(){return w(e),T(W().toggleRoot())}),E(),I(2,`svg`,3),R(3,`path`,4),L(),vs(),I(4,`span`,5),K(5),L()(),R(6,`app-prop-value`,6),L(),j(7,jM,3,2,`ul`,7)}if(e&2){let e=t,n=W();O(),A(`aria-expanded`,n.rootOpen())(`aria-controls`,n.rootOpen()?n.listId:null)(`aria-label`,n.prop().name+`: `+n.summaryOf(e)),O(4),q(n.summaryOf(e)),O(),F(`bare`,!0)(`prop`,n.prop())(`componentId`,n.componentId())(`pageId`,n.pageId())(`rpc`,n.rpc())(`writes`,n.writes())(`readDraft`,n.readWhole),O(),M(n.rootOpen()?7:-1)}}function NM(e,t){if(e&1&&R(0,`app-prop-value`,0),e&2){let e=W();F(`prop`,e.prop())(`componentId`,e.componentId())(`pageId`,e.pageId())(`rpc`,e.rpc())(`writes`,e.writes())}}var PM=0;function FM(e){if(e===void 0)return`undefined`;try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function IM(e){if(Array.isArray(e))return e.every(IM);if(e&&typeof e==`object`){let t=e;return![`$collapsed`,`$more`,`$type`].some(e=>Object.hasOwn(t,e))&&Object.values(t).every(IM)}return yM(e)}var LM=class e{prop=$.required();store=$.required();componentId=$.required();pageId=$(null);rpc=$(null);writes=$(!1);directive=$(void 0);query=$(``);listId=`value-tree-${++PM}`;host=C(zl);pendingMore=null;constructor(){Iv(()=>{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(()=>uM(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 xM(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(hM(e));for(let t=2;t<=e.length;t++)i.add(hM(e.slice(0,t)))}let o=this.prop(),s=this.writes()&&n===void 0,c=[],l=(e,o,d,f,p,m)=>{let{children:h,more:g}=fM(e);for(let e of h){let h=[...o,e.key],g=hM(h);if(r&&!m&&!i.has(g))continue;let _=uM(e.value),ee=hM(h,n);if(!_){let t=p&&yM(e.value)?_M(h):null;c.push({id:ee,kind:`leaf`,depth:f,path:h,label:e.label,text:FM(e.value),edit:s&&t&&p?{name:gM(h,[...d]),prop:t,value:e.value,edit:p}:void 0});continue}let te=!!r&&!m&&i.has(g)&&!a.has(g)||t.isOpen(h,n);if(c.push({id:ee,kind:`node`,depth:f,path:h,label:e.label,text:mM(_),container:_,open:te}),!te)continue;let ne=t.level(h,n)??(_.collapsed?void 0:e.value),re=[...d,_.kind];ne===void 0?t.errors().has(ee)?c.push({...u(h,f+1,`error`),text:t.errors().get(ee)}):c.push(u(h,f+1,`loading`)):l(ne,h,re,f+1,bM(p,_),m||a.has(g))}g>0&&(!r||m)&&c.push({...u(o,f,`more`),more:g,listed:h.length})},u=(e,t,r)=>({id:`${hM(e,n)}:${r}`,kind:r,depth:t,path:e,label:``,text:``});return l(this.rootValue(),this.rootPath(),[e.kind],0,s?bM(o.editInside??null,e):null,!r),c});readWhole=async()=>{let e=await this.store().read(this.rootPath(),tM.depth,tM.limit);return e.ok?IM(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 mM(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=k({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&&j(0,MM,8,12)(1,NM,1,5,`app-prop-value`,0),e&2){let e;M((e=t.root())?0:1,e)}},dependencies:[$j],styles:[`[_nghost-%COMP%] { +}`]})},oM=1e3,sM={depth:5,limit:100},cM=`[redacted]`;function lM(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function uM(e){return lM(e)&&typeof e.$more==`number`&&Object.keys(e).length===1}function dM(e){return lM(e)&&typeof e.$collapsed==`string`&&typeof e.size==`number`&&Object.keys(e).length===2}function fM(e){return e===`Array`?`array`:e===`Map`?`map`:e===`Set`?`set`:`object`}function pM(e){return e.$type===`Map`&&Array.isArray(e.entries)}function mM(e){return e.$type===`Set`&&Array.isArray(e.values)}function hM(e){return Object.keys(e).filter(e=>e!==`$type`&&e!==`$more`)}function gM(e){if(!e||typeof e!=`object`)return null;if(dM(e))return e.size<=0?null:{kind:fM(e.$collapsed),type:e.$collapsed,size:e.size,collapsed:!0};if(uM(e))return null;if(Array.isArray(e)){let t=e.at(-1),n=uM(t)?t.$more:0,r=e.length-+!!n+n;return r?{kind:`array`,type:`Array`,size:r,collapsed:!1}:null}let t=e;if(pM(t)||mM(t)){let e=typeof t.size==`number`?t.size:0,n=pM(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=hM(t).length+n,i=typeof t.$type==`string`?t.$type:`Object`;return r?{kind:`object`,type:i,size:r,collapsed:!1}:null}function _M(e){if(typeof e==`string`)return JSON.stringify(e);let t=gM(e);if(t)return bM(t);try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function vM(e){let t=gM(e);if(!t||t.collapsed)return{children:[],more:0};if(Array.isArray(e)){let n=(uM(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:_M(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:hM(n).map(e=>({key:e,label:e,value:n[e]})),more:typeof n.$more==`number`?n.$more:0}}function yM(e,t,n){return`${e} ${e===1?t:n}`}function bM(e){let t={array:yM(e.size,`item`,`items`),object:yM(e.size,`key`,`keys`),map:yM(e.size,`entry`,`entries`),set:yM(e.size,`value`,`values`)}[e.kind];return`${e.type} (${t})`}function xM(e,t){return JSON.stringify(t===void 0?e:[t,...e])}function SM(e,t){return e.map((e,n)=>n===0?e:(t?t[n-1]!==`object`:/^\d+$/.test(e))?`[${e}]`:`.${e}`).join(``)}function CM(e){return e.every(e=>e&&e===e.trim()&&!/[.[\]]/.test(e))?e.join(`.`):null}var wM=/^\[(Getter|Unreadable|Circular|Truncated|Function\b.*|Promise)\]$/;function TM(e){return e===null||typeof e==`boolean`?!0:typeof e==`number`?Number.isFinite(e):typeof e==`string`&&e!==cM&&!wM.test(e)&&!e.endsWith(`…`)}function EM(e,t){return!e||t.kind===`map`||t.kind===`set`||e===`signal`&&t.kind===`object`&&t.type!==`Object`?null:e}function DM(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=xM(e);if(!(s.has(r)||a.length>=i)){s.add(r);for(let r of vM(t).children){let t=[...e,r.key];if(r.label.toLowerCase().includes(o)&&a.push(t),!gM(r.value))continue;let i=n(t)??(gM(r.value)?.collapsed?void 0:r.value);i!==void 0&&c(t,i)}}};return c(e,n(e)??t),a}var OM=(e,t)=>t.id;function kM(e,t){if(e&1){let e=B();F(0,`button`,2),V(`click`,function(){C(e);let t=U().$implicit;return w(U(3).toggle(t))}),T(),F(1,`svg`,3),L(2,`path`,4),I(),gs(),F(3,`span`,14),G(4),I(),F(5,`span`,5),G(6),I()()}if(e&2){let e=U().$implicit;k(`aria-expanded`,e.open)(`aria-label`,e.label+`: `+e.text),D(4),q(``,e.label,`:`),D(2),K(e.text)}}function AM(e,t){if(e&1&&L(0,`app-prop-value`,15),e&2){let e=U(5);P(`prop`,t)(`componentId`,e.componentId())(`pageId`,e.pageId())(`rpc`,e.rpc())(`writes`,e.writes())}}function jM(e,t){if(e&1&&(F(0,`span`,16),G(1),I()),e&2){let e=U(2).$implicit;D(),K(e.text)}}function MM(e,t){if(e&1&&(F(0,`span`,14),G(1),I(),A(2,AM,1,5,`app-prop-value`,15)(3,jM,2,1,`span`,16)),e&2){let e,t=U().$implicit;D(),q(``,t.label,`:`),D(),j((e=t.edit)?2:3,e)}}function NM(e,t){if(e&1){let e=B();F(0,`button`,17),V(`click`,function(){C(e);let t=U().$implicit;return w(U(3).more(t))}),G(1),F(2,`span`,18),G(3),I()()}if(e&2){let e=U().$implicit,t=U(3);D(),q(` Show `,t.step(e),` more `),D(2),q(`(`,e.more,` not listed)`)}}function PM(e,t){e&1&&(F(0,`span`,12),G(1,`Reading from the page…`),I())}function FM(e,t){if(e&1&&(F(0,`span`,13),G(1),I()),e&2){let e=U().$implicit;D(),K(e.text)}}function IM(e,t){if(e&1&&(F(0,`li`,9),A(1,kM,7,4,`button`,10)(2,MM,4,2)(3,NM,4,2,`button`,11)(4,PM,2,0,`span`,12)(5,FM,2,1,`span`,13),I()),e&2){let e,n=t.$implicit;p_(`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 LM(e,t){if(e&1&&(F(0,`ul`,7),M(1,IM,6,3,`li`,8,OM),I()),e&2){let e=U(2);P(`id`,e.listId),k(`aria-label`,e.prop().name+` entries`),D(),N(e.rows())}}function RM(e,t){if(e&1){let e=B();F(0,`div`,1)(1,`button`,2),V(`click`,function(){return C(e),w(U().toggleRoot())}),T(),F(2,`svg`,3),L(3,`path`,4),I(),gs(),F(4,`span`,5),G(5),I()(),L(6,`app-prop-value`,6),I(),A(7,LM,3,2,`ul`,7)}if(e&2){let e=t,n=U();D(),k(`aria-expanded`,n.rootOpen())(`aria-controls`,n.rootOpen()?n.listId:null)(`aria-label`,n.prop().name+`: `+n.summaryOf(e)),D(4),K(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 zM(e,t){if(e&1&&L(0,`app-prop-value`,0),e&2){let e=U();P(`prop`,e.prop())(`componentId`,e.componentId())(`pageId`,e.pageId())(`rpc`,e.rpc())(`writes`,e.writes())}}var BM=0;function VM(e){if(e===void 0)return`undefined`;try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function HM(e){if(Array.isArray(e))return e.every(HM);if(e&&typeof e==`object`){let t=e;return![`$collapsed`,`$more`,`$type`].some(e=>Object.hasOwn(t,e))&&Object.values(t).every(HM)}return TM(e)}var UM=class e{prop=$.required();store=$.required();componentId=$.required();pageId=$(null);rpc=$(null);writes=$(!1);directive=$(void 0);query=$(``);listId=`value-tree-${++BM}`;host=S(Ll);pendingMore=null;constructor(){Av(()=>{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(()=>gM(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 DM(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(xM(e));for(let t=2;t<=e.length;t++)i.add(xM(e.slice(0,t)))}let o=this.prop(),s=this.writes()&&n===void 0,c=[],l=(e,o,d,f,p,m)=>{let{children:h,more:g}=vM(e);for(let e of h){let h=[...o,e.key],g=xM(h);if(r&&!m&&!i.has(g))continue;let _=gM(e.value),ee=xM(h,n);if(!_){let t=p&&TM(e.value)?CM(h):null;c.push({id:ee,kind:`leaf`,depth:f,path:h,label:e.label,text:VM(e.value),edit:s&&t&&p?{name:SM(h,[...d]),prop:t,value:e.value,edit:p}:void 0});continue}let te=!!r&&!m&&i.has(g)&&!a.has(g)||t.isOpen(h,n);if(c.push({id:ee,kind:`node`,depth:f,path:h,label:e.label,text:bM(_),container:_,open:te}),!te)continue;let ne=t.level(h,n)??(_.collapsed?void 0:e.value),re=[...d,_.kind];ne===void 0?t.errors().has(ee)?c.push({...u(h,f+1,`error`),text:t.errors().get(ee)}):c.push(u(h,f+1,`loading`)):l(ne,h,re,f+1,EM(p,_),m||a.has(g))}g>0&&(!r||m)&&c.push({...u(o,f,`more`),more:g,listed:h.length})},u=(e,t,r)=>({id:`${xM(e,n)}:${r}`,kind:r,depth:t,path:e,label:``,text:``});return l(this.rootValue(),this.rootPath(),[e.kind],0,s?EM(o.editInside??null,e):null,!r),c});readWhole=async()=>{let e=await this.store().read(this.rootPath(),sM.depth,sM.limit);return e.ok?HM(e.value)?{value:e.value}:{error:`Too large to edit as a whole. Open it to edit the values inside.`}:{error:e.error??`The page did not read it.`}};summaryOf(e){return bM(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,RM,8,12)(1,zM,1,5,`app-prop-value`,0),e&2){let e;j((e=t.root())?0:1,e)}},dependencies:[aM],styles:[`[_nghost-%COMP%] { display: block; min-width: 0; } @@ -2202,7 +2226,7 @@ button.edit[_ngcontent-%COMP%] { .more[_ngcontent-%COMP%] { transition: none; } -}`]})};function RM(e,t){return e.length>t.length&&e.startsWith(`${t.slice(0,-1)},`)}var zM=class{sender;target={rpc:null,pageId:null,componentId:null};fetched=D(new Map);pushed=D({});open=D(new Set);loading=D(new Set);errors=D(new Map);limits=new Map;generation=0;constructor(e){this.sender=e}follow(e,t){let n=e.componentId===this.target.componentId&&e.pageId===this.target.pageId;this.target=e,n||(this.generation++,this.fetched.set(new Map),this.open.set(new Set),this.loading.set(new Set),this.errors.set(new Map),this.limits.clear()),this.pushed.set(t??{})}level(e,t){let n=hM(e,t),r=this.pushed();return Object.hasOwn(r,n)?r[n]:this.fetched().get(n)}isOpen(e,t){return this.open().has(hM(e,t))}toggle(e,t,n){let r=hM(e,t),i=new Set(this.open());if(i.has(r)){for(let e of i)(e===r||RM(e,r))&&i.delete(e);this.open.set(i),this.send({path:e,directive:t,forget:!0});return}i.add(r),this.open.set(i),n&&this.load(e,t,this.limits.get(r)??30)}more(e,t,n){let r=hM(e,t),i=Math.min(eM,Math.max(n,this.limits.get(r)??0)+100);this.limits.set(r,i),this.load(e,t,i)}async read(e,t,n){return this.send({path:e,depth:t,limit:n})}async load(e,t,n){let r=hM(e,t),i=this.generation;this.loading.update(e=>new Set(e).add(r));let a=await this.send({path:e,directive:t,limit:n,watch:!0});i===this.generation&&(this.loading.update(e=>{let t=new Set(e);return t.delete(r),t}),this.errors.update(e=>{let t=new Map(e);return a.ok?t.delete(r):t.set(r,a.error??`The page did not read it.`),t}),a.ok&&this.fetched.update(e=>new Map(e).set(r,a.value)))}async send(e){if(this.sender){if(e.forget)return{ok:!0};let{directive:t,watch:n,...r}=e;try{return await this.sender(r)}catch{return{error:`The devtools server did not answer. Try again.`}}}let{rpc:t,pageId:n,componentId:r}=this.target;if(!t||!n||!r)return{error:`No live page to read from.`};let{directive:i,...a}=e;try{return await t.scope(`pangular`).rpc.call(`request-component-value`,{pageId:n,request:{id:r,...a,...i===void 0?{}:{directive:i}}})??{}}catch{return{error:`The devtools server did not answer. Try again.`}}}};function BM(e,t){if(e&1&&(z(0,`span`,1),K(1),B()),e&2){let e=W(2);O(),J(`: `,e.label())}}function VM(e,t){if(e&1&&(z(0,`span`,1),K(1),B()),e&2){let e=W(3);O(),J(`: `,e.label())}}function HM(e,t){if(e&1){let e=V();z(0,`button`,4),U(`click`,function(){return w(e),T(W(2).store(`log`))}),K(1,` Log to console `),j(2,VM,2,1,`span`,1),B()}if(e&2){let e=W(2);Mg(`disabled`,e.busy()||!e.rpc()||!e.pageId()),O(2),M(e.label()?2:-1)}}function UM(e,t){if(e&1){let e=V();z(0,`button`,0),U(`click`,function(){return w(e),T(W().store())}),K(1,` Store as global `),j(2,BM,2,1,`span`,1),B(),j(3,HM,3,2,`button`,2),z(4,`span`,3),K(5),B()}if(e&2){let e=W();Mg(`disabled`,e.busy()||!e.rpc()||!e.pageId()),O(2),M(e.label()?2:-1),O(),M(e.canLog()?3:-1),O(2),q(e.message())}}var WM=class e{rpc=$(null);pageId=$(null);target=$.required();label=$(``);canLog=$(!1);staticReport=X(()=>YT(this.rpc()));busy=D(!1);message=D(``);async store(e=`store`){let t=this.rpc(),n=this.pageId();if(t&&n){this.busy.set(!0),this.message.set(``);try{let r=await t.scope(`pangular`).rpc.call(`request-console-global`,{pageId:n,target:this.target(),...e===`log`?{mode:e}:{}}),i=e===`log`?r?.ok?`Logged in the page console.`:`Not logged.`:r?.ok&&r.name?`Stored as ${r.name}.`:`Not stored.`;this.message.set(r?.message||i)}catch{this.message.set(`Could not reach the page.`)}finally{this.busy.set(!1)}}}static ɵfac=function(t){return new(t||e)};static ɵcmp=k({type:e,selectors:[[`app-store-global`]],inputs:{rpc:[1,`rpc`],pageId:[1,`pageId`],target:[1,`target`],label:[1,`label`],canLog:[1,`canLog`]},decls:1,vars:1,consts:[[`type`,`button`,1,`store`,3,`click`,`disabled`],[1,`sr-only`],[`type`,`button`,1,`store`,`log`,3,`disabled`],[`role`,`status`,1,`status`],[`type`,`button`,1,`store`,`log`,3,`click`,`disabled`]],template:function(e,t){e&1&&j(0,UM,6,4),e&2&&M(t.staticReport()?-1:0)},styles:[`[_nghost-%COMP%] { +}`]})};function WM(e,t){return e.length>t.length&&e.startsWith(`${t.slice(0,-1)},`)}var GM=class{sender;target={rpc:null,pageId:null,componentId:null};fetched=E(new Map);pushed=E({});open=E(new Set);loading=E(new Set);errors=E(new Map);limits=new Map;generation=0;constructor(e){this.sender=e}follow(e,t){let n=e.componentId===this.target.componentId&&e.pageId===this.target.pageId;this.target=e,n||(this.generation++,this.fetched.set(new Map),this.open.set(new Set),this.loading.set(new Set),this.errors.set(new Map),this.limits.clear()),this.pushed.set(t??{})}level(e,t){let n=xM(e,t),r=this.pushed();return Object.hasOwn(r,n)?r[n]:this.fetched().get(n)}isOpen(e,t){return this.open().has(xM(e,t))}toggle(e,t,n){let r=xM(e,t),i=new Set(this.open());if(i.has(r)){for(let e of i)(e===r||WM(e,r))&&i.delete(e);this.open.set(i),this.send({path:e,directive:t,forget:!0});return}i.add(r),this.open.set(i),n&&this.load(e,t,this.limits.get(r)??30)}more(e,t,n){let r=xM(e,t),i=Math.min(oM,Math.max(n,this.limits.get(r)??0)+100);this.limits.set(r,i),this.load(e,t,i)}async read(e,t,n){return this.send({path:e,depth:t,limit:n})}async load(e,t,n){let r=xM(e,t),i=this.generation;this.loading.update(e=>new Set(e).add(r));let a=await this.send({path:e,directive:t,limit:n,watch:!0});i===this.generation&&(this.loading.update(e=>{let t=new Set(e);return t.delete(r),t}),this.errors.update(e=>{let t=new Map(e);return a.ok?t.delete(r):t.set(r,a.error??`The page did not read it.`),t}),a.ok&&this.fetched.update(e=>new Map(e).set(r,a.value)))}async send(e){if(this.sender){if(e.forget)return{ok:!0};let{directive:t,watch:n,...r}=e;try{return await this.sender(r)}catch{return{error:`The devtools server did not answer. Try again.`}}}let{rpc:t,pageId:n,componentId:r}=this.target;if(!t||!n||!r)return{error:`No live page to read from.`};let{directive:i,...a}=e;try{return await t.scope(`pangular`).rpc.call(`request-component-value`,{pageId:n,request:{id:r,...a,...i===void 0?{}:{directive:i}}})??{}}catch{return{error:`The devtools server did not answer. Try again.`}}}};function KM(e,t){if(e&1&&(R(0,`span`,1),G(1),z()),e&2){let e=U(2);D(),q(`: `,e.label())}}function qM(e,t){if(e&1&&(R(0,`span`,1),G(1),z()),e&2){let e=U(3);D(),q(`: `,e.label())}}function JM(e,t){if(e&1){let e=B();R(0,`button`,4),H(`click`,function(){return C(e),w(U(2).store(`log`))}),G(1,` Log to console `),A(2,qM,2,1,`span`,1),z()}if(e&2){let e=U(2);Og(`disabled`,e.busy()||!e.rpc()||!e.pageId()),D(2),j(e.label()?2:-1)}}function YM(e,t){if(e&1){let e=B();R(0,`button`,0),H(`click`,function(){return C(e),w(U().store())}),G(1,` Store as global `),A(2,KM,2,1,`span`,1),z(),A(3,JM,3,2,`button`,2),R(4,`span`,3),G(5),z()}if(e&2){let e=U();Og(`disabled`,e.busy()||!e.rpc()||!e.pageId()),D(2),j(e.label()?2:-1),D(),j(e.canLog()?3:-1),D(2),K(e.message())}}var XM=class e{rpc=$(null);pageId=$(null);target=$.required();label=$(``);canLog=$(!1);staticReport=X(()=>UT(this.rpc()));busy=E(!1);message=E(``);async store(e=`store`){let t=this.rpc(),n=this.pageId();if(t&&n){this.busy.set(!0),this.message.set(``);try{let r=await t.scope(`pangular`).rpc.call(`request-console-global`,{pageId:n,target:this.target(),...e===`log`?{mode:e}:{}}),i=e===`log`?r?.ok?`Logged in the page console.`:`Not logged.`:r?.ok&&r.name?`Stored as ${r.name}.`:`Not stored.`;this.message.set(r?.message||i)}catch{this.message.set(`Could not reach the page.`)}finally{this.busy.set(!1)}}}static ɵfac=function(t){return new(t||e)};static ɵcmp=O({type:e,selectors:[[`app-store-global`]],inputs:{rpc:[1,`rpc`],pageId:[1,`pageId`],target:[1,`target`],label:[1,`label`],canLog:[1,`canLog`]},decls:1,vars:1,consts:[[`type`,`button`,1,`store`,3,`click`,`disabled`],[1,`sr-only`],[`type`,`button`,1,`store`,`log`,3,`disabled`],[`role`,`status`,1,`status`],[`type`,`button`,1,`store`,`log`,3,`click`,`disabled`]],template:function(e,t){e&1&&A(0,YM,6,4),e&2&&j(t.staticReport()?-1:0)},styles:[`[_nghost-%COMP%] { display: inline-flex; flex-wrap: wrap; align-items: center; @@ -2251,7 +2275,7 @@ button.edit[_ngcontent-%COMP%] { .status[_ngcontent-%COMP%]:empty { display: none; -}`]})},GM=(e,t)=>t.block.id,KM=(e,t)=>t.kind;function qM(e,t){if(e&1&&K(0),e&2){let e=W().$implicit;J(` `,e.label,` `)}}function JM(e,t){if(e&1&&(K(0),z(1,`span`,11),K(2),B()),e&2){let e=W().$implicit;J(` `,e.kind,` `),O(2),J(``,e.seconds,`s`)}}function YM(e,t){if(e&1&&(z(0,`span`,8),j(1,qM,1,1)(2,JM,3,2),B()),e&2){let e=t.$implicit;v_(`note-`+e.kind),A(`title`,e.text),O(),M(e.seconds===void 0?1:2)}}function XM(e,t){e&1&&(z(0,`span`,8),K(1,`hydrated`),B())}function ZM(e,t){e&1&&(z(0,`span`,8),K(1,`@error block`),B())}function QM(e,t){if(e&1&&(z(0,`span`,9),K(1),B()),e&2){let e=W().$implicit;O(),q(e.timings)}}function $M(e,t){if(e&1){let e=V();z(0,`li`)(1,`button`,4),U(`click`,function(){let t=w(e).$implicit;return T(W(2).showOwner.emit(t.block))})(`focus`,function(){let t=w(e).$implicit;return T(W(2).highlight.emit(t.block))})(`blur`,function(){return w(e),T(W(2).highlight.emit(null))})(`mouseenter`,function(){let t=w(e).$implicit;return T(W(2).highlight.emit(t.block))})(`mouseleave`,function(){return w(e),T(W(2).highlight.emit(null))}),z(2,`span`,5),K(3),B(),z(4,`span`,6),K(5),B(),N(6,YM,3,4,`span`,7,KM),j(8,XM,2,0,`span`,8),j(9,ZM,2,0,`span`,8),j(10,QM,2,1,`span`,9),z(11,`span`,10),K(12),B()()()}if(e&2){let e=t.$implicit;O(),A(`aria-disabled`,e.block.owner?null:`true`),O(2),q(e.block.owner?.name??`Unknown component`),O(),v_(`defer-state-`+e.block.state),O(),q(e.block.state),O(),P(e.notes),O(2),M(e.block.hydration===`hydrated`?8:-1),O(),M(e.block.hasErrorBlock?9:-1),O(),M(e.timings?10:-1),O(2),q(e.block.triggers.join(`, `)||`no triggers`)}}function eN(e,t){if(e&1&&(z(0,`section`,0)(1,`h2`,1),K(2,` Defer blocks `),z(3,`span`,2),K(4),B()(),z(5,`ul`,3),N(6,$M,13,9,`li`,null,GM),B()()),e&2){let e=W();O(4),Y(``,e.rows().length,``,e.truncated()?`+`:``),O(2),P(e.rows())}}function tN(e){return e<1e3?`${e}ms`:`${Number((e/1e3).toFixed(2))}s`}function nN(e){let t=[],n=e.placeholder?.minimumTime;n!=null&&t.push(`placeholder min ${tN(n)}`);let r=[e.loading?.afterTime==null?``:`after ${tN(e.loading.afterTime)}`,e.loading?.minimumTime==null?``:`min ${tN(e.loading.minimumTime)}`].filter(Boolean);return r.length&&t.push(`loading ${r.join(`, `)}`),t.join(` · `)}var rN=class e{blocks=$([]);truncated=$(!1);clockOffset=$(0);showOwner=Sv();highlight=Sv();now=D(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:RT({...t,since:t.since||e},e),timings:nN(t)}))});constructor(){let e,t=()=>{clearInterval(e),e=void 0};hc(()=>{if(!this.waiting())return t();e===void 0&&(this.now.set(Date.now()),e=setInterval(()=>this.now.set(Date.now()),1e3))}),C(Os).onDestroy(t)}static ɵfac=function(t){return new(t||e)};static ɵcmp=k({type:e,selectors:[[`app-defer-blocks`]],inputs:{blocks:[1,`blocks`],truncated:[1,`truncated`],clockOffset:[1,`clockOffset`]},outputs:{showOwner:`showOwner`,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`],[`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,`triggers`,`mono`],[`aria-hidden`,`true`]],template:function(e,t){e&1&&j(0,eN,8,2,`section`,0),e&2&&M(t.rows().length?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})},ZM=(e,t)=>t.block.id,QM=(e,t)=>t.kind,$M=(e,t)=>t.id;function eN(e,t){if(e&1&&G(0),e&2){let e=U().$implicit;q(` `,e.label,` `)}}function tN(e,t){if(e&1&&(G(0),R(1,`span`,18),G(2),z()),e&2){let e=U().$implicit;q(` `,e.kind,` `),D(2),q(``,e.seconds,`s`)}}function nN(e,t){if(e&1&&(R(0,`span`,9),A(1,eN,1,1)(2,tN,3,2),z()),e&2){let e=t.$implicit;m_(`note-`+e.kind),k(`title`,e.text),D(),j(e.seconds===void 0?1:2)}}function rN(e,t){if(e&1&&(R(0,`span`,9),G(1),z()),e&2){let e=U().$implicit;k(`title`,e.block.hydratedAt===void 0?`The block hydrated before the devtools attached to the page.`:null),D(),K(e.hydrated)}}function iN(e,t){e&1&&(R(0,`span`,9),G(1,`@error block`),z())}function aN(e,t){if(e&1&&(R(0,`span`,10),G(1),z()),e&2){let e=U().$implicit;D(),K(e.timings)}}function oN(e,t){e&1&&(R(0,`span`,11),G(1,`mismatch`),z())}function sN(e,t){if(e&1&&(R(0,`dt`),G(1,`Template of`),z(),R(2,`dd`,19),G(3),z()),e&2){let e=t;D(3),J(``,e.name,` <`,e.tag,`>`)}}function cN(e,t){if(e&1&&(R(0,`dt`),G(1,`In this state since`),z(),R(2,`dd`),G(3),z()),e&2){let e=U(2).$implicit,t=U(2);D(3),K(t.clock(e.block.since))}}function lN(e,t){if(e&1&&(R(0,`dt`),G(1,`Hydrated`),z(),R(2,`dd`),G(3),z()),e&2){let e=U(2).$implicit,t=U(2);D(3),q(` `,e.block.hydratedAt===void 0?`Before the devtools attached`:t.clock(e.block.hydratedAt),` `)}}function uN(e,t){if(e&1&&(R(0,`span`,23),G(1),z()),e&2){let e=U().$implicit;D(),K(e.hydration)}}function dN(e,t){if(e&1&&(R(0,`li`)(1,`span`,22),G(2),z(),R(3,`span`,19),G(4),z(),A(5,uN,2,1,`span`,23),z()),e&2){let e=t.$implicit,n=U(5);D(2),K(n.clock(e.at)),D(2),K(e.state),D(),j(e.hydration===`not-configured`?-1:5)}}function fN(e,t){if(e&1&&(R(0,`h3`,20),G(1,`Transitions`),z(),R(2,`ol`,21),M(3,dN,6,3,`li`,null,ug),z()),e&2){let e=U(2).$implicit;D(3),N(e.block.transitions)}}function pN(e,t){if(e&1){let e=B();R(0,`li`)(1,`button`,25),H(`click`,function(){let t=C(e).$implicit;return w(U(5).showNode.emit(t.id))}),G(2),R(3,`span`,19),G(4),z()()()}if(e&2){let e=t.$implicit;D(2),q(` Show `,e.name,` `),D(2),q(`<`,e.tag,`>`)}}function mN(e,t){if(e&1&&(R(0,`h3`,20),G(1,`Hydration mismatches`),z(),R(2,`ul`,24),M(3,pN,5,2,`li`,null,$M),z()),e&2){let e=U(2).$implicit;D(3),N(e.mismatches)}}function hN(e,t){if(e&1&&(R(0,`div`,17)(1,`dl`)(2,`dt`),G(3,`Block`),z(),R(4,`dd`,19),G(5),z(),A(6,sN,4,2),A(7,cN,4,1),A(8,lN,4,1),R(9,`dt`),G(10,`Root elements`),z(),R(11,`dd`),G(12),z(),R(13,`dt`),G(14,`Triggers`),z(),R(15,`dd`,19),G(16),z()(),A(17,fN,5,0),A(18,mN,5,0),z()),e&2){let e,t=U().$implicit;Og(`id`,`defer-detail-`+t.block.id),D(5),K(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),K(t.block.rootIds.length||`None rendered`),D(4),K(t.block.triggers.join(`, `)||`None`),D(),j(t.block.transitions?.length?17:-1),D(),j(t.mismatches.length?18:-1)}}function gN(e,t){if(e&1){let e=B();R(0,`li`,4)(1,`button`,5),H(`click`,function(){let t=C(e).$implicit;return w(U(2).showOwner.emit(t.block))})(`focus`,function(){let t=C(e).$implicit;return w(U(2).highlight.emit(t.block))})(`blur`,function(){return C(e),w(U(2).highlight.emit(null))})(`mouseenter`,function(){let t=C(e).$implicit;return w(U(2).highlight.emit(t.block))})(`mouseleave`,function(){return C(e),w(U(2).highlight.emit(null))}),R(2,`span`,6),G(3),z(),R(4,`span`,7),G(5),z(),M(6,nN,3,4,`span`,8,QM),A(8,rN,2,2,`span`,9),A(9,iN,2,0,`span`,9),A(10,aN,2,1,`span`,10),A(11,oN,2,0,`span`,11),R(12,`span`,12),G(13),z()(),R(14,`button`,13),H(`click`,function(){let t=C(e).$implicit;return w(U(2).toggle(t.block.id))}),T(),R(15,`svg`,14),Sg(16,`path`,15),z(),gs(),R(17,`span`,16),G(18),z()(),A(19,hN,19,9,`div`,17),z()}if(e&2){let e=t.$implicit,n=U(2);D(),k(`aria-disabled`,e.block.owner?null:`true`),D(2),K(e.block.owner?.name??`Unknown component`),D(),m_(`defer-state-`+e.block.state),D(),K(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),K(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),q(`Details of the block in `,e.block.owner?.name??`an unknown component`),D(),j(n.isOpen(e.block.id)?19:-1)}}function _N(e,t){if(e&1&&(R(0,`section`,0)(1,`h2`,1),G(2,` Defer blocks `),R(3,`span`,2),G(4),z()(),R(5,`ul`,3),M(6,gN,20,14,`li`,4,ZM),z()()),e&2){let e=U();D(4),J(``,e.rows().length,``,e.truncated()?`+`:``),D(2),N(e.rows())}}function vN(e){return e<1e3?`${e}ms`:`${Number((e/1e3).toFixed(2))}s`}function yN(e){let t=[],n=e.placeholder?.minimumTime;n!=null&&t.push(`placeholder min ${vN(n)}`);let r=[e.loading?.afterTime==null?``:`after ${vN(e.loading.afterTime)}`,e.loading?.minimumTime==null?``:`min ${vN(e.loading.minimumTime)}`].filter(Boolean);return r.length&&t.push(`loading ${r.join(`, `)}`),t.join(` · `)}var bN=class e{blocks=$([]);truncated=$(!1);clockOffset=$(0);showOwner=gv();mismatches=$([]);showNode=gv();open=E(new Set);highlight=gv();now=E(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:MT({...t,since:t.since||e},e),timings:yN(t),mismatches:this.mismatches().filter(e=>t.rootIds.includes(e.id)),hydrated:t.hydration===`hydrated`?kT(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 hD(e)}constructor(){let e,t=()=>{clearInterval(e),e=void 0};pc(()=>{if(!this.waiting())return t();e===void 0&&(this.now.set(Date.now()),e=setInterval(()=>this.now.set(Date.now()),1e3))}),S(Es).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,_N,8,2,`section`,0),e&2&&j(t.rows().length?0:-1)},styles:[`[_nghost-%COMP%] { display: block; } @@ -2294,6 +2318,102 @@ button.edit[_ngcontent-%COMP%] { list-style: none; } +.defer-item[_ngcontent-%COMP%] { + display: grid; + grid-template-columns: minmax(0, 1fr) var(--%NS%control-h); + gap: 6px; +} + +.defer-toggle[_ngcontent-%COMP%] { + width: var(--%NS%control-h); + padding: 0; + background: var(--%NS%surface); +} + +.defer-toggle[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] { + width: 14px; + height: 14px; + fill: none; + stroke: currentColor; + stroke-width: 2; + transition: transform 150ms var(--%NS%ease); +} + +.defer-toggle[aria-expanded=true][_ngcontent-%COMP%] svg[_ngcontent-%COMP%] { + transform: rotate(90deg); +} + +@media (prefers-reduced-motion: reduce) { + .defer-toggle[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] { + transition: none; + } +} +.defer-toggle[_ngcontent-%COMP%]:focus-visible { + outline: 2px solid var(--%NS%accent); + outline-offset: 2px; +} + +.defer-detail[_ngcontent-%COMP%] { + grid-column: 1/-1; + padding: 8px 12px; + border: 1px solid var(--%NS%border); + border-radius: var(--%NS%radius-sm); + background: var(--%NS%bg); + font-size: 12px; +} + +.defer-detail[_ngcontent-%COMP%] dl[_ngcontent-%COMP%] { + display: grid; + grid-template-columns: max-content minmax(0, 1fr); + gap: 4px 12px; + margin: 0; +} + +.defer-detail[_ngcontent-%COMP%] dt[_ngcontent-%COMP%] { + color: var(--%NS%text-2); +} + +.defer-detail[_ngcontent-%COMP%] dd[_ngcontent-%COMP%] { + min-width: 0; + margin: 0; + color: var(--%NS%text); + overflow-wrap: anywhere; +} + +.detail-label[_ngcontent-%COMP%] { + color: var(--%NS%text-3); + font-size: 11px; + font-weight: 600; + letter-spacing: 0.08em; + text-transform: uppercase; + margin: 10px 0 4px; +} + +.transitions[_ngcontent-%COMP%], +.mismatch-links[_ngcontent-%COMP%] { + display: grid; + gap: 4px; + margin: 0; + padding: 0; + list-style: none; +} + +.transitions[_ngcontent-%COMP%] li[_ngcontent-%COMP%] { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.when[_ngcontent-%COMP%], +.muted[_ngcontent-%COMP%] { + color: var(--%NS%text-2); +} + +.mismatch-links[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:focus-visible { + outline: 2px solid var(--%NS%accent); + outline-offset: 2px; +} + .defer-row[_ngcontent-%COMP%] { justify-content: flex-start; flex-wrap: wrap; @@ -2393,7 +2513,7 @@ button.edit[_ngcontent-%COMP%] { min-width: 0; text-overflow: ellipsis; white-space: nowrap; -}`]})},iN=(e,t)=>t.id;function aN(e,t){if(e&1&&(I(0,`p`,4),K(1),L()),e&2){let e=W(2);O(),J(`The page has more @for blocks than the `,e.length,` listed.`)}}function oN(e,t){e&1&&(I(0,`span`,9),K(1,`@empty showing`),L())}function sN(e,t){e&1&&(I(0,`span`,10),K(1,`@empty`),L())}function cN(e,t){e&1&&(I(0,`span`,10),K(1,`renders nothing`),L())}function lN(e,t){if(e&1){let e=V();I(0,`li`)(1,`button`,6),H(`click`,function(){let t=w(e).$implicit;return T(W(3).showOwner.emit(t))})(`focus`,function(){let t=w(e).$implicit,n=W(3);return T(n.highlight.emit(n.target(t)))})(`blur`,function(){return w(e),T(W(3).highlight.emit(null))})(`mouseenter`,function(){let t=w(e).$implicit,n=W(3);return T(n.highlight.emit(n.target(t)))})(`mouseleave`,function(){return w(e),T(W(3).highlight.emit(null))}),I(2,`span`,7),K(3),L(),I(4,`span`,8),K(5),L(),j(6,oN,2,0,`span`,9)(7,sN,2,0,`span`,10)(8,cN,2,0,`span`,10),I(9,`span`,11),K(10),L()()()}if(e&2){let e=t.$implicit,n=W(3);O(),A(`aria-disabled`,e.owner?null:`true`),O(2),q(e.owner?.name??`Unknown component`),O(2),Y(` `,e.count,` `,e.count===1?`item`:`items`,` `),O(),M(e.showingEmpty?6:e.hasEmptyBlock?7:e.count===0?8:-1),O(4),q(n.trackLabel(e))}}function uN(e,t){if(e&1&&(I(0,`section`,1)(1,`h2`,2),K(2,` @for blocks `),I(3,`span`,3),K(4),L()(),j(5,aN,2,1,`p`,4),I(6,`ul`,5),N(7,lN,11,6,`li`,null,iN),L()()),e&2){let e=W(),t=W();O(4),q(t.truncated()?e.length+`+`:e.length),O(),M(t.truncated()?5:-1),O(2),P(e)}}function dN(e,t){e&1&&j(0,uN,9,2,`section`,1),e&2&&M(t.length?0:-1)}function fN(e,t){e&1&&R(0,`app-angular-unavailable`,0),e&2&&F(`page`,W().angular())}var pN={$index:`track $index`,item:`track item`,function:`track expression`},mN=class e{blocks=$(void 0);truncated=$(!1);supported=$(null);angular=$(null);showOwner=Sv();highlight=Sv();target(e){return e.rootIds[0]??e.owner?.id??null}trackLabel(e){return e.track?pN[e.track]:`track unknown`}static ɵfac=function(t){return new(t||e)};static ɵcmp=k({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&&j(0,dN,1,1)(1,fN,1,1,`app-angular-unavailable`,0),e&2){let e;M((e=t.blocks())?0:t.supported()===!1?1:-1,e)}},dependencies:[GD],styles:[`[_nghost-%COMP%] { +}`]})},xN=(e,t)=>t.id;function SN(e,t){if(e&1&&(F(0,`p`,4),G(1),I()),e&2){let e=U(2);D(),q(`The page has more @for blocks than the `,e.length,` listed.`)}}function CN(e,t){e&1&&(F(0,`span`,9),G(1,`@empty showing`),I())}function wN(e,t){e&1&&(F(0,`span`,10),G(1,`@empty`),I())}function TN(e,t){e&1&&(F(0,`span`,10),G(1,`renders nothing`),I())}function EN(e,t){if(e&1){let e=B();F(0,`li`)(1,`button`,6),V(`click`,function(){let t=C(e).$implicit;return w(U(3).showOwner.emit(t))})(`focus`,function(){let t=C(e).$implicit,n=U(3);return w(n.highlight.emit(n.target(t)))})(`blur`,function(){return C(e),w(U(3).highlight.emit(null))})(`mouseenter`,function(){let t=C(e).$implicit,n=U(3);return w(n.highlight.emit(n.target(t)))})(`mouseleave`,function(){return C(e),w(U(3).highlight.emit(null))}),F(2,`span`,7),G(3),I(),F(4,`span`,8),G(5),I(),A(6,CN,2,0,`span`,9)(7,wN,2,0,`span`,10)(8,TN,2,0,`span`,10),F(9,`span`,11),G(10),I()()()}if(e&2){let e=t.$implicit,n=U(3);D(),k(`aria-disabled`,e.owner?null:`true`),D(2),K(e.owner?.name??`Unknown component`),D(2),J(` `,e.count,` `,e.count===1?`item`:`items`,` `),D(),j(e.showingEmpty?6:e.hasEmptyBlock?7:e.count===0?8:-1),D(4),K(n.trackLabel(e))}}function DN(e,t){if(e&1&&(F(0,`section`,1)(1,`h2`,2),G(2,` @for blocks `),F(3,`span`,3),G(4),I()(),A(5,SN,2,1,`p`,4),F(6,`ul`,5),M(7,EN,11,6,`li`,null,xN),I()()),e&2){let e=U(),t=U();D(4),K(t.truncated()?e.length+`+`:e.length),D(),j(t.truncated()?5:-1),D(2),N(e)}}function ON(e,t){e&1&&A(0,DN,9,2,`section`,1),e&2&&j(t.length?0:-1)}function kN(e,t){e&1&&L(0,`app-angular-unavailable`,0),e&2&&P(`page`,U().angular())}var AN={$index:`track $index`,item:`track item`,function:`track expression`},jN=class e{blocks=$(void 0);truncated=$(!1);supported=$(null);angular=$(null);showOwner=gv();highlight=gv();target(e){return e.rootIds[0]??e.owner?.id??null}trackLabel(e){return e.track?AN[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,ON,1,1)(1,kN,1,1,`app-angular-unavailable`,0),e&2){let e;j((e=t.blocks())?0:t.supported()===!1?1:-1,e)}},dependencies:[zD],styles:[`[_nghost-%COMP%] { display: block; } @@ -2511,7 +2631,7 @@ button.edit[_ngcontent-%COMP%] { min-width: 0; text-overflow: ellipsis; white-space: nowrap; -}`]})},hN=(e,t)=>t.id;function gN(e,t){if(e&1&&(I(0,`p`,11),K(1),L(),I(2,`h3`,7),K(3,`Still retained`),L(),I(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. `),L()),e&2){let e=W(),t=W();O(),q(t.plural(e.navigations,`navigation`))}}function _N(e,t){e&1&&(I(0,`p`,6),K(1,` This page cannot track destroyed components. It needs WeakRef, FinalizationRegistry and the Angular debug API of a development build. `),L())}function vN(e,t){if(e&1&&(I(0,`span`,18),K(1),L()),e&2){let e=W().$implicit,t=W(4);O(),q(t.plural(e.subscriptions,`open subscription`))}}function yN(e,t){if(e&1&&(I(0,`li`,13)(1,`span`,14),K(2),L(),I(3,`span`,15),K(4),L(),I(5,`span`,16),K(6),L(),I(7,`span`,17),K(8),L(),j(9,vN,2,1,`span`,18),L()),e&2){let e=t.$implicit,n=W(4);O(2),q(e.name),O(2),q(e.route||`/`),O(2),J(``,n.plural(e.navigations,`navigation`),` ago`),O(2),q(n.ageOf(e)),O(),M(e.subscriptions?9:-1)}}function bN(e,t){if(e&1&&(I(0,`p`,6),K(1),L(),I(2,`ul`,12),N(3,yN,10,5,`li`,13,hN),L()),e&2){let e=W(3);O(),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. `),O(2),P(e.retained().slice(0,e.shown))}}function xN(e,t){e&1&&(I(0,`p`,6),K(1,`No destroyed component is still in memory after a few navigations.`),L())}function SN(e,t){if(e&1&&(I(0,`p`,6),K(1),I(2,`span`,19),K(3),L(),K(4,`. Navigate a few times to see whether they stay. `),L()),e&2){let e=W(3);O(),J(` `,e.plural(e.recent().length,`instance`),` destroyed recently and not collected yet: `),O(2),q(e.names(e.recent()))}}function CN(e,t){if(e&1&&(j(0,_N,2,0,`p`,6),I(1,`p`,11),K(2),L(),I(3,`h3`,7),K(4,` Still retained `),I(5,`span`,8),K(6),L()(),j(7,bN,5,2)(8,xN,2,0,`p`,6),j(9,SN,5,2,`p`,6)),e&2){let e=W(),t=W();M(e.support.retention?-1:0),O(2),V_(` `,t.plural(e.navigations,`navigation`),` · `,t.retained().length,` still retained · `,t.plural(e.totals.collected,`instance`),` collected `),O(4),q(t.retained().length),O(),M(t.retained().length?7:8),O(2),M(t.recent().length?9:-1)}}function wN(e,t){if(e&1&&(I(0,`p`,6),K(1,` Off the page but not destroyed (detached views, such as a route reuse cache): `),I(2,`span`,19),K(3),L(),K(4,`. `),L()),e&2){let e=W(2);O(3),q(e.names(e.detached()))}}function TN(e,t){if(e&1&&(I(0,`span`,8),K(1),L()),e&2){let e=W();O(),q(e.subscriptions.length)}}function EN(e,t){if(e&1&&(I(0,`span`,15),K(1),L()),e&2){let e=W().$implicit;O(),q(e.source)}}function DN(e,t){if(e&1&&(I(0,`li`,13)(1,`span`,14),K(2),L(),I(3,`span`,16),K(4),L(),I(5,`span`,18),K(6),L(),j(7,EN,2,1,`span`,15),L()),e&2){let e=t.$implicit;O(2),q(e.name),O(2),J(``,e.count,` open`),O(2),J(` `,e.reason===`instance-destroyed`?`instance destroyed`:`no instance left`,` `),O(),M(e.source?7:-1)}}function ON(e,t){if(e&1&&(I(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. `),L(),I(2,`ul`,12),N(3,DN,8,4,`li`,13,mg),L()),e&2){let e=W(2),t=W();O(3),P(e.subscriptions.slice(0,t.shown))}}function kN(e,t){e&1&&(I(0,`p`,6),K(1,`No subscription is still open after its component went away.`),L())}function AN(e,t){e&1&&(I(0,`p`,6),K(1,` Subscriptions are tied to component classes only; Angular 20 profiler hooks tie them to instances. `),L())}function jN(e,t){if(e&1&&(j(0,ON,5,0)(1,kN,2,0,`p`,6),j(2,AN,2,0,`p`,6)),e&2){let e=W();M(+!e.subscriptions.length),O(2),M(e.support.instances?-1:2)}}function MN(e,t){e&1&&(I(0,`p`,9),K(1,` Tracking could not start: the page has no RxJS the overlay can load. `),L())}function NN(e,t){e&1&&(I(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. `),L())}function PN(e,t){e&1&&R(0,`app-angular-unavailable`,10),e&2&&F(`page`,W(2).angular())}function FN(e,t){if(e&1&&(I(0,`span`,16),K(1),L()),e&2){let e=W().$implicit,t=W(3);O(),q(t.plural(e.subscriptions,`subscription`))}}function IN(e,t){if(e&1){let e=V();I(0,`li`)(1,`button`,20),H(`click`,function(){let t=w(e).$implicit;return T(W(3).showComponent.emit(t.id))})(`focus`,function(){let t=w(e).$implicit;return T(W(3).highlight.emit(t.id))})(`blur`,function(){return w(e),T(W(3).highlight.emit(null))})(`mouseenter`,function(){let t=w(e).$implicit;return T(W(3).highlight.emit(t.id))})(`mouseleave`,function(){return w(e),T(W(3).highlight.emit(null))}),I(2,`span`,14),K(3),L(),I(4,`span`,16),K(5),L(),j(6,FN,2,1,`span`,16),L()()}if(e&2){let e=t.$implicit,n=W(2),r=W();O(3),q(e.name),O(2),q(r.effectsText(e)),O(),M(n.support.subscriptions===`on`?6:-1)}}function LN(e,t){e&1&&(I(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. `),L())}function RN(e,t){if(e&1&&(I(0,`ul`,12),N(1,IN,7,3,`li`,null,hN),L(),j(3,LN,2,0,`p`,6)),e&2){let e=W(),t=W();O(),P(e.components.slice(0,t.shown)),O(2),M(e.components.some(t.hasShared)?3:-1)}}function zN(e,t){e&1&&(I(0,`p`,6),K(1,`No component on the page has a live effect or a tracked subscription.`),L())}function BN(e,t){if(e&1&&(j(0,gN,6,1)(1,CN,10,7),j(2,wN,5,1,`p`,6),I(3,`h3`,7),K(4,` Open subscriptions after destroy `),j(5,TN,2,1,`span`,8),L(),j(6,jN,3,2)(7,MN,2,0,`p`,9)(8,NN,2,0,`p`,6),I(9,`h3`,7),K(10,` Live effects and subscriptions `),I(11,`span`,8),K(12),L()(),j(13,PN,1,1,`app-angular-unavailable`,10),j(14,RN,4,1)(15,zN,2,0,`p`,6)),e&2){let e,n=t,r=W();M(n.support.retention===`dev-di-debug`?0:1),O(2),M(r.detached().length?2:-1),O(3),M(n.support.subscriptions===`on`?5:-1),O(),M((e=n.support.subscriptions)===`on`?6:e===`unavailable`?7:8),O(6),q(n.components.length),O(),M(n.support.effects?-1:13),O(),M(n.components.length?14:15)}}function VN(e,t){e&1&&(I(0,`p`,6),K(1,`No leak data from this page yet. It comes with the next report.`),L())}var HN=20;function UN(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 WN=(e,t,n=`${t}s`)=>`${e} ${e===1?t:n}`,GN=class e{report=$(null);pageId=$(null);rpc=$(null);angular=$(null);now=$(()=>Date.now());showComponent=Sv();highlight=Sv();shown=HN;minNavigations=2;minSeconds=$w/1e3;plural=WN;busy=D(!1);announcement=D(``);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?`${UN(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=WN(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 qT(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=k({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&&(I(0,`section`,0)(1,`div`,1)(2,`h2`,2),K(3,`Leaks`),L(),I(4,`button`,3),H(`click`,function(){return t.toggle()}),K(5,` Track subscriptions `),L(),I(6,`p`,4),K(7),L()(),I(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. `),L(),j(10,BN,16,7)(11,VN,2,0,`p`,6),L()),e&2){let e;O(4),F(`disabled`,!t.pageId()||!t.report()),A(`aria-pressed`,t.tracking())(`aria-disabled`,t.busy()||null),O(3),q(t.announcement()),O(3),M((e=t.report())?10:11,e)}},dependencies:[GD],styles:[`[_nghost-%COMP%] { +}`]})},MN=(e,t)=>t.id;function NN(e,t){if(e&1&&(F(0,`p`,11),G(1),I(),F(2,`h3`,7),G(3,`Still retained`),I(),F(4,`p`,6),G(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=U(),t=U();D(),K(t.plural(e.navigations,`navigation`))}}function PN(e,t){e&1&&(F(0,`p`,6),G(1,` This page cannot track destroyed components. It needs WeakRef, FinalizationRegistry and the Angular debug API of a development build. `),I())}function FN(e,t){if(e&1&&(F(0,`span`,18),G(1),I()),e&2){let e=U().$implicit,t=U(4);D(),K(t.plural(e.subscriptions,`open subscription`))}}function IN(e,t){if(e&1&&(F(0,`li`,13)(1,`span`,14),G(2),I(),F(3,`span`,15),G(4),I(),F(5,`span`,16),G(6),I(),F(7,`span`,17),G(8),I(),A(9,FN,2,1,`span`,18),I()),e&2){let e=t.$implicit,n=U(4);D(2),K(e.name),D(2),K(e.route||`/`),D(2),q(``,n.plural(e.navigations,`navigation`),` ago`),D(2),K(n.ageOf(e)),D(),j(e.subscriptions?9:-1)}}function LN(e,t){if(e&1&&(F(0,`p`,6),G(1),I(),F(2,`ul`,12),M(3,IN,10,5,`li`,13,MN),I()),e&2){let e=U(3);D(),J(` 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 RN(e,t){e&1&&(F(0,`p`,6),G(1,`No destroyed component is still in memory after a few navigations.`),I())}function zN(e,t){if(e&1&&(F(0,`p`,6),G(1),F(2,`span`,19),G(3),I(),G(4,`. Navigate a few times to see whether they stay. `),I()),e&2){let e=U(3);D(),q(` `,e.plural(e.recent().length,`instance`),` destroyed recently and not collected yet: `),D(2),K(e.names(e.recent()))}}function BN(e,t){if(e&1&&(A(0,PN,2,0,`p`,6),F(1,`p`,11),G(2),I(),F(3,`h3`,7),G(4,` Still retained `),F(5,`span`,8),G(6),I()(),A(7,LN,5,2)(8,RN,2,0,`p`,6),A(9,zN,5,2,`p`,6)),e&2){let e=U(),t=U();j(e.support.retention?-1:0),D(2),I_(` `,t.plural(e.navigations,`navigation`),` · `,t.retained().length,` still retained · `,t.plural(e.totals.collected,`instance`),` collected `),D(4),K(t.retained().length),D(),j(t.retained().length?7:8),D(2),j(t.recent().length?9:-1)}}function VN(e,t){if(e&1&&(F(0,`p`,6),G(1,` Off the page but not destroyed (detached views, such as a route reuse cache): `),F(2,`span`,19),G(3),I(),G(4,`. `),I()),e&2){let e=U(2);D(3),K(e.names(e.detached()))}}function HN(e,t){if(e&1&&(F(0,`span`,8),G(1),I()),e&2){let e=U();D(),K(e.subscriptions.length)}}function UN(e,t){if(e&1&&(F(0,`span`,15),G(1),I()),e&2){let e=U().$implicit;D(),K(e.source)}}function WN(e,t){if(e&1&&(F(0,`li`,13)(1,`span`,14),G(2),I(),F(3,`span`,16),G(4),I(),F(5,`span`,18),G(6),I(),A(7,UN,2,1,`span`,15),I()),e&2){let e=t.$implicit;D(2),K(e.name),D(2),q(``,e.count,` open`),D(2),q(` `,e.reason===`instance-destroyed`?`instance destroyed`:`no instance left`,` `),D(),j(e.source?7:-1)}}function GN(e,t){if(e&1&&(F(0,`p`,6),G(1,` Still open although the component that made them is gone. Tear them down with takeUntilDestroyed(), DestroyRef.onDestroy or the async pipe. `),I(),F(2,`ul`,12),M(3,WN,8,4,`li`,13,ug),I()),e&2){let e=U(2),t=U();D(3),N(e.subscriptions.slice(0,t.shown))}}function KN(e,t){e&1&&(F(0,`p`,6),G(1,`No subscription is still open after its component went away.`),I())}function qN(e,t){e&1&&(F(0,`p`,6),G(1,` Subscriptions are tied to component classes only; Angular 20 profiler hooks tie them to instances. `),I())}function JN(e,t){if(e&1&&(A(0,GN,5,0)(1,KN,2,0,`p`,6),A(2,qN,2,0,`p`,6)),e&2){let e=U();j(+!e.subscriptions.length),D(2),j(e.support.instances?-1:2)}}function YN(e,t){e&1&&(F(0,`p`,9),G(1,` Tracking could not start: the page has no RxJS the overlay can load. `),I())}function XN(e,t){e&1&&(F(0,`p`,6),G(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 ZN(e,t){e&1&&L(0,`app-angular-unavailable`,10),e&2&&P(`page`,U(2).angular())}function QN(e,t){if(e&1&&(F(0,`span`,16),G(1),I()),e&2){let e=U().$implicit,t=U(3);D(),K(t.plural(e.subscriptions,`subscription`))}}function $N(e,t){if(e&1){let e=B();F(0,`li`)(1,`button`,20),V(`click`,function(){let t=C(e).$implicit;return w(U(3).showComponent.emit(t.id))})(`focus`,function(){let t=C(e).$implicit;return w(U(3).highlight.emit(t.id))})(`blur`,function(){return C(e),w(U(3).highlight.emit(null))})(`mouseenter`,function(){let t=C(e).$implicit;return w(U(3).highlight.emit(t.id))})(`mouseleave`,function(){return C(e),w(U(3).highlight.emit(null))}),F(2,`span`,14),G(3),I(),F(4,`span`,16),G(5),I(),A(6,QN,2,1,`span`,16),I()()}if(e&2){let e=t.$implicit,n=U(2),r=U();D(3),K(e.name),D(2),K(r.effectsText(e)),D(),j(n.support.subscriptions===`on`?6:-1)}}function eP(e,t){e&1&&(F(0,`p`,6),G(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 tP(e,t){if(e&1&&(F(0,`ul`,12),M(1,$N,7,3,`li`,null,MN),I(),A(3,eP,2,0,`p`,6)),e&2){let e=U(),t=U();D(),N(e.components.slice(0,t.shown)),D(2),j(e.components.some(t.hasShared)?3:-1)}}function nP(e,t){e&1&&(F(0,`p`,6),G(1,`No component on the page has a live effect or a tracked subscription.`),I())}function rP(e,t){if(e&1&&(A(0,NN,6,1)(1,BN,10,7),A(2,VN,5,1,`p`,6),F(3,`h3`,7),G(4,` Open subscriptions after destroy `),A(5,HN,2,1,`span`,8),I(),A(6,JN,3,2)(7,YN,2,0,`p`,9)(8,XN,2,0,`p`,6),F(9,`h3`,7),G(10,` Live effects and subscriptions `),F(11,`span`,8),G(12),I()(),A(13,ZN,1,1,`app-angular-unavailable`,10),A(14,tP,4,1)(15,nP,2,0,`p`,6)),e&2){let e,n=t,r=U();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),K(n.components.length),D(),j(n.support.effects?-1:13),D(),j(n.components.length?14:15)}}function iP(e,t){e&1&&(F(0,`p`,6),G(1,`No leak data from this page yet. It comes with the next report.`),I())}var aP=20;function oP(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 sP=(e,t,n=`${t}s`)=>`${e} ${e===1?t:n}`,cP=class e{report=$(null);pageId=$(null);rpc=$(null);angular=$(null);now=$(()=>Date.now());showComponent=gv();highlight=gv();shown=aP;minNavigations=2;minSeconds=Kw/1e3;plural=sP;busy=E(!1);announcement=E(``);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?`${oP(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=sP(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 VT(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),G(3,`Leaks`),I(),F(4,`button`,3),V(`click`,function(){return t.toggle()}),G(5,` Track subscriptions `),I(),F(6,`p`,4),G(7),I()(),F(8,`p`,5),G(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,rP,16,7)(11,iP,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),K(t.announcement()),D(3),j((e=t.report())?10:11,e)}},dependencies:[zD],styles:[`[_nghost-%COMP%] { display: block; } @@ -2667,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); -}`]})},KN=12,qN=900;function JN(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 YN=class{options;injector=C(Es);visibleTop=D(0);viewport=D(qN);rowHeight;host=null;scroller=null;detach=null;enabled;range;padTop;padBottom;constructor(e){this.options=e,this.rowHeight=D(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)-KN));return{start:a,end:Math.min(t,Math.max(a,Math.ceil((i+r)/n)+KN))}}),this.padTop=X(()=>this.enabled()?this.range().start*this.rowHeight():0),this.padBottom=X(()=>this.enabled()?(e.count()-this.range().end)*this.rowHeight():0),hc(()=>{e.count(),md(()=>this.update(),{injector:this.injector})}),C(Os).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:qN)}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&&md(t,{injector:this.injector})}};function XN(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 ZN=e=>{let t=parseFloat(e);return Number.isFinite(t)?t:0};function QN(e,t=8){let n=e.ownerDocument.defaultView;if(!n)return e.offsetHeight+t;let r=XN(e),i=r?n.getComputedStyle(r):null,a=i?ZN(i.paddingTop):0,o=i?ZN(i.scrollPaddingTop):0,s=ZN(n.getComputedStyle(e).top);return Math.max(0,Math.ceil(a+s+e.offsetHeight+t-o))}function $N(e,t,n=8){let r=XN(e),i=t.getBoundingClientRect().bottom+n-e.getBoundingClientRect().top;i<=0||(r?r.scrollTop-=i:e.ownerDocument.defaultView?.scrollBy(0,-i))}var eP=[`filterInput`],tP=[`treeEl`],nP=[`propFilterInput`],rP=()=>[],iP=e=>({kind:`component`,id:e}),aP=(e,t)=>t.row.node.id,oP=(e,t)=>t.outlet+t.route,sP=(e,t)=>t+e;function cP(e,t){return this.sourceKey(t)}var lP=(e,t)=>t.formId,uP=(e,t)=>t.name+t.index,dP=(e,t)=>t.name,fP=(e,t)=>t.token+e;function pP(e,t){if(e&1){let e=V();I(0,`span`,40),K(1,`Page`),L(),I(2,`app-select`,41),H(`valueChange`,function(t){return w(e),T(W(2).selectPage(t))}),L()}if(e&2){let e=W(2);O(2),F(`options`,e.pageOptions())(`value`,e.page()?.pageId??null)}}function mP(e,t){if(e&1){let e=V();I(0,`button`,42),H(`click`,function(){return w(e),T(W(2).toggleDirectiveHosts())}),E(),I(1,`svg`,15),R(2,`path`,43)(3,`path`,44),L(),vs(),I(4,`span`,18),K(5,`Directive hosts`),L()()}e&2&&A(`aria-pressed`,W(2).showDirectiveHosts())}function hP(e,t){if(e&1){let e=V();I(0,`button`,45),H(`click`,function(){w(e);let t=W(2);return T(t.picking()?t.cancelPick():t.pick())}),E(),I(1,`svg`,15),R(2,`path`,46),L(),vs(),I(3,`span`,18),K(4),L()()}if(e&2){let e=W(2);G(`on`,e.picking()),A(`title`,e.pickLabel()),O(4),q(e.pickLabel())}}function gP(e,t){if(e&1&&(I(0,`p`,24),K(1),L()),e&2){let e=W(2);O(),q(e.pickMessage())}}function _P(e,t){if(e&1&&(I(0,`p`,25),K(1),L()),e&2){let e=W(2);O(),q(e.truncationText())}}function vP(e,t){e&1&&(I(0,`p`,48),K(1,`The filter only searches the components the tree lists.`),L())}function yP(e,t){e&1&&(I(0,`p`,48),K(1,`Directive hosts are hidden, so they are not searched.`),L())}function bP(e,t){if(e&1){let e=V();I(0,`div`,29)(1,`p`,47),K(2),L(),j(3,vP,2,0,`p`,48),j(4,yP,2,0,`p`,48),I(5,`button`,49),H(`click`,function(){return w(e),T(W(2).clearFilter())}),K(6,`Clear filters`),L()()}if(e&2){let e=W(2);O(2),J(`No components match “`,e.filter().trim(),`”`),O(),M(e.page().truncated?3:-1),O(),M(!e.showDirectiveHosts()&&e.page().directiveHostCount?4:-1)}}function xP(e,t){if(e&1&&(I(0,`p`,30),K(1),L()),e&2){let e=W(2);O(),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 SP(e,t){if(e&1){let e=V();I(0,`span`,57),H(`click`,function(t){w(e),W();let n=X_(0);return T(W(2).toggle(n.node.id,t))}),E(),I(1,`svg`,58),R(2,`path`,59),L()()}e&2&&(W(),G(`open`,X_(0).expanded))}function CP(e,t){e&1&&R(0,`span`,52)}function wP(e,t){if(e&1&&(I(0,`span`,60),K(1),L(),I(2,`span`,61),K(3),L(),I(4,`span`,28),K(5,`directive host`),L()),e&2){W();let e=X_(0),t=W(2);O(),J(`<`,e.node.tag,`>`),O(),A(`title`,e.node.directives?.join(`, `)),O(),q(t.hostLabel(e.node))}}function TP(e,t){if(e&1&&(I(0,`span`,62),K(1),L(),I(2,`span`,63),K(3),L()),e&2){W();let e=X_(0);A(`title`,e.node.name),O(),q(e.node.name),O(),A(`title`,`<`+e.node.tag+`>`),O(),J(`<`,e.node.tag,`>`)}}function EP(e,t){if(e&1&&(I(0,`span`)(1,`span`,28),K(2,`Hydration: `),L(),K(3),L()),e&2){let e=t,n=W(3);v_(`hyd hyd-`+e),O(3),q(n.hydrationText(e))}}function DP(e,t){if(e&1&&(I(0,`span`,54),K(1),L()),e&2){let e=t.$implicit;O(),q(e.route||`/`)}}function OP(e,t){if(e&1&&(I(0,`span`,55),K(1),I(2,`span`,28),K(3),L()()),e&2){let e=t;O(),J(` `,e),O(2),J(` `,e===1?`check`:`checks`,` while recording`)}}function kP(e,t){if(e&1&&(I(0,`span`,56),K(1),I(2,`span`,28),K(3),L()()),e&2){W();let e=X_(0);A(`title`,e.node.directives.join(`, `)),O(),J(` +`,e.node.directives.length,` `),O(2),J(` `,e.node.directives.length===1?`directive`:`directives`,` `)}}function AP(e,t){if(e&1){let e=V();J_(0),I(1,`div`,50),H(`click`,function(){w(e);let t=X_(0);return T(W(2).select(t.node.id))})(`focus`,function(t){w(e);let n=X_(0),r=W(2);return r.focusId.set(n.node.id),r.highlight(n.node.id),T(r.showNameTip(t))})(`blur`,function(){w(e);let t=W(2);return t.highlight(null),T(t.nameTip.set(null))})(`keydown.escape`,function(){return w(e),T(W(2).nameTip.set(null))})(`mouseenter`,function(){w(e);let t=X_(0);return T(W(2).highlight(t.node.id))})(`mouseleave`,function(){return w(e),T(W(2).highlight(null))}),j(2,SP,3,2,`span`,51)(3,CP,1,0,`span`,52),j(4,wP,6,3)(5,TP,4,4),j(6,EP,4,3,`span`,53),N(7,DP,2,1,`span`,54,oP),j(9,OP,4,2,`span`,55),j(10,kP,4,3,`span`,56),L()}if(e&2){let e,n,r=t.$implicit,i=W(2),a=Y_(r.row);O(),__(`--%NS%depth`,a.depth),G(`selected`,i.selectedId()===a.node.id)(`dir-host`,a.node.kind===`directive`),A(`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),O(),M(a.hasChildren?2:3),O(2),M(a.node.kind===`directive`?4:5),O(2),M((e=a.node.hydration)?6:-1,e),O(),P(i.routedById().get(a.node.id)??av(20,rP)),O(2),M((n=i.cdHosts()[a.node.id])?9:-1,n),O(),M(a.node.kind!==`directive`&&a.node.directives?.length?10:-1)}}function jP(e,t){if(e&1&&(I(0,`div`,64),K(1),L()),e&2){let e=t;__(`top`,e.top,`px`),O(),J(` `,e.text,` `)}}function MP(e,t){if(e&1&&(I(0,`li`,72),K(1),L()),e&2){let e=t.$implicit;O(),q(e)}}function NP(e,t){if(e&1){let e=V();I(0,`div`,74)(1,`button`,49),H(`click`,function(){let t=w(e);return T(W(3).reveal(t.id,!0))}),K(2),L()()}e&2&&(O(2),J(` Show `,t.name,` `))}function PP(e,t){if(e&1&&(I(0,`section`,34)(1,`header`,65)(2,`span`,66),K(3,`directive host`),L(),I(4,`h2`,67),K(5),L(),I(6,`span`,68),K(7),L()(),I(8,`div`,69)(9,`h3`),K(10,` Directives `),I(11,`span`,70),K(12),L()(),I(13,`ul`,71),N(14,MP,2,1,`li`,72,sP),L()(),I(16,`div`,69)(17,`p`,73),K(18,` This element hosts directives but no component. Their inputs are bound in the template of the component that renders it. `),L(),j(19,NP,3,1,`div`,74),L()()),e&2){let e,n=t,r=W(2);O(5),J(`<`,n.tag,`>`),O(2),q(r.hostLabel(n)),O(5),q(n.directives?.length??0),O(2),P(n.directives??av(4,rP)),O(5),M((e=r.ownerOf(n.id))?19:-1,e)}}function FP(e,t){if(e&1&&(I(0,`p`,75),R(1,`app-source-link`,79),L()),e&2){let e=t;O(),F(`file`,e.file)(`line`,e.line)}}function IP(e,t){if(e&1&&(I(0,`p`,80)(1,`span`,82),K(2,`Likely`),L(),I(3,`span`,28),K(4,`, matched by class name: `),L(),R(5,`app-source-link`,79),L()),e&2){W();let e=X_(0);F(`title`,W(3).guessTitle),O(5),F(`file`,e[0].file)(`line`,e[0].line)}}function LP(e,t){if(e&1&&(I(0,`li`),R(1,`app-source-link`,79),L()),e&2){let e=t.$implicit;O(),F(`file`,e.file)(`line`,e.line)}}function RP(e,t){if(e&1&&(I(0,`div`,81)(1,`p`,83)(2,`span`,82),K(3,`Not certain`),L(),K(4),L(),I(5,`ul`,84),N(6,LP,2,2,`li`,null,cP,!0),L()()),e&2){W();let e=X_(0),t=W(),n=W(2);F(`title`,n.guessTitle),O(4),Y(` `,e.length,` source files define `,n.bareName(t.name),`: `),O(2),P(e)}}function zP(e,t){if(e&1&&(J_(0),j(1,IP,6,3,`p`,80)(2,RP,8,3,`div`,81)),e&2){let e=W(),t=Y_(W(2).sourceCandidates(e));O(),M(t.length===1?1:t.length>1?2:-1)}}function BP(e,t){if(e&1){let e=V();I(0,`div`,85)(1,`button`,49),H(`click`,function(){w(e);let t=W();return T(W(2).revealInElements(t))}),K(2,`Reveal in Elements`),L(),I(3,`button`,49),H(`click`,function(){w(e);let t=W();return T(W(2).openSource(t))}),K(4,`Open source`),L()(),I(5,`p`,86),K(6),L()}if(e&2){let e=W(3);O(6),q(e.actionMessage())}}function VP(e,t){if(e&1){let e=V();I(0,`button`,88),H(`click`,function(){let t=w(e).$implicit;return T(W(5).showForm.emit(t.formId))}),K(1),L()}if(e&2){let e=t.$implicit;O(),J(` Show `,e.label,` in Forms `)}}function HP(e,t){if(e&1&&(I(0,`div`,76),N(1,VP,2,1,`button`,87,lP),L()),e&2){let e=W(),t=W(3);O(),P(t.formsIn(e.file))}}function UP(e,t){e&1&&j(0,HP,3,0,`div`,76),e&2&&M(W(3).formsIn(t.file).length?0:-1)}function WP(e,t){if(e&1){let e=V();I(0,`div`,76)(1,`button`,49),H(`click`,function(){w(e);let t=W();return T(W(2).openInjector(t))}),K(2,` Show in Injectors `),I(3,`span`,28),K(4),L()()()}if(e&2){let e=W();O(4),J(`: `,e.name)}}function GP(e,t){if(e&1&&R(0,`app-store-global`,77),e&2){let e=W(),t=W(2);F(`rpc`,t.rpc())(`pageId`,t.page()?.pageId)(`target`,ov(4,iP,e.id))(`label`,e.name)}}function KP(e,t){if(e&1&&(I(0,`dt`),K(1,`Routed`),L(),I(2,`dd`,90),K(3),L()),e&2){let e=t.$implicit;O(3),Y(``,e.route||`/`,` in outlet `,e.outlet)}}function qP(e,t){if(e&1&&(I(0,`span`,11),K(1),L()),e&2){let e=W(4);O(),Y(``,e.shownValues()?.count??0,` of `,e.valueTotal())}}function JP(e,t){if(e&1){let e=V();I(0,`div`,95)(1,`p`,47),K(2),L(),I(3,`p`,48),K(4,` The filter searches names, and the nested keys of values you opened. `),L(),I(5,`button`,49),H(`click`,function(){return w(e),T(W(5).clearPropFilter())}),K(6,`Clear filters`),L()()}if(e&2){let e=W(5);O(2),J(` No inputs, outputs or properties match “`,e.propFilter().trim(),`” `)}}function YP(e,t){if(e&1&&(I(0,`span`,99),K(1),L()),e&2){let e=W().$implicit;O(),J(`(`,e.prop,`)`)}}function XP(e,t){if(e&1&&(I(0,`li`,97)(1,`span`,98),K(2),j(3,YP,2,1,`span`,99),L(),R(4,`app-value-tree`,100),L()),e&2){let e=t.$implicit,n=W(4),r=W(3);O(2),J(` `,e.name,` `),O(),M(e.prop===e.name?-1:3),O(),F(`prop`,e)(`store`,r.values)(`query`,r.propFilter())(`componentId`,n.id)(`pageId`,r.page()?.pageId??null)(`rpc`,r.rpc())(`writes`,r.canEdit())}}function ZP(e,t){if(e&1&&(I(0,`ul`,96),N(1,XP,5,9,`li`,97,dP),L()),e&2){let e=W(2);O(),P(e.inputs)}}function QP(e,t){e&1&&(I(0,`p`,73),K(1,`No inputs.`),L())}function $P(e,t){if(e&1&&(I(0,`div`,69)(1,`h3`),K(2,` Inputs `),I(3,`span`,70),K(4),L()(),j(5,ZP,3,0,`ul`,96)(6,QP,2,0,`p`,73),L()),e&2){let e=W();O(4),q(e.inputs.length),O(),M(e.inputs.length?5:6)}}function eF(e,t){if(e&1&&(I(0,`li`,102)(1,`span`,90),K(2),L(),I(3,`span`,103),K(4),L()()),e&2){let e=t.$implicit;G(`on`,e.listened),O(2),q(e.name),O(2),q(e.listened?`listened`:`no listener`)}}function tF(e,t){if(e&1&&(I(0,`ul`,71),N(1,eF,5,4,`li`,101,dP),L()),e&2){let e=W(2);O(),P(e.outputs)}}function nF(e,t){e&1&&(I(0,`p`,73),K(1,`No outputs.`),L())}function rF(e,t){if(e&1&&(I(0,`div`,69)(1,`h3`),K(2,` Outputs `),I(3,`span`,70),K(4),L()(),j(5,tF,3,0,`ul`,71)(6,nF,2,0,`p`,73),L()),e&2){let e=W();O(4),q(e.outputs.length),O(),M(e.outputs.length?5:6)}}function iF(e,t){if(e&1&&(I(0,`span`,104),K(1),L()),e&2){let e=W().$implicit;O(),q(e.kind)}}function aF(e,t){if(e&1&&(I(0,`li`,97)(1,`span`,98),K(2),j(3,iF,2,1,`span`,104),L(),R(4,`app-value-tree`,100),L()),e&2){let e=t.$implicit,n=W(4),r=W(3);O(2),J(` `,e.name,` `),O(),M(e.kind?3:-1),O(),F(`prop`,e)(`store`,r.values)(`query`,r.propFilter())(`componentId`,n.id)(`pageId`,r.page()?.pageId??null)(`rpc`,r.rpc())(`writes`,r.canEdit())}}function oF(e,t){if(e&1&&(I(0,`ul`,96),N(1,aF,5,9,`li`,97,dP),L()),e&2){let e=W(2);O(),P(e.properties)}}function sF(e,t){e&1&&(I(0,`p`,73),K(1,`No other properties.`),L())}function cF(e,t){if(e&1&&(I(0,`div`,69)(1,`h3`),K(2,` Properties `),I(3,`span`,70),K(4),L()(),j(5,oF,3,0,`ul`,96)(6,sF,2,0,`p`,73),L()),e&2){let e=W();O(4),q(e.properties.length),O(),M(e.properties.length?5:6)}}function lF(e,t){if(e&1&&(I(0,`li`,72),K(1),L()),e&2){let e=t.$implicit;O(),q(e)}}function uF(e,t){if(e&1&&(I(0,`div`,69)(1,`h3`),K(2,` DOM listeners `),I(3,`span`,70),K(4),L()(),I(5,`ul`,71),N(6,lF,2,1,`li`,72,hg),L()()),e&2){let e=W(2);O(4),q(e.listeners.length),O(2),P(e.listeners)}}function dF(e,t){if(e&1&&(I(0,`li`,97)(1,`span`,98),K(2),L(),R(3,`app-value-tree`,105),L()),e&2){let e=t.$implicit,n=W(2).$implicit,r=W(2),i=W(3);O(2),q(e.name),O(),F(`prop`,e)(`store`,i.values)(`query`,i.propFilter())(`directive`,n.index)(`componentId`,r.id)(`pageId`,i.page()?.pageId??null)(`rpc`,i.rpc())}}function fF(e,t){if(e&1&&(I(0,`ul`,96),N(1,dF,4,8,`li`,97,dP),L()),e&2){let e=W().$implicit;O(),P(e.inputs)}}function pF(e,t){if(e&1&&(I(0,`li`,102)(1,`span`,90),K(2),L(),I(3,`span`,103),K(4),L()()),e&2){let e=t.$implicit;G(`on`,e.listened),O(2),q(e.name),O(2),q(e.listened?`listened`:`no listener`)}}function mF(e,t){if(e&1&&(I(0,`ul`,71),N(1,pF,5,4,`li`,101,dP),L()),e&2){let e=W().$implicit;O(),P(e.outputs)}}function hF(e,t){e&1&&(I(0,`p`,73),K(1,`No inputs or outputs.`),L())}function gF(e,t){if(e&1&&(I(0,`div`,69)(1,`h3`)(2,`span`,90),K(3),L(),I(4,`span`,104),K(5,`directive on host`),L()(),j(6,fF,3,0,`ul`,96),j(7,mF,3,0,`ul`,71),j(8,hF,2,0,`p`,73),L()),e&2){let e=t.$implicit;O(3),q(e.name),O(3),M(e.inputs.length?6:-1),O(),M(e.outputs.length?7:-1),O(),M(!e.inputs.length&&!e.outputs.length?8:-1)}}function _F(e,t){if(e&1&&(j(0,JP,7,1,`div`,95),j(1,$P,7,2,`div`,69),j(2,rF,7,2,`div`,69),j(3,cF,7,2,`div`,69),j(4,uF,8,1,`div`,69),N(5,gF,9,4,`div`,69,uP)),e&2){let e=t,n=W(),r=W(3);M(r.propQuery()&&!e.count?0:-1),O(),M(!r.propQuery()||e.inputs.length?1:-1),O(),M(!r.propQuery()||e.outputs.length?2:-1),O(),M(!r.propQuery()||e.properties.length?3:-1),O(),M(!r.propQuery()&&n.listeners.length?4:-1),O(),P(e.directives)}}function vF(e,t){if(e&1&&(I(0,`span`,104),K(1),L()),e&2){let e=t.$implicit;O(),q(e)}}function yF(e,t){if(e&1&&(I(0,`span`,108),K(1,`from `),I(2,`span`,90),K(3),L()()),e&2){let e=W().$implicit;O(3),q(e.providedByName??`an injector`)}}function bF(e,t){e&1&&(I(0,`span`,109),K(1,`not provided`),L())}function xF(e,t){if(e&1&&(I(0,`li`,106)(1,`span`,107),K(2),L(),N(3,vF,2,1,`span`,104,hg),j(5,yF,4,1,`span`,108)(6,bF,2,0,`span`,109),L()),e&2){let e=t.$implicit;O(2),q(e.token),O(),P(e.flags),O(2),M(e.providedBy?5:6)}}function SF(e,t){if(e&1&&(I(0,`ul`,93),N(1,xF,7,2,`li`,106,fP),L()),e&2){let e=W();O(),P(e.dependencies)}}function CF(e,t){e&1&&(I(0,`p`,73),K(1,`Nothing is injected through the constructor or inject().`),L())}function wF(e,t){if(e&1){let e=V();I(0,`app-component-pipes`,110),H(`showPipe`,function(t){return w(e),T(W(4).showPipe.emit(t))}),L()}if(e&2){let e=W(2),t=W(2);F(`rpc`,t.rpc())(`pageId`,t.page()?.pageId)(`component`,t.bareName(e.name))(`canShowPipes`,!t.staticReport())}}function TF(e,t){if(e&1){let e=V();I(0,`dl`,89)(1,`dt`),K(2,`Change detection`),L(),I(3,`dd`),K(4),L(),I(5,`dt`),K(6,`Encapsulation`),L(),I(7,`dd`),K(8),L(),I(9,`dt`),K(10,`Host path`),L(),I(11,`dd`,90),K(12),L(),N(13,KP,4,2,null,null,oP),L(),I(15,`div`,91)(16,`div`,5),E(),I(17,`svg`,6),R(18,`circle`,7)(19,`path`,8),L(),vs(),I(20,`input`,92,2),H(`input`,function(t){return w(e),T(W(3).propFilter.set(t.target.value))})(`keydown.escape`,function(t){return w(e),T(W(3).clearPropFilter(t))}),L()(),j(22,qP,2,2,`span`,11),I(23,`p`,23),K(24),L()(),j(25,_F,7,5),I(26,`div`,69)(27,`h3`),K(28,` Injected `),I(29,`span`,70),K(30),L()(),j(31,SF,3,0,`ul`,93)(32,CF,2,0,`p`,73),L(),j(33,wF,1,4,`app-component-pipes`,94)}if(e&2){let e,n=t,r=W(),i=W(2);O(4),q(n.changeDetection??`Unknown`),O(4),q(n.encapsulation??`Unknown`),O(4),q(n.path),O(),P(i.routedById().get(r.id)??av(10,rP)),O(7),F(`value`,i.propFilter()),O(2),M(i.propQuery()?22:-1),O(2),q(i.propFilterStatus()),O(),M((e=i.shownValues())?25:-1,e),O(5),q(n.dependencies.length),O(),M(n.dependencies.length?31:32),O(2),M(i.canShowPipes()?33:-1)}}function EF(e,t){e&1&&(I(0,`div`,78),R(1,`span`,111),I(2,`p`,48),K(3,`Reading live values from the page…`),L()())}function DF(e,t){if(e&1&&(I(0,`section`,34)(1,`header`,65)(2,`span`,66),K(3,`component`),L(),I(4,`h2`,67),K(5),L(),I(6,`span`,68),K(7),L(),j(8,FP,2,2,`p`,75)(9,zP,3,2),j(10,BP,7,1),j(11,UP,1,1),j(12,WP,5,1,`div`,76),j(13,GP,1,6,`app-store-global`,77),L(),j(14,TF,34,11)(15,EF,4,0,`div`,78),L()),e&2){let e,n,r,i=t,a=W(2);O(5),q(i.name),O(2),J(`<`,i.tag,`>`),O(),M((e=a.detail()?.source)?8:9,e),O(2),M(a.devtoolsActions()?10:-1),O(),M((n=a.sourceFor(i))?11:-1,n),O(),M(a.canShowInjector()&&!a.staticReport()?12:-1),O(),M(!a.staticReport()&&!a.native()?13:-1),O(),M((r=a.detail())?14:15,r)}}function OF(e,t){e&1&&(I(0,`p`,47),K(1,`The selected component was destroyed`),L(),I(2,`p`,48)(3,`span`,90),K(4),L(),K(5,` is no longer on the page. Select another component to see its live values. `),L()),e&2&&(O(4),q(t))}function kF(e,t){e&1&&(I(0,`p`,48),K(1,` Select a component to see its live inputs, properties, outputs, change detection and injected services. `),L())}function AF(e,t){if(e&1&&(I(0,`div`,35),j(1,OF,6,1)(2,kF,2,0,`p`,48),L()),e&2){let e,t=W(2);O(),M((e=t.destroyed())?1:2,e)}}function jF(e,t){e&1&&R(0,`app-angular-unavailable`,37),e&2&&F(`page`,W(2).angularPage())}function MF(e,t){if(e&1){let e=V();I(0,`app-hydration-section`,112),H(`overlay`,function(t){return w(e),T(W(2).setHydrationOverlay(t))})(`showNode`,function(t){return w(e),T(W(2).revealNode(t))})(`highlight`,function(t){return w(e),T(W(2).highlight(t))}),L()}e&2&&F(`report`,W(2).page()?.hydration)}function NF(e,t){if(e&1){let e=V();I(0,`app-cd-recording`,113),H(`showComponent`,function(t){return w(e),T(W(2).showCdComponent(t))}),L(),I(1,`app-leaks-section`,114),H(`showComponent`,function(t){return w(e),T(W(2).showLeakComponent(t))})(`highlight`,function(t){return w(e),T(W(2).highlight(t))}),L()}if(e&2){let e=W(2);F(`page`,e.cdPage())(`pageId`,e.page().pageId)(`rpc`,e.rpc())(`native`,e.native()),O(),F(`report`,e.leaksPage())(`pageId`,e.page().pageId)(`rpc`,e.rpc())(`angular`,e.angularPage())}}function PF(e,t){if(e&1){let e=V();I(0,`p`,3),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. `),L(),I(2,`div`,4)(3,`div`,5),E(),I(4,`svg`,6),R(5,`circle`,7)(6,`path`,8),L(),vs(),I(7,`input`,9,0),H(`input`,function(t){return w(e),T(W().setFilter(t.target.value))})(`keydown.escape`,function(){return w(e),T(W().setFilter(``))}),L(),I(9,`span`,10),K(10,` Type plain text, a tag such as
      `; + const root = document.querySelector('app-root')!; + const list = document.querySelector('app-list')!; + const [first, second] = Array.from(document.querySelectorAll('app-item')); + const instances = new Map([ + [root, {}], + [list, new _List()], + [first!, new _Item()], + [second!, new _Item()], + ]); + const ng: ComponentDebugNg = { getComponent: (el) => instances.get(el) ?? null }; + const highlight = { show: vi.fn(), clear: vi.fn() }; + const pick = startComponentPick({ getNg: () => ng, highlight, timeoutMs: 5000 }); + return { pick, highlight, root, list, first: first!, second: second! }; + } + + afterEach(() => { + document.body.innerHTML = ''; + }); + + it('moves through components in page order, out and in, and picks with Enter', async () => { + const { pick, highlight, root, list, first, second } = page(); + expect(pick.move('next')).toMatchObject({ moved: true, tag: 'app-root' }); + expect(highlight.show).toHaveBeenLastCalledWith(root, true); + expect(pick.move('child')).toMatchObject({ moved: true, name: 'List' }); + expect(pick.move('child')).toMatchObject({ moved: true, name: 'Item' }); + expect(highlight.show).toHaveBeenLastCalledWith(first, true); + expect(pick.move('next')).toMatchObject({ moved: true, name: 'Item' }); + expect(highlight.show).toHaveBeenLastCalledWith(second, true); + expect(pick.move('next')).toEqual({ moved: false, error: 'This is the last component.' }); + expect(pick.move('parent')).toMatchObject({ moved: true, name: 'List' }); + expect(highlight.show).toHaveBeenLastCalledWith(list, true); + expect(pick.move('pick')).toMatchObject({ moved: true, name: 'List', picked: true }); + expect(await pick.result).toMatchObject({ ok: true, name: 'List', tag: 'app-list' }); + expect(pick.move('next')).toEqual({ moved: false, error: 'No pick is running.' }); + }); + + it('takes the arrow keys and Enter on the page, and keeps them from the app', async () => { + const { pick, first } = page(); + const field = document.querySelector('.field')!; + const press = (key: string) => { + const event = new KeyboardEvent('keydown', { key, bubbles: true, cancelable: true }); + field.dispatchEvent(event); + return event; + }; + expect(press('ArrowDown').defaultPrevented).toBe(true); + press('ArrowRight'); + press('ArrowRight'); + expect(press('a').defaultPrevented).toBe(false); + press('Enter'); + const result = await pick.result; + expect(result.ok && elementById(result.id)).toBe(first); + }); + + it('refuses Enter before anything is shown', () => { + const { pick } = page(); + expect(pick.move('pick')).toEqual({ moved: false, error: 'Move to a component first.' }); + pick.cancel(); + }); +}); diff --git a/packages/devtools/src/__tests__/component-tree.test.ts b/packages/devtools/src/__tests__/component-tree.test.ts index 3b27a942..230eb4d6 100644 --- a/packages/devtools/src/__tests__/component-tree.test.ts +++ b/packages/devtools/src/__tests__/component-tree.test.ts @@ -415,6 +415,17 @@ describe('componentDetail', () => { }); expect(componentDetail(ng, card)!.inputs.map((i) => i.name)).toEqual(['title']); }); + + it('sends a selector that finds the host again', () => { + document.body.innerHTML = `
      `; + const second = document.querySelectorAll('app-card')[1]!; + const { ng } = fakeNg(new Map([[second, new Card()]]), { + getDirectiveMetadata: () => ({ inputs: {}, outputs: {} }), + }); + const selector = componentDetail(ng, second)!.selector!; + expect(selector).toContain('app-card:nth-child(2)'); + expect(document.querySelector(selector)).toBe(second); + }); }); describe('component properties', () => { diff --git a/packages/devtools/src/__tests__/config.test.ts b/packages/devtools/src/__tests__/config.test.ts index 7f116a16..8897adb4 100644 --- a/packages/devtools/src/__tests__/config.test.ts +++ b/packages/devtools/src/__tests__/config.test.ts @@ -312,6 +312,7 @@ describe('agent tool and RPC registration', () => { 'remove-http-rule', 'remove-ssr-override', 'ngrx-restore', + 'load-defer-block', 'set-component-property', 'set-http-rule', 'set-signal', @@ -436,6 +437,7 @@ describe('agent tool and RPC registration', () => { 'remove-http-rule', 'remove-ssr-override', 'ngrx-restore', + 'load-defer-block', 'set-component-property', 'set-http-rule', 'set-signal', @@ -472,6 +474,7 @@ describe('agent tool and RPC registration', () => { const components = await boot({ actions: { components: false } }); expect(components.actionTools).not.toContain('set-component-property'); expect(components.actionTools).not.toContain('set-signal'); + expect(components.actionTools).not.toContain('load-defer-block'); expect(components.tools).toContain('inspect-component'); const queries = await boot({ actions: { tanstackQuery: false } }); expect(queries.actionTools).not.toContain('tanstack-run-query'); diff --git a/packages/devtools/src/__tests__/defer-blocks.test.ts b/packages/devtools/src/__tests__/defer-blocks.test.ts index bf72d6e9..63636b4c 100644 --- a/packages/devtools/src/__tests__/defer-blocks.test.ts +++ b/packages/devtools/src/__tests__/defer-blocks.test.ts @@ -1,7 +1,12 @@ // @vitest-environment jsdom import { afterEach, describe, expect, it } from 'vitest'; -import { deferNotes } from '../config.ts'; -import { MAX_DEFER_BLOCKS, createDeferTracker, type DeferDebugNg } from '../defer-blocks.ts'; +import { deferHydrationLabel, deferNotes } from '../config.ts'; +import { + MAX_DEFER_BLOCKS, + MAX_DEFER_TRANSITIONS, + createDeferTracker, + type DeferDebugNg, +} from '../defer-blocks.ts'; import { elementById } from '../element-id.ts'; import { DEFER_ROWS, deferBlocksText, toComponentPage } from '../rpc/component-tools.ts'; import { MAX_TOOL_CHARS } from '../rpc/router-tools.ts'; @@ -162,6 +167,8 @@ describe('createDeferTracker', () => { expect(second.map((b) => b.id)).toEqual(first.map((b) => b.id)); expect(second[0].since).toBe(1000); expect(second[1]).toMatchObject({ hydration: 'hydrated', since: 5000, hydratedAt: 5000 }); + expect(tracker.find(second[1].id)).toEqual({ host: lazy, block: second[1] }); + expect(tracker.find('nope')).toBeUndefined(); }); it('flags hydrate never blocks and falls back to ɵgetDeferBlocks', () => { @@ -327,6 +334,30 @@ describe('deferBlocksText', () => { expect(text).toContain('`d8` in TripReviews (`c2`): on its placeholder for 29s'); }); + it('says when a block hydrated before the overlay attached', () => { + const text = deferBlocksText( + [ + report([ + info({ id: 'd1', hydration: 'hydrated' }), + info({ id: 'd2', hydration: 'hydrated', hydratedAt: 5000 }), + ]), + ], + 30_000, + ); + expect(text).toMatch(/\| `d1` .*\| complete \| hydrated before inspection \|/); + expect(text).toMatch(/\| `d2` .*\| complete \| hydrated \|/); + expect(text).toContain('"hydrated before inspection" means'); + expect(deferBlocksText([report([info({ id: 'd3' })])], 30_000)).not.toContain( + 'before inspection', + ); + }); + + it('labels hydration the same way for the panel and the tool', () => { + expect(deferHydrationLabel({ hydration: 'hydrated' })).toBe('hydrated before inspection'); + expect(deferHydrationLabel({ hydration: 'hydrated', hydratedAt: 1 })).toBe('hydrated'); + expect(deferHydrationLabel({ hydration: 'dehydrated' })).toBe('dehydrated'); + }); + it('ages blocks on the page clock, not the server clock', () => { const hour = 3_600_000; const serverNow = 1_700_000_000_000; @@ -436,3 +467,54 @@ describe('deferNotes', () => { expect(deferNotes(block, Date.now()).map((note) => note.kind)).toEqual([]); }); }); + +describe('defer block transitions', () => { + it('keeps the state changes the overlay saw, and none for a block that never changed', () => { + const { anchor, lazy, instances } = page(); + let raw: unknown[] = [block({ hostNode: anchor }), block({ hostNode: lazy })]; + const ng: DeferDebugNg = { + getComponent: (el) => instances.get(el) ?? null, + ɵgetControlFlowBlocks: () => raw, + }; + let clock = 1000; + const tracker = createDeferTracker(() => clock); + expect(tracker.collect(ng)![0].transitions).toBeUndefined(); + clock = 2000; + raw = [block({ hostNode: anchor, state: 'loading' }), block({ hostNode: lazy })]; + tracker.collect(ng); + clock = 3000; + raw = [block({ hostNode: anchor, state: 'complete' }), block({ hostNode: lazy })]; + const [loaded, idle] = tracker.collect(ng)!; + expect(loaded.transitions).toEqual([ + { state: 'placeholder', hydration: 'not-configured', at: 1000 }, + { state: 'loading', hydration: 'not-configured', at: 2000 }, + { state: 'complete', hydration: 'not-configured', at: 3000 }, + ]); + expect(idle.transitions).toBeUndefined(); + for (let i = 0; i < 10; i++) { + clock += 1000; + raw = [block({ hostNode: anchor, state: i % 2 ? 'complete' : 'error' })]; + tracker.collect(ng); + } + expect(tracker.collect(ng)![0].transitions).toHaveLength(MAX_DEFER_TRANSITIONS); + }); +}); + +describe('guardDeferBlocks transitions', () => { + it('keeps valid steps only, at most six', async () => { + const { guardDeferBlocks } = await import('../rpc/component-report-guard.ts'); + const steps = [ + { state: 'placeholder', hydration: 'dehydrated', at: 1 }, + { state: 2, at: 2 }, + { state: 'complete', hydration: 'bogus', at: 3 }, + { state: 'complete', at: 'later' }, + ]; + const [out] = guardDeferBlocks([{ id: 'd1', state: 'complete', transitions: steps }]); + expect(out!.transitions).toEqual([ + { state: 'placeholder', hydration: 'dehydrated', at: 1 }, + { state: 'complete', hydration: 'not-configured', at: 3 }, + ]); + const many = Array.from({ length: 9 }, (_, i) => ({ state: 's', at: i })); + expect(guardDeferBlocks([{ id: 'd1', transitions: many }])[0]!.transitions).toHaveLength(6); + }); +}); diff --git a/packages/devtools/src/__tests__/defer-load-tool.test.ts b/packages/devtools/src/__tests__/defer-load-tool.test.ts new file mode 100644 index 00000000..a79ea75a --- /dev/null +++ b/packages/devtools/src/__tests__/defer-load-tool.test.ts @@ -0,0 +1,146 @@ +import { createHostContext } from 'devframe/node'; +import { describe, expect, it, vi } from 'vitest'; +import pangular, { createPangular } from '../devframe.ts'; +import type { PangularConfig } from '../config.ts'; +import { agentSafety, resolvePangularConfig } from '../config.ts'; +import { UNTRUSTED } from '../rpc/forms-tools.ts'; +import { answerText } from './tool-answer.ts'; + +async function boot(config?: PangularConfig) { + const host = { + mountStatic: () => {}, + resolveOrigin: () => 'http://localhost', + getStorageDir: () => '', + }; + const ctx = await createHostContext({ cwd: process.cwd(), mode: 'dev', host: host as never }); + await (config ? createPangular(config) : pangular).setup(ctx as never); + const push = (name: string, payload: unknown) => + ctx.rpc.invokeLocal(`pangular:${name}` as never, ...([payload] as never)); + const call = async (tool: string, args: Record) => + await answerText(ctx.agent.invoke(`pangular:${tool}`, args)); + const tools = () => ctx.agent.list().tools.map((tool) => tool.id); + return { ctx, push, call, tools }; +} + +const tree = (pageId: string, blocks: string[] = ['d1']) => ({ + pageId, + url: `/${pageId}`, + count: 1, + detail: null, + roots: [{ id: `${pageId}-root`, name: 'App', tag: 'app-root', children: [] }], + deferBlocks: blocks.map((id) => ({ + id, + owner: { id: `${pageId}-root`, name: 'App', tag: 'app-root' }, + state: 'placeholder', + hydration: 'not-configured', + triggers: ['on viewport'], + hasErrorBlock: false, + rootIds: [], + since: 1, + })), +}); + +type Load = { requestId: string; pageId: string; id: string }; + +/** Answers every defer-load broadcast the way the page would. */ +function answerLoads( + ctx: Awaited>['ctx'], + push: Awaited>['push'], + result: (message: Load) => unknown, +) { + const sent: Load[] = []; + vi.spyOn(ctx.rpc, 'broadcast').mockImplementation((async (options: { + method: string; + args: [Load]; + }) => { + if (!options.method.endsWith('defer-load')) return; + const message = options.args[0]; + sent.push(message); + setTimeout( + () => + void push('defer-load-result', { + requestId: message.requestId, + pageId: message.pageId, + result: result(message), + }), + 5, + ); + }) as never); + return sent; +} + +describe('load-defer-block', () => { + it('is an action tool of the components inspector', () => { + expect(agentSafety('pangular:load-defer-block', resolvePangularConfig())).toBe('action'); + }); + + it('sends the load to the page that has the block and reports the new state', async () => { + const { ctx, push, call } = await boot(); + await push('push-component-tree', tree('p1')); + await push('push-component-tree', tree('p2', ['d7'])); + const sent = answerLoads(ctx, push, () => ({ ok: true, state: 'complete' })); + const text = await call('load-defer-block', { block: 'd7' }); + expect(sent).toEqual([{ requestId: expect.any(String), pageId: 'p2', id: 'd7' }]); + expect(text.startsWith(UNTRUSTED)).toBe(true); + expect(text).toContain('Loaded defer block `d7` in App on page `p2`'); + }); + + it('passes the page refusal on, and says when the load fell back to @error', async () => { + const { ctx, push, call } = await boot(); + await push('push-component-tree', tree('p1')); + answerLoads(ctx, push, () => ({ error: 'The block is server HTML.' })); + expect(await call('load-defer-block', { block: 'd1' })).toContain( + 'Defer block `d1` in App on page `p1` was not loaded. The block is server HTML.', + ); + vi.restoreAllMocks(); + answerLoads(ctx, push, () => ({ ok: true, state: 'error' })); + expect(await call('load-defer-block', { block: 'd1' })).toContain('shows its @error block'); + }); + + it('asks for a page when several tabs have the same block id, and refuses unknown ids', async () => { + const { ctx, push, call } = await boot(); + await push('push-component-tree', tree('p1')); + await push('push-component-tree', tree('p2')); + const sent = answerLoads(ctx, push, () => ({ ok: true, state: 'complete' })); + expect(await call('load-defer-block', { block: 'd1' })).toContain('pass one of these ids'); + expect(await call('load-defer-block', { block: 'd9' })).toContain('No defer block `d9`'); + expect(sent).toEqual([]); + await call('load-defer-block', { block: 'd1', page: 'p1' }); + expect(sent.map((s) => s.pageId)).toEqual(['p1']); + }); + + it('ignores a result from another page', async () => { + const { ctx, push, call } = await boot(); + await push('push-component-tree', tree('p1')); + vi.useFakeTimers(); + try { + vi.spyOn(ctx.rpc, 'broadcast').mockImplementation((async (options: { + method: string; + args: [Load]; + }) => { + if (!options.method.endsWith('defer-load')) return; + void push('defer-load-result', { + requestId: options.args[0].requestId, + pageId: 'p2', + result: { ok: true }, + }); + }) as never); + const answer = call('load-defer-block', { block: 'd1' }); + await vi.advanceTimersByTimeAsync(16_000); + expect(await answer).toContain('No page answered'); + } finally { + vi.useRealTimers(); + } + }); + + it('is left out when actions.components is off or agents are read only', async () => { + for (const config of [ + { actions: { components: false } }, + { agent: { readOnly: true } }, + { inspectors: { components: false } }, + ] satisfies PangularConfig[]) { + const { tools } = await boot(config); + expect(tools(), JSON.stringify(config)).not.toContain('pangular:load-defer-block'); + } + }); +}); diff --git a/packages/devtools/src/__tests__/defer-load.test.ts b/packages/devtools/src/__tests__/defer-load.test.ts new file mode 100644 index 00000000..0e9a48bb --- /dev/null +++ b/packages/devtools/src/__tests__/defer-load.test.ts @@ -0,0 +1,176 @@ +// @vitest-environment jsdom +import { describe, expect, it, vi } from 'vitest'; +import { + angularDeferInternals, + loadDeferBlock, + registerDeferLoad, + type DeferInternals, +} from '../defer-load.ts'; +import type { DeferBlockInfo } from '../types.ts'; + +const info = (overrides: Partial = {}): DeferBlockInfo => ({ + id: 'd1', + state: 'placeholder', + hydration: 'not-configured', + triggers: ['on viewport'], + hasErrorBlock: false, + rootIds: [], + since: 0, + ...overrides, +}); + +/** + * A root view with one block in it, and a second block inside the views the + * first one rendered, shaped the way `ɵgetDeferBlocks` lists them. + */ +function app(options: { failed?: boolean; errorBlock?: boolean } = {}) { + const root = document.createElement('app-root'); + const outerAnchor = document.createComment('container'); + const innerAnchor = document.createComment('container'); + const innerView: unknown[] = ['inner view']; + const outer = { + lContainer: [outerAnchor, 0, 0, 0, 0, 0, 0, outerAnchor, 0, 0, innerView], + lView: ['root view'], + tNode: { index: 20 }, + tDetails: { loadingState: 2, errorTmplIndex: null }, + }; + const inner = { + lContainer: [innerAnchor, 0, 0, 0, 0, 0, 0, innerAnchor, 0, 0], + lView: innerView, + tNode: { index: 30 }, + tDetails: { loadingState: 0, errorTmplIndex: options.errorBlock ? 5 : null }, + }; + const rootView = ['root view']; + const rendered: { state: number; tNode: unknown; skip?: boolean }[] = []; + const internals: DeferInternals = { + getDeferBlocks: (lView, out) => { + if (lView === rootView) out.push(outer); + if (lView === innerView) out.push(inner); + }, + triggerResourceLoading: async (tDetails) => { + (tDetails as { loadingState: number }).loadingState = options.failed ? 3 : 2; + }, + renderDeferBlockState: (state, tNode, _container, skip) => + void rendered.push({ state, tNode, skip }), + }; + const component = {}; + const ng = { + getInjector: (el: Element) => (el === root ? { _lView: rootView, _tNode: {} } : null), + getComponent: (el: Element) => (el === root ? component : null), + applyChanges: vi.fn(), + }; + return { root, outerAnchor, innerAnchor, inner, internals, ng, rendered, component }; +} + +describe('loadDeferBlock', () => { + it('loads a nested block found through the views its parent rendered', async () => { + const { root, innerAnchor, inner, internals, ng, rendered, component } = app(); + const result = await loadDeferBlock(ng, internals, { host: innerAnchor, block: info() }, [ + root, + ]); + expect(result).toEqual({ ok: true, state: 'complete' }); + expect(rendered).toEqual([{ state: 2, tNode: inner.tNode, skip: true }]); + expect(ng.applyChanges).toHaveBeenCalledWith(component); + }); + + it('shows the @error block when the dependencies fail', async () => { + const { root, innerAnchor, internals, ng, rendered } = app({ failed: true, errorBlock: true }); + const result = await loadDeferBlock(ng, internals, { host: innerAnchor, block: info() }, [ + root, + ]); + expect(result).toEqual({ ok: true, state: 'error' }); + expect(rendered.map((r) => r.state)).toEqual([3]); + }); + + it('renders nothing when the dependencies fail and there is no @error block', async () => { + const { root, innerAnchor, internals, ng, rendered } = app({ failed: true }); + const result = await loadDeferBlock(ng, internals, { host: innerAnchor, block: info() }, [ + root, + ]); + expect(result.error).toMatch(/no @error block/); + expect(rendered).toEqual([]); + }); + + it('leaves loaded, dehydrated and unknown blocks alone', async () => { + const { root, outerAnchor, internals, ng, rendered } = app(); + const run = (block: DeferBlockInfo | undefined) => + loadDeferBlock(ng, internals, block && { host: outerAnchor, block }, [root]); + expect(await run(info({ state: 'complete' }))).toEqual({ + ok: true, + state: 'complete', + already: true, + }); + expect((await run(info({ hydration: 'dehydrated' }))).error).toMatch(/incremental hydration/); + expect((await run(info({ hydrateNever: true }))).error).toMatch(/incremental hydration/); + expect((await run(undefined)).error).toMatch(/pangular:defer-blocks/); + expect(rendered).toEqual([]); + }); + + it('says so when the build has no internals or no anchor', async () => { + const { root, outerAnchor, internals, ng } = app(); + expect( + (await loadDeferBlock(ng, null, { host: outerAnchor, block: info() }, [root])).error, + ).toMatch(/ɵtriggerResourceLoading/); + expect( + (await loadDeferBlock(ng, internals, { host: {}, block: info() }, [root])).error, + ).toMatch(/no anchor/); + const stray = document.createComment('container'); + expect( + (await loadDeferBlock(ng, internals, { host: stray, block: info() }, [root])).error, + ).toMatch(/could not be found/); + }); + + it('reads the internals from a core module only when all three are there', () => { + const fn = () => {}; + expect( + angularDeferInternals({ + ɵgetDeferBlocks: fn, + ɵtriggerResourceLoading: fn, + ɵrenderDeferBlockState: fn, + }), + ).not.toBeNull(); + expect(angularDeferInternals({ ɵgetDeferBlocks: fn })).toBeNull(); + }); +}); + +describe('registerDeferLoad', () => { + function rpc() { + const handlers = new Map unknown>(); + const calls: { name: string; message: unknown }[] = []; + return { + handlers, + calls, + call: async (name: string, message: unknown) => void calls.push({ name, message }), + register: (def: { name: string; handler: (message: never) => unknown }) => + handlers.set(def.name, def.handler as (message: unknown) => unknown), + }; + } + + it('answers for its own page and refuses when actions are off', async () => { + const on = rpc(); + const loaded = vi.fn(); + registerDeferLoad(on, 'p1', { + allowed: true, + load: async (id) => ({ ok: true, state: id === 'd1' ? 'complete' : 'error' }), + loaded, + }); + on.handlers.get('defer-load')!({ requestId: 'l1', pageId: 'p2', id: 'd1' }); + on.handlers.get('defer-load')!({ requestId: 'l2', pageId: 'p1', id: 'd1' }); + await vi.waitFor(() => expect(on.calls).toHaveLength(1)); + expect(on.calls[0]).toEqual({ + name: 'defer-load-result', + message: { requestId: 'l2', pageId: 'p1', result: { ok: true, state: 'complete' } }, + }); + expect(loaded).toHaveBeenCalledOnce(); + + const off = rpc(); + const load = vi.fn(); + registerDeferLoad(off, 'p1', { allowed: false, load }); + off.handlers.get('defer-load')!({ requestId: 'l3', pageId: 'p1', id: 'd1' }); + await vi.waitFor(() => expect(off.calls).toHaveLength(1)); + expect((off.calls[0].message as { result: { error?: string } }).result.error).toMatch( + /actions/, + ); + expect(load).not.toHaveBeenCalled(); + }); +}); diff --git a/packages/devtools/src/__tests__/fixtures/agent-metadata-derived.json b/packages/devtools/src/__tests__/fixtures/agent-metadata-derived.json index 2f83066c..febc9f56 100644 --- a/packages/devtools/src/__tests__/fixtures/agent-metadata-derived.json +++ b/packages/devtools/src/__tests__/fixtures/agent-metadata-derived.json @@ -48,6 +48,7 @@ "list-routes": "router", "list-ssr-overrides": "http", "list-ssr-requests": "http", + "load-defer-block": "components", "navigate": "router", "ngrx-dispatch": "ngrx", "ngrx-export-session": "ngrx", @@ -107,7 +108,7 @@ "set-ssr-override" ], "analog": ["analog-run-api", "clear-recordings"], - "components": ["set-component-property", "set-signal"], + "components": ["load-defer-block", "set-component-property", "set-signal"], "tanstackQuery": ["tanstack-run-query"], "plugins": [] }, @@ -117,6 +118,7 @@ "audit": "action", "clear-recordings": "destructive", "fill-form": "action", + "load-defer-block": "action", "navigate": "action", "ngrx-dispatch": "action", "ngrx-restore": "action", @@ -189,6 +191,7 @@ "list-routes", "list-ssr-overrides", "list-ssr-requests", + "load-defer-block", "navigate", "ngrx-dispatch", "ngrx-export-session", @@ -286,6 +289,7 @@ "list-routes": ["router"], "list-ssr-overrides": ["http"], "list-ssr-requests": ["http"], + "load-defer-block": ["components"], "navigate": ["router"], "ngrx-dispatch": ["ngrx"], "ngrx-export-session": ["ngrx"], diff --git a/packages/devtools/src/__tests__/panel-shell.test.ts b/packages/devtools/src/__tests__/panel-shell.test.ts index e64f2e77..05291521 100644 --- a/packages/devtools/src/__tests__/panel-shell.test.ts +++ b/packages/devtools/src/__tests__/panel-shell.test.ts @@ -204,10 +204,13 @@ describe('open-in-panel', () => { }); it('gives the hash when the panel address is unknown', () => { - const result = openInPanel({ tab: 'signals', id: '3' }, { config, pages: [] }); - expect(result.link).toEqual({ tab: 'signals' }); - expect(result.markdown).toContain('Panel hash: `#tab=signals`'); + const result = openInPanel({ tab: 'pipes', id: '3' }, { config, pages: [] }); + expect(result.link).toEqual({ tab: 'pipes' }); + expect(result.markdown).toContain('Panel hash: `#tab=pipes`'); expect(result.markdown).toContain('has no item selection'); + const signals = openInPanel({ tab: 'signals', id: 'c3' }, { config, pages: [] }); + expect(signals.link).toEqual({ tab: 'signals', id: 'c3' }); + expect(signals.markdown).toContain("It selects a component's signal graph"); }); it('refuses an unknown tab or one whose inspector is off', () => { diff --git a/packages/devtools/src/cd-overlay.ts b/packages/devtools/src/cd-overlay.ts index 43d065a5..c61a9ecc 100644 --- a/packages/devtools/src/cd-overlay.ts +++ b/packages/devtools/src/cd-overlay.ts @@ -41,9 +41,44 @@ export interface CdPlatform { hostId: (host: unknown) => string | null; } +const RECORDING_KEY = 'pangular:cd-recording:'; + +/** The tab's session storage, or null where there is none or it is blocked. */ +function sessionStore(): Storage | null { + try { + return typeof sessionStorage === 'undefined' ? null : sessionStorage; + } catch { + return null; + } +} + +/** Whether a recording was on for `pageId` when this tab last unloaded. */ +export function recordingWasOn(pageId: string, store = sessionStore()): boolean { + try { + return store?.getItem(RECORDING_KEY + pageId) === '1'; + } catch { + return false; + } +} + +/** + * Remembers for this tab whether a recording is on, so a reload, which keeps + * the `pageId`, starts recording again. A blocked store only loses that. + */ +export function rememberRecording(pageId: string, on: boolean, store = sessionStore()): void { + try { + if (on) store?.setItem(RECORDING_KEY + pageId, '1'); + else store?.removeItem(RECORDING_KEY + pageId); + } catch { + // Storage full or blocked: the recording runs, it just won't resume after a reload. + } +} + /** * Records change detection cycles while the panel or an agent turns recording - * on, and reports them. It does nothing until then. + * on, and reports them. It does nothing until then. In a browser, a recording + * that was on when the tab reloaded starts again (`sessionStorage` per + * `pageId`); the cycles before the reload are gone with the old page. */ export function attachChangeDetection( my: RpcScope, @@ -163,7 +198,11 @@ export function attachChangeDetection( jsonSerializable: true, handler: (message: { pageId?: unknown; on?: unknown; clear?: unknown } | null) => { if (typeof message?.pageId === 'string' && message.pageId !== pageId) return; - if (typeof message?.on === 'boolean') setRecording(message.on); + if (typeof message?.on === 'boolean') { + setRecording(message.on); + // Only the user's choice is remembered, so leaving the page on teardown keeps it. + if (!platform) rememberRecording(pageId, message.on); + } if (message?.clear === true) { recorder.clear(); diagnosis.clear(); @@ -172,6 +211,9 @@ export function attachChangeDetection( }, }); + // Angular may not have started yet; `push` attaches once it has. + if (!platform && recordingWasOn(pageId)) setRecording(true); + my.rpc.register({ name: 'change-detection-options', type: 'event', diff --git a/packages/devtools/src/component-pick.ts b/packages/devtools/src/component-pick.ts index d475cccc..744973fb 100644 --- a/packages/devtools/src/component-pick.ts +++ b/packages/devtools/src/component-pick.ts @@ -1,6 +1,7 @@ import { componentSource } from './component-source.ts'; -import { componentHostOf, type ComponentDebugNg } from './component-tree.ts'; +import { componentHostOf, componentHosts, type ComponentDebugNg } from './component-tree.ts'; import { elementId } from './element-id.ts'; +import { domTree, parentOf } from './host-tree.ts'; import { className } from './injector-tree.ts'; import { POPUP_ROOT_ID } from './panel-frame.ts'; import type { ComponentSource } from './types.ts'; @@ -20,6 +21,27 @@ export type ComponentPickResult = } | { ok: false; error: string }; +/** + * The keys of a keyboard pick: the next or previous component in page order, + * the component around the shown one, the first one inside it, or picking it. + */ +export const PICK_KEYS = ['next', 'previous', 'parent', 'child', 'pick'] as const; +export type PickKey = (typeof PICK_KEYS)[number]; + +/** What a keyboard move shows now, or why nothing moved. */ +export type PickMoveResult = + | { moved: true; id: string; name: string; tag: string; picked?: true } + | { moved: false; error: string }; + +/** The keys a pick takes when focus is on the page itself. */ +const PAGE_KEYS: Record = { + ArrowDown: 'next', + ArrowUp: 'previous', + ArrowLeft: 'parent', + ArrowRight: 'child', + Enter: 'pick', +}; + const PRESS_EVENTS = ['pointerdown', 'mousedown'] as const; const RELEASE_EVENTS = ['pointerup', 'mouseup'] as const; /** How long after a pick on pointerup its click is still kept from the page. */ @@ -43,7 +65,8 @@ function swallowTrailingClick(doc: Document, ownElement: (target: EventTarget | interface PickOptions { getNg: () => ComponentDebugNg | undefined; - highlight: { show(el: Element): void; clear(): void }; + /** `reveal` scrolls the box into view, for a keyboard move rather than a hover. */ + highlight: { show(el: Element, reveal?: boolean): void; clear(): void }; doc?: Document; timeoutMs?: number; } @@ -53,10 +76,16 @@ interface PickOptions { * component that hosts it. Presses outside the popup do not reach the page. Escape, `cancel()` or the timeout end the pick. The floating * panel fades while picking so it does not cover the page. An Alt+click * marks the result `openInEditor` when the component's source is known. + * + * The keyboard picks too, from the panel through `move` or with the arrow + * keys on the page: down and up go to the next and previous component in + * page order, left to the component around the shown one, right to the + * first one inside it, and Enter picks the shown one. */ export function startComponentPick(options: PickOptions): { result: Promise; cancel: () => void; + move: (key: PickKey) => PickMoveResult; } { const doc = options.doc ?? document; const popup = doc.getElementById(POPUP_ROOT_ID); @@ -71,11 +100,73 @@ export function startComponentPick(options: PickOptions): { }; let finish: (result: ComponentPickResult, fromRelease?: boolean) => void = () => {}; + // Moving between elements inside one shadow root fires no mouseover at the + // document, since both ends retarget to the host, so pointermove also updates + // the box. It is only redrawn when the component under the pointer changes. + let shown: Element | null | undefined; + let done = false; + + const resultFor = (host: Element | null, altKey = false): ComponentPickResult => { + const instance = host ? options.getNg()?.getComponent?.(host) : null; + const ctor = (instance as { constructor?: unknown } | null)?.constructor; + const source = componentSource(instance); + return host + ? { + ok: true, + id: elementId(host), + name: typeof ctor === 'function' ? className(ctor) : 'Anonymous', + tag: host.tagName.toLowerCase(), + ...(source ? { source } : {}), + ...(source && altKey ? { openInEditor: true as const } : {}), + } + : { ok: false, error: 'That element is not inside an Angular component.' }; + }; + + const move = (key: PickKey): PickMoveResult => { + if (done) return { moved: false, error: 'No pick is running.' }; + const ng = options.getNg(); + if (!ng?.getComponent) return { moved: false, error: 'This page has no Angular debug API.' }; + const current = shown ?? null; + if (key === 'pick') { + if (!current) return { moved: false, error: 'Move to a component first.' }; + const picked = resultFor(current); + finish(picked); + return picked.ok + ? { moved: true, id: picked.id, name: picked.name, tag: picked.tag, picked: true } + : { moved: false, error: picked.error }; + } + const hosts = componentHosts(ng, domTree(doc)); + const index = current ? hosts.indexOf(current) : -1; + const around = (host: Element) => { + const parent = parentOf(host); + return parent ? componentHostOf(ng, parent) : null; + }; + let next: Element | null = null; + if (index === -1) next = hosts[0] ?? null; + else if (key === 'next') next = hosts[index + 1] ?? null; + else if (key === 'previous') next = hosts[index - 1] ?? null; + else if (key === 'parent') next = around(hosts[index]!); + else next = hosts.slice(index + 1).find((host) => around(host) === current) ?? null; + if (!next) { + const why = { + next: 'This is the last component.', + previous: 'This is the first component.', + parent: 'This component has no component around it.', + child: 'This component has no component inside it.', + }; + return index === -1 + ? { moved: false, error: 'The page shows no component.' } + : { moved: false, error: why[key] }; + } + shown = next; + options.highlight.show(next, true); + const picked = resultFor(next); + return picked.ok + ? { moved: true, id: picked.id, name: picked.name, tag: picked.tag } + : { moved: false, error: picked.error }; + }; + const result = new Promise((resolve) => { - // Moving between elements inside one shadow root fires no mouseover at the - // document, since both ends retarget to the host, so pointermove also updates - // the box. It is only redrawn when the component under the pointer changes. - let shown: Element | null | undefined; const onHover = (event: Event) => { // An `svg:g` component host is an Element, not an HTMLElement. const next = hostOf(event); @@ -89,24 +180,8 @@ export function startComponentPick(options: PickOptions): { shown = undefined; options.highlight.clear(); }; - const picked = (event: Event): ComponentPickResult => { - const host = hostOf(event); - const instance = host ? options.getNg()?.getComponent?.(host) : null; - const ctor = (instance as { constructor?: unknown } | null)?.constructor; - const source = componentSource(instance); - return host - ? { - ok: true, - id: elementId(host), - name: typeof ctor === 'function' ? className(ctor) : 'Anonymous', - tag: host.tagName.toLowerCase(), - ...(source ? { source } : {}), - ...(source && (event as MouseEvent).altKey === true - ? { openInEditor: true as const } - : {}), - } - : { ok: false, error: 'That element is not inside an Angular component.' }; - }; + const picked = (event: Event): ComponentPickResult => + resultFor(hostOf(event), (event as MouseEvent).altKey === true); // Menus, drag handles and overlays open on pointerdown or mousedown, so every // press outside the popup is kept from the page, not only the click. const swallow = (event: Event) => { @@ -130,9 +205,19 @@ export function startComponentPick(options: PickOptions): { if (swallow(event)) finish(picked(event)); }; const onKey = (event: KeyboardEvent) => { - if (event.key !== 'Escape') return; + if (event.key === 'Escape') { + event.preventDefault(); + finish({ ok: false, error: 'Picking cancelled.' }); + return; + } + const key = PAGE_KEYS[event.key]; + if (!key || ownElement(event.target) || event.altKey || event.ctrlKey || event.metaKey) { + return; + } + // The arrows would scroll the page, and Enter would press what has focus. event.preventDefault(); - finish({ ok: false, error: 'Picking cancelled.' }); + event.stopPropagation(); + move(key); }; const timer = setTimeout( () => finish({ ok: false, error: 'No component was picked.' }), @@ -140,6 +225,7 @@ export function startComponentPick(options: PickOptions): { ); finish = (outcome, fromRelease = false) => { finish = () => {}; + done = true; doc.removeEventListener('click', onClick, true); for (const type of PRESS_EVENTS) doc.removeEventListener(type, onPress, true); for (const type of RELEASE_EVENTS) doc.removeEventListener(type, onRelease, true); @@ -162,5 +248,5 @@ export function startComponentPick(options: PickOptions): { doc.addEventListener('mouseout', onLeave, true); doc.addEventListener('keydown', onKey, true); }); - return { result, cancel: () => finish({ ok: false, error: 'Picking cancelled.' }) }; + return { result, cancel: () => finish({ ok: false, error: 'Picking cancelled.' }), move }; } diff --git a/packages/devtools/src/component-tree.ts b/packages/devtools/src/component-tree.ts index db6262e3..cc144333 100644 --- a/packages/devtools/src/component-tree.ts +++ b/packages/devtools/src/component-tree.ts @@ -325,6 +325,8 @@ export function componentDetail( dependencies: [], }; markEditable(ng, instance, detail); + const selector = read(() => hosts.selector?.(el) ?? null, null); + if (selector) detail.selector = selector; const source = componentSource(instance); if (source) detail.source = source; const cd = meta?.changeDetection; diff --git a/packages/devtools/src/config.ts b/packages/devtools/src/config.ts index ce10a05d..9c66e1dd 100644 --- a/packages/devtools/src/config.ts +++ b/packages/devtools/src/config.ts @@ -441,6 +441,7 @@ export function enabledPanelTabs(config: ResolvedPangularConfig): (typeof PANEL_ export const PANEL_LINK_ITEMS: Partial> = { 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', }; @@ -1039,6 +1040,13 @@ export const AGENT_ENTRIES: Readonly> = { 'inspect-component': { kind: 'tool', inspectors: ['components'], page: true }, 'list-components': { kind: 'tool', inspectors: ['components'], page: true }, 'defer-blocks': { kind: 'tool', inspectors: ['components'], page: true }, + 'load-defer-block': { + kind: 'tool', + inspectors: ['components'], + safety: 'action', + actions: ['components'], + page: true, + }, 'for-blocks': { kind: 'tool', inspectors: ['components'], page: true }, hydration: { kind: 'tool', inspectors: ['components'], page: true }, 'change-detection': { kind: 'tool', inspectors: ['components'], page: true }, @@ -1413,11 +1421,13 @@ export const RPC_INSPECTOR: Record = { 'select-component': 'components', 'request-component-pick': 'components', 'cancel-component-pick': 'components', + 'request-component-pick-move': 'components', 'component-pick-result': 'components', 'request-page-highlight': 'components', 'component-screenshot-result': 'components', 'request-component-edit': 'components', 'component-edit-result': 'components', + 'defer-load-result': 'components', 'request-hydration-overlay': 'components', 'request-component-value': 'components', 'component-value-result': 'components', @@ -2327,6 +2337,22 @@ export interface DeferNoteBlock { triggers: string[]; /** Page clock, ms since epoch, when the state or hydration state last changed. */ since: number; + /** Page clock, ms since epoch, when the overlay saw the block hydrate. */ + hydratedAt?: number; +} + +/** + * The hydration state of a block as the panel and the defer-blocks tool word + * it. A block that is `hydrated` without a `hydratedAt` hydrated before the + * overlay attached, so no one saw it happen. + */ +export function deferHydrationLabel( + block: Pick, +): string { + if (block.hydration === 'hydrated' && block.hydratedAt === undefined) { + return 'hydrated before inspection'; + } + return block.hydration; } export interface DeferNote { diff --git a/packages/devtools/src/defer-blocks.ts b/packages/devtools/src/defer-blocks.ts index 36e127a2..6b7d8acf 100644 --- a/packages/devtools/src/defer-blocks.ts +++ b/packages/devtools/src/defer-blocks.ts @@ -23,6 +23,8 @@ interface RawDeferBlock { /** The most defer blocks one collection reports. */ export const MAX_DEFER_BLOCKS = 500; const MAX_ROOT_IDS = 5; +/** The state changes a block keeps, newest last. */ +export const MAX_DEFER_TRANSITIONS = 6; const DEFER_TYPE = 0; const HYDRATION = new Set(['not-configured', 'dehydrated', 'hydrated']); @@ -66,11 +68,17 @@ function timeOf(value: unknown): number | null { */ export function createDeferTracker(now: () => number = Date.now) { const ids = new WeakMap(); - const seen = new WeakMap(); + type Transition = NonNullable[number]; + const seen = new WeakMap< + object, + { key: string; since: number; hydratedAt?: number; transitions: Transition[] } + >(); const byPosition = new WeakMap(); const lastHosts = new WeakMap(); let nextId = 0; let truncated = false; + // The blocks of the last collection by id, for a load the agent asks for. + let lastById = new Map(); const positionKey = (root: Element, index: number) => { let keys = byPosition.get(root); @@ -110,6 +118,10 @@ export function createDeferTracker(now: () => number = Date.now) { get truncated() { return truncated; }, + /** A block of the last `collect` and the host it is known by, or undefined. */ + find(id: string): { host: object; block: DeferBlockInfo } | undefined { + return lastById.get(id); + }, /** Every defer block on the page, or `undefined` when Angular exposes no util for them. */ collect( ng: DeferDebugNg | undefined, @@ -117,6 +129,7 @@ export function createDeferTracker(now: () => number = Date.now) { blocksOf?: (root: Element) => unknown[], ): DeferBlockInfo[] | undefined { truncated = false; + lastById = new Map(); const util = ng?.ɵgetControlFlowBlocks ?? ng?.ɵgetDeferBlocks; if (!ng || typeof util !== 'function') return undefined; const hosts = new Set(); @@ -153,10 +166,17 @@ export function createDeferTracker(now: () => number = Date.now) { : []; const key = `${raw.state}|${hydration}`; const previous = seen.get(host); + const changed = !previous || previous.key !== key; const record = { key, - since: previous && previous.key === key ? previous.since : now(), + since: changed ? now() : previous.since, hydratedAt: previous?.hydratedAt, + transitions: changed + ? [ + ...(previous?.transitions ?? []), + { state: raw.state, hydration, at: now() }, + ].slice(-MAX_DEFER_TRANSITIONS) + : previous.transitions, }; if (previous?.key.endsWith('|dehydrated') && hydration === 'hydrated') { record.hydratedAt = now(); @@ -188,7 +208,10 @@ export function createDeferTracker(now: () => number = Date.now) { block.placeholder = { minimumTime: timeOf(raw.placeholderBlock.minimumTime) }; } if (record.hydratedAt !== undefined) block.hydratedAt = record.hydratedAt; + // The first entry is the state the overlay found; only a change is worth sending. + if (record.transitions.length > 1) block.transitions = record.transitions; out.push(block); + lastById.set(block.id, { host, block }); } lastHosts.set(root, order); } diff --git a/packages/devtools/src/defer-load.ts b/packages/devtools/src/defer-load.ts new file mode 100644 index 00000000..819674d2 --- /dev/null +++ b/packages/devtools/src/defer-load.ts @@ -0,0 +1,228 @@ +import * as angularCore from '@angular/core'; +import { actionBlockedMessage } from './config.ts'; +import type { DeferBlockInfo } from './types.ts'; + +/** + * Loads one `@defer` block on request of the `load-defer-block` agent tool + * (dev only, behind `actions.components`). The collector never does this on + * its own. It uses the same Angular internals as `DeferBlockFixture.render` + * in `@angular/core/testing`: `ɵtriggerResourceLoading` fetches the block's + * dependencies, `ɵrenderDeferBlockState` swaps in the main content (or the + * `@error` block when the load failed), and `ng.applyChanges` runs change + * detection so the new view renders. + */ + +/** One block as `ɵgetDeferBlocks(lView, out)` lists it. */ +interface DeferBlockDetails { + lContainer: unknown[]; + lView: unknown[]; + tNode: unknown; + tDetails: { loadingState?: number; errorTmplIndex?: number | null }; +} + +/** The Angular internals a force-load needs, all private exports of `@angular/core`. */ +export interface DeferInternals { + getDeferBlocks(lView: unknown[], out: DeferBlockDetails[]): void; + triggerResourceLoading(tDetails: unknown, lView: unknown[], tNode: unknown): Promise; + renderDeferBlockState( + state: number, + tNode: unknown, + lContainer: unknown[], + skipTimerScheduling?: boolean, + ): void; +} + +export interface DeferLoadNg { + getInjector?(el: Element): unknown; + getComponent?(el: Element): unknown; + applyChanges?(component: unknown): void; +} + +export interface DeferLoadResult { + ok?: true; + /** The block's state after the load: `complete`, or `error` when its dependencies failed. */ + state?: string; + /** The block already showed its main content, so nothing was loaded. */ + already?: true; + error?: string; +} + +/** Where a block sits in the tracker's last collection. */ +export interface DeferBlockRef { + /** The anchor comment of the block, or a plain key for a block without one. */ + host: object; + block: DeferBlockInfo; +} + +// `DeferBlockState` and `DeferDependenciesLoadingState` in `@angular/core`. +const COMPLETE = 2; +const ERROR = 3; +const LOAD_FAILED = 3; +// Slots of an LContainer: the host node and the anchor comment, and where its views start. +const HOST = 0; +const NATIVE = 7; +const CONTAINER_HEADER_OFFSET = 10; +/** Stops a walk over a broken view tree. */ +const MAX_BLOCKS = 5000; + +/** The internals from the app's own `@angular/core`, or null when this build has none. */ +export function angularDeferInternals(core: object = angularCore): DeferInternals | null { + const pick = (name: string) => { + const fn = Reflect.get(core, name) as unknown; + return typeof fn === 'function' ? fn : null; + }; + const getDeferBlocks = pick('ɵgetDeferBlocks'); + const triggerResourceLoading = pick('ɵtriggerResourceLoading'); + const renderDeferBlockState = pick('ɵrenderDeferBlockState'); + if (!getDeferBlocks || !triggerResourceLoading || !renderDeferBlockState) return null; + return { + getDeferBlocks: getDeferBlocks as DeferInternals['getDeferBlocks'], + triggerResourceLoading: triggerResourceLoading as DeferInternals['triggerResourceLoading'], + renderDeferBlockState: renderDeferBlockState as DeferInternals['renderDeferBlockState'], + }; +} + +/** The view an Angular root element was created in, from its node injector. */ +function rootView(ng: DeferLoadNg, root: Element): unknown[] | null { + try { + const injector = ng.getInjector?.(root) as { _lView?: unknown } | null | undefined; + return Array.isArray(injector?._lView) ? injector._lView : null; + } catch { + return null; + } +} + +/** + * Finds the block whose container is anchored on `host`. `ɵgetDeferBlocks` + * stops at each defer block it lists, so the walk goes on into the views a + * block rendered, as `DeferBlockFixture.getDeferBlocks` does. + */ +function findBlock( + internals: DeferInternals, + views: unknown[][], + host: object, +): DeferBlockDetails | null { + const queue = [...views]; + let seen = 0; + while (queue.length && seen < MAX_BLOCKS) { + const found: DeferBlockDetails[] = []; + internals.getDeferBlocks(queue.shift()!, found); + for (const block of found) { + seen++; + const container = block.lContainer; + if (container?.[HOST] === host || container?.[NATIVE] === host) return block; + const inner = container?.[CONTAINER_HEADER_OFFSET]; + if (Array.isArray(inner)) queue.push(inner); + } + } + return null; +} + +/** Loads the block `ref` names; see the module comment. */ +export async function loadDeferBlock( + ng: DeferLoadNg | undefined, + internals: DeferInternals | null, + ref: DeferBlockRef | undefined, + roots: Element[], +): Promise { + if (!ref) { + return { + error: 'No defer block has that id on this page. List them with pangular:defer-blocks.', + }; + } + const { block, host } = ref; + if (block.state === 'complete') return { ok: true, state: 'complete', already: true }; + if (block.hydrateNever || block.hydration === 'dehydrated') { + return { + error: + 'The block is server HTML waiting for incremental hydration. Loading it here would skip its hydrate trigger, so it was left alone. Trigger its hydrate condition in the app instead.', + }; + } + if (!ng?.getInjector) { + return { + error: 'This page has no Angular debug API (`ng.getInjector`). It needs a development build.', + }; + } + if (!internals) { + return { + error: + "This page's Angular does not export the defer internals a load needs (`ɵgetDeferBlocks`, `ɵtriggerResourceLoading`, `ɵrenderDeferBlockState`).", + }; + } + if (typeof Node === 'undefined' || !(host instanceof Node)) { + return { + error: + 'Angular gives this block no anchor node yet, so its view cannot be found. Try again once the page renders it.', + }; + } + const views = roots.map((root) => rootView(ng, root)).filter((view) => view !== null); + const found = findBlock(internals, views, host); + if (!found) return { error: "The block's view could not be found from the app's roots." }; + await internals.triggerResourceLoading(found.tDetails, found.lView, found.tNode); + const failed = found.tDetails.loadingState === LOAD_FAILED; + if (failed && (found.tDetails.errorTmplIndex ?? null) === null) { + return { + error: "The block's dependencies failed to load, and it has no @error block to show.", + }; + } + internals.renderDeferBlockState(failed ? ERROR : COMPLETE, found.tNode, found.lContainer, true); + for (const root of roots) { + try { + const component = ng.getComponent?.(root); + if (component) ng.applyChanges?.(component); + } catch { + // A root that is gone; the next tick of the app renders the block all the same. + } + } + return { ok: true, state: failed ? 'error' : 'complete' }; +} + +interface LoadRpc { + call(name: string, ...args: unknown[]): Promise; + register(definition: { + name: string; + type: 'event'; + jsonSerializable: boolean; + handler: (message: never) => unknown; + }): void; +} + +export interface DeferLoadOptions { + /** `actions.components` from the config the server published. */ + allowed: boolean; + /** Loads the block with this id, after a fresh read of the page's blocks. */ + load: (id: string) => Promise; + /** Runs after a load, so the next push carries the new state. */ + loaded?: () => void; +} + +/** + * Answers the server's `defer-load` events for this page with + * `defer-load-result`. The server checks the action gate first; the page + * checks it again, so a server started with writes off never gets one through. + */ +export function registerDeferLoad(rpc: LoadRpc, pageId: string, options: DeferLoadOptions): void { + rpc.register({ + name: 'defer-load', + type: 'event', + jsonSerializable: true, + handler: (message: { requestId?: unknown; pageId?: unknown; id?: unknown } | null) => { + if (!message || typeof message.requestId !== 'string' || message.pageId !== pageId) return; + const requestId = message.requestId; + const id = message.id; + const run = async (): Promise => { + if (!options.allowed) return { error: actionBlockedMessage('components') }; + if (typeof id !== 'string' || !id) return { error: 'Pass the id of a defer block.' }; + try { + return await options.load(id); + } catch (error) { + return { error: String((error as Error)?.message ?? error).slice(0, 500) }; + } + }; + void run().then((result) => { + void rpc.call('defer-load-result', { requestId, pageId, result }).catch(() => {}); + if (result.ok && !result.already) options.loaded?.(); + }); + }, + }); +} diff --git a/packages/devtools/src/devframe.ts b/packages/devtools/src/devframe.ts index b7d1303e..b234cfc0 100644 --- a/packages/devtools/src/devframe.ts +++ b/packages/devtools/src/devframe.ts @@ -116,6 +116,8 @@ import { } from './rpc/component-tools.ts'; import { LIST_COMPONENTS_DESCRIPTION, listComponentsText } from './rpc/component-outline.ts'; import { inspectComponentText } from './rpc/component-detail-text.ts'; +import { createDeferLoads } from './rpc/defer-loads.ts'; +import { PICK_KEYS } from './component-pick.ts'; import { createComponentEdits } from './rpc/component-edits.ts'; import { createSignalRestores } from './rpc/signal-restores.ts'; import { createComponentValues, valueResultText } from './rpc/component-values.ts'; @@ -2360,6 +2362,29 @@ const pangular = defineDevframe({ }); for (const tool of componentEdits.tools) agent.registerTool(tool); + // Loads one @defer block when an agent asks: same gate and owner check as the writes above. + const deferLoads = createDeferLoads({ + config, + pages: () => componentPages.values(), + broadcast: (method, message) => { + const pageId = (message as { pageId?: unknown } | null)?.pageId; + void (my.rpc.broadcast as (options: OwnerBroadcast) => Promise)({ + method, + args: [message], + optional: true, + filter: owners.deliversTo(typeof pageId === 'string' ? pageId : undefined), + }); + }, + answersFor, + }); + register({ + name: 'defer-load-result', + type: 'action', + jsonSerializable: true, + handler: deferLoads.answer, + }); + agent.registerTool(deferLoads.tool); + // Nested levels of component values: the panel opens them, inspect-component reads them. const componentValues = createComponentValues({ pages: () => componentPages.values(), @@ -2452,6 +2477,44 @@ const pangular = defineDevframe({ }, }); + // A keyboard move of the running pick: the panel sends the key, the page + // answers with the component it shows now on the pick's result channel. + register({ + name: 'request-component-pick-move', + type: 'action', + jsonSerializable: true, + handler: (target: { pageId?: unknown; key?: unknown } | null) => { + const key = PICK_KEYS.find((k) => k === target?.key); + if (!key) return { moved: false, error: 'Unknown key.' }; + const asked = typeof target?.pageId === 'string' ? target.pageId : undefined; + const pageId = asked ?? latestComponentPage(componentPages.values())?.pageId; + if (!pageId || !componentPages.has(pageId)) { + return { moved: false, error: 'No page is connected. Open the app in a browser first.' }; + } + return new Promise>((resolve) => { + const requestId = `pick${++pickSeq}`; + const timer = setTimeout(() => { + pendingPicks.delete(requestId); + resolve({ moved: false, error: 'The page did not answer.' }); + }, 5_000); + timer.unref?.(); + pendingPicks.set(requestId, { + pageId, + settle: (result) => { + clearTimeout(timer); + pendingPicks.delete(requestId); + resolve(result); + }, + }); + void my.rpc.broadcast({ + method: 'component-pick', + args: [{ requestId, pageId, move: key }], + optional: true, + }); + }); + }, + }); + register({ name: 'cancel-component-pick', type: 'action', diff --git a/packages/devtools/src/overlay.ts b/packages/devtools/src/overlay.ts index 5c451fde..93d37448 100644 --- a/packages/devtools/src/overlay.ts +++ b/packages/devtools/src/overlay.ts @@ -68,7 +68,12 @@ import { componentHostOf, selectedComponentDetail, } from './component-tree.ts'; -import { startComponentPick } from './component-pick.ts'; +import { + PICK_KEYS, + startComponentPick, + type PickKey, + type PickMoveResult, +} from './component-pick.ts'; import { registerComponentEdit } from './component-edit-overlay.ts'; import { registerComponentValues } from './component-values-overlay.ts'; import type { ScreenshotRequest } from './component-screenshot.ts'; @@ -116,7 +121,8 @@ import { claimPageOnServer, newPageId, newPageKey } from './page-id.ts'; import { createDeltaChannel } from './delta-channel.ts'; import { COMPONENT_TREE_SHAPE, INJECTOR_TREE_SHAPE } from './push-delta.ts'; import { createDomDirty } from './dom-dirty.ts'; -import { domTree } from './host-tree.ts'; +import { angularRoots, domTree } from './host-tree.ts'; +import { angularDeferInternals, loadDeferBlock, registerDeferLoad } from './defer-load.ts'; import { LEASED_PUSH_MS, createPageLease, throttle } from './page-lease.ts'; import { setTimeoutOutside } from './outside-angular.ts'; import { createPageHeartbeat, keepaliveAfter } from './page-heartbeat.ts'; @@ -989,23 +995,43 @@ async function startOverlay( }); let cancelComponentPick: (() => void) | null = null; + let moveComponentPick: ((key: PickKey) => PickMoveResult) | null = null; if (on.components) { my.rpc.register({ name: 'component-pick', type: 'event', jsonSerializable: true, - handler: (request: { requestId?: unknown; pageId?: unknown; cancel?: unknown } | null) => { + handler: ( + request: { requestId?: unknown; pageId?: unknown; cancel?: unknown; move?: unknown } | null, + ) => { if (!request || (request.pageId && request.pageId !== pageId)) return; + // A key from the panel moves the running pick; it never starts or cancels one. + if (request.move !== undefined) { + const key = PICK_KEYS.find((k) => k === request.move); + const result: PickMoveResult = !key + ? { moved: false, error: 'Unknown key.' } + : (moveComponentPick?.(key) ?? { moved: false, error: 'No pick is running.' }); + if (typeof request.requestId === 'string') { + void my.rpc + .call('component-pick-result', { requestId: request.requestId, pageId, result }) + .catch(() => {}); + } + return; + } cancelComponentPick?.(); if (request.cancel === true || typeof request.requestId !== 'string') return; const requestId = request.requestId; const pick = startComponentPick({ getNg, - highlight: { show: showHighlight, clear: clearHighlight }, + highlight: { show: (el, reveal) => showHighlight(el, { reveal }), clear: clearHighlight }, }); cancelComponentPick = pick.cancel; + moveComponentPick = pick.move; void pick.result.then((result) => { - if (cancelComponentPick === pick.cancel) cancelComponentPick = null; + if (cancelComponentPick === pick.cancel) { + cancelComponentPick = null; + moveComponentPick = null; + } if (result.ok) { componentTarget = result.id; consoleGlobals.selectComponent(result.id); @@ -1028,6 +1054,16 @@ async function startOverlay( allowed: devtoolsConfig.actions.components, edited: () => void pushTree(true).catch(() => {}), }); + registerDeferLoad(my.rpc, pageId, { + allowed: devtoolsConfig.actions.components, + load: (id) => { + const ng = getNg(); + // A fresh read, so the load acts on the block as it is now. + deferTracker.collect(ng, document, controlFlowReader(ng)); + return loadDeferBlock(ng, angularDeferInternals(), deferTracker.find(id), angularRoots()); + }, + loaded: () => void pushTree(true).catch(() => {}), + }); // Loaded on the first capture, so pages that never take one don't pay for it. my.rpc.register({ name: 'component-screenshot', diff --git a/packages/devtools/src/rpc/component-report-guard.ts b/packages/devtools/src/rpc/component-report-guard.ts index cb82d92b..c241238e 100644 --- a/packages/devtools/src/rpc/component-report-guard.ts +++ b/packages/devtools/src/rpc/component-report-guard.ts @@ -135,6 +135,9 @@ export function guardClockOffset(pageNow: unknown, now: number): number | undefi return page !== undefined && page > 0 ? Math.round(now - page) : undefined; } +/** The most state changes kept per defer block, as the overlay sends them. */ +const MAX_GUARDED_TRANSITIONS = 6; + /** The defer blocks that have an `id`, with every field the tools read set to a safe value. */ export function guardDeferBlocks(value: unknown): DeferBlockInfo[] { return records(value) @@ -156,6 +159,17 @@ export function guardDeferBlocks(value: unknown): DeferBlockInfo[] { if (block['hydrateNever'] === true) out.hydrateNever = true; const hydratedAt = finite(block['hydratedAt']); if (hydratedAt !== undefined) out.hydratedAt = hydratedAt; + const transitions = records(block['transitions']) + .slice(-MAX_GUARDED_TRANSITIONS) + .flatMap((step) => { + const at = finite(step['at']); + if (at === undefined || !str(step['state'])) return []; + const hydration = DEFER_HYDRATION.has(step['hydration'] as DeferBlockInfo['hydration']) + ? (step['hydration'] as DeferBlockInfo['hydration']) + : 'not-configured'; + return [{ state: (step['state'] as string).slice(0, 40), hydration, at }]; + }); + if (transitions.length) out.transitions = transitions; const time = (raw: unknown) => finite(raw) ?? null; if (isRecord(block['loading'])) { out.loading = { diff --git a/packages/devtools/src/rpc/component-tools.ts b/packages/devtools/src/rpc/component-tools.ts index 3fb3c2cf..df9b8116 100644 --- a/packages/devtools/src/rpc/component-tools.ts +++ b/packages/devtools/src/rpc/component-tools.ts @@ -1,4 +1,4 @@ -import { deferNotes, type AngularPageInfo } from '../config.ts'; +import { deferHydrationLabel, deferNotes, type AngularPageInfo } from '../config.ts'; import { unsupportedToolText } from './angular-pages.ts'; import { MAX_DEFER_BLOCKS } from '../defer-blocks.ts'; import { MAX_FOR_BLOCKS } from '../for-blocks.ts'; @@ -244,11 +244,19 @@ export function deferBlocksText( `- \`${block.id}\` in ${owner}: ${notes.join(', ')}. Triggers: ${block.triggers.join(', ') || 'none'}${block.hasErrorBlock ? '' : '. It has no @error block'}.`, ); } - return `| \`${block.id}\` | ${cell(owner)} | ${block.state} | ${block.hydration} | ${cell(block.triggers.join(', ') || 'none')} | ${cell(notes.join(', '))} |`; + return `| \`${block.id}\` | ${cell(owner)} | ${block.state} | ${deferHydrationLabel(block)} | ${cell(block.triggers.join(', ') || 'none')} | ${cell(notes.join(', '))} |`; }); const more = (hidden: number, what: string) => hidden > 0 ? ['', `${hidden} more ${what} not shown.${narrow}`] : []; const hiddenRows = rows.length - DEFER_ROWS; + const early = page.deferBlocks.some( + (block) => deferHydrationLabel(block) === 'hydrated before inspection', + ) + ? [ + '', + '"hydrated before inspection" means the block hydrated before the devtools attached to the page, so when it hydrated is not known.', + ] + : []; const count = page.deferTruncated ? `more than ${MAX_DEFER_BLOCKS} defer blocks. Only the first ${MAX_DEFER_BLOCKS} are collected, so blocks past them are not listed or counted here.` : `${page.deferBlocks.length} defer ${page.deferBlocks.length === 1 ? 'block' : 'blocks'}.`; @@ -259,6 +267,7 @@ export function deferBlocksText( '| --- | --- | --- | --- | --- | --- |', ...rows.slice(0, DEFER_ROWS), ...more(hiddenRows, hiddenRows === 1 ? 'block' : 'blocks'), + ...early, ...(attention.length ? [ '', diff --git a/packages/devtools/src/rpc/defer-loads.ts b/packages/devtools/src/rpc/defer-loads.ts new file mode 100644 index 00000000..3ee9f032 --- /dev/null +++ b/packages/devtools/src/rpc/defer-loads.ts @@ -0,0 +1,178 @@ +import type { DeferLoadResult } from '../defer-load.ts'; +import { actionBlockedMessage, type ResolvedPangularConfig } from '../config.ts'; +import type { ComponentPage, DeferBlockInfo } from '../types.ts'; +import { untrusted } from './forms-tools.ts'; +import { byRecency, choosePageText, pageArgument, unknownPageText } from './pages.ts'; +import { refusal } from './refusal.ts'; + +/** How long a load waits for its page to answer; it fetches the block's chunks first. */ +export const DEFER_LOAD_TIMEOUT_MS = 15_000; + +interface Deps { + config: ResolvedPangularConfig; + /** The pages that report a component tree, with their defer blocks. */ + pages: () => Iterable; + /** Sends an event to the connection that owns the page. */ + broadcast: (method: string, message: unknown) => void; + /** Whether a result for `target` may come from the connection that sent it for `pageId`. */ + answersFor: (target: string, pageId: unknown) => boolean; + timeoutMs?: number; +} + +export interface DeferLoadTool { + id: string; + title: string; + description: string; + inputSchema: Record; + handler: (args: Record) => Promise<{ markdown: string }>; +} + +function withDeferBlocks(pages: Iterable) { + return byRecency(pages).filter((page) => page.deferBlocks?.length); +} + +function toResult(result: unknown): DeferLoadResult { + const r = (result ?? {}) as Record; + if (r['ok'] === true) { + return { + ok: true, + state: r['state'] === 'error' ? 'error' : 'complete', + ...(r['already'] === true ? { already: true as const } : {}), + }; + } + return { + error: typeof r['error'] === 'string' ? r['error'].slice(0, 2000) : 'The page did not load it.', + }; +} + +/** The answer of load-defer-block, as markdown. */ +export function deferLoadText( + result: DeferLoadResult, + block: Pick, + pageId: string, +): string { + const where = `\`${block.id}\`${block.owner ? ` in ${block.owner.name}` : ''} on page \`${pageId}\``; + if (!result.ok) return refusal(untrusted(`Defer block ${where} was not loaded. ${result.error}`)); + if (result.already) { + return untrusted(`Defer block ${where} already shows its main content, so nothing was loaded.`); + } + if (result.state === 'error') { + return untrusted( + `Loaded defer block ${where}, but its dependencies failed, so it shows its @error block. Check pangular:list-errors and the browser's network panel for the failed chunk.`, + ); + } + return untrusted( + `Loaded defer block ${where}: its dependencies were fetched and it now shows its main content. Its own triggers did not fire, so this does not prove they work. Read pangular:defer-blocks again to see its new state.`, + ); +} + +/** + * The `load-defer-block` agent tool: makes one `@defer` block fetch its + * dependencies and show its main content on the page, as if its trigger + * fired. The server sends `defer-load` to the page that owns the block and + * waits for its `defer-load-result`, which only that page's connection can + * settle. Behind `actions.components`, checked here and again on the page. + */ +export function createDeferLoads(deps: Deps) { + const pending = new Map void }>(); + let seq = 0; + + const answer = (message: { requestId?: unknown; pageId?: unknown; result?: unknown } | null) => { + if (typeof message?.requestId !== 'string') return; + const entry = pending.get(message.requestId); + if (entry && deps.answersFor(entry.pageId, message.pageId)) entry.settle(message.result); + }; + + const request = (pageId: string, id: string) => + new Promise((resolve) => { + const requestId = `l${++seq}`; + const timeoutMs = deps.timeoutMs ?? DEFER_LOAD_TIMEOUT_MS; + const timer = setTimeout(() => { + pending.delete(requestId); + resolve({ + error: `No page answered within ${Math.round(timeoutMs / 1000)}s. Is the app open in a browser, and its tab in the foreground?`, + }); + }, timeoutMs); + timer.unref?.(); + pending.set(requestId, { + pageId, + settle: (result) => { + clearTimeout(timer); + pending.delete(requestId); + resolve(toResult(result)); + }, + }); + deps.broadcast('defer-load', { requestId, pageId, id }); + }); + + const tool: DeferLoadTool = { + id: 'pangular:load-defer-block', + title: 'Load a @defer block', + description: + 'Make one live @defer block fetch its dependencies and show its main content now, as if its trigger fired (dev only). `block` is an id from pangular:defer-blocks. Dehydrated server HTML is left alone. Needs actions.components.', + inputSchema: { + type: 'object', + properties: { + block: { + type: 'string', + description: 'Defer block id from pangular:defer-blocks, such as d3.', + }, + page: { + type: 'string', + description: + 'Page id, when more than one tab has that block id (see pangular:list-pages). Required then.', + }, + }, + required: ['block'], + }, + handler: async (args) => { + if (!deps.config.actions.components) { + return { markdown: refusal(actionBlockedMessage('components')) }; + } + const id = typeof args['block'] === 'string' ? args['block'].trim() : ''; + if (!id || id.length > 100) { + return { markdown: refusal('Pass `block`: a defer block id from pangular:defer-blocks.') }; + } + const page = pageArgument(args); + const live = withDeferBlocks(deps.pages()); + if (page && !live.some((entry) => entry.pageId === page)) { + return { markdown: unknownPageText(page, live, 'defer blocks') }; + } + const scope = page ? live.filter((entry) => entry.pageId === page) : live; + const hits = scope.flatMap((entry) => + (entry.deferBlocks ?? []) + .filter((block) => block.id === id) + .map((block) => ({ pageId: entry.pageId, block })), + ); + if (!hits.length) { + return { + markdown: refusal( + live.length + ? `No defer block \`${id}\`${page ? ` on page \`${page}\`` : ''}, so nothing was loaded. Read the ids with pangular:defer-blocks.` + : 'No page reports defer blocks, so nothing was loaded. Open the app in a browser with the devtools connected.', + ), + }; + } + if (hits.length > 1) { + // A load changes the app, so it never picks one of several tabs on its own. + const pages = new Set(hits.map((hit) => hit.pageId)); + return { + markdown: choosePageText( + live.filter((entry) => pages.has(entry.pageId)), + `a defer block \`${id}\``, + ), + }; + } + const [hit] = hits; + const result = await request(hit.pageId, id); + return { markdown: deferLoadText(result, hit.block, hit.pageId) }; + }, + }; + + return { + answer, + tool, + /** Loads waiting for an answer, for tests. */ + pendingCount: () => pending.size, + }; +} diff --git a/packages/devtools/src/types.ts b/packages/devtools/src/types.ts index 5a5ffdf7..df142e0c 100644 --- a/packages/devtools/src/types.ts +++ b/packages/devtools/src/types.ts @@ -223,6 +223,11 @@ export interface ComponentDetail { name: string; tag: string; path: string; + /** + * A CSS selector that finds the host again with `querySelector`, for the + * panel's "Copy host path". Left out where the host tree has no selectors. + */ + selector?: string; source?: ComponentSource; changeDetection?: string; encapsulation?: string; @@ -257,6 +262,11 @@ export interface DeferBlockInfo { /** Page clock, ms since epoch, when the state or hydration state last changed. */ since: number; hydratedAt?: number; + /** + * The state changes the overlay saw, oldest first, on the page clock: the + * state it found, then each change. Left out until the block changed. + */ + transitions?: { state: string; hydration: DeferBlockInfo['hydration']; at: number }[]; } export interface ForBlockInfo { diff --git a/scripts/e2e-mcp.mjs b/scripts/e2e-mcp.mjs index 19dbbdb9..8cbe7911 100644 --- a/scripts/e2e-mcp.mjs +++ b/scripts/e2e-mcp.mjs @@ -833,6 +833,7 @@ const ACTION_SCENARIO_TOOLS = new Set([ 'remove-ssr-override', 'set-component-property', 'set-signal', + 'load-defer-block', 'watch-signal', 'record-pipes', 'track-subscriptions', @@ -1650,7 +1651,24 @@ async function runActions(state) { doubledAfter, ); - // watch-signal + // load-defer-block + await app.go('/examples/defer'); + await sleep(800); + const deferRow = (await read('defer-blocks', {})).match( + /\| `(d\d+)` \|[^|\n]*\| placeholder \|[^|\n]*\| on interaction \|/, + ); + r = await act('load-defer-block', { block: deferRow?.[1] ?? 'd0' }); + await sleep(800); + write( + 'load-defer-block', + 'the on interaction block shows its content without a click', + (await page.getByText('Rendered after the button was used.').count()) > 0, + r.markdown.slice(0, 300), + ); + + // watch-signal, back on the signals page after the defer example + await app.go('/examples/signals'); + await sleep(800); const graph = jsonBlock(await read('inspect-signals', { component: 'app-signals-example' })); const countNode = graph?.nodes?.find((node) => node.label === 'count'); r = await act('watch-signal', { node: countNode?.id ?? 'count', stacks: true }); @@ -2147,6 +2165,7 @@ const ACTION_VALID = { 'record-change-detection': () => ({ record: 'stop' }), 'track-subscriptions': () => ({ action: 'stop' }), 'record-pipes': () => ({ action: 'stop' }), + 'load-defer-block': () => ({ block: 'd0' }), 'clear-recordings': () => ({ target: 'router' }), 'set-component-property': () => ({ component: 'NoSuch', property: 'x', value: 1 }), 'set-signal': () => ({ component: 'NoSuch', property: 'x', value: 1 }), @@ -2998,6 +3017,7 @@ function runDocs(state) { 'params', 'replaceurl', 'skiplocationchange', + 'block', ]); // Library tools are documented but not listed for the demo, which uses none of the libraries. docs.phantomTools = [...documented].filter( diff --git a/scripts/e2e-security.mjs b/scripts/e2e-security.mjs index 77360a86..007d1cdd 100644 --- a/scripts/e2e-security.mjs +++ b/scripts/e2e-security.mjs @@ -1573,6 +1573,7 @@ async function gatingChecks() { 'remove-ssr-override', 'set-component-property', 'set-signal', + 'load-defer-block', 'watch-signal', 'record-pipes', 'track-subscriptions',