diff --git a/app/src/__tests__/full-panel-link.test.ts b/app/src/__tests__/full-panel-link.test.ts index 5b3ad5ca..400afaff 100644 --- a/app/src/__tests__/full-panel-link.test.ts +++ b/app/src/__tests__/full-panel-link.test.ts @@ -33,9 +33,12 @@ const capacitorPage = { dropped: 0, }; -function fakeClient(capacitorPages: Record) { +function fakeClient(capacitorPages: Record, calls: unknown[][] = []) { const rpc = { - call: () => new Promise(() => {}), + call: (...args: unknown[]) => { + calls.push(args); + return new Promise(() => {}); + }, callEvent: () => Promise.resolve(), sharedState: (name: string) => Promise.resolve( @@ -82,11 +85,15 @@ async function settle(fixture: ComponentFixture) { } } -async function open(path: string, capacitorPages: Record = {}) { +async function open( + path: string, + capacitorPages: Record = {}, + calls: unknown[][] = [], +) { history.replaceState(null, '', path); const fixture = TestBed.createComponent(App); await settle(fixture); - connection.resolve(fakeClient(capacitorPages)); + connection.resolve(fakeClient(capacitorPages, calls)); await settle(fixture); return { fixture, el: fixture.nativeElement as HTMLElement }; } @@ -177,6 +184,22 @@ describe('Hub rail and the full panel', () => { }); }); +describe('Hub dock badges', () => { + it('tells the server which dock is open, on load and on each switch, to clear its count', async () => { + const hub = fakeHub('pangular:ngrx'); + const calls: unknown[][] = []; + const { fixture } = await open(`${BASE}?view=ngrx`, {}, calls); + const seen = () => calls.filter(([name]) => name === 'hub-dock-seen').map(([, dock]) => dock); + expect(seen()).toEqual(['pangular:ngrx']); + + await hub.activate('pangular:all'); + await settle(fixture); + await hub.activate('pangular:all'); + await settle(fixture); + expect(seen()).toEqual(['pangular:ngrx', 'pangular:all', 'pangular:all']); + }); +}); + describe('fullPanelHref', () => { it('drops the view and sets or clears the tab', () => { expect(fullPanelHref(`http://localhost${BASE}?view=ngrx#tab=store`, 'store')).toBe( diff --git a/app/src/__tests__/hub-rail-style.test.ts b/app/src/__tests__/hub-rail-style.test.ts index 9e8d95d9..281738d9 100644 --- a/app/src/__tests__/hub-rail-style.test.ts +++ b/app/src/__tests__/hub-rail-style.test.ts @@ -55,6 +55,18 @@ describe('styleHubRail', () => { expect(styleTags[0].textContent).toContain('#ffffff'); }); + it('dims the icon of an inactive dock but not its badge, and darkens the badge palette', () => { + makeDock(); + styleHubRail(document, 'dark'); + const css = document + .querySelector('devframes-dock-standalone')! + .shadowRoot!.querySelector('style[data-pangular]')!.textContent!; + expect(css).toContain('button:not(.scale-120) > :not(.absolute)'); + expect(css).not.toMatch(/button:not\(\.scale-120\) \{/); + expect(css).toMatch(/\[style\*="59, 130, 246"\] \{\s*background-color: #2563eb !important;/); + expect(css).toMatch(/\[style\*="239, 68, 68"\] \{\s*background-color: #dc2626 !important;/); + }); + it('retries when the shadow host is not yet in the DOM', () => { vi.useFakeTimers(); styleHubRail(document, 'dark'); diff --git a/app/src/__tests__/source-link.test.ts b/app/src/__tests__/source-link.test.ts new file mode 100644 index 00000000..a84470e0 --- /dev/null +++ b/app/src/__tests__/source-link.test.ts @@ -0,0 +1,104 @@ +import { Component, signal } from '@angular/core'; +import { TestBed } from '@angular/core/testing'; +import type { DevframeRpcClient } from 'devframe/client'; +import { afterEach, describe, expect, it, vi } from 'vitest'; +import { EditorOpener, SourceLink } from '../ui/source-link'; + +@Component({ + imports: [SourceLink], + template: ` +

+

+ pages/index.page.ts +

+ `, +}) +class Host {} + +function client(answer: unknown, backend = 'websocket') { + const call = vi.fn(async () => answer); + const fake = { + connectionMeta: { backend, configs: {} }, + scope: () => ({ rpc: { call } }), + } as unknown as DevframeRpcClient; + return { fake, call }; +} + +async function render(rpc: DevframeRpcClient | null) { + TestBed.inject(EditorOpener).use(signal(rpc)); + const fixture = TestBed.createComponent(Host); + await fixture.whenStable(); + return fixture.nativeElement as HTMLElement; +} + +describe('SourceLink', () => { + afterEach(() => TestBed.resetTestingModule()); + + it('shows plain text when no server is connected', async () => { + const el = await render(null); + expect(el.querySelector('button')).toBeNull(); + expect(el.querySelector('[role="alert"], [role="status"]')).toBeNull(); + expect(el.querySelector('.plain')!.textContent!.trim()).toBe('src/app/app.ts:12'); + expect(el.querySelector('.custom')!.textContent!.trim()).toBe('pages/index.page.ts'); + }); + + it('shows plain text in a static report', async () => { + const el = await render(client({ ok: true }, 'static').fake); + expect(el.querySelector('button')).toBeNull(); + }); + + it('is a button named after the file that opens it at its line', async () => { + const { fake, call } = client({ ok: true, file: '/w/src/app/app.ts' }); + const el = await render(fake); + const button = el.querySelector('.plain button')!; + expect(button.type).toBe('button'); + expect(button.getAttribute('aria-label')).toBe('Open src/app/app.ts:12 in your editor'); + expect(button.textContent!.trim()).toBe('src/app/app.ts:12'); + button.click(); + await vi.waitFor(() => + expect(call).toHaveBeenCalledWith('open-in-editor', { file: 'src/app/app.ts', line: 12 }), + ); + expect(el.querySelector('[role="alert"], [role="status"]')).toBeNull(); + }); + + it('keeps projected text, whose words are part of the accessible name', async () => { + const { fake, call } = client({ ok: true }); + const el = await render(fake); + const button = el.querySelector('.custom button')!; + expect(button.textContent!.trim()).toBe('pages/index.page.ts'); + expect(button.getAttribute('aria-label')).toContain('pages/index.page.ts'); + button.click(); + await vi.waitFor(() => + expect(call).toHaveBeenCalledWith('open-in-editor', { + file: '/src/app/pages/index.page.ts', + }), + ); + }); + + it('says why the server did not open it', async () => { + const { fake } = client({ ok: false, error: 'src/app/app.ts is outside the project root.' }); + const el = await render(fake); + el.querySelector('.plain button')!.click(); + expect(TestBed.inject(EditorOpener).available()).toBe(true); + await vi.waitFor(() => { + TestBed.tick(); + expect(el.querySelector('.plain [role="alert"]')!.textContent).toBe( + 'Not opened: src/app/app.ts is outside the project root.', + ); + }); + }); + + it('reports a server without the RPC', async () => { + const fake = { + connectionMeta: { backend: 'websocket', configs: {} }, + scope: () => ({ rpc: { call: async () => Promise.reject(new Error('unknown')) } }), + } as unknown as DevframeRpcClient; + TestBed.inject(EditorOpener).use(signal(fake)); + expect(await TestBed.inject(EditorOpener).open('a.ts', 1)).toEqual({ + ok: false, + error: 'The server did not open it.', + }); + }); +}); diff --git a/app/src/app.ts b/app/src/app.ts index ca653466..21d6a9d7 100644 --- a/app/src/app.ts +++ b/app/src/app.ts @@ -40,7 +40,8 @@ import { hostPageId, scopeToPage } from './page-id'; import { angularNativePage, type PlatformPage } from './native-page'; import { initialTab, storeTab, storedTab } from './tab-memory'; import { detectBaseURL } from './base-url'; -import { clearHighlightsOnHide } from './rpc'; +import { clearHighlightsOnHide, rpcTry } from './rpc'; +import { EditorOpener } from './ui/source-link'; import { viewAccent } from './view-accents'; import { HUB_ALL_TOOLS, @@ -992,6 +993,8 @@ export class App implements OnInit, OnDestroy { return (view && (VIEW_TAB[view] ?? VIEW_TABS[view]?.[0])) || 'dashboard'; }); rpc = signal(null); + /** The hub dock opened last, a new object each time, so opening it again counts. */ + private readonly openedDock = signal<{ dock: string } | null>(null); connected = signal(false); readonly connectionFailed = signal(false); private readonly hiddenPages = signal([]); @@ -1020,6 +1023,7 @@ export class App implements OnInit, OnDestroy { readonly navFade = signal({ start: false, end: false }); constructor() { + inject(EditorOpener).use(this.rpc); afterNextRender(() => { const nav = this.nav()?.nativeElement; if (!nav || typeof ResizeObserver === 'undefined') return; @@ -1034,6 +1038,13 @@ export class App implements OnInit, OnDestroy { this.measureNav(); }); }); + // Opening a dock clears the count of unseen messages on it. + effect(() => { + const opened = this.openedDock(); + const client = this.rpc(); + if (!opened || !client) return; + untracked(() => void rpcTry(client, 'hub-dock-seen', hubDockId(opened.dock))); + }); effect(() => { const theme = this.themeService.current(); untracked(() => { @@ -1070,9 +1081,11 @@ export class App implements OnInit, OnDestroy { ngOnInit() { // The views and the full panel share one hub frame, so whichever loaded // first follows the rail. - this.stopFollowing = followHubDocks(HUB_DOCKS, (dock) => - dock === ALL_TOOLS ? this.showFullPanel() : this.showView(dock), - ); + this.stopFollowing = followHubDocks(HUB_DOCKS, (dock) => { + this.openedDock.set({ dock }); + if (dock === ALL_TOOLS) this.showFullPanel(); + else this.showView(dock); + }); const restored = initialTab( location.hash, storedTab(this.tabScope()), diff --git a/app/src/hub-rail-style.ts b/app/src/hub-rail-style.ts index a49f5b15..3cf5d474 100644 --- a/app/src/hub-rail-style.ts +++ b/app/src/hub-rail-style.ts @@ -5,17 +5,38 @@ function activeDockStyle(theme: 'dark' | 'light'): string { const accentGlow = theme === 'light' ? 'rgba(146, 64, 14, 0.50)' : 'rgba(245, 165, 36, 0.60)'; return ` .devframes-dock-entry button { - transition: opacity 0.2s, filter 0.2s, background-color 0.2s, transform 0.3s; + transition: background-color 0.2s, transform 0.3s; } - .devframes-dock-entry button:not(.scale-120) { + /* Dim the icon of an inactive dock, never its badge, so the count keeps + its contrast. hub-ui's own dim classes would fade the whole button. */ + .devframes-dock-entry button.op50, + .devframes-dock-entry button.saturate-0 { + opacity: 1; + filter: none; + } + .devframes-dock-entry button > * { + transition: opacity 0.2s, filter 0.2s; + } + .devframes-dock-entry button:not(.scale-120) > :not(.absolute) { opacity: 0.45; filter: saturate(0); } - .devframes-dock-entry button:not(.scale-120):hover, - .devframes-dock-entry button:not(.scale-120):focus-visible { + .devframes-dock-entry button:not(.scale-120):hover > :not(.absolute), + .devframes-dock-entry button:not(.scale-120):focus-visible > :not(.absolute) { opacity: 1; filter: none; } + /* hub-ui's badge palette (blue-500 and red-500 on a pale tint) is below + 4.5:1, and it sets the colors inline, hence the attribute selectors and + !important. blue-600 and red-600 with white text pass. */ + .devframes-dock-entry .absolute[style*="59, 130, 246"] { + background-color: #2563eb !important; + color: #ffffff !important; + } + .devframes-dock-entry .absolute[style*="239, 68, 68"] { + background-color: #dc2626 !important; + color: #ffffff !important; + } .devframes-dock-entry button:focus-visible { outline: 2px solid ${accent}; outline-offset: 2px; @@ -30,7 +51,8 @@ function activeDockStyle(theme: 'dark' | 'light'): string { color-scheme: ${theme}; } @media (prefers-reduced-motion: reduce) { - .devframes-dock-entry button { + .devframes-dock-entry button, + .devframes-dock-entry button > * { transition: none; } } diff --git a/app/src/pages/analog-inspector.ts b/app/src/pages/analog-inspector.ts index 84c74cb2..2cfddb96 100644 --- a/app/src/pages/analog-inspector.ts +++ b/app/src/pages/analog-inspector.ts @@ -15,6 +15,7 @@ import { hostPageId } from '../page-id'; import { rpcCall, rpcTry as call } from '../rpc'; import { actionAllowed, actionBlockedMessage } from '../devtools-config'; import { Select } from '../ui/select'; +import { SourceLink } from '../ui/source-link'; interface AnalogRoute { id: string; @@ -314,7 +315,7 @@ function walk(routes: AnalogRoute[], depth = 0, out: { route: AnalogRoute; depth @Component({ selector: 'app-analog-inspector', - imports: [Select], + imports: [Select, SourceLink], template: ` @if (project() === null && loadFailed()) {

{{ f.message }}

diff --git a/app/src/pages/route-inspector.ts b/app/src/pages/route-inspector.ts index bd850ac5..415d2c2c 100644 --- a/app/src/pages/route-inspector.ts +++ b/app/src/pages/route-inspector.ts @@ -11,12 +11,13 @@ import { import type { DevframeRpcClient } from 'devframe/client'; import { isStaticReport } from '../rpc'; import { LiveRoute } from './live-route'; -import { SHARED_STYLES, sourceLocation, type SourceRoute } from './router-types'; +import { SHARED_STYLES, type SourceRoute } from './router-types'; import type { ComponentFocus } from '../types/component-focus.types'; +import { SourceLink } from '../ui/source-link'; @Component({ selector: 'app-route-inspector', - imports: [LiveRoute], + imports: [LiveRoute, SourceLink], template: ` none } - {{ location(route) }} + + + } @@ -283,10 +286,6 @@ export class RouteInspector { ]; } - location(route: SourceRoute) { - return sourceLocation(route); - } - onFilterInput(event: Event) { const target = event.target as HTMLInputElement | null; this.filter.set(target?.value ?? ''); diff --git a/app/src/pages/route-tree.ts b/app/src/pages/route-tree.ts index 9961029b..b32e9369 100644 --- a/app/src/pages/route-tree.ts +++ b/app/src/pages/route-tree.ts @@ -21,6 +21,7 @@ import { type RouterPage, type SourceRoute, } from './router-types'; +import { SourceLink } from '../ui/source-link'; /** "3 of 12 routes": the filtered count, worded like the other panel pages. */ export function routeCountText(matches: number, total: number): string { @@ -31,6 +32,7 @@ interface NodeRow { node: RouteNode; depth: number; source?: string; + at?: SourceRoute; } interface MatchResult { @@ -49,7 +51,7 @@ interface TestedUrl { @Component({ selector: 'app-route-tree', - imports: [JsonPipe], + imports: [JsonPipe, SourceLink], template: `
@@ -186,10 +188,11 @@ interface TestedUrl { @if (row.node.outlet) { outlet {{ row.node.outlet }} } - @if (row.source) { + @if (row.at) { declared in {{ row.source }} + >declared in } @@ -496,7 +499,7 @@ export class RouteTree { !!node.component?.toLowerCase().includes(needle) || !!source?.toLowerCase().includes(needle) ) { - rows.push({ node, depth, source }); + rows.push({ node, depth, source, at: found }); } if (node.children) visit(node.children, depth + 1); } diff --git a/app/src/pages/signal-inspector.ts b/app/src/pages/signal-inspector.ts index 3686ae05..36351f24 100644 --- a/app/src/pages/signal-inspector.ts +++ b/app/src/pages/signal-inspector.ts @@ -19,6 +19,7 @@ import { pickPage, type ReportedPage } from '../live-pages'; import { hostPageId } from '../page-id'; import { RovingList } from '../ui/roving-list'; import { Select, type SelectOption } from '../ui/select'; +import { SourceLink } from '../ui/source-link'; interface SignalNode { id: string; @@ -151,7 +152,7 @@ const KIND_COLORS: Record = { @Component({ selector: 'app-signal-inspector', - imports: [DatePipe, JsonPipe, NgTemplateOutlet, RovingList, Select], + imports: [DatePipe, JsonPipe, NgTemplateOutlet, RovingList, Select, SourceLink], template: `
= { {{ sig.name }}
- {{ sig.file }}:{{ sig.line }} + @if (sig.component) { in <{{ sig.component }}> diff --git a/app/src/pages/store-inspector.ts b/app/src/pages/store-inspector.ts index d8e85a3a..df820116 100644 --- a/app/src/pages/store-inspector.ts +++ b/app/src/pages/store-inspector.ts @@ -34,6 +34,7 @@ import { type NgrxState, type NgrxStoreEntry, } from './store-types'; +import { SourceLink } from '../ui/source-link'; const KIND_COLORS: Record = { action: '#f59e0b', @@ -94,7 +95,7 @@ const CLASSIC_KINDS = new Set([ @Component({ selector: 'app-store-inspector', - imports: [LimitNote, RovingList, Select, NgTemplateOutlet], + imports: [LimitNote, RovingList, Select, NgTemplateOutlet, SourceLink], template: `
{{ kindLabel(current.kind) }} scope: {{ current.scope }} @if (current.signal?.declaredIn; as file) { - {{ file }} + } @if (current.classic) { {{ @@ -802,9 +803,7 @@ const CLASSIC_KINDS = new Set([ {{ kindLabel(entry.kind) }}
- {{ entry.file }}:{{ entry.line }} +
@if (entry.detail) {

{{ entry.detail }}

diff --git a/app/src/ui/source-link.ts b/app/src/ui/source-link.ts new file mode 100644 index 00000000..87aed62c --- /dev/null +++ b/app/src/ui/source-link.ts @@ -0,0 +1,130 @@ +import { Component, computed, inject, input, signal, Service, type Signal } from '@angular/core'; +import { NgTemplateOutlet } from '@angular/common'; +import type { DevframeRpcClient } from 'devframe/client'; +import { isStaticReport, rpcCall } from '../rpc'; + +export interface OpenInEditorAnswer { + ok: boolean; + error?: string; +} + +/** + * Opens source files in the developer's editor through the server's + * `open-in-editor` RPC. Unavailable without a live server: in a static + * report, or in the extension when no hub is connected. + */ +@Service() +export class EditorOpener { + private readonly source = signal>(signal(null)); + private readonly client = computed(() => this.source()()); + + readonly available = computed(() => { + const client = this.client(); + return !!client && !isStaticReport(client); + }); + + /** Follows the panel's connection. */ + use(client: Signal) { + this.source.set(client); + } + + async open(file: string, line?: number): Promise { + if (!this.available()) return { ok: false, error: 'No server is connected.' }; + try { + const answer = (await rpcCall(this.client(), 'open-in-editor', { + file, + ...(line ? { line } : {}), + })) as OpenInEditorAnswer | null; + if (answer?.ok) return { ok: true }; + return { ok: false, error: answer?.error ?? 'The server did not open it.' }; + } catch { + return { ok: false, error: 'The server did not open it.' }; + } + } +} + +/** `file:line`, or `file` alone when the line is unknown. */ +export function sourceText(file: string, line?: number | null): string { + return line ? `${file}:${line}` : file; +} + +/** + * A file and line from the source. With a live server it is a button that + * opens the file in the editor; otherwise it is plain text. The projected + * content replaces the default `file:line` text. + */ +@Component({ + selector: 'app-source-link', + imports: [NgTemplateOutlet], + template: ` + {{ label() }} + @if (editor.available()) { + + @if (message()) { + + {{ message() }} + } + } @else { + + } + `, + styles: ` + @use 'mixins' as m; + + :host { + display: inline; + min-width: 0; + } + .source-link { + display: inline; + padding: 0; + border: 0; + border-radius: 2px; + background: none; + color: inherit; + font: inherit; + text-align: inherit; + text-decoration: underline dotted; + text-underline-offset: 2px; + cursor: pointer; + overflow-wrap: anywhere; + } + .source-link:hover { + color: var(--accent-text); + text-decoration-style: solid; + } + .source-link:focus-visible { + @include m.focus-ring; + } + .message { + margin-left: 6px; + color: var(--danger-text); + font-family: var(--font-sans); + font-size: 0.92em; + } + `, +}) +export class SourceLink { + protected readonly editor = inject(EditorOpener); + readonly file = input.required(); + readonly line = input(undefined); + protected readonly label = computed(() => sourceText(this.file(), this.line())); + protected readonly message = signal(''); + + async open() { + this.message.set(''); + const answer = await this.editor.open(this.file(), this.line() ?? undefined); + if (!answer.ok) this.message.set(`Not opened: ${answer.error}`); + } +} diff --git a/apps/docs/src/content/agents/mcp-server.md b/apps/docs/src/content/agents/mcp-server.md index 7cd48317..1f19f05b 100644 --- a/apps/docs/src/content/agents/mcp-server.md +++ b/apps/docs/src/content/agents/mcp-server.md @@ -29,6 +29,28 @@ There are two ways to connect. Pick one based on the data your agent needs. | stdio (`pangular mcp`) | No. Source scan tools only. | A command in your MCP client config. | | HTTP (`/__devframes/__mcp`) | Yes, with the app open in a browser. | A URL on your app's dev server. | +## Print the config + +Run `pangular mcp --print-config` in your project folder. It prints the config for both transports, for Claude Code (a `claude mcp add` command), Cursor and VS Code, and exits. + +```bash +npx @pangular-inspector/devtools mcp --print-config --port 4000 --base /__devframes/ +``` + +| Flag | Effect on the output | +| --------------- | ----------------------------------------------------------------------------------------------------------- | +| `--root ` | The project folder in the stdio config, as an absolute path. The default is the working directory. | +| `--host ` | Host in the HTTP URL and the `Origin` header. The default is `localhost`. | +| `--port ` | Port in the HTTP URL. The default is 9999, the [standalone CLI](../getting-started/cli.md). | +| `--base ` | The hub base, such as `/__devframes/`. The URL becomes `__mcp` and the config sends the bearer token. | +| `--https` | The server is behind TLS. The URL and the `Origin` header use `https://`. | + +`--config` and `--read-only` are added to the stdio command. The output never holds the token. It reads the token from `PANGULAR_MCP_TOKEN` (VS Code asks for it) and prints the `export` line that sets it from the [token file](#send-a-token). Without `--base`, the HTTP config targets the standalone CLI, which asks for no token. + +The stdio server is named `pangular` and the HTTP one `pangular-live`, so you can add both. Claude Code prefers a local server over a project server of the same name, so with one name the HTTP server would never load. + +With `--base` and a `--host` that is not a loopback address, such as `192.168.1.20`, the output starts the HTTP part with a warning: the URL is `http`, so the token travels in clear text on your network. Serve the hub over TLS and pass `--https`, or keep it to a network you trust. `localhost`, `127.0.0.1` and `::1` get no warning. + ## Connect over stdio The package ships a `pangular` binary. Its `mcp` command starts an MCP server on stdin and stdout. @@ -138,7 +160,7 @@ The stdio server never needs a token. // .mcp.json { "mcpServers": { - "pangular": { + "pangular-live": { "type": "http", "url": "http://localhost:4000/__devframes/__mcp", "headers": { @@ -154,7 +176,7 @@ The stdio server never needs a token. // .cursor/mcp.json { "mcpServers": { - "pangular": { + "pangular-live": { "url": "http://localhost:4000/__devframes/__mcp", "headers": { "Authorization": "Bearer ${env:PANGULAR_MCP_TOKEN}", @@ -177,7 +199,7 @@ The stdio server never needs a token. } ], "servers": { - "pangular": { + "pangular-live": { "type": "http", "url": "http://localhost:4000/__devframes/__mcp", "headers": { diff --git a/apps/docs/src/content/agents/tools.md b/apps/docs/src/content/agents/tools.md index 05eed3e5..88098915 100644 --- a/apps/docs/src/content/agents/tools.md +++ b/apps/docs/src/content/agents/tools.md @@ -59,6 +59,8 @@ Every tool has one of three safety tiers. The server sends the tier to your clie The ten 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. `change-detection` posts only when it starts, stops or clears a recording. See [Messages and badges](../getting-started/popup-and-hub.md#messages-and-badges). + ### Turn tools off The server decides which tools exist. Set `agent.readOnly` to keep only the `read` tools. `change-detection` stays as a `read` tool without its `record` argument, so it reads a recording the panel started. Set `agent.tools.` to `false` to hide one inspector's tools and resources, and keep its tab. Turning an inspector off with `inspectors`, or blocking an action with `actions`, drops the matching tools too. `actions.router` is the exception: `navigate` stays for `instrument` and `resolve-lazy`, and refuses `navigate`, `abort`, `replay` and `probe`. See [Inspectors and agent tools](../getting-started/configuration.md#inspectors-and-agent-tools). diff --git a/apps/docs/src/content/getting-started/cli.md b/apps/docs/src/content/getting-started/cli.md index f5969e9e..30e2b32f 100644 --- a/apps/docs/src/content/getting-started/cli.md +++ b/apps/docs/src/content/getting-started/cli.md @@ -179,6 +179,24 @@ npx @pangular-inspector/devtools mcp Your agent client runs this command for you. [MCP server](../agents/mcp-server.md) covers client setup. +### Print the client config + +`mcp --print-config` prints the config for Claude Code, Cursor and VS Code, then exits without starting a server. It covers the stdio server for the project folder and the HTTP endpoint of a running server. It never prints the MCP token. See [Print the config](../agents/mcp-server.md#print-the-config). + +```bash +npx @pangular-inspector/devtools mcp --print-config --port 4000 --base /__devframes/ +``` + +| Flag | What it does | +| ---------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `--print-config` | Print the client config and exit. | +| `--host ` | Host of the server that runs your app, for the HTTP config. The default is `localhost`. | +| `--port ` | Port of that server. The default is 9999, the standalone CLI. | +| `--base ` | The hub base, such as `/__devframes/` for the Express hub and the Vite plugin. With it, the HTTP config sends the MCP token. | +| `--https` | The server is behind TLS, so the HTTP config uses `https://`. | + +`--root`, `--config` and `--read-only` go into the printed stdio command, with absolute paths. The stdio server is named `pangular` and the HTTP server `pangular-live`, so a client can hold both. With `--base` and a `--host` that is not a loopback address, the output warns that the token travels in clear text over `http`; pass `--https` when the server is behind TLS. + ### Source scan only The stdio server has no page connected, so it registers only the tools that read your source files. The tools that need a page, such as `highlight`, `navigate`, `form-action` and the forms and router tools, are left out. For live data, point your agent at the HTTP endpoint of a running app instead. On a hub it lives at `/__devframes/__mcp`. diff --git a/apps/docs/src/content/getting-started/nativescript.md b/apps/docs/src/content/getting-started/nativescript.md index e597c572..f6c2c21e 100644 --- a/apps/docs/src/content/getting-started/nativescript.md +++ b/apps/docs/src/content/getting-started/nativescript.md @@ -25,6 +25,8 @@ This page describes what the overlay shows and how it works. To add it to an app The source scans (routes, pipes, NgRx declarations) come from the server, so they work as with the [Standalone CLI](./cli.md). The Router, Forms, SSR & HTTP and change detection tabs show no live data for a NativeScript app, and there is no in-app popup. +The server's [configuration](./configuration.md) applies to the app: inspectors you turn off there are not collected, and `redaction.secretNames` masks values before they leave the device. + ### Hidden controls Some controls only work with the [browser overlay](./overlay.md), so the panel hides them while the Components tab shows a NativeScript app: diff --git a/apps/docs/src/content/getting-started/overlay.md b/apps/docs/src/content/getting-started/overlay.md index e04f2a7f..5b595210 100644 --- a/apps/docs/src/content/getting-started/overlay.md +++ b/apps/docs/src/content/getting-started/overlay.md @@ -260,7 +260,7 @@ The overlay and the button do not start inside the devtools panel frame, so a mi When you hover or focus a row in the devtools, the overlay draws an amber box around its element in the page. The box follows the element and stays until the pointer or focus leaves the row. The box also clears when the panel closes, reloads or loses its connection to the dev server. If that clear never reaches the page, the box clears after 60 seconds. A box drawn by the [`highlight` agent tool](../agents/tools.md) clears after 2 seconds. -While you pick an element on the page, the box follows the pointer and clears when the pointer leaves the page or picking ends. +While you pick an element on the page, the box follows the pointer and clears when the pointer leaves the page or picking ends. An Alt+click (Option+click on macOS) picks the component and asks the server to open its file in your editor. See [Pick a component on the page](../inspectors/components.md#pick-a-component-on-the-page). - The box also works for SVG hosts, like `g[app-bar]` in a chart. - A host with `display: contents` has no box of its own, so the box goes around its children. 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 1d9f211a..13ede00d 100644 --- a/apps/docs/src/content/getting-started/popup-and-hub.md +++ b/apps/docs/src/content/getting-started/popup-and-hub.md @@ -113,7 +113,7 @@ The panel follows the color scheme of the hub, which follows your system unless ### Docks in the side rail -When the page's server mounts the hub (`/__devframes/`), the button opens the whole hub. A side rail shows **All tools** first, then one dock per tool: +When the page's server mounts the hub (`/__devframes/`), the button opens the whole hub. The side rail holds every Pangular dock in one **Pangular** group. Pick the group to see its docks: **All tools** first, then one dock per tool. The group opens **All tools** the first time, then the dock you picked last. | Dock | Shows | | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | @@ -143,6 +143,24 @@ The Analog, Angular Native and Capacitor docks open setup steps when their tool The tooltip comes back when the app stops reporting and its data expires. The Angular and NgRx docks always have data. The NativeScript dock always shows setup steps, because a NativeScript app's data shows in the Angular dock, so its tooltip stays **NativeScript**. +### Messages and badges + +The hub keeps a list of messages. Pangular Inspector posts to it when something happens in the app: + +| Message | Level | Category | Posted when | +| -------------------------------------------- | ----- | ----------- | ---------------------------------------------------------------------------------------------------------------------- | +| `Agent ran ` | info | `agent` | An [action tool](../agents/tools.md#action-tools) that changes the app or the server finishes, such as `set-http-rule` | +| The NG error, such as `NG01203: ...` | error | `runtime` | A page reports a forms setup error (`NG01xxx`) | +| `Navigation failed (NG04002): ...` | error | `runtime` | A page reports a failed navigation | +| `Hydration mismatch at ` | error | `hydration` | A page reports a node that failed to hydrate, with the expected and actual node | +| The hydration message, such as `NG0505: ...` | warn | `hydration` | A page logs an `NG05xx` hydration message | + +Each message names the pages it came from (also as `page:` labels) and has an **Open in Pangular** action that opens the dock that shows it. An error opens a toast the first time it shows up. When the same item comes back, from the same page after a reload or from another tab, the first message counts it (`(3 times)`) instead of posting it again. A call that only reads, like `change-detection` without `record`, posts nothing. Text in messages is masked like the rest of the panel. An agent message shows the first line of the tool's answer and the `page` argument, not the other arguments. + +A dock shows how many items it has that you have not seen yet: NgRx writes on **NgRx**, Analog writes on **Analog**, and everything else on **Angular**. The **Pangular** group shows the total. The badge is red while one of them is an error or a warning. Opening a dock clears its count, and opening **All tools** clears every count. The count is also part of the dock name that screen readers and the tooltip use, for example `Angular (2 new, with errors)`. When the unseen items hold warnings, such as an NG05xx hydration message, but no error, the name ends in `with warnings` instead. + +Messages follow the config. An inspector that is off posts nothing (forms errors need `inspectors.forms`, failed navigations `inspectors.router`, hydration messages `inspectors.http`), and an agent tool turned off with `agent.tools`, `agent.readOnly` or `actions` posts nothing either. See [Configuration](./configuration.md). + ### Full-page viewer The full-page viewer is at `/__devframes/` on the same server. The hub is built on [`@devframes/hub`](https://github.com/devframes/devframe), so other devframe tools can join the same rail. diff --git a/apps/docs/src/content/inspectors/components.md b/apps/docs/src/content/inspectors/components.md index b82bfc0a..ea27c333 100644 --- a/apps/docs/src/content/inspectors/components.md +++ b/apps/docs/src/content/inspectors/components.md @@ -40,7 +40,7 @@ The tree shows up to 2000 component instances, and walks up to 256 levels of DOM ### Detail header -The header of the selected instance shows the class name, the host tag, and the source file and line. In a development build, the file and line come from the debug info Angular's compiler attaches to the component, so they point at the exact class. Without it, they come from the source scan, matched by class name. They are missing when neither has them. +The header of the selected instance shows the class name, the host tag, and the source file and line. In a development build, the file and line come from the debug info Angular's compiler attaches to the component, so they point at the exact class. Without it, they come from the source scan, matched by class name. They are missing when neither has them. With a live devtools server, the file and line are a button that opens the file in your editor. See [Open a file in your editor](#open-a-file-in-your-editor). In the [Chrome extension](../getting-started/chrome-extension.md), the header also has two buttons: @@ -164,6 +164,24 @@ While picking, presses and clicks in the app don't reach it, so menus and drag h 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. + +### Open a file in your editor + +With a live devtools server, the source file and line of a component, provider, signal, store, pipe, route or Analog file is a button. Click it, or focus it and press Enter, to open the file at that line in your editor. In a list row that is itself a button, select the row and use the file in its details. In a static report, and in the Chrome extension without a devtools server, the file and line stay plain text. + +The server launches the editor on the machine it runs on. It picks the editor in this order: + +| Source | Example | +| ------------------------- | ---------------------------------------- | +| `LAUNCH_EDITOR` | `LAUNCH_EDITOR=code pnpm start` | +| An editor already running | VS Code, Cursor, WebStorm and other IDEs | +| `VISUAL`, then `EDITOR` | `EDITOR=vim` | + +If the host installs the `@devframes/service-open` service, its `editor` option takes over. + +The server only opens regular files inside the project. Paths outside the workspace root and the served app, symlinks that point outside them, folders and missing files are refused, and the button says why. See [Open in editor](../security.md#open-in-editor). + ### Start from the Elements panel If you use the [Chrome extension](../getting-started/chrome-extension.md), open the **Components** tab in its panel. Then select an element in the Chrome **Elements** panel. The tab selects the component that hosts that element and scrolls its row into view. diff --git a/apps/docs/src/content/security.md b/apps/docs/src/content/security.md index 476cc9bb..c6955981 100644 --- a/apps/docs/src/content/security.md +++ b/apps/docs/src/content/security.md @@ -142,7 +142,7 @@ The HTTP MCP endpoint answers only requests that carry a loopback `Origin` heade While the one-time code is on, the endpoint also asks for a bearer token. That is the default for the Express hub and the Vite plugin. The hub writes a generated token to `~/.pangular-inspector/mcp-token`, a file only you can read (mode `0600`), and prints the path, not the token. It keeps that token across restarts. Set `PANGULAR_MCP_TOKEN` to choose the token yourself, or `PANGULAR_MCP_TOKEN_FILE` to use another file. Requests without the right `Authorization: Bearer ` header get `401`. The stdio server needs no token. See [Send a token](./agents/mcp-server.md#send-a-token). -The Express hub answers MCP requests from other addresses only with `allowLan: true`, and then only those that send the right token and a loopback `Origin`. Any client can set that header, so treat the token like a password. +The Express hub answers MCP requests from other addresses only with `allowLan: true`, and then only those that send the right token and a loopback `Origin`. Any client can set that header, so treat the token like a password. Over plain `http`, the token crosses the network in clear text: serve the hub over TLS for other machines, or keep it to a network you trust. `pangular mcp --print-config` warns about this for a non-loopback `--host` and takes `--https` for a server behind TLS. ### Chrome extension @@ -158,6 +158,17 @@ Every installed extension can send requests to a loopback host, with its own `ch If you build the extension with another `key`, add its origin to `allowedOrigins`. Each entry names one extension. The ID is on the extension card in `chrome://extensions`. See [Server origin](./getting-started/chrome-extension.md#server-origin). +### Open in editor + +The panel and the overlay can ask the server to open a source file in your editor (see [Open a file in your editor](./inspectors/components.md#open-a-file-in-your-editor)). The request goes through the same gate and one-time code as every other call. The server then checks the path before it starts the editor: + +- It resolves the path against the workspace root, the directory the server runs in and the served app. A path that leaves all of them, with `..` or as an absolute path, is refused. +- It follows symlinks and refuses the file when its real path is outside those directories. +- It opens regular files only. Folders and missing files are refused. +- Line and column must be positive whole numbers, or they are left out. + +The request names a file and a line, never a command. The editor comes from the server's environment. Agent tools can't open files. + ### Page ownership Each tab, Angular Native app or Capacitor app that reports to the server has a page id. The first connection that reports a page owns it. A report or a `forget` for that page id from any other connection is ignored, so one client can't overwrite or remove the data of another tab. The answer to a request sent to a page, such as a navigation, a form action, an NgRx dispatch or a component pick, is taken only from the connection that owns that page. diff --git a/extension/ui/assets/browser-agent-rpc-BXhoSh1z-CXflmhRO.js b/extension/ui/assets/browser-agent-rpc-BXhoSh1z-6a4lgDHo.js similarity index 93% rename from extension/ui/assets/browser-agent-rpc-BXhoSh1z-CXflmhRO.js rename to extension/ui/assets/browser-agent-rpc-BXhoSh1z-6a4lgDHo.js index ad67ec49..3b981d54 100644 --- a/extension/ui/assets/browser-agent-rpc-BXhoSh1z-CXflmhRO.js +++ b/extension/ui/assets/browser-agent-rpc-BXhoSh1z-6a4lgDHo.js @@ -1 +1 @@ -import{t as e}from"./index-CIXSLLaF.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(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).catch(()=>{}))}))},s=a(o),l=e.events.on(`connection:status`,e=>{e===`connected`&&o()});return o(),()=>{n=!0,s(),l()}}export{l as setupBrowserAgentRpcBridge}; \ No newline at end of file +import{t as e}from"./index-ChKyyuJq.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(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).catch(()=>{}))}))},s=a(o),l=e.events.on(`connection:status`,e=>{e===`connected`&&o()});return o(),()=>{n=!0,s(),l()}}export{l as setupBrowserAgentRpcBridge}; \ No newline at end of file diff --git a/extension/ui/assets/index-CIXSLLaF.js b/extension/ui/assets/index-ChKyyuJq.js similarity index 59% rename from extension/ui/assets/index-CIXSLLaF.js rename to extension/ui/assets/index-ChKyyuJq.js index 47c1059b..4eb22acf 100644 --- a/extension/ui/assets/index-CIXSLLaF.js +++ b/extension/ui/assets/index-ChKyyuJq.js @@ -3,12 +3,12 @@ \r \v ᠎ - \u2028\u2029   `;`${tn}`,`${tn}`;var nn=(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})(nn||{}),rn=(function(e){return e[e.Plain=0]=`Plain`,e[e.TemplateLiteralPart=1]=`TemplateLiteralPart`,e[e.TemplateLiteralEnd=2]=`TemplateLiteralEnd`,e})(rn||{});nn.Character,S.StyleMap,S.ClassMap,S.StyleProp,S.ClassProp,S.Attribute,S.Property,S.Attribute,S.Control,S.DomProperty,S.DomProperty,S.Attribute,S.StyleMap,S.ClassMap,S.StyleProp,S.ClassProp,S.Listener,S.TwoWayListener,S.AnimationListener,S.StyleMap,S.ClassMap,S.StyleProp,S.ClassProp,S.Property,S.TwoWayProperty,S.DomProperty,S.Attribute,S.Animation,S.Control,Xt.Idle,x.deferOnIdle,x.deferPrefetchOnIdle,x.deferHydrateOnIdle,Xt.Immediate,x.deferOnImmediate,x.deferPrefetchOnImmediate,x.deferHydrateOnImmediate,Xt.Timer,x.deferOnTimer,x.deferPrefetchOnTimer,x.deferHydrateOnTimer,Xt.Hover,x.deferOnHover,x.deferPrefetchOnHover,x.deferHydrateOnHover,Xt.Interaction,x.deferOnInteraction,x.deferPrefetchOnInteraction,x.deferHydrateOnInteraction,Xt.Viewport,x.deferOnViewport,x.deferPrefetchOnViewport,x.deferHydrateOnViewport,Xt.Never,x.deferHydrateNever,x.deferHydrateNever,x.deferHydrateNever,x.pipeBind1,x.pipeBind2,x.pipeBind3,x.pipeBind4,x.textInterpolate,x.textInterpolate1,x.textInterpolate2,x.textInterpolate3,x.textInterpolate4,x.textInterpolate5,x.textInterpolate6,x.textInterpolate7,x.textInterpolate8,x.textInterpolateV,x.interpolate,x.interpolate1,x.interpolate2,x.interpolate3,x.interpolate4,x.interpolate5,x.interpolate6,x.interpolate7,x.interpolate8,x.interpolateV,x.pureFunction0,x.pureFunction1,x.pureFunction2,x.pureFunction3,x.pureFunction4,x.pureFunction5,x.pureFunction6,x.pureFunction7,x.pureFunction8,x.pureFunctionV,x.resolveWindow,x.resolveDocument,x.resolveBody,rt.HTML,x.sanitizeHtml,rt.RESOURCE_URL,x.sanitizeResourceUrl,rt.SCRIPT,x.sanitizeScript,rt.STYLE,x.sanitizeStyle,rt.URL,x.sanitizeUrl,rt.ATTRIBUTE_NO_BINDING,x.validateAttribute,rt.HTML,x.trustConstantHtml,rt.RESOURCE_URL,x.trustConstantResourceUrl;var an=(function(e){return e[e.None=0]=`None`,e[e.ViewContextRead=1]=`ViewContextRead`,e[e.ViewContextWrite=2]=`ViewContextWrite`,e[e.SideEffectful=4]=`SideEffectful`,e})(an||{});C.Tmpl,C.Tmpl,C.Both,C.Host,C.Tmpl,C.Tmpl,C.Tmpl,C.Both,C.Both,C.Both,C.Tmpl,C.Both,C.Both,C.Tmpl,C.Both,C.Tmpl,C.Both,C.Both,C.Tmpl,C.Tmpl,C.Tmpl,C.Tmpl,C.Tmpl,C.Both,C.Both,C.Tmpl,C.Tmpl,C.Tmpl,C.Tmpl,C.Both,C.Both,C.Both,C.Tmpl,C.Tmpl,C.Both,C.Tmpl,C.Tmpl,C.Tmpl,C.Both,C.Both,C.Tmpl,C.Both,C.Both,C.Both,C.Both,C.Both,C.Tmpl,C.Tmpl,C.Tmpl,C.Tmpl,C.Tmpl,C.Tmpl,C.Tmpl,C.Tmpl,C.Tmpl,C.Tmpl,C.Tmpl,C.Tmpl,C.Both,C.Tmpl,C.Both,C.Tmpl,C.Both,C.Tmpl,C.Tmpl,C.Tmpl,C.Tmpl,C.Tmpl,C.Tmpl,C.Both,C.Both,C.Both,Pt.Property,Gt.Property,Pt.TwoWay,Gt.TwoWayProperty,Pt.Attribute,Gt.Attribute,Pt.Class,Gt.ClassName,Pt.Style,Gt.StyleProperty,Pt.LegacyAnimation,Gt.LegacyAnimation,Pt.Animation,Gt.Animation;var on=`%COMP%`;`${on}`,`${on}`,class e{static SINGLETON=new e;static veWillInferAnyFor(t){let n=e.SINGLETON;return t instanceof Nt?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 sn=null,cn=!1,ln=1,un=null,dn=Symbol(`SIGNAL`);function w(e){let t=sn;return sn=e,t}function fn(){return sn}var pn={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 mn(e){if(cn)throw Error(``);if(sn===null)return;sn.consumerOnSignalRead(e);let t=sn.producersTail;if(t!==void 0&&t.producer===e)return;let n,r=sn.recomputing;if(r&&(n=t===void 0?sn.producers:t.nextProducer,n!==void 0&&n.producer===e)){sn.producersTail=n,n.lastReadVersion=e.version,n.knownValidAtEpoch=ln;return}let i=e.consumersTail;if(i!==void 0&&i.consumer===sn&&(!r||i.knownValidAtEpoch===ln))return;let a=kn(sn),o={producer:e,consumer:sn,nextProducer:n,prevConsumer:void 0,knownValidAtEpoch:ln,lastReadVersion:e.version,nextConsumer:void 0};sn.producersTail=o,t===void 0?sn.producers=o:t.nextProducer=o,a&&Dn(e,o)}function hn(){ln++}function gn(e){if((!kn(e)||e.dirty)&&(e.dirty||e.lastCleanEpoch!==ln)){if(!e.producerMustRecompute(e)&&!Tn(e)){bn(e);return}e.producerRecomputeValue(e),bn(e)}}function _n(e){if(e.consumers===void 0)return;let t=cn;cn=!0;try{for(let t=e.consumers;t!==void 0;t=t.nextConsumer){let e=t.consumer;e.dirty||yn(e)}}finally{cn=t}}function vn(){return sn?.consumerAllowSignalWrites!==!1}function yn(e){e.dirty=!0,_n(e),e.consumerMarkedDirty?.(e)}function bn(e){e.dirty=!1,e.lastCleanEpoch=ln}function xn(e){return e&&Sn(e),w(e)}function Sn(e){if(e.producersTail?.knownValidAtEpoch===ln){let t=e.producers;for(;t!==void 0;)t.knownValidAtEpoch=null,t=t.nextProducer}e.producersTail=void 0,e.recomputing=!0}function Cn(e,t){w(t),e&&wn(e)}function wn(e){e.recomputing=!1;let t=e.producersTail,n=t===void 0?e.producers:t.nextProducer;if(n!==void 0){if(kn(e))do n=On(n);while(n!==void 0);t===void 0?e.producers=void 0:t.nextProducer=void 0}}function Tn(e){for(let t=e.producers;t!==void 0;t=t.nextProducer){let e=t.producer,n=t.lastReadVersion;if(n!==e.version||(gn(e),n!==e.version))return!0}return!1}function En(e){if(kn(e)){let t=e.producers;for(;t!==void 0;)t=On(t)}e.producers=void 0,e.producersTail=void 0,e.consumers=void 0,e.consumersTail=void 0}function Dn(e,t){let n=e.consumersTail,r=kn(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)Dn(t.producer,t)}function On(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,!kn(t)){let e=t.producers;for(;e!==void 0;)e=On(e)}return n}function kn(e){return e.consumerIsAlwaysLive||e.consumers!==void 0}function An(e){un?.(e)}function jn(e,t){return Object.is(e,t)}function Mn(e,t){let n=Object.create(In);n.computation=e,t!==void 0&&(n.equal=t);let r=()=>{if(gn(n),mn(n),n.value===Fn)throw n.error;return n.value};return r[dn]=n,An(n),r}var Nn=Symbol(`UNSET`),Pn=Symbol(`COMPUTING`),Fn=Symbol(`ERRORED`),In={...pn,value:Nn,dirty:!0,error:null,equal:jn,kind:`computed`,producerMustRecompute(e){return e.value===Nn||e.value===Pn},producerRecomputeValue(e){if(e.value===Pn)throw Error(``);let t=e.value;e.value=Pn;let n=xn(e),r,i=!1;try{r=e.computation(),w(null),i=t!==Nn&&t!==Fn&&r!==Fn&&e.equal(t,r)}catch(t){r=Fn,e.error=t}finally{Cn(e,n)}if(i){e.value=t;return}e.value=r,e.version++}};function Ln(){throw Error()}var Rn=Ln;function zn(e){Rn(e)}function Bn(e){Rn=e}var Vn=null;function Hn(e,t){let n=Object.create(Kn);n.value=e,t!==void 0&&(n.equal=t);let r=()=>Un(n);return r[dn]=n,An(n),[r,e=>Wn(n,e),e=>Gn(n,e)]}function Un(e){return mn(e),e.value}function Wn(e,t){vn()||zn(e),e.equal(e.value,t)||(e.value=t,qn(e))}function Gn(e,t){vn()||zn(e),Wn(e,t(e.value))}var Kn={...pn,equal:jn,value:void 0,kind:`signal`};function qn(e){e.version++,hn(),_n(e),Vn?.(e)}var Jn={...pn,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,kind:`effect`};function Yn(e){if(e.dirty=!1,e.version>0&&!Tn(e))return;e.version++;let t=xn(e);try{e.cleanup(),e.fn()}finally{Cn(e,t)}}var Xn=void 0;function Zn(){return Xn}function Qn(e){let t=Xn;return Xn=e,t}var $n=Symbol(`NotFound`);function er(e){return e===$n||e?.name===`ɵNotFound`}function tr(e,t,n){let r=Object.create(ir);r.source=e,r.computation=t,n!=null&&(r.equal=n);let i=()=>{if(gn(r),mn(r),r.value===Fn)throw r.error;return r.value};return i[dn]=r,An(r),i}function nr(e,t){gn(e),Wn(e,t),bn(e)}function rr(e,t){if(gn(e),e.value===Fn)throw e.error;Gn(e,t),bn(e)}var ir={...pn,value:Nn,dirty:!0,error:null,equal:jn,kind:`linkedSignal`,producerMustRecompute(e){return e.value===Nn||e.value===Pn},producerRecomputeValue(e){if(e.value===Pn)throw Error(``);let t=e.value;e.value=Pn;let n=xn(e),r,i=!1;try{let n=e.source(),a=t!==Nn&&t!==Fn,o=a?{source:e.sourceValue,value:t}:void 0;r=e.computation(n,o),e.sourceValue=n,w(null),i=a&&r!==Fn&&e.equal(t,r)}catch(t){r=Fn,e.error=t}finally{Cn(e,n)}if(i){e.value=t;return}e.value=r,e.version++}};function ar(e){let t=w(null);try{return e()}finally{w(t)}}var or=function(e,t){return or=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])},or(e,t)};function sr(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Class extends value `+String(t)+` is not a constructor or null`);or(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function cr(e){var t=typeof Symbol==`function`&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length==`number`)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?`Object is not iterable.`:`Symbol.iterator is not defined.`)}function lr(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 ur(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r0},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?gr:(this.currentObservers=null,a.push(e),new hr(function(){t.currentObservers=null,mr(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 Hr;return e.source=this,e},t.create=function(e,t){return new Qr(e,t)},t}(Hr),Qr=function(e){sr(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)??gr},t}(Zr),$r=function(e){sr(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}(Zr);function ei(e,t){return qr(function(n,r){var i=0;n.subscribe(Jr(r,function(n){r.next(e.call(t,n,i++))}))})}var ti=`https://angular.dev/best-practices/security#preventing-cross-site-scripting-xss`,T=class extends Error{code;constructor(e,t){super(ri(e,t)),this.code=e}};function ni(e){return`NG0${Math.abs(e)}`}function ri(e,t){return`${ni(e)}${t?`: `+t:``}`}function ii(e){for(let t in e)if(e[t]===ii)return t;throw Error(``)}function ai(e){if(typeof e==`string`)return e;if(Array.isArray(e))return`[${e.map(ai).join(`, `)}]`;if(e==null)return``+e;let t=e.overriddenName||e.name;if(t)return`${t}`;let n=e.toString();if(n==null)return``+n;let r=n.indexOf(` -`);return r>=0?n.slice(0,r):n}function oi(e,t){return e?t?`${e} ${t}`:e:t||``}var si=ii({__forward_ref__:ii});function ci(e){return e.__forward_ref__=ci,e}function li(e){return ui(e)?e():e}function ui(e){return typeof e==`function`&&Object.hasOwn(e,si)&&e.__forward_ref__===ci}function di(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function fi(e){return pi(e,gi)}function pi(e,t){return Object.hasOwn(e,t)&&e[t]||null}function mi(e){return(e?.[gi]??null)||null}function hi(e){return e&&Object.hasOwn(e,_i)?e[_i]:null}var gi=ii({ɵprov:ii}),_i=ii({ɵinj:ii}),vi=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 yi(e){return e&&!!e.ɵproviders}var bi=ii({ɵcmp:ii}),xi=ii({ɵdir:ii}),Si=ii({ɵpipe:ii}),Ci=ii({ɵfac:ii}),wi=ii({__NG_ELEMENT_ID__:ii}),Ti=ii({__NG_ENV_ID__:ii});function Ei(e){return ki(e,`@Component`),e[bi]||null}function Di(e){return ki(e,`@Directive`),e[xi]||null}function Oi(e){return ki(e,`@Pipe`),e[Si]||null}function ki(e,t){if(e==null)throw new T(-919,!1)}function Ai(e){return typeof e==`string`?e:e==null?``:String(e)}var ji=ii({ngErrorCode:ii}),Mi=ii({ngErrorMessage:ii}),Ni=ii({ngTokenPath:ii});function Pi(e,t){return Ii(``,-200,t)}function Fi(e,t){throw new T(-201,!1)}function Ii(e,t,n){let r=new T(t,e);return r[ji]=t,r[Mi]=e,n&&(r[Ni]=n),r}function Li(e){return e[ji]}var Ri;function zi(){return Ri}function Bi(e){let t=Ri;return Ri=e,t}function Vi(e,t,n){let r=fi(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;Fi(e,``)}var Hi=globalThis,Ui={},Wi=`__NG_DI_FLAG__`,Gi=class{injector;constructor(e){this.injector=e}retrieve(e,t){let n=Ji(t)||0;try{return this.injector.get(e,n&8?null:Ui,n)}catch(e){if(er(e))return e;throw e}}};function Ki(e,t=0){let n=Zn();if(n===void 0)throw new T(-203,!1);if(n===null)return Vi(e,void 0,t);{let r=Yi(t),i=n.retrieve(e,r);if(er(i)){if(r.optional)return null;throw i}return i}}function qi(e,t=0){return(zi()||Ki)(li(e),t)}function E(e,t){return qi(e,Ji(t))}function Ji(e){return e===void 0||typeof e==`number`?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Yi(e){return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)}}function Xi(e){let t=[];for(let n=0;nArray.isArray(e)?ta(e,t):t(e))}function na(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function ra(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function ia(e,t,n,r){let i=e.length;if(i==t)e.push(n,r);else if(i===1)e.push(r,e[0]),e[0]=n;else{for(i--,e.push(e[i-1],e[i]);i>t;){let t=i-2;e[i]=e[t],i--}e[t]=n,e[t+1]=r}}function aa(e,t,n){let r=sa(e,t);return r>=0?e[r|1]=n:(r=~r,ia(e,r,t,n)),r}function oa(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 ta(t,e=>{let t=e;va(t,a,[],r)&&(i||=[],i.push(t))}),i!==void 0&&_a(i,a),n}function _a(e,t){for(let n=0;n{t(e,r)})}}function va(e,t,n,r){if(e=li(e),!e)return!1;let i=null,a=hi(e),o=!a&&Ei(e);if(!a&&!o){let t=e.ngModule;if(a=hi(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)va(i,t,n,r)}}else if(a){if(a.imports!=null&&!s){r.add(i);let e;try{ta(a.imports,i=>{va(i,t,n,r)&&(e||=[],e.push(i))})}finally{}e!==void 0&&_a(e,t)}if(!s){let e=Qi(i)||(()=>new i);t({provide:i,useFactory:e,deps:ua},i),t({provide:pa,useValue:i,multi:!0},i),t({provide:da,useValue:()=>qi(i),multi:!0},i)}let o=a.providers;if(o!=null&&!s){let n=e;ya(o,e=>{t(e,n)})}}else return!1;return i!==e&&e.providers!==void 0}function ya(e,t){for(let n of e)yi(n)&&(n=n.ɵproviders),Array.isArray(n)?ya(n,t):t(n)}var ba=ii({provide:String,useValue:ii});function xa(e){return typeof e==`object`&&!!e&&ba in e}function Sa(e){return!!(e&&e.useExisting)}function Ca(e){return!!(e&&e.useFactory)}function wa(e){return typeof e==`function`}var Ta=new vi(``),Ea={},Da={},Oa=void 0;function ka(){return Oa===void 0&&(Oa=new ma),Oa}var Aa=class{},ja=class extends Aa{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,Va(e,e=>this.processProvider(e)),this.records.set(fa,La(void 0,this)),r.has(`environment`)&&this.records.set(Aa,La(void 0,this));let i=this.records.get(Ta);i!=null&&typeof i.value==`string`&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(pa,ua,{self:!0}))}retrieve(e,t){let n=Ji(t)||0;try{return this.get(e,Ui,n)}catch(e){if(er(e))return e;throw e}}destroy(){Ia(this),this._destroyed=!0;let e=w(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(),w(e)}}onDestroy(e){return Ia(this),this._onDestroyHooks.push(e),()=>this.removeOnDestroy(e)}runInContext(e){Ia(this);let t=Qn(this),n=Bi(void 0);try{return e()}finally{Qn(t),Bi(n)}}get(e,t=Ui,n){if(Ia(this),Object.hasOwn(e,Ti))return e[Ti](this);let r=Ji(n),i=Qn(this),a=Bi(void 0);try{if(!(r&4)){let t=this.records.get(e);if(t===void 0){let n=Ba(e)&&fi(e);t=n&&this.injectableDefInScope(n)?La(Ma(e),Ea):null,this.records.set(e,t)}if(t!=null)return this.hydrate(e,t,r)}let n=r&2?ka():this.parent;return t=r&8&&t===Ui?null:t,n.get(e,t)}catch(e){let t=Li(e);throw t===-200||t===-201?new T(t,null):e}finally{Bi(a),Qn(i)}}resolveInjectorInitializers(){let e=w(null),t=Qn(this),n=Bi(void 0);try{let e=this.get(da,ua,{self:!0});for(let t of e)t()}finally{Qn(t),Bi(n),w(e)}}toString(){return`R3Injector[...]`}processProvider(e){e=li(e);let t=wa(e)?e:li(e&&e.provide),n=Pa(e);if(!wa(e)&&e.multi===!0){let n=this.records.get(t);n||(n=La(void 0,Ea,!0),n.factory=()=>Xi(n.multi),this.records.set(t,n)),t=e,n.multi.push(e)}this.records.set(t,n)}hydrate(e,t,n){let r=w(null);try{if(t.value===Da)throw Pi(``);return t.value===Ea&&(t.value=Da,t.value=t.factory(void 0,n)),typeof t.value==`object`&&t.value&&za(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}finally{w(r)}}injectableDefInScope(e){if(!e.providedIn)return!1;let t=li(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 Ma(e){let t=fi(e),n=t===null?Qi(e):t.factory;if(n!==null)return n;if(e instanceof vi)throw new T(-204,!1);if(e instanceof Function)return Na(e);throw new T(-204,!1)}function Na(e){if(e.length>0)throw new T(-204,!1);let t=mi(e);return t===null?()=>new e:()=>t.factory(e)}function Pa(e){return xa(e)?La(void 0,e.useValue):La(Fa(e),Ea)}function Fa(e,t,n){let r;if(wa(e)){let t=li(e);return Qi(t)||Ma(t)}if(xa(e))r=()=>li(e.useValue);else if(Ca(e))r=()=>e.useFactory(...Xi(e.deps||[]));else if(Sa(e))r=(t,n)=>qi(li(e.useExisting),n!==void 0&&n&8?8:void 0);else{let t=li(e&&(e.useClass||e.provide));if(Ra(e))r=()=>new t(...Xi(e.deps));else return Qi(t)||Ma(t)}return r}function Ia(e){if(e.destroyed)throw new T(-205,!1)}function La(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function Ra(e){return!!e.deps}function za(e){return typeof e==`object`&&!!e&&typeof e.ngOnDestroy==`function`}function Ba(e){return typeof e==`function`||typeof e==`object`&&e.ngMetadataName===`InjectionToken`}function Va(e,t){for(let n of e)Array.isArray(n)?Va(n,t):n&&yi(n)?Va(n.ɵproviders,t):t(n)}function Ha(e,t){let n;e instanceof ja?(Ia(e),n=e):n=new Gi(e);let r=Qn(n),i=Bi(void 0);try{return t()}finally{Qn(r),Bi(i)}}function Ua(){return zi()!==void 0||Zn()!=null}var Wa=1;function Ga(e){return Array.isArray(e)&&typeof e[Wa]==`object`}function Ka(e){return Array.isArray(e)&&e[Wa]===!0}function qa(e){return!!(e.flags&4)}function Ja(e){return e.componentOffset>-1}function Ya(e){return(e.flags&1)==1}function Xa(e){return!!e.template}function Za(e){return!!(e[2]&512)}function Qa(e){return(e[2]&256)==256}var $a=(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})($a||{}),eo=`math`;function to(e){for(;Array.isArray(e);)e=e[0];return e}function no(e,t){return to(t[e])}function ro(e,t){return to(t[e.index])}function io(e,t){return e.data[t]}function ao(e,t){return e[t]}function oo(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}function so(e,t){let n=t[e];return Ga(n)?n:n[0]}function co(e){return(e[2]&128)==128}function lo(e){return Ka(e[3])}function uo(e,t){return t==null?null:e[t]}function fo(e){e[17]=0}function po(e){e[2]&1024||(e[2]|=1024,co(e)&&_o(e))}function mo(e,t){for(;e>0;)t=t[14],e--;return t}function ho(e){return!!(e[2]&9216||e[24]?.dirty)}function go(e){e[10].changeDetectionScheduler?.notify(8),e[2]&64&&(e[2]|=1024),ho(e)&&_o(e)}function _o(e){e[10].changeDetectionScheduler?.notify(0);let t=bo(e);for(;t!==null&&!(t[2]&8192||(t[2]|=8192,!co(t)));)t=bo(t)}function vo(e,t){if(Qa(e))throw new T(911,!1);e[21]===null&&(e[21]=[]),e[21].push(t)}function yo(e,t){if(e[21]===null)return;let n=e[21].indexOf(t);n!==-1&&e[21].splice(n,1)}function bo(e){let t=e[3];return Ka(t)?t[3]:t}function xo(e){return e[7]??=[]}function So(e){return e.cleanup??=[]}function Co(e,t,n,r){let i=xo(t);i.push(n),e.firstCreatePass&&So(e).push(r,i.length-1)}var wo={lFrame:as(null),bindingsEnabled:!0,skipHydrationRootTNode:null},To=!1;function Eo(){return wo.lFrame.elementDepthCount}function Do(){wo.lFrame.elementDepthCount++}function Oo(){wo.lFrame.elementDepthCount--}function ko(){return wo.bindingsEnabled}function Ao(){return wo.skipHydrationRootTNode!==null}function jo(e){return wo.skipHydrationRootTNode===e}function Mo(){wo.skipHydrationRootTNode=null}function D(){return wo.lFrame.lView}function No(){return wo.lFrame.tView}function O(e){return wo.lFrame.contextLView=e,e[8]}function k(e){return wo.lFrame.contextLView=null,e}function Po(){let e=Fo();for(;e!==null&&e.type===64;)e=e.parent;return e}function Fo(){return wo.lFrame.currentTNode}function Io(){let e=wo.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}function Lo(e,t){let n=wo.lFrame;n.currentTNode=e,n.isParent=t}function Ro(){return wo.lFrame.isParent}function zo(){wo.lFrame.isParent=!1}function Bo(){return wo.lFrame.contextLView}function Vo(){return To}function Ho(e){let t=To;return To=e,t}function Uo(){let e=wo.lFrame,t=e.bindingRootIndex;return t===-1&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function Wo(){return wo.lFrame.bindingIndex}function Go(e){return wo.lFrame.bindingIndex=e}function Ko(){return wo.lFrame.bindingIndex++}function qo(e){let t=wo.lFrame,n=t.bindingIndex;return t.bindingIndex+=e,n}function Jo(){return wo.lFrame.inI18n}function Yo(e,t){let n=wo.lFrame;n.bindingIndex=n.bindingRootIndex=e,Zo(t)}function Xo(){return wo.lFrame.currentDirectiveIndex}function Zo(e){wo.lFrame.currentDirectiveIndex=e}function Qo(e){let t=wo.lFrame.currentDirectiveIndex;return t===-1?null:e[t]}function $o(){return wo.lFrame.currentQueryIndex}function es(e){wo.lFrame.currentQueryIndex=e}function ts(e){let t=e[1];return t.type===2?t.declTNode:t.type===1?e[5]:null}function ns(e,t,n){if(n&4){let r=t,i=e;for(;r=r.parent,r===null&&!(n&1)&&(r=ts(i),!(r===null||(i=i[14],r.type&10))););if(r===null)return!1;t=r,e=i}let r=wo.lFrame=is();return r.currentTNode=t,r.lView=e,!0}function rs(e){let t=is(),n=e[1];wo.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function is(){let e=wo.lFrame,t=e===null?null:e.child;return t===null?as(e):t}function as(e){let t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return e!==null&&(e.child=t),t}function os(){let e=wo.lFrame;return wo.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var ss=os;function cs(){let e=os();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function ls(e){return(wo.lFrame.contextLView=mo(e,wo.lFrame.contextLView))[8]}function us(){return wo.lFrame.selectedIndex}function ds(e){wo.lFrame.selectedIndex=e}function fs(){let e=wo.lFrame;return io(e.tView,e.selectedIndex)}function A(){wo.lFrame.currentNamespace=`svg`}function ps(){ms()}function ms(){wo.lFrame.currentNamespace=null}function hs(){return wo.lFrame.currentNamespace}var gs=!0;function _s(){return gs}function vs(e){gs=e}function ys(e,t=null,n=null,r){let i=bs(e,t,n,r);return i.resolveInjectorInitializers(),i}function bs(e,t=null,n=null,r,i=new Set){return new ja([n||ua,ha(e)],t||ka(),null,i)}var xs=class e{static THROW_IF_NOT_FOUND=Ui;static NULL=new ma;static create(e,t){if(Array.isArray(e))return ys({name:``},t,e,``);{let t=e.name??``;return ys({name:t},e.parent,e.providers,t)}}static ɵprov=di({token:e,providedIn:`any`,factory:()=>qi(fa)});static __NG_ELEMENT_ID__=-1},Ss=new vi(``),Cs=class{static __NG_ELEMENT_ID__=Ts;static __NG_ENV_ID__=e=>e},ws=class extends Cs{_lView;constructor(e){super(),this._lView=e}get destroyed(){return Qa(this._lView)}onDestroy(e){let t=this._lView;return vo(t,e),()=>yo(t,e)}};function Ts(){return new ws(D())}var Es=new vi(``),Ds=(()=>{class e{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new $r(!1);debugTaskTracker=E(Es,{optional:!0});get hasPendingTasks(){return!this.destroyed&&this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new Hr(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})(),Os=class extends Zr{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(e=!1){super(),this.__isAsync=e,Ua()&&(this.destroyRef=E(Cs,{optional:!0})??void 0,this.pendingTasks=E(Ds,{optional:!0})??void 0)}emit(e){let t=w(null);try{super.next(e)}finally{w(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 hr&&e.add(o),o}wrapInTimeout(e){return t=>{let n=this.pendingTasks?.add();setTimeout(()=>{try{e(t)}finally{n!==void 0&&this.pendingTasks?.remove(n)}})}}};function ks(...e){}function As(e){let t,n;function r(){e=ks;try{n!==void 0&&typeof cancelAnimationFrame==`function`&&cancelAnimationFrame(n),t!==void 0&&clearTimeout(t)}catch{}}return t=setTimeout(()=>{e(),r()}),typeof requestAnimationFrame==`function`&&(n=requestAnimationFrame(()=>{e(),r()})),()=>r()}function js(e){return queueMicrotask(()=>e()),()=>{e=ks}}var Ms=`isAngularZone`,Ns=`isAngularZone_ID`,Ps=0,Fs=class e{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new Os(!1);onMicrotaskEmpty=new Os(!1);onStable=new Os(!1);onError=new Os(!1);constructor(e){let{enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1,scheduleInRootZone:i=!1}=e;if(typeof Zone>`u`)throw new T(908,!1);Zone.assertZonePatched();let a=this;a._nesting=0,a._outer=a._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(a._inner=a._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(a._inner=a._inner.fork(Zone.longStackTraceZoneSpec)),a.shouldCoalesceEventChangeDetection=!r&&n,a.shouldCoalesceRunChangeDetection=r,a.callbackScheduled=!1,a.scheduleInRootZone=i,zs(a)}static isInAngularZone(){return typeof Zone<`u`&&Zone.current.get(Ms)===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new T(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new T(909,!1)}run(e,t,n){return this._inner.run(e,t,n)}runTask(e,t,n,r){let i=this._inner,a=i.scheduleEventTask(`NgZoneEvent: `+r,e,Is,ks,ks);try{return i.runTask(a,t,n)}finally{i.cancelTask(a)}}runGuarded(e,t,n){return this._inner.runGuarded(e,t,n)}runOutsideAngular(e){return this._outer.run(e)}},Is={};function Ls(e){if(e._nesting==0&&!e.hasPendingMicrotasks&&!e.isStable)try{e._nesting++,e.onMicrotaskEmpty.emit(null)}finally{if(e._nesting--,!e.hasPendingMicrotasks)try{e.runOutsideAngular(()=>e.onStable.emit(null))}finally{e.isStable=!0}}}function Rs(e){if(e.isCheckStableRunning||e.callbackScheduled)return;e.callbackScheduled=!0;function t(){As(()=>{e.callbackScheduled=!1,Bs(e),e.isCheckStableRunning=!0,Ls(e),e.isCheckStableRunning=!1})}e.scheduleInRootZone?Zone.root.run(()=>{t()}):e._outer.run(()=>{t()}),Bs(e)}function zs(e){let t=()=>{Rs(e)},n=Ps++;e._inner=e._inner.fork({name:`angular`,properties:{[Ms]:!0,[Ns]:n,[Ns+n]:!0},onInvokeTask:(n,r,i,a,o,s)=>{if(Ws(s))return n.invokeTask(i,a,o,s);try{return Vs(e),n.invokeTask(i,a,o,s)}finally{(e.shouldCoalesceEventChangeDetection&&a.type===`eventTask`||e.shouldCoalesceRunChangeDetection)&&t(),Hs(e)}},onInvoke:(n,r,i,a,o,s,c)=>{try{return Vs(e),n.invoke(i,a,o,s,c)}finally{e.shouldCoalesceRunChangeDetection&&!e.callbackScheduled&&!Gs(s)&&t(),Hs(e)}},onHasTask:(t,n,r,i)=>{t.hasTask(r,i),n===r&&(i.change==`microTask`?(e._hasPendingMicrotasks=i.microTask,Bs(e),Ls(e)):i.change==`macroTask`&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:(t,n,r,i)=>(t.handleError(r,i),e.runOutsideAngular(()=>e.onError.emit(i)),!1)})}function Bs(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.callbackScheduled===!0)}function Vs(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function Hs(e){e._nesting--,Ls(e)}var Us=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new Os;onMicrotaskEmpty=new Os;onStable=new Os;onError=new Os;run(e,t,n){return e.apply(t,n)}runGuarded(e,t,n){return e.apply(t,n)}runOutsideAngular(e){return e()}runTask(e,t,n,r){return e.apply(t,n)}};function Ws(e){return Ks(e,`__ignore_ng_zone__`)}function Gs(e){return Ks(e,`__scheduler_tick__`)}function Ks(e,t){return!Array.isArray(e)||e.length!==1?!1:e[0]?.data?.[t]===!0}var qs=class{_console=console;handleError(e){this._console.error(`ERROR`,e)}},Js=new vi(``,{factory:()=>{let e=E(Fs),t=E(Aa),n;return r=>{e.runOutsideAngular(()=>{t.destroyed&&!n?setTimeout(()=>{throw r}):(n??=t.get(qs),n.handleError(r))})}}}),Ys={provide:da,useValue:()=>{E(qs,{optional:!0})},multi:!0};function j(e,t){let[n,r,i]=Hn(e,t?.equal),a=n;return a[dn],a.set=r,a.update=i,a.asReadonly=Xs.bind(a),a}function Xs(){let e=this[dn];if(e.readonlyFn===void 0){let t=()=>this();t[dn]=e,e.readonlyFn=t}return e.readonlyFn}var Zs=new vi(``,{factory:()=>Qs}),Qs=`ng`,$s=new vi(``),ec=new vi(``,{providedIn:`platform`,factory:()=>`unknown`}),tc=new vi(``,{factory:()=>E(Ss).body?.querySelector(`[ngCspNonce]`)?.getAttribute(`ngCspNonce`)||null}),nc=(()=>{class e{view;node;constructor(e,t){this.view=e,this.node=t}static __NG_ELEMENT_ID__=rc}return e})();function rc(){return new nc(D(),Po())}var ic=class{},ac=new vi(``,{factory:()=>!0}),oc=new vi(``),sc=(()=>{class e{static ɵprov=di({token:e,providedIn:`root`,factory:()=>new cc})}return e})(),cc=class{dirtyEffectCount=0;queues=new Map;add(e){this.enqueue(e),this.schedule(e)}schedule(e){e.dirty&&this.dirtyEffectCount++}remove(e){let t=e.zone,n=this.queues.get(t);n.has(e)&&(n.delete(e),e.dirty&&this.dirtyEffectCount--)}enqueue(e){let t=e.zone;this.queues.has(t)||this.queues.set(t,new Set);let n=this.queues.get(t);n.has(e)||n.add(e)}flush(){for(;this.dirtyEffectCount>0;){let e=!1;for(let[t,n]of this.queues)e||=t===null?this.flushQueue(n):t.run(()=>this.flushQueue(n));e||(this.dirtyEffectCount=0)}}flushQueue(e){let t=!1;for(let n of e)n.dirty&&(this.dirtyEffectCount--,t=!0,n.run());return t}},lc=class{[dn];constructor(e){this[dn]=e}destroy(){this[dn].destroy()}};function uc(e,t){let n=t?.injector??E(xs),r=t?.manualCleanup===!0?null:n.get(Cs),i,a=n.get(nc,null,{optional:!0}),o=n.get(ic);return a===null?i=hc(e,n.get(sc),o):(i=mc(a.view,o,e),r instanceof ws&&r._lView===a.view&&(r=null)),i.injector=n,r!==null&&(i.onDestroyFns=[r.onDestroy(()=>i.destroy())]),new lc(i)}var dc={...Jn,cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let e=Ho(!1);try{Yn(this)}finally{Ho(e)}},cleanup(){if(!this.cleanupFns?.length)return;let e=w(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],w(e)}}},fc={...dc,consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){if(En(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.scheduler.remove(this)}},pc={...dc,consumerMarkedDirty(){this.view[2]|=8192,_o(this.view),this.notifier.notify(13)},destroy(){if(En(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.view[23]?.delete(this)}};function mc(e,t,n){let r=Object.create(pc);return r.view=e,r.zone=typeof Zone<`u`?Zone.current:null,r.notifier=t,r.fn=gc(r,n),e[23]??=new Set,e[23].add(r),r.consumerMarkedDirty(r),r}function hc(e,t,n){let r=Object.create(fc);return r.fn=gc(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 gc(e,t){return()=>{t(t=>(e.cleanupFns??=[]).push(t))}}function _c(e){return typeof e==`function`&&e[dn]!==void 0}function vc(e){return _c(e)&&typeof e.set==`function`}var yc=Symbol(`InputSignalNode#UNSET`),bc={...Kn,transformFn:void 0,applyValueToInputSignal(e,t){Wn(e,t)}};function xc(e){return{toString:e}.toString()}var Sc=(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})(Sc||{}),Cc=class{previousValue;currentValue;firstChange;constructor(e,t,n){this.previousValue=e,this.currentValue=t,this.firstChange=n}isFirstChange(){return this.firstChange}};function wc(e,t,n,r){t===null?e[n]=r:t.applyValueToInputSignal(t,r)}var Tc=null,Ec=(()=>{Tc=Oc;let e=()=>Oc;return e.ngInherit=!0,e})();function Dc(){return Tc}function Oc(e){return e.type.prototype.ngOnChanges&&(e.setInput=Ac),kc}function kc(){let e=Mc(this),t=e?.current;if(t){let n=e.previous;if(n===la)e.previous=t;else for(let e in t)n[e]=t[e];e.current=null,this.ngOnChanges(t)}}function Ac(e,t,n,r,i){let a=this.declaredInputs[r],o=Mc(e)||Nc(e,{previous:la,current:null}),s=o.current||={},c=o.previous,l=c[a];s[a]=new Cc(l&&l.currentValue,n,c===la),wc(e,t,i,n)}var jc=`__ngSimpleChanges__`;function Mc(e){return Object.hasOwn(e,jc)&&e[jc]||null}function Nc(e,t){return e[jc]=t}var Pc=[],Fc=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,Hc(o,a)):Hc(o,a)}var Wc=-1,Gc=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 Kc(e){return!!(e.flags&8)}function qc(e){return!!(e.flags&16)}function Jc(e,t,n){let r=0;for(;rt){o=a-1;break}}}for(;a>16}function nl(e,t){let n=tl(e),r=t;for(;n>0;)r=r[14],n--;return r}var rl=!0;function il(e){let t=rl;return rl=e,t}var al=255,ol=5,sl=0,cl={};function ll(e,t,n){let r;typeof n==`string`?r=n.charCodeAt(0)||0:Object.hasOwn(n,wi)&&(r=n[wi]),r??=n[wi]=sl++;let i=r&al,a=1<>ol)]|=a}function ul(e,t){let n=fl(e,t);if(n!==-1)return n;let r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,dl(r.data,e),dl(t,null),dl(r.blueprint,null));let i=pl(e,t),a=e.injectorIndex;if($c(i)){let e=el(i),n=nl(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 dl(e,t){e.push(0,0,0,0,0,0,0,0,t)}function fl(e,t){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||t[e.injectorIndex+8]===null?-1:e.injectorIndex}function pl(e,t){if(e.parent&&e.parent.injectorIndex!==-1)return e.parent.injectorIndex;let n=0,r=null,i=t;for(;i!==null;){if(r=Ol(i),r===null)return Wc;if(n++,i=i[14],r.injectorIndex!==-1)return r.injectorIndex|n<<16}return Wc}function ml(e,t,n){ll(e,t,n)}function hl(e,t,n){if(n&8||e!==void 0)return e;Fi(t,`NodeInjector`)}function gl(e,t,n,r){if(n&8&&r===void 0&&(r=null),!(n&3)){let i=e[9],a=Bi(void 0);try{return i?i.get(t,r,n&8):Vi(t,r,n&8)}finally{Bi(a)}}return hl(r,t,n)}function _l(e,t,n,r=0,i){if(e!==null){if(t[2]&2048&&!(r&2)){let i=Dl(e,t,n,r,cl);if(i!==cl)return i}let i=vl(e,t,n,r,cl);if(i!==cl)return i}return gl(t,n,r,i)}function vl(e,t,n,r,i){let a=Sl(n);if(typeof a==`function`){if(!ns(t,e,r))return r&1?hl(i,n,r):gl(t,n,r,i);try{let e;if(e=a(r),e==null&&!(r&8))Fi(n);else return e}finally{ss()}}else if(typeof a==`number`){let i=null,o=fl(e,t),s=Wc,c=r&1?t[15][5]:null;for((o===-1||r&4)&&(s=o===-1?pl(e,t):t[o+8],s===Wc||!wl(r,!1)?o=-1:(i=t[1],o=el(s),t=nl(s,t)));o!==-1;){let e=t[1];if(Cl(a,o,e.data)){let e=yl(o,t,n,i,r,c);if(e!==cl)return e}s=t[o+8],s!==Wc&&wl(r,t[1].data[o+8]===c)&&Cl(a,o,t)?(i=e,o=el(s),t=nl(s,t)):o=-1}}return i}function yl(e,t,n,r,i,a){let o=t[1],s=o.data[e+8],c=bl(s,o,n,r==null?Ja(s)&&rl:r!=o&&!!(s.type&3),i&1&&a===s);return c===null?cl:xl(t,o,c,s,i)}function bl(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&&Xa(e)&&e.type===n)return c}return null}function xl(e,t,n,r,i){let a=e[n],o=t.data;if(a instanceof Gc){let s=a;if(s.resolving)throw Pi(``);let c=il(s.canSeeViewProviders);s.resolving=!0,o[n].type||o[n];let l=s.injectImpl?Bi(s.injectImpl):null;ns(e,r,0);try{a=e[n]=s.factory(void 0,i,o,e,r),t.firstCreatePass&&n>=r.directiveStart&&Ic(n,o[n],t)}finally{l!==null&&Bi(l),il(c),s.resolving=!1,ss()}}return a}function Sl(e){if(typeof e==`string`)return e.charCodeAt(0)||0;let t=Object.hasOwn(e,wi)?e[wi]:void 0;return typeof t==`number`?t>=0?t&al:El:t}function Cl(e,t,n){let r=1<>ol)]&r)}function wl(e,t){return!(e&2)&&!(e&1&&t)}var Tl=class{_tNode;_lView;constructor(e,t){this._tNode=e,this._lView=t}get(e,t,n){return _l(this._tNode,this._lView,e,Ji(n),t)}};function El(){return new Tl(Po(),D())}function Dl(e,t,n,r,i){let a=e,o=t;for(;a!==null&&o!==null&&o[2]&2048&&!Za(o);){let e=vl(a,o,n,r|2,cl);if(e!==cl)return e;r&=-5;let t=a.parent;if(!t){let e=o[20];if(e){let t=e.get(n,cl,r);if(t!==cl)return t}t=Ol(o),o=o[14]}a=t}return i}function Ol(e){let t=e[1],n=t.type;return n===2?t.declTNode:n===1?e[5]:null}function kl(e){return{token:e.token,providedIn:e.autoProvided===!1?null:`root`,factory:e.factory,value:void 0}}function Al(){return jl(Po(),D())}function jl(e,t){return new Ml(ro(e,t))}var Ml=(()=>{class e{nativeElement;constructor(e){this.nativeElement=e}static __NG_ELEMENT_ID__=Al}return e})();function Nl(e){return e instanceof Ml?e.nativeElement:e}function Pl(){return this._results[Symbol.iterator]()}var Fl=class{_emitDistinctChangesOnly;dirty=!0;_onDirty=void 0;_results=[];_changesDetected=!1;_changes=void 0;length=0;first=void 0;last=void 0;get changes(){return this._changes??=new Zr}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=ea(e);(this._changesDetected=!$i(this._results,n,t))&&(this._results=n,this.length=n.length,this.last=n[this.length-1],this.first=n[0])}notifyOnChanges(){this._changes!==void 0&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.next(this)}onDirty(e){this._onDirty=e}setDirty(){this.dirty=!0,this._onDirty?.()}destroy(){this._changes!==void 0&&(this._changes.complete(),this._changes.unsubscribe())}[Symbol.iterator]=Pl};function Il(e){return(e.flags&128)==128}var Ll=(function(e){return e[e.OnPush=0]=`OnPush`,e[e.Eager=1]=`Eager`,e[e.Default=1]=`Default`,e})(Ll||{}),Rl=new Map,zl=0;function Bl(){return zl++}function Vl(e){Rl.set(e[19],e)}function Hl(e){Rl.delete(e[19])}var Ul=`__ngContext__`;function Wl(e,t){Ga(t)?(e[Ul]=t[19],Vl(t)):e[Ul]=t}function Gl(e){return ql(e[12])}function Kl(e){return ql(e[4])}function ql(e){for(;e!==null&&!Ka(e);)e=e[4];return e}var Jl=void 0;function Yl(e){Jl=e}function Xl(){if(Jl!==void 0)return Jl;if(typeof document<`u`)return document;throw new T(210,!1)}var Zl=!1,Ql=new vi(``,{factory:()=>Zl}),$l=new WeakMap;function eu(e,t){if(typeof e!=`object`||!e)return;let n=$l.get(e);n||(n=new WeakSet,$l.set(e,n)),n.add(t)}function tu(e){return(e.flags&32)==32}var nu=()=>null;function ru(e,t,n=!1){return nu(e,t,n)}function iu(e,t){let n=e.contentQueries;if(n!==null){let r=w(null);try{for(let r=0;r|^->||--!>|)/g,gu=`​$1​`;function _u(e){return e.replace(mu,e=>e.replace(hu,gu))}function vu(e,t){return e.createText(t)}function yu(e,t,n){e.setValue(t,n)}function bu(e,t){return e.createComment(_u(t))}function xu(e,t,n){return e.createElement(t,n)}function Su(e,t,n,r,i){e.insertBefore(t,n,r,i)}function Cu(e,t,n){e.appendChild(t,n)}function wu(e,t,n,r,i){r===null?Cu(e,t,n):Su(e,t,n,r,i)}function Tu(e,t,n,r){e.removeChild(null,t,n,r)}function Eu(e,t,n){e.setAttribute(t,`style`,n)}function Du(e,t,n){n===``?e.removeAttribute(t,`class`):e.setAttribute(t,`class`,n)}function Ou(e,t,n){let{mergedAttrs:r,classes:i,styles:a}=n;r!==null&&Jc(e,t,r),i!==null&&Du(e,t,i),a!==null&&Eu(e,t,a)}function ku(e){let t=Au();return t?t.sanitize($a.URL,e)||``:uu(e,`URL`)?lu(e):pu(Ai(e))}function Au(){let e=D();return e&&e[10].sanitizer}function ju(e){return e.ownerDocument.defaultView}function Mu(e){return e.ownerDocument}function Nu(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 Pu=`ng-template`;function Fu(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(zu(r))return!1;o=!0}}}}}return zu(r)||o}function zu(e){return!(e&1)}function Bu(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!==``&&!zu(o)&&(t+=Wu(a,i),i=``),r=o,a||=!zu(r);n++}return i!==``&&(t+=Wu(a,i)),t}function Ku(e){return e.map(Gu).join(`,`)}function qu(e){let t=[],n=[],r=1,i=2;for(;r!1});function $u(e){if(!e)return 0;let t=e.toLowerCase().indexOf(`ms`)>-1?1:1e3;return parseFloat(e)*t}function ed(e,t){return e.getPropertyValue(t).split(`,`).map(e=>e.trim())}function td(e){let t=ed(e,`transition-property`),n=ed(e,`transition-duration`),r=ed(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 nd(e){let t=ed(e,`animation-name`),n=ed(e,`animation-delay`),r=ed(e,`animation-duration`),i=ed(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 rd(e,t){return e!==void 0&&e.duration>t.duration}function id(e){return(e.animationName!=null||e.propertyName!=null)&&e.duration>0}function ad(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 od(e,t){let n=getComputedStyle(e),r=nd(n),i=td(n),a=r.duration>i.duration?r:i;rd(t.get(e),a)||id(a)&&t.set(e,a)}function sd(e,t,n){if(!n)return;let r=e.getAnimations();return r.length===0?od(e,t):cd(e,t,r)}function cd(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=ad(e)??0,n,i;e.animationName?i=e.animationName:n=e.transitionProperty,t>=r.duration&&(r={animationName:i,propertyName:n,duration:t})}rd(t.get(e),r)||id(r)&&t.set(e,r)}var ld=new Set,ud=!1,dd=1,fd=typeof document<`u`&&typeof document?.documentElement?.getAnimations==`function`;function pd(e){return e[9].get(Qu,ud)}function md(e,t,n){let r=gd.get(e);if(r){for(let e of t)r.classList.push(e);for(let e of n)r.cleanupFns.push(e)}else gd.set(e,{classList:t,cleanupFns:n})}function hd(e){let t=gd.get(e);if(t){for(let e of t.cleanupFns)e();gd.delete(e)}_d.delete(e)}var gd=new WeakMap,_d=new WeakMap,vd=new WeakMap;function yd(e){return e?e[14]??e:null}var bd=new WeakSet;function xd(e,t,n){let r=vd.get(e);if(!r||r.length===0)return;let i=t.parentNode,a=t.previousSibling,o=yd(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),bd.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 Sd(e,t,n){let r=yd(n),i=vd.get(e);i?i.some(e=>e.el===t)||i.push({el:t,declarationView:r}):vd.set(e,[{el:t,declarationView:r}])}function Cd(e){let t=e[26]??={};return t.enter??=new Map}function wd(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 Ed(e,t){let n=_d.get(t);if(n===void 0)return!0;if(t!==Td(e))return!1;let r=e.animation;if(r){let e=ad(r);if(e!==void 0&&e+dd{class e{impl=null;execute(){this.impl?.execute()}static ɵprov=di({token:e,providedIn:`root`,factory:()=>new e})}return e})(),Nd=[0,1,2,3],Pd=(()=>{class e{ngZone=E(Fs);scheduler=E(ic);errorHandler=E(qs,{optional:!0});sequences=new Set;deferredRegistrations=new Set;executing=!1;constructor(){E(kd,{optional:!0})}execute(){let e=this.sequences.size>0;e&&Fc(Sc.AfterRenderHooksStart),this.executing=!0;for(let e of Nd)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&&Fc(Sc.AfterRenderHooksEnd)}register(e){let{view:t}=e;t===void 0?this.executing?this.deferredRegistrations.add(e):this.addSequence(e):((t[25]??=[]).push(e),_o(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})(),Fd=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 Id(e,t){let n=t?.injector??E(xs);return jd(`NgAfterNextRender`),Rd(e,n,t,!0)}function Ld(e){return e instanceof Function?[void 0,void 0,e,void 0]:[e.earlyRead,e.write,e.mixedReadWrite,e.read]}function Rd(e,t,n,r){let i=t.get(Md);i.impl??=t.get(Pd);let a=t.get(kd,null,{optional:!0}),o=n?.manualCleanup===!0?null:t.get(Cs),s=t.get(nc,null,{optional:!0}),c=new Fd(i.impl,Ld(e),s?.view,r,o,a?.snapshot(null));return i.impl.register(c),c}var zd=new vi(``,{factory:()=>{let e=E(Aa),t=new Set;return e.onDestroy(()=>t.clear()),{queue:t,isScheduled:!1,scheduler:null,injector:e}}});function Bd(e,t,n){let r=e.get(zd);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 Vd(e,t){let n=e.get(zd);if(Array.isArray(t))for(let e of t)n.queue.delete(e);else n.queue.delete(t)}function Hd(e,t){let n=e.get(zd);if(t.detachedLeaveAnimationFns){for(let e of t.detachedLeaveAnimationFns)n.queue.delete(e);t.detachedLeaveAnimationFns=void 0}}function Ud(e){let t=e.get(zd);t.isScheduled||=(Id(()=>{t.isScheduled=!1;for(let e of t.queue)e();t.queue.clear()},{injector:t.injector}),!0)}function Wd(e){let t=e.get(zd);t.scheduler=Ud,t.scheduler(e)}function Gd(e,t){for(let[n,r]of t)Bd(e,r.animateFns)}function Kd(e,t,n,r){let i=e?.[26]?.enter;t!==null&&i&&i.has(n.index)&&Gd(r,i)}function qd(e,t,n,r){try{n.get(fa)}catch{return r(!1)}let i=e?.[26];i?.enter?.has(t.index)&&Vd(n,i.enter.get(t.index).animateFns);let a=Jd(e,t,i);if(a.size===0){let n=!1;if(e){let r=[];Xd(e,t,r),n=r.length>0}if(!n)return r(!1)}e&&ld.add(e[19]),Bd(n,()=>Yd(e,t,i||void 0,a,r),i||void 0)}function Jd(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 Yd(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&&Xd(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),Qd(e,t.running,i)}else Promise.allSettled(a).then(()=>{e&&ld.delete(e[19]),i(!0)})}else e&&ld.delete(e[19]),i(!1)}function Xd(e,t,n){if(t.type&12){let r=e[t.index];if(Ka(r))for(let e=10;e{e[26]?.running===t&&(e[26].running=void 0,ld.delete(e[19])),n(!0)})}function $d(e,t,n,r,i,a,o,s){if(i!=null){let c,l=!1;Ka(i)?c=i:Ga(i)&&(l=!0,i=i[0]);let u=to(i);e===0&&r!==null?(Kd(s,r,a,n),o==null?Cu(t,r,u):Su(t,r,u,o||null,!0)):e===1&&r!==null?(Kd(s,r,a,n),Su(t,r,u,o||null,!0),xd(a,u,s)):e===2?(s?.[26]?.leave?.has(a.index)&&Sd(a,u,s),bd.delete(u),qd(s,a,n,e=>{if(bd.has(u)){bd.delete(u);return}Tu(t,u,l,e)})):e===3&&(bd.delete(u),qd(s,a,n,()=>{t.destroyNode(u)})),c!=null&&Cf(t,e,n,c,a,r,o)}}function ef(e,t){nf(e,t),t[0]=null,t[5]=null}function tf(e,t,n,r,i,a){r[0]=i,r[5]=t,bf(e,r,n,1,i,a)}function nf(e,t){t[10].changeDetectionScheduler?.notify(9),bf(e,t,t[11],2,null,null)}function rf(e){let t=e[12];if(!t)return sf(e[1],e);for(;t;){let n=null;if(Ga(t))n=t[12];else{let e=t[10];e&&(n=e)}if(!n){for(;t&&!t[4]&&t!==e;)Ga(t)&&sf(t[1],t),t=t[3];t===null&&(t=e),Ga(t)&&sf(t[1],t),n=t&&t[4]}t=n}}function af(e,t){let n=e[9],r=n.indexOf(t);n.splice(r,1)}function of(e,t){if(Qa(t))return;let n=t[11];n.destroyNode&&bf(e,t,n,3,null,null),rf(t)}function sf(e,t){if(Qa(t))return;let n=w(null);try{t[2]&=-129,t[2]|=256,t[24]&&En(t[24]),lf(e,t),cf(e,t),t[1].type===1&&t[11].destroy();let n=t[16];if(n!==null&&Ka(t[3])){n!==t[3]&&af(n,t);let r=t[18];r!==null&&r.detachView(e)}Hl(t)}finally{w(n)}}function cf(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&&Nf(e,t,27,!1),Fc(o?Sc.TemplateUpdateStart:Sc.TemplateCreateStart,i,n),n(r,i)}finally{ds(a),Fc(o?Sc.TemplateUpdateEnd:Sc.TemplateCreateEnd,i,n)}}function Lf(e,t,n){Wf(e,t,n),(n.flags&64)==64&&Gf(e,t,n)}function Rf(e,t,n=ro){let r=t.localNames;if(r!==null){let i=t.index+1;for(let a=0;a{_o(e.lView)},consumerOnSignalRead(){this.lView[24]=this}};function hp(e){let t=e[24]??Object.create(gp);return t.lView=e,t}var gp={...pn,consumerIsAlwaysLive:!0,kind:`template`,consumerMarkedDirty:e=>{let t=bo(e.lView);for(;t&&!_p(t[1]);)t=bo(t);t&&po(t)},consumerOnSignalRead(){this.lView[24]=this}};function _p(e){return e.type!==2}function vp(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 yp=100;function bp(e,t=0){let n=e[10].rendererFactory;n.begin?.();try{xp(e,t)}finally{n.end?.()}}function xp(e,t){let n=Vo();try{Ho(!0),Dp(e,t);let n=0;for(;ho(e);){if(n===yp)throw new T(103,!1);n++,Dp(e,1)}}finally{Ho(n)}}function Sp(e,t,n,r){if(Qa(t))return;let i=t[2];rs(t);let a=!0,o=null,s=null;_p(e)?(s=dp(t),o=xn(s)):fn()===null?(a=!1,s=hp(t),o=xn(s)):t[24]&&=(En(t[24]),null);try{fo(t),Go(e.bindingStartIndex),n!==null&&If(e,t,n,2,r);let a=(i&3)==3;if(a){let n=e.preOrderCheckHooks;n!==null&&Rc(t,n,null)}else{let n=e.preOrderHooks;n!==null&&zc(t,n,0,null),Bc(t,0)}if(wp(t),vp(t),Cp(t,0),e.contentQueries!==null&&iu(e,t),a){let n=e.contentCheckHooks;n!==null&&Rc(t,n)}else{let n=e.contentHooks;n!==null&&zc(t,n,1),Bc(t,1)}kp(e,t);let o=e.components;o!==null&&Op(t,o,0);let s=e.viewQuery;if(s!==null&&au(2,s,r),a){let n=e.viewCheckHooks;n!==null&&Rc(t,n)}else{let n=e.viewHooks;n!==null&&zc(t,n,2),Bc(t,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),t[22]){for(let e of t[22])e();t[22]=null}lp(t),t[2]&=-73}catch(e){throw _o(t),e}finally{s!==null&&(Cn(s,o),a&&pp(s)),cs()}}function Cp(e,t){for(let n=Gl(e);n!==null;n=Kl(n))for(let e=10;e0&&(e[n-1][4]=r[4]);let a=ra(e,10+t);ef(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&&(Fp(e,n),ra(t,n))}this._attachedToViewContainer=!1}of(this._lView[1],this._lView)}onDestroy(e){vo(this._lView,e)}markForCheck(){Ap(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[2]&=-129}reattach(){go(this._lView),this._lView[2]|=128}detectChanges(){this._lView[2]|=1024,bp(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new T(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let e=Za(this._lView),t=this._lView[16];t!==null&&!e&&af(t,this._lView),nf(this._lView[1],this._lView)}attachToAppRef(e){if(this._attachedToViewContainer)throw new T(902,!1);this._appRef=e;let t=Za(this._lView),n=this._lView[16];n!==null&&!t&&Lp(n,this._lView),go(this._lView)}},zp=(()=>{class e{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=Bp;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 Rp(ap(this._declarationLView,this._declarationTContainer,e,{embeddedViewInjector:t,dehydratedView:n}))}}return e})();function Bp(){return Vp(Po(),D())}function Vp(e,t){return e.type&4?new zp(t,e,jl(e,t)):null}function Hp(e,t,n,r,i){let a=e.data[t];if(a===null)a=Up(e,t,n,r,i),Jo()&&(a.flags|=32);else if(a.type&64){a.type=n,a.value=r,a.attrs=i;let e=Io();a.injectorIndex=e===null?-1:e.injectorIndex}return Lo(a,!0),a}function Up(e,t,n,r,i){let a=Fo(),o=Ro(),s=o?a:a&&a.parent,c=e.data[t]=Gp(e,s,n,t,r,i);return Wp(e,c,a,o),c}function Wp(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 Gp(e,t,n,r,i,a){let o=t?t.injectorIndex:-1,s=0;return Ao()&&(s|=128),{type:n,index:r,insertBeforeIndex:null,injectorIndex:o,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,controlDirectiveIndex:-1,customControlIndex:-1,propertyBindings:null,flags:s,providerIndexes:0,value:i,namespace:hs(),attrs:a,mergedAttrs:null,localNames:null,initialInputs:null,inputs:null,hostDirectiveInputs:null,outputs:null,hostDirectiveOutputs:null,directiveToIndex:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:t,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}function Kp(e){let t=e[6]??[],n=e[3][11],r=[];for(let e of t)e.data.di===void 0?qp(e,n):r.push(e);e[6]=r}function qp(e,t){let n=0,r=e.firstChild;if(r){let i=e.data.r;for(;nnull,Yp=()=>null;function Xp(e,t){return Jp(e,t)}function Zp(e,t,n){return Yp(e,t,n)}var Qp=class{},$p=class{},em=(()=>{class e{static ɵprov=di({token:e,providedIn:`root`,factory:()=>null})}return e})();function tm(e){return e.debugInfo?.className||e.type.name||null}var nm={},rm=class{injector;parentInjector;constructor(e,t){this.injector=e,this.parentInjector=t}get(e,t,n){let r=this.injector.get(e,nm,n);return r!==nm||t===nm?r:this.parentInjector.get(e,t,n)}};function im(e,t,n){return e[t]=n}function am(e,t){return e[t]}function om(e,t,n){if(n===Ju)return!1;let r=e[t];return!Object.is(r,n)&&(e[t]=n,!0)}function sm(e,t,n,r){let i=om(e,t,n);return om(e,t+1,r)||i}function cm(e,t,n,r,i){let a=sm(e,t,n,r);return om(e,t+2,i)||a}function lm(e,t,n,r,i,a){let o=sm(e,t,n,r);return sm(e,t+2,i,a)||o}function um(e,t,n){return function r(i){let a=r.__ngNativeEl__;a!==void 0&&eu(i,a),Ap(Ja(e)?so(e.index,t):t,5);let o=t[8],s=dm(t,o,n,i),c=r.__ngNextListenerFn__;for(;c;)s=dm(t,o,c,i)&&s,c=c.__ngNextListenerFn__;return s}}function dm(e,t,n,r){let i=w(null);try{return Fc(Sc.OutputStart,t,n),n(r)!==!1}catch(t){return $f(e,t),!1}finally{Fc(Sc.OutputEnd,t,n),w(i)}}function fm(e,t,n,r,i,a,o,s){let c=Ya(e),l=!1,u=null;if(!r&&c&&(u=mm(t,n,a,e.index)),u!==null){let e=u.__ngLastListenerFn__||u;e.__ngNextListenerFn__=o,u.__ngLastListenerFn__=o,l=!0}else{let o=ro(e,n),c=r?r(o):o;r||(s.__ngNativeEl__=o);let l=i.listen(c,a,s);pm(a)||hm(r?t=>r(to(t[e.index])):e.index,t,n,a,s,l,!1)}return l}function pm(e){return e.startsWith(`animation`)||e.startsWith(`transition`)}function mm(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 hm(e,t,n,r,i,a,o){let s=t.firstCreatePass?So(t):null,c=xo(n),l=c.length;c.push(i,a),s&&s.push(r,e,l,(l+1)*(o?-1:1))}function gm(e,t,n,r,i,a){let o=t[n],s=t[1],c=o[s.data[n].outputs[r]].subscribe(a);hm(e.index,s,t,i,a,c,!0)}var _m=Symbol(`BINDING`),vm=new vi(``);function ym(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 Nm(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&Pf.SignalBased)!==0};return i&&(a.transform=i),a})}function Vm(e){return Object.keys(e).map(t=>({propName:e[t],templateName:t}))}function Hm(e,t,n){let r=t instanceof Aa?t:t?.injector;return r&&e.getStandaloneInjector!==null&&(r=e.getStandaloneInjector(r)||r),r?new rm(n,r):n}function Um(e){let t=e.get($p,null);if(t===null)throw new T(407,!1);return{rendererFactory:t,sanitizer:e.get(em,null),changeDetectionScheduler:e.get(ic,null),ngReflect:!1,tracingService:e.get(kd,null,{optional:!0})}}function Wm(e,t,n){let r=Km(e);return xu(t,r,r===`svg`?`svg`:r===`math`?eo:n)}function Gm(e){if((e&&`localName`in e&&typeof e.localName==`string`?e.localName:e?.tagName)?.toLowerCase()===`script`)throw new T(905,!1)}function Km(e){return(e.selectors[0][0]||`div`).toLowerCase()}var qm=class{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=Bm(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=Vm(this.componentDef.outputs),this.cachedOutputs}constructor(e,t){this.componentDef=e,this.ngModule=t,this.componentType=e.type,this.selector=Ku(e.selectors),this.ngContentSelectors=e.ngContentSelectors??[],this.isBoundToModule=!!t}create(e,t,n,r,i,a,o){Fc(Sc.DynamicComponentStart);let s=w(null);try{let s=this.componentDef,c=Hm(s,r||this.ngModule,e),l=Um(c),u=l.tracingService;return u&&u.componentCreate?u.componentCreate(tm(s),()=>this.createComponentRef(l,c,t,n,i,a,o)):this.createComponentRef(l,c,t,n,i,a,o)}finally{w(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?zf(l,r,s.encapsulation,t):Wm(s,l,o??null);Gm(u);let d=t.get(vm,null),f=Ym(u,()=>t.get(Ss,null)??Xl());d&&d.addHost(f);let p=a?.some(Zm)||i?.some(e=>typeof e!=`function`&&e.bindings.some(Zm)),m=Of(null,c,null,512|Af(s),null,null,e,l,t,null,ru(u,t,!0));d&&Rm&&f instanceof ShadowRoot&&vo(m,()=>{d.removeHost(f)}),m[27]=u,rs(m);let h=null;try{let e=Fm(27,m,2,`#host`,()=>c.directiveRegistry,!0,0);Ou(l,u,e),Wl(u,m),Lf(c,m,e),ou(c,e,m),Im(c,e),n!==void 0&&$m(e,this.ngContentSelectors,n),h=so(e.index,m),m[8]=h[8],rp(c,m,null)}catch(e){throw h!==null&&Hl(h),Hl(m),e}finally{Fc(Sc.DynamicComponentEnd),cs()}return new Qm(this.componentType,m,!!p)}};function Jm(e,t,n,r){let i=e?[`ng-version`,`22.1.7`]:qu(t.selectors[0]),a=null,o=null,s=0;if(n)for(let e of n)s+=e[_m].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 Zm(e){let t=e[_m].kind;return t===`input`||t===`twoWay`}var Qm=class extends Qp{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(e,t,n){super(),this._rootLView=t,this._hasInputBindings=n,this._tNode=io(t[1],27),this.location=jl(this._tNode,t),this.instance=so(this._tNode.index,t)[8],this.hostView=this.changeDetectorRef=new Rp(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;ep(n,r[1],r,e,t),this.previousInputValues.set(e,t),Ap(so(n.index,r),1)}get injector(){return new Tl(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(e){this.hostView.onDestroy(e)}};function $m(e,t,n){let r=e.projection=[];for(let e=0;e{class e{static __NG_ELEMENT_ID__=th}return e})();function th(){return ah(Po(),D())}var nh=class e extends eh{_lContainer;_hostTNode;_hostLView;constructor(e,t,n){super(),this._lContainer=e,this._hostTNode=t,this._hostLView=n}get element(){return jl(this._hostTNode,this._hostLView)}get injector(){return new Tl(this._hostTNode,this._hostLView)}get parentInjector(){let e=pl(this._hostTNode,this._hostLView);if($c(e)){let t=nl(e,this._hostLView),n=el(e),r=t[1].data[n+8];return new Tl(r,t)}return new Tl(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(e){let t=rh(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=Xp(this._lContainer,e.ssrId),o=e.createEmbeddedViewImpl(t||{},i,a);return this.insertImpl(o,r,op(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 qm(Ei(e)),u=n||this.parentInjector;if(!i&&l.ngModule==null){let e=this.parentInjector.get(Aa,null);e&&(i=e)}let d=Ei(l.componentType??{}),f=Xp(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,op(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(lo(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 Np(o,i,a,r),t.attachToViewContainerRef(),na(ih(o),a,t),t}move(e,t){return this.insert(e,t)}indexOf(e){let t=rh(this._lContainer);return t===null?-1:t.indexOf(e)}remove(e){let t=this._adjustIndex(e,-1),n=Fp(this._lContainer,t);n&&(ra(ih(this._lContainer),t),of(n[1],n))}detach(e){let t=this._adjustIndex(e,-1),n=Fp(this._lContainer,t);return n&&ra(ih(this._lContainer),t)!=null?new Rp(n):null}_adjustIndex(e,t=0){return e??this.length+t}};function rh(e){return e[8]}function ih(e){return e[8]||=[]}function ah(e,t){let n,r=t[e.index];return Ka(r)?n=r:(n=jp(r,t,null,e),t[e.index]=n,Mf(t,n)),sh(n,t,e,r),new nh(n,e,t)}function oh(e,t){let n=e[11],r=n.createComment(``),i=ro(t,e);return Su(n,n.parentNode(i),r,n.nextSibling(i),!1),r}var sh=uh,ch=()=>!1;function lh(e,t,n){return ch(e,t,n)}function uh(e,t,n,r){if(e[7])return;let i;i=n.type&8?to(r):oh(t,n),e[7]=i}var dh=class e{queryList;matches=null;constructor(e){this.queryList=e}clone(){return new e(this.queryList)}setDirty(){this.queryList.setDirty()}},fh=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 Eh(e,t,n){e.queries===null&&(e.queries=new mh),e.queries.track(new hh(t,n))}function Dh(e,t){return e.queries.getByIndex(t)}function Oh(e,t){let n=e[1],r=Dh(n,t);return r.crossesNgTemplate?xh(n,e,t,[]):bh(n,e,r,t)}function kh(e,t,n){let r,i=Mn(()=>{r._dirtyCounter();let n=Nh(r,e);if(t&&n===void 0)throw new T(-951,!1);return n});return r=i[dn],r._dirtyCounter=j(0),r._flatValue=void 0,i}function Ah(e){return kh(!0,!1,e)}function jh(e){return kh(!0,!0,e)}function Mh(e,t){let n=e[dn];n._lView=D(),n._queryIndex=t,n._queryList=Sh(n._lView,t),n._queryList.onDirty(()=>n._dirtyCounter.update(e=>e+1))}function Nh(e,t){let n=e._lView,r=e._queryIndex;if(n===void 0||r===void 0||n[2]&4)return t?void 0:ua;let i=Sh(n,r),a=Oh(n,r);return i.reset(a,Nl),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 Fh(e){return!!e&&typeof e.subscribe==`function`}var Ih=class{},Lh=class extends Ih{injector;instance=null;constructor(e){super();let t=new ja([...e.providers,{provide:Ih,useValue:this}],e.parent||ka(),e.debugName,new Set([`environment`]));this.injector=t,e.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(e){this.injector.onDestroy(e)}};function Rh(e,t,n=null){return new Lh({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}var zh=(()=>{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=ga(!1,e.type),n=t.length>0?Rh([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(qi(Aa))})}return e})();function Bh(e){return xc(()=>{let t=Kh(e),n={...t,decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection!==Ll.Eager,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:t.standalone?e=>e.get(zh).getOrCreateStandaloneInjector(n):null,getExternalStyles:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||su.Emulated,styles:e.styles||ua,_:null,schemas:e.schemas||null,tView:null,id:``};t.standalone&&jd(`NgStandalone`),qh(n);let r=e.dependencies;return n.directiveDefs=Jh(r,Vh),n.pipeDefs=Jh(r,Oi),n.id=Yh(n),n})}function Vh(e){return Ei(e)||Di(e)}function Hh(e,t){if(e==null)return la;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=Pf.None,c=null),n[a]=[r,s,c],t[a]=o}return n}function Uh(e){if(e==null)return la;let t={};for(let n in e)Object.hasOwn(e,n)&&(t[e[n]]=n);return t}function Wh(e){return xc(()=>{let t=Kh(e);return qh(t),t})}function Gh(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 Kh(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||la,exportAs:e.exportAs||null,standalone:e.standalone??!0,signals:e.signals===!0,selectors:e.selectors||ua,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,controlDef:null,signalFormsInputPresence:null,inputs:Hh(e.inputs,t),outputs:Uh(e.outputs),debugInfo:null}}function qh(e){e.features?.forEach(t=>t(e))}function Jh(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 Yh(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 Xh=new vi(``),Zh=(()=>{class e{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((e,t)=>{this.resolve=e,this.reject=t});appInits=E(Xh,{optional:!0})??[];injector=E(xs);constructor(){}runInitializers(){if(this.initialized)return;let e=[];for(let t of this.appInits){let n=Ha(this.injector,t);if(Ph(n))e.push(n);else if(Fh(n)){let t=new Promise((e,t)=>{n.subscribe({complete:e,error:t})});e.push(t)}}let t=()=>{this.done=!0,this.resolve()};Promise.all(e).then(()=>{t()}).catch(e=>{this.reject(e)}),e.length===0&&t(),this.initialized=!0}static ɵfac=function(t){return new(t||e)};static ɵprov=kl({token:e,factory:e.ɵfac})}return e})();function Qh(e,t,n,r,i,a,o,s){if(n.firstCreatePass){e.mergedAttrs=Zc(e.mergedAttrs,e.attrs);let t=e.tView=Tf(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),Lo(e,!1);let c=ng(n,t,e,r);_s()&&hf(n,t,c,e),Wl(c,t);let l=jp(c,t,c,e);t[r+27]=l,Mf(t,l),lh(l,e,t)}function $h(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;return t.firstCreatePass?(f=Hp(t,d,4,o||null,s||null),ko()&&xm(t,e,f,uo(t.consts,l),qf),Lc(t,f)):f=t.data[d],Qh(f,e,t,n,r,i,a,c),Ya(f)&&Lf(t,e,f),l!=null&&Rf(e,f,u),f}function eg(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;if(t.firstCreatePass){if(f=Hp(t,d,4,o||null,s||null),l!=null){let e=uo(t.consts,l);f.localNames=[];for(let t=0;t{throw new T(600,``)})}var sg=10,cg=(()=>{class e{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=E(Js);afterRenderManager=E(Md);zonelessEnabled=E(ac);rootEffectScheduler=E(sc);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new Zr;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=E(Ds);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(ei(e=>!e))}constructor(){E(kd,{optional:!0})}whenStable(){let e;return new Promise(t=>{e=this.isStable.subscribe({next:e=>{e&&t()}})}).finally(()=>{e.unsubscribe()})}_injector=E(Aa);_rendererFactory=null;get injector(){return this._injector}bootstrap(e,t){return this.bootstrapImpl(e,t)}bootstrapImpl(e,t,n=xs.NULL){return this._injector.get(Fs).run(()=>{if(Fc(Sc.BootstrapComponentStart),!this._injector.get(Zh).done)throw new T(405,``);let r=Ei(e),i=this._injector.get(Ih),a=new qm(r,i);this.componentTypes.push(e);let{hostElement:o,directives:s,bindings:c}=lg(t),l=o||a.selector,u=a.create(n,[],l,i.injector,s,c),d=u.location.nativeElement,f=u.injector.get(ig,null);return f?.registerApplication(d),u.onDestroy(()=>{this.detachView(u.hostView),ug(this.components,u),f?.unregisterApplication(d)}),this._loadComponent(u),Fc(Sc.BootstrapComponentEnd,u),u})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){Fc(Sc.ChangeDetectionStart),this.tracingSnapshot===null?this.tickImpl():this.tracingSnapshot.run(Od.CHANGE_DETECTION,this.tickImpl)}tickImpl=()=>{if(this._runningTick)throw Fc(Sc.ChangeDetectionEnd),new T(101,!1);let e=w(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,w(e),this.afterTick.next(),Fc(Sc.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++ho(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;ug(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(ag,[]).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),()=>ug(this._destroyListeners,e)}destroy(){if(this._destroyed)throw new T(406,!1);let e=this._injector;e.destroy&&!e.destroyed&&e.destroy()}get viewCount(){return this._views.length}static ɵfac=function(t){return new(t||e)};static ɵprov=kl({token:e,factory:e.ɵfac})}return e})();function lg(e){return e===void 0||typeof e==`string`||e instanceof Element?{hostElement:e}:e}function ug(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function N(e,t,n,r){let i=D();return om(i,Ko(),t)&&(No(),Jf(fs(),i,e,t,n,r)),N}function dg(e){if(jd(`NgAnimateEnter`),!fd)return dg;let t=D();if(pd(t))return dg;let n=Po(),r=t[9].get(Fs);return Dd(Cd(t),n,()=>fg(t,n,e,r)),Wd(t[9]),Gd(t[9],Cd(t)),dg}function fg(e,t,n,r){let i=ro(t,e),a=e[11],o=wd(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&&(Ed(e,i)&&(c=!0),pg(e,i,a))};if(o&&o.length>0){r.runOutsideAngular(()=>{s.push(a.listen(i,`animationstart`,l)),s.push(a.listen(i,`transitionstart`,l))}),md(i,o,s);for(let e of o)a.addClass(i,e);r.runOutsideAngular(()=>{requestAnimationFrame(()=>{if(!c&&(sd(i,_d,fd),!_d.has(i))){for(let e of o)a.removeClass(i,e);hd(i)}})})}}function pg(e,t,n){let r=gd.get(t);if(Td(e)===t&&r&&Ed(e,t)){e.stopPropagation();for(let e of r.classList)n.removeClass(t,e);hd(t)}}var mg=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 hg(e,t,n,r,i){return e===n&&Object.is(t,r)?1:Object.is(i(e,t),i(n,r))?-1:0}function gg(e,t,n,r){let i,a,o=0,s=e.length-1;if(Array.isArray(t)){w(r);let c=t.length-1;for(w(null);o<=s&&o<=c;){let r=e.at(o),l=t[o],u=hg(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=hg(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 bg,a??=yg(e,o,s,n),_g(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;)vg(e,i,n,o,t[o]),o++}else if(t!=null){w(r);let c=t[Symbol.iterator]();w(null);let l=c.next();for(;!l.done&&o<=s;){let t=e.at(o),r=l.value,u=hg(o,t,o,r,n);if(u!==0)u<0&&e.updateValue(o,r),o++,l=c.next();else{i??=new bg,a??=yg(e,o,s,n);let u=n(o,r);if(_g(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;)vg(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 _g(e,t,n,r){return t!==void 0&&t.has(r)?(e.attach(n,t.get(r)),t.delete(r),!0):!1}function vg(e,t,n,r,i){if(_g(e,t,r,n(r,i)))e.updateValue(r,i);else{let t=e.create(r,i);e.attach(r,t)}}function yg(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 bg=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 P(e,t,n,r,i,a,o,s){jd(`NgControlFlow`);let c=D(),l=No();return eg(c,l,e,t,n,r,i,uo(l.consts,a),256,o,s),xg}function xg(e,t,n,r,i,a,o,s){jd(`NgControlFlow`);let c=D(),l=No();return eg(c,l,e,t,n,r,i,uo(l.consts,a),512,o,s),xg}function F(e,t){jd(`NgControlFlow`);let n=D(),r=Ko(),i=n[r]===Ju?-1:n[r],a=i===-1?void 0:Dg(n,27+i);if(om(n,r,e)){let r=w(null);try{if(a!==void 0&&Pp(a,0),e!==-1){let r=27+e,i=Dg(n,r),a=Mg(n[1],r),o=Zp(i,a,n);Np(i,ap(n,a,t,{dehydratedView:o}),0,op(a,o))}}finally{w(r)}}else if(a!==void 0){let e=Mp(a,0);e!==void 0&&(e[8]=t)}}var Sg=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 Cg(e){return e}function wg(e,t){return t}var Tg=class{hasEmptyBlock;trackByFn;liveCollection;constructor(e,t,n){this.hasEmptyBlock=e,this.trackByFn=t,this.liveCollection=n}};function I(e,t,n,r,i,a,o,s,c,l,u,d,f){jd(`NgControlFlow`);let p=D(),m=No(),h=c!==void 0,g=D(),_=new Tg(h,s?o.bind(g[15][8]):o);g[27+e]=_,eg(p,m,e+1,t,n,r,i,uo(m.consts,a),256),h&&eg(p,m,e+2,c,l,u,d,uo(m.consts,f),512)}var Eg=class extends mg{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,Np(this.lContainer,t,e,op(this.templateTNode,n)),Og(this.lContainer,e)}detach(e){return this.needsIndexUpdate||=e!==this.length-1,kg(this.lContainer,e),Ag(this.lContainer,e)}create(e,t){let n=Xp(this.lContainer,this.templateTNode.tView.ssrId);return ap(this.hostLView,this.templateTNode,new Sg(this.lContainer,t,e),{dehydratedView:n})}destroy(e){of(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];Hd(e,r),ld.delete(n[19]),r.detachedLeaveAnimationFns=void 0}}function kg(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 Ag(e,t){return Fp(e,t)}function jg(e,t){return Mp(e,t)}function Mg(e,t){return io(e,t)}function R(e,t,n){let r=D();return om(r,Ko(),t)&&(No(),Vf(fs(),r,e,t,r[11],n)),R}function Ng(e,t,n,r,i){ep(t,e,n,i?`class`:`style`,r)}function z(e,t,n,r){let i=D(),a=i[1],o=e+27,s=a.firstCreatePass?Fm(o,i,2,t,qf,ko(),n,r):a.data[o];if(Ja(s)){let n=i[10].tracingService;if(n&&n.componentCreate){let o=a.data[s.directiveStart+s.componentOffset];return n.componentCreate(tm(o),()=>(Pg(e,t,i,s,r),z))}}return Pg(e,t,i,s,r),z}function Pg(e,t,n,r,i){if(Zf(r,n,e,t,Ig),Ya(r)){let e=n[1];Lf(e,n,r),ou(e,r,n)}i!=null&&Rf(n,r)}function B(){let e=No(),t=Qf(Po());return e.firstCreatePass&&Im(e,t),jo(t)&&Mo(),Oo(),t.classesWithoutHost!=null&&Kc(t)&&Ng(e,t,D(),t.classesWithoutHost,!0),t.stylesWithoutHost!=null&&qc(t)&&Ng(e,t,D(),t.stylesWithoutHost,!1),B}function V(e,t,n,r){return z(e,t,n,r),B(),V}function H(e,t,n,r){let i=D(),a=i[1],o=e+27,s=a.firstCreatePass?Lm(o,a,2,t,n,r):a.data[o];return Zf(s,i,e,t,Ig),r!=null&&Rf(i,s),H}function U(){return jo(Qf(Po()))&&Mo(),Oo(),U}function Fg(e,t,n,r){return H(e,t,n,r),U(),Fg}var Ig=(e,t,n,r,i)=>(vs(!0),xu(t[11],r,hs()));function Lg(e,t,n){let r=D(),i=r[1],a=e+27,o=i.firstCreatePass?Fm(a,r,8,`ng-container`,qf,ko(),t,n):i.data[a];if(Zf(o,r,e,`ng-container`,Bg),Ya(o)){let e=r[1];Lf(e,r,o),ou(e,o,r)}return n!=null&&Rf(r,o),Lg}function Rg(){let e=No(),t=Qf(Po());return e.firstCreatePass&&Im(e,t),Rg}function zg(e,t,n){return Lg(e,t,n),Rg(),zg}var Bg=(e,t,n,r,i)=>(vs(!0),bu(t[11],``));function W(){return D()}function Vg(e,t,n){let r=D();return om(r,Ko(),t)&&(No(),Hf(fs(),r,e,t,r[11],n)),Vg}var Hg=void 0;function Ug(e){let t=Math.floor(Math.abs(e)),n=e.toString().replace(/^[^.]*\.?/,``).length;return t===1&&n===0?1:5}var Wg=[`en`,[[`a`,`p`],[`AM`,`PM`]],[[`AM`,`PM`]],[[`S`,`M`,`T`,`W`,`T`,`F`,`S`],[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`],[`Sunday`,`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`],[`Su`,`Mo`,`Tu`,`We`,`Th`,`Fr`,`Sa`]],Hg,[[`J`,`F`,`M`,`A`,`M`,`J`,`J`,`A`,`S`,`O`,`N`,`D`],[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],[`January`,`February`,`March`,`April`,`May`,`June`,`July`,`August`,`September`,`October`,`November`,`December`]],Hg,[[`B`,`A`],[`BC`,`AD`],[`Before Christ`,`Anno Domini`]],0,[6,0],[`M/d/yy`,`MMM d, y`,`MMMM d, y`,`EEEE, MMMM d, y`],[`h:mm a`,`h:mm:ss a`,`h:mm:ss a z`,`h:mm:ss a zzzz`],[`{1}, {0}`,Hg,Hg,Hg],[`.`,`,`,`;`,`%`,`+`,`-`,`E`,`×`,`‰`,`∞`,`NaN`,`:`],[`#,##0.###`,`#,##0%`,`¤#,##0.00`,`#E0`],`USD`,`$`,`US Dollar`,{},`ltr`,Ug],Gg=Object.create(null);function Kg(e){let t=Yg(e),n=qg(t);if(n)return n;let r=t.split(`-`)[0];if(n=qg(r),n)return n;if(r===`en`)return Wg;throw new T(701,!1)}function qg(e){if(!(e in Gg)){let t=Hi.ng&&Hi.ng.common&&Hi.ng.common.locales&&Hi.ng.common.locales[e];return t!==void 0&&(Gg[e]=t),t}return Gg[e]}var Jg={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 Yg(e){return e.toLowerCase().replace(/_/g,`-`)}var Xg=`en-US`;function Zg(e){typeof e==`string`&&e.toLowerCase().replace(/_/g,`-`)}function G(e,t,n){let r=D(),i=No(),a=Po();return $g(i,r,r[11],a,e,t,n),G}function Qg(e,t,n){let r=D(),i=No(),a=Po();return(a.type&3||n)&&fm(a,i,r,n,r[11],e,t,um(a,r,t)),Qg}function $g(e,t,n,r,i,a,o){let s=!0,c=null;if((r.type&3||o)&&(c??=um(r,t,a),fm(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 a_(e){return(e&2)==2}function o_(e,t){return e&131071|t<<17}function s_(e){return e|2}function c_(e){return(e&131068)>>2}function l_(e,t){return e&-131069|t<<2}function u_(e){return(e&1)==1}function d_(e){return e|1}function f_(e,t,n,r,i,a){let o=a?t.classBindings:t.styleBindings,s=i_(o),c=c_(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=i_(e[s+1]);e[r+1]=r_(t,s),t!==0&&(e[t+1]=l_(e[t+1],r)),e[s+1]=o_(e[s+1],r)}else e[r+1]=r_(s,0),s!==0&&(e[s+1]=l_(e[s+1],r)),s=r}else e[r+1]=r_(c,0),s===0?s=r:e[c+1]=l_(e[c+1],r),c=r;l&&(e[r+1]=s_(e[r+1])),m_(e,u,r,!0),m_(e,u,r,!1),p_(t,u,e,r,a),o=r_(s,c),a?t.classBindings=o:t.styleBindings=o}function p_(e,t,n,r,i){let a=i?e.residualClasses:e.residualStyles;a!=null&&typeof t==`string`&&sa(a,t)>=0&&(n[r+1]=d_(n[r+1]))}function m_(e,t,n,r){let i=e[n+1],a=t===null,o=r?i_(i):c_(i),s=!1;for(;o!==0&&(s===!1||a);){let n=e[o],i=e[o+1];h_(n,t)&&(s=!0,e[o+1]=r?d_(i):s_(i)),o=r?i_(i):c_(i)}s&&(e[n+1]=r?s_(i):d_(i))}function h_(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 g_={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function __(e){return e.substring(g_.key,g_.keyEnd)}function v_(e){return b_(e),y_(e,x_(e,0,g_.textEnd))}function y_(e,t){let n=g_.textEnd;return n===t?-1:(t=g_.keyEnd=S_(e,g_.key=t,n),x_(e,t,n))}function b_(e){g_.key=0,g_.keyEnd=0,g_.value=0,g_.valueEnd=0,g_.textEnd=e.length}function x_(e,t,n){for(;t32;)t++;return t}function C_(e,t,n){return E_(e,t,n,!1),C_}function q(e,t){return E_(e,t,null,!0),q}function w_(e){D_(L_,T_,e,!0)}function T_(e,t){for(let n=v_(t);n>=0;n=y_(t,n))aa(e,__(t),!0)}function E_(e,t,n,r){let i=D(),a=No(),o=qo(2);if(a.firstUpdatePass&&k_(a,e,o,r),t!==Ju&&om(i,o,t)){let s=a.data[us()];z_(a,s,i,i[11],e,i[o+1]=H_(t,n),r,o)}}function D_(e,t,n,r){let i=No(),a=qo(2);i.firstUpdatePass&&k_(i,null,a,r);let o=D();if(n!==Ju&&om(o,a,n)){let s=i.data[us()];if(U_(s,r)&&!O_(i,a)){let e=r?s.classesWithoutHost:s.stylesWithoutHost;e!==null&&(n=oi(e,n||``)),Ng(i,s,o,n,r)}else R_(i,s,o,o[11],o[a+1],o[a+1]=I_(e,t,n),r,a)}}function O_(e,t){return t>=e.expandoStartIndex}function k_(e,t,n,r){let i=e.data;if(i[n+1]===null){let a=i[us()],o=O_(e,n);U_(a,r)&&t===null&&!o&&(t=!1),t=A_(i,a,t,r),f_(i,a,t,n,o,r)}}function A_(e,t,n,r){let i=Qo(e),a=r?t.residualClasses:t.residualStyles;if(i===null)(r?t.classBindings:t.styleBindings)===0&&(n=P_(null,e,t,n,r),n=F_(n,t.attrs,r),a=null);else{let o=t.directiveStylingLast;if(o===-1||e[o]!==i){if(n=P_(i,e,t,n,r),a===null){let n=j_(e,t,r);n!==void 0&&Array.isArray(n)&&(n=P_(null,e,t,n[1],r),n=F_(n,t.attrs,r),M_(e,t,r,n))}else a=N_(e,t,r)}}return a!==void 0&&(r?t.residualClasses=a:t.residualStyles=a),n}function j_(e,t,n){let r=n?t.classBindings:t.styleBindings;if(c_(r)!==0)return e[i_(r)]}function M_(e,t,n,r){let i=n?t.classBindings:t.styleBindings;e[i_(i)]=r}function N_(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===Ju&&(u=l?ua:void 0);let d=l?oa(u,r):c===r?u:void 0;if(a&&!V_(d)&&(d=oa(t,r)),V_(d)&&(s=d,o))return s;let f=e[i+1];i=o?i_(f):c_(f)}if(t!==null){let e=a?t.residualClasses:t.residualStyles;e!=null&&(s=oa(e,r))}return s}function V_(e){return e!==void 0}function H_(e,t){return e==null||e===``||(typeof t==`string`?e=lu(e)+t:typeof e==`object`&&(e=ai(lu(e)))),e}function U_(e,t){return!!(e.flags&(t?8:16))}function J(e,t=``){let n=D(),r=No(),i=e+27,a=r.firstCreatePass?Hp(r,i,1,t,null):r.data[i],o=W_(r,n,a,t);n[i]=o,_s()&&hf(r,n,o,a),Lo(a,!1)}var W_=(e,t,n,r)=>(vs(!0),vu(t[11],r));function G_(e,t,n,r=``){return om(e,Ko(),n)?t+Ai(n)+r:Ju}function K_(e,t,n,r,i,a=``){let o=sm(e,Wo(),n,i);return qo(2),o?t+Ai(n)+r+Ai(i)+a:Ju}function q_(e,t,n,r,i,a,o,s=``){let c=cm(e,Wo(),n,i,o);return qo(3),c?t+Ai(n)+r+Ai(i)+a+Ai(o)+s:Ju}function J_(e,t,n,r,i,a,o,s,c,l=``){let u=lm(e,Wo(),n,i,o,c);return qo(4),u?t+Ai(n)+r+Ai(i)+a+Ai(o)+s+Ai(c)+l:Ju}function Y(e){return X(``,e),Y}function X(e,t,n){let r=D(),i=G_(r,e,t,n);return i!==Ju&&Z_(r,us(),i),X}function Z(e,t,n,r,i){let a=D(),o=K_(a,e,t,n,r,i);return o!==Ju&&Z_(a,us(),o),Z}function Y_(e,t,n,r,i,a,o){let s=D(),c=q_(s,e,t,n,r,i,a,o);return c!==Ju&&Z_(s,us(),c),Y_}function X_(e,t,n,r,i,a,o,s,c){let l=D(),u=J_(l,e,t,n,r,i,a,o,s,c);return u!==Ju&&Z_(l,us(),u),X_}function Z_(e,t,n){let r=no(t,e);yu(e[11],r,n)}function Q_(e,t,n){vc(t)&&(t=t());let r=D();return om(r,Ko(),t)&&(No(),Vf(fs(),r,e,t,r[11],n)),Q_}function $_(e,t){let n=vc(e);return n&&e.set(t),n}function ev(e,t){let n=D(),r=No(),i=Po();return $g(r,n,n[11],i,e,t),ev}var tv={};function nv(e){jd(`NgLet`);let t=No(),n=D(),r=e+27;return Lo(Hp(t,r,128,null,null),!1),oo(t,n,r,tv),nv}function rv(e){return oo(No(),D(),us(),e),e}function iv(e){let t=ao(Bo(),27+e);if(t===tv)throw new T(314,!1);return t}function av(e,t,n=``){return G_(D(),e,t,n)}function ov(e,t){let n=Uo()+e,r=D();return r[n]===Ju?im(r,n,t()):am(r,n)}function sv(e,t,n){return lv(D(),Uo(),e,t,n)}function cv(e,t){let n=e[t];return n===Ju?void 0:n}function lv(e,t,n,r,i,a){let o=t+n;return om(e,o,i)?im(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 sm(e,s,i,a)?im(e,s+2,o?r.call(o,i,a):r(i,a)):cv(e,s+2)}function dv(e,t){let n=No(),r,i=e+27;n.firstCreatePass?(r=fv(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=Qi(r.type,!0)),o=Bi(bm);try{let e=il(!1),t=a();return il(e),oo(n,D(),i,t),t}finally{Bi(o)}}function fv(e,t){if(t)for(let n=t.length-1;n>=0;n--){let r=t[n];if(e===r.name)return r}}function pv(e,t,n){let r=e+27,i=D(),a=ao(i,r);return hv(i,r)?lv(i,Uo(),t,a.transform,n,a):a.transform(n)}function mv(e,t,n,r){let i=e+27,a=D(),o=ao(a,i);return hv(a,i)?uv(a,Uo(),t,o.transform,n,r,o):o.transform(n,r)}function hv(e,t){return e[1].data[t].pure}function gv(e,t){return Vp(e,t)}var _v=(()=>{class e{applicationErrorHandler=E(Js);appRef=E(cg);taskService=E(Ds);ngZone=E(Fs);zonelessEnabled=E(ac);tracing=E(kd,{optional:!0});zoneIsDefined=typeof Zone<`u`&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new hr;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(Ns):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(E(oc,{optional:!0})??!1);cancelScheduledCallback=null;useMicrotaskScheduler=!1;runningTick=!1;pendingRenderTaskId=null;constructor(){this.subscriptions.add(this.appRef.afterTick.subscribe(()=>{let e=this.taskService.add();if(!this.runningTick&&(this.cleanup(),!this.zonelessEnabled||this.appRef.includeAllTestViews)){this.taskService.remove(e);return}this.switchToMicrotaskScheduler(),this.taskService.remove(e)})),this.subscriptions.add(this.ngZone.onUnstable.subscribe(()=>{this.runningTick||this.cleanup()}))}switchToMicrotaskScheduler(){this.ngZone.runOutsideAngular(()=>{let e=this.taskService.add();this.useMicrotaskScheduler=!0,queueMicrotask(()=>{this.useMicrotaskScheduler=!1,this.taskService.remove(e)})})}notify(e){if(!this.zonelessEnabled&&e===5)return;switch(e){case 0:case 2:this.appRef.dirtyFlags|=2;break;case 3:case 4:case 5:case 1:this.appRef.dirtyFlags|=4;break;case 6:this.appRef.dirtyFlags|=2;break;case 12:this.appRef.dirtyFlags|=16;break;case 13:this.appRef.dirtyFlags|=2;break;case 11:break;default:this.appRef.dirtyFlags|=8}if(this.appRef.tracingSnapshot=this.tracing?.snapshot(this.appRef.tracingSnapshot)??null,!this.shouldScheduleTick())return;let t=this.useMicrotaskScheduler?js:As;this.pendingRenderTaskId=this.taskService.add(),this.cancelScheduledCallback=this.scheduleInRootZone?Zone.root.run(()=>t(()=>this.tick())):this.ngZone.runOutsideAngular(()=>t(()=>this.tick()))}shouldScheduleTick(){return!(this.appRef.destroyed||this.pendingRenderTaskId!==null||this.runningTick||this.appRef._runningTick||!this.zonelessEnabled&&this.zoneIsDefined&&Zone.current.get(`isAngularZone_ID`+this.angularZoneId))}tick(){if(this.runningTick||this.appRef.destroyed)return;if(this.appRef.dirtyFlags===0){this.cleanup();return}!this.zonelessEnabled&&this.appRef.dirtyFlags&7&&(this.appRef.dirtyFlags|=1);let e=this.taskService.add();try{this.ngZone.run(()=>{this.runningTick=!0,this.appRef._tick()},void 0,this.schedulerTickApplyArgs)}catch(e){this.applicationErrorHandler(e)}finally{this.taskService.remove(e),this.cleanup()}}ngOnDestroy(){this.subscriptions.unsubscribe(),this.cleanup()}cleanup(){if(this.runningTick=!1,this.cancelScheduledCallback?.(),this.cancelScheduledCallback=null,this.pendingRenderTaskId!==null){let e=this.pendingRenderTaskId;this.pendingRenderTaskId=null,this.taskService.remove(e)}}static ɵfac=function(t){return new(t||e)};static ɵprov=kl({token:e,factory:e.ɵfac})}return e})();function vv(){return[{provide:ic,useExisting:_v},{provide:Fs,useClass:Us},{provide:ac,useValue:!0}]}function yv(){return typeof $localize<`u`&&$localize.locale||`en-US`}var bv=new vi(``,{factory:()=>E(bv,{optional:!0,skipSelf:!0})||yv()}),xv=class{destroyed=!1;listeners=null;errorHandler=E(qs,{optional:!0});isEmitting=!1;hasNullListeners=!1;destroyRef=E(Cs);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(e){if(this.destroyed)throw new T(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(ri(953,!1));return}if(this.listeners===null)return;this.isEmitting=!0;let t=w(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&&Sv(this.listeners)),w(t),this.isEmitting=!1}}};function Sv(e){let t=e.length-1;for(;t>-1;)e[t]===null&&e.splice(t,1),t--}function Q(e,t){return Mn(e,t?.equal)}function Cv(e){return ar(e)}(class e extends Error{_brand;constructor(e){super(e)}static IDLE=new e(`IDLE`);static LOADING=new e(`LOADING`)});var wv=e=>e;function Tv(e,t){return typeof e==`function`?Ev(tr(e,wv,t?.equal),t?.debugName,t?.set):Ev(tr(e.source,e.computation,e.equal),e.debugName,e.set)}function Ev(e,t,n){let r=e[dn],i=e;if(n!==void 0){let t=e=>nr(r,e);i.set=e=>n(e,t),i.update=r=>n(r(Cv(e)),t)}else i.set=e=>nr(r,e),i.update=e=>rr(r,e);return i.asReadonly=Xs.bind(e),i}function Dv(e,t){let n=Object.create(bc);n.value=e,n.transformFn=t?.transform;function r(){if(mn(n),n.value===yc)throw new T(-950,null);return n.value}return r[dn]=n,r}function Ov(e){return new xv}function kv(e,t){return Dv(e,t)}function Av(e){return Dv(yc,e)}var $=(kv.required=Av,kv);function jv(e,t){let n=Object.create(bc),r=new xv;n.value=e;function i(){return mn(n),Mv(n.value),n.value}return i[dn]=n,i.asReadonly=Xs.bind(i),i.set=e=>{n.equal(n.value,e)||(Wn(n,e),r.emit(e))},i.update=e=>{Mv(n.value),i.set(e(n.value))},i.subscribe=r.subscribe.bind(r),i.destroyRef=r.destroyRef,i}function Mv(e){if(e===yc)throw new T(952,!1)}function Nv(e,t){return jv(e,t)}function Pv(e){return jv(yc,e)}var Fv=(Nv.required=Pv,Nv);function Iv(e,t){return Ah(t)}function Lv(e,t){return jh(t)}var Rv=(Iv.required=Lv,Iv),zv=new vi(``),Bv=new vi(``);function Vv(e){return!e.moduleRef}function Hv(e){let t=Vv(e)?e.r3Injector:e.moduleRef.injector,n=t.get(Fs);return n.run(()=>{Vv(e)?e.r3Injector.resolveInjectorInitializers():e.moduleRef.resolveInjectorInitializers();let r=t.get(Js),i;if(n.runOutsideAngular(()=>{i=n.onError.subscribe({next:r})}),Vv(e)){let n=()=>t.destroy(),r=e.platformInjector.get(zv);r.add(n),t.onDestroy(()=>{i.unsubscribe(),r.delete(n)})}else{let t=()=>e.moduleRef.destroy(),n=e.platformInjector.get(zv);n.add(t),e.moduleRef.onDestroy(()=>{ug(e.allPlatformModules,e.moduleRef),i.unsubscribe(),n.delete(t)})}return Wv(r,n,()=>{let n=t.get(Ds),r=n.add(),i=t.get(Zh);return i.runInitializers(),i.donePromise.then(()=>{if(Zg(t.get(bv,Xg)||`en-US`),!t.get(Bv,!0))return Vv(e)?t.get(cg):(e.allPlatformModules.push(e.moduleRef),e.moduleRef);if(Vv(e)){let n=t.get(cg);return e.rootComponent!==void 0&&n.bootstrap(e.rootComponent),n}return Uv?.(e.moduleRef,e.allPlatformModules),e.moduleRef}).finally(()=>void n.remove(r))})})}var Uv;function Wv(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 Gv=null;function Kv(e=[],t){return xs.create({name:t,providers:[{provide:Ta,useValue:`platform`},{provide:zv,useValue:new Set([()=>Gv=null])},...e]})}function qv(e=[]){if(Gv)return Gv;let t=Kv(e);return Gv=t,og(),Jv(t),t}function Jv(e){let t=e.get($s,null);Ha(e,()=>{t?.forEach(e=>e())})}function Yv(e){let{rootComponent:t,appProviders:n,platformProviders:r,platformRef:i}=e;Fc(Sc.BootstrapApplicationStart);try{let e=i?.injector??qv(r);return Hv({r3Injector:new Lh({providers:[vv(),Ys,...n||[]],parent:e,debugName:``,runEnvironmentInitializers:!1}).injector,platformInjector:e,rootComponent:t})}catch(e){return Promise.reject(e)}finally{Fc(Sc.BootstrapApplicationEnd)}}var Xv=Symbol(`NOT_SET`),Zv=new Set,Qv={...Kn,kind:`afterRenderEffectPhase`,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,value:Xv,cleanup:null,consumerMarkedDirty(){if(this.sequence.impl.executing){if(this.sequence.lastPhase===null||this.sequence.lastPhase(mn(r),r.value),r.signal[dn]=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??Zv)t()}finally{En(e)}}};function ey(e,t){let n=t?.injector??E(xs),r=n.get(ic),i=n.get(Md),a=n.get(kd,null,{optional:!0});i.impl??=n.get(Pd);let o=e;typeof o==`function`&&(o={mixedReadWrite:e});let s=n.get(nc,null,{optional:!0}),c=new $v(i.impl,[o.earlyRead,o.write,o.mixedReadWrite,o.read],s?.view,r,n,a?.snapshot(null));return i.impl.register(c),c}var ty=null;function ny(){return ty}function ry(e){ty??=e}var iy=class{},ay=(function(e){return e[e.Format=0]=`Format`,e[e.Standalone=1]=`Standalone`,e})(ay||{}),oy=(function(e){return e[e.Narrow=0]=`Narrow`,e[e.Abbreviated=1]=`Abbreviated`,e[e.Wide=2]=`Wide`,e[e.Short=3]=`Short`,e})(oy||{}),sy=(function(e){return e[e.Short=0]=`Short`,e[e.Medium=1]=`Medium`,e[e.Long=2]=`Long`,e[e.Full=3]=`Full`,e})(sy||{}),cy={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 ly(e){return Kg(e)[Jg.LocaleId]}function uy(e,t,n){let r=Kg(e);return xy(xy([r[Jg.DayPeriodsFormat],r[Jg.DayPeriodsStandalone]],t),n)}function dy(e,t,n){let r=Kg(e);return xy(xy([r[Jg.DaysFormat],r[Jg.DaysStandalone]],t),n)}function fy(e,t,n){let r=Kg(e);return xy(xy([r[Jg.MonthsFormat],r[Jg.MonthsStandalone]],t),n)}function py(e,t){let n=Kg(e)[Jg.Eras];return xy(n,t)}function my(e,t){return xy(Kg(e)[Jg.DateFormat],t)}function hy(e,t){return xy(Kg(e)[Jg.TimeFormat],t)}function gy(e,t){let n=Kg(e)[Jg.DateTimeFormat];return xy(n,t)}function _y(e,t){let n=Kg(e),r=n[Jg.NumberSymbols][t];if(r===void 0){if(t===cy.CurrencyDecimal)return n[Jg.NumberSymbols][cy.Decimal];if(t===cy.CurrencyGroup)return n[Jg.NumberSymbols][cy.Group]}return r}function vy(e){if(!e[Jg.ExtraData])throw new T(2303,!1)}function yy(e){let t=Kg(e);return vy(t),(t[Jg.ExtraData][2]||[]).map(e=>typeof e==`string`?Sy(e):[Sy(e[0]),Sy(e[1])])}function by(e,t,n){let r=Kg(e);return vy(r),xy(xy([r[Jg.ExtraData][0],r[Jg.ExtraData][1]],t)||[],n)||[]}function xy(e,t){for(let n=t;n>-1;n--)if(e[n]!==void 0)return e[n];throw new T(2304,!1)}function Sy(e){let[t,n]=e.split(`:`);return{hours:+t,minutes:+n}}var Cy=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,wy=Object.create(null),Ty=/((?:[^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]*)/,Ey=256;function Dy(e,t,n,r){let i=Xy(e);Oy(t),t=Ay(n,t)||t;let a=[],o;for(;t;)if(o=Ty.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=qy(r,s),i=Yy(i,r));let c=``;return a.forEach(e=>{let t=Ky(e);c+=t?t(i,n,s):e===`''`?`'`:e.replace(/(^'|'$)/g,``).replace(/''/g,`'`)}),c}function Oy(e){if(e.length>Ey)throw new T(2300,!1)}function ky(e,t,n){let r=new Date(0);return r.setFullYear(e,t,n),r.setHours(0,0,0),r}function Ay(e,t){let n=ly(e);if(wy[n]??=Object.create(null),wy[n][t])return wy[n][t];let r=``;switch(t){case`shortDate`:r=my(e,sy.Short);break;case`mediumDate`:r=my(e,sy.Medium);break;case`longDate`:r=my(e,sy.Long);break;case`fullDate`:r=my(e,sy.Full);break;case`shortTime`:r=hy(e,sy.Short);break;case`mediumTime`:r=hy(e,sy.Medium);break;case`longTime`:r=hy(e,sy.Long);break;case`fullTime`:r=hy(e,sy.Full);break;case`short`:let t=Ay(e,`shortTime`),n=Ay(e,`shortDate`);r=jy(gy(e,sy.Short),[t,n]);break;case`medium`:let i=Ay(e,`mediumTime`),a=Ay(e,`mediumDate`);r=jy(gy(e,sy.Medium),[i,a]);break;case`long`:let o=Ay(e,`longTime`),s=Ay(e,`longDate`);r=jy(gy(e,sy.Long),[o,s]);break;case`full`:let c=Ay(e,`fullTime`),l=Ay(e,`fullDate`);r=jy(gy(e,sy.Full),[c,l])}return r&&(wy[n][t]=r),r}function jy(e,t){return t&&(e=e.replace(/\{([^}]+)}/g,function(e,n){return Object.hasOwn(t,n)?t[n]:e})),e}function My(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 Ny(s,t);let c=_y(o,cy.MinusSign);return My(s,t,c,r,i)}}function Fy(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 T(2301,!1)}}function Iy(e,t,n=ay.Format,r=!1){return function(i,a){return Ly(i,a,e,t,n,r)}}function Ly(e,t,n,r,i,a){switch(n){case 2:return fy(t,i,r)[e.getMonth()];case 1:return dy(t,i,r)[e.getDay()];case 0:let n=e.getHours(),o=e.getMinutes();if(a){let e=yy(t),a=by(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?`+`:``)+My(o,2,a)+My(Math.abs(i%60),2,a);case 1:return`GMT`+(i>=0?`+`:``)+My(o,1,a);case 2:return`GMT`+(i>=0?`+`:``)+My(o,2,a)+`:`+My(Math.abs(i%60),2,a);case 3:return r===0?`Z`:(i>=0?`+`:``)+My(o,2,a)+`:`+My(Math.abs(i%60),2,a);default:throw new T(2310,!1)}}}var zy=0,By=4;function Vy(e){let t=ky(e,zy,1).getDay();return ky(e,0,1+(t<=By?By:11)-t)}function Hy(e){let t=e.getDay(),n=t===0?-3:By-t;return ky(e.getFullYear(),e.getMonth(),e.getDate()+n)}function Uy(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=Hy(n),t=Vy(e.getFullYear()),r=e.getTime()-t.getTime();i=1+Math.round(r/6048e5)}return My(i,e,_y(r,cy.MinusSign))}}function Wy(e,t=!1){return function(n,r){return My(Hy(n).getFullYear(),e,_y(r,cy.MinusSign),t)}}var Gy=Object.create(null);function Ky(e){if(Gy[e])return Gy[e];let t;switch(e){case`G`:case`GG`:case`GGG`:t=Iy(3,oy.Abbreviated);break;case`GGGG`:t=Iy(3,oy.Wide);break;case`GGGGG`:t=Iy(3,oy.Narrow);break;case`y`:t=Py(0,1,0,!1,!0);break;case`yy`:t=Py(0,2,0,!0,!0);break;case`yyy`:t=Py(0,3,0,!1,!0);break;case`yyyy`:t=Py(0,4,0,!1,!0);break;case`Y`:t=Wy(1);break;case`YY`:t=Wy(2,!0);break;case`YYY`:t=Wy(3);break;case`YYYY`:t=Wy(4);break;case`M`:case`L`:t=Py(1,1,1);break;case`MM`:case`LL`:t=Py(1,2,1);break;case`MMM`:t=Iy(2,oy.Abbreviated);break;case`MMMM`:t=Iy(2,oy.Wide);break;case`MMMMM`:t=Iy(2,oy.Narrow);break;case`LLL`:t=Iy(2,oy.Abbreviated,ay.Standalone);break;case`LLLL`:t=Iy(2,oy.Wide,ay.Standalone);break;case`LLLLL`:t=Iy(2,oy.Narrow,ay.Standalone);break;case`w`:t=Uy(1);break;case`ww`:t=Uy(2);break;case`W`:t=Uy(1,!0);break;case`d`:t=Py(2,1);break;case`dd`:t=Py(2,2);break;case`c`:case`cc`:t=Py(7,1);break;case`ccc`:t=Iy(1,oy.Abbreviated,ay.Standalone);break;case`cccc`:t=Iy(1,oy.Wide,ay.Standalone);break;case`ccccc`:t=Iy(1,oy.Narrow,ay.Standalone);break;case`cccccc`:t=Iy(1,oy.Short,ay.Standalone);break;case`E`:case`EE`:case`EEE`:t=Iy(1,oy.Abbreviated);break;case`EEEE`:t=Iy(1,oy.Wide);break;case`EEEEE`:t=Iy(1,oy.Narrow);break;case`EEEEEE`:t=Iy(1,oy.Short);break;case`a`:case`aa`:case`aaa`:t=Iy(0,oy.Abbreviated);break;case`aaaa`:t=Iy(0,oy.Wide);break;case`aaaaa`:t=Iy(0,oy.Narrow);break;case`b`:case`bb`:case`bbb`:t=Iy(0,oy.Abbreviated,ay.Standalone,!0);break;case`bbbb`:t=Iy(0,oy.Wide,ay.Standalone,!0);break;case`bbbbb`:t=Iy(0,oy.Narrow,ay.Standalone,!0);break;case`B`:case`BB`:case`BBB`:t=Iy(0,oy.Abbreviated,ay.Format,!0);break;case`BBBB`:t=Iy(0,oy.Wide,ay.Format,!0);break;case`BBBBB`:t=Iy(0,oy.Narrow,ay.Format,!0);break;case`h`:t=Py(3,1,-12);break;case`hh`:t=Py(3,2,-12);break;case`H`:t=Py(3,1);break;case`HH`:t=Py(3,2);break;case`m`:t=Py(4,1);break;case`mm`:t=Py(4,2);break;case`s`:t=Py(5,1);break;case`ss`:t=Py(5,2);break;case`S`:t=Py(6,1);break;case`SS`:t=Py(6,2);break;case`SSS`:t=Py(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 Gy[e]=t,t}function qy(e,t){e=e.replace(/:/g,``);let n=Date.parse(`Jan 01, 1970 00:00:00 `+e)/6e4;return isNaN(n)?t:n}function Jy(e,t){return e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+t),e}function Yy(e,t,n){let r=e.getTimezoneOffset();return Jy(e,-1*(qy(t,r)-r))}function Xy(e){if(Qy(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 ky(t,n-1,r)}let t=parseFloat(e);if(!isNaN(e-t))return new Date(t);let n;if(n=e.match(Cy))return Zy(n)}let t=new Date(e);if(!Qy(t))throw new T(2311,!1);return t}function Zy(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 Qy(e){return e instanceof Date&&!isNaN(e.valueOf())}var $y=(()=>{class e{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;injector=E(xs);constructor(e){this._viewContainerRef=e}ngOnChanges(e){if(this._shouldRecreateView(e)){let e=this._viewContainerRef;if(this._viewRef&&e.remove(e.indexOf(this._viewRef)),!this.ngTemplateOutlet){this._viewRef=null;return}let t=this._createContextForwardProxy();this._viewRef=e.createEmbeddedView(this.ngTemplateOutlet,t,{injector:this._getInjector()})}}_getInjector(){return this.ngTemplateOutletInjector===`outlet`?this.injector:this.ngTemplateOutletInjector??void 0}_shouldRecreateView(e){return!!e.ngTemplateOutlet||!!e.ngTemplateOutletInjector}_createContextForwardProxy(){return new Proxy({},{set:(e,t,n)=>this.ngTemplateOutletContext?Reflect.set(this.ngTemplateOutletContext,t,n):!1,get:(e,t,n)=>{if(this.ngTemplateOutletContext)return Reflect.get(this.ngTemplateOutletContext,t,n)}})}static ɵfac=function(t){return new(t||e)(bm(eh))};static ɵdir=Wh({type:e,selectors:[[``,`ngTemplateOutlet`,``]],inputs:{ngTemplateOutletContext:`ngTemplateOutletContext`,ngTemplateOutlet:`ngTemplateOutlet`,ngTemplateOutletInjector:`ngTemplateOutletInjector`},features:[Ec]})}return e})();function eb(e,t){return new T(2100,!1)}var tb=`mediumDate`,nb=new vi(``),rb=new vi(``),ib=(()=>{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??tb,a=r??this.defaultOptions?.timezone??this.defaultTimezone??void 0;return Dy(t,e,i||this.locale,a)}catch(t){throw eb(e,t.message)}}static ɵfac=function(t){return new(t||e)(bm(bv,16),bm(nb,24),bm(rb,24))};static ɵpipe=Gh({name:`date`,type:e,pure:!0})}return e})(),ab=(()=>{class e{transform(e){return JSON.stringify(e,null,2)}static ɵfac=function(t){return new(t||e)};static ɵpipe=Gh({name:`json`,type:e,pure:!1})}return e})();function ob(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 sb=`browser`,cb=class{_doc;constructor(e){this._doc=e}manager},lb=(()=>{class e extends cb{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)(qi(Ss))};static ɵprov=di({token:e,factory:e.ɵfac})}return e})(),ub=new vi(``),db=(()=>{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 lb));this._plugins=n.slice().reverse();let r=e.find(e=>e instanceof lb);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 T(-5101,!1);return this._eventNameToPlugin.set(e,t),t}static ɵfac=function(t){return new(t||e)(qi(ub),qi(Fs))};static ɵprov=di({token:e,factory:e.ɵfac})}return e})(),fb=`ng-app-id`;function pb(e){for(let t of e)t.remove()}function mb(e,t){let n=t.createElement(`style`);return n.textContent=e,n}function hb(e,t,n,r){let i=e.head?.querySelectorAll(`style[${fb}="${t}"],link[${fb}="${t}"]`);if(!i||i.length===0)return!1;for(let e of i)e.removeAttribute(fb),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 gb(e,t){let n=t.createElement(`link`);return n.setAttribute(`rel`,`stylesheet`),n.setAttribute(`href`,e),n}var _b=(()=>{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,hb(e,t,this.inline,this.external)&&this.hosts.add(e.head)}addStyles(e,t){for(let t of e)this.addUsage(t,this.inline,mb);t?.forEach(e=>this.addUsage(e,this.external,gb))}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&&(pb(n.elements),t.delete(e)))}ngOnDestroy(){for(let[,{elements:e}]of[...this.inline,...this.external])pb(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,mb(t,this.doc)));for(let[t,{elements:n}]of this.external)n.push(this.addElement(e,gb(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)(qi(Ss),qi(Zs),qi(tc,8),qi(ec))};static ɵprov=di({token:e,factory:e.ɵfac})}return e})(),vb={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`},yb=/%COMP%/g,bb=`%COMP%`,xb=`_nghost-${bb}`,Sb=`_ngcontent-${bb}`,Cb=!0,wb=new vi(``,{factory:()=>Cb}),Tb=new vi(``);function Eb(e){return Sb.replace(yb,e)}function Db(e){return xb.replace(yb,e)}function Ob(e,t){return t.map(t=>t.replace(yb,e))}var kb=(()=>{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 Ab(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 Pb?n.applyToHost(e):n instanceof Nb&&n.applyStyles(),n}getOrCreateRenderer(e,t){let n=this.rendererByCompId,r=n.get(t.id);if(!r){let i=this.doc,a=this.ngZone,o=this.eventManager,s=this.sharedStylesHost,c=this.removeStylesOnCompDestroy,l=this.tracingService;switch(t.encapsulation){case su.Emulated:r=new Pb(o,s,t,this.appId,c,i,a,l,this.cssVarNamespace);break;case su.ShadowDom:return new Mb(o,e,t,i,a,this.nonce,l,this.cssVarNamespace,s);case su.ExperimentalIsolatedShadowDom:return new Mb(o,e,t,i,a,this.nonce,l,this.cssVarNamespace);default:r=new Nb(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)(qi(db),qi(vm),qi(Zs),qi(wb),qi(Ss),qi(Fs),qi(tc),qi(kd,8),qi(Tb,8))};static ɵprov=di({token:e,factory:e.ɵfac})}return e})(),Ab=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(vb[t]||t,e):this.doc.createElement(e)}createComment(e){return this.doc.createComment(e)}createText(e){return this.doc.createTextNode(e)}appendChild(e,t){(jb(e)?e.content:e).appendChild(t)}insertBefore(e,t,n){if(e){let r=jb(e)?e.content:e;if(n!=null&&n.parentNode!==r)throw new T(-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 T(-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=vb[r];i?e.setAttributeNS(i,t,n):e.setAttribute(t,n)}else e.setAttribute(t,n)}removeAttribute(e,t,n){if(n){let r=vb[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&(Yu.DashCase|Yu.Important)?e.style.setProperty(t,n,r&Yu.Important?`important`:``):e.style[t]=n}removeStyle(e,t,n){let r=t.startsWith(`--`);r&&(t=t.replace(`%NS%`,this.cssVarNamespace)),r||n&Yu.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=ny().getGlobalEventTarget(this.doc,e),!e))throw new T(-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 jb(e){return e.tagName===`TEMPLATE`&&e.content!==void 0}var Mb=class extends Ab{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=Ob(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=gb(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)}},Nb=class extends Ab{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?Ob(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&&ld.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},Pb=class extends Nb{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=Eb(l),this.hostAttr=Db(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}},Fb=class e extends iy{supportsDOMEvents=!0;static makeCurrent(){ry(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=Lb();return t==null?null:Rb(t)}resetBaseElement(){Ib=null}getUserAgent(){return window.navigator.userAgent}getCookie(e){return ob(document.cookie,e)}},Ib=null;function Lb(){return Ib||=document.head.querySelector(`base`),Ib?Ib.getAttribute(`href`):null}function Rb(e){return new URL(e,document.baseURI).pathname}var zb=[`alt`,`control`,`meta`,`shift`],Bb={"\b":`Backspace`," ":`Tab`,"":`Delete`,"\x1B":`Escape`,Del:`Delete`,Esc:`Escape`,Left:`ArrowLeft`,Right:`ArrowRight`,Up:`ArrowUp`,Down:`ArrowDown`,Menu:`ContextMenu`,Scroll:`ScrollLock`,Win:`OS`},Vb={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},Hb=(()=>{class e extends cb{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(()=>ny().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.`),zb.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=Bb[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`),zb.forEach(t=>{if(t!==n){let n=Vb[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)(qi(Ss))};static ɵprov=di({token:e,factory:e.ɵfac})}return e})();async function Ub(e,t,n){return Yv({rootComponent:e,...Wb(t,n)})}function Wb(e,t){return{platformRef:t?.platformRef,appProviders:[...Yb,...e?.providers??[]],platformProviders:Jb}}function Gb(){Fb.makeCurrent()}function Kb(){return new qs}function qb(){return Yl(document),document}var Jb=[{provide:ec,useValue:sb},{provide:$s,useValue:Gb,multi:!0},{provide:Ss,useFactory:qb}],Yb=[{provide:Ta,useValue:`root`},{provide:qs,useFactory:Kb},{provide:ub,useClass:lb,multi:!0},{provide:ub,useClass:Hb,multi:!0},kb,{provide:vm,useClass:_b},{provide:_b,useExisting:vm},db,{provide:$p,useExisting:kb},[]];function Xb(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 ex({code:i,why:Qb(a.why,e),fix:Qb(a.fix,e),docs:o,cause:e.cause,sources:e.sources,data:Qb(a.data,e)},s);for(let e of t)e(r,n);return r};n[i]=s}return n}function rx(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 lx=Math.random.bind(Math),ux=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function dx(e=21){let t=``,n=e;for(;n--;)t+=ux[lx()*64|0];return t}var fx=6e4,px=e=>e,mx=px,{clearTimeout:hx,setTimeout:gx}=globalThis;function _x(e,t){let{post:n,on:r,off:i=()=>{},eventNames:a=[],serialize:o=px,deserialize:s=mx,resolver:c,bind:l=`rpc`,timeout:u=fx,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}=cx(),_=dx();s.i=_;let ee;async function v(n=s){return u>=0&&(ee=gx(()=>{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,v,d):await v()}catch(e){if(t.onGeneralError?.call(h,e)!==!0)throw e;return}finally{hx(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:v,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(te)}function v(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 te(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&&(hx(r.timeoutId),n?r.reject(n):r.resolve(t)),p.delete(e)}}return m=r(te),h}function vx(e,t){return t.safety?t.safety:e===`static`||e===`query`||e==null?`read`:`action`}var yx=Object.freeze({type:`object`,additionalProperties:!0});function bx(e){let t=e[`~standard`];if(t.jsonSchema)try{return t.jsonSchema.input({target:`draft-2020-12`})}catch{return yx}return yx}function xx(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 Cx(e,t){return Sx(e,t)??[e]}function wx(e){return typeof e==`string`?`'${e}'`:new Ox().serialize(e)}var Tx=` _-,;:!?.'"()[]{}@*/\\&#%\`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz`,Ex=(function(){let e=new Uint8Array(128);for(let t=0;t<69;t++)e[Tx.charCodeAt(t)]=t+1;for(let t=65;t<=90;t++)e[t]=e[t+32];return e})();function Dx(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})(),kx=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],Ax=[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],jx=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`,Mx=[],Nx=class{_data=new Px;_hash=new Px([...kx]);_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)Mx[n]=e[t+n]|0;else{let e=Mx[n-15],t=(e<<25|e>>>7)^(e<<14|e>>>18)^e>>>3,r=Mx[n-2],i=(r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10;Mx[n]=t+Mx[n-7]+i+Mx[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+Ax[n]+Mx[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=Px.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 Fx(e){return new Nx().finalize(e).toBase64()}function Ix(e){return Fx(wx(e))}function Lx(e){return Ix(e)}function Rx(){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 zx=/^[\w+.-]{2,}:\/\//;function Bx(e){return e.endsWith(`/`)?e:`${e}/`}function Vx(e){return(e.endsWith(`/`)?e.slice(0,-1):e)||`/`}function Hx(e,...t){let n=e;for(let e of t)e&&e!==`/`&&(n=n?Bx(n)+e.replace(/^\.?\//,``):e);return n}function Ux(e,t){if(!t||t===`/`||zx.test(e))return e;let n=Vx(t);return e.startsWith(n)?e:Hx(n,e)}function Wx(e,t){let n=e.match(zx);return t+(n?e.slice(n[0].length):e)}var Gx=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function Kx(e=21){let t=``,n=e;for(;n--;)t+=Gx[Math.random()*64|0];return t}var qx=Symbol.for(`immer-nothing`),Jx=Symbol.for(`immer-draftable`),Yx=Symbol.for(`immer-state`),Xx=[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 Zx(e,...t){{let n=Xx[e],r=xS(n)?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}}var Qx=Object,$x=Qx.getPrototypeOf,eS=`constructor`,tS=`prototype`,nS=`configurable`,rS=`enumerable`,iS=`writable`,aS=`value`,oS=e=>!!e&&!!e[Yx];function sS(e){return e?uS(e)||_S(e)||!!e[Jx]||!!e[eS]?.[Jx]||vS(e)||yS(e):!1}var cS=Qx[tS][eS].toString(),lS=new WeakMap;function uS(e){if(!e||!bS(e))return!1;let t=$x(e);if(t===null||t===Qx[tS])return!0;let n=Qx.hasOwnProperty.call(t,eS)&&t[eS];if(n===Object)return!0;if(!xS(n))return!1;let r=lS.get(n);return r===void 0&&(r=Function.toString.call(n),lS.set(n,r)),r===cS}function dS(e,t,n=!0){fS(e)===0?(n?Reflect.ownKeys(e):Qx.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function fS(e){let t=e[Yx];return t?t.type_:_S(e)?1:vS(e)?2:yS(e)?3:0}var pS=(e,t,n=fS(e))=>n===2?e.has(t):Qx[tS].hasOwnProperty.call(e,t),mS=(e,t,n=fS(e))=>n===2?e.get(t):e[t],hS=(e,t,n,r=fS(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function gS(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var _S=Array.isArray,vS=e=>e instanceof Map,yS=e=>e instanceof Set,bS=e=>typeof e==`object`,xS=e=>typeof e==`function`,SS=e=>typeof e==`boolean`;function CS(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var wS=e=>bS(e)?e?.[Yx]:null,TS=e=>e.copy_||e.base_,ES=e=>e.modified_?e.copy_:e.base_;function DS(e,t){if(vS(e))return new Map(e);if(yS(e))return new Set(e);if(_S(e))return Array[tS].slice.call(e);let n=uS(e);if(t===!0||t===`class_only`&&!n){let t=Qx.getOwnPropertyDescriptors(e);delete t[Yx];let n=Reflect.ownKeys(t);for(let r=0;r1&&Qx.defineProperties(e,{set:AS,add:AS,clear:AS,delete:AS}),Qx.freeze(e),t&&dS(e,(e,t)=>{OS(t,!0)},!1),e)}function kS(){Zx(2)}var AS={[aS]:kS};function jS(e){return e===null||!bS(e)||Qx.isFrozen(e)}var MS=`MapSet`,NS=`Patches`,PS=`ArrayMethods`,FS={};function IS(e){let t=FS[e];return t||Zx(0,e),t}var LS=e=>!!FS[e];function RS(e,t){FS[e]||(FS[e]=t)}var zS,BS=()=>zS,VS=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:LS(MS)?IS(MS):void 0,arrayMethodsPlugin_:LS(PS)?IS(PS):void 0});function HS(e,t){t&&(e.patchPlugin_=IS(NS),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function US(e){WS(e),e.drafts_.forEach(KS),e.drafts_=null}function WS(e){e===zS&&(zS=e.parent_)}var GS=e=>zS=VS(zS,e);function KS(e){let t=e[Yx];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function qS(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[Yx].modified_&&(US(t),Zx(4)),sS(e)&&(e=JS(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[Yx].base_,e,t)}else e=JS(t,n);return YS(t,e,!0),US(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===qx?void 0:e}function JS(e,t){if(jS(t))return t;let n=t[Yx];if(!n)return rC(t,e.handledSet_,e);if(!ZS(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);tC(n,e)}return n.copy_}function YS(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&OS(t,n)}function XS(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var ZS=(e,t)=>e.scope_===t,QS=[];function $S(e,t,n,r){let i=TS(e),a=e.type_;if(r!==void 0&&mS(i,r,a)===t){hS(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;dS(i,(e,n)=>{if(oS(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??QS;for(let e of o)hS(i,e,n,a)}function eC(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!ZS(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=ES(i);$S(e,i.draft_??i,a,n),tC(i,r)})}function tC(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)}XS(e)}}function nC(e,t,n){let{scope_:r}=e;if(oS(n)){let i=n[Yx];ZS(i,r)&&i.callbacks_.push(function(){fC(e),$S(e,n,ES(i),t)})}else sS(n)&&e.callbacks_.push(function(){let i=TS(e);e.type_===3?i.has(n)&&rC(n,r.handledSet_,r):mS(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&rC(mS(e.copy_,t,e.type_),r.handledSet_,r)})}function rC(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||oS(e)||t.has(e)||!sS(e)||jS(e)?e:(t.add(e),dS(e,(r,i)=>{if(oS(i)){let t=i[Yx];ZS(t,n)&&(hS(e,r,ES(t),e.type_),XS(t))}else sS(i)&&rC(i,t,n)}),e)}function iC(e,t){let n=_S(e),r={type_:+!!n,scope_:t?t.scope_:BS(),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=aC;n&&(i=[r],a=oC);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var aC={get(e,t){if(t===Yx)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=TS(e);if(!pS(i,t,e.type_))return lC(e,i,t);let a=i[t];if(e.finalized_||!sS(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&CS(t))return a;if(a===sC(e.base_,t)||cC(e,t,a)){fC(e);let n=e.type_===1?+t:t,r=mC(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in TS(e)},ownKeys(e){return Reflect.ownKeys(TS(e))},set(e,t,n){let r=uC(TS(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=sC(TS(e),t),i=r?.[Yx];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.delete(t),!0;if(gS(n,r)&&(n!==void 0||pS(e.base_,t,e.type_)))return!0;fC(e),dC(e)}return e.copy_[t]===n&&(n!==void 0||pS(e.copy_,t,e.type_))||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_.set(t,!0),nC(e,t,n),!0)},deleteProperty(e,t){return fC(e),sC(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),dC(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=TS(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[iS]:!0,[nS]:e.type_!==1||t!==`length`,[rS]:r[rS],[aS]:n[t]}},defineProperty(){Zx(11)},getPrototypeOf(e){return $x(e.base_)},setPrototypeOf(){Zx(12)}},oC={};for(let e in aC){let t=aC[e];oC[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}oC.deleteProperty=function(e,t){return isNaN(parseInt(t))&&Zx(13),oC.set.call(this,e,t,void 0)},oC.set=function(e,t,n){return t!==`length`&&isNaN(parseInt(t))&&Zx(14),aC.set.call(this,e[0],t,n,e[0])};function sC(e,t){let n=e[Yx];return(n?TS(n):e)[t]}function cC(e,t,n){return e.type_!==1||!e.allIndicesReassigned_||e.assigned_?.get(t)||!sS(n)||n[Yx]?!1:e.baseRefs_.has(n)}function lC(e,t,n){let r=uC(t,n);return r?aS in r?r[aS]:r.get?.call(e.draft_):void 0}function uC(e,t){if(!(t in e))return;let n=$x(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=$x(n)}}function dC(e){e.modified_||(e.modified_=!0,e.parent_&&dC(e.parent_))}function fC(e){e.copy_||=(e.assigned_=new Map,DS(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var pC=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(xS(e)&&!xS(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}xS(t)||Zx(6),n!==void 0&&!xS(n)&&Zx(7);let r;if(sS(e)){let i=GS(this),a=mC(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?US(i):WS(i)}return HS(i,n),qS(r,i)}if(!e||!bS(e)){if(r=t(e),r===void 0&&(r=e),r===qx&&(r=void 0),this.autoFreeze_&&OS(r,!0),n){let t=[],i=[];IS(NS).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}Zx(1,e)},this.produceWithPatches=(e,t)=>{if(xS(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]},SS(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),SS(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),SS(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){sS(e)||Zx(8),oS(e)&&(e=hC(e));let t=GS(this),n=mC(t,e,void 0);return n[Yx].isManual_=!0,WS(t),n}finishDraft(e,t){let n=e&&e[Yx];(!n||!n.isManual_)&&Zx(9);let{scope_:r}=n;return HS(r,t),qS(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=IS(NS).applyPatches_;return oS(e)?r(e,t):this.produce(e,e=>r(e,t))}};function mC(e,t,n,r){let[i,a]=vS(t)?IS(MS).proxyMap_(t,n):yS(t)?IS(MS).proxySet_(t,n):iC(t,n);return(n?.scope_??BS()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?eC(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 hC(e){return oS(e)||Zx(10,e),gC(e)}function gC(e){if(!sS(e)||jS(e))return e;let t=e[Yx],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=DS(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=DS(e,!0);return dS(n,(e,t)=>{hS(n,e,gC(t))},r),t&&(t.finalized_=!1),n}function _C(){Xx.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=wS(mS(e,n.key_)),i=mS(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||pS(e,o)))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=mS(o,e,c),f=mS(s,e,c),p=l?pS(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===qx?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(yS(e))return new Set(Array.from(e).map(u));let t=Object.create($x(e));for(let n in e)t[n]=u(e[n]);return pS(e,Jx)&&(t[Jx]=e[Jx]),t}function d(e){return oS(e)?u(e):e}RS(NS,{applyPatches_:l,generatePatches_:i,generateReplacementPatches_:c,getPath:e})}globalThis.Iterator?.from;var vC=new pC,yC=vC.produce,bC=vC.produceWithPatches.bind(vC),xC=vC.applyPatches.bind(vC),SC=1e3;function CC(e,t){if(e.add(t),e.size>SC){let t=e.values().next().value;t!==void 0&&e.delete(t)}}function wC(e){let{enablePatches:t=!1}=e;t&&_C();let n=Rx(),r=e.initialValue,i=new Set;return{on:n.on,value:()=>r,patch:(e,t=Kx())=>{i.has(t)||(_C(),r=xC(r,e),CC(i,t),n.emit(`updated`,r,void 0,t))},mutate:(e,a=Kx())=>{if(!i.has(a)){if(CC(i,a),t){let[t,i]=bC(r,e);if(t===r)return;r=t,n.emit(`updated`,r,i,a)}else{let t=yC(r,e);if(t===r)return;r=t,n.emit(`updated`,r,void 0,a)}}},syncIds:i}}var TC=typeof self==`object`?self:globalThis,EC=new Set([`Error`,`EvalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`,`AggregateError`]),DC=new Set([`Boolean`,`Number`,`String`,`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float16Array`,`Float32Array`,`Float64Array`,`BigInt64Array`,`BigUint64Array`]);function OC(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=EC.has(e)?TC[e]:void 0;return n(new(r??TC.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`&&DC.has(a))return n(new TC[a](o),i);throw TypeError(`unable to deserialize unsafe or unknown type: ${String(a)}`)};return r}function kC(e){return OC(new Map,e)(0)}var AC=``,{toString:jC}={},{keys:MC}=Object;function NC(e){let t=typeof e;if(t!==`object`||!e)return[0,t];let n=jC.call(e).slice(8,-1);switch(n){case`Array`:return[1,AC];case`Object`:return[2,AC];case`Date`:return[3,AC];case`RegExp`:return[4,AC];case`Map`:return[5,AC];case`Set`:return[6,AC];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]}function PC([e,t]){return e===0&&(t===`function`||t===`symbol`)}function FC(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]=NC(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 MC(r))(e||!PC(NC(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||!(PC(NC(n))||PC(NC(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!PC(NC(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a}function IC(e,t={}){let n=[];return FC(!(t.json||t.lossy),!!t.json,new Map,n)(e),n}var{parse:LC,stringify:RC}=JSON,zC={json:!0,lossy:!0};function BC(e){return kC(LC(e))}function VC(e){return RC(IC(e,zC))}function HC(e){return kC(e)}function UC(e){return VC(e)}function WC(e){return BC(e)}var GC=256,KC=class extends Error{name=`StreamClosedError`};function qC(e={}){let t=e.id??Kx(),n=Math.max(0,e.replayWindow??0),r=Rx(),i=new AbortController,a=[],o=!1,s=0;function c(e){if(o)throw new KC(`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=YC(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 JC(e={}){let t=e.id??Kx(),n=Math.max(1,e.highWaterMark??GC),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 YC(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 XC=128;function ZC(e){return e.replace(/[^\w-]+/g,`_`).slice(0,XC)}var QC=`modulepreload`,$C=function(e,t){return new URL(e,t).href},ew={},tw=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=$C(t,n),t=s(t),t in ew)return;ew[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`:QC,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)})},nw=`__connection.json`,rw=`__DEVFRAME_CONNECTION__`,iw=`x-birpc-session`,aw=`__rpc-dump/index.json`,ow=`devframe:services`,sw=`devframe_otp`,cw=`devframe_auth_token`;ix.postMessage.remoteAssetsError;var lw=class{cacheMap=new Map;options;keySerializer;constructor(e){this.options=e,this.keySerializer=e.keySerializer||(e=>Lx(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()}},uw=sx({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 dw(e){if(e.agent&&e.jsonSerializable===!1)throw uw.DF0019({name:e.name});e.agent&&!e.jsonSerializable&&(e.jsonSerializable=!0)}async function fw(e,t){let n=e[`~standard`].validate(t);return n instanceof Promise?await n:n}function pw(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 mw(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 _w(e,t){let n=e.handler;if(!n){let r=await gw(e,t);if(!r.handler)throw uw.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 mw(e.name,r,t),o=await a(...n);return await hw(e.name,i,o)}}var vw=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 _w(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 uw.DF0021({name:e.name});dw(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 uw.DF0022({name:e.name});dw(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 _w(this.definitions.get(e),this.context)}getSchema(e){let t=this.definitions.get(e);if(!t)throw uw.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 yw(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 xw(t,`undefined`,r,e);return n}return i!==null&&bw(i,r,e,t),n})}function bw(e,t,n,r){if(typeof e==`bigint`)throw xw(r,`BigInt`,t,n);if(typeof e!=`object`)return;if(e instanceof Map)throw xw(r,`Map`,t,n);if(e instanceof Set)throw xw(r,`Set`,t,n);if(e instanceof Date)throw xw(r,`Date`,t,n);if(Array.isArray(e))return;let i=Object.getPrototypeOf(e);if(i!==null&&i!==Object.prototype)throw xw(r,e.constructor?.name??`class instance`,t,n)}function xw(e,t,n,r){let i=Sw(n,r);return uw.DF0020({name:e||``,type:t,path:i})}function Sw(e,t){return Array.isArray(e)?`[${t}]`:t===``?``:t}var Cw=`__DEVFRAME_CONNECTION_META__`,ww=`__DEVFRAME_CONNECTION_AUTH_TOKEN__`;function Tw(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 Ew(){return Tw(rw)}function Dw(){return Tw(Cw)}function Ow(e){if(e)return e;try{let e=localStorage.getItem(ww);if(e)return e}catch{}return Tw(ww)}function kw(e){globalThis[rw]=e,globalThis[Cw]={...e.connectionMeta,baseUrl:e.metaBaseUrl},e.authToken&&Aw(e.authToken)}function Aw(e){try{localStorage.setItem(ww,e)}catch{}globalThis[ww]=e;let t=Ew();t&&(globalThis[rw]={...t,authToken:e})}function jw(e){let t=Ux(nw,e);try{return new URL(t,globalThis.location?.href).href}catch{return t}}function Mw(e,t){return t&&t!==e.authToken?{...e,authToken:t}:e}function Nw(){let e=Ew();if(e)return Mw(e,Ow()??e.authToken??e.connectionMeta.authToken);let t=Dw();if(t)return{connectionMeta:t,metaBaseUrl:t.baseUrl??jw(`./`),authToken:Ow(t.authToken)}}async function Pw(e={}){if(e.connection){let t=Mw(e.connection,Ow(e.authToken??e.connection.authToken??e.connection.connectionMeta.authToken));return kw(t),t}let t=Array.isArray(e.baseURL)?e.baseURL:[e.baseURL??`./`];if(e.connectionMeta){let n={connectionMeta:e.connectionMeta,metaBaseUrl:jw(t[0]??`./`),authToken:Ow(e.authToken??e.connectionMeta.authToken)};return kw(n),n}let n=Nw();if(n){let t=Mw(n,Ow(e.authToken??n.authToken??n.connectionMeta.authToken));return kw(t),t}let r=[];for(let n of t){let t=Ux(nw,n),i=jw(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:Ow(e.authToken??r.authToken)};return kw(o),o}catch(e){r.push(e)}}throw Error(`Failed to get connection meta from ${t.join(`, `)}`,{cause:r})}var Fw=class extends Error{name=`DevframeConnectionError`;kind;constructor(e,t,n){super(t,n),this.kind=e}};function Iw(e=sw){try{let t=globalThis.location?.hash?.replace(/^#/,``)??``;return new URLSearchParams(t).get(e)||void 0}catch{return}}function Lw(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 Rw(e=sw){let t=Iw(e);return t&&Lw(e),t}async function zw(e,t={}){let n=Rw(t.param??`devframe_otp`);return n?e.isTrusted?!0:e.requestTrustWithCode(n):!1}function Bw(e){let t={},n=new WeakMap,r,i=()=>(r??=e.sharedState.get(ow,{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 Vw(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:ix.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:ix.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=wC({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=>{if(e.isTrusted)d().then(t);else{t(u);let n=!1;e.events.on(ix.client.isTrustedUpdated,e=>{e&&!n&&(n=!0,d())})}})}}}var Hw=new Map;function Uw(e=Hw){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?yw(n,r??``):`s:${UC(n)}`},deserialize:e=>{let n=e.startsWith(`s:`)?WC(e.slice(2)):JSON.parse(e);return n.t===`q`&&n.i&&n.m&&t.set(n.i,n.m),n}}}function Ww(){}function Gw(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 Kw(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 qw(e){let{onConnected:t=Ww,onError:n=Ww,onDisconnected:r=Ww,definitions:i,fetch:a=globalThis.fetch.bind(globalThis)}=e,o=e.url;e.authToken&&(o=`${o}${o.includes(`?`)?`&`:`?`}${cw}=${encodeURIComponent(e.authToken)}`);let s=Uw(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=Gw(r);if(!e)break;r=e.rest;let{event:t,data:n}=Kw(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`,[iw]: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 Jw(e,t){let{channel:n,rpcOptions:r={}}=t;return _x(e,{...n,timeout:-1,...r,proxify:!1})}function Yw(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(ix.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 Fw(`connection`,`[devframe] Not connected to the devframe server`,{cause:u??void 0}):l===`unauthorized`?new Fw(`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(ix.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 Fw(`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(ix.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(ix.client.connectionError,e),m(new Fw(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){l!==`error`&&f(`disconnected`),m(new Fw(`connection`,`[devframe] Disconnected from the devframe server`,{cause:u??void 0}))}}),v=Jw(a.functions,{channel:ee,rpcOptions:o});a.register({name:ix.broadcast.authRevoked,type:`event`,handler:()=>{c=!1;let e=new Fw(`auth`,`[devframe] The devframe server revoked this client's trust`);f(`unauthorized`,e),i.emit(ix.client.connectionError,e),m(e),i.emit(ix.client.isTrustedUpdated,!1)}});let te=n;async function ne(e){te=e;let t=await v.$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 Fw(`auth`,`[devframe] The devframe server refused this client's credentials`);f(`unauthorized`,e),i.emit(ix.client.connectionError,e)}return i.emit(ix.client.isTrustedUpdated,c),t.isTrusted}async function re(e){let t=(await v.$call(`anonymous:devframe:auth:exchange`,{code:e,ua:navigator.userAgent,origin:location.origin}))?.authToken??null;return t&&(te=t,c=!0,d.resolve(!0),f(`connected`),i.emit(ix.client.isTrustedUpdated,!0)),t}async function ie(e={}){await v.$call(`anonymous:devframe:auth:request-code`,{ua:navigator.userAgent,origin:location.origin,...e.reissue?{reissue:!0}:{}})}async function ae(){return c?!0:ne(te??``)}async function oe(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:ae,requestTrustWithToken:ne,requestTrustWithCode:re,requestAuthCode:ie,ensureTrusted:oe,call:(...e)=>{let t=String(e[0]),n=h();return n?(i.emit(ix.client.error,n,t),Promise.reject(n)):g(v.$call(...e),t)},callEvent:(...e)=>{let t=h();if(t){i.emit(ix.client.error,t,String(e[0]));return}return v.$callEvent(...e)},callOptional:(...e)=>{let t=String(e[0]),n=h();return n?(i.emit(ix.client.error,n,t),Promise.reject(n)):g(v.$callOptional(...e),t)},close:()=>{ee.close()}}}function Xw(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 Zw(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=Xw(n.sse,r??`./`,location);return Yw({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>qw({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 Qw(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:$w(r)?Qw(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function $w(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function eT(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function tT(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function nT(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function rT(e){if(e.error)throw Qw(e.error);return e.output}function iT(e){return e.some(e=>e!=null)}function aT(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function oT(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?HC(e):e}function a(e,t){return i(aT(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 nT(r)?rT(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(eT(r)){if(iT(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(tT(r)){let e=Lx(n),i=r.records[e];if(i)return rT(await s(i,r.serialization));if(r.fallback)return rT(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!iT(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 sT(e){let t=oT(await e.fetchJsonFromBases(aw),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 cT=``;function lT(e,t){return`${e}${cT}${t}`}function uT(e){let t=new Map,n=new Map;e.client.register({name:ix.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(lT(e,n))?._push(r,i)}}),e.client.register({name:ix.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=lT(e,n),a=t.get(i);a&&(a._end(r),t.delete(i))}}),e.client.register({name:ix.broadcast.streamingUploadCancel,type:`event`,handler(e,t){let r=lT(e,t),i=n.get(r);i&&(i.abort(`server cancelled upload`),n.delete(r))}}),e.events.on(ix.client.isTrustedUpdated,n=>{if(n)for(let[n,r]of t){if(r.cancelled||r.done)continue;let t=n.indexOf(cT);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=lT(n,r),o=t.get(a);if(o)return o;let s=JC({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(ix.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=lT(t,r),a=n.get(i);if(a)return a;let o=qC({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 dT(){}var fT=new Map;function pT(e){let t=e.url;e.authToken&&(t=`${t}?${cw}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=dT,onError:i=dT,onDisconnected:a=dT,definitions:o=fT}=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=Uw(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 mT(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 Wx(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function hT(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=mT(n.websocket,r??`./`,location);return Yw({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>pT({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 gT(e){return e.includes(`:`)}function _T(e,t){return gT(t)?t:`${e}:${t}`}function vT(e){return{async get(t){return(await e()).value()[t]},async set(t,n){(await e()).mutate(e=>{e[t]=n})},async delete(t){(await e()).mutate(e=>{delete e[t]})},async all(){return(await e()).value()},async onChange(t){return(await e()).on(`updated`,e=>t(e))}}}function yT(e,t,n){let r=`devframe:settings:${n}:${t}`,i;function a(){return i||=e.sharedState.get(r,{initialValue:{}}),i}return vT(a)}function bT(e,t){return{global:yT(e,t,`global`),project:yT(e,t,`project`)}}function xT(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(gT(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(_T(t,n),...r)),callEvent:((n,...r)=>e.callEvent(_T(t,n),...r)),callOptional:((n,...r)=>e.callOptional(_T(t,n),...r)),sharedState:((n,r)=>e.sharedState.get(_T(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe(_T(t,n),r,i),upload:(n,r)=>e.streaming.upload(_T(t,n),r)}},settings:bT(e,t),scope:e.scope}}function ST(){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 CT(e,t={}){let n=t.modelContext??ST();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=ZC(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=vx(t.type,n),u=r.registerTool({name:o,description:n.description,inputSchema:xx(t.args),annotations:{title:n.title??t.name,readOnlyHint:l===`read`,destructiveHint:l===`destructive`},execute:n=>wT(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 wT(e,t,n){try{let r=Cx(n,e.args?.length);return{content:[{type:`text`,text:TT(await(await _w(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:ET(e)}]}}}function TT(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function ET(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 DT(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 OT(e={}){let{baseURL:t=`./`,rpcOptions:n={},cacheOptions:r=!1}=e,i=Rx(),a=Array.isArray(t)?t:[t],o=await Pw(e),{connectionMeta:s,metaBaseUrl:c,authToken:l}=o,u=a[0]??`./`;try{u=new URL(`.`,c).href}catch{}let d=new lw({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),f={rpc:void 0},p=new vw(f),m=e.webmcp===!1?void 0:CT(p),h,g=!1;async function _(e){let t=[u,...a.filter(e=>e!==u)].filter(e=>e!=null),n=[];for(let r of t)try{return await fetch(Ux(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 ee={authToken:l,connectionMeta:s,metaBaseUrl:c,events:i,clientRpc:p,callTimeout:e.callTimeout,rpcOptions:{...n,async onRequest(e,t,i){if(await n.onRequest?.call(this,e,t,i),r&&d?.validate(e.m)){if(d.has(e.m,e.a))return i(d.cached(e.m,e.a));let n=await t(e);d.apply(e,n)}else await t(e)}}},v=DT(e.transport??`auto`,s),te=v===`static`?await sT({fetchJsonFromBases:_}):v===`sse`?Zw({...ee,sseOptions:e.sseOptions}):hT({...ee,wsOptions:e.wsOptions}),ne;try{ne=new BroadcastChannel(`devframe-auth`)}catch{}let re,ie=!1;function ae(e){return((...t)=>ie||!re?e(...t):re.then(()=>e(...t)))}function oe(){g=!0;try{h?.(),m?.()}finally{try{ne?.close()}finally{te.close?.()}}}let se={events:i,get isTrusted(){return te.isTrusted},get status(){return te.status},get connectionError(){return te.connectionError},get transport(){return te.transport??v},get connection(){return o},connectionMeta:s,ensureTrusted:te.ensureTrusted,requestTrust:te.requestTrust,requestTrustWithToken:async e=>(Aw(e),o={...o,authToken:e},te.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await te.requestTrustWithCode(e);if(!t)return!1;Aw(t),o={...o,authToken:t};try{ne?.postMessage({type:`auth-update`,authToken:t})}catch{}return!0},requestAuthCode:e=>te.requestAuthCode(e),call:ae(te.call),callEvent:ae(te.callEvent),callOptional:ae(te.callOptional),client:p,sharedState:void 0,services:void 0,streaming:void 0,cacheManager:d,scope:void 0,close:oe};se.sharedState=Vw(se),se.streaming=uT(se),se.services=Bw(se);let ce=new Map;se.scope=(e=>{if(!e)return se;let t=ce.get(e);return t||(t=xT(se,e),ce.set(e,t)),t}),f.rpc=se;function le(){try{return typeof window<`u`&&window.self===window.top}catch{return!1}}async function ue(){if(e.simpleAuth!==!1&&le()&&typeof globalThis.prompt==`function`)for(await se.requestAuthCode().catch(()=>{});!se.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 se.requestTrustWithCode(t))return}}async function de(){let t=await te.requestTrust(),n=e.otpParam??`devframe_otp`,r=n?await zw(se,{param:n}):!1;t||r||se.isTrusted||await ue()}return re=de().then(()=>{ie=!0},()=>{ie=!0}),s.mcp&&tw(async()=>{let{setupBrowserAgentRpcBridge:e}=await import(`./browser-agent-rpc-BXhoSh1z-CXflmhRO.js`);return{setupBrowserAgentRpcBridge:e}},[],import.meta.url).then(({setupBrowserAgentRpcBridge:e})=>{g||(h=e(se))}).catch(()=>{}),ne&&(ne.onmessage=e=>{e.data?.type===`auth-update`&&e.data.authToken&&se.requestTrustWithToken(e.data.authToken)}),se}var kT=OT,AT=[`components`,`injectors`,`signals`,`ngrx`,`forms`,`router`,`pipes`,`http`,`analog`,`capacitor`],jT=[`angular`,`ngrx`,`analog`,`angular-native`,`nativescript`,`capacitor`];function MT(e){return`pangular:${e}`}var NT=[`forms`,`router`,`ngrx`,`http`,`analog`],PT={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}},FT={"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`},IT=[[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 LT(e){return IT.some(([t])=>t===e)}var RT=`pangular`;function zT(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function BT(e,t){return typeof e==`boolean`?e:t}var VT=100,HT=100;function UT(e){if(!Array.isArray(e))return[];let t=e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e&&e.length<=HT);return[...new Set(t)].slice(0,VT)}function WT(e,t){let{default:n,min:r,max:i}=PT[t];return typeof e!=`number`||!Number.isFinite(e)?n:Math.min(i,Math.max(r,Math.round(e)))}function GT(e,t){return Object.fromEntries(e.map(e=>[e,t(e)]))}function KT(e){let t=zT(e),n=zT(t.agent),r=zT(t.inspectors),i=zT(n.tools),a=zT(t.actions),o=BT(t.actions,!0),s=zT(t.redaction),c=zT(t.limits),l=GT(AT,e=>BT(r[e],!0));return{inspectors:l,agent:{readOnly:BT(n.readOnly,!1),tools:GT(AT,e=>l[e]&&BT(i[e],!0))},actions:GT(NT,e=>l[e]&&BT(a[e],o)),redaction:{secretNames:UT(s.secretNames),unmask:UT(s.unmask)},limits:Object.fromEntries(Object.keys(PT).map(e=>[e,WT(c[e],e)]))}}function qT(e){let t=e?.configs;return KT(t?.[RT])}function JT(e){return`${{forms:`Writing to forms`,router:`Navigating and clearing navigations`,ngrx:`Restoring NgRx state and dispatching actions`,http:`Changing HTTP mock rules and clearing HTTP calls`,analog:`Calling API routes and clearing server calls`}[e]} is turned off in the devtools config (actions.${e}).`}var YT={components:`Components`,injectors:`Injectors`,signals:`Signals`,ngrx:`NgRx`,forms:`Forms`,router:`Router`,pipes:`Pipes`,http:`HTTP`,analog:`Analog`,capacitor:`Capacitor`},XT={forms:`Form writes`,router:`Navigation`,ngrx:`NgRx restore and dispatch`,http:`HTTP mocking`,analog:`Analog API calls`},ZT={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`};function QT(e){let t=[],n=(e,n)=>{n.length&&t.push({label:e,value:n.join(`, `)})},r=AT.filter(t=>e.inspectors[t]);return n(`Inspectors off`,AT.filter(t=>!e.inspectors[t]).map(e=>YT[e])),n(`Agent`,e.agent.readOnly?[`Read-only`]:[]),n(`Hidden from the agent`,r.filter(t=>!e.agent.tools[t]).map(e=>YT[e])),n(`Blocked actions`,NT.filter(t=>e.inspectors[t]&&!e.actions[t]).map(e=>XT[e])),n(`Extra secret names`,e.redaction.secretNames),n(`Unmasked names`,e.redaction.unmask),n(`Limits`,Object.keys(PT).filter(t=>e.limits[t]!==PT[t].default).map(t=>ZT[t](e.limits[t]))),t}var $T=`pangular-page-id`,eE=null;function tE(e){eE=e}function nE(){if(eE)return eE;try{return new URLSearchParams(location.search).get(`pageId`)||(window.top===window?null:sessionStorage.getItem($T)||null)}catch{return null}}function rE(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 iE(e,t){return e?t?e.pages?.[t]??null:e:null}function aE(e,t){return e?t?e.pages?.[t]??null:e.graph??null:null}function oE(e,t,n){return e?e.scope(`pangular`).rpc.call(t,...n===void 0?[]:[n]):Promise.resolve(null)}function sE(e,t,n){return oE(e,t,n).then(e=>e,()=>null)}function cE(e){return e?.connectionMeta.backend===`static`}function lE(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 uE(e){return e.split(`@`)[1]??``}var dE={signal:`Signal Forms`,reactive:`Reactive`,template:`Template-driven`},fE={own:`validator`,directive:`template attribute`,tree:`cross-field rule`,async:`async`,parse:`parse`,submission:`server`,schema:`schema`,manual:`setErrors`},pE=sE,mE={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 hE(e){return mE[e]??e}var gE=`https://pangular-inspector.dev/security/#opt-fields-in-or-out`;async function _E(e,t){return await pE(e,`request-form-action`,t)??{ok:!1,error:`The devtools server did not answer.`}}function vE(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 yE=/"(?:[^"\\\n]|\\.)*"|`([^`\n]*)`|\*\*/g;function bE(e){return(e??``).replace(/^_Labels, paths.*_\n\n/,``).replace(yE,(e,t)=>t??(e===`**`?``:e))}function xE(e){return qT(e?.connectionMeta)}function SE(e,t){return xE(e).actions[t]}var CE={components:`components`,routes:`router`,signals:`signals`,injectors:`injectors`,store:`ngrx`,forms:`forms`,pipes:`pipes`,network:`http`,analog:`analog`,capacitor:`capacitor`};function wE(e){return CE[e]}var TE=`https://pangular-inspector.dev/getting-started/configuration/#inspectors-and-agent-tools`;function EE(e,t){let n=CE[e];return!n||t.inspectors[n]}function DE(e,t){e&1&&(A(),Fg(0,`rect`,4)(1,`rect`,5)(2,`rect`,6)(3,`rect`,7))}function OE(e,t){e&1&&(A(),Fg(0,`path`,8)(1,`path`,9)(2,`path`,10))}function kE(e,t){e&1&&(A(),Fg(0,`circle`,11)(1,`path`,12)(2,`circle`,13))}function AE(e,t){e&1&&(A(),Fg(0,`path`,1))}function jE(e,t){e&1&&(A(),Fg(0,`path`,14)(1,`path`,15)(2,`path`,16)(3,`path`,17))}function ME(e,t){e&1&&(A(),Fg(0,`ellipse`,18)(1,`path`,19)(2,`path`,20))}function NE(e,t){e&1&&(A(),Fg(0,`rect`,21)(1,`path`,22)(2,`path`,23)(3,`path`,24))}function PE(e,t){e&1&&(A(),Fg(0,`circle`,25)(1,`path`,26)(2,`path`,27))}function FE(e,t){e&1&&(A(),Fg(0,`path`,28)(1,`path`,29)(2,`path`,30)(3,`path`,31)(4,`circle`,32))}function IE(e,t){e&1&&(A(),Fg(0,`path`,2))}function LE(e,t){e&1&&(A(),Fg(0,`path`,3))}var RE=class e{name=$.required();static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-tab-icon`]],inputs:{name:[1,`name`]},decls:12,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`,`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`,`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`,`M3 12h18`],[`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`]],template:function(e,t){if(e&1&&(A(),H(0,`svg`,0),P(1,DE,4,0)(2,OE,3,0)(3,kE,3,0)(4,AE,1,0,`:svg:path`,1)(5,jE,4,0)(6,ME,3,0)(7,NE,4,0)(8,PE,3,0)(9,FE,5,0)(10,IE,1,0,`:svg:path`,2)(11,LE,1,0,`:svg:path`,3),U()),e&2){let e;M(),F((e=t.name())===`dashboard`?1:e===`components`?2:e===`routes`?3:e===`signals`?4:e===`injectors`?5:e===`store`?6:e===`forms`?7:e===`network`?8:e===`pipes`?9:e===`analog`?10:e===`capacitor`?11:-1)}},styles:[`[_nghost-%COMP%] { +`);return r>=0?n.slice(0,r):n}function oi(e,t){return e?t?`${e} ${t}`:e:t||``}var si=ii({__forward_ref__:ii});function ci(e){return e.__forward_ref__=ci,e}function li(e){return ui(e)?e():e}function ui(e){return typeof e==`function`&&Object.hasOwn(e,si)&&e.__forward_ref__===ci}function di(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function fi(e){return pi(e,gi)}function pi(e,t){return Object.hasOwn(e,t)&&e[t]||null}function mi(e){return(e?.[gi]??null)||null}function hi(e){return e&&Object.hasOwn(e,_i)?e[_i]:null}var gi=ii({ɵprov:ii}),_i=ii({ɵinj:ii}),vi=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 yi(e){return e&&!!e.ɵproviders}var bi=ii({ɵcmp:ii}),xi=ii({ɵdir:ii}),Si=ii({ɵpipe:ii}),Ci=ii({ɵfac:ii}),wi=ii({__NG_ELEMENT_ID__:ii}),Ti=ii({__NG_ENV_ID__:ii});function Ei(e){return ki(e,`@Component`),e[bi]||null}function Di(e){return ki(e,`@Directive`),e[xi]||null}function Oi(e){return ki(e,`@Pipe`),e[Si]||null}function ki(e,t){if(e==null)throw new T(-919,!1)}function Ai(e){return typeof e==`string`?e:e==null?``:String(e)}var ji=ii({ngErrorCode:ii}),Mi=ii({ngErrorMessage:ii}),Ni=ii({ngTokenPath:ii});function Pi(e,t){return Ii(``,-200,t)}function Fi(e,t){throw new T(-201,!1)}function Ii(e,t,n){let r=new T(t,e);return r[ji]=t,r[Mi]=e,n&&(r[Ni]=n),r}function Li(e){return e[ji]}var Ri;function zi(){return Ri}function Bi(e){let t=Ri;return Ri=e,t}function Vi(e,t,n){let r=fi(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;Fi(e,``)}var Hi=globalThis,Ui={},Wi=`__NG_DI_FLAG__`,Gi=class{injector;constructor(e){this.injector=e}retrieve(e,t){let n=Ji(t)||0;try{return this.injector.get(e,n&8?null:Ui,n)}catch(e){if(er(e))return e;throw e}}};function Ki(e,t=0){let n=Zn();if(n===void 0)throw new T(-203,!1);if(n===null)return Vi(e,void 0,t);{let r=Yi(t),i=n.retrieve(e,r);if(er(i)){if(r.optional)return null;throw i}return i}}function qi(e,t=0){return(zi()||Ki)(li(e),t)}function E(e,t){return qi(e,Ji(t))}function Ji(e){return e===void 0||typeof e==`number`?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Yi(e){return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)}}function Xi(e){let t=[];for(let n=0;nArray.isArray(e)?ta(e,t):t(e))}function na(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function ra(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function ia(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 oa(e,t,n){let r=ca(e,t);return r>=0?e[r|1]=n:(r=~r,aa(e,r,t,n)),r}function sa(e,t){let n=ca(e,t);if(n>=0)return e[n|1]}function ca(e,t){return la(e,t,1)}function la(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 ta(t,e=>{let t=e;ya(t,a,[],r)&&(i||=[],i.push(t))}),i!==void 0&&va(i,a),n}function va(e,t){for(let n=0;n{t(e,r)})}}function ya(e,t,n,r){if(e=li(e),!e)return!1;let i=null,a=hi(e),o=!a&&Ei(e);if(!a&&!o){let t=e.ngModule;if(a=hi(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)ya(i,t,n,r)}}else if(a){if(a.imports!=null&&!s){r.add(i);let e;try{ta(a.imports,i=>{ya(i,t,n,r)&&(e||=[],e.push(i))})}finally{}e!==void 0&&va(e,t)}if(!s){let e=Qi(i)||(()=>new i);t({provide:i,useFactory:e,deps:da},i),t({provide:ma,useValue:i,multi:!0},i),t({provide:fa,useValue:()=>qi(i),multi:!0},i)}let o=a.providers;if(o!=null&&!s){let n=e;ba(o,e=>{t(e,n)})}}else return!1;return i!==e&&e.providers!==void 0}function ba(e,t){for(let n of e)yi(n)&&(n=n.ɵproviders),Array.isArray(n)?ba(n,t):t(n)}var xa=ii({provide:String,useValue:ii});function Sa(e){return typeof e==`object`&&!!e&&xa in e}function Ca(e){return!!(e&&e.useExisting)}function wa(e){return!!(e&&e.useFactory)}function Ta(e){return typeof e==`function`}var Ea=new vi(``),Da={},Oa={},ka=void 0;function Aa(){return ka===void 0&&(ka=new ha),ka}var ja=class{},Ma=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,Ha(e,e=>this.processProvider(e)),this.records.set(pa,Ra(void 0,this)),r.has(`environment`)&&this.records.set(ja,Ra(void 0,this));let i=this.records.get(Ea);i!=null&&typeof i.value==`string`&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(ma,da,{self:!0}))}retrieve(e,t){let n=Ji(t)||0;try{return this.get(e,Ui,n)}catch(e){if(er(e))return e;throw e}}destroy(){La(this),this._destroyed=!0;let e=w(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(),w(e)}}onDestroy(e){return La(this),this._onDestroyHooks.push(e),()=>this.removeOnDestroy(e)}runInContext(e){La(this);let t=Qn(this),n=Bi(void 0);try{return e()}finally{Qn(t),Bi(n)}}get(e,t=Ui,n){if(La(this),Object.hasOwn(e,Ti))return e[Ti](this);let r=Ji(n),i=Qn(this),a=Bi(void 0);try{if(!(r&4)){let t=this.records.get(e);if(t===void 0){let n=Va(e)&&fi(e);t=n&&this.injectableDefInScope(n)?Ra(Na(e),Da):null,this.records.set(e,t)}if(t!=null)return this.hydrate(e,t,r)}let n=r&2?Aa():this.parent;return t=r&8&&t===Ui?null:t,n.get(e,t)}catch(e){let t=Li(e);throw t===-200||t===-201?new T(t,null):e}finally{Bi(a),Qn(i)}}resolveInjectorInitializers(){let e=w(null),t=Qn(this),n=Bi(void 0);try{let e=this.get(fa,da,{self:!0});for(let t of e)t()}finally{Qn(t),Bi(n),w(e)}}toString(){return`R3Injector[...]`}processProvider(e){e=li(e);let t=Ta(e)?e:li(e&&e.provide),n=Fa(e);if(!Ta(e)&&e.multi===!0){let n=this.records.get(t);n||(n=Ra(void 0,Da,!0),n.factory=()=>Xi(n.multi),this.records.set(t,n)),t=e,n.multi.push(e)}this.records.set(t,n)}hydrate(e,t,n){let r=w(null);try{if(t.value===Oa)throw Pi(``);return t.value===Da&&(t.value=Oa,t.value=t.factory(void 0,n)),typeof t.value==`object`&&t.value&&Ba(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}finally{w(r)}}injectableDefInScope(e){if(!e.providedIn)return!1;let t=li(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 Na(e){let t=fi(e),n=t===null?Qi(e):t.factory;if(n!==null)return n;if(e instanceof vi)throw new T(-204,!1);if(e instanceof Function)return Pa(e);throw new T(-204,!1)}function Pa(e){if(e.length>0)throw new T(-204,!1);let t=mi(e);return t===null?()=>new e:()=>t.factory(e)}function Fa(e){return Sa(e)?Ra(void 0,e.useValue):Ra(Ia(e),Da)}function Ia(e,t,n){let r;if(Ta(e)){let t=li(e);return Qi(t)||Na(t)}if(Sa(e))r=()=>li(e.useValue);else if(wa(e))r=()=>e.useFactory(...Xi(e.deps||[]));else if(Ca(e))r=(t,n)=>qi(li(e.useExisting),n!==void 0&&n&8?8:void 0);else{let t=li(e&&(e.useClass||e.provide));if(za(e))r=()=>new t(...Xi(e.deps));else return Qi(t)||Na(t)}return r}function La(e){if(e.destroyed)throw new T(-205,!1)}function Ra(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function za(e){return!!e.deps}function Ba(e){return typeof e==`object`&&!!e&&typeof e.ngOnDestroy==`function`}function Va(e){return typeof e==`function`||typeof e==`object`&&e.ngMetadataName===`InjectionToken`}function Ha(e,t){for(let n of e)Array.isArray(n)?Ha(n,t):n&&yi(n)?Ha(n.ɵproviders,t):t(n)}function Ua(e,t){let n;e instanceof Ma?(La(e),n=e):n=new Gi(e);let r=Qn(n),i=Bi(void 0);try{return t()}finally{Qn(r),Bi(i)}}function Wa(){return zi()!==void 0||Zn()!=null}var Ga=1;function Ka(e){return Array.isArray(e)&&typeof e[Ga]==`object`}function qa(e){return Array.isArray(e)&&e[Ga]===!0}function Ja(e){return!!(e.flags&4)}function Ya(e){return e.componentOffset>-1}function Xa(e){return(e.flags&1)==1}function Za(e){return!!e.template}function Qa(e){return!!(e[2]&512)}function $a(e){return(e[2]&256)==256}var eo=(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})(eo||{}),to=`math`;function no(e){for(;Array.isArray(e);)e=e[0];return e}function ro(e,t){return no(t[e])}function io(e,t){return no(t[e.index])}function ao(e,t){return e.data[t]}function oo(e,t){return e[t]}function so(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}function co(e,t){let n=t[e];return Ka(n)?n:n[0]}function lo(e){return(e[2]&128)==128}function uo(e){return qa(e[3])}function fo(e,t){return t==null?null:e[t]}function po(e){e[17]=0}function mo(e){e[2]&1024||(e[2]|=1024,lo(e)&&vo(e))}function ho(e,t){for(;e>0;)t=t[14],e--;return t}function go(e){return!!(e[2]&9216||e[24]?.dirty)}function _o(e){e[10].changeDetectionScheduler?.notify(8),e[2]&64&&(e[2]|=1024),go(e)&&vo(e)}function vo(e){e[10].changeDetectionScheduler?.notify(0);let t=xo(e);for(;t!==null&&!(t[2]&8192||(t[2]|=8192,!lo(t)));)t=xo(t)}function yo(e,t){if($a(e))throw new T(911,!1);e[21]===null&&(e[21]=[]),e[21].push(t)}function bo(e,t){if(e[21]===null)return;let n=e[21].indexOf(t);n!==-1&&e[21].splice(n,1)}function xo(e){let t=e[3];return qa(t)?t[3]:t}function So(e){return e[7]??=[]}function Co(e){return e.cleanup??=[]}function wo(e,t,n,r){let i=So(t);i.push(n),e.firstCreatePass&&Co(e).push(r,i.length-1)}var To={lFrame:os(null),bindingsEnabled:!0,skipHydrationRootTNode:null},Eo=!1;function Do(){return To.lFrame.elementDepthCount}function Oo(){To.lFrame.elementDepthCount++}function ko(){To.lFrame.elementDepthCount--}function Ao(){return To.bindingsEnabled}function jo(){return To.skipHydrationRootTNode!==null}function Mo(e){return To.skipHydrationRootTNode===e}function No(){To.skipHydrationRootTNode=null}function D(){return To.lFrame.lView}function Po(){return To.lFrame.tView}function O(e){return To.lFrame.contextLView=e,e[8]}function k(e){return To.lFrame.contextLView=null,e}function Fo(){let e=Io();for(;e!==null&&e.type===64;)e=e.parent;return e}function Io(){return To.lFrame.currentTNode}function Lo(){let e=To.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}function Ro(e,t){let n=To.lFrame;n.currentTNode=e,n.isParent=t}function zo(){return To.lFrame.isParent}function Bo(){To.lFrame.isParent=!1}function Vo(){return To.lFrame.contextLView}function Ho(){return Eo}function Uo(e){let t=Eo;return Eo=e,t}function Wo(){let e=To.lFrame,t=e.bindingRootIndex;return t===-1&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function Go(){return To.lFrame.bindingIndex}function Ko(e){return To.lFrame.bindingIndex=e}function qo(){return To.lFrame.bindingIndex++}function Jo(e){let t=To.lFrame,n=t.bindingIndex;return t.bindingIndex+=e,n}function Yo(){return To.lFrame.inI18n}function Xo(e,t){let n=To.lFrame;n.bindingIndex=n.bindingRootIndex=e,Qo(t)}function Zo(){return To.lFrame.currentDirectiveIndex}function Qo(e){To.lFrame.currentDirectiveIndex=e}function $o(e){let t=To.lFrame.currentDirectiveIndex;return t===-1?null:e[t]}function es(){return To.lFrame.currentQueryIndex}function ts(e){To.lFrame.currentQueryIndex=e}function ns(e){let t=e[1];return t.type===2?t.declTNode:t.type===1?e[5]:null}function rs(e,t,n){if(n&4){let r=t,i=e;for(;r=r.parent,r===null&&!(n&1)&&(r=ns(i),!(r===null||(i=i[14],r.type&10))););if(r===null)return!1;t=r,e=i}let r=To.lFrame=as();return r.currentTNode=t,r.lView=e,!0}function is(e){let t=as(),n=e[1];To.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function as(){let e=To.lFrame,t=e===null?null:e.child;return t===null?os(e):t}function os(e){let t={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:e,child:null,inI18n:!1};return e!==null&&(e.child=t),t}function ss(){let e=To.lFrame;return To.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var cs=ss;function ls(){let e=ss();e.isParent=!0,e.tView=null,e.selectedIndex=-1,e.contextLView=null,e.elementDepthCount=0,e.currentDirectiveIndex=-1,e.currentNamespace=null,e.bindingRootIndex=-1,e.bindingIndex=-1,e.currentQueryIndex=0}function us(e){return(To.lFrame.contextLView=ho(e,To.lFrame.contextLView))[8]}function ds(){return To.lFrame.selectedIndex}function fs(e){To.lFrame.selectedIndex=e}function ps(){let e=To.lFrame;return ao(e.tView,e.selectedIndex)}function A(){To.lFrame.currentNamespace=`svg`}function ms(){hs()}function hs(){To.lFrame.currentNamespace=null}function gs(){return To.lFrame.currentNamespace}var _s=!0;function vs(){return _s}function ys(e){_s=e}function bs(e,t=null,n=null,r){let i=xs(e,t,n,r);return i.resolveInjectorInitializers(),i}function xs(e,t=null,n=null,r,i=new Set){return new Ma([n||da,ga(e)],t||Aa(),null,i)}var Ss=class e{static THROW_IF_NOT_FOUND=Ui;static NULL=new ha;static create(e,t){if(Array.isArray(e))return bs({name:``},t,e,``);{let t=e.name??``;return bs({name:t},e.parent,e.providers,t)}}static ɵprov=di({token:e,providedIn:`any`,factory:()=>qi(pa)});static __NG_ELEMENT_ID__=-1},Cs=new vi(``),ws=class{static __NG_ELEMENT_ID__=Es;static __NG_ENV_ID__=e=>e},Ts=class extends ws{_lView;constructor(e){super(),this._lView=e}get destroyed(){return $a(this._lView)}onDestroy(e){let t=this._lView;return yo(t,e),()=>bo(t,e)}};function Es(){return new Ts(D())}var Ds=new vi(``),Os=(()=>{class e{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new $r(!1);debugTaskTracker=E(Ds,{optional:!0});get hasPendingTasks(){return!this.destroyed&&this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new Hr(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})(),ks=class extends Zr{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(e=!1){super(),this.__isAsync=e,Wa()&&(this.destroyRef=E(ws,{optional:!0})??void 0,this.pendingTasks=E(Os,{optional:!0})??void 0)}emit(e){let t=w(null);try{super.next(e)}finally{w(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 hr&&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 As(...e){}function js(e){let t,n;function r(){e=As;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 Ms(e){return queueMicrotask(()=>e()),()=>{e=As}}var Ns=`isAngularZone`,Ps=`isAngularZone_ID`,Fs=0,Is=class e{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new ks(!1);onMicrotaskEmpty=new ks(!1);onStable=new ks(!1);onError=new ks(!1);constructor(e){let{enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1,scheduleInRootZone:i=!1}=e;if(typeof Zone>`u`)throw new T(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,Bs(a)}static isInAngularZone(){return typeof Zone<`u`&&Zone.current.get(Ns)===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new T(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new T(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,Ls,As,As);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)}},Ls={};function Rs(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 zs(e){if(e.isCheckStableRunning||e.callbackScheduled)return;e.callbackScheduled=!0;function t(){js(()=>{e.callbackScheduled=!1,Vs(e),e.isCheckStableRunning=!0,Rs(e),e.isCheckStableRunning=!1})}e.scheduleInRootZone?Zone.root.run(()=>{t()}):e._outer.run(()=>{t()}),Vs(e)}function Bs(e){let t=()=>{zs(e)},n=Fs++;e._inner=e._inner.fork({name:`angular`,properties:{[Ns]:!0,[Ps]:n,[Ps+n]:!0},onInvokeTask:(n,r,i,a,o,s)=>{if(Gs(s))return n.invokeTask(i,a,o,s);try{return Hs(e),n.invokeTask(i,a,o,s)}finally{(e.shouldCoalesceEventChangeDetection&&a.type===`eventTask`||e.shouldCoalesceRunChangeDetection)&&t(),Us(e)}},onInvoke:(n,r,i,a,o,s,c)=>{try{return Hs(e),n.invoke(i,a,o,s,c)}finally{e.shouldCoalesceRunChangeDetection&&!e.callbackScheduled&&!Ks(s)&&t(),Us(e)}},onHasTask:(t,n,r,i)=>{t.hasTask(r,i),n===r&&(i.change==`microTask`?(e._hasPendingMicrotasks=i.microTask,Vs(e),Rs(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 Vs(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.callbackScheduled===!0)}function Hs(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function Us(e){e._nesting--,Rs(e)}var Ws=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new ks;onMicrotaskEmpty=new ks;onStable=new ks;onError=new ks;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 Gs(e){return qs(e,`__ignore_ng_zone__`)}function Ks(e){return qs(e,`__scheduler_tick__`)}function qs(e,t){return!Array.isArray(e)||e.length!==1?!1:e[0]?.data?.[t]===!0}var Js=class{_console=console;handleError(e){this._console.error(`ERROR`,e)}},Ys=new vi(``,{factory:()=>{let e=E(Is),t=E(ja),n;return r=>{e.runOutsideAngular(()=>{t.destroyed&&!n?setTimeout(()=>{throw r}):(n??=t.get(Js),n.handleError(r))})}}}),Xs={provide:fa,useValue:()=>{E(Js,{optional:!0})},multi:!0};function j(e,t){let[n,r,i]=Hn(e,t?.equal),a=n;return a[dn],a.set=r,a.update=i,a.asReadonly=Zs.bind(a),a}function Zs(){let e=this[dn];if(e.readonlyFn===void 0){let t=()=>this();t[dn]=e,e.readonlyFn=t}return e.readonlyFn}var Qs=new vi(``,{factory:()=>$s}),$s=`ng`,ec=new vi(``),tc=new vi(``,{providedIn:`platform`,factory:()=>`unknown`}),nc=new vi(``,{factory:()=>E(Cs).body?.querySelector(`[ngCspNonce]`)?.getAttribute(`ngCspNonce`)||null}),rc=(()=>{class e{view;node;constructor(e,t){this.view=e,this.node=t}static __NG_ELEMENT_ID__=ic}return e})();function ic(){return new rc(D(),Fo())}var ac=class{},oc=new vi(``,{factory:()=>!0}),sc=new vi(``),cc=(()=>{class e{static ɵprov=di({token:e,providedIn:`root`,factory:()=>new lc})}return e})(),lc=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}},uc=class{[dn];constructor(e){this[dn]=e}destroy(){this[dn].destroy()}};function dc(e,t){let n=t?.injector??E(Ss),r=t?.manualCleanup===!0?null:n.get(ws),i,a=n.get(rc,null,{optional:!0}),o=n.get(ac);return a===null?i=gc(e,n.get(cc),o):(i=hc(a.view,o,e),r instanceof Ts&&r._lView===a.view&&(r=null)),i.injector=n,r!==null&&(i.onDestroyFns=[r.onDestroy(()=>i.destroy())]),new uc(i)}var fc={...Jn,cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let e=Uo(!1);try{Yn(this)}finally{Uo(e)}},cleanup(){if(!this.cleanupFns?.length)return;let e=w(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],w(e)}}},pc={...fc,consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){if(En(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.scheduler.remove(this)}},mc={...fc,consumerMarkedDirty(){this.view[2]|=8192,vo(this.view),this.notifier.notify(13)},destroy(){if(En(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.view[23]?.delete(this)}};function hc(e,t,n){let r=Object.create(mc);return r.view=e,r.zone=typeof Zone<`u`?Zone.current:null,r.notifier=t,r.fn=_c(r,n),e[23]??=new Set,e[23].add(r),r.consumerMarkedDirty(r),r}function gc(e,t,n){let r=Object.create(pc);return r.fn=_c(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 _c(e,t){return()=>{t(t=>(e.cleanupFns??=[]).push(t))}}function vc(e){return typeof e==`function`&&e[dn]!==void 0}function yc(e){return vc(e)&&typeof e.set==`function`}var bc=Symbol(`InputSignalNode#UNSET`),xc={...Kn,transformFn:void 0,applyValueToInputSignal(e,t){Wn(e,t)}};function Sc(e){return{toString:e}.toString()}var Cc=(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})(Cc||{}),wc=class{previousValue;currentValue;firstChange;constructor(e,t,n){this.previousValue=e,this.currentValue=t,this.firstChange=n}isFirstChange(){return this.firstChange}};function Tc(e,t,n,r){t===null?e[n]=r:t.applyValueToInputSignal(t,r)}var Ec=null,Dc=(()=>{Ec=kc;let e=()=>kc;return e.ngInherit=!0,e})();function Oc(){return Ec}function kc(e){return e.type.prototype.ngOnChanges&&(e.setInput=jc),Ac}function Ac(){let e=Nc(this),t=e?.current;if(t){let n=e.previous;if(n===ua)e.previous=t;else for(let e in t)n[e]=t[e];e.current=null,this.ngOnChanges(t)}}function jc(e,t,n,r,i){let a=this.declaredInputs[r],o=Nc(e)||Pc(e,{previous:ua,current:null}),s=o.current||={},c=o.previous,l=c[a];s[a]=new wc(l&&l.currentValue,n,c===ua),Tc(e,t,i,n)}var Mc=`__ngSimpleChanges__`;function Nc(e){return Object.hasOwn(e,Mc)&&e[Mc]||null}function Pc(e,t){return e[Mc]=t}var Fc=[],Ic=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,Uc(o,a)):Uc(o,a)}var Gc=-1,Kc=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 qc(e){return!!(e.flags&8)}function Jc(e){return!!(e.flags&16)}function Yc(e,t,n){let r=0;for(;rt){o=a-1;break}}}for(;a>16}function rl(e,t){let n=nl(e),r=t;for(;n>0;)r=r[14],n--;return r}var il=!0;function al(e){let t=il;return il=e,t}var ol=255,sl=5,cl=0,ll={};function ul(e,t,n){let r;typeof n==`string`?r=n.charCodeAt(0)||0:Object.hasOwn(n,wi)&&(r=n[wi]),r??=n[wi]=cl++;let i=r&ol,a=1<>sl)]|=a}function dl(e,t){let n=pl(e,t);if(n!==-1)return n;let r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,fl(r.data,e),fl(t,null),fl(r.blueprint,null));let i=ml(e,t),a=e.injectorIndex;if(el(i)){let e=tl(i),n=rl(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 fl(e,t){e.push(0,0,0,0,0,0,0,0,t)}function pl(e,t){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||t[e.injectorIndex+8]===null?-1:e.injectorIndex}function ml(e,t){if(e.parent&&e.parent.injectorIndex!==-1)return e.parent.injectorIndex;let n=0,r=null,i=t;for(;i!==null;){if(r=kl(i),r===null)return Gc;if(n++,i=i[14],r.injectorIndex!==-1)return r.injectorIndex|n<<16}return Gc}function hl(e,t,n){ul(e,t,n)}function gl(e,t,n){if(n&8||e!==void 0)return e;Fi(t,`NodeInjector`)}function _l(e,t,n,r){if(n&8&&r===void 0&&(r=null),!(n&3)){let i=e[9],a=Bi(void 0);try{return i?i.get(t,r,n&8):Vi(t,r,n&8)}finally{Bi(a)}}return gl(r,t,n)}function vl(e,t,n,r=0,i){if(e!==null){if(t[2]&2048&&!(r&2)){let i=Ol(e,t,n,r,ll);if(i!==ll)return i}let i=yl(e,t,n,r,ll);if(i!==ll)return i}return _l(t,n,r,i)}function yl(e,t,n,r,i){let a=Cl(n);if(typeof a==`function`){if(!rs(t,e,r))return r&1?gl(i,n,r):_l(t,n,r,i);try{let e;if(e=a(r),e==null&&!(r&8))Fi(n);else return e}finally{cs()}}else if(typeof a==`number`){let i=null,o=pl(e,t),s=Gc,c=r&1?t[15][5]:null;for((o===-1||r&4)&&(s=o===-1?ml(e,t):t[o+8],s===Gc||!Tl(r,!1)?o=-1:(i=t[1],o=tl(s),t=rl(s,t)));o!==-1;){let e=t[1];if(wl(a,o,e.data)){let e=bl(o,t,n,i,r,c);if(e!==ll)return e}s=t[o+8],s!==Gc&&Tl(r,t[1].data[o+8]===c)&&wl(a,o,t)?(i=e,o=tl(s),t=rl(s,t)):o=-1}}return i}function bl(e,t,n,r,i,a){let o=t[1],s=o.data[e+8],c=xl(s,o,n,r==null?Ya(s)&&il:r!=o&&!!(s.type&3),i&1&&a===s);return c===null?ll:Sl(t,o,c,s,i)}function xl(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&&Za(e)&&e.type===n)return c}return null}function Sl(e,t,n,r,i){let a=e[n],o=t.data;if(a instanceof Kc){let s=a;if(s.resolving)throw Pi(``);let c=al(s.canSeeViewProviders);s.resolving=!0,o[n].type||o[n];let l=s.injectImpl?Bi(s.injectImpl):null;rs(e,r,0);try{a=e[n]=s.factory(void 0,i,o,e,r),t.firstCreatePass&&n>=r.directiveStart&&Lc(n,o[n],t)}finally{l!==null&&Bi(l),al(c),s.resolving=!1,cs()}}return a}function Cl(e){if(typeof e==`string`)return e.charCodeAt(0)||0;let t=Object.hasOwn(e,wi)?e[wi]:void 0;return typeof t==`number`?t>=0?t&ol:Dl:t}function wl(e,t,n){let r=1<>sl)]&r)}function Tl(e,t){return!(e&2)&&!(e&1&&t)}var El=class{_tNode;_lView;constructor(e,t){this._tNode=e,this._lView=t}get(e,t,n){return vl(this._tNode,this._lView,e,Ji(n),t)}};function Dl(){return new El(Fo(),D())}function Ol(e,t,n,r,i){let a=e,o=t;for(;a!==null&&o!==null&&o[2]&2048&&!Qa(o);){let e=yl(a,o,n,r|2,ll);if(e!==ll)return e;r&=-5;let t=a.parent;if(!t){let e=o[20];if(e){let t=e.get(n,ll,r);if(t!==ll)return t}t=kl(o),o=o[14]}a=t}return i}function kl(e){let t=e[1],n=t.type;return n===2?t.declTNode:n===1?e[5]:null}function Al(e){return{token:e.token,providedIn:e.autoProvided===!1?null:`root`,factory:e.factory,value:void 0}}function jl(){return Ml(Fo(),D())}function Ml(e,t){return new Nl(io(e,t))}var Nl=(()=>{class e{nativeElement;constructor(e){this.nativeElement=e}static __NG_ELEMENT_ID__=jl}return e})();function Pl(e){return e instanceof Nl?e.nativeElement:e}function Fl(){return this._results[Symbol.iterator]()}var Il=class{_emitDistinctChangesOnly;dirty=!0;_onDirty=void 0;_results=[];_changesDetected=!1;_changes=void 0;length=0;first=void 0;last=void 0;get changes(){return this._changes??=new Zr}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=ea(e);(this._changesDetected=!$i(this._results,n,t))&&(this._results=n,this.length=n.length,this.last=n[this.length-1],this.first=n[0])}notifyOnChanges(){this._changes!==void 0&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.next(this)}onDirty(e){this._onDirty=e}setDirty(){this.dirty=!0,this._onDirty?.()}destroy(){this._changes!==void 0&&(this._changes.complete(),this._changes.unsubscribe())}[Symbol.iterator]=Fl};function Ll(e){return(e.flags&128)==128}var Rl=(function(e){return e[e.OnPush=0]=`OnPush`,e[e.Eager=1]=`Eager`,e[e.Default=1]=`Default`,e})(Rl||{}),zl=new Map,Bl=0;function Vl(){return Bl++}function Hl(e){zl.set(e[19],e)}function Ul(e){zl.delete(e[19])}var Wl=`__ngContext__`;function Gl(e,t){Ka(t)?(e[Wl]=t[19],Hl(t)):e[Wl]=t}function Kl(e){return Jl(e[12])}function ql(e){return Jl(e[4])}function Jl(e){for(;e!==null&&!qa(e);)e=e[4];return e}var Yl=void 0;function Xl(e){Yl=e}function Zl(){if(Yl!==void 0)return Yl;if(typeof document<`u`)return document;throw new T(210,!1)}var Ql=!1,$l=new vi(``,{factory:()=>Ql}),eu=new WeakMap;function tu(e,t){if(typeof e!=`object`||!e)return;let n=eu.get(e);n||(n=new WeakSet,eu.set(e,n)),n.add(t)}function nu(e){return(e.flags&32)==32}var ru=()=>null;function iu(e,t,n=!1){return ru(e,t,n)}function au(e,t){let n=e.contentQueries;if(n!==null){let r=w(null);try{for(let r=0;r|^->||--!>|)/g,_u=`​$1​`;function vu(e){return e.replace(hu,e=>e.replace(gu,_u))}function yu(e,t){return e.createText(t)}function bu(e,t,n){e.setValue(t,n)}function xu(e,t){return e.createComment(vu(t))}function Su(e,t,n){return e.createElement(t,n)}function Cu(e,t,n,r,i){e.insertBefore(t,n,r,i)}function wu(e,t,n){e.appendChild(t,n)}function Tu(e,t,n,r,i){r===null?wu(e,t,n):Cu(e,t,n,r,i)}function Eu(e,t,n,r){e.removeChild(null,t,n,r)}function Du(e,t,n){e.setAttribute(t,`style`,n)}function Ou(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&&Yc(e,t,r),i!==null&&Ou(e,t,i),a!==null&&Du(e,t,a)}function Au(e){let t=ju();return t?t.sanitize(eo.URL,e)||``:du(e,`URL`)?uu(e):mu(Ai(e))}function ju(){let e=D();return e&&e[10].sanitizer}function Mu(e){return e.ownerDocument.defaultView}function Nu(e){return e.ownerDocument}function Pu(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 Fu=`ng-template`;function Iu(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(Bu(r))return!1;o=!0}}}}}return Bu(r)||o}function Bu(e){return!(e&1)}function Vu(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!==``&&!Bu(o)&&(t+=qu(a,i),i=``),r=o,a||=!Bu(r);n++}return i!==``&&(t+=qu(a,i)),t}function Yu(e){return e.map(Ju).join(`,`)}function Xu(e){let t=[],n=[],r=1,i=2;for(;r!1});function nd(e){if(!e)return 0;let t=e.toLowerCase().indexOf(`ms`)>-1?1:1e3;return parseFloat(e)*t}function rd(e,t){return e.getPropertyValue(t).split(`,`).map(e=>e.trim())}function id(e){let t=rd(e,`transition-property`),n=rd(e,`transition-duration`),r=rd(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 ad(e){let t=rd(e,`animation-name`),n=rd(e,`animation-delay`),r=rd(e,`animation-duration`),i=rd(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 od(e,t){return e!==void 0&&e.duration>t.duration}function sd(e){return(e.animationName!=null||e.propertyName!=null)&&e.duration>0}function cd(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 ld(e,t){let n=getComputedStyle(e),r=ad(n),i=id(n),a=r.duration>i.duration?r:i;od(t.get(e),a)||sd(a)&&t.set(e,a)}function ud(e,t,n){if(!n)return;let r=e.getAnimations();return r.length===0?ld(e,t):dd(e,t,r)}function dd(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=cd(e)??0,n,i;e.animationName?i=e.animationName:n=e.transitionProperty,t>=r.duration&&(r={animationName:i,propertyName:n,duration:t})}od(t.get(e),r)||sd(r)&&t.set(e,r)}var fd=new Set,pd=!1,md=1,hd=typeof document<`u`&&typeof document?.documentElement?.getAnimations==`function`;function gd(e){return e[9].get(td,pd)}function _d(e,t,n){let r=yd.get(e);if(r){for(let e of t)r.classList.push(e);for(let e of n)r.cleanupFns.push(e)}else yd.set(e,{classList:t,cleanupFns:n})}function vd(e){let t=yd.get(e);if(t){for(let e of t.cleanupFns)e();yd.delete(e)}bd.delete(e)}var yd=new WeakMap,bd=new WeakMap,xd=new WeakMap;function Sd(e){return e?e[14]??e:null}var Cd=new WeakSet;function wd(e,t,n){let r=xd.get(e);if(!r||r.length===0)return;let i=t.parentNode,a=t.previousSibling,o=Sd(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),Cd.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 Td(e,t,n){let r=Sd(n),i=xd.get(e);i?i.some(e=>e.el===t)||i.push({el:t,declarationView:r}):xd.set(e,[{el:t,declarationView:r}])}function Ed(e){let t=e[26]??={};return t.enter??=new Map}function Dd(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 Od(e){return e.composedPath?e.composedPath()[0]:e.target}function kd(e,t){let n=bd.get(t);if(n===void 0)return!0;if(t!==Od(e))return!1;let r=e.animation;if(r){let e=cd(r);if(e!==void 0&&e+md{class e{impl=null;execute(){this.impl?.execute()}static ɵprov=di({token:e,providedIn:`root`,factory:()=>new e})}return e})(),Id=[0,1,2,3],Ld=(()=>{class e{ngZone=E(Is);scheduler=E(ac);errorHandler=E(Js,{optional:!0});sequences=new Set;deferredRegistrations=new Set;executing=!1;constructor(){E(Md,{optional:!0})}execute(){let e=this.sequences.size>0;e&&Ic(Cc.AfterRenderHooksStart),this.executing=!0;for(let e of Id)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&&Ic(Cc.AfterRenderHooksEnd)}register(e){let{view:t}=e;t===void 0?this.executing?this.deferredRegistrations.add(e):this.addSequence(e):((t[25]??=[]).push(e),vo(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(jd.AFTER_NEXT_RENDER,e):e()}static ɵprov=di({token:e,providedIn:`root`,factory:()=>new e})}return e})(),Rd=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 zd(e,t){let n=t?.injector??E(Ss);return Pd(`NgAfterNextRender`),Vd(e,n,t,!0)}function Bd(e){return e instanceof Function?[void 0,void 0,e,void 0]:[e.earlyRead,e.write,e.mixedReadWrite,e.read]}function Vd(e,t,n,r){let i=t.get(Fd);i.impl??=t.get(Ld);let a=t.get(Md,null,{optional:!0}),o=n?.manualCleanup===!0?null:t.get(ws),s=t.get(rc,null,{optional:!0}),c=new Rd(i.impl,Bd(e),s?.view,r,o,a?.snapshot(null));return i.impl.register(c),c}var Hd=new vi(``,{factory:()=>{let e=E(ja),t=new Set;return e.onDestroy(()=>t.clear()),{queue:t,isScheduled:!1,scheduler:null,injector:e}}});function Ud(e,t,n){let r=e.get(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 Wd(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 Gd(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 Kd(e){let t=e.get(Hd);t.isScheduled||=(zd(()=>{t.isScheduled=!1;for(let e of t.queue)e();t.queue.clear()},{injector:t.injector}),!0)}function qd(e){let t=e.get(Hd);t.scheduler=Kd,t.scheduler(e)}function Jd(e,t){for(let[n,r]of t)Ud(e,r.animateFns)}function Yd(e,t,n,r){let i=e?.[26]?.enter;t!==null&&i&&i.has(n.index)&&Jd(r,i)}function Xd(e,t,n,r){try{n.get(pa)}catch{return r(!1)}let i=e?.[26];i?.enter?.has(t.index)&&Wd(n,i.enter.get(t.index).animateFns);let a=Zd(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&&fd.add(e[19]),Ud(n,()=>Qd(e,t,i||void 0,a,r),i||void 0)}function Zd(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 Qd(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),tf(e,t.running,i)}else Promise.allSettled(a).then(()=>{e&&fd.delete(e[19]),i(!0)})}else e&&fd.delete(e[19]),i(!1)}function $d(e,t,n){if(t.type&12){let r=e[t.index];if(qa(r))for(let e=10;e{e[26]?.running===t&&(e[26].running=void 0,fd.delete(e[19])),n(!0)})}function nf(e,t,n,r,i,a,o,s){if(i!=null){let c,l=!1;qa(i)?c=i:Ka(i)&&(l=!0,i=i[0]);let u=no(i);e===0&&r!==null?(Yd(s,r,a,n),o==null?wu(t,r,u):Cu(t,r,u,o||null,!0)):e===1&&r!==null?(Yd(s,r,a,n),Cu(t,r,u,o||null,!0),wd(a,u,s)):e===2?(s?.[26]?.leave?.has(a.index)&&Td(a,u,s),Cd.delete(u),Xd(s,a,n,e=>{if(Cd.has(u)){Cd.delete(u);return}Eu(t,u,l,e)})):e===3&&(Cd.delete(u),Xd(s,a,n,()=>{t.destroyNode(u)})),c!=null&&Df(t,e,n,c,a,r,o)}}function rf(e,t){of(e,t),t[0]=null,t[5]=null}function af(e,t,n,r,i,a){r[0]=i,r[5]=t,Cf(e,r,n,1,i,a)}function of(e,t){t[10].changeDetectionScheduler?.notify(9),Cf(e,t,t[11],2,null,null)}function sf(e){let t=e[12];if(!t)return uf(e[1],e);for(;t;){let n=null;if(Ka(t))n=t[12];else{let e=t[10];e&&(n=e)}if(!n){for(;t&&!t[4]&&t!==e;)Ka(t)&&uf(t[1],t),t=t[3];t===null&&(t=e),Ka(t)&&uf(t[1],t),n=t&&t[4]}t=n}}function cf(e,t){let n=e[9],r=n.indexOf(t);n.splice(r,1)}function lf(e,t){if($a(t))return;let n=t[11];n.destroyNode&&Cf(e,t,n,3,null,null),sf(t)}function uf(e,t){if($a(t))return;let n=w(null);try{t[2]&=-129,t[2]|=256,t[24]&&En(t[24]),ff(e,t),df(e,t),t[1].type===1&&t[11].destroy();let n=t[16];if(n!==null&&qa(t[3])){n!==t[3]&&cf(n,t);let r=t[18];r!==null&&r.detachView(e)}Ul(t)}finally{w(n)}}function df(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&&Lf(e,t,27,!1),Ic(o?Cc.TemplateUpdateStart:Cc.TemplateCreateStart,i,n),n(r,i)}finally{fs(a),Ic(o?Cc.TemplateUpdateEnd:Cc.TemplateCreateEnd,i,n)}}function Vf(e,t,n){Jf(e,t,n),(n.flags&64)==64&&Yf(e,t,n)}function Hf(e,t,n=io){let r=t.localNames;if(r!==null){let i=t.index+1;for(let a=0;a{vo(e.lView)},consumerOnSignalRead(){this.lView[24]=this}};function yp(e){let t=e[24]??Object.create(bp);return t.lView=e,t}var bp={...pn,consumerIsAlwaysLive:!0,kind:`template`,consumerMarkedDirty:e=>{let t=xo(e.lView);for(;t&&!xp(t[1]);)t=xo(t);t&&mo(t)},consumerOnSignalRead(){this.lView[24]=this}};function xp(e){return e.type!==2}function Sp(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 Cp=100;function wp(e,t=0){let n=e[10].rendererFactory;n.begin?.();try{Tp(e,t)}finally{n.end?.()}}function Tp(e,t){let n=Ho();try{Uo(!0),jp(e,t);let n=0;for(;go(e);){if(n===Cp)throw new T(103,!1);n++,jp(e,1)}}finally{Uo(n)}}function Ep(e,t,n,r){if($a(t))return;let i=t[2];is(t);let a=!0,o=null,s=null;xp(e)?(s=hp(t),o=xn(s)):fn()===null?(a=!1,s=yp(t),o=xn(s)):t[24]&&=(En(t[24]),null);try{po(t),Ko(e.bindingStartIndex),n!==null&&Bf(e,t,n,2,r);let a=(i&3)==3;if(a){let n=e.preOrderCheckHooks;n!==null&&zc(t,n,null)}else{let n=e.preOrderHooks;n!==null&&Bc(t,n,0,null),Vc(t,0)}if(Op(t),Sp(t),Dp(t,0),e.contentQueries!==null&&au(e,t),a){let n=e.contentCheckHooks;n!==null&&zc(t,n)}else{let n=e.contentHooks;n!==null&&Bc(t,n,1),Vc(t,1)}Np(e,t);let o=e.components;o!==null&&Mp(t,o,0);let s=e.viewQuery;if(s!==null&&ou(2,s,r),a){let n=e.viewCheckHooks;n!==null&&zc(t,n)}else{let n=e.viewHooks;n!==null&&Bc(t,n,2),Vc(t,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),t[22]){for(let e of t[22])e();t[22]=null}pp(t),t[2]&=-73}catch(e){throw vo(t),e}finally{s!==null&&(Cn(s,o),a&&_p(s)),ls()}}function Dp(e,t){for(let n=Kl(e);n!==null;n=ql(n))for(let e=10;e0&&(e[n-1][4]=r[4]);let a=ra(e,10+t);rf(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 Bp(e,t,n,r){let i=10+r,a=n.length;r>0&&(n[i-1][4]=t),r-1&&(zp(e,n),ra(t,n))}this._attachedToViewContainer=!1}lf(this._lView[1],this._lView)}onDestroy(e){yo(this._lView,e)}markForCheck(){Pp(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[2]&=-129}reattach(){_o(this._lView),this._lView[2]|=128}detectChanges(){this._lView[2]|=1024,wp(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new T(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let e=Qa(this._lView),t=this._lView[16];t!==null&&!e&&cf(t,this._lView),of(this._lView[1],this._lView)}attachToAppRef(e){if(this._attachedToViewContainer)throw new T(902,!1);this._appRef=e;let t=Qa(this._lView),n=this._lView[16];n!==null&&!t&&Vp(n,this._lView),_o(this._lView)}},Up=(()=>{class e{_declarationLView;_declarationTContainer;elementRef;static __NG_ELEMENT_ID__=Wp;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 Hp(lp(this._declarationLView,this._declarationTContainer,e,{embeddedViewInjector:t,dehydratedView:n}))}}return e})();function Wp(){return Gp(Fo(),D())}function Gp(e,t){return e.type&4?new Up(t,e,Ml(e,t)):null}function Kp(e,t,n,r,i){let a=e.data[t];if(a===null)a=qp(e,t,n,r,i),Yo()&&(a.flags|=32);else if(a.type&64){a.type=n,a.value=r,a.attrs=i;let e=Lo();a.injectorIndex=e===null?-1:e.injectorIndex}return Ro(a,!0),a}function qp(e,t,n,r,i){let a=Io(),o=zo(),s=o?a:a&&a.parent,c=e.data[t]=Yp(e,s,n,t,r,i);return Jp(e,c,a,o),c}function Jp(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 Yp(e,t,n,r,i,a){let o=t?t.injectorIndex:-1,s=0;return jo()&&(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:gs(),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 Xp(e){let t=e[6]??[],n=e[3][11],r=[];for(let e of t)e.data.di===void 0?Zp(e,n):r.push(e);e[6]=r}function Zp(e,t){let n=0,r=e.firstChild;if(r){let i=e.data.r;for(;nnull,$p=()=>null;function em(e,t){return Qp(e,t)}function tm(e,t,n){return $p(e,t,n)}var nm=class{},rm=class{},im=(()=>{class e{static ɵprov=di({token:e,providedIn:`root`,factory:()=>null})}return e})();function am(e){return e.debugInfo?.className||e.type.name||null}var om={},sm=class{injector;parentInjector;constructor(e,t){this.injector=e,this.parentInjector=t}get(e,t,n){let r=this.injector.get(e,om,n);return r!==om||t===om?r:this.parentInjector.get(e,t,n)}};function cm(e,t,n){return e[t]=n}function lm(e,t){return e[t]}function um(e,t,n){if(n===Zu)return!1;let r=e[t];return!Object.is(r,n)&&(e[t]=n,!0)}function dm(e,t,n,r){let i=um(e,t,n);return um(e,t+1,r)||i}function fm(e,t,n,r,i){let a=dm(e,t,n,r);return um(e,t+2,i)||a}function pm(e,t,n,r,i,a){let o=dm(e,t,n,r);return dm(e,t+2,i,a)||o}function mm(e,t,n){return function r(i){let a=r.__ngNativeEl__;a!==void 0&&tu(i,a),Pp(Ya(e)?co(e.index,t):t,5);let o=t[8],s=hm(t,o,n,i),c=r.__ngNextListenerFn__;for(;c;)s=hm(t,o,c,i)&&s,c=c.__ngNextListenerFn__;return s}}function hm(e,t,n,r){let i=w(null);try{return Ic(Cc.OutputStart,t,n),n(r)!==!1}catch(t){return rp(e,t),!1}finally{Ic(Cc.OutputEnd,t,n),w(i)}}function gm(e,t,n,r,i,a,o,s){let c=Xa(e),l=!1,u=null;if(!r&&c&&(u=vm(t,n,a,e.index)),u!==null){let e=u.__ngLastListenerFn__||u;e.__ngNextListenerFn__=o,u.__ngLastListenerFn__=o,l=!0}else{let o=io(e,n),c=r?r(o):o;r||(s.__ngNativeEl__=o);let l=i.listen(c,a,s);_m(a)||ym(r?t=>r(no(t[e.index])):e.index,t,n,a,s,l,!1)}return l}function _m(e){return e.startsWith(`animation`)||e.startsWith(`transition`)}function vm(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 ym(e,t,n,r,i,a,o){let s=t.firstCreatePass?Co(t):null,c=So(n),l=c.length;c.push(i,a),s&&s.push(r,e,l,(l+1)*(o?-1:1))}function bm(e,t,n,r,i,a){let o=t[n],s=t[1],c=o[s.data[n].outputs[r]].subscribe(a);ym(e.index,s,t,i,a,c,!0)}var xm=Symbol(`BINDING`),Sm=new vi(``);function Cm(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 Lm(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&Rf.SignalBased)!==0};return i&&(a.transform=i),a})}function Gm(e){return Object.keys(e).map(t=>({propName:e[t],templateName:t}))}function Km(e,t,n){let r=t instanceof ja?t:t?.injector;return r&&e.getStandaloneInjector!==null&&(r=e.getStandaloneInjector(r)||r),r?new sm(n,r):n}function qm(e){let t=e.get(rm,null);if(t===null)throw new T(407,!1);return{rendererFactory:t,sanitizer:e.get(im,null),changeDetectionScheduler:e.get(ac,null),ngReflect:!1,tracingService:e.get(Md,null,{optional:!0})}}function Jm(e,t,n){let r=Xm(e);return Su(t,r,r===`svg`?`svg`:r===`math`?to:n)}function Ym(e){if((e&&`localName`in e&&typeof e.localName==`string`?e.localName:e?.tagName)?.toLowerCase()===`script`)throw new T(905,!1)}function Xm(e){return(e.selectors[0][0]||`div`).toLowerCase()}var Zm=class{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=Wm(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=Gm(this.componentDef.outputs),this.cachedOutputs}constructor(e,t){this.componentDef=e,this.ngModule=t,this.componentType=e.type,this.selector=Yu(e.selectors),this.ngContentSelectors=e.ngContentSelectors??[],this.isBoundToModule=!!t}create(e,t,n,r,i,a,o){Ic(Cc.DynamicComponentStart);let s=w(null);try{let s=this.componentDef,c=Km(s,r||this.ngModule,e),l=qm(c),u=l.tracingService;return u&&u.componentCreate?u.componentCreate(am(s),()=>this.createComponentRef(l,c,t,n,i,a,o)):this.createComponentRef(l,c,t,n,i,a,o)}finally{w(s)}}createComponentRef(e,t,n,r,i,a,o){let s=this.componentDef,c=Qm(r,s,a,i),l=e.rendererFactory.createRenderer(null,s),u=r?Uf(l,r,s.encapsulation,t):Jm(s,l,o??null);Ym(u);let d=t.get(Sm,null),f=$m(u,()=>t.get(Cs,null)??Zl());d&&d.addHost(f);let p=a?.some(th)||i?.some(e=>typeof e!=`function`&&e.bindings.some(th)),m=Mf(null,c,null,512|Pf(s),null,null,e,l,t,null,iu(u,t,!0));d&&Hm&&f instanceof ShadowRoot&&yo(m,()=>{d.removeHost(f)}),m[27]=u,is(m);let h=null;try{let e=zm(27,m,2,`#host`,()=>c.directiveRegistry,!0,0);ku(l,u,e),Gl(u,m),Vf(c,m,e),su(c,e,m),Bm(c,e),n!==void 0&&rh(e,this.ngContentSelectors,n),h=co(e.index,m),m[8]=h[8],sp(c,m,null)}catch(e){throw h!==null&&Ul(h),Ul(m),e}finally{Ic(Cc.DynamicComponentEnd),ls()}return new nh(this.componentType,m,!!p)}};function Qm(e,t,n,r){let i=e?[`ng-version`,`22.1.7`]:Xu(t.selectors[0]),a=null,o=null,s=0;if(n)for(let e of n)s+=e[xm].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 th(e){let t=e[xm].kind;return t===`input`||t===`twoWay`}var nh=class extends nm{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(e,t,n){super(),this._rootLView=t,this._hasInputBindings=n,this._tNode=ao(t[1],27),this.location=Ml(this._tNode,t),this.instance=co(this._tNode.index,t)[8],this.hostView=this.changeDetectorRef=new Hp(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;ip(n,r[1],r,e,t),this.previousInputValues.set(e,t),Pp(co(n.index,r),1)}get injector(){return new El(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(e){this.hostView.onDestroy(e)}};function rh(e,t,n){let r=e.projection=[];for(let e=0;e{class e{static __NG_ELEMENT_ID__=ah}return e})();function ah(){return lh(Fo(),D())}var oh=class e extends ih{_lContainer;_hostTNode;_hostLView;constructor(e,t,n){super(),this._lContainer=e,this._hostTNode=t,this._hostLView=n}get element(){return Ml(this._hostTNode,this._hostLView)}get injector(){return new El(this._hostTNode,this._hostLView)}get parentInjector(){let e=ml(this._hostTNode,this._hostLView);if(el(e)){let t=rl(e,this._hostLView),n=tl(e),r=t[1].data[n+8];return new El(r,t)}return new El(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(e){let t=sh(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=em(this._lContainer,e.ssrId),o=e.createEmbeddedViewImpl(t||{},i,a);return this.insertImpl(o,r,up(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 Zm(Ei(e)),u=n||this.parentInjector;if(!i&&l.ngModule==null){let e=this.parentInjector.get(ja,null);e&&(i=e)}let d=Ei(l.componentType??{}),f=em(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,up(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(uo(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 Lp(o,i,a,r),t.attachToViewContainerRef(),na(ch(o),a,t),t}move(e,t){return this.insert(e,t)}indexOf(e){let t=sh(this._lContainer);return t===null?-1:t.indexOf(e)}remove(e){let t=this._adjustIndex(e,-1),n=zp(this._lContainer,t);n&&(ra(ch(this._lContainer),t),lf(n[1],n))}detach(e){let t=this._adjustIndex(e,-1),n=zp(this._lContainer,t);return n&&ra(ch(this._lContainer),t)!=null?new Hp(n):null}_adjustIndex(e,t=0){return e??this.length+t}};function sh(e){return e[8]}function ch(e){return e[8]||=[]}function lh(e,t){let n,r=t[e.index];return qa(r)?n=r:(n=Fp(r,t,null,e),t[e.index]=n,If(t,n)),dh(n,t,e,r),new oh(n,e,t)}function uh(e,t){let n=e[11],r=n.createComment(``),i=io(t,e);return Cu(n,n.parentNode(i),r,n.nextSibling(i),!1),r}var dh=mh,fh=()=>!1;function ph(e,t,n){return fh(e,t,n)}function mh(e,t,n,r){if(e[7])return;let i;i=n.type&8?no(r):uh(t,n),e[7]=i}var hh=class e{queryList;matches=null;constructor(e){this.queryList=e}clone(){return new e(this.queryList)}setDirty(){this.queryList.setDirty()}},gh=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 vh),e.queries.track(new yh(t,n))}function jh(e,t){return e.queries.getByIndex(t)}function Mh(e,t){let n=e[1],r=jh(n,t);return r.crossesNgTemplate?Th(n,e,t,[]):wh(n,e,r,t)}function Nh(e,t,n){let r,i=Mn(()=>{r._dirtyCounter();let n=Lh(r,e);if(t&&n===void 0)throw new T(-951,!1);return n});return r=i[dn],r._dirtyCounter=j(0),r._flatValue=void 0,i}function Ph(e){return Nh(!0,!1,e)}function Fh(e){return Nh(!0,!0,e)}function Ih(e,t){let n=e[dn];n._lView=D(),n._queryIndex=t,n._queryList=Eh(n._lView,t),n._queryList.onDirty(()=>n._dirtyCounter.update(e=>e+1))}function Lh(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=Eh(n,r),a=Mh(n,r);return i.reset(a,Pl),t?i.first:i._changesDetected||e._flatValue===void 0?e._flatValue=i.toArray():e._flatValue}function Rh(e){return!!e&&typeof e.then==`function`}function zh(e){return!!e&&typeof e.subscribe==`function`}var Bh=class{},Vh=class extends Bh{injector;instance=null;constructor(e){super();let t=new Ma([...e.providers,{provide:Bh,useValue:this}],e.parent||Aa(),e.debugName,new Set([`environment`]));this.injector=t,e.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(e){this.injector.onDestroy(e)}};function Hh(e,t,n=null){return new Vh({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}var Uh=(()=>{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=_a(!1,e.type),n=t.length>0?Hh([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(qi(ja))})}return e})();function Wh(e){return Sc(()=>{let t=Xh(e),n={...t,decls:e.decls,vars:e.vars,template:e.template,consts:e.consts||null,ngContentSelectors:e.ngContentSelectors,onPush:e.changeDetection!==Rl.Eager,directiveDefs:null,pipeDefs:null,dependencies:t.standalone&&e.dependencies||null,getStandaloneInjector:t.standalone?e=>e.get(Uh).getOrCreateStandaloneInjector(n):null,getExternalStyles:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||cu.Emulated,styles:e.styles||da,_:null,schemas:e.schemas||null,tView:null,id:``};t.standalone&&Pd(`NgStandalone`),Zh(n);let r=e.dependencies;return n.directiveDefs=Qh(r,Gh),n.pipeDefs=Qh(r,Oi),n.id=$h(n),n})}function Gh(e){return Ei(e)||Di(e)}function Kh(e,t){if(e==null)return ua;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=Rf.None,c=null),n[a]=[r,s,c],t[a]=o}return n}function qh(e){if(e==null)return ua;let t={};for(let n in e)Object.hasOwn(e,n)&&(t[e[n]]=n);return t}function Jh(e){return Sc(()=>{let t=Xh(e);return Zh(t),t})}function Yh(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 Xh(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||ua,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:Kh(e.inputs,t),outputs:qh(e.outputs),debugInfo:null}}function Zh(e){e.features?.forEach(t=>t(e))}function Qh(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 $h(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 eg=new vi(``),tg=(()=>{class e{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((e,t)=>{this.resolve=e,this.reject=t});appInits=E(eg,{optional:!0})??[];injector=E(Ss);constructor(){}runInitializers(){if(this.initialized)return;let e=[];for(let t of this.appInits){let n=Ua(this.injector,t);if(Rh(n))e.push(n);else if(zh(n)){let t=new Promise((e,t)=>{n.subscribe({complete:e,error:t})});e.push(t)}}let t=()=>{this.done=!0,this.resolve()};Promise.all(e).then(()=>{t()}).catch(e=>{this.reject(e)}),e.length===0&&t(),this.initialized=!0}static ɵfac=function(t){return new(t||e)};static ɵprov=Al({token:e,factory:e.ɵfac})}return e})();function ng(e,t,n,r,i,a,o,s){if(n.firstCreatePass){e.mergedAttrs=Qc(e.mergedAttrs,e.attrs);let t=e.tView=kf(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),Ro(e,!1);let c=og(n,t,e,r);vs()&&vf(n,t,c,e),Gl(c,t);let l=Fp(c,t,c,e);t[r+27]=l,If(t,l),ph(l,e,t)}function rg(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;return t.firstCreatePass?(f=Kp(t,d,4,o||null,s||null),Ao()&&Tm(t,e,f,fo(t.consts,l),Zf),Rc(t,f)):f=t.data[d],ng(f,e,t,n,r,i,a,c),Xa(f)&&Vf(t,e,f),l!=null&&Hf(e,f,u),f}function ig(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;if(t.firstCreatePass){if(f=Kp(t,d,4,o||null,s||null),l!=null){let e=fo(t.consts,l);f.localNames=[];for(let t=0;t{throw new T(600,``)})}var dg=10,fg=(()=>{class e{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=E(Ys);afterRenderManager=E(Fd);zonelessEnabled=E(oc);rootEffectScheduler=E(cc);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new Zr;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=E(Os);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(ei(e=>!e))}constructor(){E(Md,{optional:!0})}whenStable(){let e;return new Promise(t=>{e=this.isStable.subscribe({next:e=>{e&&t()}})}).finally(()=>{e.unsubscribe()})}_injector=E(ja);_rendererFactory=null;get injector(){return this._injector}bootstrap(e,t){return this.bootstrapImpl(e,t)}bootstrapImpl(e,t,n=Ss.NULL){return this._injector.get(Is).run(()=>{if(Ic(Cc.BootstrapComponentStart),!this._injector.get(tg).done)throw new T(405,``);let r=Ei(e),i=this._injector.get(Bh),a=new Zm(r,i);this.componentTypes.push(e);let{hostElement:o,directives:s,bindings:c}=pg(t),l=o||a.selector,u=a.create(n,[],l,i.injector,s,c),d=u.location.nativeElement,f=u.injector.get(cg,null);return f?.registerApplication(d),u.onDestroy(()=>{this.detachView(u.hostView),mg(this.components,u),f?.unregisterApplication(d)}),this._loadComponent(u),Ic(Cc.BootstrapComponentEnd,u),u})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){Ic(Cc.ChangeDetectionStart),this.tracingSnapshot===null?this.tickImpl():this.tracingSnapshot.run(jd.CHANGE_DETECTION,this.tickImpl)}tickImpl=()=>{if(this._runningTick)throw Ic(Cc.ChangeDetectionEnd),new T(101,!1);let e=w(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,w(e),this.afterTick.next(),Ic(Cc.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(rm,null,{optional:!0}));let e=0;for(;this.dirtyFlags!==0&&e++go(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;mg(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(lg,[]).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),()=>mg(this._destroyListeners,e)}destroy(){if(this._destroyed)throw new T(406,!1);let e=this._injector;e.destroy&&!e.destroyed&&e.destroy()}get viewCount(){return this._views.length}static ɵfac=function(t){return new(t||e)};static ɵprov=Al({token:e,factory:e.ɵfac})}return e})();function pg(e){return e===void 0||typeof e==`string`||e instanceof Element?{hostElement:e}:e}function mg(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function N(e,t,n,r){let i=D();return um(i,qo(),t)&&(Po(),Qf(ps(),i,e,t,n,r)),N}function hg(e){if(Pd(`NgAnimateEnter`),!hd)return hg;let t=D();if(gd(t))return hg;let n=Fo(),r=t[9].get(Is);return Ad(Ed(t),n,()=>gg(t,n,e,r)),qd(t[9]),Jd(t[9],Ed(t)),hg}function gg(e,t,n,r){let i=io(t,e),a=e[11],o=Dd(n),s=[],c=!1,l=e=>{if(Od(e)!==i)return;let t=e instanceof AnimationEvent?`animationend`:`transitionend`;r.runOutsideAngular(()=>{a.listen(i,t,u)})},u=e=>{Od(e)===i&&(kd(e,i)&&(c=!0),_g(e,i,a))};if(o&&o.length>0){r.runOutsideAngular(()=>{s.push(a.listen(i,`animationstart`,l)),s.push(a.listen(i,`transitionstart`,l))}),_d(i,o,s);for(let e of o)a.addClass(i,e);r.runOutsideAngular(()=>{requestAnimationFrame(()=>{if(!c&&(ud(i,bd,hd),!bd.has(i))){for(let e of o)a.removeClass(i,e);vd(i)}})})}}function _g(e,t,n){let r=yd.get(t);if(Od(e)===t&&r&&kd(e,t)){e.stopPropagation();for(let e of r.classList)n.removeClass(t,e);vd(t)}}var vg=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 yg(e,t,n,r,i){return e===n&&Object.is(t,r)?1:Object.is(i(e,t),i(n,r))?-1:0}function bg(e,t,n,r){let i,a,o=0,s=e.length-1;if(Array.isArray(t)){w(r);let c=t.length-1;for(w(null);o<=s&&o<=c;){let r=e.at(o),l=t[o],u=yg(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=yg(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 wg,a??=Cg(e,o,s,n),xg(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;)Sg(e,i,n,o,t[o]),o++}else if(t!=null){w(r);let c=t[Symbol.iterator]();w(null);let l=c.next();for(;!l.done&&o<=s;){let t=e.at(o),r=l.value,u=yg(o,t,o,r,n);if(u!==0)u<0&&e.updateValue(o,r),o++,l=c.next();else{i??=new wg,a??=Cg(e,o,s,n);let u=n(o,r);if(xg(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;)Sg(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 xg(e,t,n,r){return t!==void 0&&t.has(r)?(e.attach(n,t.get(r)),t.delete(r),!0):!1}function Sg(e,t,n,r,i){if(xg(e,t,r,n(r,i)))e.updateValue(r,i);else{let t=e.create(r,i);e.attach(r,t)}}function Cg(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 wg=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 P(e,t,n,r,i,a,o,s){Pd(`NgControlFlow`);let c=D(),l=Po();return ig(c,l,e,t,n,r,i,fo(l.consts,a),256,o,s),Tg}function Tg(e,t,n,r,i,a,o,s){Pd(`NgControlFlow`);let c=D(),l=Po();return ig(c,l,e,t,n,r,i,fo(l.consts,a),512,o,s),Tg}function F(e,t){Pd(`NgControlFlow`);let n=D(),r=qo(),i=n[r]===Zu?-1:n[r],a=i===-1?void 0:jg(n,27+i);if(um(n,r,e)){let r=w(null);try{if(a!==void 0&&Rp(a,0),e!==-1){let r=27+e,i=jg(n,r),a=Ig(n[1],r),o=tm(i,a,n);Lp(i,lp(n,a,t,{dehydratedView:o}),0,up(a,o))}}finally{w(r)}}else if(a!==void 0){let e=Ip(a,0);e!==void 0&&(e[8]=t)}}var Eg=class{lContainer;$implicit;$index;constructor(e,t,n){this.lContainer=e,this.$implicit=t,this.$index=n}get $count(){return this.lContainer.length-10}};function Dg(e){return e}function Og(e,t){return t}var kg=class{hasEmptyBlock;trackByFn;liveCollection;constructor(e,t,n){this.hasEmptyBlock=e,this.trackByFn=t,this.liveCollection=n}};function I(e,t,n,r,i,a,o,s,c,l,u,d,f){Pd(`NgControlFlow`);let p=D(),m=Po(),h=c!==void 0,g=D(),_=new kg(h,s?o.bind(g[15][8]):o);g[27+e]=_,ig(p,m,e+1,t,n,r,i,fo(m.consts,a),256),h&&ig(p,m,e+2,c,l,u,d,fo(m.consts,f),512)}var Ag=class extends vg{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,Lp(this.lContainer,t,e,up(this.templateTNode,n)),Mg(this.lContainer,e)}detach(e){return this.needsIndexUpdate||=e!==this.length-1,Ng(this.lContainer,e),Pg(this.lContainer,e)}create(e,t){let n=em(this.lContainer,this.templateTNode.tView.ssrId);return lp(this.hostLView,this.templateTNode,new Eg(this.lContainer,t,e),{dehydratedView:n})}destroy(e){lf(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];Gd(e,r),fd.delete(n[19]),r.detachedLeaveAnimationFns=void 0}}function Ng(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 Pg(e,t){return zp(e,t)}function Fg(e,t){return Ip(e,t)}function Ig(e,t){return ao(e,t)}function R(e,t,n){let r=D();return um(r,qo(),t)&&(Po(),Gf(ps(),r,e,t,r[11],n)),R}function Lg(e,t,n,r,i){ip(t,e,n,i?`class`:`style`,r)}function z(e,t,n,r){let i=D(),a=i[1],o=e+27,s=a.firstCreatePass?zm(o,i,2,t,Zf,Ao(),n,r):a.data[o];if(Ya(s)){let n=i[10].tracingService;if(n&&n.componentCreate){let o=a.data[s.directiveStart+s.componentOffset];return n.componentCreate(am(o),()=>(Rg(e,t,i,s,r),z))}}return Rg(e,t,i,s,r),z}function Rg(e,t,n,r,i){if(tp(r,n,e,t,Bg),Xa(r)){let e=n[1];Vf(e,n,r),su(e,r,n)}i!=null&&Hf(n,r)}function B(){let e=Po(),t=np(Fo());return e.firstCreatePass&&Bm(e,t),Mo(t)&&No(),ko(),t.classesWithoutHost!=null&&qc(t)&&Lg(e,t,D(),t.classesWithoutHost,!0),t.stylesWithoutHost!=null&&Jc(t)&&Lg(e,t,D(),t.stylesWithoutHost,!1),B}function V(e,t,n,r){return z(e,t,n,r),B(),V}function H(e,t,n,r){let i=D(),a=i[1],o=e+27,s=a.firstCreatePass?Vm(o,a,2,t,n,r):a.data[o];return tp(s,i,e,t,Bg),r!=null&&Hf(i,s),H}function U(){return Mo(np(Fo()))&&No(),ko(),U}function zg(e,t,n,r){return H(e,t,n,r),U(),zg}var Bg=(e,t,n,r,i)=>(ys(!0),Su(t[11],r,gs()));function Vg(e,t,n){let r=D(),i=r[1],a=e+27,o=i.firstCreatePass?zm(a,r,8,`ng-container`,Zf,Ao(),t,n):i.data[a];if(tp(o,r,e,`ng-container`,Wg),Xa(o)){let e=r[1];Vf(e,r,o),su(e,o,r)}return n!=null&&Hf(r,o),Vg}function Hg(){let e=Po(),t=np(Fo());return e.firstCreatePass&&Bm(e,t),Hg}function Ug(e,t,n){return Vg(e,t,n),Hg(),Ug}var Wg=(e,t,n,r,i)=>(ys(!0),xu(t[11],``));function W(){return D()}function Gg(e,t,n){let r=D();return um(r,qo(),t)&&(Po(),Kf(ps(),r,e,t,r[11],n)),Gg}var Kg=void 0;function qg(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`,qg],Yg=Object.create(null);function Xg(e){let t=$g(e),n=Zg(t);if(n)return n;let r=t.split(`-`)[0];if(n=Zg(r),n)return n;if(r===`en`)return Jg;throw new T(701,!1)}function Zg(e){if(!(e in Yg)){let t=Hi.ng&&Hi.ng.common&&Hi.ng.common.locales&&Hi.ng.common.locales[e];return t!==void 0&&(Yg[e]=t),t}return Yg[e]}var Qg={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 $g(e){return e.toLowerCase().replace(/_/g,`-`)}var e_=`en-US`;function t_(e){typeof e==`string`&&e.toLowerCase().replace(/_/g,`-`)}function G(e,t,n){let r=D(),i=Po(),a=Fo();return r_(i,r,r[11],a,e,t,n),G}function n_(e,t,n){let r=D(),i=Po(),a=Fo();return(a.type&3||n)&&gm(a,i,r,n,r[11],e,t,mm(a,r,t)),n_}function r_(e,t,n,r,i,a,o){let s=!0,c=null;if((r.type&3||o)&&(c??=mm(r,t,a),gm(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 p_(e){return(e&2)==2}function m_(e,t){return e&131071|t<<17}function h_(e){return e|2}function g_(e){return(e&131068)>>2}function __(e,t){return e&-131069|t<<2}function v_(e){return(e&1)==1}function y_(e){return e|1}function b_(e,t,n,r,i,a){let o=a?t.classBindings:t.styleBindings,s=f_(o),c=g_(o);e[r]=n;let l=!1,u;if(Array.isArray(n)){let e=n;u=e[1],(u===null||ca(e,u)>0)&&(l=!0)}else u=n;if(i){if(c!==0){let t=f_(e[s+1]);e[r+1]=d_(t,s),t!==0&&(e[t+1]=__(e[t+1],r)),e[s+1]=m_(e[s+1],r)}else e[r+1]=d_(s,0),s!==0&&(e[s+1]=__(e[s+1],r)),s=r}else e[r+1]=d_(c,0),s===0?s=r:e[c+1]=__(e[c+1],r),c=r;l&&(e[r+1]=h_(e[r+1])),S_(e,u,r,!0),S_(e,u,r,!1),x_(t,u,e,r,a),o=d_(s,c),a?t.classBindings=o:t.styleBindings=o}function x_(e,t,n,r,i){let a=i?e.residualClasses:e.residualStyles;a!=null&&typeof t==`string`&&ca(a,t)>=0&&(n[r+1]=y_(n[r+1]))}function S_(e,t,n,r){let i=e[n+1],a=t===null,o=r?f_(i):g_(i),s=!1;for(;o!==0&&(s===!1||a);){let n=e[o],i=e[o+1];C_(n,t)&&(s=!0,e[o+1]=r?y_(i):h_(i)),o=r?f_(i):g_(i)}s&&(e[n+1]=r?h_(i):y_(i))}function C_(e,t){return e===null||t==null||(Array.isArray(e)?e[1]:e)===t?!0:Array.isArray(e)&&typeof t==`string`?ca(e,t)>=0:!1}var w_={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function T_(e){return e.substring(w_.key,w_.keyEnd)}function E_(e){return O_(e),D_(e,k_(e,0,w_.textEnd))}function D_(e,t){let n=w_.textEnd;return n===t?-1:(t=w_.keyEnd=A_(e,w_.key=t,n),k_(e,t,n))}function O_(e){w_.key=0,w_.keyEnd=0,w_.value=0,w_.valueEnd=0,w_.textEnd=e.length}function k_(e,t,n){for(;t32;)t++;return t}function j_(e,t,n){return P_(e,t,n,!1),j_}function q(e,t){return P_(e,t,null,!0),q}function M_(e){F_(G_,N_,e,!0)}function N_(e,t){for(let n=E_(t);n>=0;n=D_(t,n))oa(e,T_(t),!0)}function P_(e,t,n,r){let i=D(),a=Po(),o=Jo(2);if(a.firstUpdatePass&&L_(a,e,o,r),t!==Zu&&um(i,o,t)){let s=a.data[ds()];q_(a,s,i,i[11],e,i[o+1]=X_(t,n),r,o)}}function F_(e,t,n,r){let i=Po(),a=Jo(2);i.firstUpdatePass&&L_(i,null,a,r);let o=D();if(n!==Zu&&um(o,a,n)){let s=i.data[ds()];if(Z_(s,r)&&!I_(i,a)){let e=r?s.classesWithoutHost:s.stylesWithoutHost;e!==null&&(n=oi(e,n||``)),Lg(i,s,o,n,r)}else K_(i,s,o,o[11],o[a+1],o[a+1]=W_(e,t,n),r,a)}}function I_(e,t){return t>=e.expandoStartIndex}function L_(e,t,n,r){let i=e.data;if(i[n+1]===null){let a=i[ds()],o=I_(e,n);Z_(a,r)&&t===null&&!o&&(t=!1),t=R_(i,a,t,r),b_(i,a,t,n,o,r)}}function R_(e,t,n,r){let i=$o(e),a=r?t.residualClasses:t.residualStyles;if(i===null)(r?t.classBindings:t.styleBindings)===0&&(n=H_(null,e,t,n,r),n=U_(n,t.attrs,r),a=null);else{let o=t.directiveStylingLast;if(o===-1||e[o]!==i){if(n=H_(i,e,t,n,r),a===null){let n=z_(e,t,r);n!==void 0&&Array.isArray(n)&&(n=H_(null,e,t,n[1],r),n=U_(n,t.attrs,r),B_(e,t,r,n))}else a=V_(e,t,r)}}return a!==void 0&&(r?t.residualClasses=a:t.residualStyles=a),n}function z_(e,t,n){let r=n?t.classBindings:t.styleBindings;if(g_(r)!==0)return e[f_(r)]}function B_(e,t,n,r){let i=n?t.classBindings:t.styleBindings;e[f_(i)]=r}function V_(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===Zu&&(u=l?da:void 0);let d=l?sa(u,r):c===r?u:void 0;if(a&&!Y_(d)&&(d=sa(t,r)),Y_(d)&&(s=d,o))return s;let f=e[i+1];i=o?f_(f):g_(f)}if(t!==null){let e=a?t.residualClasses:t.residualStyles;e!=null&&(s=sa(e,r))}return s}function Y_(e){return e!==void 0}function X_(e,t){return e==null||e===``||(typeof t==`string`?e=uu(e)+t:typeof e==`object`&&(e=ai(uu(e)))),e}function Z_(e,t){return!!(e.flags&(t?8:16))}function J(e,t=``){let n=D(),r=Po(),i=e+27,a=r.firstCreatePass?Kp(r,i,1,t,null):r.data[i],o=Q_(r,n,a,t);n[i]=o,vs()&&vf(r,n,o,a),Ro(a,!1)}var Q_=(e,t,n,r)=>(ys(!0),yu(t[11],r));function $_(e,t,n,r=``){return um(e,qo(),n)?t+Ai(n)+r:Zu}function ev(e,t,n,r,i,a=``){let o=dm(e,Go(),n,i);return Jo(2),o?t+Ai(n)+r+Ai(i)+a:Zu}function tv(e,t,n,r,i,a,o,s=``){let c=fm(e,Go(),n,i,o);return Jo(3),c?t+Ai(n)+r+Ai(i)+a+Ai(o)+s:Zu}function nv(e,t,n,r,i,a,o,s,c,l=``){let u=pm(e,Go(),n,i,o,c);return Jo(4),u?t+Ai(n)+r+Ai(i)+a+Ai(o)+s+Ai(c)+l:Zu}function Y(e){return X(``,e),Y}function X(e,t,n){let r=D(),i=$_(r,e,t,n);return i!==Zu&&av(r,ds(),i),X}function Z(e,t,n,r,i){let a=D(),o=ev(a,e,t,n,r,i);return o!==Zu&&av(a,ds(),o),Z}function rv(e,t,n,r,i,a,o){let s=D(),c=tv(s,e,t,n,r,i,a,o);return c!==Zu&&av(s,ds(),c),rv}function iv(e,t,n,r,i,a,o,s,c){let l=D(),u=nv(l,e,t,n,r,i,a,o,s,c);return u!==Zu&&av(l,ds(),u),iv}function av(e,t,n){let r=ro(t,e);bu(e[11],r,n)}function ov(e,t,n){yc(t)&&(t=t());let r=D();return um(r,qo(),t)&&(Po(),Gf(ps(),r,e,t,r[11],n)),ov}function sv(e,t){let n=yc(e);return n&&e.set(t),n}function cv(e,t){let n=D(),r=Po(),i=Fo();return r_(r,n,n[11],i,e,t),cv}var lv={};function uv(e){Pd(`NgLet`);let t=Po(),n=D(),r=e+27;return Ro(Kp(t,r,128,null,null),!1),so(t,n,r,lv),uv}function dv(e){return so(Po(),D(),ds(),e),e}function fv(e){let t=oo(Vo(),27+e);if(t===lv)throw new T(314,!1);return t}function pv(e,t,n=``){return $_(D(),e,t,n)}function mv(e,t){let n=Wo()+e,r=D();return r[n]===Zu?cm(r,n,t()):lm(r,n)}function hv(e,t,n){return _v(D(),Wo(),e,t,n)}function gv(e,t){let n=e[t];return n===Zu?void 0:n}function _v(e,t,n,r,i,a){let o=t+n;return um(e,o,i)?cm(e,o+1,a?r.call(a,i):r(i)):gv(e,o+1)}function vv(e,t,n,r,i,a,o){let s=t+n;return dm(e,s,i,a)?cm(e,s+2,o?r.call(o,i,a):r(i,a)):gv(e,s+2)}function yv(e,t){let n=Po(),r,i=e+27;n.firstCreatePass?(r=bv(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=Qi(r.type,!0)),o=Bi(wm);try{let e=al(!1),t=a();return al(e),so(n,D(),i,t),t}finally{Bi(o)}}function bv(e,t){if(t)for(let n=t.length-1;n>=0;n--){let r=t[n];if(e===r.name)return r}}function xv(e,t,n){let r=e+27,i=D(),a=oo(i,r);return Cv(i,r)?_v(i,Wo(),t,a.transform,n,a):a.transform(n)}function Sv(e,t,n,r){let i=e+27,a=D(),o=oo(a,i);return Cv(a,i)?vv(a,Wo(),t,o.transform,n,r,o):o.transform(n,r)}function Cv(e,t){return e[1].data[t].pure}function wv(e,t){return Gp(e,t)}var Tv=(()=>{class e{applicationErrorHandler=E(Ys);appRef=E(fg);taskService=E(Os);ngZone=E(Is);zonelessEnabled=E(oc);tracing=E(Md,{optional:!0});zoneIsDefined=typeof Zone<`u`&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new hr;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(Ps):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(E(sc,{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?Ms:js;this.pendingRenderTaskId=this.taskService.add(),this.cancelScheduledCallback=this.scheduleInRootZone?Zone.root.run(()=>t(()=>this.tick())):this.ngZone.runOutsideAngular(()=>t(()=>this.tick()))}shouldScheduleTick(){return!(this.appRef.destroyed||this.pendingRenderTaskId!==null||this.runningTick||this.appRef._runningTick||!this.zonelessEnabled&&this.zoneIsDefined&&Zone.current.get(`isAngularZone_ID`+this.angularZoneId))}tick(){if(this.runningTick||this.appRef.destroyed)return;if(this.appRef.dirtyFlags===0){this.cleanup();return}!this.zonelessEnabled&&this.appRef.dirtyFlags&7&&(this.appRef.dirtyFlags|=1);let e=this.taskService.add();try{this.ngZone.run(()=>{this.runningTick=!0,this.appRef._tick()},void 0,this.schedulerTickApplyArgs)}catch(e){this.applicationErrorHandler(e)}finally{this.taskService.remove(e),this.cleanup()}}ngOnDestroy(){this.subscriptions.unsubscribe(),this.cleanup()}cleanup(){if(this.runningTick=!1,this.cancelScheduledCallback?.(),this.cancelScheduledCallback=null,this.pendingRenderTaskId!==null){let e=this.pendingRenderTaskId;this.pendingRenderTaskId=null,this.taskService.remove(e)}}static ɵfac=function(t){return new(t||e)};static ɵprov=Al({token:e,factory:e.ɵfac})}return e})();function Ev(){return[{provide:ac,useExisting:Tv},{provide:Is,useClass:Ws},{provide:oc,useValue:!0}]}function Dv(){return typeof $localize<`u`&&$localize.locale||`en-US`}var Ov=new vi(``,{factory:()=>E(Ov,{optional:!0,skipSelf:!0})||Dv()}),kv=class{destroyed=!1;listeners=null;errorHandler=E(Js,{optional:!0});isEmitting=!1;hasNullListeners=!1;destroyRef=E(ws);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(e){if(this.destroyed)throw new T(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(ri(953,!1));return}if(this.listeners===null)return;this.isEmitting=!0;let t=w(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&&Av(this.listeners)),w(t),this.isEmitting=!1}}};function Av(e){let t=e.length-1;for(;t>-1;)e[t]===null&&e.splice(t,1),t--}function Q(e,t){return Mn(e,t?.equal)}function jv(e){return ar(e)}(class e extends Error{_brand;constructor(e){super(e)}static IDLE=new e(`IDLE`);static LOADING=new e(`LOADING`)});var Mv=e=>e;function Nv(e,t){return typeof e==`function`?Pv(tr(e,Mv,t?.equal),t?.debugName,t?.set):Pv(tr(e.source,e.computation,e.equal),e.debugName,e.set)}function Pv(e,t,n){let r=e[dn],i=e;if(n!==void 0){let t=e=>nr(r,e);i.set=e=>n(e,t),i.update=r=>n(r(jv(e)),t)}else i.set=e=>nr(r,e),i.update=e=>rr(r,e);return i.asReadonly=Zs.bind(e),i}function Fv(e,t){let n=Object.create(xc);n.value=e,n.transformFn=t?.transform;function r(){if(mn(n),n.value===bc)throw new T(-950,null);return n.value}return r[dn]=n,r}function Iv(e){return new kv}function Lv(e,t){return Fv(e,t)}function Rv(e){return Fv(bc,e)}var $=(Lv.required=Rv,Lv);function zv(e,t){let n=Object.create(xc),r=new kv;n.value=e;function i(){return mn(n),Bv(n.value),n.value}return i[dn]=n,i.asReadonly=Zs.bind(i),i.set=e=>{n.equal(n.value,e)||(Wn(n,e),r.emit(e))},i.update=e=>{Bv(n.value),i.set(e(n.value))},i.subscribe=r.subscribe.bind(r),i.destroyRef=r.destroyRef,i}function Bv(e){if(e===bc)throw new T(952,!1)}function Vv(e,t){return zv(e,t)}function Hv(e){return zv(bc,e)}var Uv=(Vv.required=Hv,Vv);function Wv(e,t){return Ph(t)}function Gv(e,t){return Fh(t)}var Kv=(Wv.required=Gv,Wv),qv=new vi(``),Jv=new vi(``);function Yv(e){return!e.moduleRef}function Xv(e){let t=Yv(e)?e.r3Injector:e.moduleRef.injector,n=t.get(Is);return n.run(()=>{Yv(e)?e.r3Injector.resolveInjectorInitializers():e.moduleRef.resolveInjectorInitializers();let r=t.get(Ys),i;if(n.runOutsideAngular(()=>{i=n.onError.subscribe({next:r})}),Yv(e)){let n=()=>t.destroy(),r=e.platformInjector.get(qv);r.add(n),t.onDestroy(()=>{i.unsubscribe(),r.delete(n)})}else{let t=()=>e.moduleRef.destroy(),n=e.platformInjector.get(qv);n.add(t),e.moduleRef.onDestroy(()=>{mg(e.allPlatformModules,e.moduleRef),i.unsubscribe(),n.delete(t)})}return Qv(r,n,()=>{let n=t.get(Os),r=n.add(),i=t.get(tg);return i.runInitializers(),i.donePromise.then(()=>{if(t_(t.get(Ov,e_)||`en-US`),!t.get(Jv,!0))return Yv(e)?t.get(fg):(e.allPlatformModules.push(e.moduleRef),e.moduleRef);if(Yv(e)){let n=t.get(fg);return e.rootComponent!==void 0&&n.bootstrap(e.rootComponent),n}return Zv?.(e.moduleRef,e.allPlatformModules),e.moduleRef}).finally(()=>void n.remove(r))})})}var Zv;function Qv(e,t,n){try{let r=n();return Rh(r)?r.catch(n=>{throw t.runOutsideAngular(()=>e(n)),n}):r}catch(n){throw t.runOutsideAngular(()=>e(n)),n}}var $v=null;function ey(e=[],t){return Ss.create({name:t,providers:[{provide:Ea,useValue:`platform`},{provide:qv,useValue:new Set([()=>$v=null])},...e]})}function ty(e=[]){if($v)return $v;let t=ey(e);return $v=t,ug(),ny(t),t}function ny(e){let t=e.get(ec,null);Ua(e,()=>{t?.forEach(e=>e())})}function ry(e){let{rootComponent:t,appProviders:n,platformProviders:r,platformRef:i}=e;Ic(Cc.BootstrapApplicationStart);try{let e=i?.injector??ty(r);return Xv({r3Injector:new Vh({providers:[Ev(),Xs,...n||[]],parent:e,debugName:``,runEnvironmentInitializers:!1}).injector,platformInjector:e,rootComponent:t})}catch(e){return Promise.reject(e)}finally{Ic(Cc.BootstrapApplicationEnd)}}var iy=Symbol(`NOT_SET`),ay=new Set,oy={...Kn,kind:`afterRenderEffectPhase`,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,value:iy,cleanup:null,consumerMarkedDirty(){if(this.sequence.impl.executing){if(this.sequence.lastPhase===null||this.sequence.lastPhase(mn(r),r.value),r.signal[dn]=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??ay)t()}finally{En(e)}}};function cy(e,t){let n=t?.injector??E(Ss),r=n.get(ac),i=n.get(Fd),a=n.get(Md,null,{optional:!0});i.impl??=n.get(Ld);let o=e;typeof o==`function`&&(o={mixedReadWrite:e});let s=n.get(rc,null,{optional:!0}),c=new sy(i.impl,[o.earlyRead,o.write,o.mixedReadWrite,o.read],s?.view,r,n,a?.snapshot(null));return i.impl.register(c),c}var ly=null;function uy(){return ly}function dy(e){ly??=e}var fy=class{},py=(function(e){return e[e.Format=0]=`Format`,e[e.Standalone=1]=`Standalone`,e})(py||{}),my=(function(e){return e[e.Narrow=0]=`Narrow`,e[e.Abbreviated=1]=`Abbreviated`,e[e.Wide=2]=`Wide`,e[e.Short=3]=`Short`,e})(my||{}),hy=(function(e){return e[e.Short=0]=`Short`,e[e.Medium=1]=`Medium`,e[e.Long=2]=`Long`,e[e.Full=3]=`Full`,e})(hy||{}),gy={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 _y(e){return Xg(e)[Qg.LocaleId]}function vy(e,t,n){let r=Xg(e);return ky(ky([r[Qg.DayPeriodsFormat],r[Qg.DayPeriodsStandalone]],t),n)}function yy(e,t,n){let r=Xg(e);return ky(ky([r[Qg.DaysFormat],r[Qg.DaysStandalone]],t),n)}function by(e,t,n){let r=Xg(e);return ky(ky([r[Qg.MonthsFormat],r[Qg.MonthsStandalone]],t),n)}function xy(e,t){let n=Xg(e)[Qg.Eras];return ky(n,t)}function Sy(e,t){return ky(Xg(e)[Qg.DateFormat],t)}function Cy(e,t){return ky(Xg(e)[Qg.TimeFormat],t)}function wy(e,t){let n=Xg(e)[Qg.DateTimeFormat];return ky(n,t)}function Ty(e,t){let n=Xg(e),r=n[Qg.NumberSymbols][t];if(r===void 0){if(t===gy.CurrencyDecimal)return n[Qg.NumberSymbols][gy.Decimal];if(t===gy.CurrencyGroup)return n[Qg.NumberSymbols][gy.Group]}return r}function Ey(e){if(!e[Qg.ExtraData])throw new T(2303,!1)}function Dy(e){let t=Xg(e);return Ey(t),(t[Qg.ExtraData][2]||[]).map(e=>typeof e==`string`?Ay(e):[Ay(e[0]),Ay(e[1])])}function Oy(e,t,n){let r=Xg(e);return Ey(r),ky(ky([r[Qg.ExtraData][0],r[Qg.ExtraData][1]],t)||[],n)||[]}function ky(e,t){for(let n=t;n>-1;n--)if(e[n]!==void 0)return e[n];throw new T(2304,!1)}function Ay(e){let[t,n]=e.split(`:`);return{hours:+t,minutes:+n}}var jy=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,My=Object.create(null),Ny=/((?:[^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]*)/,Py=256;function Fy(e,t,n,r){let i=ib(e);Iy(t),t=Ry(n,t)||t;let a=[],o;for(;t;)if(o=Ny.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=tb(r,s),i=rb(i,r));let c=``;return a.forEach(e=>{let t=eb(e);c+=t?t(i,n,s):e===`''`?`'`:e.replace(/(^'|'$)/g,``).replace(/''/g,`'`)}),c}function Iy(e){if(e.length>Py)throw new T(2300,!1)}function Ly(e,t,n){let r=new Date(0);return r.setFullYear(e,t,n),r.setHours(0,0,0),r}function Ry(e,t){let n=_y(e);if(My[n]??=Object.create(null),My[n][t])return My[n][t];let r=``;switch(t){case`shortDate`:r=Sy(e,hy.Short);break;case`mediumDate`:r=Sy(e,hy.Medium);break;case`longDate`:r=Sy(e,hy.Long);break;case`fullDate`:r=Sy(e,hy.Full);break;case`shortTime`:r=Cy(e,hy.Short);break;case`mediumTime`:r=Cy(e,hy.Medium);break;case`longTime`:r=Cy(e,hy.Long);break;case`fullTime`:r=Cy(e,hy.Full);break;case`short`:let t=Ry(e,`shortTime`),n=Ry(e,`shortDate`);r=zy(wy(e,hy.Short),[t,n]);break;case`medium`:let i=Ry(e,`mediumTime`),a=Ry(e,`mediumDate`);r=zy(wy(e,hy.Medium),[i,a]);break;case`long`:let o=Ry(e,`longTime`),s=Ry(e,`longDate`);r=zy(wy(e,hy.Long),[o,s]);break;case`full`:let c=Ry(e,`fullTime`),l=Ry(e,`fullDate`);r=zy(wy(e,hy.Full),[c,l])}return r&&(My[n][t]=r),r}function zy(e,t){return t&&(e=e.replace(/\{([^}]+)}/g,function(e,n){return Object.hasOwn(t,n)?t[n]:e})),e}function By(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 Vy(s,t);let c=Ty(o,gy.MinusSign);return By(s,t,c,r,i)}}function Uy(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 T(2301,!1)}}function Wy(e,t,n=py.Format,r=!1){return function(i,a){return Gy(i,a,e,t,n,r)}}function Gy(e,t,n,r,i,a){switch(n){case 2:return by(t,i,r)[e.getMonth()];case 1:return yy(t,i,r)[e.getDay()];case 0:let n=e.getHours(),o=e.getMinutes();if(a){let e=Dy(t),a=Oy(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?`+`:``)+By(o,2,a)+By(Math.abs(i%60),2,a);case 1:return`GMT`+(i>=0?`+`:``)+By(o,1,a);case 2:return`GMT`+(i>=0?`+`:``)+By(o,2,a)+`:`+By(Math.abs(i%60),2,a);case 3:return r===0?`Z`:(i>=0?`+`:``)+By(o,2,a)+`:`+By(Math.abs(i%60),2,a);default:throw new T(2310,!1)}}}var qy=0,Jy=4;function Yy(e){let t=Ly(e,qy,1).getDay();return Ly(e,0,1+(t<=Jy?Jy:11)-t)}function Xy(e){let t=e.getDay(),n=t===0?-3:Jy-t;return Ly(e.getFullYear(),e.getMonth(),e.getDate()+n)}function Zy(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=Xy(n),t=Yy(e.getFullYear()),r=e.getTime()-t.getTime();i=1+Math.round(r/6048e5)}return By(i,e,Ty(r,gy.MinusSign))}}function Qy(e,t=!1){return function(n,r){return By(Xy(n).getFullYear(),e,Ty(r,gy.MinusSign),t)}}var $y=Object.create(null);function eb(e){if($y[e])return $y[e];let t;switch(e){case`G`:case`GG`:case`GGG`:t=Wy(3,my.Abbreviated);break;case`GGGG`:t=Wy(3,my.Wide);break;case`GGGGG`:t=Wy(3,my.Narrow);break;case`y`:t=Hy(0,1,0,!1,!0);break;case`yy`:t=Hy(0,2,0,!0,!0);break;case`yyy`:t=Hy(0,3,0,!1,!0);break;case`yyyy`:t=Hy(0,4,0,!1,!0);break;case`Y`:t=Qy(1);break;case`YY`:t=Qy(2,!0);break;case`YYY`:t=Qy(3);break;case`YYYY`:t=Qy(4);break;case`M`:case`L`:t=Hy(1,1,1);break;case`MM`:case`LL`:t=Hy(1,2,1);break;case`MMM`:t=Wy(2,my.Abbreviated);break;case`MMMM`:t=Wy(2,my.Wide);break;case`MMMMM`:t=Wy(2,my.Narrow);break;case`LLL`:t=Wy(2,my.Abbreviated,py.Standalone);break;case`LLLL`:t=Wy(2,my.Wide,py.Standalone);break;case`LLLLL`:t=Wy(2,my.Narrow,py.Standalone);break;case`w`:t=Zy(1);break;case`ww`:t=Zy(2);break;case`W`:t=Zy(1,!0);break;case`d`:t=Hy(2,1);break;case`dd`:t=Hy(2,2);break;case`c`:case`cc`:t=Hy(7,1);break;case`ccc`:t=Wy(1,my.Abbreviated,py.Standalone);break;case`cccc`:t=Wy(1,my.Wide,py.Standalone);break;case`ccccc`:t=Wy(1,my.Narrow,py.Standalone);break;case`cccccc`:t=Wy(1,my.Short,py.Standalone);break;case`E`:case`EE`:case`EEE`:t=Wy(1,my.Abbreviated);break;case`EEEE`:t=Wy(1,my.Wide);break;case`EEEEE`:t=Wy(1,my.Narrow);break;case`EEEEEE`:t=Wy(1,my.Short);break;case`a`:case`aa`:case`aaa`:t=Wy(0,my.Abbreviated);break;case`aaaa`:t=Wy(0,my.Wide);break;case`aaaaa`:t=Wy(0,my.Narrow);break;case`b`:case`bb`:case`bbb`:t=Wy(0,my.Abbreviated,py.Standalone,!0);break;case`bbbb`:t=Wy(0,my.Wide,py.Standalone,!0);break;case`bbbbb`:t=Wy(0,my.Narrow,py.Standalone,!0);break;case`B`:case`BB`:case`BBB`:t=Wy(0,my.Abbreviated,py.Format,!0);break;case`BBBB`:t=Wy(0,my.Wide,py.Format,!0);break;case`BBBBB`:t=Wy(0,my.Narrow,py.Format,!0);break;case`h`:t=Hy(3,1,-12);break;case`hh`:t=Hy(3,2,-12);break;case`H`:t=Hy(3,1);break;case`HH`:t=Hy(3,2);break;case`m`:t=Hy(4,1);break;case`mm`:t=Hy(4,2);break;case`s`:t=Hy(5,1);break;case`ss`:t=Hy(5,2);break;case`S`:t=Hy(6,1);break;case`SS`:t=Hy(6,2);break;case`SSS`:t=Hy(6,3);break;case`Z`:case`ZZ`:case`ZZZ`:t=Ky(0);break;case`ZZZZZ`:t=Ky(3);break;case`O`:case`OO`:case`OOO`:case`z`:case`zz`:case`zzz`:t=Ky(1);break;case`OOOO`:case`ZZZZ`:case`zzzz`:t=Ky(2);break;default:return null}return $y[e]=t,t}function tb(e,t){e=e.replace(/:/g,``);let n=Date.parse(`Jan 01, 1970 00:00:00 `+e)/6e4;return isNaN(n)?t:n}function nb(e,t){return e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+t),e}function rb(e,t,n){let r=e.getTimezoneOffset();return nb(e,-1*(tb(t,r)-r))}function ib(e){if(ob(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 Ly(t,n-1,r)}let t=parseFloat(e);if(!isNaN(e-t))return new Date(t);let n;if(n=e.match(jy))return ab(n)}let t=new Date(e);if(!ob(t))throw new T(2311,!1);return t}function ab(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 ob(e){return e instanceof Date&&!isNaN(e.valueOf())}var sb=(()=>{class e{_viewContainerRef;_viewRef=null;ngTemplateOutletContext=null;ngTemplateOutlet=null;ngTemplateOutletInjector=null;injector=E(Ss);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)(wm(ih))};static ɵdir=Jh({type:e,selectors:[[``,`ngTemplateOutlet`,``]],inputs:{ngTemplateOutletContext:`ngTemplateOutletContext`,ngTemplateOutlet:`ngTemplateOutlet`,ngTemplateOutletInjector:`ngTemplateOutletInjector`},features:[Dc]})}return e})();function cb(e,t){return new T(2100,!1)}var lb=`mediumDate`,ub=new vi(``),db=new vi(``),fb=(()=>{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??lb,a=r??this.defaultOptions?.timezone??this.defaultTimezone??void 0;return Fy(t,e,i||this.locale,a)}catch(t){throw cb(e,t.message)}}static ɵfac=function(t){return new(t||e)(wm(Ov,16),wm(ub,24),wm(db,24))};static ɵpipe=Yh({name:`date`,type:e,pure:!0})}return e})(),pb=(()=>{class e{transform(e){return JSON.stringify(e,null,2)}static ɵfac=function(t){return new(t||e)};static ɵpipe=Yh({name:`json`,type:e,pure:!1})}return e})();function mb(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 hb=`browser`,gb=class{_doc;constructor(e){this._doc=e}manager},_b=(()=>{class e extends gb{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)(qi(Cs))};static ɵprov=di({token:e,factory:e.ɵfac})}return e})(),vb=new vi(``),yb=(()=>{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 _b));this._plugins=n.slice().reverse();let r=e.find(e=>e instanceof _b);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 T(-5101,!1);return this._eventNameToPlugin.set(e,t),t}static ɵfac=function(t){return new(t||e)(qi(vb),qi(Is))};static ɵprov=di({token:e,factory:e.ɵfac})}return e})(),bb=`ng-app-id`;function xb(e){for(let t of e)t.remove()}function Sb(e,t){let n=t.createElement(`style`);return n.textContent=e,n}function Cb(e,t,n,r){let i=e.head?.querySelectorAll(`style[${bb}="${t}"],link[${bb}="${t}"]`);if(!i||i.length===0)return!1;for(let e of i)e.removeAttribute(bb),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 wb(e,t){let n=t.createElement(`link`);return n.setAttribute(`rel`,`stylesheet`),n.setAttribute(`href`,e),n}var Tb=(()=>{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,Cb(e,t,this.inline,this.external)&&this.hosts.add(e.head)}addStyles(e,t){for(let t of e)this.addUsage(t,this.inline,Sb);t?.forEach(e=>this.addUsage(e,this.external,wb))}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&&(xb(n.elements),t.delete(e)))}ngOnDestroy(){for(let[,{elements:e}]of[...this.inline,...this.external])xb(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,Sb(t,this.doc)));for(let[t,{elements:n}]of this.external)n.push(this.addElement(e,wb(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)(qi(Cs),qi(Qs),qi(nc,8),qi(tc))};static ɵprov=di({token:e,factory:e.ɵfac})}return e})(),Eb={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`},Db=/%COMP%/g,Ob=`%COMP%`,kb=`_nghost-${Ob}`,Ab=`_ngcontent-${Ob}`,jb=!0,Mb=new vi(``,{factory:()=>jb}),Nb=new vi(``);function Pb(e){return Ab.replace(Db,e)}function Fb(e){return kb.replace(Db,e)}function Ib(e,t){return t.map(t=>t.replace(Db,e))}var Lb=(()=>{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 Rb(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 Hb?n.applyToHost(e):n instanceof Vb&&n.applyStyles(),n}getOrCreateRenderer(e,t){let n=this.rendererByCompId,r=n.get(t.id);if(!r){let i=this.doc,a=this.ngZone,o=this.eventManager,s=this.sharedStylesHost,c=this.removeStylesOnCompDestroy,l=this.tracingService;switch(t.encapsulation){case cu.Emulated:r=new Hb(o,s,t,this.appId,c,i,a,l,this.cssVarNamespace);break;case cu.ShadowDom:return new Bb(o,e,t,i,a,this.nonce,l,this.cssVarNamespace,s);case cu.ExperimentalIsolatedShadowDom:return new Bb(o,e,t,i,a,this.nonce,l,this.cssVarNamespace);default:r=new Vb(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)(qi(yb),qi(Sm),qi(Qs),qi(Mb),qi(Cs),qi(Is),qi(nc),qi(Md,8),qi(Nb,8))};static ɵprov=di({token:e,factory:e.ɵfac})}return e})(),Rb=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(Eb[t]||t,e):this.doc.createElement(e)}createComment(e){return this.doc.createComment(e)}createText(e){return this.doc.createTextNode(e)}appendChild(e,t){(zb(e)?e.content:e).appendChild(t)}insertBefore(e,t,n){if(e){let r=zb(e)?e.content:e;if(n!=null&&n.parentNode!==r)throw new T(-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 T(-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=Eb[r];i?e.setAttributeNS(i,t,n):e.setAttribute(t,n)}else e.setAttribute(t,n)}removeAttribute(e,t,n){if(n){let r=Eb[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&(Qu.DashCase|Qu.Important)?e.style.setProperty(t,n,r&Qu.Important?`important`:``):e.style[t]=n}removeStyle(e,t,n){let r=t.startsWith(`--`);r&&(t=t.replace(`%NS%`,this.cssVarNamespace)),r||n&Qu.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=uy().getGlobalEventTarget(this.doc,e),!e))throw new T(-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 zb(e){return e.tagName===`TEMPLATE`&&e.content!==void 0}var Bb=class extends Rb{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=Ib(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=wb(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)}},Vb=class extends Rb{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?Ib(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&&fd.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},Hb=class extends Vb{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=Pb(l),this.hostAttr=Fb(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}},Ub=class e extends fy{supportsDOMEvents=!0;static makeCurrent(){dy(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=Gb();return t==null?null:Kb(t)}resetBaseElement(){Wb=null}getUserAgent(){return window.navigator.userAgent}getCookie(e){return mb(document.cookie,e)}},Wb=null;function Gb(){return Wb||=document.head.querySelector(`base`),Wb?Wb.getAttribute(`href`):null}function Kb(e){return new URL(e,document.baseURI).pathname}var qb=[`alt`,`control`,`meta`,`shift`],Jb={"\b":`Backspace`," ":`Tab`,"":`Delete`,"\x1B":`Escape`,Del:`Delete`,Esc:`Escape`,Left:`ArrowLeft`,Right:`ArrowRight`,Up:`ArrowUp`,Down:`ArrowDown`,Menu:`ContextMenu`,Scroll:`ScrollLock`,Win:`OS`},Yb={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},Xb=(()=>{class e extends gb{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(()=>uy().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.`),qb.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=Jb[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`),qb.forEach(t=>{if(t!==n){let n=Yb[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)(qi(Cs))};static ɵprov=di({token:e,factory:e.ɵfac})}return e})();async function Zb(e,t,n){return ry({rootComponent:e,...Qb(t,n)})}function Qb(e,t){return{platformRef:t?.platformRef,appProviders:[...rx,...e?.providers??[]],platformProviders:nx}}function $b(){Ub.makeCurrent()}function ex(){return new Js}function tx(){return Xl(document),document}var nx=[{provide:tc,useValue:hb},{provide:ec,useValue:$b,multi:!0},{provide:Cs,useFactory:tx}],rx=[{provide:Ea,useValue:`root`},{provide:Js,useFactory:ex},{provide:vb,useClass:_b,multi:!0},{provide:vb,useClass:Xb,multi:!0},Lb,{provide:Sm,useClass:Tb},{provide:Tb,useExisting:Sm},yb,{provide:rm,useExisting:Lb},[]];function ix(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 cx({code:i,why:ox(a.why,e),fix:ox(a.fix,e),docs:o,cause:e.cause,sources:e.sources,data:ox(a.data,e)},s);for(let e of t)e(r,n);return r};n[i]=s}return n}function dx(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 _x=Math.random.bind(Math),vx=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function yx(e=21){let t=``,n=e;for(;n--;)t+=vx[_x()*64|0];return t}var bx=6e4,xx=e=>e,Sx=xx,{clearTimeout:Cx,setTimeout:wx}=globalThis;function Tx(e,t){let{post:n,on:r,off:i=()=>{},eventNames:a=[],serialize:o=xx,deserialize:s=Sx,resolver:c,bind:l=`rpc`,timeout:u=bx,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}=gx(),_=yx();s.i=_;let ee;async function v(n=s){return u>=0&&(ee=wx(()=>{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,v,d):await v()}catch(e){if(t.onGeneralError?.call(h,e)!==!0)throw e;return}finally{Cx(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:v,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(te)}function v(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 te(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&&(Cx(r.timeoutId),n?r.reject(n):r.resolve(t)),p.delete(e)}}return m=r(te),h}function Ex(e,t){return t.safety?t.safety:e===`static`||e===`query`||e==null?`read`:`action`}var Dx=Object.freeze({type:`object`,additionalProperties:!0});function Ox(e){let t=e[`~standard`];if(t.jsonSchema)try{return t.jsonSchema.input({target:`draft-2020-12`})}catch{return Dx}return Dx}function kx(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 jx(e,t){return Ax(e,t)??[e]}function Mx(e){return typeof e==`string`?`'${e}'`:new Ix().serialize(e)}var Nx=` _-,;:!?.'"()[]{}@*/\\&#%\`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz`,Px=(function(){let e=new Uint8Array(128);for(let t=0;t<69;t++)e[Nx.charCodeAt(t)]=t+1;for(let t=65;t<=90;t++)e[t]=e[t+32];return e})();function Fx(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})(),Lx=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],Rx=[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],zx=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`,Bx=[],Vx=class{_data=new Hx;_hash=new Hx([...Lx]);_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)Bx[n]=e[t+n]|0;else{let e=Bx[n-15],t=(e<<25|e>>>7)^(e<<14|e>>>18)^e>>>3,r=Bx[n-2],i=(r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10;Bx[n]=t+Bx[n-7]+i+Bx[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+Rx[n]+Bx[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=Hx.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 Ux(e){return new Vx().finalize(e).toBase64()}function Wx(e){return Ux(Mx(e))}function Gx(e){return Wx(e)}function Kx(){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 qx=/^[\w+.-]{2,}:\/\//;function Jx(e){return e.endsWith(`/`)?e:`${e}/`}function Yx(e){return(e.endsWith(`/`)?e.slice(0,-1):e)||`/`}function Xx(e,...t){let n=e;for(let e of t)e&&e!==`/`&&(n=n?Jx(n)+e.replace(/^\.?\//,``):e);return n}function Zx(e,t){if(!t||t===`/`||qx.test(e))return e;let n=Yx(t);return e.startsWith(n)?e:Xx(n,e)}function Qx(e,t){let n=e.match(qx);return t+(n?e.slice(n[0].length):e)}var $x=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function eS(e=21){let t=``,n=e;for(;n--;)t+=$x[Math.random()*64|0];return t}var tS=Symbol.for(`immer-nothing`),nS=Symbol.for(`immer-draftable`),rS=Symbol.for(`immer-state`),iS=[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 aS(e,...t){{let n=iS[e],r=kS(n)?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}}var oS=Object,sS=oS.getPrototypeOf,cS=`constructor`,lS=`prototype`,uS=`configurable`,dS=`enumerable`,fS=`writable`,pS=`value`,mS=e=>!!e&&!!e[rS];function hS(e){return e?vS(e)||TS(e)||!!e[nS]||!!e[cS]?.[nS]||ES(e)||DS(e):!1}var gS=oS[lS][cS].toString(),_S=new WeakMap;function vS(e){if(!e||!OS(e))return!1;let t=sS(e);if(t===null||t===oS[lS])return!0;let n=oS.hasOwnProperty.call(t,cS)&&t[cS];if(n===Object)return!0;if(!kS(n))return!1;let r=_S.get(n);return r===void 0&&(r=Function.toString.call(n),_S.set(n,r)),r===gS}function yS(e,t,n=!0){bS(e)===0?(n?Reflect.ownKeys(e):oS.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function bS(e){let t=e[rS];return t?t.type_:TS(e)?1:ES(e)?2:DS(e)?3:0}var xS=(e,t,n=bS(e))=>n===2?e.has(t):oS[lS].hasOwnProperty.call(e,t),SS=(e,t,n=bS(e))=>n===2?e.get(t):e[t],CS=(e,t,n,r=bS(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function wS(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var TS=Array.isArray,ES=e=>e instanceof Map,DS=e=>e instanceof Set,OS=e=>typeof e==`object`,kS=e=>typeof e==`function`,AS=e=>typeof e==`boolean`;function jS(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var MS=e=>OS(e)?e?.[rS]:null,NS=e=>e.copy_||e.base_,PS=e=>e.modified_?e.copy_:e.base_;function FS(e,t){if(ES(e))return new Map(e);if(DS(e))return new Set(e);if(TS(e))return Array[lS].slice.call(e);let n=vS(e);if(t===!0||t===`class_only`&&!n){let t=oS.getOwnPropertyDescriptors(e);delete t[rS];let n=Reflect.ownKeys(t);for(let r=0;r1&&oS.defineProperties(e,{set:RS,add:RS,clear:RS,delete:RS}),oS.freeze(e),t&&yS(e,(e,t)=>{IS(t,!0)},!1),e)}function LS(){aS(2)}var RS={[pS]:LS};function zS(e){return e===null||!OS(e)||oS.isFrozen(e)}var BS=`MapSet`,VS=`Patches`,HS=`ArrayMethods`,US={};function WS(e){let t=US[e];return t||aS(0,e),t}var GS=e=>!!US[e];function KS(e,t){US[e]||(US[e]=t)}var qS,JS=()=>qS,YS=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:GS(BS)?WS(BS):void 0,arrayMethodsPlugin_:GS(HS)?WS(HS):void 0});function XS(e,t){t&&(e.patchPlugin_=WS(VS),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function ZS(e){QS(e),e.drafts_.forEach(eC),e.drafts_=null}function QS(e){e===qS&&(qS=e.parent_)}var $S=e=>qS=YS(qS,e);function eC(e){let t=e[rS];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function tC(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[rS].modified_&&(ZS(t),aS(4)),hS(e)&&(e=nC(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[rS].base_,e,t)}else e=nC(t,n);return rC(t,e,!0),ZS(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===tS?void 0:e}function nC(e,t){if(zS(t))return t;let n=t[rS];if(!n)return dC(t,e.handledSet_,e);if(!aC(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);lC(n,e)}return n.copy_}function rC(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&IS(t,n)}function iC(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var aC=(e,t)=>e.scope_===t,oC=[];function sC(e,t,n,r){let i=NS(e),a=e.type_;if(r!==void 0&&SS(i,r,a)===t){CS(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;yS(i,(e,n)=>{if(mS(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??oC;for(let e of o)CS(i,e,n,a)}function cC(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!aC(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=PS(i);sC(e,i.draft_??i,a,n),lC(i,r)})}function lC(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)}iC(e)}}function uC(e,t,n){let{scope_:r}=e;if(mS(n)){let i=n[rS];aC(i,r)&&i.callbacks_.push(function(){bC(e),sC(e,n,PS(i),t)})}else hS(n)&&e.callbacks_.push(function(){let i=NS(e);e.type_===3?i.has(n)&&dC(n,r.handledSet_,r):SS(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&dC(SS(e.copy_,t,e.type_),r.handledSet_,r)})}function dC(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||mS(e)||t.has(e)||!hS(e)||zS(e)?e:(t.add(e),yS(e,(r,i)=>{if(mS(i)){let t=i[rS];aC(t,n)&&(CS(e,r,PS(t),e.type_),iC(t))}else hS(i)&&dC(i,t,n)}),e)}function fC(e,t){let n=TS(e),r={type_:+!!n,scope_:t?t.scope_:JS(),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=pC;n&&(i=[r],a=mC);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var pC={get(e,t){if(t===rS)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=NS(e);if(!xS(i,t,e.type_))return _C(e,i,t);let a=i[t];if(e.finalized_||!hS(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&jS(t))return a;if(a===hC(e.base_,t)||gC(e,t,a)){bC(e);let n=e.type_===1?+t:t,r=SC(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in NS(e)},ownKeys(e){return Reflect.ownKeys(NS(e))},set(e,t,n){let r=vC(NS(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=hC(NS(e),t),i=r?.[rS];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.delete(t),!0;if(wS(n,r)&&(n!==void 0||xS(e.base_,t,e.type_)))return!0;bC(e),yC(e)}return e.copy_[t]===n&&(n!==void 0||xS(e.copy_,t,e.type_))||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_.set(t,!0),uC(e,t,n),!0)},deleteProperty(e,t){return bC(e),hC(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),yC(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=NS(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[fS]:!0,[uS]:e.type_!==1||t!==`length`,[dS]:r[dS],[pS]:n[t]}},defineProperty(){aS(11)},getPrototypeOf(e){return sS(e.base_)},setPrototypeOf(){aS(12)}},mC={};for(let e in pC){let t=pC[e];mC[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}mC.deleteProperty=function(e,t){return isNaN(parseInt(t))&&aS(13),mC.set.call(this,e,t,void 0)},mC.set=function(e,t,n){return t!==`length`&&isNaN(parseInt(t))&&aS(14),pC.set.call(this,e[0],t,n,e[0])};function hC(e,t){let n=e[rS];return(n?NS(n):e)[t]}function gC(e,t,n){return e.type_!==1||!e.allIndicesReassigned_||e.assigned_?.get(t)||!hS(n)||n[rS]?!1:e.baseRefs_.has(n)}function _C(e,t,n){let r=vC(t,n);return r?pS in r?r[pS]:r.get?.call(e.draft_):void 0}function vC(e,t){if(!(t in e))return;let n=sS(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=sS(n)}}function yC(e){e.modified_||(e.modified_=!0,e.parent_&&yC(e.parent_))}function bC(e){e.copy_||=(e.assigned_=new Map,FS(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var xC=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(kS(e)&&!kS(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}kS(t)||aS(6),n!==void 0&&!kS(n)&&aS(7);let r;if(hS(e)){let i=$S(this),a=SC(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?ZS(i):QS(i)}return XS(i,n),tC(r,i)}if(!e||!OS(e)){if(r=t(e),r===void 0&&(r=e),r===tS&&(r=void 0),this.autoFreeze_&&IS(r,!0),n){let t=[],i=[];WS(VS).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}aS(1,e)},this.produceWithPatches=(e,t)=>{if(kS(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]},AS(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),AS(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),AS(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){hS(e)||aS(8),mS(e)&&(e=CC(e));let t=$S(this),n=SC(t,e,void 0);return n[rS].isManual_=!0,QS(t),n}finishDraft(e,t){let n=e&&e[rS];(!n||!n.isManual_)&&aS(9);let{scope_:r}=n;return XS(r,t),tC(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=WS(VS).applyPatches_;return mS(e)?r(e,t):this.produce(e,e=>r(e,t))}};function SC(e,t,n,r){let[i,a]=ES(t)?WS(BS).proxyMap_(t,n):DS(t)?WS(BS).proxySet_(t,n):fC(t,n);return(n?.scope_??JS()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?cC(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 CC(e){return mS(e)||aS(10,e),wC(e)}function wC(e){if(!hS(e)||zS(e))return e;let t=e[rS],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=FS(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=FS(e,!0);return yS(n,(e,t)=>{CS(n,e,wC(t))},r),t&&(t.finalized_=!1),n}function TC(){iS.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=MS(SS(e,n.key_)),i=SS(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||xS(e,o)))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=SS(o,e,c),f=SS(s,e,c),p=l?xS(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===tS?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(DS(e))return new Set(Array.from(e).map(u));let t=Object.create(sS(e));for(let n in e)t[n]=u(e[n]);return xS(e,nS)&&(t[nS]=e[nS]),t}function d(e){return mS(e)?u(e):e}KS(VS,{applyPatches_:l,generatePatches_:i,generateReplacementPatches_:c,getPath:e})}globalThis.Iterator?.from;var EC=new xC,DC=EC.produce,OC=EC.produceWithPatches.bind(EC),kC=EC.applyPatches.bind(EC),AC=1e3;function jC(e,t){if(e.add(t),e.size>AC){let t=e.values().next().value;t!==void 0&&e.delete(t)}}function MC(e){let{enablePatches:t=!1}=e;t&&TC();let n=Kx(),r=e.initialValue,i=new Set;return{on:n.on,value:()=>r,patch:(e,t=eS())=>{i.has(t)||(TC(),r=kC(r,e),jC(i,t),n.emit(`updated`,r,void 0,t))},mutate:(e,a=eS())=>{if(!i.has(a)){if(jC(i,a),t){let[t,i]=OC(r,e);if(t===r)return;r=t,n.emit(`updated`,r,i,a)}else{let t=DC(r,e);if(t===r)return;r=t,n.emit(`updated`,r,void 0,a)}}},syncIds:i}}var NC=typeof self==`object`?self:globalThis,PC=new Set([`Error`,`EvalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`,`AggregateError`]),FC=new Set([`Boolean`,`Number`,`String`,`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float16Array`,`Float32Array`,`Float64Array`,`BigInt64Array`,`BigUint64Array`]);function IC(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=PC.has(e)?NC[e]:void 0;return n(new(r??NC.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`&&FC.has(a))return n(new NC[a](o),i);throw TypeError(`unable to deserialize unsafe or unknown type: ${String(a)}`)};return r}function LC(e){return IC(new Map,e)(0)}var RC=``,{toString:zC}={},{keys:BC}=Object;function VC(e){let t=typeof e;if(t!==`object`||!e)return[0,t];let n=zC.call(e).slice(8,-1);switch(n){case`Array`:return[1,RC];case`Object`:return[2,RC];case`Date`:return[3,RC];case`RegExp`:return[4,RC];case`Map`:return[5,RC];case`Set`:return[6,RC];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]}function HC([e,t]){return e===0&&(t===`function`||t===`symbol`)}function UC(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]=VC(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 BC(r))(e||!HC(VC(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||!(HC(VC(n))||HC(VC(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!HC(VC(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a}function WC(e,t={}){let n=[];return UC(!(t.json||t.lossy),!!t.json,new Map,n)(e),n}var{parse:GC,stringify:KC}=JSON,qC={json:!0,lossy:!0};function JC(e){return LC(GC(e))}function YC(e){return KC(WC(e,qC))}function XC(e){return LC(e)}function ZC(e){return YC(e)}function QC(e){return JC(e)}var $C=256,ew=class extends Error{name=`StreamClosedError`};function tw(e={}){let t=e.id??eS(),n=Math.max(0,e.replayWindow??0),r=Kx(),i=new AbortController,a=[],o=!1,s=0;function c(e){if(o)throw new ew(`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=rw(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 nw(e={}){let t=e.id??eS(),n=Math.max(1,e.highWaterMark??$C),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 rw(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 iw=128;function aw(e){return e.replace(/[^\w-]+/g,`_`).slice(0,iw)}var ow=`modulepreload`,sw=function(e,t){return new URL(e,t).href},cw={},lw=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=sw(t,n),t=s(t),t in cw)return;cw[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`:ow,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)})},uw=`__connection.json`,dw=`__DEVFRAME_CONNECTION__`,fw=`x-birpc-session`,pw=`__rpc-dump/index.json`,mw=`devframe:services`,hw=`devframe_otp`,gw=`devframe_auth_token`;fx.postMessage.remoteAssetsError;var _w=class{cacheMap=new Map;options;keySerializer;constructor(e){this.options=e,this.keySerializer=e.keySerializer||(e=>Gx(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()}},vw=hx({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 yw(e){if(e.agent&&e.jsonSerializable===!1)throw vw.DF0019({name:e.name});e.agent&&!e.jsonSerializable&&(e.jsonSerializable=!0)}async function bw(e,t){let n=e[`~standard`].validate(t);return n instanceof Promise?await n:n}function xw(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 Sw(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 Tw(e,t){let n=e.handler;if(!n){let r=await ww(e,t);if(!r.handler)throw vw.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 Sw(e.name,r,t),o=await a(...n);return await Cw(e.name,i,o)}}var Ew=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 Tw(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 vw.DF0021({name:e.name});yw(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 vw.DF0022({name:e.name});yw(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 Tw(this.definitions.get(e),this.context)}getSchema(e){let t=this.definitions.get(e);if(!t)throw vw.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 Dw(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 kw(t,`undefined`,r,e);return n}return i!==null&&Ow(i,r,e,t),n})}function Ow(e,t,n,r){if(typeof e==`bigint`)throw kw(r,`BigInt`,t,n);if(typeof e!=`object`)return;if(e instanceof Map)throw kw(r,`Map`,t,n);if(e instanceof Set)throw kw(r,`Set`,t,n);if(e instanceof Date)throw kw(r,`Date`,t,n);if(Array.isArray(e))return;let i=Object.getPrototypeOf(e);if(i!==null&&i!==Object.prototype)throw kw(r,e.constructor?.name??`class instance`,t,n)}function kw(e,t,n,r){let i=Aw(n,r);return vw.DF0020({name:e||``,type:t,path:i})}function Aw(e,t){return Array.isArray(e)?`[${t}]`:t===``?``:t}var jw=`__DEVFRAME_CONNECTION_META__`,Mw=`__DEVFRAME_CONNECTION_AUTH_TOKEN__`;function Nw(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 Pw(){return Nw(dw)}function Fw(){return Nw(jw)}function Iw(e){if(e)return e;try{let e=localStorage.getItem(Mw);if(e)return e}catch{}return Nw(Mw)}function Lw(e){globalThis[dw]=e,globalThis[jw]={...e.connectionMeta,baseUrl:e.metaBaseUrl},e.authToken&&Rw(e.authToken)}function Rw(e){try{localStorage.setItem(Mw,e)}catch{}globalThis[Mw]=e;let t=Pw();t&&(globalThis[dw]={...t,authToken:e})}function zw(e){let t=Zx(uw,e);try{return new URL(t,globalThis.location?.href).href}catch{return t}}function Bw(e,t){return t&&t!==e.authToken?{...e,authToken:t}:e}function Vw(){let e=Pw();if(e)return Bw(e,Iw()??e.authToken??e.connectionMeta.authToken);let t=Fw();if(t)return{connectionMeta:t,metaBaseUrl:t.baseUrl??zw(`./`),authToken:Iw(t.authToken)}}async function Hw(e={}){if(e.connection){let t=Bw(e.connection,Iw(e.authToken??e.connection.authToken??e.connection.connectionMeta.authToken));return Lw(t),t}let t=Array.isArray(e.baseURL)?e.baseURL:[e.baseURL??`./`];if(e.connectionMeta){let n={connectionMeta:e.connectionMeta,metaBaseUrl:zw(t[0]??`./`),authToken:Iw(e.authToken??e.connectionMeta.authToken)};return Lw(n),n}let n=Vw();if(n){let t=Bw(n,Iw(e.authToken??n.authToken??n.connectionMeta.authToken));return Lw(t),t}let r=[];for(let n of t){let t=Zx(uw,n),i=zw(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:Iw(e.authToken??r.authToken)};return Lw(o),o}catch(e){r.push(e)}}throw Error(`Failed to get connection meta from ${t.join(`, `)}`,{cause:r})}var Uw=class extends Error{name=`DevframeConnectionError`;kind;constructor(e,t,n){super(t,n),this.kind=e}};function Ww(e=hw){try{let t=globalThis.location?.hash?.replace(/^#/,``)??``;return new URLSearchParams(t).get(e)||void 0}catch{return}}function Gw(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 Kw(e=hw){let t=Ww(e);return t&&Gw(e),t}async function qw(e,t={}){let n=Kw(t.param??`devframe_otp`);return n?e.isTrusted?!0:e.requestTrustWithCode(n):!1}function Jw(e){let t={},n=new WeakMap,r,i=()=>(r??=e.sharedState.get(mw,{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 Yw(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:fx.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:fx.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=MC({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=>{if(e.isTrusted)d().then(t);else{t(u);let n=!1;e.events.on(fx.client.isTrustedUpdated,e=>{e&&!n&&(n=!0,d())})}})}}}var Xw=new Map;function Zw(e=Xw){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?Dw(n,r??``):`s:${ZC(n)}`},deserialize:e=>{let n=e.startsWith(`s:`)?QC(e.slice(2)):JSON.parse(e);return n.t===`q`&&n.i&&n.m&&t.set(n.i,n.m),n}}}function Qw(){}function $w(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 eT(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 tT(e){let{onConnected:t=Qw,onError:n=Qw,onDisconnected:r=Qw,definitions:i,fetch:a=globalThis.fetch.bind(globalThis)}=e,o=e.url;e.authToken&&(o=`${o}${o.includes(`?`)?`&`:`?`}${gw}=${encodeURIComponent(e.authToken)}`);let s=Zw(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=$w(r);if(!e)break;r=e.rest;let{event:t,data:n}=eT(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`,[fw]: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 nT(e,t){let{channel:n,rpcOptions:r={}}=t;return Tx(e,{...n,timeout:-1,...r,proxify:!1})}function rT(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(fx.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 Uw(`connection`,`[devframe] Not connected to the devframe server`,{cause:u??void 0}):l===`unauthorized`?new Uw(`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(fx.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 Uw(`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(fx.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(fx.client.connectionError,e),m(new Uw(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){l!==`error`&&f(`disconnected`),m(new Uw(`connection`,`[devframe] Disconnected from the devframe server`,{cause:u??void 0}))}}),v=nT(a.functions,{channel:ee,rpcOptions:o});a.register({name:fx.broadcast.authRevoked,type:`event`,handler:()=>{c=!1;let e=new Uw(`auth`,`[devframe] The devframe server revoked this client's trust`);f(`unauthorized`,e),i.emit(fx.client.connectionError,e),m(e),i.emit(fx.client.isTrustedUpdated,!1)}});let te=n;async function ne(e){te=e;let t=await v.$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 Uw(`auth`,`[devframe] The devframe server refused this client's credentials`);f(`unauthorized`,e),i.emit(fx.client.connectionError,e)}return i.emit(fx.client.isTrustedUpdated,c),t.isTrusted}async function re(e){let t=(await v.$call(`anonymous:devframe:auth:exchange`,{code:e,ua:navigator.userAgent,origin:location.origin}))?.authToken??null;return t&&(te=t,c=!0,d.resolve(!0),f(`connected`),i.emit(fx.client.isTrustedUpdated,!0)),t}async function ie(e={}){await v.$call(`anonymous:devframe:auth:request-code`,{ua:navigator.userAgent,origin:location.origin,...e.reissue?{reissue:!0}:{}})}async function ae(){return c?!0:ne(te??``)}async function oe(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:ae,requestTrustWithToken:ne,requestTrustWithCode:re,requestAuthCode:ie,ensureTrusted:oe,call:(...e)=>{let t=String(e[0]),n=h();return n?(i.emit(fx.client.error,n,t),Promise.reject(n)):g(v.$call(...e),t)},callEvent:(...e)=>{let t=h();if(t){i.emit(fx.client.error,t,String(e[0]));return}return v.$callEvent(...e)},callOptional:(...e)=>{let t=String(e[0]),n=h();return n?(i.emit(fx.client.error,n,t),Promise.reject(n)):g(v.$callOptional(...e),t)},close:()=>{ee.close()}}}function iT(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 aT(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=iT(n.sse,r??`./`,location);return rT({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>tT({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 oT(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:sT(r)?oT(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function sT(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function cT(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function lT(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function uT(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function dT(e){if(e.error)throw oT(e.error);return e.output}function fT(e){return e.some(e=>e!=null)}function pT(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function mT(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?XC(e):e}function a(e,t){return i(pT(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 uT(r)?dT(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(cT(r)){if(fT(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(lT(r)){let e=Gx(n),i=r.records[e];if(i)return dT(await s(i,r.serialization));if(r.fallback)return dT(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!fT(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 hT(e){let t=mT(await e.fetchJsonFromBases(pw),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 gT=``;function _T(e,t){return`${e}${gT}${t}`}function vT(e){let t=new Map,n=new Map;e.client.register({name:fx.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(_T(e,n))?._push(r,i)}}),e.client.register({name:fx.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=_T(e,n),a=t.get(i);a&&(a._end(r),t.delete(i))}}),e.client.register({name:fx.broadcast.streamingUploadCancel,type:`event`,handler(e,t){let r=_T(e,t),i=n.get(r);i&&(i.abort(`server cancelled upload`),n.delete(r))}}),e.events.on(fx.client.isTrustedUpdated,n=>{if(n)for(let[n,r]of t){if(r.cancelled||r.done)continue;let t=n.indexOf(gT);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=_T(n,r),o=t.get(a);if(o)return o;let s=nw({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(fx.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=_T(t,r),a=n.get(i);if(a)return a;let o=tw({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 yT(){}var bT=new Map;function xT(e){let t=e.url;e.authToken&&(t=`${t}?${gw}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=yT,onError:i=yT,onDisconnected:a=yT,definitions:o=bT}=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=Zw(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 ST(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 Qx(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function CT(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=ST(n.websocket,r??`./`,location);return rT({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>xT({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 wT(e){return e.includes(`:`)}function TT(e,t){return wT(t)?t:`${e}:${t}`}function ET(e){return{async get(t){return(await e()).value()[t]},async set(t,n){(await e()).mutate(e=>{e[t]=n})},async delete(t){(await e()).mutate(e=>{delete e[t]})},async all(){return(await e()).value()},async onChange(t){return(await e()).on(`updated`,e=>t(e))}}}function DT(e,t,n){let r=`devframe:settings:${n}:${t}`,i;function a(){return i||=e.sharedState.get(r,{initialValue:{}}),i}return ET(a)}function OT(e,t){return{global:DT(e,t,`global`),project:DT(e,t,`project`)}}function kT(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(wT(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(TT(t,n),...r)),callEvent:((n,...r)=>e.callEvent(TT(t,n),...r)),callOptional:((n,...r)=>e.callOptional(TT(t,n),...r)),sharedState:((n,r)=>e.sharedState.get(TT(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe(TT(t,n),r,i),upload:(n,r)=>e.streaming.upload(TT(t,n),r)}},settings:OT(e,t),scope:e.scope}}function AT(){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 jT(e,t={}){let n=t.modelContext??AT();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=aw(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=Ex(t.type,n),u=r.registerTool({name:o,description:n.description,inputSchema:kx(t.args),annotations:{title:n.title??t.name,readOnlyHint:l===`read`,destructiveHint:l===`destructive`},execute:n=>MT(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 MT(e,t,n){try{let r=jx(n,e.args?.length);return{content:[{type:`text`,text:NT(await(await Tw(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:PT(e)}]}}}function NT(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function PT(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 FT(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 IT(e={}){let{baseURL:t=`./`,rpcOptions:n={},cacheOptions:r=!1}=e,i=Kx(),a=Array.isArray(t)?t:[t],o=await Hw(e),{connectionMeta:s,metaBaseUrl:c,authToken:l}=o,u=a[0]??`./`;try{u=new URL(`.`,c).href}catch{}let d=new _w({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),f={rpc:void 0},p=new Ew(f),m=e.webmcp===!1?void 0:jT(p),h,g=!1;async function _(e){let t=[u,...a.filter(e=>e!==u)].filter(e=>e!=null),n=[];for(let r of t)try{return await fetch(Zx(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 ee={authToken:l,connectionMeta:s,metaBaseUrl:c,events:i,clientRpc:p,callTimeout:e.callTimeout,rpcOptions:{...n,async onRequest(e,t,i){if(await n.onRequest?.call(this,e,t,i),r&&d?.validate(e.m)){if(d.has(e.m,e.a))return i(d.cached(e.m,e.a));let n=await t(e);d.apply(e,n)}else await t(e)}}},v=FT(e.transport??`auto`,s),te=v===`static`?await hT({fetchJsonFromBases:_}):v===`sse`?aT({...ee,sseOptions:e.sseOptions}):CT({...ee,wsOptions:e.wsOptions}),ne;try{ne=new BroadcastChannel(`devframe-auth`)}catch{}let re,ie=!1;function ae(e){return((...t)=>ie||!re?e(...t):re.then(()=>e(...t)))}function oe(){g=!0;try{h?.(),m?.()}finally{try{ne?.close()}finally{te.close?.()}}}let se={events:i,get isTrusted(){return te.isTrusted},get status(){return te.status},get connectionError(){return te.connectionError},get transport(){return te.transport??v},get connection(){return o},connectionMeta:s,ensureTrusted:te.ensureTrusted,requestTrust:te.requestTrust,requestTrustWithToken:async e=>(Rw(e),o={...o,authToken:e},te.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await te.requestTrustWithCode(e);if(!t)return!1;Rw(t),o={...o,authToken:t};try{ne?.postMessage({type:`auth-update`,authToken:t})}catch{}return!0},requestAuthCode:e=>te.requestAuthCode(e),call:ae(te.call),callEvent:ae(te.callEvent),callOptional:ae(te.callOptional),client:p,sharedState:void 0,services:void 0,streaming:void 0,cacheManager:d,scope:void 0,close:oe};se.sharedState=Yw(se),se.streaming=vT(se),se.services=Jw(se);let ce=new Map;se.scope=(e=>{if(!e)return se;let t=ce.get(e);return t||(t=kT(se,e),ce.set(e,t)),t}),f.rpc=se;function le(){try{return typeof window<`u`&&window.self===window.top}catch{return!1}}async function ue(){if(e.simpleAuth!==!1&&le()&&typeof globalThis.prompt==`function`)for(await se.requestAuthCode().catch(()=>{});!se.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 se.requestTrustWithCode(t))return}}async function de(){let t=await te.requestTrust(),n=e.otpParam??`devframe_otp`,r=n?await qw(se,{param:n}):!1;t||r||se.isTrusted||await ue()}return re=de().then(()=>{ie=!0},()=>{ie=!0}),s.mcp&&lw(async()=>{let{setupBrowserAgentRpcBridge:e}=await import(`./browser-agent-rpc-BXhoSh1z-6a4lgDHo.js`);return{setupBrowserAgentRpcBridge:e}},[],import.meta.url).then(({setupBrowserAgentRpcBridge:e})=>{g||(h=e(se))}).catch(()=>{}),ne&&(ne.onmessage=e=>{e.data?.type===`auth-update`&&e.data.authToken&&se.requestTrustWithToken(e.data.authToken)}),se}var LT=IT,RT=[`components`,`injectors`,`signals`,`ngrx`,`forms`,`router`,`pipes`,`http`,`analog`,`capacitor`],zT=[`angular`,`ngrx`,`analog`,`angular-native`,`nativescript`,`capacitor`];function BT(e){return`pangular:${e}`}var VT=[`forms`,`router`,`ngrx`,`http`,`analog`],HT={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}},UT={"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`},WT=[[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 GT(e){return WT.some(([t])=>t===e)}var KT=`pangular`;function qT(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function JT(e,t){return typeof e==`boolean`?e:t}var YT=100,XT=100;function ZT(e){if(!Array.isArray(e))return[];let t=e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e&&e.length<=XT);return[...new Set(t)].slice(0,YT)}function QT(e,t){let{default:n,min:r,max:i}=HT[t];return typeof e!=`number`||!Number.isFinite(e)?n:Math.min(i,Math.max(r,Math.round(e)))}function $T(e,t){return Object.fromEntries(e.map(e=>[e,t(e)]))}function eE(e){let t=qT(e),n=qT(t.agent),r=qT(t.inspectors),i=qT(n.tools),a=qT(t.actions),o=JT(t.actions,!0),s=qT(t.redaction),c=qT(t.limits),l=$T(RT,e=>JT(r[e],!0));return{inspectors:l,agent:{readOnly:JT(n.readOnly,!1),tools:$T(RT,e=>l[e]&&JT(i[e],!0))},actions:$T(VT,e=>l[e]&&JT(a[e],o)),redaction:{secretNames:ZT(s.secretNames),unmask:ZT(s.unmask)},limits:Object.fromEntries(Object.keys(HT).map(e=>[e,QT(c[e],e)]))}}function tE(e){let t=e?.configs;return eE(t?.[KT])}function nE(e){return`${{forms:`Writing to forms`,router:`Navigating and clearing navigations`,ngrx:`Restoring NgRx state and dispatching actions`,http:`Changing HTTP mock rules and clearing HTTP calls`,analog:`Calling API routes and clearing server calls`}[e]} is turned off in the devtools config (actions.${e}).`}var rE={components:`Components`,injectors:`Injectors`,signals:`Signals`,ngrx:`NgRx`,forms:`Forms`,router:`Router`,pipes:`Pipes`,http:`HTTP`,analog:`Analog`,capacitor:`Capacitor`},iE={forms:`Form writes`,router:`Navigation`,ngrx:`NgRx restore and dispatch`,http:`HTTP mocking`,analog:`Analog API calls`},aE={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`};function oE(e){let t=[],n=(e,n)=>{n.length&&t.push({label:e,value:n.join(`, `)})},r=RT.filter(t=>e.inspectors[t]);return n(`Inspectors off`,RT.filter(t=>!e.inspectors[t]).map(e=>rE[e])),n(`Agent`,e.agent.readOnly?[`Read-only`]:[]),n(`Hidden from the agent`,r.filter(t=>!e.agent.tools[t]).map(e=>rE[e])),n(`Blocked actions`,VT.filter(t=>e.inspectors[t]&&!e.actions[t]).map(e=>iE[e])),n(`Extra secret names`,e.redaction.secretNames),n(`Unmasked names`,e.redaction.unmask),n(`Limits`,Object.keys(HT).filter(t=>e.limits[t]!==HT[t].default).map(t=>aE[t](e.limits[t]))),t}var sE=`pangular-page-id`,cE=null;function lE(e){cE=e}function uE(){if(cE)return cE;try{return new URLSearchParams(location.search).get(`pageId`)||(window.top===window?null:sessionStorage.getItem(sE)||null)}catch{return null}}function dE(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 fE(e,t){return e?t?e.pages?.[t]??null:e:null}function pE(e,t){return e?t?e.pages?.[t]??null:e.graph??null:null}function mE(e,t,n){return e?e.scope(`pangular`).rpc.call(t,...n===void 0?[]:[n]):Promise.resolve(null)}function hE(e,t,n){return mE(e,t,n).then(e=>e,()=>null)}function gE(e){return e?.connectionMeta.backend===`static`}function _E(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 vE(e){return e.split(`@`)[1]??``}var yE={signal:`Signal Forms`,reactive:`Reactive`,template:`Template-driven`},bE={own:`validator`,directive:`template attribute`,tree:`cross-field rule`,async:`async`,parse:`parse`,submission:`server`,schema:`schema`,manual:`setErrors`},xE=hE,SE={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 CE(e){return SE[e]??e}var wE=`https://pangular-inspector.dev/security/#opt-fields-in-or-out`;async function TE(e,t){return await xE(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 DE=/"(?:[^"\\\n]|\\.)*"|`([^`\n]*)`|\*\*/g;function OE(e){return(e??``).replace(/^_Labels, paths.*_\n\n/,``).replace(DE,(e,t)=>t??(e===`**`?``:e))}function kE(e){return tE(e?.connectionMeta)}function AE(e,t){return kE(e).actions[t]}var jE={components:`components`,routes:`router`,signals:`signals`,injectors:`injectors`,store:`ngrx`,forms:`forms`,pipes:`pipes`,network:`http`,analog:`analog`,capacitor:`capacitor`};function ME(e){return jE[e]}var NE=`https://pangular-inspector.dev/getting-started/configuration/#inspectors-and-agent-tools`;function PE(e,t){let n=jE[e];return!n||t.inspectors[n]}function FE(e,t){e&1&&(A(),zg(0,`rect`,4)(1,`rect`,5)(2,`rect`,6)(3,`rect`,7))}function IE(e,t){e&1&&(A(),zg(0,`path`,8)(1,`path`,9)(2,`path`,10))}function LE(e,t){e&1&&(A(),zg(0,`circle`,11)(1,`path`,12)(2,`circle`,13))}function RE(e,t){e&1&&(A(),zg(0,`path`,1))}function zE(e,t){e&1&&(A(),zg(0,`path`,14)(1,`path`,15)(2,`path`,16)(3,`path`,17))}function BE(e,t){e&1&&(A(),zg(0,`ellipse`,18)(1,`path`,19)(2,`path`,20))}function VE(e,t){e&1&&(A(),zg(0,`rect`,21)(1,`path`,22)(2,`path`,23)(3,`path`,24))}function HE(e,t){e&1&&(A(),zg(0,`circle`,25)(1,`path`,26)(2,`path`,27))}function UE(e,t){e&1&&(A(),zg(0,`path`,28)(1,`path`,29)(2,`path`,30)(3,`path`,31)(4,`circle`,32))}function WE(e,t){e&1&&(A(),zg(0,`path`,2))}function GE(e,t){e&1&&(A(),zg(0,`path`,3))}var KE=class e{name=$.required();static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-tab-icon`]],inputs:{name:[1,`name`]},decls:12,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`,`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`,`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`,`M3 12h18`],[`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`]],template:function(e,t){if(e&1&&(A(),H(0,`svg`,0),P(1,FE,4,0)(2,IE,3,0)(3,LE,3,0)(4,RE,1,0,`:svg:path`,1)(5,zE,4,0)(6,BE,3,0)(7,VE,4,0)(8,HE,3,0)(9,UE,5,0)(10,WE,1,0,`:svg:path`,2)(11,GE,1,0,`:svg:path`,3),U()),e&2){let e;M(),F((e=t.name())===`dashboard`?1:e===`components`?2:e===`routes`?3:e===`signals`?4:e===`injectors`?5:e===`store`?6:e===`forms`?7:e===`network`?8:e===`pipes`?9:e===`analog`?10:e===`capacitor`?11:-1)}},styles:[`[_nghost-%COMP%] { display: inline-flex; flex-shrink: 0; -}`]})},zE=(e,t)=>t.tab,BE=(e,t)=>t.label;function VE(e,t){e&1&&J(0),e&2&&X(` `,K().meta()?.projectName,` `)}function HE(e,t){e&1&&J(0,` Project details unavailable `)}function UE(e,t){e&1&&J(0,` Loading… `)}function WE(e,t){e&1&&(J(0,` Run `),z(1,`code`),J(2,`pangular build`),B(),J(3,` again to rebuild the report. `))}function GE(e,t){e&1&&J(0,` Check that the dev server is running. `)}function KE(e,t){if(e&1){let e=W();z(0,`button`,12),G(`click`,function(){return O(e),k(K(2).loadMeta())}),J(1,`Try again`),B()}}function qE(e,t){if(e&1&&(z(0,`p`,10),P(1,WE,4,0)(2,GE,1,0),B(),P(3,KE,2,0,`button`,11)),e&2){let e=K();M(),F(e.staticReport()?1:2),M(2),F(e.staticReport()?-1:3)}}function JE(e,t){e&1&&(z(0,`li`,5)(1,`span`),J(2,`Analog`),B(),J(3),B()),e&2&&(M(3),Y(t))}function YE(e,t){e&1&&(z(0,`li`)(1,`span`),J(2,`Change detection`),B(),J(3),B()),e&2&&(M(3),Y(t))}function XE(e,t){if(e&1&&(z(0,`span`,19),J(1),B(),z(2,`span`,20),J(3),B()),e&2){let e=K().$implicit,t=K();M(),Y(t.cards()[e.tab]?.value),M(2),Y(t.cards()[e.tab]?.sub)}}function ZE(e,t){e&1&&(z(0,`span`,21),J(1,`–`),B(),z(2,`span`,20),J(3,`Count unavailable`),B())}function QE(e,t){e&1&&(V(0,`span`,22),z(1,`span`,20),J(2,`Counting…`),B())}function $E(e,t){if(e&1){let e=W();z(0,`button`,13),G(`click`,function(){let t=O(e).$implicit;return k(K().navigate.emit(t.tab))}),z(1,`span`,14)(2,`span`,15),V(3,`app-tab-icon`,16),B(),z(4,`span`,17),J(5,`→`),B()(),z(6,`span`,18),J(7),B(),P(8,XE,4,2)(9,ZE,4,0)(10,QE,3,0),B()}if(e&2){let e,n=t.$implicit,r=t.$index,i=K().stateOf(n.tab);C_(`animation-delay`,60*r,`ms`),N(`aria-busy`,i===`loading`),M(3),R(`name`,n.tab),M(4),Y(n.label),M(),F((e=i)===`ready`?8:e===`error`?9:10)}}function eD(e,t){e&1&&(z(0,`p`),J(1,`Loading…`),B())}function tD(e,t){if(e&1&&(z(0,`div`)(1,`dt`),J(2),B(),z(3,`dd`),J(4),B()()),e&2){let e=t.$implicit;M(2),Y(e.label),M(2),Y(e.value)}}function nD(e,t){if(e&1&&(z(0,`dl`),I(1,tD,5,2,`div`,null,BE),B()),e&2){let e=K();M(),L(e.configItems())}}function rD(e,t){e&1&&(z(0,`p`),J(1,`Defaults`),B())}var iD=[{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 aD(e){return iD.filter(t=>EE(t.tab,e))}var oD={zoneless:`Zoneless`,zone:`zone.js`,"zone-unused":`Zoneless, zone.js loaded`};function sD(e){return e&&Object.hasOwn(oD,e)?oD[e]:null}var cD=new Set([`signal`,`computed`,`linkedSignal`,`effect`]),lD={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 uD(e,t,n){return`${e} ${e===1?t:n}`}function dD(e,t){for(let n of e??[])t(n),dD(n.children,t)}function fD(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 · ${uD(t,`directive`,`directives`)}`}}function pD(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 · ${uD(t,`redirect`,`redirects`)}`}}function mD(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]=lD[e]??[e,e];return uD(t,n,r)});return{value:e.length,sub:n.join(` · `)}}function hD(e,t){let n=e?.forms??[],r=t?n.filter(e=>uE(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 gD(e){return e.cancelled||e.status===void 0?!1:e.status===0||e.status>=400}function _D(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(gD).length;return{value:o.length,sub:`${o.length===1?`call`:`calls`} · ${s} failed`}}var vD=class e{rpc=$(null);navigate=Ov();staticReport=Q(()=>cE(this.rpc()));meta=j(null);config=Q(()=>xE(this.rpc()));stats=Q(()=>this.rpc()?aD(this.config()):[]);configItems=Q(()=>QT(this.config()));metaState=j(`loading`);states=j({});rows=j({});injectorTree=j(null);signalGraph=j(null);formsState=j(null);httpState=j(null);pageId=nE();destroyRef=E(Cs);stopLive=[];zone=Q(()=>sD(iE(this.injectorTree(),this.pageId)?.zone));liveInjectors=Q(()=>{let e=iE(this.injectorTree(),this.pageId);if(!e?.roots?.length)return null;let t=0,n=0,r=e=>{t++,n+=e.providers?.length??0};return dD(e.roots,r),dD(e.environment,r),{injectors:t,providers:n}});liveSignals=Q(()=>{let e=aE(this.signalGraph(),this.pageId);return e?.nodes?.length?e.nodes.filter(e=>cD.has(e.kind??``)).length:null});cards=Q(()=>{let e=this.rows(),t={};if(e.components&&(t.components=fD(e.components)),e.routes&&(t.routes=pD(e.routes)),e.store&&(t.store=mD(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 · ${uD(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=hD(i,this.pageId));let a=this.httpState();return a&&(t.network=_D(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`)}))}constructor(){uc(()=>{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);let n=xE(e),r=e=>EE(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)),EE(`forms`,t)&&r(`forms`,e=>this.formsState.set(e??{}),`forms`),EE(`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=Bh({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&&(z(0,`section`,0)(1,`div`,1)(2,`p`,2),J(3,`Project`),B(),z(4,`h2`,3),P(5,VE,1,1)(6,HE,1,0)(7,UE,1,0),B(),P(8,qE,4,2),B(),z(9,`ul`,4)(10,`li`)(11,`span`),J(12,`Angular`),B(),J(13),B(),z(14,`li`)(15,`span`),J(16,`TypeScript`),B(),J(17),B(),z(18,`li`)(19,`span`),J(20,`SSR`),B(),J(21),B(),P(22,JE,4,1,`li`,5),P(23,YE,4,1,`li`),B()(),z(24,`div`,6),I(25,$E,11,6,`button`,7,zE),B(),z(27,`section`,8)(28,`h2`,9),J(29,`Configuration`),B(),P(30,eD,2,0,`p`)(31,nD,3,0,`dl`)(32,rD,2,0,`p`),B()),e&2){let e,n,r;N(`aria-busy`,t.metaState()===`loading`),M(4),q(`muted`,t.metaState()!==`ready`),M(),F((e=t.metaState())===`ready`?5:e===`error`?6:7),M(3),F(t.metaState()===`error`?8:-1),M(),q(`pending`,t.metaState()===`loading`),M(4),Y(t.meta()?.angularVersion??`…`),M(4),Y(t.meta()?.typescript??`…`),M(4),Y(t.meta()?t.meta()?.ssr?`On`:`Off`:`…`),M(),F((n=t.meta()?.analog)?22:-1,n),M(),F((r=t.zone())?23:-1,r),M(2),L(t.stats()),M(2),N(`aria-busy`,!t.rpc()),M(3),F(t.rpc()?t.configItems().length?31:32:30)}},dependencies:[RE],styles:[`[_nghost-%COMP%] { +}`]})},qE=(e,t)=>t.tab,JE=(e,t)=>t.label;function YE(e,t){e&1&&J(0),e&2&&X(` `,K().meta()?.projectName,` `)}function XE(e,t){e&1&&J(0,` Project details unavailable `)}function ZE(e,t){e&1&&J(0,` Loading… `)}function QE(e,t){e&1&&(J(0,` Run `),z(1,`code`),J(2,`pangular build`),B(),J(3,` again to rebuild the report. `))}function $E(e,t){e&1&&J(0,` Check that the dev server is running. `)}function eD(e,t){if(e&1){let e=W();z(0,`button`,12),G(`click`,function(){return O(e),k(K(2).loadMeta())}),J(1,`Try again`),B()}}function tD(e,t){if(e&1&&(z(0,`p`,10),P(1,QE,4,0)(2,$E,1,0),B(),P(3,eD,2,0,`button`,11)),e&2){let e=K();M(),F(e.staticReport()?1:2),M(2),F(e.staticReport()?-1:3)}}function nD(e,t){e&1&&(z(0,`li`,5)(1,`span`),J(2,`Analog`),B(),J(3),B()),e&2&&(M(3),Y(t))}function rD(e,t){e&1&&(z(0,`li`)(1,`span`),J(2,`Change detection`),B(),J(3),B()),e&2&&(M(3),Y(t))}function iD(e,t){if(e&1&&(z(0,`span`,19),J(1),B(),z(2,`span`,20),J(3),B()),e&2){let e=K().$implicit,t=K();M(),Y(t.cards()[e.tab]?.value),M(2),Y(t.cards()[e.tab]?.sub)}}function aD(e,t){e&1&&(z(0,`span`,21),J(1,`–`),B(),z(2,`span`,20),J(3,`Count unavailable`),B())}function oD(e,t){e&1&&(V(0,`span`,22),z(1,`span`,20),J(2,`Counting…`),B())}function sD(e,t){if(e&1){let e=W();z(0,`button`,13),G(`click`,function(){let t=O(e).$implicit;return k(K().navigate.emit(t.tab))}),z(1,`span`,14)(2,`span`,15),V(3,`app-tab-icon`,16),B(),z(4,`span`,17),J(5,`→`),B()(),z(6,`span`,18),J(7),B(),P(8,iD,4,2)(9,aD,4,0)(10,oD,3,0),B()}if(e&2){let e,n=t.$implicit,r=t.$index,i=K().stateOf(n.tab);j_(`animation-delay`,60*r,`ms`),N(`aria-busy`,i===`loading`),M(3),R(`name`,n.tab),M(4),Y(n.label),M(),F((e=i)===`ready`?8:e===`error`?9:10)}}function cD(e,t){e&1&&(z(0,`p`),J(1,`Loading…`),B())}function lD(e,t){if(e&1&&(z(0,`div`)(1,`dt`),J(2),B(),z(3,`dd`),J(4),B()()),e&2){let e=t.$implicit;M(2),Y(e.label),M(2),Y(e.value)}}function uD(e,t){if(e&1&&(z(0,`dl`),I(1,lD,5,2,`div`,null,JE),B()),e&2){let e=K();M(),L(e.configItems())}}function dD(e,t){e&1&&(z(0,`p`),J(1,`Defaults`),B())}var fD=[{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 pD(e){return fD.filter(t=>PE(t.tab,e))}var mD={zoneless:`Zoneless`,zone:`zone.js`,"zone-unused":`Zoneless, zone.js loaded`};function hD(e){return e&&Object.hasOwn(mD,e)?mD[e]:null}var gD=new Set([`signal`,`computed`,`linkedSignal`,`effect`]),_D={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 vD(e,t,n){return`${e} ${e===1?t:n}`}function yD(e,t){for(let n of e??[])t(n),yD(n.children,t)}function bD(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 · ${vD(t,`directive`,`directives`)}`}}function xD(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 · ${vD(t,`redirect`,`redirects`)}`}}function SD(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]=_D[e]??[e,e];return vD(t,n,r)});return{value:e.length,sub:n.join(` · `)}}function CD(e,t){let n=e?.forms??[],r=t?n.filter(e=>vE(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 wD(e){return e.cancelled||e.status===void 0?!1:e.status===0||e.status>=400}function TD(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(wD).length;return{value:o.length,sub:`${o.length===1?`call`:`calls`} · ${s} failed`}}var ED=class e{rpc=$(null);navigate=Iv();staticReport=Q(()=>gE(this.rpc()));meta=j(null);config=Q(()=>kE(this.rpc()));stats=Q(()=>this.rpc()?pD(this.config()):[]);configItems=Q(()=>oE(this.config()));metaState=j(`loading`);states=j({});rows=j({});injectorTree=j(null);signalGraph=j(null);formsState=j(null);httpState=j(null);pageId=uE();destroyRef=E(ws);stopLive=[];zone=Q(()=>hD(fE(this.injectorTree(),this.pageId)?.zone));liveInjectors=Q(()=>{let e=fE(this.injectorTree(),this.pageId);if(!e?.roots?.length)return null;let t=0,n=0,r=e=>{t++,n+=e.providers?.length??0};return yD(e.roots,r),yD(e.environment,r),{injectors:t,providers:n}});liveSignals=Q(()=>{let e=pE(this.signalGraph(),this.pageId);return e?.nodes?.length?e.nodes.filter(e=>gD.has(e.kind??``)).length:null});cards=Q(()=>{let e=this.rows(),t={};if(e.components&&(t.components=bD(e.components)),e.routes&&(t.routes=xD(e.routes)),e.store&&(t.store=SD(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 · ${vD(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=CD(i,this.pageId));let a=this.httpState();return a&&(t.network=TD(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`)}))}constructor(){dc(()=>{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);let n=kE(e),r=e=>PE(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)),PE(`forms`,t)&&r(`forms`,e=>this.formsState.set(e??{}),`forms`),PE(`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=Wh({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&&(z(0,`section`,0)(1,`div`,1)(2,`p`,2),J(3,`Project`),B(),z(4,`h2`,3),P(5,YE,1,1)(6,XE,1,0)(7,ZE,1,0),B(),P(8,tD,4,2),B(),z(9,`ul`,4)(10,`li`)(11,`span`),J(12,`Angular`),B(),J(13),B(),z(14,`li`)(15,`span`),J(16,`TypeScript`),B(),J(17),B(),z(18,`li`)(19,`span`),J(20,`SSR`),B(),J(21),B(),P(22,nD,4,1,`li`,5),P(23,rD,4,1,`li`),B()(),z(24,`div`,6),I(25,sD,11,6,`button`,7,qE),B(),z(27,`section`,8)(28,`h2`,9),J(29,`Configuration`),B(),P(30,cD,2,0,`p`)(31,uD,3,0,`dl`)(32,dD,2,0,`p`),B()),e&2){let e,n,r;N(`aria-busy`,t.metaState()===`loading`),M(4),q(`muted`,t.metaState()!==`ready`),M(),F((e=t.metaState())===`ready`?5:e===`error`?6:7),M(3),F(t.metaState()===`error`?8:-1),M(),q(`pending`,t.metaState()===`loading`),M(4),Y(t.meta()?.angularVersion??`…`),M(4),Y(t.meta()?.typescript??`…`),M(4),Y(t.meta()?t.meta()?.ssr?`On`:`Off`:`…`),M(),F((n=t.meta()?.analog)?22:-1,n),M(),F((r=t.zone())?23:-1,r),M(2),L(t.stats()),M(2),N(`aria-busy`,!t.rpc()),M(3),F(t.rpc()?t.configItems().length?31:32:30)}},dependencies:[KE],styles:[`[_nghost-%COMP%] { display: block; max-width: 1200px; } @@ -325,7 +325,7 @@ h2.muted[_ngcontent-%COMP%] { .skeleton[_ngcontent-%COMP%] { animation: none; } -}`]})},yD=`pangular:panel-action-result`,bD=6e3,xD=0;function SD(e=window){return e.location.protocol===`chrome-extension:`&&e.parent!==e}function CD(e,t=window){let n=`pa-${Date.now().toString(36)}-${++xD}`;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!==yD||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`}),bD);t.addEventListener(`message`,a),t.parent.postMessage({...e,requestId:n},t.location.origin)})}var wD=class e{available=SD();reveal(e,t){return CD({type:`pangular:reveal-element`,pageId:e,id:t})}openSource(e,t,n){return CD({type:`pangular:open-source`,pageId:e,id:t,...n?{file:n.file,line:n.line}:{}})}static ɵfac=function(t){return new(t||e)};static ɵprov=kl({token:e,factory:e.ɵfac})};function TD(e){return e?.platform===`angular-native`}function ED(e){return TD(e)||e?.platform===`nativescript`}function DD(e,t){let n=Object.values(e??{}).filter(TD);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 OD=[`trigger`],kD=[`list`],AD=(e,t)=>t.value;function jD(e,t){if(e&1&&(H(0,`span`,4),J(1),U()),e&2){let e=K();M(),Y(e.current().hint)}}function MD(e,t){if(e&1&&(H(0,`span`,15),J(1),U()),e&2){let e=K().$implicit;M(),Y(e.hint)}}function ND(e,t){if(e&1){let e=W();H(0,`li`,11),Qg(`pointerenter`,function(){let t=O(e).$index;return k(K(2).active.set(t))})(`pointerdown`,function(e){return e.preventDefault()})(`click`,function(){let t=O(e).$index;return k(K(2).choose(t))}),A(),H(1,`svg`,12),Fg(2,`path`,13),U(),ps(),H(3,`span`,14),J(4),U(),P(5,MD,2,1,`span`,15),U()}if(e&2){let e=t.$implicit,n=t.$index,r=K(2);q(`active`,n===r.active())(`selected`,e.value===r.value()),N(`id`,r.uid+`-opt-`+n)(`aria-selected`,e.value===r.value())(`aria-disabled`,e.disabled||null),M(4),Y(e.label),M(),F(e.hint?5:-1)}}function PD(e,t){if(e&1&&(H(0,`li`,10),J(1),U()),e&2){let e=K(2);M(),Y(e.emptyText())}}function FD(e,t){if(e&1&&(H(0,`ul`,8,1),dg(`list-in`),Qg(`pointerdown`,function(e){return e.preventDefault()}),I(2,ND,6,9,`li`,9,AD,!1,PD,2,1,`li`,10),U()),e&2){let e=K();q(`up`,e.dropUp()),N(`id`,e.uid+`-list`)(`aria-labelledby`,e.labelledBy()||e.uid+`-trigger`),M(2),L(e.options())}}var ID=0,LD=class e{options=$.required();value=Fv(null);placeholder=$(`Select…`);ariaLabel=$(``);labelledBy=$(``);describedBy=$(``);disabled=$(!1);emptyText=$(`Nothing to choose`);uid=`app-select-${++ID}`;open=j(!1);active=j(-1);dropUp=j(!1);current=Q(()=>this.options().find(e=>e.value===this.value())??null);host=E(Ml);injector=E(xs);trigger=Rv.required(`trigger`);list=Rv(`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=Bh({type:e,selectors:[[`app-select`]],viewQuery:function(e,t){e&1&&e_(t.trigger,OD,5)(t.list,kD,5),e&2&&t_(2)},hostAttrs:[1,`app-select`],hostVars:2,hostBindings:function(e,t){e&1&&G(`pointerdown`,function(e){return t.onOutside(e)},Mu),e&2&&q(`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&&(H(0,`button`,2,0),Qg(`click`,function(){return t.toggle()})(`keydown`,function(e){return t.onKey(e)})(`blur`,function(e){return t.onBlur(e)}),H(2,`span`,3),J(3),U(),P(4,jD,2,1,`span`,4),A(),H(5,`svg`,5),Fg(6,`path`,6),U()(),P(7,FD,5,5,`ul`,7)),e&2&&(Vg(`disabled`,t.disabled()),N(`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),M(2),q(`placeholder`,!t.current()),M(),X(` `,t.current()?.label??t.placeholder(),` `),M(),F(t.current()?.hint?4:-1),M(3),F(t.open()?7:-1))},styles:[`[_nghost-%COMP%] { +}`]})},DD=`pangular:panel-action-result`,OD=6e3,kD=0;function AD(e=window){return e.location.protocol===`chrome-extension:`&&e.parent!==e}function jD(e,t=window){let n=`pa-${Date.now().toString(36)}-${++kD}`;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!==DD||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`}),OD);t.addEventListener(`message`,a),t.parent.postMessage({...e,requestId:n},t.location.origin)})}var MD=class e{available=AD();reveal(e,t){return jD({type:`pangular:reveal-element`,pageId:e,id:t})}openSource(e,t,n){return jD({type:`pangular:open-source`,pageId:e,id:t,...n?{file:n.file,line:n.line}:{}})}static ɵfac=function(t){return new(t||e)};static ɵprov=Al({token:e,factory:e.ɵfac})};function ND(e){return e?.platform===`angular-native`}function PD(e){return ND(e)||e?.platform===`nativescript`}function FD(e,t){let n=Object.values(e??{}).filter(ND);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 ID=[`trigger`],LD=[`list`],RD=(e,t)=>t.value;function zD(e,t){if(e&1&&(H(0,`span`,4),J(1),U()),e&2){let e=K();M(),Y(e.current().hint)}}function BD(e,t){if(e&1&&(H(0,`span`,15),J(1),U()),e&2){let e=K().$implicit;M(),Y(e.hint)}}function VD(e,t){if(e&1){let e=W();H(0,`li`,11),n_(`pointerenter`,function(){let t=O(e).$index;return k(K(2).active.set(t))})(`pointerdown`,function(e){return e.preventDefault()})(`click`,function(){let t=O(e).$index;return k(K(2).choose(t))}),A(),H(1,`svg`,12),zg(2,`path`,13),U(),ms(),H(3,`span`,14),J(4),U(),P(5,BD,2,1,`span`,15),U()}if(e&2){let e=t.$implicit,n=t.$index,r=K(2);q(`active`,n===r.active())(`selected`,e.value===r.value()),N(`id`,r.uid+`-opt-`+n)(`aria-selected`,e.value===r.value())(`aria-disabled`,e.disabled||null),M(4),Y(e.label),M(),F(e.hint?5:-1)}}function HD(e,t){if(e&1&&(H(0,`li`,10),J(1),U()),e&2){let e=K(2);M(),Y(e.emptyText())}}function UD(e,t){if(e&1&&(H(0,`ul`,8,1),hg(`list-in`),n_(`pointerdown`,function(e){return e.preventDefault()}),I(2,VD,6,9,`li`,9,RD,!1,HD,2,1,`li`,10),U()),e&2){let e=K();q(`up`,e.dropUp()),N(`id`,e.uid+`-list`)(`aria-labelledby`,e.labelledBy()||e.uid+`-trigger`),M(2),L(e.options())}}var WD=0,GD=class e{options=$.required();value=Uv(null);placeholder=$(`Select…`);ariaLabel=$(``);labelledBy=$(``);describedBy=$(``);disabled=$(!1);emptyText=$(`Nothing to choose`);uid=`app-select-${++WD}`;open=j(!1);active=j(-1);dropUp=j(!1);current=Q(()=>this.options().find(e=>e.value===this.value())??null);host=E(Nl);injector=E(Ss);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=Wh({type:e,selectors:[[`app-select`]],viewQuery:function(e,t){e&1&&c_(t.trigger,ID,5)(t.list,LD,5),e&2&&l_(2)},hostAttrs:[1,`app-select`],hostVars:2,hostBindings:function(e,t){e&1&&G(`pointerdown`,function(e){return t.onOutside(e)},Nu),e&2&&q(`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&&(H(0,`button`,2,0),n_(`click`,function(){return t.toggle()})(`keydown`,function(e){return t.onKey(e)})(`blur`,function(e){return t.onBlur(e)}),H(2,`span`,3),J(3),U(),P(4,zD,2,1,`span`,4),A(),H(5,`svg`,5),zg(6,`path`,6),U()(),P(7,UD,5,5,`ul`,7)),e&2&&(Gg(`disabled`,t.disabled()),N(`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),M(2),q(`placeholder`,!t.current()),M(),X(` `,t.current()?.label??t.placeholder(),` `),M(),F(t.current()?.hint?4:-1),M(3),F(t.open()?7:-1))},styles:[`[_nghost-%COMP%] { position: relative; display: inline-flex; min-width: 0; @@ -520,7 +520,7 @@ li.selected[_ngcontent-%COMP%] .check[_ngcontent-%COMP%] { .chevron[_ngcontent-%COMP%] { transition: none; } -}`]})};function RD(e,t){let n=t.trim().toLowerCase();if(!n)return{nodes:e,matches:0};let r=0,i=e=>e.name.toLowerCase().includes(n)||e.tag.toLowerCase().includes(n)||!!e.directives?.some(e=>e.toLowerCase().includes(n)),a=e=>e.flatMap(e=>{let t=i(e);t&&r++;let n=a(e.children);return t||n.length?[{...e,children:n}]:[]});return{nodes:a(e),matches:r}}function zD(e,t,n,r=!1){let i=r?`${e}+`:`${e}`;return n?`${t} of ${i}`:`${i} ${e===1&&!r?`instance`:`instances`}`}function BD(e,t,n,r=!1){return n.trim()?t?`${t} of ${r?`${e}+`:`${e}`} ${e===1&&!r?`instance`:`instances`} match.`:`No components match.`:``}function VD(e){let t=e?.components,n=e?.depth;return t&&n?`Showing the first ${t} component instances, and none nested more than ${n} elements deep. Others are not listed or searchable.`:t?`Showing the first ${t} component instances. Others are not listed or searchable.`:n?`Components nested more than ${n} elements deep are not listed or searchable.`:`The page has more components than the tree shows.`}function HD(e,t){let n=t?.detail?.id??null,r=t?.pageId??null;if(r!==e.pageId)return{pageId:r,selectedId:n,detailId:n,destroyed:null};let i=e.selectedId;return n&&n!==e.detailId&&n!==i&&(i=n),i&&t&&!t.truncated&&!UD(t.roots,i)?{pageId:r,selectedId:null,detailId:n,destroyed:i}:{pageId:r,selectedId:i,detailId:n,destroyed:null}}function UD(e,t){return e.some(e=>e.id===t||UD(e.children,t))}function WD(e,t,n){let r=e.indexOf(n);if(r<0)return null;for(let n=r+1;n=0;n--)if(t.has(e[n]))return e[n];return null}function GD(e){return new Date(e).toLocaleTimeString()}var KD=/[ \t\n\r]/;function qD(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;e0?0:-1)},styles:[`[_nghost-%COMP%] { +}`]})};function KD(e,t){let n=t.trim().toLowerCase();if(!n)return{nodes:e,matches:0};let r=0,i=e=>e.name.toLowerCase().includes(n)||e.tag.toLowerCase().includes(n)||!!e.directives?.some(e=>e.toLowerCase().includes(n)),a=e=>e.flatMap(e=>{let t=i(e);t&&r++;let n=a(e.children);return t||n.length?[{...e,children:n}]:[]});return{nodes:a(e),matches:r}}function qD(e,t,n,r=!1){let i=r?`${e}+`:`${e}`;return n?`${t} of ${i}`:`${i} ${e===1&&!r?`instance`:`instances`}`}function JD(e,t,n,r=!1){return n.trim()?t?`${t} of ${r?`${e}+`:`${e}`} ${e===1&&!r?`instance`:`instances`} match.`:`No components match.`:``}function YD(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 XD(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&&!ZD(t.roots,i)?{pageId:r,selectedId:null,detailId:n,destroyed:i}:{pageId:r,selectedId:i,detailId:n,destroyed:null}}function ZD(e,t){return e.some(e=>e.id===t||ZD(e.children,t))}function QD(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}function $D(e){return new Date(e).toLocaleTimeString()}var eO=/[ \t\n\r]/;function tO(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;e0?0:-1)},styles:[`[_nghost-%COMP%] { display: block; } @@ -547,7 +547,7 @@ a[_ngcontent-%COMP%] { a[_ngcontent-%COMP%]:focus-visible { outline: 2px solid var(--%NS%accent); outline-offset: 2px; -}`]})},ZD=(e,t)=>t.id;function QD(e,t){if(e&1){let e=W();z(0,`button`,13),G(`click`,function(){return O(e),k(K().clear())}),J(1,`Clear`),B()}}function $D(e,t){e&1&&(z(0,`p`,9),J(1,`This page can't record change detection. It needs Angular 20 or later.`),B())}function eO(e,t){if(e&1&&(z(0,`tr`)(1,`td`,17),J(2),B(),z(3,`td`,18),J(4),B(),z(5,`td`,18),J(6),B(),z(7,`td`,18),J(8),B()()),e&2){let e=t.$implicit,n=K(2);M(2),Y(e.name),M(2),Y(e.checks),M(2),Y(n.ms(e.ms)),M(2),Y(n.ms(e.maxMs))}}function tO(e,t){if(e&1&&(z(0,`span`,20),J(1,`after `),z(2,`span`,17),J(3),B()()),e&2){let e=K().$implicit;M(3),Y(e.trigger)}}function nO(e,t){if(e&1&&(z(0,`span`,21),J(1,` slowest `),z(2,`span`,17),J(3),B(),J(4),B()),e&2){let e=t,n=K(3);M(3),Y(e.name),M(),X(` `,n.ms(e.ms),` `)}}function rO(e,t){if(e&1&&(z(0,`li`)(1,`span`,19),J(2),B(),z(3,`span`,17),J(4),B(),z(5,`span`),J(6),B(),P(7,tO,4,1,`span`,20),P(8,nO,5,2,`span`,21),B()),e&2){let e,n=t.$implicit,r=K(2);M(2),Y(r.clock(n.at)),M(2),Y(r.ms(n.ms)),M(2),X_(` `,n.checks,` `,n.checks===1?`check`:`checks`,`, `,n.passes,` `,n.passes===1?`pass`:`passes`,` `),M(),F(n.trigger?7:-1),M(),F((e=n.components[0])?8:-1,e)}}function iO(e,t){if(e&1&&(z(0,`div`,11)(1,`div`)(2,`h3`),J(3,`Slowest components`),B(),z(4,`table`)(5,`thead`)(6,`tr`)(7,`th`,14),J(8,`Component`),B(),z(9,`th`,15),J(10,`Checks`),B(),z(11,`th`,15),J(12,`Self time`),B(),z(13,`th`,15),J(14,`Slowest`),B()()(),z(15,`tbody`),I(16,eO,9,4,`tr`,null,Cg),B()()(),z(18,`div`)(19,`h3`),J(20,`Latest cycles`),B(),z(21,`ol`,16),I(22,rO,9,8,`li`,null,ZD),B()()()),e&2){let e=K();M(16),L(e.slowest()),M(6),L(e.latest())}}function aO(e,t){e&1&&(z(0,`p`,12),J(1,`Use the app. Cycles show up here as Angular runs change detection.`),B())}var oO=10,sO=class e{page=$(null);pageId=$(null);rpc=$(null);message=j(``);announcement=j(``);recording=Q(()=>this.page()?.recording===!0);cycles=Q(()=>this.page()?.cycles??[]);maxCycles=Q(()=>xE(this.rpc()).limits.cdCycles);slowest=Q(()=>[...this.page()?.components??[]].sort((e,t)=>t.ms-e.ms).slice(0,oO));latest=Q(()=>this.cycles().slice(-30).reverse());status=Q(()=>{if(this.message())return this.message();let e=this.cycles().length;return 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 GD(e)}async toggle(){this.recording()?await this.send({on:!1},``,()=>{let e=this.cycles().length;return`Recording stopped. ${e} ${e===1?`cycle`:`cycles`} recorded.`}):await this.send({on:!0},`Starting…`,()=>`Recording started.`)}async clear(){await this.send({clear:!0},``,()=>`Cleared the recorded cycles.`)}async send(e,t,n){this.message.set(t);try{if(!this.rpc())throw Error(`no client`);await oE(this.rpc(),`request-change-detection-record`,{pageId:this.pageId(),...e}),this.message.set(``),this.announce(n())}catch{let e=`Could not reach the page.`;this.message.set(e),this.announce(e)}}announce(e){this.announcement.update(t=>t===e?`${e} `:e)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-cd-recording`]],inputs:{page:[1,`page`],pageId:[1,`pageId`],rpc:[1,`rpc`]},decls:18,vars:11,consts:[[`aria-labelledby`,`cd-heading`,1,`cd`],[1,`cd-head`],[`id`,`cd-heading`],[`type`,`button`,3,`click`,`disabled`],[`aria-hidden`,`true`,1,`dot`],[`type`,`button`],[1,`status`],[`role`,`status`,1,`sr-only`],[1,`hint`],[1,`note`],[`what`,`cycles`,`limit`,`cdCycles`,3,`dropped`,`max`],[1,`cd-grid`],[1,`empty`],[`type`,`button`,3,`click`],[`scope`,`col`],[`scope`,`col`,1,`num`],[`aria-label`,`Latest change detection cycles, newest first`,1,`cycles`],[1,`mono`],[1,`num`],[1,`when`],[1,`trigger`],[1,`top`]],template:function(e,t){e&1&&(z(0,`section`,0)(1,`div`,1)(2,`h2`,2),J(3,`Change detection`),B(),z(4,`button`,3),G(`click`,function(){return t.toggle()}),V(5,`span`,4),J(6),B(),P(7,QD,2,0,`button`,5),z(8,`p`,6),J(9),B(),z(10,`p`,7),J(11),B()(),z(12,`p`,8),J(13,` Records each change detection cycle with Angular's profiler: how long it took, how many components it checked and the output that ran before it. Tree rows show how often each instance was checked. Times come from a development build. `),B(),P(14,$D,2,0,`p`,9),V(15,`app-limit-note`,10),P(16,iO,24,0,`div`,11)(17,aO,2,0,`p`,12),B()),e&2&&(M(4),q(`on`,t.recording()),R(`disabled`,!t.pageId()),M(2),X(` `,t.recording()?`Stop recording`:`Record`,` `),M(),F(t.cycles().length?7:-1),M(2),Y(t.status()),M(2),Y(t.announcement()),M(3),F(t.page()?.supported===!1?14:-1),M(),R(`dropped`,t.page()?.dropped??0)(`max`,t.maxCycles()),M(),F(t.slowest().length?16:t.recording()?17:-1))},dependencies:[XD],styles:[`[_nghost-%COMP%] { +}`]})},aO=(e,t)=>t.id;function oO(e,t){if(e&1){let e=W();z(0,`button`,13),G(`click`,function(){return O(e),k(K().clear())}),J(1,`Clear`),B()}}function sO(e,t){e&1&&(z(0,`p`,9),J(1,`This page can't record change detection. It needs Angular 20 or later.`),B())}function cO(e,t){if(e&1&&(z(0,`tr`)(1,`td`,17),J(2),B(),z(3,`td`,18),J(4),B(),z(5,`td`,18),J(6),B(),z(7,`td`,18),J(8),B()()),e&2){let e=t.$implicit,n=K(2);M(2),Y(e.name),M(2),Y(e.checks),M(2),Y(n.ms(e.ms)),M(2),Y(n.ms(e.maxMs))}}function lO(e,t){if(e&1&&(z(0,`span`,20),J(1,`after `),z(2,`span`,17),J(3),B()()),e&2){let e=K().$implicit;M(3),Y(e.trigger)}}function uO(e,t){if(e&1&&(z(0,`span`,21),J(1,` slowest `),z(2,`span`,17),J(3),B(),J(4),B()),e&2){let e=t,n=K(3);M(3),Y(e.name),M(),X(` `,n.ms(e.ms),` `)}}function dO(e,t){if(e&1&&(z(0,`li`)(1,`span`,19),J(2),B(),z(3,`span`,17),J(4),B(),z(5,`span`),J(6),B(),P(7,lO,4,1,`span`,20),P(8,uO,5,2,`span`,21),B()),e&2){let e,n=t.$implicit,r=K(2);M(2),Y(r.clock(n.at)),M(2),Y(r.ms(n.ms)),M(2),iv(` `,n.checks,` `,n.checks===1?`check`:`checks`,`, `,n.passes,` `,n.passes===1?`pass`:`passes`,` `),M(),F(n.trigger?7:-1),M(),F((e=n.components[0])?8:-1,e)}}function fO(e,t){if(e&1&&(z(0,`div`,11)(1,`div`)(2,`h3`),J(3,`Slowest components`),B(),z(4,`table`)(5,`thead`)(6,`tr`)(7,`th`,14),J(8,`Component`),B(),z(9,`th`,15),J(10,`Checks`),B(),z(11,`th`,15),J(12,`Self time`),B(),z(13,`th`,15),J(14,`Slowest`),B()()(),z(15,`tbody`),I(16,cO,9,4,`tr`,null,Dg),B()()(),z(18,`div`)(19,`h3`),J(20,`Latest cycles`),B(),z(21,`ol`,16),I(22,dO,9,8,`li`,null,aO),B()()()),e&2){let e=K();M(16),L(e.slowest()),M(6),L(e.latest())}}function pO(e,t){e&1&&(z(0,`p`,12),J(1,`Use the app. Cycles show up here as Angular runs change detection.`),B())}var mO=10,hO=class e{page=$(null);pageId=$(null);rpc=$(null);message=j(``);announcement=j(``);recording=Q(()=>this.page()?.recording===!0);cycles=Q(()=>this.page()?.cycles??[]);maxCycles=Q(()=>kE(this.rpc()).limits.cdCycles);slowest=Q(()=>[...this.page()?.components??[]].sort((e,t)=>t.ms-e.ms).slice(0,mO));latest=Q(()=>this.cycles().slice(-30).reverse());status=Q(()=>{if(this.message())return this.message();let e=this.cycles().length;return 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 $D(e)}async toggle(){this.recording()?await this.send({on:!1},``,()=>{let e=this.cycles().length;return`Recording stopped. ${e} ${e===1?`cycle`:`cycles`} recorded.`}):await this.send({on:!0},`Starting…`,()=>`Recording started.`)}async clear(){await this.send({clear:!0},``,()=>`Cleared the recorded cycles.`)}async send(e,t,n){this.message.set(t);try{if(!this.rpc())throw Error(`no client`);await mE(this.rpc(),`request-change-detection-record`,{pageId:this.pageId(),...e}),this.message.set(``),this.announce(n())}catch{let e=`Could not reach the page.`;this.message.set(e),this.announce(e)}}announce(e){this.announcement.update(t=>t===e?`${e} `:e)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-cd-recording`]],inputs:{page:[1,`page`],pageId:[1,`pageId`],rpc:[1,`rpc`]},decls:18,vars:11,consts:[[`aria-labelledby`,`cd-heading`,1,`cd`],[1,`cd-head`],[`id`,`cd-heading`],[`type`,`button`,3,`click`,`disabled`],[`aria-hidden`,`true`,1,`dot`],[`type`,`button`],[1,`status`],[`role`,`status`,1,`sr-only`],[1,`hint`],[1,`note`],[`what`,`cycles`,`limit`,`cdCycles`,3,`dropped`,`max`],[1,`cd-grid`],[1,`empty`],[`type`,`button`,3,`click`],[`scope`,`col`],[`scope`,`col`,1,`num`],[`aria-label`,`Latest change detection cycles, newest first`,1,`cycles`],[1,`mono`],[1,`num`],[1,`when`],[1,`trigger`],[1,`top`]],template:function(e,t){e&1&&(z(0,`section`,0)(1,`div`,1)(2,`h2`,2),J(3,`Change detection`),B(),z(4,`button`,3),G(`click`,function(){return t.toggle()}),V(5,`span`,4),J(6),B(),P(7,oO,2,0,`button`,5),z(8,`p`,6),J(9),B(),z(10,`p`,7),J(11),B()(),z(12,`p`,8),J(13,` Records each change detection cycle with Angular's profiler: how long it took, how many components it checked and the output that ran before it. Tree rows show how often each instance was checked. Times come from a development build. `),B(),P(14,sO,2,0,`p`,9),V(15,`app-limit-note`,10),P(16,fO,24,0,`div`,11)(17,pO,2,0,`p`,12),B()),e&2&&(M(4),q(`on`,t.recording()),R(`disabled`,!t.pageId()),M(2),X(` `,t.recording()?`Stop recording`:`Record`,` `),M(),F(t.cycles().length?7:-1),M(2),Y(t.status()),M(2),Y(t.announcement()),M(3),F(t.page()?.supported===!1?14:-1),M(),R(`dropped`,t.page()?.dropped??0)(`max`,t.maxCycles()),M(),F(t.slowest().length?16:t.recording()?17:-1))},dependencies:[iO],styles:[`[_nghost-%COMP%] { display: block; margin-top: 16px; } @@ -703,7 +703,42 @@ td.mono[_ngcontent-%COMP%] { .trigger[_ngcontent-%COMP%] .mono[_ngcontent-%COMP%], .top[_ngcontent-%COMP%] .mono[_ngcontent-%COMP%] { overflow-wrap: anywhere; -}`]})},cO=[`filterInput`],lO=()=>[],uO=(e,t)=>t.node.id,dO=(e,t)=>t.outlet+t.route,fO=(e,t)=>t.formId,pO=(e,t)=>t.name+e,mO=(e,t)=>t.name,hO=(e,t)=>t.token+e,gO=(e,t)=>t.id;function _O(e,t){return this.sourceKey(t)}function vO(e,t){if(e&1){let e=W();z(0,`span`,28),J(1,`Page`),B(),z(2,`app-select`,29),G(`valueChange`,function(t){return O(e),k(K(2).selectPage(t))}),B()}if(e&2){let e=K(2);M(2),R(`options`,e.pageOptions())(`value`,e.page()?.pageId??null)}}function yO(e,t){if(e&1){let e=W();z(0,`button`,30),G(`click`,function(){O(e);let t=K(2);return k(t.picking()?t.cancelPick():t.pick())}),A(),z(1,`svg`,10),V(2,`path`,31),B(),J(3),B()}if(e&2){let e=K(2);q(`on`,e.picking()),M(3),X(` `,e.picking()?`Cancel pick`:`Pick component on page`,` `)}}function bO(e,t){if(e&1&&(z(0,`p`,17),J(1),B()),e&2){let e=K(2);M(),Y(e.pickMessage())}}function xO(e,t){if(e&1&&(z(0,`p`,18),J(1),B()),e&2){let e=K(2);M(),Y(e.truncationText())}}function SO(e,t){e&1&&(z(0,`p`,33),J(1,`The filter only searches the components the tree lists.`),B())}function CO(e,t){if(e&1){let e=W();z(0,`div`,21)(1,`p`,32),J(2),B(),P(3,SO,2,0,`p`,33),z(4,`button`,34),G(`click`,function(){return O(e),k(K(2).clearFilter())}),J(5,`Clear filter`),B()()}if(e&2){let e=K(2);M(2),X(`No components match “`,e.filter().trim(),`”`),M(),F(e.page().truncated?3:-1)}}function wO(e,t){if(e&1){let e=W();z(0,`span`,43),G(`click`,function(t){O(e);let n=K().$implicit;return k(K(2).toggle(n.node.id,t))}),A(),z(1,`svg`,44),V(2,`path`,45),B()()}if(e&2){let e=K().$implicit;q(`open`,e.expanded)}}function TO(e,t){e&1&&V(0,`span`,37)}function EO(e,t){if(e&1&&(z(0,`span`,40),J(1),B()),e&2){let e=t.$implicit;M(),Y(e.route||`/`)}}function DO(e,t){if(e&1&&(z(0,`span`,41),J(1),z(2,`span`,20),J(3),B()()),e&2){let e=t;M(),X(` `,e),M(2),X(` `,e===1?`check`:`checks`,` while recording`)}}function OO(e,t){if(e&1&&(z(0,`span`,42),J(1),z(2,`span`,20),J(3),B()()),e&2){let e=K().$implicit;N(`title`,e.node.directives.join(`, `)),M(),X(` +`,e.node.directives.length,` `),M(2),X(` `,e.node.directives.length===1?`directive`:`directives`,` `)}}function kO(e,t){if(e&1){let e=W();z(0,`div`,35),G(`click`,function(){let t=O(e).$implicit;return k(K(2).select(t.node.id))})(`focus`,function(){let t=O(e).$implicit,n=K(2);return n.focusId.set(t.node.id),k(n.highlight(t.node.id))})(`blur`,function(){return O(e),k(K(2).highlight(null))})(`mouseenter`,function(){let t=O(e).$implicit;return k(K(2).highlight(t.node.id))})(`mouseleave`,function(){return O(e),k(K(2).highlight(null))}),P(1,wO,3,2,`span`,36)(2,TO,1,0,`span`,37),z(3,`span`,38),J(4),B(),z(5,`span`,39),J(6),B(),I(7,EO,2,1,`span`,40,dO),P(9,DO,4,2,`span`,41),P(10,OO,4,3,`span`,42),B()}if(e&2){let e,n=t.$implicit,r=K(2);C_(`--%NS%depth`,n.depth),q(`selected`,r.selectedId()===n.node.id),N(`aria-level`,n.depth+1)(`aria-expanded`,n.hasChildren?n.expanded:null)(`aria-selected`,r.selectedId()===n.node.id)(`tabindex`,r.rovingId()===n.node.id?0:-1)(`data-id`,n.node.id),M(),F(n.hasChildren?1:2),M(3),Y(n.node.name),M(2),X(`<`,n.node.tag,`>`),M(),L(r.routedById().get(n.node.id)??ov(14,lO)),M(2),F((e=r.cdHosts()[n.node.id])?9:-1,e),M(),F(n.node.directives?.length?10:-1)}}function AO(e,t){if(e&1&&(z(0,`p`,50),J(1),B()),e&2){let e=t;M(),Z(``,e.file,`:`,e.line)}}function jO(e,t){if(e&1){let e=W();z(0,`div`,52)(1,`button`,34),G(`click`,function(){O(e);let t=K();return k(K(2).revealInElements(t))}),J(2,`Reveal in Elements`),B(),z(3,`button`,34),G(`click`,function(){O(e);let t=K();return k(K(2).openSource(t))}),J(4,`Open source`),B()(),z(5,`p`,53),J(6),B()}if(e&2){let e=K(3);M(6),Y(e.actionMessage())}}function MO(e,t){if(e&1){let e=W();z(0,`button`,56),G(`click`,function(){let t=O(e).$implicit;return k(K(5).showForm.emit(t.formId))}),J(1),B()}if(e&2){let e=t.$implicit;M(),X(` Show `,e.label,` in Forms `)}}function NO(e,t){if(e&1&&(z(0,`div`,54),I(1,MO,2,1,`button`,55,fO),B()),e&2){let e=K(),t=K(3);M(),L(t.formsIn(e.file))}}function PO(e,t){e&1&&P(0,NO,3,0,`div`,54),e&2&&F(K(3).formsIn(t.file).length?0:-1)}function FO(e,t){if(e&1&&(z(0,`dt`),J(1,`Routed`),B(),z(2,`dd`,58),J(3),B()),e&2){let e=t.$implicit;M(3),Z(``,e.route||`/`,` in outlet `,e.outlet)}}function IO(e,t){if(e&1&&(z(0,`span`,67),J(1),B()),e&2){let e=K().$implicit;M(),X(`(`,e.prop,`)`)}}function LO(e,t){if(e&1&&(z(0,`li`,65)(1,`span`,66),J(2),P(3,IO,2,1,`span`,67),B(),z(4,`pre`),J(5),dv(6,`json`),B()()),e&2){let e=t.$implicit;M(2),X(` `,e.name,` `),M(),F(e.prop===e.name?-1:3),M(2),Y(pv(6,3,e.value))}}function RO(e,t){if(e&1&&(z(0,`ul`,61),I(1,LO,7,5,`li`,65,mO),B()),e&2){let e=K();M(),L(e.inputs)}}function zO(e,t){e&1&&(z(0,`p`,62),J(1,`No inputs.`),B())}function BO(e,t){if(e&1&&(z(0,`li`,69)(1,`span`,58),J(2),B(),z(3,`span`,70),J(4),B()()),e&2){let e=t.$implicit;q(`on`,e.listened),M(2),Y(e.name),M(2),Y(e.listened?`listened`:`no listener`)}}function VO(e,t){if(e&1&&(z(0,`ul`,63),I(1,BO,5,4,`li`,68,mO),B()),e&2){let e=K();M(),L(e.outputs)}}function HO(e,t){e&1&&(z(0,`p`,62),J(1,`No outputs.`),B())}function UO(e,t){if(e&1&&(z(0,`span`,71),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.kind)}}function WO(e,t){if(e&1&&(z(0,`li`,65)(1,`span`,66),J(2),P(3,UO,2,1,`span`,71),B(),z(4,`pre`),J(5),dv(6,`json`),B()()),e&2){let e=t.$implicit;M(2),X(` `,e.name,` `),M(),F(e.kind?3:-1),M(2),Y(pv(6,3,e.value))}}function GO(e,t){if(e&1&&(z(0,`ul`,61),I(1,WO,7,5,`li`,65,mO),B()),e&2){let e=K();M(),L(e.properties)}}function KO(e,t){e&1&&(z(0,`p`,62),J(1,`No other properties.`),B())}function qO(e,t){if(e&1&&(z(0,`li`,72),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function JO(e,t){if(e&1&&(z(0,`div`,59)(1,`h3`),J(2,` DOM listeners `),z(3,`span`,60),J(4),B()(),z(5,`ul`,63),I(6,qO,2,1,`li`,72,wg),B()()),e&2){let e=K();M(4),Y(e.listeners.length),M(2),L(e.listeners)}}function YO(e,t){if(e&1&&(z(0,`li`,65)(1,`span`,66),J(2),B(),z(3,`pre`),J(4),dv(5,`json`),B()()),e&2){let e=t.$implicit;M(2),Y(e.name),M(2),Y(pv(5,2,e.value))}}function XO(e,t){if(e&1&&(z(0,`ul`,61),I(1,YO,6,4,`li`,65,mO),B()),e&2){let e=K().$implicit;M(),L(e.inputs)}}function ZO(e,t){if(e&1&&(z(0,`li`,69)(1,`span`,58),J(2),B(),z(3,`span`,70),J(4),B()()),e&2){let e=t.$implicit;q(`on`,e.listened),M(2),Y(e.name),M(2),Y(e.listened?`listened`:`no listener`)}}function QO(e,t){if(e&1&&(z(0,`ul`,63),I(1,ZO,5,4,`li`,68,mO),B()),e&2){let e=K().$implicit;M(),L(e.outputs)}}function $O(e,t){e&1&&(z(0,`p`,62),J(1,`No inputs or outputs.`),B())}function ek(e,t){if(e&1&&(z(0,`div`,59)(1,`h3`)(2,`span`,58),J(3),B(),z(4,`span`,71),J(5,`directive on host`),B()(),P(6,XO,3,0,`ul`,61),P(7,QO,3,0,`ul`,63),P(8,$O,2,0,`p`,62),B()),e&2){let e=t.$implicit;M(3),Y(e.name),M(3),F(e.inputs.length?6:-1),M(),F(e.outputs.length?7:-1),M(),F(!e.inputs.length&&!e.outputs.length?8:-1)}}function tk(e,t){if(e&1&&(z(0,`span`,71),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function nk(e,t){if(e&1&&(z(0,`span`,75),J(1,`from `),z(2,`span`,58),J(3),B()()),e&2){let e=K().$implicit;M(3),Y(e.providedByName??`an injector`)}}function rk(e,t){e&1&&(z(0,`span`,76),J(1,`not provided`),B())}function ik(e,t){if(e&1&&(z(0,`li`,73)(1,`span`,74),J(2),B(),I(3,tk,2,1,`span`,71,wg),P(5,nk,4,1,`span`,75)(6,rk,2,0,`span`,76),B()),e&2){let e=t.$implicit;M(2),Y(e.token),M(),L(e.flags),M(2),F(e.providedBy?5:6)}}function ak(e,t){if(e&1&&(z(0,`ul`,64),I(1,ik,7,2,`li`,73,hO),B()),e&2){let e=K();M(),L(e.dependencies)}}function ok(e,t){e&1&&(z(0,`p`,62),J(1,`Nothing is injected through the constructor or inject().`),B())}function sk(e,t){if(e&1&&(z(0,`dl`,57)(1,`dt`),J(2,`Change detection`),B(),z(3,`dd`),J(4),B(),z(5,`dt`),J(6,`Encapsulation`),B(),z(7,`dd`),J(8),B(),z(9,`dt`),J(10,`Host path`),B(),z(11,`dd`,58),J(12),B(),I(13,FO,4,2,null,null,dO),B(),z(15,`div`,59)(16,`h3`),J(17,` Inputs `),z(18,`span`,60),J(19),B()(),P(20,RO,3,0,`ul`,61)(21,zO,2,0,`p`,62),B(),z(22,`div`,59)(23,`h3`),J(24,` Outputs `),z(25,`span`,60),J(26),B()(),P(27,VO,3,0,`ul`,63)(28,HO,2,0,`p`,62),B(),z(29,`div`,59)(30,`h3`),J(31,` Properties `),z(32,`span`,60),J(33),B()(),P(34,GO,3,0,`ul`,61)(35,KO,2,0,`p`,62),B(),P(36,JO,8,1,`div`,59),I(37,ek,9,4,`div`,59,pO),z(39,`div`,59)(40,`h3`),J(41,` Injected `),z(42,`span`,60),J(43),B()(),P(44,ak,3,0,`ul`,64)(45,ok,2,0,`p`,62),B()),e&2){let e=t,n=K(),r=K(2);M(4),Y(e.changeDetection??`Unknown`),M(4),Y(e.encapsulation??`Unknown`),M(4),Y(e.path),M(),L(r.routedById().get(n.id)??ov(12,lO)),M(6),Y(e.inputs.length),M(),F(e.inputs.length?20:21),M(6),Y(e.outputs.length),M(),F(e.outputs.length?27:28),M(6),Y(e.properties?.length??0),M(),F(e.properties?.length?34:35),M(2),F(e.listeners.length?36:-1),M(),L(e.directives),M(6),Y(e.dependencies.length),M(),F(e.dependencies.length?44:45)}}function ck(e,t){e&1&&(z(0,`div`,51),V(1,`span`,77),z(2,`p`,33),J(3,`Reading live values from the page…`),B()())}function lk(e,t){if(e&1&&(z(0,`section`,24)(1,`header`,46)(2,`span`,47),J(3,`component`),B(),z(4,`h2`,48),J(5),B(),z(6,`span`,49),J(7),B(),P(8,AO,2,2,`p`,50),P(9,jO,7,1),P(10,PO,1,1),B(),P(11,sk,46,13)(12,ck,4,0,`div`,51),B()),e&2){let e,n,r,i=t,a=K(2);M(5),Y(i.name),M(2),X(`<`,i.tag,`>`),M(),F((e=a.whereOf(i))?8:-1,e),M(),F(a.devtoolsActions()?9:-1),M(),F((n=a.sourceFor(i))?10:-1,n),M(),F((r=a.detail())?11:12,r)}}function uk(e,t){e&1&&(z(0,`p`,32),J(1,`The selected component was destroyed`),B(),z(2,`p`,33)(3,`span`,58),J(4),B(),J(5,` is no longer on the page. Select another component to see its live values. `),B()),e&2&&(M(4),Y(t))}function dk(e,t){e&1&&(z(0,`p`,33),J(1,` Select a component to see its live inputs, properties, outputs, change detection and injected services. `),B())}function fk(e,t){if(e&1&&(z(0,`div`,25),P(1,uk,6,1)(2,dk,2,0,`p`,33),B()),e&2){let e,t=K(2);M(),F((e=t.destroyed())?1:2,e)}}function pk(e,t){e&1&&(z(0,`span`,71),J(1,`hydrate never`),B())}function mk(e,t){if(e&1&&(z(0,`span`,71),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.hydration)}}function hk(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,80),G(`click`,function(){let t=O(e).$implicit;return k(K(3).showOwner(t))})(`focus`,function(){let t=O(e).$implicit;return k(K(3).highlightBlock(t))})(`blur`,function(){return O(e),k(K(3).highlight(null))})(`mouseenter`,function(){let t=O(e).$implicit;return k(K(3).highlightBlock(t))})(`mouseleave`,function(){return O(e),k(K(3).highlight(null))}),z(2,`span`,38),J(3),B(),z(4,`span`,81),J(5),B(),P(6,pk,2,0,`span`,71)(7,mk,2,1,`span`,71),z(8,`span`,82),J(9),B()()()}if(e&2){let e=t.$implicit;M(),N(`aria-disabled`,e.owner?null:`true`),M(2),Y(e.owner?.name??`Unknown component`),M(),w_(`defer-state-`+e.state),M(),Y(e.state),M(),F(e.hydrateNever?6:e.hydration===`not-configured`?-1:7),M(3),Y(e.triggers.join(`, `)||`no triggers`)}}function gk(e,t){if(e&1&&(z(0,`section`,26)(1,`h2`,78),J(2,` Defer blocks `),z(3,`span`,60),J(4),B()(),z(5,`ul`,79),I(6,hk,10,7,`li`,null,gO),B()()),e&2){let e=K(2);M(4),Y(e.deferBlocks().length),M(2),L(e.deferBlocks())}}function _k(e,t){if(e&1&&V(0,`app-cd-recording`,27),e&2){let e=K(2);R(`page`,e.cdPage())(`pageId`,e.page().pageId)(`rpc`,e.rpc())}}function vk(e,t){if(e&1){let e=W();z(0,`p`,1),J(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. `),B(),z(2,`div`,2)(3,`div`,3),A(),z(4,`svg`,4),V(5,`circle`,5)(6,`path`,6),B(),ps(),z(7,`input`,7,0),G(`input`,function(t){return O(e),k(K().setFilter(t.target.value))})(`keydown.escape`,function(){return O(e),k(K().setFilter(``))}),B()(),P(9,vO,3,2),z(10,`span`,8),J(11),B(),z(12,`button`,9),G(`click`,function(){return O(e),k(K().expandAll())}),A(),z(13,`svg`,10),V(14,`path`,11)(15,`path`,12),B(),J(16,` Expand all `),B(),ps(),z(17,`button`,9),G(`click`,function(){return O(e),k(K().collapseAll())}),A(),z(18,`svg`,10),V(19,`path`,13)(20,`path`,14),B(),J(21,` Collapse all `),B(),P(22,yO,4,3,`button`,15),B(),ps(),z(23,`p`,16),J(24),B(),P(25,bO,2,1,`p`,17),P(26,xO,2,1,`p`,18),z(27,`div`,19)(28,`div`)(29,`h2`,20),J(30,`Component tree`),B(),P(31,CO,6,2,`div`,21),z(32,`div`,22),G(`keydown`,function(t){return O(e),k(K().onTreeKey(t))}),I(33,kO,11,15,`div`,23,uO),B()(),P(35,lk,13,6,`section`,24)(36,fk,3,1,`div`,25),B(),P(37,gk,8,1,`section`,26),P(38,_k,1,3,`app-cd-recording`,27)}if(e&2){let e,t=K();M(7),R(`value`,t.filter()),M(2),F(t.pageOptions().length>1?9:-1),M(2),Y(t.countLabel()),M(),R(`disabled`,!!t.filter().trim()),M(5),R(`disabled`,!!t.filter().trim()),M(5),F(t.native()?-1:22),M(2),Y(t.announcement()),M(),F(t.pickMessage()?25:-1),M(),F(t.page().truncated?26:-1),M(5),F(t.rows().length?-1:31),M(),R(`hidden`,!t.rows().length),M(),L(t.rows()),M(2),F((e=t.selectedNode())?35:36,e),M(2),F(t.deferBlocks().length?37:-1),M(),F(!t.staticReport()&&!t.native()?38:-1)}}function yk(e,t){e&1&&(z(0,`p`,18),J(1,` The page reported no component instances. The live tree needs a development build with Angular's debug API. Showing what the source declares instead. `),B())}function bk(e,t){e&1&&(z(0,`p`,83),J(1,` No page is connected, so this lists what the source declares. Open the app in a browser with the devtools connected to see each rendered instance. `),B())}function xk(e,t){if(e&1&&J(0),e&2){let e=K(3);Z(` `,e.filteredSource().length,` of `,e.source().length,` `)}}function Sk(e,t){if(e&1&&J(0),e&2){let e=K(3);X_(` `,e.sourceCounts().components,` `,e.sourceCounts().components===1?`component`:`components`,` · `,e.sourceCounts().directives,` `,e.sourceCounts().directives===1?`directive`:`directives`,` `)}}function Ck(e,t){if(e&1&&(z(0,`span`,85),P(1,xk,1,2)(2,Sk,1,4),B()),e&2){let e=K(2);M(),F(e.filter().trim()?1:2)}}function wk(e,t){e&1&&(z(0,`div`,89),V(1,`span`,77),z(2,`p`,32),J(3,`Scanning components…`),B()())}function Tk(e,t){e&1&&(J(0,` Run `),z(1,`code`),J(2,`pangular build`),B(),J(3,` again to rebuild the report. `))}function Ek(e,t){e&1&&J(0,` Check that the dev server is running, then try again. `)}function Dk(e,t){if(e&1){let e=W();z(0,`div`,90)(1,`p`,32),J(2,`Could not load components`),B(),z(3,`p`,33),P(4,Tk,4,0)(5,Ek,1,0),B(),z(6,`button`,34),G(`click`,function(){return O(e),k(K(2).refresh())}),J(7,`Retry`),B()()}if(e&2){let e=K(2);M(4),F(e.staticReport()?4:5)}}function Ok(e,t){e&1&&(z(0,`div`,91)(1,`p`,32),J(2,`No components found`),B(),z(3,`p`,33),J(4,`No @Component or @Directive was found in the source.`),B()())}function kk(e,t){if(e&1){let e=W();z(0,`div`,91)(1,`p`,32),J(2),B(),z(3,`button`,34),G(`click`,function(){return O(e),k(K(2).clearFilter())}),J(4,`Clear filter`),B()()}if(e&2){let e=K(2);M(2),X(`No components match “`,e.filter().trim(),`”`)}}function Ak(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` `,K(3).bareName(e.className),` · `)}}function jk(e,t){if(e&1&&(z(0,`dt`),J(1,`Change detection`),B(),z(2,`dd`),J(3),B()),e&2){let e=K(2).$implicit;M(3),Y(e.changeDetection??`Unknown`)}}function Mk(e,t){if(e&1){let e=W();z(0,`button`,56),G(`click`,function(){let t=O(e).$implicit;return k(K(5).showForm.emit(t.formId))}),J(1),B()}if(e&2){let e=t.$implicit;M(),X(` Show `,e.label,` in Forms `)}}function Nk(e,t){if(e&1&&(z(0,`div`,101)(1,`dl`,57)(2,`dt`),J(3,`Class`),B(),z(4,`dd`,58),J(5),B(),z(6,`dt`),J(7,`File`),B(),z(8,`dd`,58),J(9),B(),z(10,`dt`),J(11,`Standalone`),B(),z(12,`dd`),J(13),B(),P(14,jk,4,1),z(15,`dt`),J(16,`Inputs`),B(),z(17,`dd`,58),J(18),B(),z(19,`dt`),J(20,`Outputs`),B(),z(21,`dd`,58),J(22),B()(),I(23,Mk,2,1,`button`,55,fO),B()),e&2){let e=K(),t=e.$implicit,n=e.$index,r=K(3);R(`id`,`ct-source-`+n),M(5),Y(r.bareName(t.className)),M(4),Z(``,t.file,`:`,t.line),M(4),Y(t.isStandalone?`Yes`:`No`),M(),F(t.kind===`component`?14:-1),M(4),Y(t.inputs.join(`, `)||`None`),M(4),Y(t.outputs.join(`, `)||`None`),M(),L(r.formsIn(t.file))}}function Pk(e,t){if(e&1){let e=W();z(0,`li`,94)(1,`button`,95),G(`click`,function(){let t=O(e).$implicit,n=K(3);return k(n.openKey.set(n.openKey()===n.sourceKey(t)?null:n.sourceKey(t)))}),z(2,`span`,96),J(3),B(),z(4,`span`,97)(5,`span`,98),J(6),B(),z(7,`span`,99),P(8,Ak,1,1),J(9),B()(),A(),z(10,`svg`,100),V(11,`path`,45),B()(),P(12,Nk,25,8,`div`,101),B()}if(e&2){let e=t.$implicit,n=t.$index,r=K(3);q(`expanded`,r.openKey()===r.sourceKey(e)),M(),N(`aria-expanded`,r.openKey()===r.sourceKey(e))(`aria-controls`,r.openKey()===r.sourceKey(e)?`ct-source-`+n:null),M(),q(`directive`,e.kind===`directive`),M(),Y(e.kind),M(3),Y(r.sourceLabel(e)),M(2),F(e.selector?8:-1),M(),Z(` `,e.file,`:`,e.line,` `),M(3),F(r.openKey()===r.sourceKey(e)?12:-1)}}function Fk(e,t){if(e&1&&(z(0,`ul`,92),I(1,Pk,13,12,`li`,93,_O,!0),B()),e&2){let e=K(2);M(),L(e.filteredSource())}}function Ik(e,t){if(e&1){let e=W();P(0,yk,2,0,`p`,18)(1,bk,2,0,`p`,83),z(2,`div`,2)(3,`div`,3),A(),z(4,`svg`,4),V(5,`circle`,5)(6,`path`,6),B(),ps(),z(7,`input`,84,0),G(`input`,function(t){return O(e),k(K().filter.set(t.target.value))})(`keydown.escape`,function(){return O(e),k(K().filter.set(``))}),B()(),P(9,Ck,3,1,`span`,85),z(10,`button`,86),G(`click`,function(){return O(e),k(K().refresh())}),A(),z(11,`svg`,10),V(12,`path`,87)(13,`path`,88),B(),J(14,` Refresh `),B()(),P(15,wk,4,0,`div`,89)(16,Dk,8,1,`div`,90)(17,Ok,5,0,`div`,91)(18,kk,5,1,`div`,91)(19,Fk,3,0,`ul`,92)}if(e&2){let e=K();F(+!e.page()),M(7),R(`value`,e.filter()),M(2),F(e.source().length?9:-1),M(),q(`spinning`,e.loading()),N(`aria-busy`,e.loading()),M(5),F(e.loading()&&!e.source().length?15:e.error()&&!e.source().length?16:e.source().length?e.filteredSource().length?19:18:17)}}function Lk(e){return e.replace(/^_(?=[A-Z])/,``)}var Rk=class e{rpc=$(null);staticReport=Q(()=>cE(this.rpc()));focus=$(null);showForm=Ov();focusHandled=Ov();filter=j(``);loading=j(!1);error=j(!1);source=j([]);formOwners=j([]);pages=j({});chosenPageId=j(null);selectedId=j(null);destroyed=j(null);announcement=j(``);picking=j(!1);pickMessage=j(``);pickPageId=null;pickSeq=0;focusId=j(null);bridge=E(wD);actionMessage=Tv({source:this.selectedId,computation:()=>``});collapsed=j(new Set);openKey=j(null);routerPages=j([]);pageId=nE();destroyRef=E(Cs);injector=E(xs);host=E(Ml);filterInput=Rv(`filterInput`);cleanups=[];selection={pageId:null,detailId:null};shownPageId=Tv({source:()=>({pages:this.pages(),chosen:this.chosenPageId()}),computation:({pages:e,chosen:t},n)=>rE(e,{chosen:t,host:this.pageId,previous:n?.value??null})});page=Q(()=>{let e=this.shownPageId();return e?this.pages()[e]??null:null});pageOptions=Q(()=>Object.values(this.pages()).map(e=>({value:e.pageId,label:e.title||e.url||`Page ${e.pageId}`,hint:e.url})));live=Q(()=>(this.page()?.roots.length??0)>0);native=Q(()=>ED(this.page()));devtoolsActions=Q(()=>this.bridge.available&&!!this.page()&&!this.native()&&!this.staticReport());cdPages=j({});cdPage=Q(()=>{let e=this.page()?.pageId;return e?this.cdPages()[e]??null:null});cdHosts=Q(()=>this.cdPage()?.hosts??{});index=Q(()=>{let e=new Map,t=new Map,n=(r,i)=>{for(let a of r)e.set(a.id,a),i&&t.set(a.id,i),n(a.children,a.id)};return n(this.page()?.roots??[],null),{map:e,parents:t}});query=Q(()=>this.filter().trim().toLowerCase());filtered=Q(()=>RD(this.page()?.roots??[],this.query()));deferBlocks=Q(()=>this.page()?.deferBlocks??[]);countLabel=Q(()=>zD(this.page()?.count??0,this.filtered().matches,!!this.query(),!!this.page()?.truncated));truncationText=Q(()=>VD(this.page()?.truncatedBy));rows=Q(()=>{let e=[],t=this.collapsed(),n=!!this.query(),r=(i,a)=>{for(let o of i){let i=n||!t.has(o.id);e.push({node:o,depth:a,hasChildren:o.children.length>0,expanded:i}),i&&r(o.children,a+1)}};return r(this.filtered().nodes,0),e});selectedNode=Q(()=>{let e=this.selectedId();return e?this.index().map.get(e)??null:null});detail=Q(()=>{let e=this.page()?.detail;return e&&e.id===this.selectedId()?e:null});rovingId=Q(()=>{let e=this.rows(),t=new Set(e.map(e=>e.node.id)),n=this.focusId();if(n&&t.has(n))return n;let r=this.selectedId();return r&&t.has(r)?r:e[0]?.node.id??null});outlets=Q(()=>{let e=this.page()?.pageId;return this.routerPages().find(t=>t.pageId===e)?.outlets??[]});routedById=Q(()=>{let e=new Map,t=n=>{for(let r of n){if(r.activated&&r.devtoolsId){let t=e.get(r.devtoolsId)??[];t.push({route:r.route??``,outlet:r.outlet}),e.set(r.devtoolsId,t)}r.children&&t(r.children)}};return t(this.outlets()),e});sourceByClass=Q(()=>{let e=new Map;for(let t of this.source()){let n=Lk(t.className);e.set(n,[...e.get(n)??[],t])}return e});filteredSource=Q(()=>{let e=this.query(),t=this.source();return e?t.filter(t=>t.selector.toLowerCase().includes(e)||t.className.toLowerCase().includes(e)||t.file.toLowerCase().includes(e)):t});sourceCounts=Q(()=>{let e=this.source().filter(e=>e.kind===`component`).length;return{components:e,directives:this.source().length-e}});constructor(){uc(()=>{let e=this.page()?.pageId??null;Cv(()=>{this.picking()&&e!==this.pickPageId&&this.dropPick()})}),uc(()=>{let e=this.rpc();e&&(this.refresh(),this.watch(e))}),uc(()=>{let e=this.focus();if(!e)return;let t=this.page()?.pageId??null;if(e.pageId&&t!==e.pageId&&this.pages()[e.pageId]){Cv(()=>this.selectPage(e.pageId));return}this.live()&&Cv(()=>{(!e.pageId||t===e.pageId)&&this.index().map.has(e.id)?this.reveal(e.id):this.announcement.set(`That component is no longer on the page.`),this.focusHandled.emit()})}),this.destroyRef.onDestroy(()=>{this.highlight(null);for(let e of this.cleanups.splice(0))e()})}async watch(e){for(let e of this.cleanups.splice(0))e();let t=e.scope(`pangular`);try{let e=await t.rpc.sharedState(`component-tree`);if(this.destroyRef.destroyed)return;let n=e=>{let t=e?.pages;this.applyPages(t&&typeof t==`object`?t:{})};n(e.value()),this.cleanups.push(e.on(`updated`,n))}catch{this.applyPages({})}try{let e=await t.rpc.sharedState(`change-detection`);if(this.destroyRef.destroyed)return;let n=e=>{let t=e?.pages;this.cdPages.set(t&&typeof t==`object`?t:{})};n(e.value()),this.cleanups.push(e.on(`updated`,n))}catch{this.cdPages.set({})}try{let e=await t.rpc.sharedState(`router`);if(this.destroyRef.destroyed)return;let n=e=>{let t=e?.pages;this.routerPages.set(Array.isArray(t)?t:[])};n(e.value()),this.cleanups.push(e.on(`updated`,n))}catch{this.routerPages.set([])}}async refresh(){let e=this.rpc();if(!e)return;this.loading.set(!0);let t=e.scope(`pangular`);try{this.source.set(await t.rpc.call(`get-components`)),this.error.set(!1)}catch{this.error.set(!0)}finally{this.loading.set(!1)}let n=await t.rpc.call(`forms-owners`).catch(()=>[]);this.formOwners.set(n??[])}formsIn(e){return this.formOwners().filter(t=>t.file===e)}whereOf(e){return this.detail()?.source??this.sourceFor(e)}async revealInElements(e){let t=this.page()?.pageId;if(!t)return;this.actionMessage.set(``);let n=await this.bridge.reveal(t,e.id);this.selectedId()===e.id&&this.actionMessage.set(n.ok?``:`Could not reveal it. The component must be rendered in the tab these DevTools inspect.`)}async openSource(e){let t=this.page()?.pageId;if(!t)return;let n=this.whereOf(e);this.actionMessage.set(``);let r=await this.bridge.openSource(t,e.id,n);this.selectedId()===e.id&&(r.ok||this.actionMessage.set(n?`Not found in Sources. Open ${n.file}:${n.line} in your editor.`:`Could not open the source. The component must be rendered in the tab these DevTools inspect.`))}sourceFor(e){let t=(this.sourceByClass().get(Lk(e.name))??[]).filter(e=>e.kind===`component`);return t.find(t=>t.selector===e.tag)??t[0]??null}sourceKey(e){return`${e.file}#${e.className}`}sourceLabel(e){return e.selector?e.kind===`component`&&/^[a-z][\w-]*$/i.test(e.selector)?`<${e.selector}>`:e.selector:Lk(e.className)}bareName(e){return Lk(e)}applyPages(e){let t=document.activeElement,n=t instanceof HTMLElement&&this.host.nativeElement.contains(t)?t.closest(`.row`)?.dataset.id??null:null,r=n?this.rows().map(e=>e.node.id):[],i=this.index().map;if(this.pages.set(e),this.syncSelection(i),!n)return;let a=new Set(this.rows().map(e=>e.node.id));if(a.has(n))return;let o=WD(r,a,n);o&&(this.focusId.set(o),Id(()=>this.rowElement(o)?.focus(),{injector:this.injector}))}syncSelection(e=this.index().map){let t=this.page(),n=HD({...this.selection,selectedId:this.selectedId()},t?{pageId:t.pageId,roots:t.roots,detail:t.detail,truncated:t.truncated}:null),r=n.destroyed?e.get(n.destroyed)?.name:void 0;this.selection={pageId:n.pageId,detailId:n.detailId},n.selectedId!==this.selectedId()&&this.selectedId.set(n.selectedId),n.selectedId&&this.destroyed.set(null),n.destroyed&&(this.destroyed.set(r??`The component`),this.announcement.set(`The selected component was destroyed.`),this.sendSelection(null))}selectPage(e){e&&(this.chosenPageId.set(e),this.destroyed.set(null),this.syncSelection())}setFilter(e){this.filter.set(e);let{matches:t}=this.filtered();this.announcement.set(BD(this.page()?.count??0,t,e,!!this.page()?.truncated))}clearFilter(){this.live()?this.setFilter(``):this.filter.set(``),this.filterInput()?.nativeElement.focus()}async pick(){let e=this.rpc();if(!e||this.picking())return;let t=++this.pickSeq;this.pickPageId=this.page()?.pageId??null,this.picking.set(!0),this.say(`Click a component in the app. Press Escape to cancel.`);let n=await e.scope(`pangular`).rpc.call(`request-component-pick`,{pageId:this.pickPageId??void 0}).catch(()=>({ok:!1,error:`Could not reach the devtools server.`}));if(t===this.pickSeq){if(this.picking.set(!1),!n?.ok||!n.id){this.say(n?.error??`No component was picked.`);return}n.pageId&&n.pageId!==this.page()?.pageId&&this.selectPage(n.pageId),this.say(`Picked ${n.name??`a component`}.`),this.destroyed.set(null),this.index().map.has(n.id)?this.reveal(n.id):this.selectedId.set(n.id)}}cancelPick(){let e=this.rpc();e&&this.picking()&&e.scope(`pangular`).rpc.call(`cancel-component-pick`,{pageId:this.pickPageId??void 0}).catch(()=>{})}dropPick(){this.cancelPick(),this.pickSeq++,this.picking.set(!1),this.say(`Picking stopped because the page changed.`)}say(e){this.pickMessage.set(e),this.announcement.set(e)}sendSelection(e){let t=this.rpc();t&&t.scope(`pangular`).rpc.call(`select-component`,{pageId:this.page()?.pageId,id:e}).catch(()=>{})}rowElement(e){return this.host.nativeElement.querySelector(`.row[data-id="${CSS.escape(e)}"]`)}select(e){let t=this.selectedId()===e?null:e;this.selectedId.set(t),this.destroyed.set(null),this.focusId.set(e),this.sendSelection(t)}reveal(e){let{parents:t}=this.index();this.collapsed.update(n=>{let r=new Set(n);for(let n=t.get(e);n;n=t.get(n))r.delete(n);return r}),this.rows().some(t=>t.node.id===e)||this.setFilter(``),this.selectedId()!==e&&this.select(e),Id(()=>document.querySelector(`.row[data-id="${CSS.escape(e)}"]`)?.scrollIntoView({block:`nearest`}),{injector:this.injector})}toggle(e,t){t?.stopPropagation(),!this.query()&&this.collapsed.update(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}expandAll(){this.query()||(this.collapsed.set(new Set),this.announce(`Expanded every component.`))}collapseAll(){if(this.query())return;let{map:e,parents:t}=this.index(),n=this.rovingId(),r=new Set;for(let t of e.values())t.children.length&&r.add(t.id);if(this.collapsed.set(r),n){let e=new Set(this.rows().map(e=>e.node.id)),r=n;for(;r&&!e.has(r);)r=t.get(r);r&&this.focusId.set(r)}this.announce(`Collapsed every component. Only the top level is shown.`)}announce(e){this.announcement.update(t=>t===e?`${e}\u00a0`:e)}expandSiblings(e){if(this.query())return;let t=this.index().parents.get(e),n=t?this.index().map.get(t)?.children??[]:this.page()?.roots??[];this.collapsed.update(e=>{let t=new Set(e);for(let e of n)t.delete(e.id);return t})}highlight(e){let t=this.rpc();if(!t)return;let n=e?{pageId:this.page()?.pageId,id:e}:null;t.scope(`pangular`).rpc.call(`request-page-highlight`,n).catch(()=>{})}highlightBlock(e){this.highlight(e.rootIds[0]??e.owner?.id??null)}showOwner(e){e.owner&&this.index().map.has(e.owner.id)&&this.reveal(e.owner.id)}onTreeKey(e){let t=this.rows();if(!t.length)return;let n=t.findIndex(e=>e.node.id===this.rovingId()),r=Math.max(n,0),i=t[r],a=-1;switch(e.key){case`ArrowDown`:a=Math.min(r+1,t.length-1);break;case`ArrowUp`:a=Math.max(r-1,0);break;case`Home`:a=0;break;case`End`:a=t.length-1;break;case`ArrowRight`:i.hasChildren&&!i.expanded?this.toggle(i.node.id):i.hasChildren&&(a=r+1);break;case`ArrowLeft`:if(i.hasChildren&&i.expanded&&!this.query())this.toggle(i.node.id);else{let e=this.index().parents.get(i.node.id);a=t.findIndex(t=>t.node.id===e)}break;case`Enter`:case` `:this.select(i.node.id);break;case`*`:this.expandSiblings(i.node.id);break;default:return}if(e.preventDefault(),a>=0){let e=t[a].node.id;this.focusId.set(e),queueMicrotask(()=>{let t=document.querySelector(`.row[data-id="${CSS.escape(e)}"]`);t?.focus(),t?.scrollIntoView({block:`nearest`})})}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-component-tree`]],viewQuery:function(e,t){e&1&&e_(t.filterInput,cO,5),e&2&&t_()},hostBindings:function(e,t){e&1&&G(`keydown.escape`,function(){return t.cancelPick()})},inputs:{rpc:[1,`rpc`],focus:[1,`focus`]},outputs:{showForm:`showForm`,focusHandled:`focusHandled`},decls:2,vars:1,consts:[[`filterInput`,``],[1,`intro`],[1,`toolbar`],[1,`search`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`search-icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`type`,`search`,`placeholder`,`Filter by class, tag or directive…`,`aria-label`,`Filter components by class, tag or directive`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`value`],[1,`count`],[`type`,`button`,1,`tree-action`,3,`click`,`disabled`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`d`,`m7 15 5 5 5-5`],[`d`,`m7 9 5-5 5 5`],[`d`,`m7 20 5-5 5 5`],[`d`,`m7 4 5 5 5-5`],[`type`,`button`,1,`pick`,3,`on`],[`role`,`status`,1,`sr-only`],[1,`pick-message`],[`role`,`status`,1,`notice`],[1,`layout`],[1,`sr-only`],[1,`state`,`compact`,`tree`],[`role`,`tree`,`aria-label`,`Component instances`,1,`tree`,3,`keydown`,`hidden`],[`role`,`treeitem`,1,`row`,3,`selected`,`--%NS%depth`],[`aria-labelledby`,`ct-detail-title`,1,`detail`],[1,`detail`,`placeholder`],[`aria-labelledby`,`ct-defer-title`,1,`defer`],[3,`page`,`pageId`,`rpc`],[`id`,`ct-page-label`,1,`sr-only`],[`labelledBy`,`ct-page-label`,1,`page-select`,3,`valueChange`,`options`,`value`],[`type`,`button`,1,`pick`,3,`click`],[`d`,`M4 4l6.5 16 2.3-6.7L19.5 11z`],[1,`state-title`],[1,`state-hint`],[`type`,`button`,3,`click`],[`role`,`treeitem`,1,`row`,3,`click`,`focus`,`blur`,`mouseenter`,`mouseleave`],[`aria-hidden`,`true`,1,`twisty`,3,`open`],[`aria-hidden`,`true`,1,`twisty-space`],[1,`name`,`mono`],[1,`tag`,`mono`],[1,`routed`],[1,`checks`],[1,`dirs`],[`aria-hidden`,`true`,1,`twisty`,3,`click`],[`viewBox`,`0 0 24 24`],[`d`,`m9 6 6 6-6 6`],[1,`detail-head`],[1,`badge`],[`id`,`ct-detail-title`,1,`mono`],[1,`mono`,`muted`],[1,`where`,`mono`],[`role`,`status`,1,`state`,`compact`],[`role`,`group`,`aria-label`,`Chrome DevTools`,1,`actions`],[`role`,`status`,1,`where`,`action-message`],[1,`actions`],[`type`,`button`,1,`show-form`],[`type`,`button`,1,`show-form`,3,`click`],[1,`facts`],[1,`mono`],[1,`block`],[1,`pill`],[1,`props`],[1,`empty-line`],[1,`chips`],[1,`deps`],[1,`prop`],[1,`prop-name`,`mono`],[1,`muted`],[1,`chip`,3,`on`],[1,`chip`],[1,`chip-note`],[1,`flag`],[1,`chip`,`mono`],[1,`dep`],[1,`token`,`mono`],[1,`from`],[1,`from`,`missing`],[`aria-hidden`,`true`,1,`spinner`],[`id`,`ct-defer-title`,1,`defer-title`],[1,`defer-list`],[`type`,`button`,1,`defer-row`,3,`click`,`focus`,`blur`,`mouseenter`,`mouseleave`],[1,`defer-state`],[1,`triggers`,`mono`],[1,`notice`],[`type`,`search`,`placeholder`,`Filter by selector, class or file…`,`aria-label`,`Filter components by selector, class or file`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`value`],[`aria-live`,`polite`,1,`count`],[`type`,`button`,1,`refresh`,3,`click`],[`d`,`M20 12a8 8 0 1 1-2.34-5.66`],[`d`,`M20 4v5h-5`],[`role`,`status`,1,`state`],[`role`,`alert`,1,`state`],[1,`state`],[`role`,`list`,1,`source-list`],[1,`source-item`,3,`expanded`],[1,`source-item`],[`type`,`button`,1,`source-toggle`,3,`click`],[1,`kind-flag`],[1,`row-main`],[1,`selector`,`mono`],[1,`file`,`mono`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`chevron`],[1,`inline-detail`,3,`id`]],template:function(e,t){e&1&&P(0,vk,39,14)(1,Ik,20,7),e&2&&F(+!t.live())},dependencies:[LD,sO,ab],styles:[`[_nghost-%COMP%] { +}`]})},gO=[`*`];function _O(e,t){e&1&&J(0),e&2&&Y(K(2).label())}function vO(e,t){e&1&&o_(0,0,null,_O,1,1)}function yO(e,t){if(e&1&&(z(0,`span`,4),J(1),B()),e&2){let e=K(2);M(),Y(e.message())}}function bO(e,t){if(e&1){let e=W();z(0,`button`,2),G(`click`,function(){return O(e),k(K().open())}),Ug(1,3),B(),P(2,yO,2,1,`span`,4)}if(e&2){let e=K(),t=u_(1);R(`title`,`Open `+e.label()+` in your editor`),N(`aria-label`,`Open `+e.label()+` in your editor`),M(),R(`ngTemplateOutlet`,t),M(),F(e.message()?2:-1)}}function xO(e,t){if(e&1&&(z(0,`span`,1),Ug(1,3),B()),e&2){let e=K(),t=u_(1);R(`title`,e.label()),M(),R(`ngTemplateOutlet`,t)}}var SO=class e{source=j(j(null));client=Q(()=>this.source()());available=Q(()=>{let e=this.client();return!!e&&!gE(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 mE(this.client(),`open-in-editor`,{file:e,...t?{line:t}:{}});return n?.ok?{ok:!0}:{ok:!1,error:n?.error??`The server did not open it.`}}catch{return{ok:!1,error:`The server did not open it.`}}}static ɵfac=function(t){return new(t||e)};static ɵprov=Al({token:e,factory:e.ɵfac})};function CO(e,t){return t?`${e}:${t}`:e}var wO=class e{editor=E(SO);file=$.required();line=$(void 0);label=Q(()=>CO(this.file(),this.line()));message=j(``);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=Wh({type:e,selectors:[[`app-source-link`]],inputs:{file:[1,`file`],line:[1,`line`]},ngContentSelectors:gO,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&&(a_(),ag(0,vO,2,0,`ng-template`,null,0,wv),P(2,bO,3,4)(3,xO,2,2,`span`,1)),e&2&&(M(2),F(t.editor.available()?2:3))},dependencies:[sb],styles:[`[_nghost-%COMP%] { + display: inline; + min-width: 0; +} + +.source-link[_ngcontent-%COMP%] { + display: inline; + padding: 0; + border: 0; + border-radius: 2px; + background: none; + color: inherit; + font: inherit; + text-align: inherit; + text-decoration: underline dotted; + text-underline-offset: 2px; + cursor: pointer; + overflow-wrap: anywhere; +} + +.source-link[_ngcontent-%COMP%]:hover { + color: var(--%NS%accent-text); + text-decoration-style: solid; +} + +.source-link[_ngcontent-%COMP%]:focus-visible { + outline: 2px solid var(--%NS%accent); + outline-offset: 2px; +} + +.message[_ngcontent-%COMP%] { + margin-left: 6px; + color: var(--%NS%danger-text); + font-family: var(--%NS%font-sans); + font-size: 0.92em; +}`]})},TO=[`filterInput`],EO=()=>[],DO=(e,t)=>t.node.id,OO=(e,t)=>t.outlet+t.route,kO=(e,t)=>t.formId,AO=(e,t)=>t.name+e,jO=(e,t)=>t.name,MO=(e,t)=>t.token+e,NO=(e,t)=>t.id;function PO(e,t){return this.sourceKey(t)}function FO(e,t){if(e&1){let e=W();z(0,`span`,28),J(1,`Page`),B(),z(2,`app-select`,29),G(`valueChange`,function(t){return O(e),k(K(2).selectPage(t))}),B()}if(e&2){let e=K(2);M(2),R(`options`,e.pageOptions())(`value`,e.page()?.pageId??null)}}function IO(e,t){if(e&1){let e=W();z(0,`button`,30),G(`click`,function(){O(e);let t=K(2);return k(t.picking()?t.cancelPick():t.pick())}),A(),z(1,`svg`,10),V(2,`path`,31),B(),J(3),B()}if(e&2){let e=K(2);q(`on`,e.picking()),M(3),X(` `,e.picking()?`Cancel pick`:`Pick component on page`,` `)}}function LO(e,t){if(e&1&&(z(0,`p`,17),J(1),B()),e&2){let e=K(2);M(),Y(e.pickMessage())}}function RO(e,t){if(e&1&&(z(0,`p`,18),J(1),B()),e&2){let e=K(2);M(),Y(e.truncationText())}}function zO(e,t){e&1&&(z(0,`p`,33),J(1,`The filter only searches the components the tree lists.`),B())}function BO(e,t){if(e&1){let e=W();z(0,`div`,21)(1,`p`,32),J(2),B(),P(3,zO,2,0,`p`,33),z(4,`button`,34),G(`click`,function(){return O(e),k(K(2).clearFilter())}),J(5,`Clear filter`),B()()}if(e&2){let e=K(2);M(2),X(`No components match “`,e.filter().trim(),`”`),M(),F(e.page().truncated?3:-1)}}function VO(e,t){if(e&1){let e=W();z(0,`span`,43),G(`click`,function(t){O(e);let n=K().$implicit;return k(K(2).toggle(n.node.id,t))}),A(),z(1,`svg`,44),V(2,`path`,45),B()()}if(e&2){let e=K().$implicit;q(`open`,e.expanded)}}function HO(e,t){e&1&&V(0,`span`,37)}function UO(e,t){if(e&1&&(z(0,`span`,40),J(1),B()),e&2){let e=t.$implicit;M(),Y(e.route||`/`)}}function WO(e,t){if(e&1&&(z(0,`span`,41),J(1),z(2,`span`,20),J(3),B()()),e&2){let e=t;M(),X(` `,e),M(2),X(` `,e===1?`check`:`checks`,` while recording`)}}function GO(e,t){if(e&1&&(z(0,`span`,42),J(1),z(2,`span`,20),J(3),B()()),e&2){let e=K().$implicit;N(`title`,e.node.directives.join(`, `)),M(),X(` +`,e.node.directives.length,` `),M(2),X(` `,e.node.directives.length===1?`directive`:`directives`,` `)}}function KO(e,t){if(e&1){let e=W();z(0,`div`,35),G(`click`,function(){let t=O(e).$implicit;return k(K(2).select(t.node.id))})(`focus`,function(){let t=O(e).$implicit,n=K(2);return n.focusId.set(t.node.id),k(n.highlight(t.node.id))})(`blur`,function(){return O(e),k(K(2).highlight(null))})(`mouseenter`,function(){let t=O(e).$implicit;return k(K(2).highlight(t.node.id))})(`mouseleave`,function(){return O(e),k(K(2).highlight(null))}),P(1,VO,3,2,`span`,36)(2,HO,1,0,`span`,37),z(3,`span`,38),J(4),B(),z(5,`span`,39),J(6),B(),I(7,UO,2,1,`span`,40,OO),P(9,WO,4,2,`span`,41),P(10,GO,4,3,`span`,42),B()}if(e&2){let e,n=t.$implicit,r=K(2);j_(`--%NS%depth`,n.depth),q(`selected`,r.selectedId()===n.node.id),N(`aria-level`,n.depth+1)(`aria-expanded`,n.hasChildren?n.expanded:null)(`aria-selected`,r.selectedId()===n.node.id)(`tabindex`,r.rovingId()===n.node.id?0:-1)(`data-id`,n.node.id),M(),F(n.hasChildren?1:2),M(3),Y(n.node.name),M(2),X(`<`,n.node.tag,`>`),M(),L(r.routedById().get(n.node.id)??mv(14,EO)),M(2),F((e=r.cdHosts()[n.node.id])?9:-1,e),M(),F(n.node.directives?.length?10:-1)}}function qO(e,t){if(e&1&&(z(0,`p`,50),V(1,`app-source-link`,52),B()),e&2){let e=t;M(),R(`file`,e.file)(`line`,e.line)}}function JO(e,t){if(e&1){let e=W();z(0,`div`,53)(1,`button`,34),G(`click`,function(){O(e);let t=K();return k(K(2).revealInElements(t))}),J(2,`Reveal in Elements`),B(),z(3,`button`,34),G(`click`,function(){O(e);let t=K();return k(K(2).openSource(t))}),J(4,`Open source`),B()(),z(5,`p`,54),J(6),B()}if(e&2){let e=K(3);M(6),Y(e.actionMessage())}}function YO(e,t){if(e&1){let e=W();z(0,`button`,57),G(`click`,function(){let t=O(e).$implicit;return k(K(5).showForm.emit(t.formId))}),J(1),B()}if(e&2){let e=t.$implicit;M(),X(` Show `,e.label,` in Forms `)}}function XO(e,t){if(e&1&&(z(0,`div`,55),I(1,YO,2,1,`button`,56,kO),B()),e&2){let e=K(),t=K(3);M(),L(t.formsIn(e.file))}}function ZO(e,t){e&1&&P(0,XO,3,0,`div`,55),e&2&&F(K(3).formsIn(t.file).length?0:-1)}function QO(e,t){if(e&1&&(z(0,`dt`),J(1,`Routed`),B(),z(2,`dd`,59),J(3),B()),e&2){let e=t.$implicit;M(3),Z(``,e.route||`/`,` in outlet `,e.outlet)}}function $O(e,t){if(e&1&&(z(0,`span`,68),J(1),B()),e&2){let e=K().$implicit;M(),X(`(`,e.prop,`)`)}}function ek(e,t){if(e&1&&(z(0,`li`,66)(1,`span`,67),J(2),P(3,$O,2,1,`span`,68),B(),z(4,`pre`),J(5),yv(6,`json`),B()()),e&2){let e=t.$implicit;M(2),X(` `,e.name,` `),M(),F(e.prop===e.name?-1:3),M(2),Y(xv(6,3,e.value))}}function tk(e,t){if(e&1&&(z(0,`ul`,62),I(1,ek,7,5,`li`,66,jO),B()),e&2){let e=K();M(),L(e.inputs)}}function nk(e,t){e&1&&(z(0,`p`,63),J(1,`No inputs.`),B())}function rk(e,t){if(e&1&&(z(0,`li`,70)(1,`span`,59),J(2),B(),z(3,`span`,71),J(4),B()()),e&2){let e=t.$implicit;q(`on`,e.listened),M(2),Y(e.name),M(2),Y(e.listened?`listened`:`no listener`)}}function ik(e,t){if(e&1&&(z(0,`ul`,64),I(1,rk,5,4,`li`,69,jO),B()),e&2){let e=K();M(),L(e.outputs)}}function ak(e,t){e&1&&(z(0,`p`,63),J(1,`No outputs.`),B())}function ok(e,t){if(e&1&&(z(0,`span`,72),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.kind)}}function sk(e,t){if(e&1&&(z(0,`li`,66)(1,`span`,67),J(2),P(3,ok,2,1,`span`,72),B(),z(4,`pre`),J(5),yv(6,`json`),B()()),e&2){let e=t.$implicit;M(2),X(` `,e.name,` `),M(),F(e.kind?3:-1),M(2),Y(xv(6,3,e.value))}}function ck(e,t){if(e&1&&(z(0,`ul`,62),I(1,sk,7,5,`li`,66,jO),B()),e&2){let e=K();M(),L(e.properties)}}function lk(e,t){e&1&&(z(0,`p`,63),J(1,`No other properties.`),B())}function uk(e,t){if(e&1&&(z(0,`li`,73),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function dk(e,t){if(e&1&&(z(0,`div`,60)(1,`h3`),J(2,` DOM listeners `),z(3,`span`,61),J(4),B()(),z(5,`ul`,64),I(6,uk,2,1,`li`,73,Og),B()()),e&2){let e=K();M(4),Y(e.listeners.length),M(2),L(e.listeners)}}function fk(e,t){if(e&1&&(z(0,`li`,66)(1,`span`,67),J(2),B(),z(3,`pre`),J(4),yv(5,`json`),B()()),e&2){let e=t.$implicit;M(2),Y(e.name),M(2),Y(xv(5,2,e.value))}}function pk(e,t){if(e&1&&(z(0,`ul`,62),I(1,fk,6,4,`li`,66,jO),B()),e&2){let e=K().$implicit;M(),L(e.inputs)}}function mk(e,t){if(e&1&&(z(0,`li`,70)(1,`span`,59),J(2),B(),z(3,`span`,71),J(4),B()()),e&2){let e=t.$implicit;q(`on`,e.listened),M(2),Y(e.name),M(2),Y(e.listened?`listened`:`no listener`)}}function hk(e,t){if(e&1&&(z(0,`ul`,64),I(1,mk,5,4,`li`,69,jO),B()),e&2){let e=K().$implicit;M(),L(e.outputs)}}function gk(e,t){e&1&&(z(0,`p`,63),J(1,`No inputs or outputs.`),B())}function _k(e,t){if(e&1&&(z(0,`div`,60)(1,`h3`)(2,`span`,59),J(3),B(),z(4,`span`,72),J(5,`directive on host`),B()(),P(6,pk,3,0,`ul`,62),P(7,hk,3,0,`ul`,64),P(8,gk,2,0,`p`,63),B()),e&2){let e=t.$implicit;M(3),Y(e.name),M(3),F(e.inputs.length?6:-1),M(),F(e.outputs.length?7:-1),M(),F(!e.inputs.length&&!e.outputs.length?8:-1)}}function vk(e,t){if(e&1&&(z(0,`span`,72),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function yk(e,t){if(e&1&&(z(0,`span`,76),J(1,`from `),z(2,`span`,59),J(3),B()()),e&2){let e=K().$implicit;M(3),Y(e.providedByName??`an injector`)}}function bk(e,t){e&1&&(z(0,`span`,77),J(1,`not provided`),B())}function xk(e,t){if(e&1&&(z(0,`li`,74)(1,`span`,75),J(2),B(),I(3,vk,2,1,`span`,72,Og),P(5,yk,4,1,`span`,76)(6,bk,2,0,`span`,77),B()),e&2){let e=t.$implicit;M(2),Y(e.token),M(),L(e.flags),M(2),F(e.providedBy?5:6)}}function Sk(e,t){if(e&1&&(z(0,`ul`,65),I(1,xk,7,2,`li`,74,MO),B()),e&2){let e=K();M(),L(e.dependencies)}}function Ck(e,t){e&1&&(z(0,`p`,63),J(1,`Nothing is injected through the constructor or inject().`),B())}function wk(e,t){if(e&1&&(z(0,`dl`,58)(1,`dt`),J(2,`Change detection`),B(),z(3,`dd`),J(4),B(),z(5,`dt`),J(6,`Encapsulation`),B(),z(7,`dd`),J(8),B(),z(9,`dt`),J(10,`Host path`),B(),z(11,`dd`,59),J(12),B(),I(13,QO,4,2,null,null,OO),B(),z(15,`div`,60)(16,`h3`),J(17,` Inputs `),z(18,`span`,61),J(19),B()(),P(20,tk,3,0,`ul`,62)(21,nk,2,0,`p`,63),B(),z(22,`div`,60)(23,`h3`),J(24,` Outputs `),z(25,`span`,61),J(26),B()(),P(27,ik,3,0,`ul`,64)(28,ak,2,0,`p`,63),B(),z(29,`div`,60)(30,`h3`),J(31,` Properties `),z(32,`span`,61),J(33),B()(),P(34,ck,3,0,`ul`,62)(35,lk,2,0,`p`,63),B(),P(36,dk,8,1,`div`,60),I(37,_k,9,4,`div`,60,AO),z(39,`div`,60)(40,`h3`),J(41,` Injected `),z(42,`span`,61),J(43),B()(),P(44,Sk,3,0,`ul`,65)(45,Ck,2,0,`p`,63),B()),e&2){let e=t,n=K(),r=K(2);M(4),Y(e.changeDetection??`Unknown`),M(4),Y(e.encapsulation??`Unknown`),M(4),Y(e.path),M(),L(r.routedById().get(n.id)??mv(12,EO)),M(6),Y(e.inputs.length),M(),F(e.inputs.length?20:21),M(6),Y(e.outputs.length),M(),F(e.outputs.length?27:28),M(6),Y(e.properties?.length??0),M(),F(e.properties?.length?34:35),M(2),F(e.listeners.length?36:-1),M(),L(e.directives),M(6),Y(e.dependencies.length),M(),F(e.dependencies.length?44:45)}}function Tk(e,t){e&1&&(z(0,`div`,51),V(1,`span`,78),z(2,`p`,33),J(3,`Reading live values from the page…`),B()())}function Ek(e,t){if(e&1&&(z(0,`section`,24)(1,`header`,46)(2,`span`,47),J(3,`component`),B(),z(4,`h2`,48),J(5),B(),z(6,`span`,49),J(7),B(),P(8,qO,2,2,`p`,50),P(9,JO,7,1),P(10,ZO,1,1),B(),P(11,wk,46,13)(12,Tk,4,0,`div`,51),B()),e&2){let e,n,r,i=t,a=K(2);M(5),Y(i.name),M(2),X(`<`,i.tag,`>`),M(),F((e=a.whereOf(i))?8:-1,e),M(),F(a.devtoolsActions()?9:-1),M(),F((n=a.sourceFor(i))?10:-1,n),M(),F((r=a.detail())?11:12,r)}}function Dk(e,t){e&1&&(z(0,`p`,32),J(1,`The selected component was destroyed`),B(),z(2,`p`,33)(3,`span`,59),J(4),B(),J(5,` is no longer on the page. Select another component to see its live values. `),B()),e&2&&(M(4),Y(t))}function Ok(e,t){e&1&&(z(0,`p`,33),J(1,` Select a component to see its live inputs, properties, outputs, change detection and injected services. `),B())}function kk(e,t){if(e&1&&(z(0,`div`,25),P(1,Dk,6,1)(2,Ok,2,0,`p`,33),B()),e&2){let e,t=K(2);M(),F((e=t.destroyed())?1:2,e)}}function Ak(e,t){e&1&&(z(0,`span`,72),J(1,`hydrate never`),B())}function jk(e,t){if(e&1&&(z(0,`span`,72),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.hydration)}}function Mk(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,81),G(`click`,function(){let t=O(e).$implicit;return k(K(3).showOwner(t))})(`focus`,function(){let t=O(e).$implicit;return k(K(3).highlightBlock(t))})(`blur`,function(){return O(e),k(K(3).highlight(null))})(`mouseenter`,function(){let t=O(e).$implicit;return k(K(3).highlightBlock(t))})(`mouseleave`,function(){return O(e),k(K(3).highlight(null))}),z(2,`span`,38),J(3),B(),z(4,`span`,82),J(5),B(),P(6,Ak,2,0,`span`,72)(7,jk,2,1,`span`,72),z(8,`span`,83),J(9),B()()()}if(e&2){let e=t.$implicit;M(),N(`aria-disabled`,e.owner?null:`true`),M(2),Y(e.owner?.name??`Unknown component`),M(),M_(`defer-state-`+e.state),M(),Y(e.state),M(),F(e.hydrateNever?6:e.hydration===`not-configured`?-1:7),M(3),Y(e.triggers.join(`, `)||`no triggers`)}}function Nk(e,t){if(e&1&&(z(0,`section`,26)(1,`h2`,79),J(2,` Defer blocks `),z(3,`span`,61),J(4),B()(),z(5,`ul`,80),I(6,Mk,10,7,`li`,null,NO),B()()),e&2){let e=K(2);M(4),Y(e.deferBlocks().length),M(2),L(e.deferBlocks())}}function Pk(e,t){if(e&1&&V(0,`app-cd-recording`,27),e&2){let e=K(2);R(`page`,e.cdPage())(`pageId`,e.page().pageId)(`rpc`,e.rpc())}}function Fk(e,t){if(e&1){let e=W();z(0,`p`,1),J(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. `),B(),z(2,`div`,2)(3,`div`,3),A(),z(4,`svg`,4),V(5,`circle`,5)(6,`path`,6),B(),ms(),z(7,`input`,7,0),G(`input`,function(t){return O(e),k(K().setFilter(t.target.value))})(`keydown.escape`,function(){return O(e),k(K().setFilter(``))}),B()(),P(9,FO,3,2),z(10,`span`,8),J(11),B(),z(12,`button`,9),G(`click`,function(){return O(e),k(K().expandAll())}),A(),z(13,`svg`,10),V(14,`path`,11)(15,`path`,12),B(),J(16,` Expand all `),B(),ms(),z(17,`button`,9),G(`click`,function(){return O(e),k(K().collapseAll())}),A(),z(18,`svg`,10),V(19,`path`,13)(20,`path`,14),B(),J(21,` Collapse all `),B(),P(22,IO,4,3,`button`,15),B(),ms(),z(23,`p`,16),J(24),B(),P(25,LO,2,1,`p`,17),P(26,RO,2,1,`p`,18),z(27,`div`,19)(28,`div`)(29,`h2`,20),J(30,`Component tree`),B(),P(31,BO,6,2,`div`,21),z(32,`div`,22),G(`keydown`,function(t){return O(e),k(K().onTreeKey(t))}),I(33,KO,11,15,`div`,23,DO),B()(),P(35,Ek,13,6,`section`,24)(36,kk,3,1,`div`,25),B(),P(37,Nk,8,1,`section`,26),P(38,Pk,1,3,`app-cd-recording`,27)}if(e&2){let e,t=K();M(7),R(`value`,t.filter()),M(2),F(t.pageOptions().length>1?9:-1),M(2),Y(t.countLabel()),M(),R(`disabled`,!!t.filter().trim()),M(5),R(`disabled`,!!t.filter().trim()),M(5),F(t.native()?-1:22),M(2),Y(t.announcement()),M(),F(t.pickMessage()?25:-1),M(),F(t.page().truncated?26:-1),M(5),F(t.rows().length?-1:31),M(),R(`hidden`,!t.rows().length),M(),L(t.rows()),M(2),F((e=t.selectedNode())?35:36,e),M(2),F(t.deferBlocks().length?37:-1),M(),F(!t.staticReport()&&!t.native()?38:-1)}}function Ik(e,t){e&1&&(z(0,`p`,18),J(1,` The page reported no component instances. The live tree needs a development build with Angular's debug API. Showing what the source declares instead. `),B())}function Lk(e,t){e&1&&(z(0,`p`,84),J(1,` No page is connected, so this lists what the source declares. Open the app in a browser with the devtools connected to see each rendered instance. `),B())}function Rk(e,t){if(e&1&&J(0),e&2){let e=K(3);Z(` `,e.filteredSource().length,` of `,e.source().length,` `)}}function zk(e,t){if(e&1&&J(0),e&2){let e=K(3);iv(` `,e.sourceCounts().components,` `,e.sourceCounts().components===1?`component`:`components`,` · `,e.sourceCounts().directives,` `,e.sourceCounts().directives===1?`directive`:`directives`,` `)}}function Bk(e,t){if(e&1&&(z(0,`span`,86),P(1,Rk,1,2)(2,zk,1,4),B()),e&2){let e=K(2);M(),F(e.filter().trim()?1:2)}}function Vk(e,t){e&1&&(z(0,`div`,90),V(1,`span`,78),z(2,`p`,32),J(3,`Scanning components…`),B()())}function Hk(e,t){e&1&&(J(0,` Run `),z(1,`code`),J(2,`pangular build`),B(),J(3,` again to rebuild the report. `))}function Uk(e,t){e&1&&J(0,` Check that the dev server is running, then try again. `)}function Wk(e,t){if(e&1){let e=W();z(0,`div`,91)(1,`p`,32),J(2,`Could not load components`),B(),z(3,`p`,33),P(4,Hk,4,0)(5,Uk,1,0),B(),z(6,`button`,34),G(`click`,function(){return O(e),k(K(2).refresh())}),J(7,`Retry`),B()()}if(e&2){let e=K(2);M(4),F(e.staticReport()?4:5)}}function Gk(e,t){e&1&&(z(0,`div`,92)(1,`p`,32),J(2,`No components found`),B(),z(3,`p`,33),J(4,`No @Component or @Directive was found in the source.`),B()())}function Kk(e,t){if(e&1){let e=W();z(0,`div`,92)(1,`p`,32),J(2),B(),z(3,`button`,34),G(`click`,function(){return O(e),k(K(2).clearFilter())}),J(4,`Clear filter`),B()()}if(e&2){let e=K(2);M(2),X(`No components match “`,e.filter().trim(),`”`)}}function qk(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` `,K(3).bareName(e.className),` · `)}}function Jk(e,t){if(e&1&&(z(0,`dt`),J(1,`Change detection`),B(),z(2,`dd`),J(3),B()),e&2){let e=K(2).$implicit;M(3),Y(e.changeDetection??`Unknown`)}}function Yk(e,t){if(e&1){let e=W();z(0,`button`,57),G(`click`,function(){let t=O(e).$implicit;return k(K(5).showForm.emit(t.formId))}),J(1),B()}if(e&2){let e=t.$implicit;M(),X(` Show `,e.label,` in Forms `)}}function Xk(e,t){if(e&1&&(z(0,`div`,102)(1,`dl`,58)(2,`dt`),J(3,`Class`),B(),z(4,`dd`,59),J(5),B(),z(6,`dt`),J(7,`File`),B(),z(8,`dd`,59),V(9,`app-source-link`,52),B(),z(10,`dt`),J(11,`Standalone`),B(),z(12,`dd`),J(13),B(),P(14,Jk,4,1),z(15,`dt`),J(16,`Inputs`),B(),z(17,`dd`,59),J(18),B(),z(19,`dt`),J(20,`Outputs`),B(),z(21,`dd`,59),J(22),B()(),I(23,Yk,2,1,`button`,56,kO),B()),e&2){let e=K(),t=e.$implicit,n=e.$index,r=K(3);R(`id`,`ct-source-`+n),M(5),Y(r.bareName(t.className)),M(4),R(`file`,t.file)(`line`,t.line),M(4),Y(t.isStandalone?`Yes`:`No`),M(),F(t.kind===`component`?14:-1),M(4),Y(t.inputs.join(`, `)||`None`),M(4),Y(t.outputs.join(`, `)||`None`),M(),L(r.formsIn(t.file))}}function Zk(e,t){if(e&1){let e=W();z(0,`li`,95)(1,`button`,96),G(`click`,function(){let t=O(e).$implicit,n=K(3);return k(n.openKey.set(n.openKey()===n.sourceKey(t)?null:n.sourceKey(t)))}),z(2,`span`,97),J(3),B(),z(4,`span`,98)(5,`span`,99),J(6),B(),z(7,`span`,100),P(8,qk,1,1),J(9),B()(),A(),z(10,`svg`,101),V(11,`path`,45),B()(),P(12,Xk,25,8,`div`,102),B()}if(e&2){let e=t.$implicit,n=t.$index,r=K(3);q(`expanded`,r.openKey()===r.sourceKey(e)),M(),N(`aria-expanded`,r.openKey()===r.sourceKey(e))(`aria-controls`,r.openKey()===r.sourceKey(e)?`ct-source-`+n:null),M(),q(`directive`,e.kind===`directive`),M(),Y(e.kind),M(3),Y(r.sourceLabel(e)),M(2),F(e.selector?8:-1),M(),Z(` `,e.file,`:`,e.line,` `),M(3),F(r.openKey()===r.sourceKey(e)?12:-1)}}function Qk(e,t){if(e&1&&(z(0,`ul`,93),I(1,Zk,13,12,`li`,94,PO,!0),B()),e&2){let e=K(2);M(),L(e.filteredSource())}}function $k(e,t){if(e&1){let e=W();P(0,Ik,2,0,`p`,18)(1,Lk,2,0,`p`,84),z(2,`div`,2)(3,`div`,3),A(),z(4,`svg`,4),V(5,`circle`,5)(6,`path`,6),B(),ms(),z(7,`input`,85,0),G(`input`,function(t){return O(e),k(K().filter.set(t.target.value))})(`keydown.escape`,function(){return O(e),k(K().filter.set(``))}),B()(),P(9,Bk,3,1,`span`,86),z(10,`button`,87),G(`click`,function(){return O(e),k(K().refresh())}),A(),z(11,`svg`,10),V(12,`path`,88)(13,`path`,89),B(),J(14,` Refresh `),B()(),P(15,Vk,4,0,`div`,90)(16,Wk,8,1,`div`,91)(17,Gk,5,0,`div`,92)(18,Kk,5,1,`div`,92)(19,Qk,3,0,`ul`,93)}if(e&2){let e=K();F(+!e.page()),M(7),R(`value`,e.filter()),M(2),F(e.source().length?9:-1),M(),q(`spinning`,e.loading()),N(`aria-busy`,e.loading()),M(5),F(e.loading()&&!e.source().length?15:e.error()&&!e.source().length?16:e.source().length?e.filteredSource().length?19:18:17)}}function eA(e){return e.replace(/^_(?=[A-Z])/,``)}var tA=class e{rpc=$(null);staticReport=Q(()=>gE(this.rpc()));focus=$(null);showForm=Iv();focusHandled=Iv();filter=j(``);loading=j(!1);error=j(!1);source=j([]);formOwners=j([]);pages=j({});chosenPageId=j(null);selectedId=j(null);destroyed=j(null);announcement=j(``);picking=j(!1);pickMessage=j(``);pickPageId=null;pickSeq=0;focusId=j(null);bridge=E(MD);actionMessage=Nv({source:this.selectedId,computation:()=>``});collapsed=j(new Set);openKey=j(null);routerPages=j([]);pageId=uE();destroyRef=E(ws);injector=E(Ss);host=E(Nl);filterInput=Kv(`filterInput`);cleanups=[];selection={pageId:null,detailId:null};shownPageId=Nv({source:()=>({pages:this.pages(),chosen:this.chosenPageId()}),computation:({pages:e,chosen:t},n)=>dE(e,{chosen:t,host:this.pageId,previous:n?.value??null})});page=Q(()=>{let e=this.shownPageId();return e?this.pages()[e]??null:null});pageOptions=Q(()=>Object.values(this.pages()).map(e=>({value:e.pageId,label:e.title||e.url||`Page ${e.pageId}`,hint:e.url})));live=Q(()=>(this.page()?.roots.length??0)>0);native=Q(()=>PD(this.page()));devtoolsActions=Q(()=>this.bridge.available&&!!this.page()&&!this.native()&&!this.staticReport());cdPages=j({});cdPage=Q(()=>{let e=this.page()?.pageId;return e?this.cdPages()[e]??null:null});cdHosts=Q(()=>this.cdPage()?.hosts??{});index=Q(()=>{let e=new Map,t=new Map,n=(r,i)=>{for(let a of r)e.set(a.id,a),i&&t.set(a.id,i),n(a.children,a.id)};return n(this.page()?.roots??[],null),{map:e,parents:t}});query=Q(()=>this.filter().trim().toLowerCase());filtered=Q(()=>KD(this.page()?.roots??[],this.query()));deferBlocks=Q(()=>this.page()?.deferBlocks??[]);countLabel=Q(()=>qD(this.page()?.count??0,this.filtered().matches,!!this.query(),!!this.page()?.truncated));truncationText=Q(()=>YD(this.page()?.truncatedBy));rows=Q(()=>{let e=[],t=this.collapsed(),n=!!this.query(),r=(i,a)=>{for(let o of i){let i=n||!t.has(o.id);e.push({node:o,depth:a,hasChildren:o.children.length>0,expanded:i}),i&&r(o.children,a+1)}};return r(this.filtered().nodes,0),e});selectedNode=Q(()=>{let e=this.selectedId();return e?this.index().map.get(e)??null:null});detail=Q(()=>{let e=this.page()?.detail;return e&&e.id===this.selectedId()?e:null});rovingId=Q(()=>{let e=this.rows(),t=new Set(e.map(e=>e.node.id)),n=this.focusId();if(n&&t.has(n))return n;let r=this.selectedId();return r&&t.has(r)?r:e[0]?.node.id??null});outlets=Q(()=>{let e=this.page()?.pageId;return this.routerPages().find(t=>t.pageId===e)?.outlets??[]});routedById=Q(()=>{let e=new Map,t=n=>{for(let r of n){if(r.activated&&r.devtoolsId){let t=e.get(r.devtoolsId)??[];t.push({route:r.route??``,outlet:r.outlet}),e.set(r.devtoolsId,t)}r.children&&t(r.children)}};return t(this.outlets()),e});sourceByClass=Q(()=>{let e=new Map;for(let t of this.source()){let n=eA(t.className);e.set(n,[...e.get(n)??[],t])}return e});filteredSource=Q(()=>{let e=this.query(),t=this.source();return e?t.filter(t=>t.selector.toLowerCase().includes(e)||t.className.toLowerCase().includes(e)||t.file.toLowerCase().includes(e)):t});sourceCounts=Q(()=>{let e=this.source().filter(e=>e.kind===`component`).length;return{components:e,directives:this.source().length-e}});constructor(){dc(()=>{let e=this.page()?.pageId??null;jv(()=>{this.picking()&&e!==this.pickPageId&&this.dropPick()})}),dc(()=>{let e=this.rpc();e&&(this.refresh(),this.watch(e))}),dc(()=>{let e=this.focus();if(!e)return;let t=this.page()?.pageId??null;if(e.pageId&&t!==e.pageId&&this.pages()[e.pageId]){jv(()=>this.selectPage(e.pageId));return}this.live()&&jv(()=>{(!e.pageId||t===e.pageId)&&this.index().map.has(e.id)?this.reveal(e.id):this.announcement.set(`That component is no longer on the page.`),this.focusHandled.emit()})}),this.destroyRef.onDestroy(()=>{this.highlight(null);for(let e of this.cleanups.splice(0))e()})}async watch(e){for(let e of this.cleanups.splice(0))e();let t=e.scope(`pangular`);try{let e=await t.rpc.sharedState(`component-tree`);if(this.destroyRef.destroyed)return;let n=e=>{let t=e?.pages;this.applyPages(t&&typeof t==`object`?t:{})};n(e.value()),this.cleanups.push(e.on(`updated`,n))}catch{this.applyPages({})}try{let e=await t.rpc.sharedState(`change-detection`);if(this.destroyRef.destroyed)return;let n=e=>{let t=e?.pages;this.cdPages.set(t&&typeof t==`object`?t:{})};n(e.value()),this.cleanups.push(e.on(`updated`,n))}catch{this.cdPages.set({})}try{let e=await t.rpc.sharedState(`router`);if(this.destroyRef.destroyed)return;let n=e=>{let t=e?.pages;this.routerPages.set(Array.isArray(t)?t:[])};n(e.value()),this.cleanups.push(e.on(`updated`,n))}catch{this.routerPages.set([])}}async refresh(){let e=this.rpc();if(!e)return;this.loading.set(!0);let t=e.scope(`pangular`);try{this.source.set(await t.rpc.call(`get-components`)),this.error.set(!1)}catch{this.error.set(!0)}finally{this.loading.set(!1)}let n=await t.rpc.call(`forms-owners`).catch(()=>[]);this.formOwners.set(n??[])}formsIn(e){return this.formOwners().filter(t=>t.file===e)}whereOf(e){return this.detail()?.source??this.sourceFor(e)}async revealInElements(e){let t=this.page()?.pageId;if(!t)return;this.actionMessage.set(``);let n=await this.bridge.reveal(t,e.id);this.selectedId()===e.id&&this.actionMessage.set(n.ok?``:`Could not reveal it. The component must be rendered in the tab these DevTools inspect.`)}async openSource(e){let t=this.page()?.pageId;if(!t)return;let n=this.whereOf(e);this.actionMessage.set(``);let r=await this.bridge.openSource(t,e.id,n);this.selectedId()===e.id&&(r.ok||this.actionMessage.set(n?`Not found in Sources. Open ${n.file}:${n.line} in your editor.`:`Could not open the source. The component must be rendered in the tab these DevTools inspect.`))}sourceFor(e){let t=(this.sourceByClass().get(eA(e.name))??[]).filter(e=>e.kind===`component`);return t.find(t=>t.selector===e.tag)??t[0]??null}sourceKey(e){return`${e.file}#${e.className}`}sourceLabel(e){return e.selector?e.kind===`component`&&/^[a-z][\w-]*$/i.test(e.selector)?`<${e.selector}>`:e.selector:eA(e.className)}bareName(e){return eA(e)}applyPages(e){let t=document.activeElement,n=t instanceof HTMLElement&&this.host.nativeElement.contains(t)?t.closest(`.row`)?.dataset.id??null:null,r=n?this.rows().map(e=>e.node.id):[],i=this.index().map;if(this.pages.set(e),this.syncSelection(i),!n)return;let a=new Set(this.rows().map(e=>e.node.id));if(a.has(n))return;let o=QD(r,a,n);o&&(this.focusId.set(o),zd(()=>this.rowElement(o)?.focus(),{injector:this.injector}))}syncSelection(e=this.index().map){let t=this.page(),n=XD({...this.selection,selectedId:this.selectedId()},t?{pageId:t.pageId,roots:t.roots,detail:t.detail,truncated:t.truncated}:null),r=n.destroyed?e.get(n.destroyed)?.name:void 0;this.selection={pageId:n.pageId,detailId:n.detailId},n.selectedId!==this.selectedId()&&this.selectedId.set(n.selectedId),n.selectedId&&this.destroyed.set(null),n.destroyed&&(this.destroyed.set(r??`The component`),this.announcement.set(`The selected component was destroyed.`),this.sendSelection(null))}selectPage(e){e&&(this.chosenPageId.set(e),this.destroyed.set(null),this.syncSelection())}setFilter(e){this.filter.set(e);let{matches:t}=this.filtered();this.announcement.set(JD(this.page()?.count??0,t,e,!!this.page()?.truncated))}clearFilter(){this.live()?this.setFilter(``):this.filter.set(``),this.filterInput()?.nativeElement.focus()}async pick(){let e=this.rpc();if(!e||this.picking())return;let t=++this.pickSeq;this.pickPageId=this.page()?.pageId??null,this.picking.set(!0),this.say(`Click a component in the app. Press Escape to cancel.`);let n=await e.scope(`pangular`).rpc.call(`request-component-pick`,{pageId:this.pickPageId??void 0}).catch(()=>({ok:!1,error:`Could not reach the devtools server.`}));if(t===this.pickSeq){if(this.picking.set(!1),!n?.ok||!n.id){this.say(n?.error??`No component was picked.`);return}n.pageId&&n.pageId!==this.page()?.pageId&&this.selectPage(n.pageId),this.say(`Picked ${n.name??`a component`}.`),this.destroyed.set(null),this.index().map.has(n.id)?this.reveal(n.id):this.selectedId.set(n.id)}}cancelPick(){let e=this.rpc();e&&this.picking()&&e.scope(`pangular`).rpc.call(`cancel-component-pick`,{pageId:this.pickPageId??void 0}).catch(()=>{})}dropPick(){this.cancelPick(),this.pickSeq++,this.picking.set(!1),this.say(`Picking stopped because the page changed.`)}say(e){this.pickMessage.set(e),this.announcement.set(e)}sendSelection(e){let t=this.rpc();t&&t.scope(`pangular`).rpc.call(`select-component`,{pageId:this.page()?.pageId,id:e}).catch(()=>{})}rowElement(e){return this.host.nativeElement.querySelector(`.row[data-id="${CSS.escape(e)}"]`)}select(e){let t=this.selectedId()===e?null:e;this.selectedId.set(t),this.destroyed.set(null),this.focusId.set(e),this.sendSelection(t)}reveal(e){let{parents:t}=this.index();this.collapsed.update(n=>{let r=new Set(n);for(let n=t.get(e);n;n=t.get(n))r.delete(n);return r}),this.rows().some(t=>t.node.id===e)||this.setFilter(``),this.selectedId()!==e&&this.select(e),zd(()=>document.querySelector(`.row[data-id="${CSS.escape(e)}"]`)?.scrollIntoView({block:`nearest`}),{injector:this.injector})}toggle(e,t){t?.stopPropagation(),!this.query()&&this.collapsed.update(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}expandAll(){this.query()||(this.collapsed.set(new Set),this.announce(`Expanded every component.`))}collapseAll(){if(this.query())return;let{map:e,parents:t}=this.index(),n=this.rovingId(),r=new Set;for(let t of e.values())t.children.length&&r.add(t.id);if(this.collapsed.set(r),n){let e=new Set(this.rows().map(e=>e.node.id)),r=n;for(;r&&!e.has(r);)r=t.get(r);r&&this.focusId.set(r)}this.announce(`Collapsed every component. Only the top level is shown.`)}announce(e){this.announcement.update(t=>t===e?`${e}\u00a0`:e)}expandSiblings(e){if(this.query())return;let t=this.index().parents.get(e),n=t?this.index().map.get(t)?.children??[]:this.page()?.roots??[];this.collapsed.update(e=>{let t=new Set(e);for(let e of n)t.delete(e.id);return t})}highlight(e){let t=this.rpc();if(!t)return;let n=e?{pageId:this.page()?.pageId,id:e}:null;t.scope(`pangular`).rpc.call(`request-page-highlight`,n).catch(()=>{})}highlightBlock(e){this.highlight(e.rootIds[0]??e.owner?.id??null)}showOwner(e){e.owner&&this.index().map.has(e.owner.id)&&this.reveal(e.owner.id)}onTreeKey(e){let t=this.rows();if(!t.length)return;let n=t.findIndex(e=>e.node.id===this.rovingId()),r=Math.max(n,0),i=t[r],a=-1;switch(e.key){case`ArrowDown`:a=Math.min(r+1,t.length-1);break;case`ArrowUp`:a=Math.max(r-1,0);break;case`Home`:a=0;break;case`End`:a=t.length-1;break;case`ArrowRight`:i.hasChildren&&!i.expanded?this.toggle(i.node.id):i.hasChildren&&(a=r+1);break;case`ArrowLeft`:if(i.hasChildren&&i.expanded&&!this.query())this.toggle(i.node.id);else{let e=this.index().parents.get(i.node.id);a=t.findIndex(t=>t.node.id===e)}break;case`Enter`:case` `:this.select(i.node.id);break;case`*`:this.expandSiblings(i.node.id);break;default:return}if(e.preventDefault(),a>=0){let e=t[a].node.id;this.focusId.set(e),queueMicrotask(()=>{let t=document.querySelector(`.row[data-id="${CSS.escape(e)}"]`);t?.focus(),t?.scrollIntoView({block:`nearest`})})}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-component-tree`]],viewQuery:function(e,t){e&1&&c_(t.filterInput,TO,5),e&2&&l_()},hostBindings:function(e,t){e&1&&G(`keydown.escape`,function(){return t.cancelPick()})},inputs:{rpc:[1,`rpc`],focus:[1,`focus`]},outputs:{showForm:`showForm`,focusHandled:`focusHandled`},decls:2,vars:1,consts:[[`filterInput`,``],[1,`intro`],[1,`toolbar`],[1,`search`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`search-icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`type`,`search`,`placeholder`,`Filter by class, tag or directive…`,`aria-label`,`Filter components by class, tag or directive`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`value`],[1,`count`],[`type`,`button`,1,`tree-action`,3,`click`,`disabled`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`d`,`m7 15 5 5 5-5`],[`d`,`m7 9 5-5 5 5`],[`d`,`m7 20 5-5 5 5`],[`d`,`m7 4 5 5 5-5`],[`type`,`button`,1,`pick`,3,`on`],[`role`,`status`,1,`sr-only`],[1,`pick-message`],[`role`,`status`,1,`notice`],[1,`layout`],[1,`sr-only`],[1,`state`,`compact`,`tree`],[`role`,`tree`,`aria-label`,`Component instances`,1,`tree`,3,`keydown`,`hidden`],[`role`,`treeitem`,1,`row`,3,`selected`,`--%NS%depth`],[`aria-labelledby`,`ct-detail-title`,1,`detail`],[1,`detail`,`placeholder`],[`aria-labelledby`,`ct-defer-title`,1,`defer`],[3,`page`,`pageId`,`rpc`],[`id`,`ct-page-label`,1,`sr-only`],[`labelledBy`,`ct-page-label`,1,`page-select`,3,`valueChange`,`options`,`value`],[`type`,`button`,1,`pick`,3,`click`],[`d`,`M4 4l6.5 16 2.3-6.7L19.5 11z`],[1,`state-title`],[1,`state-hint`],[`type`,`button`,3,`click`],[`role`,`treeitem`,1,`row`,3,`click`,`focus`,`blur`,`mouseenter`,`mouseleave`],[`aria-hidden`,`true`,1,`twisty`,3,`open`],[`aria-hidden`,`true`,1,`twisty-space`],[1,`name`,`mono`],[1,`tag`,`mono`],[1,`routed`],[1,`checks`],[1,`dirs`],[`aria-hidden`,`true`,1,`twisty`,3,`click`],[`viewBox`,`0 0 24 24`],[`d`,`m9 6 6 6-6 6`],[1,`detail-head`],[1,`badge`],[`id`,`ct-detail-title`,1,`mono`],[1,`mono`,`muted`],[1,`where`,`mono`],[`role`,`status`,1,`state`,`compact`],[3,`file`,`line`],[`role`,`group`,`aria-label`,`Chrome DevTools`,1,`actions`],[`role`,`status`,1,`where`,`action-message`],[1,`actions`],[`type`,`button`,1,`show-form`],[`type`,`button`,1,`show-form`,3,`click`],[1,`facts`],[1,`mono`],[1,`block`],[1,`pill`],[1,`props`],[1,`empty-line`],[1,`chips`],[1,`deps`],[1,`prop`],[1,`prop-name`,`mono`],[1,`muted`],[1,`chip`,3,`on`],[1,`chip`],[1,`chip-note`],[1,`flag`],[1,`chip`,`mono`],[1,`dep`],[1,`token`,`mono`],[1,`from`],[1,`from`,`missing`],[`aria-hidden`,`true`,1,`spinner`],[`id`,`ct-defer-title`,1,`defer-title`],[1,`defer-list`],[`type`,`button`,1,`defer-row`,3,`click`,`focus`,`blur`,`mouseenter`,`mouseleave`],[1,`defer-state`],[1,`triggers`,`mono`],[1,`notice`],[`type`,`search`,`placeholder`,`Filter by selector, class or file…`,`aria-label`,`Filter components by selector, class or file`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`value`],[`aria-live`,`polite`,1,`count`],[`type`,`button`,1,`refresh`,3,`click`],[`d`,`M20 12a8 8 0 1 1-2.34-5.66`],[`d`,`M20 4v5h-5`],[`role`,`status`,1,`state`],[`role`,`alert`,1,`state`],[1,`state`],[`role`,`list`,1,`source-list`],[1,`source-item`,3,`expanded`],[1,`source-item`],[`type`,`button`,1,`source-toggle`,3,`click`],[1,`kind-flag`],[1,`row-main`],[1,`selector`,`mono`],[1,`file`,`mono`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`chevron`],[1,`inline-detail`,3,`id`]],template:function(e,t){e&1&&P(0,Fk,39,14)(1,$k,20,7),e&2&&F(+!t.live())},dependencies:[GD,hO,wO,pb],styles:[`[_nghost-%COMP%] { display: block; color: var(--%NS%text); font-size: 13px; @@ -1523,7 +1558,7 @@ pre[_ngcontent-%COMP%] { .inline-detail[_ngcontent-%COMP%] .show-form[_ngcontent-%COMP%] { margin: 0 16px; -}`]})};function zk(e){return e.line?`${e.file}:${e.line}`:e.file}function Bk(e,t){let n=t.filter(t=>t.fullPath===e.fullPath&&t.redirectTo!==void 0==(e.redirectTo!==void 0));return n.find(t=>!!e.component&&t.component===e.component)??n.find(t=>!t.component||!e.component)}var Vk=sE;function Hk(e){return e.startsWith(`/`)&&!e.startsWith(`//`)&&!/^\/*[a-z][a-z0-9+.-]*:/i.test(e)&&!e.includes(`[redacted]`)&&e.length<=2e3}var Uk=`Could not reach the page.`;async function Wk(e,t,n){return await Vk(e,`request-router-action`,{pageId:t,request:n})??{error:`Could not reach the page.`}}function Gk(e){return e===`succeeded`?`good`:e===`redirected`||e===`pending`||e===`skipped`?`warn`:e===`cancelled`||e===`failed`?`bad`:``}var Kk=()=>[],qk=(e,t)=>t[0],Jk=(e,t)=>t.input;function Yk(e,t){if(e&1&&(H(0,`p`,3),J(1,` The browser shows `),H(2,`code`),J(3),U(),J(4,`, not the router URL (skipLocationChange, browserUrl, a failed navigation or code that changed history). `),U()),e&2){let e=K();M(3),Y(e.browserUrl)}}function Xk(e,t){if(e&1&&(H(0,`p`,12),J(1),U()),e&2){let e=K(3);M(),Y(e.navigationOff)}}function Zk(e,t){if(e&1){let e=W();H(0,`div`,8),Fg(1,`span`,9),H(2,`span`,10),J(3,`Navigating to `),H(4,`code`),J(5),U(),J(6),U(),H(7,`button`,11),Qg(`click`,function(){return O(e),k(K(2).abort())}),J(8,` Abort `),U()(),P(9,Xk,2,1,`p`,12)}if(e&2){let e=t,n=K(2);M(5),Y(e.url),M(),X(` (#`,e.id,`)`),M(),Vg(`disabled`,!n.navigationAllowed()),N(`aria-describedby`,n.navigationAllowed()?null:`route-current-writes-off`),M(2),F(n.navigationAllowed()?-1:9)}}function Qk(e,t){if(e&1&&(H(0,`p`,4),J(1),U()),e&2){let e=K(2);M(),Y(e.message())}}function $k(e,t){if(e&1&&(H(0,`dt`),J(1,`Document title`),U(),H(2,`dd`),J(3),U()),e&2){let e=K();M(3),Y(e.title)}}function eA(e,t){if(e&1&&(H(0,`dt`),J(1,`Query params`),U(),H(2,`dd`)(3,`code`),J(4),dv(5,`json`),U()()),e&2){let e=K();M(4),Y(pv(5,1,e.queryParams))}}function tA(e,t){if(e&1&&(H(0,`dt`),J(1,`Fragment`),U(),H(2,`dd`)(3,`code`),J(4),U()()),e&2){let e=K();M(4),Y(e.fragment)}}function nA(e,t){if(e&1&&(H(0,`span`,14),J(1),U()),e&2){let e=K().$implicit;M(),X(`, `,e.nesting)}}function rA(e,t){if(e&1&&(H(0,`span`,15),J(1),U()),e&2){let e=K().$implicit;M(),Y(e.route.outlet)}}function iA(e,t){e&1&&(H(0,`span`,15),J(1,`lazy`),U())}function aA(e,t){if(e&1&&(H(0,`div`,16),J(1),U()),e&2){let e=K().$implicit;M(),Z(` title `,e.route.title,``,e.route.ownTitle===!1?` (inherited)`:``,` `)}}function oA(e,t){if(e&1&&(H(0,`code`,17),J(1),U()),e&2){let e=K().$implicit;M(),Y(e.route.component)}}function sA(e,t){e&1&&(H(0,`span`,20),J(1,`–`),U(),H(2,`span`,14),J(3,`none`),U())}function cA(e,t){e&1&&(H(0,`span`,15),J(1,`inherited`),U())}function lA(e,t){if(e&1&&(H(0,`div`,18)(1,`code`),J(2),dv(3,`json`),U(),P(4,cA,2,0,`span`,15),U()),e&2){let e=t.$implicit,n=K().$implicit;M(2),Z(``,e[0],`: `,pv(3,3,e[1])),M(2),F(n.route.paramSources?.[e[0]]===`inherited`?4:-1)}}function uA(e,t){e&1&&(H(0,`span`,20),J(1,`–`),U(),H(2,`span`,14),J(3,`none`),U())}function dA(e,t){e&1&&(H(0,`span`,15),J(1),U()),e&2&&(M(),Y(t))}function fA(e,t){if(e&1&&(H(0,`div`,19)(1,`code`),J(2),dv(3,`json`),U(),P(4,dA,2,1,`span`,15),U()),e&2){let e,n=t.$implicit,r=K().$implicit;M(2),Z(``,n[0],`: `,pv(3,3,n[1])),M(2),F((e=r.route.dataSources?.[n[0]])?4:-1,e)}}function pA(e,t){e&1&&(H(0,`span`,20),J(1,`–`),U(),H(2,`span`,14),J(3,`none`),U())}function mA(e,t){if(e&1&&(H(0,`span`,15),J(1),U()),e&2){let e=t.$implicit;M(),Y(e)}}function hA(e,t){if(e&1&&(H(0,`span`,15),J(1),U()),e&2){let e=t.$implicit;M(),X(`resolve `,e)}}function gA(e,t){e&1&&(H(0,`span`,20),J(1,`–`),U(),H(2,`span`,14),J(3,`none`),U())}function _A(e,t){if(e&1&&(H(0,`tr`)(1,`td`,13),J(2),P(3,nA,2,1,`span`,14),P(4,rA,2,1,`span`,15),P(5,iA,2,0,`span`,15),P(6,aA,2,2,`div`,16),U(),H(7,`td`),P(8,oA,2,1,`code`,17)(9,sA,4,0),U(),H(10,`td`),I(11,lA,5,5,`div`,18,qk,!1,uA,4,0),U(),H(14,`td`),I(15,fA,5,5,`div`,19,qk,!1,pA,4,0),U(),H(18,`td`),I(19,mA,2,1,`span`,15,wg),I(21,hA,2,1,`span`,15,wg),P(23,gA,4,0),U()()),e&2){let e=t.$implicit,n=K(2);M(),C_(`padding-left`,14+e.depth*16,`px`),M(),X(` `,e.label,` `),M(),F(e.nesting?3:-1),M(),F(e.route.outlet===`primary`?-1:4),M(),F(e.route.lazy?5:-1),M(),F(e.route.title?6:-1),M(2),F(e.route.component?8:9),M(3),L(n.entries(e.route.params)),M(4),L(n.entries(e.route.data)),M(4),L(n.guardList(e.route)),M(2),L(e.route.resolvers??ov(11,Kk)),M(2),F(!n.guardList(e.route).length&&!e.route.resolvers?.length?23:-1)}}function vA(e,t){if(e&1){let e=W();H(0,`button`,26),Qg(`click`,function(){O(e);let t=K(2).$implicit,n=K(3);return k(n.showComponent.emit({pageId:n.page().pageId,id:t.outlet.devtoolsId}))}),J(1,` Show in Components`),H(2,`span`,14),J(3),U()()}if(e&2){let e=K(2).$implicit;M(3),X(`: `,e.outlet.component??e.outlet.element??`routed component`)}}function yA(e,t){if(e&1&&(H(0,`code`),J(1),U(),J(2,` for `),H(3,`code`),J(4),U(),P(5,vA,4,1,`button`,25)),e&2){let e=K().$implicit,t=K(3);M(),Y(e.outlet.component??`?`),M(3),Y(e.outlet.route??`?`),M(),F(e.outlet.devtoolsId&&t.componentsOn()?5:-1)}}function bA(e,t){e&1&&(H(0,`span`,23),J(1,`not activated`),U())}function xA(e,t){e&1&&(H(0,`span`,15),J(1,`detached by reuse strategy`),U())}function SA(e,t){if(e&1&&(H(0,`span`,15),J(1),U()),e&2){let e=t.$implicit;M(),Z(`input `,e.input,` ← `,e.source)}}function CA(e,t){if(e&1&&(H(0,`span`,24),J(1,`routerOutletData `),H(2,`code`),J(3),U()()),e&2){let e=K().$implicit;M(3),Y(e.outlet.data)}}function wA(e,t){if(e&1&&(H(0,`li`)(1,`span`,15),J(2),U(),P(3,yA,6,3)(4,bA,2,0,`span`,23),P(5,xA,2,0,`span`,15),I(6,SA,2,2,`span`,15,Jk),P(8,CA,4,1,`span`,24),U()),e&2){let e=t.$implicit,n=K(3);C_(`padding-left`,10+e.depth*16,`px`),M(2),Y(e.outlet.outlet),M(),F(e.outlet.activated?3:4),M(2),F(e.outlet.detached?5:-1),M(),L(n.boundInputs(e.outlet)),M(2),F(e.outlet.data===void 0?-1:8)}}function TA(e,t){if(e&1&&(H(0,`h3`),J(1,`Outlets`),U(),H(2,`ul`,21),I(3,wA,9,6,`li`,22,Cg),U()),e&2){let e=K(2);M(3),L(e.outletRows())}}function EA(e,t){if(e&1&&(H(0,`p`,1)(1,`span`,2),J(2,`URL`),U(),H(3,`code`),J(4),U()(),P(5,Yk,5,1,`p`,3),P(6,Zk,10,5),P(7,Qk,2,1,`p`,4),H(8,`dl`,5),P(9,$k,4,1),P(10,eA,6,3),P(11,tA,5,1),U(),H(12,`h3`),J(13,`Active routes`),U(),H(14,`div`,6)(15,`table`)(16,`thead`)(17,`tr`)(18,`th`,7),J(19,`Route`),U(),H(20,`th`,7),J(21,`Component`),U(),H(22,`th`,7),J(23,`Params`),U(),H(24,`th`,7),J(25,`Data`),U(),H(26,`th`,7),J(27,`Guards and resolvers`),U()()(),H(28,`tbody`),I(29,_A,24,12,`tr`,null,Cg),U()()(),P(31,TA,5,0)),e&2){let e,n=t,r=K();M(4),Y(n.url),M(),F(n.urlDrift&&n.browserUrl?5:-1),M(),F((e=n.pending)?6:-1,e),M(),F(r.message()?7:-1),M(2),F(n.title?9:-1),M(),F(r.hasKeys(n.queryParams)?10:-1),M(),F(n.fragment?11:-1),M(18),L(r.rows()),M(2),F(r.outletRows().length?31:-1)}}function DA(e,t){e&1&&(H(0,`div`,0)(1,`p`,27),J(2,`This page reports no Router.`),U(),H(3,`p`,23),J(4,` Add `),H(5,`code`),J(6,`provideRouter()`),U(),J(7,` to the app config and navigate once to see the active routes here. `),U()())}var OA=class e{page=$.required();rpc=$(null);navigationAllowed=Q(()=>SE(this.rpc(),`router`));navigationOff=JT(`router`);componentsOn=Q(()=>xE(this.rpc()).inspectors.components);showComponent=Ov();pageId=Q(()=>this.page().pageId);message=Tv({source:this.pageId,computation:()=>``});rows=Q(()=>{let e=[],t=(n,r,i)=>{let a=r===0&&!n.path?`(root)`:`/`+n.path,o=i===void 0?void 0:`level ${r+1}, child of ${i}`;e.push({route:n,depth:r,label:a,nesting:o});for(let e of n.children)t(e,r+1,a)},n=this.page().snapshot?.root;return n&&t(n,0),e});outletRows=Q(()=>{let e=[],t=(n,r)=>{for(let i of n)e.push({outlet:i,depth:r}),i.children&&t(i.children,r+1)};return t(this.page().outlets??[],0),e});hasKeys(e){return Object.keys(e).length>0}entries(e){return Object.entries(e)}guardList(e){return Object.entries(e.guards??{}).flatMap(([e,t])=>t.map(t=>`${e} ${t}`))}boundInputs(e){return(e.inputs??[]).filter(e=>e.source!==`unset`)}async abort(){let e=this.pageId(),t=await Wk(this.rpc(),e,{action:`abort`});e===this.pageId()&&this.message.set(t.error?String(t.error):`Aborted navigation #${t.aborted}.`)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-route-current`]],inputs:{page:[1,`page`],rpc:[1,`rpc`]},outputs:{showComponent:`showComponent`},decls:2,vars:1,consts:[[1,`empty`],[1,`url`],[1,`url-label`],[`role`,`note`,1,`note`],[`role`,`status`,1,`muted`],[1,`facts`],[`role`,`region`,`aria-label`,`Active routes`,`tabindex`,`0`,1,`table-scroll`],[`scope`,`col`],[`role`,`status`,1,`pending`],[`aria-hidden`,`true`,1,`pulse`],[1,`pending-text`],[`type`,`button`,1,`small`,3,`click`,`disabled`],[`id`,`route-current-writes-off`,1,`muted`],[1,`path`],[1,`visually-hidden`],[1,`tag`],[1,`sub`],[1,`component`],[1,`entry`],[1,`entry`,`data`],[`aria-hidden`,`true`,1,`nil`],[1,`outlets`],[3,`padding-left`],[1,`muted`],[1,`outlet-data`],[`type`,`button`,1,`small`,`show-component`],[`type`,`button`,1,`small`,`show-component`,3,`click`],[1,`empty-title`]],template:function(e,t){if(e&1&&P(0,EA,32,8)(1,DA,8,0,`div`,0),e&2){let e;F((e=t.page().snapshot)?0:1,e)}},dependencies:[ab],styles:[`.muted[_ngcontent-%COMP%] { +}`]})};function nA(e){return e.line?`${e.file}:${e.line}`:e.file}function rA(e,t){let n=t.filter(t=>t.fullPath===e.fullPath&&t.redirectTo!==void 0==(e.redirectTo!==void 0));return n.find(t=>!!e.component&&t.component===e.component)??n.find(t=>!t.component||!e.component)}var iA=hE;function aA(e){return e.startsWith(`/`)&&!e.startsWith(`//`)&&!/^\/*[a-z][a-z0-9+.-]*:/i.test(e)&&!e.includes(`[redacted]`)&&e.length<=2e3}var oA=`Could not reach the page.`;async function sA(e,t,n){return await iA(e,`request-router-action`,{pageId:t,request:n})??{error:`Could not reach the page.`}}function cA(e){return e===`succeeded`?`good`:e===`redirected`||e===`pending`||e===`skipped`?`warn`:e===`cancelled`||e===`failed`?`bad`:``}var lA=()=>[],uA=(e,t)=>t[0],dA=(e,t)=>t.input;function fA(e,t){if(e&1&&(H(0,`p`,3),J(1,` The browser shows `),H(2,`code`),J(3),U(),J(4,`, not the router URL (skipLocationChange, browserUrl, a failed navigation or code that changed history). `),U()),e&2){let e=K();M(3),Y(e.browserUrl)}}function pA(e,t){if(e&1&&(H(0,`p`,12),J(1),U()),e&2){let e=K(3);M(),Y(e.navigationOff)}}function mA(e,t){if(e&1){let e=W();H(0,`div`,8),zg(1,`span`,9),H(2,`span`,10),J(3,`Navigating to `),H(4,`code`),J(5),U(),J(6),U(),H(7,`button`,11),n_(`click`,function(){return O(e),k(K(2).abort())}),J(8,` Abort `),U()(),P(9,pA,2,1,`p`,12)}if(e&2){let e=t,n=K(2);M(5),Y(e.url),M(),X(` (#`,e.id,`)`),M(),Gg(`disabled`,!n.navigationAllowed()),N(`aria-describedby`,n.navigationAllowed()?null:`route-current-writes-off`),M(2),F(n.navigationAllowed()?-1:9)}}function hA(e,t){if(e&1&&(H(0,`p`,4),J(1),U()),e&2){let e=K(2);M(),Y(e.message())}}function gA(e,t){if(e&1&&(H(0,`dt`),J(1,`Document title`),U(),H(2,`dd`),J(3),U()),e&2){let e=K();M(3),Y(e.title)}}function _A(e,t){if(e&1&&(H(0,`dt`),J(1,`Query params`),U(),H(2,`dd`)(3,`code`),J(4),yv(5,`json`),U()()),e&2){let e=K();M(4),Y(xv(5,1,e.queryParams))}}function vA(e,t){if(e&1&&(H(0,`dt`),J(1,`Fragment`),U(),H(2,`dd`)(3,`code`),J(4),U()()),e&2){let e=K();M(4),Y(e.fragment)}}function yA(e,t){if(e&1&&(H(0,`span`,14),J(1),U()),e&2){let e=K().$implicit;M(),X(`, `,e.nesting)}}function bA(e,t){if(e&1&&(H(0,`span`,15),J(1),U()),e&2){let e=K().$implicit;M(),Y(e.route.outlet)}}function xA(e,t){e&1&&(H(0,`span`,15),J(1,`lazy`),U())}function SA(e,t){if(e&1&&(H(0,`div`,16),J(1),U()),e&2){let e=K().$implicit;M(),Z(` title `,e.route.title,``,e.route.ownTitle===!1?` (inherited)`:``,` `)}}function CA(e,t){if(e&1&&(H(0,`code`,17),J(1),U()),e&2){let e=K().$implicit;M(),Y(e.route.component)}}function wA(e,t){e&1&&(H(0,`span`,20),J(1,`–`),U(),H(2,`span`,14),J(3,`none`),U())}function TA(e,t){e&1&&(H(0,`span`,15),J(1,`inherited`),U())}function EA(e,t){if(e&1&&(H(0,`div`,18)(1,`code`),J(2),yv(3,`json`),U(),P(4,TA,2,0,`span`,15),U()),e&2){let e=t.$implicit,n=K().$implicit;M(2),Z(``,e[0],`: `,xv(3,3,e[1])),M(2),F(n.route.paramSources?.[e[0]]===`inherited`?4:-1)}}function DA(e,t){e&1&&(H(0,`span`,20),J(1,`–`),U(),H(2,`span`,14),J(3,`none`),U())}function OA(e,t){e&1&&(H(0,`span`,15),J(1),U()),e&2&&(M(),Y(t))}function kA(e,t){if(e&1&&(H(0,`div`,19)(1,`code`),J(2),yv(3,`json`),U(),P(4,OA,2,1,`span`,15),U()),e&2){let e,n=t.$implicit,r=K().$implicit;M(2),Z(``,n[0],`: `,xv(3,3,n[1])),M(2),F((e=r.route.dataSources?.[n[0]])?4:-1,e)}}function AA(e,t){e&1&&(H(0,`span`,20),J(1,`–`),U(),H(2,`span`,14),J(3,`none`),U())}function jA(e,t){if(e&1&&(H(0,`span`,15),J(1),U()),e&2){let e=t.$implicit;M(),Y(e)}}function MA(e,t){if(e&1&&(H(0,`span`,15),J(1),U()),e&2){let e=t.$implicit;M(),X(`resolve `,e)}}function NA(e,t){e&1&&(H(0,`span`,20),J(1,`–`),U(),H(2,`span`,14),J(3,`none`),U())}function PA(e,t){if(e&1&&(H(0,`tr`)(1,`td`,13),J(2),P(3,yA,2,1,`span`,14),P(4,bA,2,1,`span`,15),P(5,xA,2,0,`span`,15),P(6,SA,2,2,`div`,16),U(),H(7,`td`),P(8,CA,2,1,`code`,17)(9,wA,4,0),U(),H(10,`td`),I(11,EA,5,5,`div`,18,uA,!1,DA,4,0),U(),H(14,`td`),I(15,kA,5,5,`div`,19,uA,!1,AA,4,0),U(),H(18,`td`),I(19,jA,2,1,`span`,15,Og),I(21,MA,2,1,`span`,15,Og),P(23,NA,4,0),U()()),e&2){let e=t.$implicit,n=K(2);M(),j_(`padding-left`,14+e.depth*16,`px`),M(),X(` `,e.label,` `),M(),F(e.nesting?3:-1),M(),F(e.route.outlet===`primary`?-1:4),M(),F(e.route.lazy?5:-1),M(),F(e.route.title?6:-1),M(2),F(e.route.component?8:9),M(3),L(n.entries(e.route.params)),M(4),L(n.entries(e.route.data)),M(4),L(n.guardList(e.route)),M(2),L(e.route.resolvers??mv(11,lA)),M(2),F(!n.guardList(e.route).length&&!e.route.resolvers?.length?23:-1)}}function FA(e,t){if(e&1){let e=W();H(0,`button`,26),n_(`click`,function(){O(e);let t=K(2).$implicit,n=K(3);return k(n.showComponent.emit({pageId:n.page().pageId,id:t.outlet.devtoolsId}))}),J(1,` Show in Components`),H(2,`span`,14),J(3),U()()}if(e&2){let e=K(2).$implicit;M(3),X(`: `,e.outlet.component??e.outlet.element??`routed component`)}}function IA(e,t){if(e&1&&(H(0,`code`),J(1),U(),J(2,` for `),H(3,`code`),J(4),U(),P(5,FA,4,1,`button`,25)),e&2){let e=K().$implicit,t=K(3);M(),Y(e.outlet.component??`?`),M(3),Y(e.outlet.route??`?`),M(),F(e.outlet.devtoolsId&&t.componentsOn()?5:-1)}}function LA(e,t){e&1&&(H(0,`span`,23),J(1,`not activated`),U())}function RA(e,t){e&1&&(H(0,`span`,15),J(1,`detached by reuse strategy`),U())}function zA(e,t){if(e&1&&(H(0,`span`,15),J(1),U()),e&2){let e=t.$implicit;M(),Z(`input `,e.input,` ← `,e.source)}}function BA(e,t){if(e&1&&(H(0,`span`,24),J(1,`routerOutletData `),H(2,`code`),J(3),U()()),e&2){let e=K().$implicit;M(3),Y(e.outlet.data)}}function VA(e,t){if(e&1&&(H(0,`li`)(1,`span`,15),J(2),U(),P(3,IA,6,3)(4,LA,2,0,`span`,23),P(5,RA,2,0,`span`,15),I(6,zA,2,2,`span`,15,dA),P(8,BA,4,1,`span`,24),U()),e&2){let e=t.$implicit,n=K(3);j_(`padding-left`,10+e.depth*16,`px`),M(2),Y(e.outlet.outlet),M(),F(e.outlet.activated?3:4),M(2),F(e.outlet.detached?5:-1),M(),L(n.boundInputs(e.outlet)),M(2),F(e.outlet.data===void 0?-1:8)}}function HA(e,t){if(e&1&&(H(0,`h3`),J(1,`Outlets`),U(),H(2,`ul`,21),I(3,VA,9,6,`li`,22,Dg),U()),e&2){let e=K(2);M(3),L(e.outletRows())}}function UA(e,t){if(e&1&&(H(0,`p`,1)(1,`span`,2),J(2,`URL`),U(),H(3,`code`),J(4),U()(),P(5,fA,5,1,`p`,3),P(6,mA,10,5),P(7,hA,2,1,`p`,4),H(8,`dl`,5),P(9,gA,4,1),P(10,_A,6,3),P(11,vA,5,1),U(),H(12,`h3`),J(13,`Active routes`),U(),H(14,`div`,6)(15,`table`)(16,`thead`)(17,`tr`)(18,`th`,7),J(19,`Route`),U(),H(20,`th`,7),J(21,`Component`),U(),H(22,`th`,7),J(23,`Params`),U(),H(24,`th`,7),J(25,`Data`),U(),H(26,`th`,7),J(27,`Guards and resolvers`),U()()(),H(28,`tbody`),I(29,PA,24,12,`tr`,null,Dg),U()()(),P(31,HA,5,0)),e&2){let e,n=t,r=K();M(4),Y(n.url),M(),F(n.urlDrift&&n.browserUrl?5:-1),M(),F((e=n.pending)?6:-1,e),M(),F(r.message()?7:-1),M(2),F(n.title?9:-1),M(),F(r.hasKeys(n.queryParams)?10:-1),M(),F(n.fragment?11:-1),M(18),L(r.rows()),M(2),F(r.outletRows().length?31:-1)}}function WA(e,t){e&1&&(H(0,`div`,0)(1,`p`,27),J(2,`This page reports no Router.`),U(),H(3,`p`,23),J(4,` Add `),H(5,`code`),J(6,`provideRouter()`),U(),J(7,` to the app config and navigate once to see the active routes here. `),U()())}var GA=class e{page=$.required();rpc=$(null);navigationAllowed=Q(()=>AE(this.rpc(),`router`));navigationOff=nE(`router`);componentsOn=Q(()=>kE(this.rpc()).inspectors.components);showComponent=Iv();pageId=Q(()=>this.page().pageId);message=Nv({source:this.pageId,computation:()=>``});rows=Q(()=>{let e=[],t=(n,r,i)=>{let a=r===0&&!n.path?`(root)`:`/`+n.path,o=i===void 0?void 0:`level ${r+1}, child of ${i}`;e.push({route:n,depth:r,label:a,nesting:o});for(let e of n.children)t(e,r+1,a)},n=this.page().snapshot?.root;return n&&t(n,0),e});outletRows=Q(()=>{let e=[],t=(n,r)=>{for(let i of n)e.push({outlet:i,depth:r}),i.children&&t(i.children,r+1)};return t(this.page().outlets??[],0),e});hasKeys(e){return Object.keys(e).length>0}entries(e){return Object.entries(e)}guardList(e){return Object.entries(e.guards??{}).flatMap(([e,t])=>t.map(t=>`${e} ${t}`))}boundInputs(e){return(e.inputs??[]).filter(e=>e.source!==`unset`)}async abort(){let e=this.pageId(),t=await sA(this.rpc(),e,{action:`abort`});e===this.pageId()&&this.message.set(t.error?String(t.error):`Aborted navigation #${t.aborted}.`)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-route-current`]],inputs:{page:[1,`page`],rpc:[1,`rpc`]},outputs:{showComponent:`showComponent`},decls:2,vars:1,consts:[[1,`empty`],[1,`url`],[1,`url-label`],[`role`,`note`,1,`note`],[`role`,`status`,1,`muted`],[1,`facts`],[`role`,`region`,`aria-label`,`Active routes`,`tabindex`,`0`,1,`table-scroll`],[`scope`,`col`],[`role`,`status`,1,`pending`],[`aria-hidden`,`true`,1,`pulse`],[1,`pending-text`],[`type`,`button`,1,`small`,3,`click`,`disabled`],[`id`,`route-current-writes-off`,1,`muted`],[1,`path`],[1,`visually-hidden`],[1,`tag`],[1,`sub`],[1,`component`],[1,`entry`],[1,`entry`,`data`],[`aria-hidden`,`true`,1,`nil`],[1,`outlets`],[3,`padding-left`],[1,`muted`],[1,`outlet-data`],[`type`,`button`,1,`small`,`show-component`],[`type`,`button`,1,`small`,`show-component`,3,`click`],[1,`empty-title`]],template:function(e,t){if(e&1&&P(0,UA,32,8)(1,WA,8,0,`div`,0),e&2){let e;F((e=t.page().snapshot)?0:1,e)}},dependencies:[pb],styles:[`.muted[_ngcontent-%COMP%] { color: var(--%NS%text-2); font-size: 13px; line-height: 1.5; @@ -1956,7 +1991,7 @@ h3[_ngcontent-%COMP%] { display: block; color: var(--%NS%text-2); font-size: 12px; -}`]})};function kA(e,t){if(e&1&&(H(0,`span`,8),J(1),U()),e&2){let e=K(2);M(),X(``,e.counts().error,` error(s)`)}}function AA(e,t){if(e&1&&(H(0,`span`,9),J(1),U()),e&2){let e=K(2);M(),X(``,e.counts().warning,` warning(s)`)}}function jA(e,t){if(e&1&&(H(0,`span`,10),J(1),U()),e&2){let e=K(2);M(),X(``,e.counts().info,` info`)}}function MA(e,t){if(e&1&&(H(0,`span`,3),P(1,kA,2,1,`span`,8),P(2,AA,2,1,`span`,9),P(3,jA,2,1,`span`,10),U()),e&2){let e=K();M(),F(e.counts().error?1:-1),M(),F(e.counts().warning?2:-1),M(),F(e.counts().info?3:-1)}}function NA(e,t){if(e&1){let e=W();H(0,`div`,4)(1,`p`,11),J(2,`The route checks could not run.`),U(),H(3,`p`,2),J(4,`The devtools server did not answer. Check that it is still running.`),U(),H(5,`button`,1),Qg(`click`,function(){return O(e),k(K().run())}),J(6,`Retry`),U()()}}function PA(e,t){e&1&&(H(0,`p`,5),J(1,`Checking…`),U())}function FA(e,t){e&1&&J(0,` This page runs in events-only mode: it has no debug utils (a production build or an unusual setup), so it cannot report its route config. `)}function IA(e,t){e&1&&J(0,` The page has not reported its route config yet. It appears after the app finishes bootstrapping. `)}function LA(e,t){e&1&&J(0,` No page with a router is connected. `)}function RA(e,t){if(e&1&&(H(0,`div`,6)(1,`p`,11),J(2,`No checks ran.`),U(),H(3,`p`,2),P(4,FA,1,0)(5,IA,1,0)(6,LA,1,0),U()()),e&2){let e;M(4),F((e=t)===`events-only`?4:e===`no-config`?5:6)}}function zA(e,t){if(e&1&&(H(0,`li`)(1,`div`,12)(2,`span`,10),J(3),U(),H(4,`code`,13),J(5),U(),H(6,`code`,14),J(7),U()(),H(8,`p`,15),J(9),U(),H(10,`p`,16)(11,`span`,17),J(12,`Fix`),U(),H(13,`span`,18),J(14),H(15,`span`,2),J(16),U()()()()),e&2){let e=t.$implicit,n=K(2);N(`data-severity`,e.severity),M(2),N(`data-tone`,n.severityTone(e.severity)),M(),Y(e.severity),M(2),Y(e.rule),M(2),Y(e.route),M(2),Y(e.message),M(5),X(``,e.fix,` `),M(2),X(`(Angular `,e.angular===`throws`?`throws`:e.angular===`warns`?`warns`:`does not warn`,`)`)}}function BA(e,t){if(e&1&&(H(0,`ul`,7),I(1,zA,17,8,`li`,null,Cg),U()),e&2){let e=K();N(`aria-busy`,e.checking()),M(),L(e.findings())}}function VA(e,t){e&1&&(H(0,`div`,6)(1,`span`,19),A(),H(2,`svg`,20),Fg(3,`path`,21),U()(),ps(),H(4,`p`,11),J(5,`No route config problems found.`),U(),H(6,`p`,2),J(7,`The check runs again after each navigation or config change.`),U()())}var HA=class e{page=$.required();rpc=$(null);result=j(null);failed=j(!1);checking=j(!1);findings=Q(()=>{let e=this.result();return e?.checked?e.findings:[]});notChecked=Q(()=>{let e=this.result();return e&&!e.checked?e.reason:null});counts=Q(()=>{let e={error:0,warning:0,info:0};for(let t of this.findings())e[t.severity]++;return e});key=Q(()=>{let e=this.page(),t=e.navigations[e.navigations.length-1],n=JSON.stringify((e.links??[]).map(e=>[e.text,e.href,e.linkActive!==void 0,e.ariaCurrent===void 0])),r=`${e.setup?.mode}/${e.setup?.features?.componentInputBinding}`;return`${e.pageId}:${e.generation}:${t?.id}:${t?.outcome}:${n}:${r}`});seq=0;checkedPage=null;constructor(){uc(()=>{this.key(),Cv(()=>void this.run())})}severityTone(e){return e===`error`?`bad`:e===`warning`?`warn`:``}async run(){let e=++this.seq,t=this.page().pageId;t!==this.checkedPage&&this.result.set(null),this.checking.set(!0);let n=await Vk(this.rpc(),`router-lint`,t);e===this.seq&&(this.checking.set(!1),this.failed.set(!n),n&&(this.result.set(n),this.checkedPage=t))}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-route-lint`]],inputs:{page:[1,`page`],rpc:[1,`rpc`]},decls:11,vars:4,consts:[[1,`toolbar`],[`type`,`button`,1,`small`,3,`click`],[1,`muted`],[1,`summary`],[`role`,`alert`,1,`empty`],[`role`,`status`,1,`muted`,`empty`],[1,`empty`],[1,`findings`],[`data-tone`,`bad`,1,`badge`],[`data-tone`,`warn`,1,`badge`],[1,`badge`],[1,`empty-title`],[1,`head`],[1,`rule`],[1,`route`],[1,`message`],[1,`fix`],[1,`fix-label`],[1,`fix-text`],[`aria-hidden`,`true`,1,`ok-mark`],[`width`,`16`,`height`,`16`,`viewBox`,`0 0 24 24`,`fill`,`none`,`stroke`,`currentColor`,`stroke-width`,`2.5`,`stroke-linecap`,`round`,`stroke-linejoin`,`round`],[`d`,`M20 6 9 17l-5-5`]],template:function(e,t){if(e&1&&(H(0,`div`,0)(1,`button`,1),Qg(`click`,function(){return t.run()}),J(2),U(),H(3,`span`,2),J(4,`Checks the live config, links and recent navigations. Lazy routes that have not loaded are skipped.`),U(),P(5,MA,4,3,`span`,3),U(),P(6,NA,7,0,`div`,4)(7,PA,2,0,`p`,5)(8,RA,7,1,`div`,6)(9,BA,3,1,`ul`,7)(10,VA,8,0,`div`,6)),e&2){let e;M(),N(`aria-busy`,t.checking()),M(),X(` `,t.checking()?`Checking…`:`Check again`,` `),M(3),F(t.result()?.checked&&t.findings().length?5:-1),M(),F(t.failed()?6:t.result()?(e=t.notChecked())?8:t.findings().length?9:10:7,e)}},styles:[`.muted[_ngcontent-%COMP%] { +}`]})};function KA(e,t){if(e&1&&(H(0,`span`,8),J(1),U()),e&2){let e=K(2);M(),X(``,e.counts().error,` error(s)`)}}function qA(e,t){if(e&1&&(H(0,`span`,9),J(1),U()),e&2){let e=K(2);M(),X(``,e.counts().warning,` warning(s)`)}}function JA(e,t){if(e&1&&(H(0,`span`,10),J(1),U()),e&2){let e=K(2);M(),X(``,e.counts().info,` info`)}}function YA(e,t){if(e&1&&(H(0,`span`,3),P(1,KA,2,1,`span`,8),P(2,qA,2,1,`span`,9),P(3,JA,2,1,`span`,10),U()),e&2){let e=K();M(),F(e.counts().error?1:-1),M(),F(e.counts().warning?2:-1),M(),F(e.counts().info?3:-1)}}function XA(e,t){if(e&1){let e=W();H(0,`div`,4)(1,`p`,11),J(2,`The route checks could not run.`),U(),H(3,`p`,2),J(4,`The devtools server did not answer. Check that it is still running.`),U(),H(5,`button`,1),n_(`click`,function(){return O(e),k(K().run())}),J(6,`Retry`),U()()}}function ZA(e,t){e&1&&(H(0,`p`,5),J(1,`Checking…`),U())}function QA(e,t){e&1&&J(0,` This page runs in events-only mode: it has no debug utils (a production build or an unusual setup), so it cannot report its route config. `)}function $A(e,t){e&1&&J(0,` The page has not reported its route config yet. It appears after the app finishes bootstrapping. `)}function ej(e,t){e&1&&J(0,` No page with a router is connected. `)}function tj(e,t){if(e&1&&(H(0,`div`,6)(1,`p`,11),J(2,`No checks ran.`),U(),H(3,`p`,2),P(4,QA,1,0)(5,$A,1,0)(6,ej,1,0),U()()),e&2){let e;M(4),F((e=t)===`events-only`?4:e===`no-config`?5:6)}}function nj(e,t){if(e&1&&(H(0,`li`)(1,`div`,12)(2,`span`,10),J(3),U(),H(4,`code`,13),J(5),U(),H(6,`code`,14),J(7),U()(),H(8,`p`,15),J(9),U(),H(10,`p`,16)(11,`span`,17),J(12,`Fix`),U(),H(13,`span`,18),J(14),H(15,`span`,2),J(16),U()()()()),e&2){let e=t.$implicit,n=K(2);N(`data-severity`,e.severity),M(2),N(`data-tone`,n.severityTone(e.severity)),M(),Y(e.severity),M(2),Y(e.rule),M(2),Y(e.route),M(2),Y(e.message),M(5),X(``,e.fix,` `),M(2),X(`(Angular `,e.angular===`throws`?`throws`:e.angular===`warns`?`warns`:`does not warn`,`)`)}}function rj(e,t){if(e&1&&(H(0,`ul`,7),I(1,nj,17,8,`li`,null,Dg),U()),e&2){let e=K();N(`aria-busy`,e.checking()),M(),L(e.findings())}}function ij(e,t){e&1&&(H(0,`div`,6)(1,`span`,19),A(),H(2,`svg`,20),zg(3,`path`,21),U()(),ms(),H(4,`p`,11),J(5,`No route config problems found.`),U(),H(6,`p`,2),J(7,`The check runs again after each navigation or config change.`),U()())}var aj=class e{page=$.required();rpc=$(null);result=j(null);failed=j(!1);checking=j(!1);findings=Q(()=>{let e=this.result();return e?.checked?e.findings:[]});notChecked=Q(()=>{let e=this.result();return e&&!e.checked?e.reason:null});counts=Q(()=>{let e={error:0,warning:0,info:0};for(let t of this.findings())e[t.severity]++;return e});key=Q(()=>{let e=this.page(),t=e.navigations[e.navigations.length-1],n=JSON.stringify((e.links??[]).map(e=>[e.text,e.href,e.linkActive!==void 0,e.ariaCurrent===void 0])),r=`${e.setup?.mode}/${e.setup?.features?.componentInputBinding}`;return`${e.pageId}:${e.generation}:${t?.id}:${t?.outcome}:${n}:${r}`});seq=0;checkedPage=null;constructor(){dc(()=>{this.key(),jv(()=>void this.run())})}severityTone(e){return e===`error`?`bad`:e===`warning`?`warn`:``}async run(){let e=++this.seq,t=this.page().pageId;t!==this.checkedPage&&this.result.set(null),this.checking.set(!0);let n=await iA(this.rpc(),`router-lint`,t);e===this.seq&&(this.checking.set(!1),this.failed.set(!n),n&&(this.result.set(n),this.checkedPage=t))}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-route-lint`]],inputs:{page:[1,`page`],rpc:[1,`rpc`]},decls:11,vars:4,consts:[[1,`toolbar`],[`type`,`button`,1,`small`,3,`click`],[1,`muted`],[1,`summary`],[`role`,`alert`,1,`empty`],[`role`,`status`,1,`muted`,`empty`],[1,`empty`],[1,`findings`],[`data-tone`,`bad`,1,`badge`],[`data-tone`,`warn`,1,`badge`],[1,`badge`],[1,`empty-title`],[1,`head`],[1,`rule`],[1,`route`],[1,`message`],[1,`fix`],[1,`fix-label`],[1,`fix-text`],[`aria-hidden`,`true`,1,`ok-mark`],[`width`,`16`,`height`,`16`,`viewBox`,`0 0 24 24`,`fill`,`none`,`stroke`,`currentColor`,`stroke-width`,`2.5`,`stroke-linecap`,`round`,`stroke-linejoin`,`round`],[`d`,`M20 6 9 17l-5-5`]],template:function(e,t){if(e&1&&(H(0,`div`,0)(1,`button`,1),n_(`click`,function(){return t.run()}),J(2),U(),H(3,`span`,2),J(4,`Checks the live config, links and recent navigations. Lazy routes that have not loaded are skipped.`),U(),P(5,YA,4,3,`span`,3),U(),P(6,XA,7,0,`div`,4)(7,ZA,2,0,`p`,5)(8,tj,7,1,`div`,6)(9,rj,3,1,`ul`,7)(10,ij,8,0,`div`,6)),e&2){let e;M(),N(`aria-busy`,t.checking()),M(),X(` `,t.checking()?`Checking…`:`Check again`,` `),M(3),F(t.result()?.checked&&t.findings().length?5:-1),M(),F(t.failed()?6:t.result()?(e=t.notChecked())?8:t.findings().length?9:10:7,e)}},styles:[`.muted[_ngcontent-%COMP%] { color: var(--%NS%text-2); font-size: 13px; line-height: 1.5; @@ -2378,7 +2413,7 @@ h3[_ngcontent-%COMP%] { .fix[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] { font-size: 12px; -}`]})},UA=(e,t)=>t.name,WA=(e,t)=>t[0];function GA(e,t){e&1&&(H(0,`p`,1),J(1,` Events-only mode: this build has no debug utils (production build or unusual setup), so the route config, lint and actions are limited. `),U())}function KA(e,t){if(e&1&&(H(0,`dt`),J(1,`Angular`),U(),H(2,`dd`),J(3),U()),e&2){let e=K();M(3),Y(e.angularVersion)}}function qA(e,t){if(e&1&&(H(0,`dt`),J(1,`Base href`),U(),H(2,`dd`)(3,`code`),J(4),U()()),e&2){let e=K();M(4),Y(e.baseHref)}}function JA(e,t){if(e&1&&(H(0,`dt`),J(1,`Hydration`),U(),H(2,`dd`),J(3),U()),e&2){let e=K();M(3),X(``,e.hydrated,` component(s) hydrated from server HTML`)}}function YA(e,t){if(e&1&&(H(0,`tr`)(1,`td`,5)(2,`code`),J(3),U()(),H(4,`td`)(5,`code`),J(6),U()(),H(7,`td`,6)(8,`span`,7),J(9),U()()()),e&2){let e=t.$implicit;M(3),Y(e.name),M(3),Y(e.value),M(2),N(`data-tone`,e.set?`warn`:``),M(),Y(e.set?`set`:`default`)}}function XA(e,t){if(e&1&&(H(0,`li`)(1,`span`,7),J(2),U()()),e&2){let e=t.$implicit;M(),N(`data-tone`,e[1]===`off`?``:`good`),M(),Z(``,e[0],`: `,e[1])}}function ZA(e,t){if(e&1&&(H(0,`h3`),J(1,`Features`),U(),H(2,`ul`,8),I(3,XA,3,3,`li`,null,WA),U()),e&2){let e=K(),t=K();M(3),L(t.entries(e.features))}}function QA(e,t){if(e&1&&(H(0,`dt`),J(1),U(),H(2,`dd`)(3,`code`),J(4),U()()),e&2){let e=t.$implicit;M(),Y(e[0]),M(3),Y(e[1])}}function $A(e,t){if(e&1&&(H(0,`h3`),J(1,`Strategies`),U(),H(2,`dl`,2),I(3,QA,5,2,null,null,WA),U()),e&2){let e=K(),t=K();M(3),L(t.entries(e.strategies))}}function ej(e,t){if(e&1&&(P(0,GA,2,0,`p`,1),H(1,`dl`,2)(2,`dt`),J(3,`Set up with`),U(),H(4,`dd`),J(5),U(),P(6,KA,4,1),P(7,qA,5,1),P(8,JA,4,1),U(),H(9,`h3`),J(10,`Options`),U(),H(11,`div`,3)(12,`table`)(13,`thead`)(14,`tr`)(15,`th`,4),J(16,`Option`),U(),H(17,`th`,4),J(18,`Value`),U(),H(19,`th`,4),J(20,`Source`),U()()(),H(21,`tbody`),I(22,YA,10,4,`tr`,null,UA),U()()(),P(24,ZA,5,0),P(25,$A,5,0)),e&2){let e=t,n=K();F(e.mode===`events-only`?0:-1),M(5),Z(` `,e.setupKind,``,e.routers>1?`, `+e.routers+` routers on the page`:``,` `),M(),F(e.angularVersion?6:-1),M(),F(e.baseHref?7:-1),M(),F(e.hydrated?8:-1),M(14),L(e.options),M(2),F(n.entries(e.features).length?24:-1),M(),F(n.entries(e.strategies).length?25:-1)}}function tj(e,t){e&1&&(H(0,`div`,0)(1,`p`,9),J(2,`The page has not reported its router setup yet.`),U(),H(3,`p`,10),J(4,` It appears after the app finishes bootstrapping. Reload the app if it stays empty. `),U()())}var nj=class e{page=$.required();entries(e){return Object.entries(e)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-route-setup`]],inputs:{page:[1,`page`]},decls:2,vars:1,consts:[[1,`empty`],[`role`,`note`,1,`note`],[1,`facts`],[`role`,`region`,`aria-label`,`Router options`,`tabindex`,`0`,1,`table-scroll`],[`scope`,`col`],[1,`name`],[1,`source`],[1,`badge`],[1,`chips`],[1,`empty-title`],[1,`muted`]],template:function(e,t){if(e&1&&P(0,ej,26,8)(1,tj,5,0,`div`,0),e&2){let e;F((e=t.page().setup)?0:1,e)}},styles:[`.muted[_ngcontent-%COMP%] { +}`]})},oj=(e,t)=>t.name,sj=(e,t)=>t[0];function cj(e,t){e&1&&(H(0,`p`,1),J(1,` Events-only mode: this build has no debug utils (production build or unusual setup), so the route config, lint and actions are limited. `),U())}function lj(e,t){if(e&1&&(H(0,`dt`),J(1,`Angular`),U(),H(2,`dd`),J(3),U()),e&2){let e=K();M(3),Y(e.angularVersion)}}function uj(e,t){if(e&1&&(H(0,`dt`),J(1,`Base href`),U(),H(2,`dd`)(3,`code`),J(4),U()()),e&2){let e=K();M(4),Y(e.baseHref)}}function dj(e,t){if(e&1&&(H(0,`dt`),J(1,`Hydration`),U(),H(2,`dd`),J(3),U()),e&2){let e=K();M(3),X(``,e.hydrated,` component(s) hydrated from server HTML`)}}function fj(e,t){if(e&1&&(H(0,`tr`)(1,`td`,5)(2,`code`),J(3),U()(),H(4,`td`)(5,`code`),J(6),U()(),H(7,`td`,6)(8,`span`,7),J(9),U()()()),e&2){let e=t.$implicit;M(3),Y(e.name),M(3),Y(e.value),M(2),N(`data-tone`,e.set?`warn`:``),M(),Y(e.set?`set`:`default`)}}function pj(e,t){if(e&1&&(H(0,`li`)(1,`span`,7),J(2),U()()),e&2){let e=t.$implicit;M(),N(`data-tone`,e[1]===`off`?``:`good`),M(),Z(``,e[0],`: `,e[1])}}function mj(e,t){if(e&1&&(H(0,`h3`),J(1,`Features`),U(),H(2,`ul`,8),I(3,pj,3,3,`li`,null,sj),U()),e&2){let e=K(),t=K();M(3),L(t.entries(e.features))}}function hj(e,t){if(e&1&&(H(0,`dt`),J(1),U(),H(2,`dd`)(3,`code`),J(4),U()()),e&2){let e=t.$implicit;M(),Y(e[0]),M(3),Y(e[1])}}function gj(e,t){if(e&1&&(H(0,`h3`),J(1,`Strategies`),U(),H(2,`dl`,2),I(3,hj,5,2,null,null,sj),U()),e&2){let e=K(),t=K();M(3),L(t.entries(e.strategies))}}function _j(e,t){if(e&1&&(P(0,cj,2,0,`p`,1),H(1,`dl`,2)(2,`dt`),J(3,`Set up with`),U(),H(4,`dd`),J(5),U(),P(6,lj,4,1),P(7,uj,5,1),P(8,dj,4,1),U(),H(9,`h3`),J(10,`Options`),U(),H(11,`div`,3)(12,`table`)(13,`thead`)(14,`tr`)(15,`th`,4),J(16,`Option`),U(),H(17,`th`,4),J(18,`Value`),U(),H(19,`th`,4),J(20,`Source`),U()()(),H(21,`tbody`),I(22,fj,10,4,`tr`,null,oj),U()()(),P(24,mj,5,0),P(25,gj,5,0)),e&2){let e=t,n=K();F(e.mode===`events-only`?0:-1),M(5),Z(` `,e.setupKind,``,e.routers>1?`, `+e.routers+` routers on the page`:``,` `),M(),F(e.angularVersion?6:-1),M(),F(e.baseHref?7:-1),M(),F(e.hydrated?8:-1),M(14),L(e.options),M(2),F(n.entries(e.features).length?24:-1),M(),F(n.entries(e.strategies).length?25:-1)}}function vj(e,t){e&1&&(H(0,`div`,0)(1,`p`,9),J(2,`The page has not reported its router setup yet.`),U(),H(3,`p`,10),J(4,` It appears after the app finishes bootstrapping. Reload the app if it stays empty. `),U()())}var yj=class e{page=$.required();entries(e){return Object.entries(e)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-route-setup`]],inputs:{page:[1,`page`]},decls:2,vars:1,consts:[[1,`empty`],[`role`,`note`,1,`note`],[1,`facts`],[`role`,`region`,`aria-label`,`Router options`,`tabindex`,`0`,1,`table-scroll`],[`scope`,`col`],[1,`name`],[1,`source`],[1,`badge`],[1,`chips`],[1,`empty-title`],[1,`muted`]],template:function(e,t){if(e&1&&P(0,_j,26,8)(1,vj,5,0,`div`,0),e&2){let e;F((e=t.page().setup)?0:1,e)}},styles:[`.muted[_ngcontent-%COMP%] { color: var(--%NS%text-2); font-size: 13px; line-height: 1.5; @@ -2709,7 +2744,7 @@ h3[_ngcontent-%COMP%] { .facts[_ngcontent-%COMP%] code[_ngcontent-%COMP%] { color: var(--%NS%text-strong); -}`]})},rj=(e,t)=>t.id,ij=(e,t)=>t.phase;function aj(e,t){if(e&1&&(z(0,`p`,8),J(1),B()),e&2){let e=K();M(),Y(e.message())}}function oj(e,t){if(e&1&&(z(0,`p`,9),J(1),B()),e&2){let e=K();M(),Y(e.navigationOff)}}function sj(e,t){e&1&&(z(0,`span`,18),J(1,`→`),B(),z(2,`span`,19),J(3,`then`),B())}function cj(e,t){if(e&1&&(P(0,sj,4,0),z(1,`code`),J(2),B()),e&2){let e=t.$implicit,n=t.$index;F(n===0?-1:0),M(2),Y(e)}}function lj(e,t){if(e&1&&(z(0,`li`)(1,`code`),J(2),B(),z(3,`span`,18),J(4,` → `),B(),z(5,`span`,19),J(6,` to `),B(),z(7,`code`),J(8),B(),J(9),B()),e&2){let e=t.$implicit,n=K(3);M(2),Y(e.from),M(6),Y(e.to),M(),X(`: `,n.hopCause(e),` `)}}function uj(e,t){if(e&1&&(z(0,`div`,13)(1,`p`,14)(2,`span`,15),J(3),B(),I(4,cj,3,2,null,null,Cg),B(),z(6,`ol`,16),I(7,lj,10,3,`li`,null,Cg),B(),z(9,`p`,17),J(10),B()()),e&2){let e=t.$implicit,n=K(2);M(3),Y(n.loopTitle(e)),M(),L(e.cycle),M(3),L(e.hops),M(3),Y(n.loopMeta(e))}}function dj(e,t){if(e&1&&(z(0,`section`,11)(1,`h3`,12),J(2),B(),I(3,uj,11,2,`div`,13,Cg),B()),e&2){let e=K();M(2),X(` `,e.loops().length===1?`Loop detected`:e.loops().length+` loops detected`,` `),M(),L(e.loops())}}function fj(e,t){if(e&1&&(z(0,`span`),V(1,`i`),J(2),B()),e&2){let e=t.$implicit,n=K(2);M(),C_(`background`,n.color(e)),M(),Y(e)}}function pj(e,t){if(e&1&&(z(0,`time`),J(1),B()),e&2){let e=K().$implicit,t=K(2);M(),Y(t.time(e.startedAt))}}function mj(e,t){if(e&1&&(z(0,`span`,18),J(1,`→`),B(),z(2,`span`,19),J(3,`redirected to`),B(),z(4,`code`,27),J(5),B()),e&2){let e=K().$implicit;M(5),Y(e.finalUrl)}}function hj(e,t){if(e&1&&(z(0,`span`,30),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.endedAt===void 0&&e.outcome!==`pending`?`before Pangular Inspector connected`:`started before Pangular Inspector connected`)}}function gj(e,t){if(e&1&&(z(0,`span`,31),J(1),B()),e&2){let e=K().$implicit;M(),X(``,e.phases?.total,`ms`)}}function _j(e,t){if(e&1&&(z(0,`span`,31),J(1),B()),e&2){let e=K().$implicit;M(),X(``,e.endedAt-e.startedAt,`ms`)}}function vj(e,t){e&1&&(z(0,`span`,32),J(1,`probe`),B())}function yj(e,t){if(e&1&&(z(0,`span`,15),J(1,`loop`),z(2,`span`,19),J(3),B()()),e&2){let e=t,n=K(3);M(3),Z(`: part of `,n.loopTitle(e),` `,e.cycle.join(` then `))}}function bj(e,t){if(e&1&&V(0,`span`),e&2){let e=t.$implicit,n=K(4);C_(`width`,e.width,`%`)(`background`,n.color(e.phase)),N(`title`,e.phase+` `+e.ms+`ms`)}}function xj(e,t){if(e&1&&(z(0,`div`,33),I(1,bj,1,5,`span`,39,ij),B()),e&2){let e=K().$implicit,t=K(2);N(`aria-label`,t.barLabel(e)),M(),L(t.bars(e))}}function Sj(e,t){if(e&1&&(z(0,`dt`),J(1,`From`),B(),z(2,`dd`)(3,`code`),J(4),B()()),e&2){let e=K().$implicit;M(4),Y(e.from)}}function Cj(e,t){if(e&1&&(z(0,`dt`),J(1,`Started by`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Z(``,e.caller,` (`,e.trigger,`)`)}}function wj(e,t){if(e&1&&(z(0,`dt`),J(1,`Extras`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.extras?.join(`, `))}}function Tj(e,t){if(e&1&&(z(0,`dt`),J(1,`Redirect of`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),X(`#`,e.redirectedFrom)}}function Ej(e,t){if(e&1&&(z(0,`div`),J(1,` This navigation: `),z(2,`code`),J(3),B(),J(4,` to `),z(5,`code`),J(6),B(),J(7),B()),e&2){let e=t.$implicit,n=K(4);M(3),Y(e.from),M(3),Y(e.to),M(),X(`, `,n.hopCause(e),` `)}}function Dj(e,t){if(e&1&&(z(0,`dt`),J(1,`Loop`),B(),z(2,`dd`,40),J(3),I(4,Ej,8,3,`div`,null,Cg),B()),e&2){let e=t,n=K().$implicit,r=K(2);M(3),X(` `,e.cycle.join(` → `),` `),M(),L(r.hopsOf(e,n))}}function Oj(e,t){if(e&1&&(z(0,`dt`),J(1,`Redirects to`),B(),z(2,`dd`)(3,`code`),J(4),B(),J(5),B()),e&2){let e=K().$implicit;M(4),Y(e.redirectTo),M(),X(` (`,e.redirectKind,`) `)}}function kj(e,t){if(e&1&&(z(0,`dt`),J(1,`Guards`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit,t=K(2);M(3),Z(``,e.guards.names.join(`, `)||`none`,`: `,t.guardResult(e))}}function Aj(e,t){if(e&1&&(z(0,`div`)(1,`code`),J(2),B(),J(3),z(4,`code`),J(5),B(),J(6,`: `),z(7,`strong`),J(8),B(),J(9),B()),e&2){let e=t.$implicit,n=K(4);M(2),Y(e.guard),M(),X(` `,e.kind,` on `),M(2),Y(e.route),M(2),q(`bad`,n.isBad(e.result)),M(),Y(e.result),M(),X(` (`,e.ms,`ms) `)}}function jj(e,t){if(e&1&&(z(0,`dt`),J(1,`Runs`),B(),z(2,`dd`),I(3,Aj,10,7,`div`,null,Cg),B()),e&2){let e=K().$implicit;M(3),L(e.runs)}}function Mj(e,t){if(e&1&&J(0),e&2){let e=K(2).$implicit;X(` leaving `,e.checked.deactivate.join(`, `),`; `)}}function Nj(e,t){if(e&1&&(z(0,`dt`),J(1,`Checked`),B(),z(2,`dd`),P(3,Mj,1,1),J(4),B()),e&2){let e=K().$implicit;M(3),F(e.checked.deactivate.length?3:-1),M(),X(` entering `,e.checked.activate.join(`, `)||`nothing new`,` `)}}function Pj(e,t){if(e&1&&(z(0,`dt`),J(1,`Resolvers`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.resolvers?.names?.join(`, `))}}function Fj(e,t){if(e&1&&(z(0,`dt`),J(1,`Lazy loaded`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.lazyLoaded?.join(`, `))}}function Ij(e,t){if(e&1&&(z(0,`dt`),J(1,`Reused`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),X(` `,e.reused?.join(`, `),` (component kept, only inputs and params change) `)}}function Lj(e,t){if(e&1&&(z(0,`dt`),J(1,`HTTP`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Z(``,e.requests.count,` request(s): `,e.requests.urls.join(`, `))}}function Rj(e,t){if(e&1&&(z(0,`dt`),J(1,`Scroll`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.scroll)}}function zj(e,t){if(e&1&&(z(0,`dt`),J(1,`Title after`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.title)}}function Bj(e,t){if(e&1&&(z(0,`dt`),J(1,`Warnings`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.warnings?.join(` · `))}}function Vj(e,t){if(e&1&&(z(0,`dt`),J(1,`Reason`),B(),z(2,`dd`,40),J(3),B()),e&2){let e=K().$implicit,t=K(2);M(3),Y(t.reasonText(e))}}function Hj(e,t){if(e&1&&(z(0,`dt`),J(1,`Error`),B(),z(2,`dd`,40),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.errorCode)}}function Uj(e,t){if(e&1&&(z(0,`dt`),J(1,`Error handler`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.errorHandler)}}function Wj(e,t){if(e&1&&(z(0,`dt`),J(1,`Earlier`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),X(``,e.earlier,` navigation(s) before Pangular Inspector connected`)}}function Gj(e,t){if(e&1&&(z(0,`p`,38),J(1,` Replay is off: the URL is redacted or not relative. `),B()),e&2){let e=K().$implicit;R(`id`,av(`replay-note-`,e.id))}}function Kj(e,t){if(e&1){let e=W();z(0,`li`)(1,`div`,25),P(2,pj,2,1,`time`),z(3,`span`,26),J(4),B(),z(5,`code`,27),J(6),B(),P(7,mj,6,1),z(8,`span`,28)(9,`span`,29),J(10),B(),P(11,hj,2,1,`span`,30)(12,gj,2,1,`span`,31)(13,_j,2,1,`span`,31),P(14,vj,2,0,`span`,32),P(15,yj,4,2,`span`,15),B()(),P(16,xj,3,1,`div`,33),z(17,`dl`,34),P(18,Sj,5,1),P(19,Cj,4,2),P(20,wj,4,1),P(21,Tj,4,1),P(22,Dj,6,1),P(23,Oj,6,2),P(24,kj,4,2),P(25,jj,5,0),P(26,Nj,5,2),P(27,Pj,4,1),P(28,Fj,4,1),P(29,Ij,4,1),P(30,Lj,4,2),P(31,Rj,4,1),P(32,zj,4,1),P(33,Bj,4,1),P(34,Vj,4,1),P(35,Hj,4,1),P(36,Uj,4,1),P(37,Wj,4,1),B(),z(38,`div`,35)(39,`button`,36),G(`click`,function(){let t=O(e).$implicit;return k(K(2).replay(t))}),J(40,` Replay `),B(),z(41,`button`,37),G(`click`,function(){let t=O(e).$implicit;return k(K(2).copy(t))}),J(42,` Copy repro `),B(),P(43,Gj,2,2,`p`,38),B()()}if(e&2){let e,n,r=t.$implicit,i=K(2);q(`in-loop`,!!i.loopOf(r)),M(2),F(r.beforeConnect?-1:2),M(2),X(`#`,r.id),M(2),Y(r.url),M(),F(r.finalUrl&&r.finalUrl!==r.url?7:-1),M(2),N(`data-tone`,i.tone(r.outcome)),M(),Y(r.outcome),M(),F(r.beforeConnect?11:r.phases?.total===void 0?r.endedAt===void 0?-1:13:12),M(3),F(r.probe?14:-1),M(),F((e=i.loopOf(r))?15:-1,e),M(),F(i.bars(r).length?16:-1),M(2),F(r.from?18:-1),M(),F(r.caller?19:-1),M(),F(r.extras?.length?20:-1),M(),F(r.redirectedFrom===void 0?-1:21),M(),F((n=i.loopOf(r))?22:-1,n),M(),F(r.redirectTo?23:-1),M(),F(r.guards&&(r.guards.names.length||r.guards.passed===!1)?24:-1),M(),F(r.runs?.length?25:-1),M(),F(r.checked&&(r.checked.activate.length||r.checked.deactivate.length)?26:-1),M(),F(r.resolvers?.names?.length?27:-1),M(),F(r.lazyLoaded?.length?28:-1),M(),F(r.reused?.length?29:-1),M(),F(r.requests?30:-1),M(),F(r.scroll?31:-1),M(),F(r.title?32:-1),M(),F(r.warnings?.length?33:-1),M(),F(r.reason||r.code?34:-1),M(),F(r.errorCode?35:-1),M(),F(r.errorHandler?36:-1),M(),F(r.earlier?37:-1),M(2),R(`disabled`,!i.navigationAllowed()||!i.replayable(r)),N(`aria-describedby`,i.replayNote(r))(`aria-label`,`Replay navigation `+r.id),M(2),N(`aria-label`,`Copy repro for navigation `+r.id),M(2),F(i.replayable(r)?-1:43)}}function qj(e,t){if(e&1&&(z(0,`div`,20)(1,`span`,21),J(2),B(),z(3,`div`,22),I(4,fj,3,3,`span`,null,wg),B()(),z(6,`ol`,23),I(7,Kj,44,37,`li`,24,rj),B()),e&2){let e=K();M(2),Z(``,e.items().length,` of `,e.page().navigations.length,` navigation(s)`),M(2),L(e.phases),M(3),L(e.items())}}function Jj(e,t){if(e&1){let e=W();z(0,`div`,41)(1,`p`,42),J(2,`No navigations match the current filters.`),B(),z(3,`p`,30),J(4),B(),z(5,`button`,37),G(`click`,function(){O(e);let t=K(2),n=n_(2);return t.clearFilters(),k(n.focus())}),J(6,` Clear filters `),B()()}if(e&2){let e=K(2);M(4),X(` `,e.page().navigations.length,` navigation(s) are hidden. Clear the filters to see them. `)}}function Yj(e,t){e&1&&(z(0,`div`,41)(1,`p`,42),J(2,`No navigations since Pangular Inspector connected.`),B(),z(3,`p`,30),J(4,`Earlier ones are not visible. Click a link in the app to record one.`),B()())}function Xj(e,t){e&1&&P(0,Jj,7,1,`div`,41)(1,Yj,5,0,`div`,41),e&2&&F(+!K().page().navigations.length)}var Zj=[`recognize`,`guards`,`resolve`,`activate`],Qj={recognize:`#60a5fa`,guards:`#f59e0b`,resolve:`#2dd4bf`,activate:`#34d399`},$j=class e{page=$.required();rpc=$(null);maxNavigations=Q(()=>xE(this.rpc()).limits.navigations);navigationAllowed=Q(()=>SE(this.rpc(),`router`));navigationOff=JT(`router`);phases=Zj;pageId=Q(()=>this.page().pageId);filter=Tv({source:this.pageId,computation:()=>``});onlyProblems=Tv({source:this.pageId,computation:()=>!1});message=Tv({source:this.pageId,computation:()=>``});loops=Q(()=>this.page().loops??[]);loopById=Q(()=>{let e=new Map;for(let t of this.loops())for(let n of t.ids)e.set(n,t);return e});items=Q(()=>{let e=this.filter().toLowerCase();return[...this.page().navigations].reverse().filter(t=>(!e||t.url.toLowerCase().includes(e)||!!t.finalUrl?.toLowerCase().includes(e))&&(!this.onlyProblems()||this.isProblem(t)))});isProblem(e){return e.probe?!1:![`succeeded`,`pending`].includes(e.outcome)||this.loopById().has(e.id)}loopOf(e){return this.loopById().get(e.id)}loopTitle(e){return e.kind===`burst`?`navigation loop`:`redirect loop`}hopsOf(e,t){return e.hops.filter(e=>e.id===t.id)}hopCause(e){return e.via===`navigate`?`#${e.id} started by ${e.by??`code`}`:`${e.via===`redirectTo`?`config`:`${e.via} redirect`}${e.by?` ${e.by}`:e.via===`redirectTo`?` redirectTo`:``} in #${e.id}`}loopMeta(e){let t=e.ids.length>1?`Navigations #${e.ids[0]} to #${e.ids[e.ids.length-1]}`:`Navigation #${e.ids[0]}`,n=e.bounces>1?`, came back ${e.bounces} times`:``,r=e.guards.length?` Guards involved: ${e.guards.join(`, `)}.`:``;return`${t}${n}; ${e.end}.${r}`}reasonText(e){return[e.code,e.reason].filter(Boolean).join(`: `)}clearFilters(){this.filter.set(``),this.onlyProblems.set(!1)}tone(e){return Gk(e)}color(e){return Qj[e]}bars(e){let t=e.phases?.total;return t?Zj.filter(t=>(e.phases?.[t]??0)>0).map(n=>({phase:n,ms:e.phases[n],width:Math.max(1,e.phases[n]/t*100)})):[]}barLabel(e){return`Phases: ${this.bars(e).map(e=>`${e.phase} ${e.ms}ms`).join(`, `)}`}guardResult(e){let t=e.guards?.passed;return t===!0?`passed`:t===!1?e.outcome===`redirected`?`redirected`:`blocked`:e.outcome===`pending`?`running`:`did not finish, navigation ${e.outcome}`}isBad(e){return e===`false`||/^(UrlTree|RedirectCommand|threw)/.test(e)}time=GD;instrumentSeq=0;async toggleInstrument(e){let t=e.target,n=t.checked,r=this.pageId(),i=++this.instrumentSeq,a=await Wk(this.rpc(),r,{action:`instrument`,on:n});if(i===this.instrumentSeq){if(r!==this.pageId()){t.checked=!!this.page().instrumented;return}if(a.error){t.checked=!!this.page().instrumented,this.message.set(String(a.error));return}this.message.set(n?`Recording each guard and resolver.`:`Stopped recording guards and resolvers.`)}}replayable(e){return Hk(e.url)}replayNote(e){return this.navigationAllowed()?this.replayable(e)?null:`replay-note-${e.id}`:`route-timeline-writes-off`}async replay(e){this.message.set(`Replaying #${e.id}…`);let t=this.pageId(),n=await Wk(this.rpc(),t,{action:`replay`,id:e.id});if(t!==this.pageId())return;if(n.error){this.message.set(String(n.error));return}let r=n.replay;this.message.set(`Replay of #${e.id}: ${r?.outcome??`unknown`}${n.same?` (same as before)`:` (different from before)`}.`)}async copy(e){let t=this.pageId(),n=await Vk(this.rpc(),`router-export`,{pageId:t,id:e.id});if(t===this.pageId()){if(!n){this.message.set(`Could not build the repro.`);return}try{await navigator.clipboard.writeText(n),t===this.pageId()&&this.message.set(`Copied a markdown repro of #${e.id}.`)}catch{t===this.pageId()&&this.message.set(`The clipboard is not available here.`)}}}async clearNavigations(){let e=this.rpc(),t=this.pageId(),n=`Clearing navigations…`;this.message.set(n);let r;try{if(!e)throw Error(`No connection`);await oE(e,`clear-router-navigations`,t),r=`Navigations cleared.`}catch{r=`Could not clear the navigations.`}t===this.pageId()?this.message.set(r):this.message()===n&&this.message.set(``)}exportJson(){let e=new Blob([JSON.stringify(this.page().navigations,null,2)],{type:`application/json`}),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`navigations-${this.page().pageId}.json`,n.click(),URL.revokeObjectURL(t)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-route-timeline`]],inputs:{page:[1,`page`],rpc:[1,`rpc`]},decls:21,vars:12,consts:[[`filterInput`,``],[1,`toolbar`],[`type`,`search`,`aria-label`,`Filter navigations by URL`,`placeholder`,`Filter by URL`,1,`field`,3,`input`,`keydown.escape`,`value`],[1,`check`],[`type`,`checkbox`,3,`change`,`checked`],[`type`,`button`,1,`small`,`export`,3,`click`],[`type`,`button`,`aria-label`,`Clear navigations`,1,`small`,3,`click`,`disabled`],[`role`,`status`,1,`visually-hidden`],[`aria-hidden`,`true`,1,`message`],[`id`,`route-timeline-writes-off`,1,`message`],[`what`,`navigations`,`limit`,`navigations`,3,`dropped`,`max`],[`aria-labelledby`,`loops-heading`,1,`loops`],[`id`,`loops-heading`],[1,`loop`],[1,`chain`],[`data-tone`,`bad`,1,`badge`],[1,`hops`],[1,`muted`,`loop-meta`],[`aria-hidden`,`true`,1,`arrow`],[1,`visually-hidden`],[1,`meta-row`],[1,`muted`,`count`],[`aria-hidden`,`true`,1,`legend`],[1,`navs`],[3,`in-loop`],[1,`head`],[1,`id`],[1,`url`],[1,`meta`],[1,`badge`],[1,`muted`],[1,`muted`,`ms`],[1,`tag`],[`role`,`img`,1,`bar`],[1,`details`],[1,`actions`],[`type`,`button`,1,`small`,3,`click`,`disabled`],[`type`,`button`,1,`small`,3,`click`],[1,`muted`,`replay-note`,3,`id`],[3,`width`,`background`],[1,`reason`],[1,`empty`],[1,`empty-title`]],template:function(e,t){e&1&&(z(0,`div`,1)(1,`input`,2,0),G(`input`,function(e){return t.filter.set(e.target.value)})(`keydown.escape`,function(){return t.filter.set(``)}),B(),z(3,`label`,3)(4,`input`,4),G(`change`,function(e){return t.onlyProblems.set(e.target.checked)}),B(),J(5,` Only problems `),B(),z(6,`label`,3)(7,`input`,4),G(`change`,function(e){return t.toggleInstrument(e)}),B(),J(8,` Record each guard and resolver `),B(),z(9,`button`,5),G(`click`,function(){return t.exportJson()}),J(10,`Export JSON`),B(),z(11,`button`,6),G(`click`,function(){return t.clearNavigations()}),J(12,` Clear `),B()(),z(13,`p`,7),J(14),B(),P(15,aj,2,1,`p`,8),P(16,oj,2,1,`p`,9),V(17,`app-limit-note`,10),P(18,dj,5,1,`section`,11),P(19,qj,9,2)(20,Xj,2,1)),e&2&&(M(),R(`value`,t.filter()),M(3),R(`checked`,t.onlyProblems()),M(3),R(`checked`,t.page().instrumented),M(4),R(`disabled`,!t.navigationAllowed()),N(`aria-describedby`,t.navigationAllowed()?null:`route-timeline-writes-off`),M(3),Y(t.message()),M(),F(t.message()?15:-1),M(),F(t.navigationAllowed()?-1:16),M(),R(`dropped`,t.page().dropped??0)(`max`,t.maxNavigations()),M(),F(t.loops().length?18:-1),M(),F(t.items().length?19:20))},dependencies:[XD],styles:[`.muted[_ngcontent-%COMP%] { +}`]})},bj=(e,t)=>t.id,xj=(e,t)=>t.phase;function Sj(e,t){if(e&1&&(z(0,`p`,8),J(1),B()),e&2){let e=K();M(),Y(e.message())}}function Cj(e,t){if(e&1&&(z(0,`p`,9),J(1),B()),e&2){let e=K();M(),Y(e.navigationOff)}}function wj(e,t){e&1&&(z(0,`span`,18),J(1,`→`),B(),z(2,`span`,19),J(3,`then`),B())}function Tj(e,t){if(e&1&&(P(0,wj,4,0),z(1,`code`),J(2),B()),e&2){let e=t.$implicit,n=t.$index;F(n===0?-1:0),M(2),Y(e)}}function Ej(e,t){if(e&1&&(z(0,`li`)(1,`code`),J(2),B(),z(3,`span`,18),J(4,` → `),B(),z(5,`span`,19),J(6,` to `),B(),z(7,`code`),J(8),B(),J(9),B()),e&2){let e=t.$implicit,n=K(3);M(2),Y(e.from),M(6),Y(e.to),M(),X(`: `,n.hopCause(e),` `)}}function Dj(e,t){if(e&1&&(z(0,`div`,13)(1,`p`,14)(2,`span`,15),J(3),B(),I(4,Tj,3,2,null,null,Dg),B(),z(6,`ol`,16),I(7,Ej,10,3,`li`,null,Dg),B(),z(9,`p`,17),J(10),B()()),e&2){let e=t.$implicit,n=K(2);M(3),Y(n.loopTitle(e)),M(),L(e.cycle),M(3),L(e.hops),M(3),Y(n.loopMeta(e))}}function Oj(e,t){if(e&1&&(z(0,`section`,11)(1,`h3`,12),J(2),B(),I(3,Dj,11,2,`div`,13,Dg),B()),e&2){let e=K();M(2),X(` `,e.loops().length===1?`Loop detected`:e.loops().length+` loops detected`,` `),M(),L(e.loops())}}function kj(e,t){if(e&1&&(z(0,`span`),V(1,`i`),J(2),B()),e&2){let e=t.$implicit,n=K(2);M(),j_(`background`,n.color(e)),M(),Y(e)}}function Aj(e,t){if(e&1&&(z(0,`time`),J(1),B()),e&2){let e=K().$implicit,t=K(2);M(),Y(t.time(e.startedAt))}}function jj(e,t){if(e&1&&(z(0,`span`,18),J(1,`→`),B(),z(2,`span`,19),J(3,`redirected to`),B(),z(4,`code`,27),J(5),B()),e&2){let e=K().$implicit;M(5),Y(e.finalUrl)}}function Mj(e,t){if(e&1&&(z(0,`span`,30),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.endedAt===void 0&&e.outcome!==`pending`?`before Pangular Inspector connected`:`started before Pangular Inspector connected`)}}function Nj(e,t){if(e&1&&(z(0,`span`,31),J(1),B()),e&2){let e=K().$implicit;M(),X(``,e.phases?.total,`ms`)}}function Pj(e,t){if(e&1&&(z(0,`span`,31),J(1),B()),e&2){let e=K().$implicit;M(),X(``,e.endedAt-e.startedAt,`ms`)}}function Fj(e,t){e&1&&(z(0,`span`,32),J(1,`probe`),B())}function Ij(e,t){if(e&1&&(z(0,`span`,15),J(1,`loop`),z(2,`span`,19),J(3),B()()),e&2){let e=t,n=K(3);M(3),Z(`: part of `,n.loopTitle(e),` `,e.cycle.join(` then `))}}function Lj(e,t){if(e&1&&V(0,`span`),e&2){let e=t.$implicit,n=K(4);j_(`width`,e.width,`%`)(`background`,n.color(e.phase)),N(`title`,e.phase+` `+e.ms+`ms`)}}function Rj(e,t){if(e&1&&(z(0,`div`,33),I(1,Lj,1,5,`span`,39,xj),B()),e&2){let e=K().$implicit,t=K(2);N(`aria-label`,t.barLabel(e)),M(),L(t.bars(e))}}function zj(e,t){if(e&1&&(z(0,`dt`),J(1,`From`),B(),z(2,`dd`)(3,`code`),J(4),B()()),e&2){let e=K().$implicit;M(4),Y(e.from)}}function Bj(e,t){if(e&1&&(z(0,`dt`),J(1,`Started by`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Z(``,e.caller,` (`,e.trigger,`)`)}}function Vj(e,t){if(e&1&&(z(0,`dt`),J(1,`Extras`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.extras?.join(`, `))}}function Hj(e,t){if(e&1&&(z(0,`dt`),J(1,`Redirect of`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),X(`#`,e.redirectedFrom)}}function Uj(e,t){if(e&1&&(z(0,`div`),J(1,` This navigation: `),z(2,`code`),J(3),B(),J(4,` to `),z(5,`code`),J(6),B(),J(7),B()),e&2){let e=t.$implicit,n=K(4);M(3),Y(e.from),M(3),Y(e.to),M(),X(`, `,n.hopCause(e),` `)}}function Wj(e,t){if(e&1&&(z(0,`dt`),J(1,`Loop`),B(),z(2,`dd`,40),J(3),I(4,Uj,8,3,`div`,null,Dg),B()),e&2){let e=t,n=K().$implicit,r=K(2);M(3),X(` `,e.cycle.join(` → `),` `),M(),L(r.hopsOf(e,n))}}function Gj(e,t){if(e&1&&(z(0,`dt`),J(1,`Redirects to`),B(),z(2,`dd`)(3,`code`),J(4),B(),J(5),B()),e&2){let e=K().$implicit;M(4),Y(e.redirectTo),M(),X(` (`,e.redirectKind,`) `)}}function Kj(e,t){if(e&1&&(z(0,`dt`),J(1,`Guards`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit,t=K(2);M(3),Z(``,e.guards.names.join(`, `)||`none`,`: `,t.guardResult(e))}}function qj(e,t){if(e&1&&(z(0,`div`)(1,`code`),J(2),B(),J(3),z(4,`code`),J(5),B(),J(6,`: `),z(7,`strong`),J(8),B(),J(9),B()),e&2){let e=t.$implicit,n=K(4);M(2),Y(e.guard),M(),X(` `,e.kind,` on `),M(2),Y(e.route),M(2),q(`bad`,n.isBad(e.result)),M(),Y(e.result),M(),X(` (`,e.ms,`ms) `)}}function Jj(e,t){if(e&1&&(z(0,`dt`),J(1,`Runs`),B(),z(2,`dd`),I(3,qj,10,7,`div`,null,Dg),B()),e&2){let e=K().$implicit;M(3),L(e.runs)}}function Yj(e,t){if(e&1&&J(0),e&2){let e=K(2).$implicit;X(` leaving `,e.checked.deactivate.join(`, `),`; `)}}function Xj(e,t){if(e&1&&(z(0,`dt`),J(1,`Checked`),B(),z(2,`dd`),P(3,Yj,1,1),J(4),B()),e&2){let e=K().$implicit;M(3),F(e.checked.deactivate.length?3:-1),M(),X(` entering `,e.checked.activate.join(`, `)||`nothing new`,` `)}}function Zj(e,t){if(e&1&&(z(0,`dt`),J(1,`Resolvers`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.resolvers?.names?.join(`, `))}}function Qj(e,t){if(e&1&&(z(0,`dt`),J(1,`Lazy loaded`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.lazyLoaded?.join(`, `))}}function $j(e,t){if(e&1&&(z(0,`dt`),J(1,`Reused`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),X(` `,e.reused?.join(`, `),` (component kept, only inputs and params change) `)}}function eM(e,t){if(e&1&&(z(0,`dt`),J(1,`HTTP`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Z(``,e.requests.count,` request(s): `,e.requests.urls.join(`, `))}}function tM(e,t){if(e&1&&(z(0,`dt`),J(1,`Scroll`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.scroll)}}function nM(e,t){if(e&1&&(z(0,`dt`),J(1,`Title after`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.title)}}function rM(e,t){if(e&1&&(z(0,`dt`),J(1,`Warnings`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.warnings?.join(` · `))}}function iM(e,t){if(e&1&&(z(0,`dt`),J(1,`Reason`),B(),z(2,`dd`,40),J(3),B()),e&2){let e=K().$implicit,t=K(2);M(3),Y(t.reasonText(e))}}function aM(e,t){if(e&1&&(z(0,`dt`),J(1,`Error`),B(),z(2,`dd`,40),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.errorCode)}}function oM(e,t){if(e&1&&(z(0,`dt`),J(1,`Error handler`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),Y(e.errorHandler)}}function sM(e,t){if(e&1&&(z(0,`dt`),J(1,`Earlier`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().$implicit;M(3),X(``,e.earlier,` navigation(s) before Pangular Inspector connected`)}}function cM(e,t){if(e&1&&(z(0,`p`,38),J(1,` Replay is off: the URL is redacted or not relative. `),B()),e&2){let e=K().$implicit;R(`id`,pv(`replay-note-`,e.id))}}function lM(e,t){if(e&1){let e=W();z(0,`li`)(1,`div`,25),P(2,Aj,2,1,`time`),z(3,`span`,26),J(4),B(),z(5,`code`,27),J(6),B(),P(7,jj,6,1),z(8,`span`,28)(9,`span`,29),J(10),B(),P(11,Mj,2,1,`span`,30)(12,Nj,2,1,`span`,31)(13,Pj,2,1,`span`,31),P(14,Fj,2,0,`span`,32),P(15,Ij,4,2,`span`,15),B()(),P(16,Rj,3,1,`div`,33),z(17,`dl`,34),P(18,zj,5,1),P(19,Bj,4,2),P(20,Vj,4,1),P(21,Hj,4,1),P(22,Wj,6,1),P(23,Gj,6,2),P(24,Kj,4,2),P(25,Jj,5,0),P(26,Xj,5,2),P(27,Zj,4,1),P(28,Qj,4,1),P(29,$j,4,1),P(30,eM,4,2),P(31,tM,4,1),P(32,nM,4,1),P(33,rM,4,1),P(34,iM,4,1),P(35,aM,4,1),P(36,oM,4,1),P(37,sM,4,1),B(),z(38,`div`,35)(39,`button`,36),G(`click`,function(){let t=O(e).$implicit;return k(K(2).replay(t))}),J(40,` Replay `),B(),z(41,`button`,37),G(`click`,function(){let t=O(e).$implicit;return k(K(2).copy(t))}),J(42,` Copy repro `),B(),P(43,cM,2,2,`p`,38),B()()}if(e&2){let e,n,r=t.$implicit,i=K(2);q(`in-loop`,!!i.loopOf(r)),M(2),F(r.beforeConnect?-1:2),M(2),X(`#`,r.id),M(2),Y(r.url),M(),F(r.finalUrl&&r.finalUrl!==r.url?7:-1),M(2),N(`data-tone`,i.tone(r.outcome)),M(),Y(r.outcome),M(),F(r.beforeConnect?11:r.phases?.total===void 0?r.endedAt===void 0?-1:13:12),M(3),F(r.probe?14:-1),M(),F((e=i.loopOf(r))?15:-1,e),M(),F(i.bars(r).length?16:-1),M(2),F(r.from?18:-1),M(),F(r.caller?19:-1),M(),F(r.extras?.length?20:-1),M(),F(r.redirectedFrom===void 0?-1:21),M(),F((n=i.loopOf(r))?22:-1,n),M(),F(r.redirectTo?23:-1),M(),F(r.guards&&(r.guards.names.length||r.guards.passed===!1)?24:-1),M(),F(r.runs?.length?25:-1),M(),F(r.checked&&(r.checked.activate.length||r.checked.deactivate.length)?26:-1),M(),F(r.resolvers?.names?.length?27:-1),M(),F(r.lazyLoaded?.length?28:-1),M(),F(r.reused?.length?29:-1),M(),F(r.requests?30:-1),M(),F(r.scroll?31:-1),M(),F(r.title?32:-1),M(),F(r.warnings?.length?33:-1),M(),F(r.reason||r.code?34:-1),M(),F(r.errorCode?35:-1),M(),F(r.errorHandler?36:-1),M(),F(r.earlier?37:-1),M(2),R(`disabled`,!i.navigationAllowed()||!i.replayable(r)),N(`aria-describedby`,i.replayNote(r))(`aria-label`,`Replay navigation `+r.id),M(2),N(`aria-label`,`Copy repro for navigation `+r.id),M(2),F(i.replayable(r)?-1:43)}}function uM(e,t){if(e&1&&(z(0,`div`,20)(1,`span`,21),J(2),B(),z(3,`div`,22),I(4,kj,3,3,`span`,null,Og),B()(),z(6,`ol`,23),I(7,lM,44,37,`li`,24,bj),B()),e&2){let e=K();M(2),Z(``,e.items().length,` of `,e.page().navigations.length,` navigation(s)`),M(2),L(e.phases),M(3),L(e.items())}}function dM(e,t){if(e&1){let e=W();z(0,`div`,41)(1,`p`,42),J(2,`No navigations match the current filters.`),B(),z(3,`p`,30),J(4),B(),z(5,`button`,37),G(`click`,function(){O(e);let t=K(2),n=u_(2);return t.clearFilters(),k(n.focus())}),J(6,` Clear filters `),B()()}if(e&2){let e=K(2);M(4),X(` `,e.page().navigations.length,` navigation(s) are hidden. Clear the filters to see them. `)}}function fM(e,t){e&1&&(z(0,`div`,41)(1,`p`,42),J(2,`No navigations since Pangular Inspector connected.`),B(),z(3,`p`,30),J(4,`Earlier ones are not visible. Click a link in the app to record one.`),B()())}function pM(e,t){e&1&&P(0,dM,7,1,`div`,41)(1,fM,5,0,`div`,41),e&2&&F(+!K().page().navigations.length)}var mM=[`recognize`,`guards`,`resolve`,`activate`],hM={recognize:`#60a5fa`,guards:`#f59e0b`,resolve:`#2dd4bf`,activate:`#34d399`},gM=class e{page=$.required();rpc=$(null);maxNavigations=Q(()=>kE(this.rpc()).limits.navigations);navigationAllowed=Q(()=>AE(this.rpc(),`router`));navigationOff=nE(`router`);phases=mM;pageId=Q(()=>this.page().pageId);filter=Nv({source:this.pageId,computation:()=>``});onlyProblems=Nv({source:this.pageId,computation:()=>!1});message=Nv({source:this.pageId,computation:()=>``});loops=Q(()=>this.page().loops??[]);loopById=Q(()=>{let e=new Map;for(let t of this.loops())for(let n of t.ids)e.set(n,t);return e});items=Q(()=>{let e=this.filter().toLowerCase();return[...this.page().navigations].reverse().filter(t=>(!e||t.url.toLowerCase().includes(e)||!!t.finalUrl?.toLowerCase().includes(e))&&(!this.onlyProblems()||this.isProblem(t)))});isProblem(e){return e.probe?!1:![`succeeded`,`pending`].includes(e.outcome)||this.loopById().has(e.id)}loopOf(e){return this.loopById().get(e.id)}loopTitle(e){return e.kind===`burst`?`navigation loop`:`redirect loop`}hopsOf(e,t){return e.hops.filter(e=>e.id===t.id)}hopCause(e){return e.via===`navigate`?`#${e.id} started by ${e.by??`code`}`:`${e.via===`redirectTo`?`config`:`${e.via} redirect`}${e.by?` ${e.by}`:e.via===`redirectTo`?` redirectTo`:``} in #${e.id}`}loopMeta(e){let t=e.ids.length>1?`Navigations #${e.ids[0]} to #${e.ids[e.ids.length-1]}`:`Navigation #${e.ids[0]}`,n=e.bounces>1?`, came back ${e.bounces} times`:``,r=e.guards.length?` Guards involved: ${e.guards.join(`, `)}.`:``;return`${t}${n}; ${e.end}.${r}`}reasonText(e){return[e.code,e.reason].filter(Boolean).join(`: `)}clearFilters(){this.filter.set(``),this.onlyProblems.set(!1)}tone(e){return cA(e)}color(e){return hM[e]}bars(e){let t=e.phases?.total;return t?mM.filter(t=>(e.phases?.[t]??0)>0).map(n=>({phase:n,ms:e.phases[n],width:Math.max(1,e.phases[n]/t*100)})):[]}barLabel(e){return`Phases: ${this.bars(e).map(e=>`${e.phase} ${e.ms}ms`).join(`, `)}`}guardResult(e){let t=e.guards?.passed;return t===!0?`passed`:t===!1?e.outcome===`redirected`?`redirected`:`blocked`:e.outcome===`pending`?`running`:`did not finish, navigation ${e.outcome}`}isBad(e){return e===`false`||/^(UrlTree|RedirectCommand|threw)/.test(e)}time=$D;instrumentSeq=0;async toggleInstrument(e){let t=e.target,n=t.checked,r=this.pageId(),i=++this.instrumentSeq,a=await sA(this.rpc(),r,{action:`instrument`,on:n});if(i===this.instrumentSeq){if(r!==this.pageId()){t.checked=!!this.page().instrumented;return}if(a.error){t.checked=!!this.page().instrumented,this.message.set(String(a.error));return}this.message.set(n?`Recording each guard and resolver.`:`Stopped recording guards and resolvers.`)}}replayable(e){return aA(e.url)}replayNote(e){return this.navigationAllowed()?this.replayable(e)?null:`replay-note-${e.id}`:`route-timeline-writes-off`}async replay(e){this.message.set(`Replaying #${e.id}…`);let t=this.pageId(),n=await sA(this.rpc(),t,{action:`replay`,id:e.id});if(t!==this.pageId())return;if(n.error){this.message.set(String(n.error));return}let r=n.replay;this.message.set(`Replay of #${e.id}: ${r?.outcome??`unknown`}${n.same?` (same as before)`:` (different from before)`}.`)}async copy(e){let t=this.pageId(),n=await iA(this.rpc(),`router-export`,{pageId:t,id:e.id});if(t===this.pageId()){if(!n){this.message.set(`Could not build the repro.`);return}try{await navigator.clipboard.writeText(n),t===this.pageId()&&this.message.set(`Copied a markdown repro of #${e.id}.`)}catch{t===this.pageId()&&this.message.set(`The clipboard is not available here.`)}}}async clearNavigations(){let e=this.rpc(),t=this.pageId(),n=`Clearing navigations…`;this.message.set(n);let r;try{if(!e)throw Error(`No connection`);await mE(e,`clear-router-navigations`,t),r=`Navigations cleared.`}catch{r=`Could not clear the navigations.`}t===this.pageId()?this.message.set(r):this.message()===n&&this.message.set(``)}exportJson(){let e=new Blob([JSON.stringify(this.page().navigations,null,2)],{type:`application/json`}),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`navigations-${this.page().pageId}.json`,n.click(),URL.revokeObjectURL(t)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-route-timeline`]],inputs:{page:[1,`page`],rpc:[1,`rpc`]},decls:21,vars:12,consts:[[`filterInput`,``],[1,`toolbar`],[`type`,`search`,`aria-label`,`Filter navigations by URL`,`placeholder`,`Filter by URL`,1,`field`,3,`input`,`keydown.escape`,`value`],[1,`check`],[`type`,`checkbox`,3,`change`,`checked`],[`type`,`button`,1,`small`,`export`,3,`click`],[`type`,`button`,`aria-label`,`Clear navigations`,1,`small`,3,`click`,`disabled`],[`role`,`status`,1,`visually-hidden`],[`aria-hidden`,`true`,1,`message`],[`id`,`route-timeline-writes-off`,1,`message`],[`what`,`navigations`,`limit`,`navigations`,3,`dropped`,`max`],[`aria-labelledby`,`loops-heading`,1,`loops`],[`id`,`loops-heading`],[1,`loop`],[1,`chain`],[`data-tone`,`bad`,1,`badge`],[1,`hops`],[1,`muted`,`loop-meta`],[`aria-hidden`,`true`,1,`arrow`],[1,`visually-hidden`],[1,`meta-row`],[1,`muted`,`count`],[`aria-hidden`,`true`,1,`legend`],[1,`navs`],[3,`in-loop`],[1,`head`],[1,`id`],[1,`url`],[1,`meta`],[1,`badge`],[1,`muted`],[1,`muted`,`ms`],[1,`tag`],[`role`,`img`,1,`bar`],[1,`details`],[1,`actions`],[`type`,`button`,1,`small`,3,`click`,`disabled`],[`type`,`button`,1,`small`,3,`click`],[1,`muted`,`replay-note`,3,`id`],[3,`width`,`background`],[1,`reason`],[1,`empty`],[1,`empty-title`]],template:function(e,t){e&1&&(z(0,`div`,1)(1,`input`,2,0),G(`input`,function(e){return t.filter.set(e.target.value)})(`keydown.escape`,function(){return t.filter.set(``)}),B(),z(3,`label`,3)(4,`input`,4),G(`change`,function(e){return t.onlyProblems.set(e.target.checked)}),B(),J(5,` Only problems `),B(),z(6,`label`,3)(7,`input`,4),G(`change`,function(e){return t.toggleInstrument(e)}),B(),J(8,` Record each guard and resolver `),B(),z(9,`button`,5),G(`click`,function(){return t.exportJson()}),J(10,`Export JSON`),B(),z(11,`button`,6),G(`click`,function(){return t.clearNavigations()}),J(12,` Clear `),B()(),z(13,`p`,7),J(14),B(),P(15,Sj,2,1,`p`,8),P(16,Cj,2,1,`p`,9),V(17,`app-limit-note`,10),P(18,Oj,5,1,`section`,11),P(19,uM,9,2)(20,pM,2,1)),e&2&&(M(),R(`value`,t.filter()),M(3),R(`checked`,t.onlyProblems()),M(3),R(`checked`,t.page().instrumented),M(4),R(`disabled`,!t.navigationAllowed()),N(`aria-describedby`,t.navigationAllowed()?null:`route-timeline-writes-off`),M(3),Y(t.message()),M(),F(t.message()?15:-1),M(),F(t.navigationAllowed()?-1:16),M(),R(`dropped`,t.page().dropped??0)(`max`,t.maxNavigations()),M(),F(t.loops().length?18:-1),M(),F(t.items().length?19:20))},dependencies:[iO],styles:[`.muted[_ngcontent-%COMP%] { color: var(--%NS%text-2); font-size: 13px; line-height: 1.5; @@ -3293,7 +3328,7 @@ time[_ngcontent-%COMP%] { .export[_ngcontent-%COMP%] { margin-left: 0; } -}`]})},eM=[`urlInput`],tM=()=>[],nM=(e,t)=>t.node.id;function rM(e,t){if(e&1&&(J(0,` with `),H(1,`code`),J(2),dv(3,`json`),U()),e&2){K(2);let e=iv(0);M(2),Y(pv(3,1,e.params))}}function iM(e,t){if(e&1&&(H(0,`span`,19),J(1,`match`),U(),J(2,` Matches `),H(3,`code`,20),J(4),U(),P(5,rM,4,3)),e&2){K();let e=iv(0),t=K();M(4),Y(t.chainText(e)),M(),F(t.hasKeys(e.params)?5:-1)}}function aM(e,t){if(e&1&&(J(0,` Nearest: `),H(1,`code`),J(2),U()),e&2){K(2);let e=iv(0);M(2),Y(e.nearest.join(`, `))}}function oM(e,t){if(e&1&&(H(0,`span`,21),J(1,`no match`),U(),J(2,` Matches no route (NG04002). `),P(3,aM,3,1)),e&2){K();let e=iv(0);M(3),F(e.nearest.length?3:-1)}}function sM(e,t){if(e&1&&(H(0,`div`,18),J(1),U()),e&2){let e=t.$implicit;M(),Y(e)}}function cM(e,t){if(e&1&&(nv(0),H(1,`div`,8)(2,`span`,17),J(3,`Result for `),H(4,`code`),J(5),U(),J(6,`:`),U(),P(7,iM,6,2)(8,oM,4,1),I(9,sM,2,1,`div`,18,wg),U()),e&2){let e=t,n=rv(e.result);M(),N(`data-matched`,n.matched),M(4),Y(e.url),M(2),F(n.matched?7:8),M(2),L(n.notes)}}function lM(e,t){if(e&1&&(H(0,`p`,9),J(1),U()),e&2){let e=K();M(),Y(e.message())}}function uM(e,t){if(e&1&&(H(0,`p`,11),J(1),U()),e&2){let e=K();M(),Y(e.navigationOff)}}function dM(e,t){if(e&1&&(H(0,`span`,22),J(1),U(),J(2,`. `)),e&2){let e=K(2);M(),Y(e.countText())}}function fM(e,t){e&1&&J(0),e&2&&X(` `,K(2).rows().length,` route(s). `)}function pM(e,t){e&1&&J(0),e&2&&X(` `,t,` route(s) left out: the page lists at most 200 routes per level and 1000 in total. `)}function mM(e,t){if(e&1&&(H(0,`p`,14),J(1),P(2,dM,3,1)(3,fM,1,1),J(4,` Lazy routes show their children once loaded. `),P(5,pM,1,1),U()),e&2){let e,t=K();M(),X(` Generation `,t.page().generation,` · `),M(),F(t.filter()?2:3),M(3),F((e=t.page().configTruncated)?5:-1,e)}}function hM(e,t){if(e&1&&(H(0,`div`,15)(1,`p`,23),J(2),U(),H(3,`p`,18),J(4),U()()),e&2){let e=K();M(2),X(` `,e.page().setup?.mode===`events-only`?`This build has no debug utils, so the live config cannot be read.`:`The page has not reported its route config yet.`,` `),M(2),X(` `,e.page().setup?.mode===`events-only`?`Run the app with the development build to inspect the live config.`:`It appears once the router initializes. Navigate in the app if it stays empty.`,` `)}}function gM(e,t){if(e&1){let e=W();H(0,`div`,15)(1,`p`,23),J(2,`No routes match the filter.`),U(),H(3,`p`,18),J(4,`Try a shorter path or a component name.`),U(),H(5,`button`,24),Qg(`click`,function(){O(e);let t=K(),n=n_(16);return t.setFilter(``),k(n.focus())}),J(6,` Clear filter `),U()()}}function _M(e,t){e&1&&(H(0,`span`,28),J(1,`active`),U())}function vM(e,t){if(e&1&&(H(0,`span`,28),J(1),U()),e&2){let e=K().$implicit;M(),X(`lazy `,e.node.lazy)}}function yM(e,t){if(e&1&&(H(0,`span`,28),J(1),U()),e&2){let e=K().$implicit;M(),X(`outlet `,e.node.outlet)}}function bM(e,t){if(e&1&&(H(0,`span`,29)(1,`span`,26),J(2,`declared in `),U(),J(3),U()),e&2){let e=K().$implicit;M(3),Y(e.source)}}function xM(e,t){if(e&1&&(H(0,`span`,30),J(1,`redirect `),H(2,`span`,35),J(3,`→`),U(),H(4,`code`),J(5),U()()),e&2){let e=K().$implicit;M(5),Y(e.node.redirectTo)}}function SM(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` `,e.node.component??(e.node.lazy===`unloaded`?`lazy, not loaded yet`:e.node.kind),` `)}}function CM(e,t){if(e&1&&(H(0,`span`,28),J(1),U()),e&2){let e=t.$implicit;M(),Y(e)}}function wM(e,t){if(e&1&&(H(0,`span`,28),J(1),U()),e&2){let e=t.$implicit;M(),X(`resolve `,e)}}function TM(e,t){e&1&&(H(0,`span`,36),J(1,`–`),U(),H(2,`span`,26),J(3,`none`),U())}function EM(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` `,e.node.title,` `)}}function DM(e,t){e&1&&(H(0,`span`,36),J(1,`–`),U(),H(2,`span`,26),J(3,`none`),U())}function OM(e,t){if(e&1){let e=W();H(0,`input`,38),Qg(`input`,function(t){let n=O(e).$implicit,r=K(2).$implicit;return k(K(2).setParam(r.node.id,n,t.target.value))}),U()}if(e&2){let e=t.$implicit,n=K(2).$implicit,r=K(2);Vg(`placeholder`,e)(`value`,r.paramValues()[n.node.id]?.[e]??``),N(`aria-label`,e+` for `+n.node.fullPath)(`aria-invalid`,r.isInvalid(n.node,e)?`true`:null)(`aria-describedby`,r.isInvalid(n.node,e)?`route-tree-row-result`:null)}}function kM(e,t){if(e&1){let e=W();I(0,OM,1,5,`input`,37,wg),H(2,`button`,7),Qg(`click`,function(){O(e);let t=K().$implicit,n=n_(1);return k(K(2).navigate(t.node,n))}),J(3,` Go `),U()}if(e&2){let e=K().$implicit,t=K(2);L(t.params(e.node)),M(2),Vg(`disabled`,!t.navigationAllowed()),N(`aria-describedby`,t.navigationAllowed()?null:`route-tree-writes-off`)(`aria-label`,`Navigate to `+e.node.fullPath)}}function AM(e,t){if(e&1){let e=W();H(0,`button`,24),Qg(`click`,function(){O(e);let t=K().$implicit;return k(K(2).resolveLazy(t.node))}),J(1,` Read lazy `),U()}if(e&2){let e=K().$implicit;N(`aria-label`,`Read lazy routes of `+e.node.fullPath)}}function jM(e,t){if(e&1&&(H(0,`tr`,34)(1,`td`,39)(2,`p`,40),J(3),U()()()),e&2){let e=K(3);M(3),Y(e.rowResult()?.text)}}function MM(e,t){if(e&1&&(H(0,`tr`,null,2)(2,`td`,27),J(3),P(4,_M,2,0,`span`,28),P(5,vM,2,1,`span`,28),P(6,yM,2,1,`span`,28),P(7,bM,4,1,`span`,29),U(),H(8,`td`),P(9,xM,6,1,`span`,30)(10,SM,1,1),U(),H(11,`td`),I(12,CM,2,1,`span`,28,Cg),I(14,wM,2,1,`span`,28,wg),P(16,TM,4,0),U(),H(17,`td`),P(18,EM,1,1)(19,DM,4,0),U(),H(20,`td`,31)(21,`div`,32),P(22,kM,4,3),P(23,AM,2,1,`button`,33),U()()(),P(24,jM,4,1,`tr`,34)),e&2){let e=t.$implicit,n=K(2);q(`active`,n.isActive(e.node)),M(2),C_(`padding-left`,14+e.depth*16,`px`),M(),X(` `,e.node.fullPath,` `),M(),F(n.isActive(e.node)?4:-1),M(),F(e.node.lazy?5:-1),M(),F(e.node.outlet?6:-1),M(),F(e.source?7:-1),M(2),F(e.node.redirectTo===void 0?10:9),M(3),L(n.guardList(e.node)),M(2),L(e.node.resolvers??ov(15,tM)),M(2),F(!n.guardList(e.node).length&&!e.node.resolvers?.length?16:-1),M(2),F(e.node.title?18:19),M(4),F(n.canNavigate(e.node)?22:-1),M(),F(e.node.kind===`lazy`&&e.node.lazy===`unloaded`?23:-1),M(),F(n.rowResult()?.id===e.node.id?24:-1)}}function NM(e,t){if(e&1&&(H(0,`div`,16)(1,`table`)(2,`thead`)(3,`tr`)(4,`th`,25),J(5,`Path`),U(),H(6,`th`,25),J(7,`Target`),U(),H(8,`th`,25),J(9,`Guards and resolvers`),U(),H(10,`th`,25),J(11,`Title`),U(),H(12,`th`,25)(13,`span`,26),J(14,`Actions`),U()()()(),H(15,`tbody`),I(16,MM,25,16,null,null,nM),U()()()),e&2){let e=K();M(16),L(e.rows())}}function PM(e,t){return`${e} of ${t} ${t===1?`route`:`routes`}`}var FM=class e{page=$.required();rpc=$(null);navigationAllowed=Q(()=>SE(this.rpc(),`router`));navigationOff=JT(`router`);sources=$([]);filter=j(``);testUrl=j(``);pageId=Q(()=>this.page().pageId);match=Tv({source:this.pageId,computation:()=>null});message=Tv({source:this.pageId,computation:()=>``});rowResult=Tv({source:this.pageId,computation:()=>null});paramValues=Tv({source:this.pageId,computation:()=>({})});checkedRow=Tv({source:this.pageId,computation:()=>null});filterAnnouncement=Tv({source:this.pageId,computation:()=>``});predictSeq=0;announceFlip=!1;probeSeq=0;urlInput=Rv(`urlInput`);active=Q(()=>new Set(this.page().activeIds??[]));rows=Q(()=>{let e=this.filter().toLowerCase(),t=this.sources(),n=[],r=(i,a)=>{for(let o of i){let i=Bk(o,t),s=i&&zk(i);(!e||o.fullPath.toLowerCase().includes(e)||o.component?.toLowerCase().includes(e)||s?.toLowerCase().includes(e))&&n.push({node:o,depth:a,source:s}),o.children&&r(o.children,a+1)}};return r(this.page().config??[],0),n});total=Q(()=>{let e=t=>t.reduce((t,n)=>t+1+e(n.children??[]),0);return e(this.page().config??[])});countText=Q(()=>PM(this.rows().length,this.total()));setFilter(e){this.filter.set(e);let t=this.rows().length,n=e?t?`${PM(t,this.total())} match.`:`No routes match.`:``;this.announceFlip=!this.announceFlip,this.filterAnnouncement.set(n&&(this.announceFlip?`${n}\u00a0`:n))}hasKeys(e){return Object.keys(e).length>0}isActive(e){return this.active().has(e.id)}guardList(e){return Object.entries(e.guards??{}).flatMap(([e,t])=>t.map(t=>`${e} ${t}`))}params(e){return(e.fullPath.match(/:([A-Za-z0-9_]+)/g)??[]).map(e=>e.slice(1))}canNavigate(e){return e.redirectTo===void 0&&!e.matcher&&!e.outlet&&!e.fullPath.includes(`**`)&&(!!e.component||e.kind===`component`||e.kind===`lazy`)}setParam(e,t,n){this.paramValues.update(r=>({...r,[e]:{...r[e],[t]:n}}))}missingParams(e){let t=this.paramValues()[e.id]??{};return this.params(e).filter(e=>!t[e])}isInvalid(e,t){return this.checkedRow()===e.id&&!this.paramValues()[e.id]?.[t]}chainText(e){return e.chain.map(e=>e.fullPath).join(` → `)}editUrl(e){this.testUrl.set(e),this.predictSeq++,this.probeSeq++,this.match.set(null),this.message.set(``)}askForUrl(e){this.match.set(null),this.message.set(`Type a URL to ${e}, for example /users/42.`),this.urlInput()?.nativeElement.focus()}async predict(){let e=this.testUrl().trim(),t=++this.predictSeq;if(!e){this.askForUrl(`predict`);return}let n=this.pageId(),r=await Vk(this.rpc(),`router-match`,{pageId:n,url:e});t===this.predictSeq&&n===this.pageId()&&(this.match.set(r&&{url:e,result:r}),r?this.message()===`Could not reach the page.`&&this.message.set(``):this.message.set(Uk))}async probe(){let e=this.testUrl().trim(),t=++this.probeSeq;if(!e){this.askForUrl(`probe`);return}this.message.set(`Running the real matcher in the app…`);let n=this.pageId(),r=await Wk(this.rpc(),n,{action:`probe`,url:e});if(t===this.probeSeq&&n===this.pageId()){if(r.error){this.message.set(String(r.error));return}this.message.set(r.matched?`The app recognized ${e} and its canMatch guards passed. The probe stopped before canActivate guards and resolvers, so those did not run. See the probe entry in Navigations.`:typeof r.redirectedTo==`string`?`A canMatch guard or the navigation error handler redirected ${e} to ${r.redirectedTo}. The probe stopped that navigation before it rendered anything.`:`The app could not recognize ${e}: ${String(r.reason??``)}`)}}async navigate(e,t){let n=this.missingParams(e);if(n.length){this.checkedRow.set(e.id),this.rowResult.set({id:e.id,text:`Fill in ${n.map(e=>`:${e}`).join(`, `)} to navigate.`}),Array.from(t?.querySelectorAll(`input.param`)??[]).find(e=>!e.value)?.focus();return}this.checkedRow.set(null),this.rowResult.set({id:e.id,text:`Navigating to ${e.fullPath}…`});let r=this.pageId(),i=await Wk(this.rpc(),r,{action:`navigate`,pattern:e.fullPath,params:this.paramValues()[e.id]??{}});r===this.pageId()&&this.rowResult.set({id:e.id,text:i.error?String(i.error):`Navigation #${i.id}: ${i.outcome}${i.finalUrl?` at ${i.finalUrl}`:``}.`})}async resolveLazy(e){let t=this.pageId(),n=await Wk(this.rpc(),t,{action:`resolve-lazy`,id:e.id});if(t!==this.pageId())return;if(n.error){this.rowResult.set({id:e.id,text:String(n.error)});return}let r=n.routes??[];this.rowResult.set({id:e.id,text:`${e.fullPath} declares ${r.length} route(s): ${r.map(e=>`/${e.path}`).join(`, `)}. The router loads them for real on the first navigation that needs them.`})}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-route-tree`]],viewQuery:function(e,t){e&1&&e_(t.urlInput,eM,5),e&2&&t_()},inputs:{page:[1,`page`],rpc:[1,`rpc`],sources:[1,`sources`]},decls:23,vars:11,consts:[[`urlInput`,``],[`filterInput`,``],[`rowEl`,``],[1,`test`,3,`submit`],[`for`,`test-url`],[`id`,`test-url`,`type`,`text`,`placeholder`,`/users/42`,1,`field`,3,`input`,`value`],[`type`,`submit`,1,`small`,`primary`],[`type`,`button`,1,`small`,3,`click`,`disabled`],[`role`,`status`,1,`result`],[`role`,`status`,1,`message`],[`role`,`status`,1,`visually-hidden`],[`id`,`route-tree-writes-off`,1,`message`],[1,`filter-row`],[`type`,`search`,`aria-label`,`Filter routes`,`placeholder`,`Filter by path, component or file`,1,`field`,`filter`,3,`input`,`keydown.escape`,`value`],[1,`muted`,`summary`],[1,`empty`],[`role`,`region`,`aria-label`,`Live route config`,`tabindex`,`0`,1,`table-scroll`],[1,`for`],[1,`muted`],[`data-tone`,`good`,1,`badge`],[1,`chain`],[`data-tone`,`bad`,1,`badge`],[1,`count`],[1,`empty-title`],[`type`,`button`,1,`small`,3,`click`],[`scope`,`col`],[1,`visually-hidden`],[1,`path`],[1,`tag`],[1,`src`],[1,`redirect`],[1,`actions`],[1,`actions-inner`],[`type`,`button`,1,`small`],[1,`row-result`],[`aria-hidden`,`true`],[`aria-hidden`,`true`,1,`nil`],[`type`,`text`,1,`field`,`param`,3,`placeholder`,`value`],[`type`,`text`,1,`field`,`param`,3,`input`,`placeholder`,`value`],[`colspan`,`5`],[`id`,`route-tree-row-result`]],template:function(e,t){if(e&1){let e=W();H(0,`form`,3),Qg(`submit`,function(n){return O(e),n.preventDefault(),k(t.predict())}),H(1,`label`,4),J(2,`Test a URL`),U(),H(3,`input`,5,0),Qg(`input`,function(e){return t.editUrl(e.target.value)}),U(),H(5,`button`,6),J(6,`Predict`),U(),H(7,`button`,7),Qg(`click`,function(){return t.probe()}),J(8,` Probe in app `),U()(),P(9,cM,11,4,`div`,8),P(10,lM,2,1,`p`,9),H(11,`p`,10),J(12),U(),P(13,uM,2,1,`p`,11),H(14,`div`,12)(15,`input`,13,1),Qg(`input`,function(e){return t.setFilter(e.target.value)})(`keydown.escape`,function(){return t.setFilter(``)}),U(),P(17,mM,6,3,`p`,14),U(),H(18,`p`,10),J(19),U(),P(20,hM,5,2,`div`,15)(21,gM,7,0,`div`,15)(22,NM,18,0,`div`,16)}if(e&2){let e;M(3),Vg(`value`,t.testUrl()),M(4),Vg(`disabled`,!t.navigationAllowed()),N(`aria-describedby`,t.navigationAllowed()?null:`route-tree-writes-off`),M(2),F((e=t.match())?9:-1,e),M(),F(t.message()?10:-1),M(2),Y(t.rowResult()?.text),M(),F(t.navigationAllowed()?-1:13),M(2),Vg(`value`,t.filter()),M(2),F(t.page().config?17:-1),M(2),Y(t.filterAnnouncement()),M(),F(t.page().config?t.rows().length?22:21:20)}},dependencies:[ab],styles:[`.muted[_ngcontent-%COMP%] { +}`]})},_M=[`urlInput`],vM=()=>[],yM=(e,t)=>t.node.id;function bM(e,t){if(e&1&&(J(0,` with `),z(1,`code`),J(2),yv(3,`json`),B()),e&2){K(2);let e=fv(0);M(2),Y(xv(3,1,e.params))}}function xM(e,t){if(e&1&&(z(0,`span`,19),J(1,`match`),B(),J(2,` Matches `),z(3,`code`,20),J(4),B(),P(5,bM,4,3)),e&2){K();let e=fv(0),t=K();M(4),Y(t.chainText(e)),M(),F(t.hasKeys(e.params)?5:-1)}}function SM(e,t){if(e&1&&(J(0,` Nearest: `),z(1,`code`),J(2),B()),e&2){K(2);let e=fv(0);M(2),Y(e.nearest.join(`, `))}}function CM(e,t){if(e&1&&(z(0,`span`,21),J(1,`no match`),B(),J(2,` Matches no route (NG04002). `),P(3,SM,3,1)),e&2){K();let e=fv(0);M(3),F(e.nearest.length?3:-1)}}function wM(e,t){if(e&1&&(z(0,`div`,18),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function TM(e,t){if(e&1&&(uv(0),z(1,`div`,8)(2,`span`,17),J(3,`Result for `),z(4,`code`),J(5),B(),J(6,`:`),B(),P(7,xM,6,2)(8,CM,4,1),I(9,wM,2,1,`div`,18,Og),B()),e&2){let e=t,n=dv(e.result);M(),N(`data-matched`,n.matched),M(4),Y(e.url),M(2),F(n.matched?7:8),M(2),L(n.notes)}}function EM(e,t){if(e&1&&(z(0,`p`,9),J(1),B()),e&2){let e=K();M(),Y(e.message())}}function DM(e,t){if(e&1&&(z(0,`p`,11),J(1),B()),e&2){let e=K();M(),Y(e.navigationOff)}}function OM(e,t){if(e&1&&(z(0,`span`,22),J(1),B(),J(2,`. `)),e&2){let e=K(2);M(),Y(e.countText())}}function kM(e,t){e&1&&J(0),e&2&&X(` `,K(2).rows().length,` route(s). `)}function AM(e,t){e&1&&J(0),e&2&&X(` `,t,` route(s) left out: the page lists at most 200 routes per level and 1000 in total. `)}function jM(e,t){if(e&1&&(z(0,`p`,14),J(1),P(2,OM,3,1)(3,kM,1,1),J(4,` Lazy routes show their children once loaded. `),P(5,AM,1,1),B()),e&2){let e,t=K();M(),X(` Generation `,t.page().generation,` · `),M(),F(t.filter()?2:3),M(3),F((e=t.page().configTruncated)?5:-1,e)}}function MM(e,t){if(e&1&&(z(0,`div`,15)(1,`p`,23),J(2),B(),z(3,`p`,18),J(4),B()()),e&2){let e=K();M(2),X(` `,e.page().setup?.mode===`events-only`?`This build has no debug utils, so the live config cannot be read.`:`The page has not reported its route config yet.`,` `),M(2),X(` `,e.page().setup?.mode===`events-only`?`Run the app with the development build to inspect the live config.`:`It appears once the router initializes. Navigate in the app if it stays empty.`,` `)}}function NM(e,t){if(e&1){let e=W();z(0,`div`,15)(1,`p`,23),J(2,`No routes match the filter.`),B(),z(3,`p`,18),J(4,`Try a shorter path or a component name.`),B(),z(5,`button`,24),G(`click`,function(){O(e);let t=K(),n=u_(16);return t.setFilter(``),k(n.focus())}),J(6,` Clear filter `),B()()}}function PM(e,t){e&1&&(z(0,`span`,28),J(1,`active`),B())}function FM(e,t){if(e&1&&(z(0,`span`,28),J(1),B()),e&2){let e=K().$implicit;M(),X(`lazy `,e.node.lazy)}}function IM(e,t){if(e&1&&(z(0,`span`,28),J(1),B()),e&2){let e=K().$implicit;M(),X(`outlet `,e.node.outlet)}}function LM(e,t){if(e&1&&(z(0,`span`,29)(1,`span`,26),J(2,`declared in `),B(),V(3,`app-source-link`,35),B()),e&2){let e=K().$implicit;M(3),R(`file`,e.at.file)(`line`,e.at.line)}}function RM(e,t){if(e&1&&(z(0,`span`,30),J(1,`redirect `),z(2,`span`,36),J(3,`→`),B(),z(4,`code`),J(5),B()()),e&2){let e=K().$implicit;M(5),Y(e.node.redirectTo)}}function zM(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` `,e.node.component??(e.node.lazy===`unloaded`?`lazy, not loaded yet`:e.node.kind),` `)}}function BM(e,t){if(e&1&&(z(0,`span`,28),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function VM(e,t){if(e&1&&(z(0,`span`,28),J(1),B()),e&2){let e=t.$implicit;M(),X(`resolve `,e)}}function HM(e,t){e&1&&(z(0,`span`,37),J(1,`–`),B(),z(2,`span`,26),J(3,`none`),B())}function UM(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` `,e.node.title,` `)}}function WM(e,t){e&1&&(z(0,`span`,37),J(1,`–`),B(),z(2,`span`,26),J(3,`none`),B())}function GM(e,t){if(e&1){let e=W();z(0,`input`,39),G(`input`,function(t){let n=O(e).$implicit,r=K(2).$implicit;return k(K(2).setParam(r.node.id,n,t.target.value))}),B()}if(e&2){let e=t.$implicit,n=K(2).$implicit,r=K(2);R(`placeholder`,e)(`value`,r.paramValues()[n.node.id]?.[e]??``),N(`aria-label`,e+` for `+n.node.fullPath)(`aria-invalid`,r.isInvalid(n.node,e)?`true`:null)(`aria-describedby`,r.isInvalid(n.node,e)?`route-tree-row-result`:null)}}function KM(e,t){if(e&1){let e=W();I(0,GM,1,5,`input`,38,Og),z(2,`button`,7),G(`click`,function(){O(e);let t=K().$implicit,n=u_(1);return k(K(2).navigate(t.node,n))}),J(3,` Go `),B()}if(e&2){let e=K().$implicit,t=K(2);L(t.params(e.node)),M(2),R(`disabled`,!t.navigationAllowed()),N(`aria-describedby`,t.navigationAllowed()?null:`route-tree-writes-off`)(`aria-label`,`Navigate to `+e.node.fullPath)}}function qM(e,t){if(e&1){let e=W();z(0,`button`,24),G(`click`,function(){O(e);let t=K().$implicit;return k(K(2).resolveLazy(t.node))}),J(1,` Read lazy `),B()}if(e&2){let e=K().$implicit;N(`aria-label`,`Read lazy routes of `+e.node.fullPath)}}function JM(e,t){if(e&1&&(z(0,`tr`,34)(1,`td`,40)(2,`p`,41),J(3),B()()()),e&2){let e=K(3);M(3),Y(e.rowResult()?.text)}}function YM(e,t){if(e&1&&(z(0,`tr`,null,2)(2,`td`,27),J(3),P(4,PM,2,0,`span`,28),P(5,FM,2,1,`span`,28),P(6,IM,2,1,`span`,28),P(7,LM,4,2,`span`,29),B(),z(8,`td`),P(9,RM,6,1,`span`,30)(10,zM,1,1),B(),z(11,`td`),I(12,BM,2,1,`span`,28,Dg),I(14,VM,2,1,`span`,28,Og),P(16,HM,4,0),B(),z(17,`td`),P(18,UM,1,1)(19,WM,4,0),B(),z(20,`td`,31)(21,`div`,32),P(22,KM,4,3),P(23,qM,2,1,`button`,33),B()()(),P(24,JM,4,1,`tr`,34)),e&2){let e=t.$implicit,n=K(2);q(`active`,n.isActive(e.node)),M(2),j_(`padding-left`,14+e.depth*16,`px`),M(),X(` `,e.node.fullPath,` `),M(),F(n.isActive(e.node)?4:-1),M(),F(e.node.lazy?5:-1),M(),F(e.node.outlet?6:-1),M(),F(e.at?7:-1),M(2),F(e.node.redirectTo===void 0?10:9),M(3),L(n.guardList(e.node)),M(2),L(e.node.resolvers??mv(15,vM)),M(2),F(!n.guardList(e.node).length&&!e.node.resolvers?.length?16:-1),M(2),F(e.node.title?18:19),M(4),F(n.canNavigate(e.node)?22:-1),M(),F(e.node.kind===`lazy`&&e.node.lazy===`unloaded`?23:-1),M(),F(n.rowResult()?.id===e.node.id?24:-1)}}function XM(e,t){if(e&1&&(z(0,`div`,16)(1,`table`)(2,`thead`)(3,`tr`)(4,`th`,25),J(5,`Path`),B(),z(6,`th`,25),J(7,`Target`),B(),z(8,`th`,25),J(9,`Guards and resolvers`),B(),z(10,`th`,25),J(11,`Title`),B(),z(12,`th`,25)(13,`span`,26),J(14,`Actions`),B()()()(),z(15,`tbody`),I(16,YM,25,16,null,null,yM),B()()()),e&2){let e=K();M(16),L(e.rows())}}function ZM(e,t){return`${e} of ${t} ${t===1?`route`:`routes`}`}var QM=class e{page=$.required();rpc=$(null);navigationAllowed=Q(()=>AE(this.rpc(),`router`));navigationOff=nE(`router`);sources=$([]);filter=j(``);testUrl=j(``);pageId=Q(()=>this.page().pageId);match=Nv({source:this.pageId,computation:()=>null});message=Nv({source:this.pageId,computation:()=>``});rowResult=Nv({source:this.pageId,computation:()=>null});paramValues=Nv({source:this.pageId,computation:()=>({})});checkedRow=Nv({source:this.pageId,computation:()=>null});filterAnnouncement=Nv({source:this.pageId,computation:()=>``});predictSeq=0;announceFlip=!1;probeSeq=0;urlInput=Kv(`urlInput`);active=Q(()=>new Set(this.page().activeIds??[]));rows=Q(()=>{let e=this.filter().toLowerCase(),t=this.sources(),n=[],r=(i,a)=>{for(let o of i){let i=rA(o,t),s=i&&nA(i);(!e||o.fullPath.toLowerCase().includes(e)||o.component?.toLowerCase().includes(e)||s?.toLowerCase().includes(e))&&n.push({node:o,depth:a,source:s,at:i}),o.children&&r(o.children,a+1)}};return r(this.page().config??[],0),n});total=Q(()=>{let e=t=>t.reduce((t,n)=>t+1+e(n.children??[]),0);return e(this.page().config??[])});countText=Q(()=>ZM(this.rows().length,this.total()));setFilter(e){this.filter.set(e);let t=this.rows().length,n=e?t?`${ZM(t,this.total())} match.`:`No routes match.`:``;this.announceFlip=!this.announceFlip,this.filterAnnouncement.set(n&&(this.announceFlip?`${n}\u00a0`:n))}hasKeys(e){return Object.keys(e).length>0}isActive(e){return this.active().has(e.id)}guardList(e){return Object.entries(e.guards??{}).flatMap(([e,t])=>t.map(t=>`${e} ${t}`))}params(e){return(e.fullPath.match(/:([A-Za-z0-9_]+)/g)??[]).map(e=>e.slice(1))}canNavigate(e){return e.redirectTo===void 0&&!e.matcher&&!e.outlet&&!e.fullPath.includes(`**`)&&(!!e.component||e.kind===`component`||e.kind===`lazy`)}setParam(e,t,n){this.paramValues.update(r=>({...r,[e]:{...r[e],[t]:n}}))}missingParams(e){let t=this.paramValues()[e.id]??{};return this.params(e).filter(e=>!t[e])}isInvalid(e,t){return this.checkedRow()===e.id&&!this.paramValues()[e.id]?.[t]}chainText(e){return e.chain.map(e=>e.fullPath).join(` → `)}editUrl(e){this.testUrl.set(e),this.predictSeq++,this.probeSeq++,this.match.set(null),this.message.set(``)}askForUrl(e){this.match.set(null),this.message.set(`Type a URL to ${e}, for example /users/42.`),this.urlInput()?.nativeElement.focus()}async predict(){let e=this.testUrl().trim(),t=++this.predictSeq;if(!e){this.askForUrl(`predict`);return}let n=this.pageId(),r=await iA(this.rpc(),`router-match`,{pageId:n,url:e});t===this.predictSeq&&n===this.pageId()&&(this.match.set(r&&{url:e,result:r}),r?this.message()===`Could not reach the page.`&&this.message.set(``):this.message.set(oA))}async probe(){let e=this.testUrl().trim(),t=++this.probeSeq;if(!e){this.askForUrl(`probe`);return}this.message.set(`Running the real matcher in the app…`);let n=this.pageId(),r=await sA(this.rpc(),n,{action:`probe`,url:e});if(t===this.probeSeq&&n===this.pageId()){if(r.error){this.message.set(String(r.error));return}this.message.set(r.matched?`The app recognized ${e} and its canMatch guards passed. The probe stopped before canActivate guards and resolvers, so those did not run. See the probe entry in Navigations.`:typeof r.redirectedTo==`string`?`A canMatch guard or the navigation error handler redirected ${e} to ${r.redirectedTo}. The probe stopped that navigation before it rendered anything.`:`The app could not recognize ${e}: ${String(r.reason??``)}`)}}async navigate(e,t){let n=this.missingParams(e);if(n.length){this.checkedRow.set(e.id),this.rowResult.set({id:e.id,text:`Fill in ${n.map(e=>`:${e}`).join(`, `)} to navigate.`}),Array.from(t?.querySelectorAll(`input.param`)??[]).find(e=>!e.value)?.focus();return}this.checkedRow.set(null),this.rowResult.set({id:e.id,text:`Navigating to ${e.fullPath}…`});let r=this.pageId(),i=await sA(this.rpc(),r,{action:`navigate`,pattern:e.fullPath,params:this.paramValues()[e.id]??{}});r===this.pageId()&&this.rowResult.set({id:e.id,text:i.error?String(i.error):`Navigation #${i.id}: ${i.outcome}${i.finalUrl?` at ${i.finalUrl}`:``}.`})}async resolveLazy(e){let t=this.pageId(),n=await sA(this.rpc(),t,{action:`resolve-lazy`,id:e.id});if(t!==this.pageId())return;if(n.error){this.rowResult.set({id:e.id,text:String(n.error)});return}let r=n.routes??[];this.rowResult.set({id:e.id,text:`${e.fullPath} declares ${r.length} route(s): ${r.map(e=>`/${e.path}`).join(`, `)}. The router loads them for real on the first navigation that needs them.`})}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-route-tree`]],viewQuery:function(e,t){e&1&&c_(t.urlInput,_M,5),e&2&&l_()},inputs:{page:[1,`page`],rpc:[1,`rpc`],sources:[1,`sources`]},decls:23,vars:11,consts:[[`urlInput`,``],[`filterInput`,``],[`rowEl`,``],[1,`test`,3,`submit`],[`for`,`test-url`],[`id`,`test-url`,`type`,`text`,`placeholder`,`/users/42`,1,`field`,3,`input`,`value`],[`type`,`submit`,1,`small`,`primary`],[`type`,`button`,1,`small`,3,`click`,`disabled`],[`role`,`status`,1,`result`],[`role`,`status`,1,`message`],[`role`,`status`,1,`visually-hidden`],[`id`,`route-tree-writes-off`,1,`message`],[1,`filter-row`],[`type`,`search`,`aria-label`,`Filter routes`,`placeholder`,`Filter by path, component or file`,1,`field`,`filter`,3,`input`,`keydown.escape`,`value`],[1,`muted`,`summary`],[1,`empty`],[`role`,`region`,`aria-label`,`Live route config`,`tabindex`,`0`,1,`table-scroll`],[1,`for`],[1,`muted`],[`data-tone`,`good`,1,`badge`],[1,`chain`],[`data-tone`,`bad`,1,`badge`],[1,`count`],[1,`empty-title`],[`type`,`button`,1,`small`,3,`click`],[`scope`,`col`],[1,`visually-hidden`],[1,`path`],[1,`tag`],[1,`src`],[1,`redirect`],[1,`actions`],[1,`actions-inner`],[`type`,`button`,1,`small`],[1,`row-result`],[3,`file`,`line`],[`aria-hidden`,`true`],[`aria-hidden`,`true`,1,`nil`],[`type`,`text`,1,`field`,`param`,3,`placeholder`,`value`],[`type`,`text`,1,`field`,`param`,3,`input`,`placeholder`,`value`],[`colspan`,`5`],[`id`,`route-tree-row-result`]],template:function(e,t){if(e&1){let e=W();z(0,`form`,3),G(`submit`,function(n){return O(e),n.preventDefault(),k(t.predict())}),z(1,`label`,4),J(2,`Test a URL`),B(),z(3,`input`,5,0),G(`input`,function(e){return t.editUrl(e.target.value)}),B(),z(5,`button`,6),J(6,`Predict`),B(),z(7,`button`,7),G(`click`,function(){return t.probe()}),J(8,` Probe in app `),B()(),P(9,TM,11,4,`div`,8),P(10,EM,2,1,`p`,9),z(11,`p`,10),J(12),B(),P(13,DM,2,1,`p`,11),z(14,`div`,12)(15,`input`,13,1),G(`input`,function(e){return t.setFilter(e.target.value)})(`keydown.escape`,function(){return t.setFilter(``)}),B(),P(17,jM,6,3,`p`,14),B(),z(18,`p`,10),J(19),B(),P(20,MM,5,2,`div`,15)(21,NM,7,0,`div`,15)(22,XM,18,0,`div`,16)}if(e&2){let e;M(3),R(`value`,t.testUrl()),M(4),R(`disabled`,!t.navigationAllowed()),N(`aria-describedby`,t.navigationAllowed()?null:`route-tree-writes-off`),M(2),F((e=t.match())?9:-1,e),M(),F(t.message()?10:-1),M(2),Y(t.rowResult()?.text),M(),F(t.navigationAllowed()?-1:13),M(2),R(`value`,t.filter()),M(2),F(t.page().config?17:-1),M(2),Y(t.filterAnnouncement()),M(),F(t.page().config?t.rows().length?22:21:20)}},dependencies:[wO,pb],styles:[`.muted[_ngcontent-%COMP%] { color: var(--%NS%text-2); font-size: 13px; line-height: 1.5; @@ -3776,7 +3811,7 @@ tr.active[_ngcontent-%COMP%] td[_ngcontent-%COMP%]:first-child { .filter[_ngcontent-%COMP%] { flex-basis: 100%; } -}`]})},IM=(e,t)=>t.id;function LM(e,t){if(e&1){let e=W();z(0,`div`,4)(1,`span`,5),J(2,`Page`),B(),z(3,`app-select`,6),G(`valueChange`,function(t){return O(e),k(K(2).pageId.set(t))}),B()()}if(e&2){let e=K(),t=K();M(3),R(`options`,t.pageOptions())(`value`,e.pageId)}}function RM(e,t){e&1&&P(0,LM,4,2,`div`,4),e&2&&F(K().pages().length>1?0:-1)}function zM(e,t){if(e&1){let e=W();z(0,`div`,1)(1,`p`,7),J(2,`Could not load the live router state.`),B(),z(3,`p`,8),J(4,` Check that the dev server with Pangular Inspector is still running, then retry. `),B(),z(5,`button`,9),G(`click`,function(){return O(e),k(K().retry())}),J(6,`Retry`),B()()}}function BM(e,t){e&1&&(z(0,`p`,2),J(1,`Loading the live router state…`),B())}function VM(e,t){if(e&1&&(z(0,`span`,17),J(1),B(),z(2,`span`,18),J(3),B()),e&2){let e=K(3);M(),Y(e.problems()),M(2),X(`, `,e.problems(),` problem navigations`)}}function HM(e,t){if(e&1){let e=W();z(0,`button`,16),G(`click`,function(){let t=O(e).$implicit;return k(K(2).selected.set(t.id))}),J(1),P(2,VM,4,2),B()}if(e&2){let e=t.$implicit,n=K(2);R(`id`,`router-tab-`+e.id),N(`aria-selected`,e.id===n.selected())(`aria-controls`,`router-panel-`+e.id)(`tabindex`,e.id===n.selected()?0:-1),M(),X(` `,e.label,` `),M(),F(e.id===`navigations`&&n.problems()>0?2:-1)}}function UM(e,t){if(e&1){let e=W();z(0,`app-route-current`,19),G(`showComponent`,function(t){return O(e),k(K(2).showComponent.emit(t))}),B()}if(e&2){let e=K(),t=K();R(`page`,e)(`rpc`,t.rpc())}}function WM(e,t){if(e&1&&V(0,`app-route-timeline`,13),e&2){let e=K(),t=K();R(`page`,e)(`rpc`,t.rpc())}}function GM(e,t){if(e&1&&V(0,`app-route-tree`,14),e&2){let e=K(),t=K();R(`page`,e)(`rpc`,t.rpc())(`sources`,t.sources())}}function KM(e,t){e&1&&V(0,`app-route-setup`,15),e&2&&R(`page`,K())}function qM(e,t){if(e&1&&V(0,`app-route-lint`,13),e&2){let e=K(),t=K();R(`page`,e)(`rpc`,t.rpc())}}function JM(e,t){if(e&1){let e=W();z(0,`div`,10),G(`keydown`,function(t){return O(e),k(K().onKey(t))}),I(1,HM,3,6,`button`,11,IM),B(),z(3,`div`,12),P(4,UM,1,2,`app-route-current`,13)(5,WM,1,2,`app-route-timeline`,13)(6,GM,1,3,`app-route-tree`,14)(7,KM,1,1,`app-route-setup`,15)(8,qM,1,2,`app-route-lint`,13),B()}if(e&2){let e,t=K();M(),L(t.tabs),M(2),R(`id`,`router-panel-`+t.selected()),N(`aria-labelledby`,`router-tab-`+t.selected()),M(),F((e=t.selected())===`current`?4:e===`navigations`?5:e===`routes`?6:e===`setup`?7:e===`lint`?8:-1)}}function YM(e,t){e&1&&(z(0,`div`,3)(1,`p`,7),J(2,`No page is reporting router state yet.`),B(),z(3,`p`,8),J(4,` Open the app in a browser. This view updates as soon as a page connects. `),B()())}var XM=[{id:`current`,label:`Current`},{id:`navigations`,label:`Navigations`},{id:`routes`,label:`Routes`},{id:`setup`,label:`Setup`},{id:`lint`,label:`Lint`}],ZM=class e{rpc=$(null);sources=$([]);showComponent=Ov();tabs=XM;selected=j(`current`);pages=j([]);hostPageId=nE();loading=j(!0);failed=j(!1);pageId=Tv({source:this.pages,computation:(e,t)=>t?.value&&e.some(e=>e.pageId===t.value)?t.value:this.hostPageId?e.find(e=>e.pageId===this.hostPageId)?.pageId??null:e.find(e=>e.snapshot)?.pageId??e[0]?.pageId??null});unsubscribe=null;destroyRef=E(Cs);page=Q(()=>{let e=this.pages();return e.find(e=>e.pageId===this.pageId())??(this.hostPageId?null:e[0])??null});problems=Q(()=>(this.page()?.navigations??[]).filter(e=>!e.probe&&[`failed`,`cancelled`,`redirected`].includes(e.outcome)).length);constructor(){uc(()=>{let e=this.rpc();e&&this.load(e)}),this.destroyRef.onDestroy(()=>this.unsubscribe?.())}async load(e){this.loading.set(!0),this.failed.set(!1);try{let t=await e.scope(`pangular`).rpc.sharedState(`router`);if(this.destroyRef.destroyed)return;let n=e=>{this.pages.set(e?.pages??[])};n(t.value()),this.unsubscribe?.(),this.unsubscribe=t.on(`updated`,n)}catch{this.failed.set(!0)}finally{this.loading.set(!1)}}retry(){let e=this.rpc();e&&this.load(e)}pageOptions=Q(()=>this.pages().map(e=>({value:e.pageId,label:e.snapshot?.url??e.pageId,hint:e.pageId})));onKey(e){let t=this.tabs.map(e=>e.id),n=t.indexOf(this.selected()),r=n;if(e.key===`ArrowRight`)r=(n+1)%t.length;else if(e.key===`ArrowLeft`)r=(n-1+t.length)%t.length;else if(e.key===`Home`)r=0;else if(e.key===`End`)r=t.length-1;else return;e.preventDefault(),this.selected.set(t[r]);let i=e.currentTarget;queueMicrotask(()=>i.querySelector(`#router-tab-${t[r]}`)?.focus())}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-live-route`]],inputs:{rpc:[1,`rpc`],sources:[1,`sources`]},outputs:{showComponent:`showComponent`},decls:8,vars:2,consts:[[1,`section-head`],[`role`,`alert`,1,`empty`],[`role`,`status`,1,`muted`,`empty`],[1,`empty`],[1,`page-pick`],[`id`,`live-route-page-label`,1,`page-label`],[`labelledBy`,`live-route-page-label`,3,`valueChange`,`options`,`value`],[1,`empty-title`],[1,`muted`],[`type`,`button`,1,`retry`,3,`click`],[`role`,`tablist`,`aria-label`,`Router views`,1,`tabs`,3,`keydown`],[`type`,`button`,`role`,`tab`,3,`id`],[`role`,`tabpanel`,1,`panel`,3,`id`],[3,`page`,`rpc`],[3,`page`,`rpc`,`sources`],[3,`page`],[`type`,`button`,`role`,`tab`,3,`click`,`id`],[`aria-hidden`,`true`,1,`count`],[1,`visually-hidden`],[3,`showComponent`,`page`,`rpc`]],template:function(e,t){if(e&1&&(z(0,`div`,0)(1,`h2`),J(2,`Live router`),B(),P(3,RM,1,1),B(),P(4,zM,7,0,`div`,1)(5,BM,2,0,`p`,2)(6,JM,9,3)(7,YM,5,0,`div`,3)),e&2){let e,n;M(3),F((e=t.page())?3:-1,e),M(),F(t.failed()?4:t.loading()?5:(n=t.page())?6:7,n)}},dependencies:[OA,HA,nj,$j,FM,LD],styles:[`[_nghost-%COMP%] { +}`]})},$M=(e,t)=>t.id;function eN(e,t){if(e&1){let e=W();z(0,`div`,4)(1,`span`,5),J(2,`Page`),B(),z(3,`app-select`,6),G(`valueChange`,function(t){return O(e),k(K(2).pageId.set(t))}),B()()}if(e&2){let e=K(),t=K();M(3),R(`options`,t.pageOptions())(`value`,e.pageId)}}function tN(e,t){e&1&&P(0,eN,4,2,`div`,4),e&2&&F(K().pages().length>1?0:-1)}function nN(e,t){if(e&1){let e=W();z(0,`div`,1)(1,`p`,7),J(2,`Could not load the live router state.`),B(),z(3,`p`,8),J(4,` Check that the dev server with Pangular Inspector is still running, then retry. `),B(),z(5,`button`,9),G(`click`,function(){return O(e),k(K().retry())}),J(6,`Retry`),B()()}}function rN(e,t){e&1&&(z(0,`p`,2),J(1,`Loading the live router state…`),B())}function iN(e,t){if(e&1&&(z(0,`span`,17),J(1),B(),z(2,`span`,18),J(3),B()),e&2){let e=K(3);M(),Y(e.problems()),M(2),X(`, `,e.problems(),` problem navigations`)}}function aN(e,t){if(e&1){let e=W();z(0,`button`,16),G(`click`,function(){let t=O(e).$implicit;return k(K(2).selected.set(t.id))}),J(1),P(2,iN,4,2),B()}if(e&2){let e=t.$implicit,n=K(2);R(`id`,`router-tab-`+e.id),N(`aria-selected`,e.id===n.selected())(`aria-controls`,`router-panel-`+e.id)(`tabindex`,e.id===n.selected()?0:-1),M(),X(` `,e.label,` `),M(),F(e.id===`navigations`&&n.problems()>0?2:-1)}}function oN(e,t){if(e&1){let e=W();z(0,`app-route-current`,19),G(`showComponent`,function(t){return O(e),k(K(2).showComponent.emit(t))}),B()}if(e&2){let e=K(),t=K();R(`page`,e)(`rpc`,t.rpc())}}function sN(e,t){if(e&1&&V(0,`app-route-timeline`,13),e&2){let e=K(),t=K();R(`page`,e)(`rpc`,t.rpc())}}function cN(e,t){if(e&1&&V(0,`app-route-tree`,14),e&2){let e=K(),t=K();R(`page`,e)(`rpc`,t.rpc())(`sources`,t.sources())}}function lN(e,t){e&1&&V(0,`app-route-setup`,15),e&2&&R(`page`,K())}function uN(e,t){if(e&1&&V(0,`app-route-lint`,13),e&2){let e=K(),t=K();R(`page`,e)(`rpc`,t.rpc())}}function dN(e,t){if(e&1){let e=W();z(0,`div`,10),G(`keydown`,function(t){return O(e),k(K().onKey(t))}),I(1,aN,3,6,`button`,11,$M),B(),z(3,`div`,12),P(4,oN,1,2,`app-route-current`,13)(5,sN,1,2,`app-route-timeline`,13)(6,cN,1,3,`app-route-tree`,14)(7,lN,1,1,`app-route-setup`,15)(8,uN,1,2,`app-route-lint`,13),B()}if(e&2){let e,t=K();M(),L(t.tabs),M(2),R(`id`,`router-panel-`+t.selected()),N(`aria-labelledby`,`router-tab-`+t.selected()),M(),F((e=t.selected())===`current`?4:e===`navigations`?5:e===`routes`?6:e===`setup`?7:e===`lint`?8:-1)}}function fN(e,t){e&1&&(z(0,`div`,3)(1,`p`,7),J(2,`No page is reporting router state yet.`),B(),z(3,`p`,8),J(4,` Open the app in a browser. This view updates as soon as a page connects. `),B()())}var pN=[{id:`current`,label:`Current`},{id:`navigations`,label:`Navigations`},{id:`routes`,label:`Routes`},{id:`setup`,label:`Setup`},{id:`lint`,label:`Lint`}],mN=class e{rpc=$(null);sources=$([]);showComponent=Iv();tabs=pN;selected=j(`current`);pages=j([]);hostPageId=uE();loading=j(!0);failed=j(!1);pageId=Nv({source:this.pages,computation:(e,t)=>t?.value&&e.some(e=>e.pageId===t.value)?t.value:this.hostPageId?e.find(e=>e.pageId===this.hostPageId)?.pageId??null:e.find(e=>e.snapshot)?.pageId??e[0]?.pageId??null});unsubscribe=null;destroyRef=E(ws);page=Q(()=>{let e=this.pages();return e.find(e=>e.pageId===this.pageId())??(this.hostPageId?null:e[0])??null});problems=Q(()=>(this.page()?.navigations??[]).filter(e=>!e.probe&&[`failed`,`cancelled`,`redirected`].includes(e.outcome)).length);constructor(){dc(()=>{let e=this.rpc();e&&this.load(e)}),this.destroyRef.onDestroy(()=>this.unsubscribe?.())}async load(e){this.loading.set(!0),this.failed.set(!1);try{let t=await e.scope(`pangular`).rpc.sharedState(`router`);if(this.destroyRef.destroyed)return;let n=e=>{this.pages.set(e?.pages??[])};n(t.value()),this.unsubscribe?.(),this.unsubscribe=t.on(`updated`,n)}catch{this.failed.set(!0)}finally{this.loading.set(!1)}}retry(){let e=this.rpc();e&&this.load(e)}pageOptions=Q(()=>this.pages().map(e=>({value:e.pageId,label:e.snapshot?.url??e.pageId,hint:e.pageId})));onKey(e){let t=this.tabs.map(e=>e.id),n=t.indexOf(this.selected()),r=n;if(e.key===`ArrowRight`)r=(n+1)%t.length;else if(e.key===`ArrowLeft`)r=(n-1+t.length)%t.length;else if(e.key===`Home`)r=0;else if(e.key===`End`)r=t.length-1;else return;e.preventDefault(),this.selected.set(t[r]);let i=e.currentTarget;queueMicrotask(()=>i.querySelector(`#router-tab-${t[r]}`)?.focus())}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-live-route`]],inputs:{rpc:[1,`rpc`],sources:[1,`sources`]},outputs:{showComponent:`showComponent`},decls:8,vars:2,consts:[[1,`section-head`],[`role`,`alert`,1,`empty`],[`role`,`status`,1,`muted`,`empty`],[1,`empty`],[1,`page-pick`],[`id`,`live-route-page-label`,1,`page-label`],[`labelledBy`,`live-route-page-label`,3,`valueChange`,`options`,`value`],[1,`empty-title`],[1,`muted`],[`type`,`button`,1,`retry`,3,`click`],[`role`,`tablist`,`aria-label`,`Router views`,1,`tabs`,3,`keydown`],[`type`,`button`,`role`,`tab`,3,`id`],[`role`,`tabpanel`,1,`panel`,3,`id`],[3,`page`,`rpc`],[3,`page`,`rpc`,`sources`],[3,`page`],[`type`,`button`,`role`,`tab`,3,`click`,`id`],[`aria-hidden`,`true`,1,`count`],[1,`visually-hidden`],[3,`showComponent`,`page`,`rpc`]],template:function(e,t){if(e&1&&(z(0,`div`,0)(1,`h2`),J(2,`Live router`),B(),P(3,tN,1,1),B(),P(4,nN,7,0,`div`,1)(5,rN,2,0,`p`,2)(6,dN,9,3)(7,fN,5,0,`div`,3)),e&2){let e,n;M(3),F((e=t.page())?3:-1,e),M(),F(t.failed()?4:t.loading()?5:(n=t.page())?6:7,n)}},dependencies:[GA,aj,yj,gM,QM,GD],styles:[`[_nghost-%COMP%] { display: grid; gap: 16px; min-width: 0; @@ -3941,7 +3976,7 @@ h2[_ngcontent-%COMP%] { line-height: 16px; text-align: center; font-variant-numeric: tabular-nums; -}`]})};function QM(e,t){e&1&&J(0,` The Routes tab above shows what the router uses. `)}function $M(e,t){if(e&1){let e=W();z(0,`button`,13),G(`click`,function(){O(e);let t=K();return k(t.expanded.set(!t.expanded()))}),J(1),B()}if(e&2){let e=K();N(`aria-expanded`,e.expanded()),M(),X(` `,e.expanded()?`Hide table`:`Show table`,` `)}}function eN(e,t){e&1&&(J(0,` Run `),z(1,`code`),J(2,`pangular build`),B(),J(3,` again to rebuild the report. `))}function tN(e,t){e&1&&J(0,` Check that the dev server is running, then refresh. `)}function nN(e,t){if(e&1&&(z(0,`div`,11)(1,`p`,14),J(2,`Could not scan the route files.`),B(),z(3,`p`,15),P(4,eN,4,0)(5,tN,1,0),B()()),e&2){let e=K();M(4),F(e.staticReport()?4:5)}}function rN(e,t){e&1&&(z(0,`p`,12),J(1,`Scanning routes…`),B())}function iN(e,t){if(e&1){let e=W();z(0,`div`,16)(1,`p`,14),J(2,`No routes match the filter.`),B(),z(3,`p`,15),J(4,`Search by path, component, guard, title or file name.`),B(),z(5,`button`,10),G(`click`,function(){O(e);let t=K(2),n=n_(12);return t.filter.set(``),k(n.focus())}),J(6,` Clear filter `),B()()}}function aN(e,t){e&1&&(z(0,`div`,16)(1,`p`,14),J(2,`No routes found.`),B(),z(3,`p`,15),J(4,` Routes are read from `),z(5,`code`),J(6,`*.routes.ts`),B(),J(7,` and `),z(8,`code`),J(9,`*routing.module.ts`),B(),J(10,` files, the files they lazy load, plus Analog pages. Add one and refresh. `),B()())}function oN(e,t){e&1&&P(0,iN,7,0,`div`,16)(1,aN,11,0,`div`,16),e&2&&F(+!K().routes().length)}function sN(e,t){if(e&1&&(z(0,`span`,21),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.kind)}}function cN(e,t){if(e&1&&(z(0,`span`,22)(1,`span`,25),J(2,`→`),B(),z(3,`span`,26),J(4,`redirects to`),B(),J(5),B()),e&2){let e=K().$implicit;M(5),X(` `,e.redirectTo)}}function lN(e,t){if(e&1&&(z(0,`code`,23),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.component)}}function uN(e,t){e&1&&(z(0,`span`,27),J(1,`–`),B(),z(2,`span`,26),J(3,`none`),B())}function dN(e,t){if(e&1&&(z(0,`span`,21),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function fN(e,t){e&1&&(z(0,`span`,27),J(1,`–`),B(),z(2,`span`,26),J(3,`none`),B())}function pN(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` `,e.title,` `)}}function mN(e,t){e&1&&(z(0,`span`,27),J(1,`–`),B(),z(2,`span`,26),J(3,`none`),B())}function hN(e,t){if(e&1&&(z(0,`tr`)(1,`td`,20),J(2),P(3,sN,2,1,`span`,21),B(),z(4,`td`),P(5,cN,6,1,`span`,22)(6,lN,2,1,`code`,23)(7,uN,4,0),B(),z(8,`td`),I(9,dN,2,1,`span`,21,Cg,!1,fN,4,0),B(),z(12,`td`),P(13,pN,1,1)(14,mN,4,0),B(),z(15,`td`,24),J(16),B()()),e&2){let e=t.$implicit,n=K(2);M(2),X(` `,e.fullPath,` `),M(),F(e.kind===`page`?-1:3),M(2),F(e.redirectTo===void 0?e.component?6:7:5),M(4),L(n.checks(e)),M(4),F(e.title?13:14),M(3),Y(n.location(e))}}function gN(e,t){if(e&1&&(z(0,`p`,17),J(1),B(),z(2,`div`,18)(3,`table`)(4,`thead`)(5,`tr`)(6,`th`,19),J(7,`Path`),B(),z(8,`th`,19),J(9,`Component / Target`),B(),z(10,`th`,19),J(11,`Guards and resolvers`),B(),z(12,`th`,19),J(13,`Title`),B(),z(14,`th`,19),J(15,`Declared in`),B()()(),z(16,`tbody`),I(17,hN,17,6,`tr`,null,Cg),B()()()),e&2){let e=K();M(),Y_(` `,e.filtered().length,` of `,e.routes().length,` route entries, `,e.navigable(),` navigable `),M(16),L(e.filtered())}}var _N=class e{rpc=$(null);showComponent=Ov();staticReport=Q(()=>cE(this.rpc()));routes=j([]);filter=j(``);loading=j(!1);error=j(!1);live=Rv(ZM);liveHasConfig=Q(()=>!!this.live()?.page()?.config);expanded=Tv(()=>!this.liveHasConfig());navigable=Q(()=>this.filtered().filter(e=>e.kind===`page`).length);filtered=Q(()=>{let e=this.filter().toLowerCase().trim(),t=this.routes();return e?t.filter(t=>t.fullPath.toLowerCase().includes(e)||t.component&&t.component.toLowerCase().includes(e)||t.redirectTo&&t.redirectTo.toLowerCase().includes(e)||t.title&&t.title.toLowerCase().includes(e)||this.checks(t).some(t=>t.toLowerCase().includes(e))||t.file.toLowerCase().includes(e)):t});constructor(){uc(()=>{this.rpc()&&this.refresh()})}checks(e){return[...Object.entries(e.guards??{}).flatMap(([e,t])=>t.map(t=>`${e} ${t}`)),...(e.resolvers??[]).map(e=>`resolve ${e}`)]}location(e){return zk(e)}onFilterInput(e){let t=e.target;this.filter.set(t?.value??``)}async refresh(){let e=this.rpc();if(e){this.loading.set(!0),this.error.set(!1);try{let t=await e.scope(`pangular`).rpc.call(`get-routes`);this.routes.set(t)}catch{this.error.set(!0)}finally{this.loading.set(!1)}}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-route-inspector`]],viewQuery:function(e,t){e&1&&e_(t.live,ZM,5),e&2&&t_()},inputs:{rpc:[1,`rpc`]},outputs:{showComponent:`showComponent`},decls:19,vars:9,consts:[[`filterInput`,``],[3,`showComponent`,`rpc`,`sources`],[`aria-labelledby`,`config-heading`,1,`config`],[1,`section-head`],[`id`,`config-heading`],[1,`muted`,`hint`],[`type`,`button`,`aria-controls`,`config-body`,1,`small`,`toggle`],[`id`,`config-body`,1,`config-body`,3,`hidden`],[1,`toolbar`],[`type`,`search`,`aria-label`,`Filter source routes`,`placeholder`,`Filter routes…`,1,`field`,3,`input`,`keydown.escape`,`value`],[`type`,`button`,1,`small`,3,`click`],[`role`,`alert`,1,`empty`],[`role`,`status`,1,`muted`,`empty`],[`type`,`button`,`aria-controls`,`config-body`,1,`small`,`toggle`,3,`click`],[1,`empty-title`],[1,`muted`],[1,`empty`],[1,`muted`,`count`],[`role`,`region`,`aria-label`,`Source route config table`,`tabindex`,`0`,1,`table-scroll`],[`scope`,`col`],[1,`path`],[1,`tag`],[1,`redirect`],[1,`component`],[1,`file`],[`aria-hidden`,`true`],[1,`visually-hidden`],[`aria-hidden`,`true`,1,`nil`]],template:function(e,t){e&1&&(z(0,`app-live-route`,1),G(`showComponent`,function(e){return t.showComponent.emit(e)}),B(),z(1,`section`,2)(2,`div`,3)(3,`h2`,4),J(4,`Source route config`),B(),z(5,`span`,5),J(6,` Read from your source files. `),P(7,QM,1,0),B(),P(8,$M,2,2,`button`,6),B(),z(9,`div`,7)(10,`div`,8)(11,`input`,9,0),G(`input`,function(e){return t.onFilterInput(e)})(`keydown.escape`,function(){return t.filter.set(``)}),B(),z(13,`button`,10),G(`click`,function(){return t.refresh()}),J(14),B()(),P(15,nN,6,1,`div`,11)(16,rN,2,0,`p`,12)(17,oN,2,1)(18,gN,19,3),B()()),e&2&&(R(`rpc`,t.rpc())(`sources`,t.routes()),M(7),F(t.liveHasConfig()?7:-1),M(),F(t.liveHasConfig()?8:-1),M(),R(`hidden`,!t.expanded()),M(2),R(`value`,t.filter()),M(2),N(`aria-busy`,t.loading()),M(),X(` `,t.loading()?`Scanning…`:`Refresh`,` `),M(),F(t.error()?15:t.loading()&&t.routes().length===0?16:t.filtered().length===0?17:18))},dependencies:[ZM],styles:[`.muted[_ngcontent-%COMP%] { +}`]})};function hN(e,t){e&1&&J(0,` The Routes tab above shows what the router uses. `)}function gN(e,t){if(e&1){let e=W();z(0,`button`,13),G(`click`,function(){O(e);let t=K();return k(t.expanded.set(!t.expanded()))}),J(1),B()}if(e&2){let e=K();N(`aria-expanded`,e.expanded()),M(),X(` `,e.expanded()?`Hide table`:`Show table`,` `)}}function _N(e,t){e&1&&(J(0,` Run `),z(1,`code`),J(2,`pangular build`),B(),J(3,` again to rebuild the report. `))}function vN(e,t){e&1&&J(0,` Check that the dev server is running, then refresh. `)}function yN(e,t){if(e&1&&(z(0,`div`,11)(1,`p`,14),J(2,`Could not scan the route files.`),B(),z(3,`p`,15),P(4,_N,4,0)(5,vN,1,0),B()()),e&2){let e=K();M(4),F(e.staticReport()?4:5)}}function bN(e,t){e&1&&(z(0,`p`,12),J(1,`Scanning routes…`),B())}function xN(e,t){if(e&1){let e=W();z(0,`div`,16)(1,`p`,14),J(2,`No routes match the filter.`),B(),z(3,`p`,15),J(4,`Search by path, component, guard, title or file name.`),B(),z(5,`button`,10),G(`click`,function(){O(e);let t=K(2),n=u_(12);return t.filter.set(``),k(n.focus())}),J(6,` Clear filter `),B()()}}function SN(e,t){e&1&&(z(0,`div`,16)(1,`p`,14),J(2,`No routes found.`),B(),z(3,`p`,15),J(4,` Routes are read from `),z(5,`code`),J(6,`*.routes.ts`),B(),J(7,` and `),z(8,`code`),J(9,`*routing.module.ts`),B(),J(10,` files, the files they lazy load, plus Analog pages. Add one and refresh. `),B()())}function CN(e,t){e&1&&P(0,xN,7,0,`div`,16)(1,SN,11,0,`div`,16),e&2&&F(+!K().routes().length)}function wN(e,t){if(e&1&&(z(0,`span`,21),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.kind)}}function TN(e,t){if(e&1&&(z(0,`span`,22)(1,`span`,26),J(2,`→`),B(),z(3,`span`,27),J(4,`redirects to`),B(),J(5),B()),e&2){let e=K().$implicit;M(5),X(` `,e.redirectTo)}}function EN(e,t){if(e&1&&(z(0,`code`,23),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.component)}}function DN(e,t){e&1&&(z(0,`span`,28),J(1,`–`),B(),z(2,`span`,27),J(3,`none`),B())}function ON(e,t){if(e&1&&(z(0,`span`,21),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function kN(e,t){e&1&&(z(0,`span`,28),J(1,`–`),B(),z(2,`span`,27),J(3,`none`),B())}function AN(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` `,e.title,` `)}}function jN(e,t){e&1&&(z(0,`span`,28),J(1,`–`),B(),z(2,`span`,27),J(3,`none`),B())}function MN(e,t){if(e&1&&(z(0,`tr`)(1,`td`,20),J(2),P(3,wN,2,1,`span`,21),B(),z(4,`td`),P(5,TN,6,1,`span`,22)(6,EN,2,1,`code`,23)(7,DN,4,0),B(),z(8,`td`),I(9,ON,2,1,`span`,21,Dg,!1,kN,4,0),B(),z(12,`td`),P(13,AN,1,1)(14,jN,4,0),B(),z(15,`td`,24),V(16,`app-source-link`,25),B()()),e&2){let e=t.$implicit,n=K(2);M(2),X(` `,e.fullPath,` `),M(),F(e.kind===`page`?-1:3),M(2),F(e.redirectTo===void 0?e.component?6:7:5),M(4),L(n.checks(e)),M(4),F(e.title?13:14),M(3),R(`file`,e.file)(`line`,e.line)}}function NN(e,t){if(e&1&&(z(0,`p`,17),J(1),B(),z(2,`div`,18)(3,`table`)(4,`thead`)(5,`tr`)(6,`th`,19),J(7,`Path`),B(),z(8,`th`,19),J(9,`Component / Target`),B(),z(10,`th`,19),J(11,`Guards and resolvers`),B(),z(12,`th`,19),J(13,`Title`),B(),z(14,`th`,19),J(15,`Declared in`),B()()(),z(16,`tbody`),I(17,MN,17,7,`tr`,null,Dg),B()()()),e&2){let e=K();M(),rv(` `,e.filtered().length,` of `,e.routes().length,` route entries, `,e.navigable(),` navigable `),M(16),L(e.filtered())}}var PN=class e{rpc=$(null);showComponent=Iv();staticReport=Q(()=>gE(this.rpc()));routes=j([]);filter=j(``);loading=j(!1);error=j(!1);live=Kv(mN);liveHasConfig=Q(()=>!!this.live()?.page()?.config);expanded=Nv(()=>!this.liveHasConfig());navigable=Q(()=>this.filtered().filter(e=>e.kind===`page`).length);filtered=Q(()=>{let e=this.filter().toLowerCase().trim(),t=this.routes();return e?t.filter(t=>t.fullPath.toLowerCase().includes(e)||t.component&&t.component.toLowerCase().includes(e)||t.redirectTo&&t.redirectTo.toLowerCase().includes(e)||t.title&&t.title.toLowerCase().includes(e)||this.checks(t).some(t=>t.toLowerCase().includes(e))||t.file.toLowerCase().includes(e)):t});constructor(){dc(()=>{this.rpc()&&this.refresh()})}checks(e){return[...Object.entries(e.guards??{}).flatMap(([e,t])=>t.map(t=>`${e} ${t}`)),...(e.resolvers??[]).map(e=>`resolve ${e}`)]}onFilterInput(e){let t=e.target;this.filter.set(t?.value??``)}async refresh(){let e=this.rpc();if(e){this.loading.set(!0),this.error.set(!1);try{let t=await e.scope(`pangular`).rpc.call(`get-routes`);this.routes.set(t)}catch{this.error.set(!0)}finally{this.loading.set(!1)}}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-route-inspector`]],viewQuery:function(e,t){e&1&&c_(t.live,mN,5),e&2&&l_()},inputs:{rpc:[1,`rpc`]},outputs:{showComponent:`showComponent`},decls:19,vars:9,consts:[[`filterInput`,``],[3,`showComponent`,`rpc`,`sources`],[`aria-labelledby`,`config-heading`,1,`config`],[1,`section-head`],[`id`,`config-heading`],[1,`muted`,`hint`],[`type`,`button`,`aria-controls`,`config-body`,1,`small`,`toggle`],[`id`,`config-body`,1,`config-body`,3,`hidden`],[1,`toolbar`],[`type`,`search`,`aria-label`,`Filter source routes`,`placeholder`,`Filter routes…`,1,`field`,3,`input`,`keydown.escape`,`value`],[`type`,`button`,1,`small`,3,`click`],[`role`,`alert`,1,`empty`],[`role`,`status`,1,`muted`,`empty`],[`type`,`button`,`aria-controls`,`config-body`,1,`small`,`toggle`,3,`click`],[1,`empty-title`],[1,`muted`],[1,`empty`],[1,`muted`,`count`],[`role`,`region`,`aria-label`,`Source route config table`,`tabindex`,`0`,1,`table-scroll`],[`scope`,`col`],[1,`path`],[1,`tag`],[1,`redirect`],[1,`component`],[1,`file`],[3,`file`,`line`],[`aria-hidden`,`true`],[1,`visually-hidden`],[`aria-hidden`,`true`,1,`nil`]],template:function(e,t){e&1&&(z(0,`app-live-route`,1),G(`showComponent`,function(e){return t.showComponent.emit(e)}),B(),z(1,`section`,2)(2,`div`,3)(3,`h2`,4),J(4,`Source route config`),B(),z(5,`span`,5),J(6,` Read from your source files. `),P(7,hN,1,0),B(),P(8,gN,2,2,`button`,6),B(),z(9,`div`,7)(10,`div`,8)(11,`input`,9,0),G(`input`,function(e){return t.onFilterInput(e)})(`keydown.escape`,function(){return t.filter.set(``)}),B(),z(13,`button`,10),G(`click`,function(){return t.refresh()}),J(14),B()(),P(15,yN,6,1,`div`,11)(16,bN,2,0,`p`,12)(17,CN,2,1)(18,NN,19,3),B()()),e&2&&(R(`rpc`,t.rpc())(`sources`,t.routes()),M(7),F(t.liveHasConfig()?7:-1),M(),F(t.liveHasConfig()?8:-1),M(),R(`hidden`,!t.expanded()),M(2),R(`value`,t.filter()),M(2),N(`aria-busy`,t.loading()),M(),X(` `,t.loading()?`Scanning…`:`Refresh`,` `),M(),F(t.error()?15:t.loading()&&t.routes().length===0?16:t.filtered().length===0?17:18))},dependencies:[mN,wO],styles:[`.muted[_ngcontent-%COMP%] { color: var(--%NS%text-2); font-size: 13px; line-height: 1.5; @@ -4322,7 +4357,7 @@ h2[_ngcontent-%COMP%] { font-family: var(--%NS%font-mono); font-size: 12px; overflow-wrap: anywhere; -}`]})},vN=[`ArrowDown`,`ArrowUp`,`Home`,`End`],yN=`[aria-pressed="true"], [aria-expanded="true"], [aria-current]:not([aria-current="false"]), .selected`,bN=class e{appRovingList=$(``);host=E(Ml).nativeElement;current=null;focusInside=!1;constructor(){let e=E(Cs);Id(()=>{if(this.sync(),typeof MutationObserver>`u`)return;let t=new MutationObserver(()=>this.sync());t.observe(this.host,{childList:!0,subtree:!0}),e.onDestroy(()=>t.disconnect())})}isItem(e){let t=this.appRovingList();return!!t&&!!e?.matches(t)}items(){let e=this.appRovingList();return e?[...this.host.querySelectorAll(e)]:[]}sync(){let e=this.items(),t=!1;if(!this.current||!this.host.contains(this.current)){let n=document.activeElement;t=this.focusInside&&(!n||n===document.body),this.current=e.find(e=>e.matches(yN))??e[0]??null}for(let t of e){let e=t===this.current?`0`:`-1`;t.getAttribute(`tabindex`)!==e&&t.setAttribute(`tabindex`,e)}t&&this.current?.focus()}onFocusIn(e){this.focusInside=!0;let t=e.target;this.isItem(t)&&t!==this.current&&(this.current?.setAttribute(`tabindex`,`-1`),this.current=t,t.setAttribute(`tabindex`,`0`))}onFocusOut(e){let t=e.relatedTarget;if(t&&this.host.contains(t))return;let n=e.target;setTimeout(()=>{n?.isConnected!==!1&&!this.host.contains(document.activeElement)&&(this.focusInside=!1)})}onKey(e){if(!vN.includes(e.key)||e.altKey||e.ctrlKey||e.metaKey)return;let t=e.target;if(!this.isItem(t))return;let n=this.items(),r=n.indexOf(t);if(r<0)return;let i={ArrowDown:Math.min(r+1,n.length-1),ArrowUp:Math.max(r-1,0),Home:0,End:n.length-1}[e.key];e.preventDefault(),n[i].focus()}static ɵfac=function(t){return new(t||e)};static ɵdir=Wh({type:e,selectors:[[``,`appRovingList`,``]],hostBindings:function(e,t){e&1&&G(`keydown`,function(e){return t.onKey(e)})(`focusin`,function(e){return t.onFocusIn(e)})(`focusout`,function(e){return t.onFocusOut(e)})},inputs:{appRovingList:[1,`appRovingList`]}})},xN=[`filterInput`],SN=e=>({id:e,label:`Status history`}),CN=e=>({id:e,label:`Value history`}),wN=(e,t)=>t.kind,TN=(e,t)=>t.name+t.file+t.line,EN=(e,t)=>t.epoch,DN=(e,t)=>t.id;function ON(e,t){if(e&1){let e=W();z(0,`div`,4)(1,`span`,15),J(2,`Page`),B(),z(3,`app-select`,16),G(`valueChange`,function(t){return O(e),k(K().selectPage(t))}),B()()}if(e&2){let e=K();M(3),R(`options`,e.pageOptions())(`value`,e.shownPageId())}}function kN(e,t){if(e&1){let e=W();z(0,`div`,5)(1,`span`,17),J(2,`Graph of`),B(),z(3,`app-select`,18),G(`valueChange`,function(t){return O(e),k(K().pickComponent(t))}),B()()}if(e&2){let e=K();M(3),R(`options`,e.componentOptions())(`value`,e.pickerValue())}}function AN(e,t){if(e&1&&(z(0,`span`,21),J(1),B()),e&2){let e=K(2);M(),Y(e.sourceNote(e.graph().source))}}function jN(e,t){if(e&1&&(z(0,`p`,7)(1,`span`,19),J(2),B(),z(3,`span`,20),J(4),B(),P(5,AN,2,1,`span`,21),B()),e&2){let e=t,n=K();M(2),Y(e.name),M(2),Y(e.path),M(),F(n.graph().source?5:-1)}}function MN(e,t){if(e&1&&(z(0,`p`,7)(1,`span`,19),J(2),B(),z(3,`span`,21),J(4,`environment injector`),B()()),e&2){let e=K();M(2),Y(e.injectorLabel(t))}}function NN(e,t){e&1&&(z(0,`p`,8),J(1,` The picked component or injector is gone or has no signal graph, so this shows another one. `),B())}function PN(e,t){e&1&&J(0,` The effects registered on this injector and the signals they read. A signal that no effect reads is not part of the graph. Pick a kind to filter. `)}function FN(e,t){e&1&&J(0,` The live signal graph of one component. Only signals that its template or an effect has read appear here; a signal nothing has read yet is not part of the graph. Pick a kind to filter. `)}function IN(e,t){e&1&&J(0,` Every signal, computed and effect found in your source. Pick a kind to filter. `)}function LN(e,t){e&1&&(z(0,`p`,8),J(1,` The live signal graph needs Angular 20.1 or later. This list comes from a source scan. `),B())}function RN(e,t){e&1&&(z(0,`p`,8),J(1,` The signal write hook did not load. Value history shows sampled values only, with no exact set entries. `),B())}function zN(e,t){if(e&1&&(z(0,`p`,8),J(1),B()),e&2){let e=K();M(),Z(` Showing `,e.graph().nodes.length,` of `,t,` signals. The rest and their edges are left out. `)}}function BN(e,t){if(e&1){let e=W();z(0,`button`,22),G(`click`,function(){let t=O(e).$implicit,n=K(2);return k(n.kind.set(n.kind()===t.kind?null:t.kind))}),V(1,`span`,25),z(2,`span`,26),J(3),B(),z(4,`span`,23),J(5),B()()}if(e&2){let e=t.$implicit,n=K(2);q(`active`,n.kind()===e.kind),N(`aria-pressed`,n.kind()===e.kind),M(),C_(`background`,n.kindColor(e.kind)),M(2),Y(e.kind),M(2),Y(e.count)}}function VN(e,t){if(e&1){let e=W();z(0,`div`,10)(1,`button`,22),G(`click`,function(){return O(e),k(K().kind.set(null))}),J(2,` All `),z(3,`span`,23),J(4),B()(),I(5,BN,6,7,`button`,24,wN),B()}if(e&2){let e=K();M(),q(`active`,!e.kind()),N(`aria-pressed`,!e.kind()),M(3),Y(e.kindTotal()),M(),L(e.kindChips())}}function HN(e,t){e&1&&(z(0,`div`,11),V(1,`span`,27),z(2,`p`,28),J(3,`Scanning source for signals…`),B()())}function UN(e,t){if(e&1){let e=W();z(0,`div`,29)(1,`p`,28),J(2,`Couldn't load signals`),B(),z(3,`p`,30),J(4,` The devtools server did not answer. Check that it is still running, then retry. `),B(),z(5,`button`,31),G(`click`,function(){return O(e),k(K().retry())}),J(6),B()()}if(e&2){let e=K();q(`compact`,e.sourceSignals().length>0),M(5),N(`aria-disabled`,e.retrying()||null),M(),X(` `,e.retrying()?`Retrying…`:`Retry`,` `)}}function WN(e,t){e&1&&(z(0,`div`,13)(1,`p`,28),J(2,`No signals found.`),B(),z(3,`p`,30),J(4,` No `),z(5,`code`),J(6,`signal()`),B(),J(7,`, `),z(8,`code`),J(9,`computed()`),B(),J(10,` or `),z(11,`code`),J(12,`effect()`),B(),J(13,` calls were found in your source. To see the live graph, run Angular 20.1 or later with the overlay connected and select a component. `),B()())}function GN(e,t){if(e&1&&(z(0,`span`,41),J(1,`·`),B(),z(2,`span`),J(3),B()),e&2){let e=K().$implicit;M(3),X(`in <`,e.component,`>`)}}function KN(e,t){if(e&1&&(z(0,`div`,34)(1,`div`,36)(2,`span`,37),J(3),B(),z(4,`span`,38),J(5),B()(),z(6,`div`,39)(7,`span`,40),J(8),B(),P(9,GN,4,1),B()()),e&2){let e=t.$implicit,n=K(2);M(2),C_(`background`,n.kindColor(e.kind)),M(),Y(e.kind),M(2),Y(e.name),M(2),R(`title`,e.file+`:`+e.line),M(),Z(``,e.file,`:`,e.line),M(),F(e.component?9:-1)}}function qN(e,t){if(e&1){let e=W();z(0,`div`,35)(1,`p`,28),J(2,`No signals match.`),B(),z(3,`p`,30),J(4,`Try a different name or kind.`),B(),z(5,`button`,31),G(`click`,function(){return O(e),k(K(2).clearFilters())}),J(6,`Clear filters`),B()()}}function JN(e,t){if(e&1&&(z(0,`p`,32),J(1,`Signals from source scan (static analysis):`),B(),z(2,`div`,33),I(3,KN,10,8,`div`,34,TN,!1,qN,7,0,`div`,35),B()),e&2){let e=K();M(3),L(e.filteredSourceSignals())}}function YN(e,t){if(e&1&&(z(0,`span`,47),J(1),B()),e&2){let e=K().$implicit;M(),X(``,e.missed,` earlier not captured`)}}function XN(e,t){if(e&1&&(z(0,`li`)(1,`span`,45)(2,`time`),J(3),dv(4,`date`),B(),z(5,`span`,46),J(6),B(),z(7,`span`),J(8),B(),P(9,YN,2,1,`span`,47),B(),z(10,`pre`),J(11),dv(12,`json`),B()()),e&2){let e=t.$implicit,n=K(3);M(3),Y(mv(4,7,e.at,`HH:mm:ss.SSS`)),M(2),w_(`source-`+e.source),M(),Y(n.sourceLabel(e.source)),M(2),X(`epoch `,e.epoch),M(),F(e.missed?9:-1),M(2),Y(pv(12,10,e.value))}}function ZN(e,t){if(e&1&&(z(0,`h4`,42),J(1),B(),z(2,`p`,43),J(3),B(),z(4,`ol`,44),I(5,XN,13,12,`li`,null,EN),B()),e&2){let e=K(),t=e.id,n=e.label,r=K();R(`id`,`history-heading-`+t),M(),Y(n),M(2),Y(r.historySummary(t)),M(),N(`aria-labelledby`,`history-heading-`+t),M(),L(r.selectedHistory())}}function QN(e,t){e&1&&P(0,ZN,7,4),e&2&&F(K().selectedHistory().length?0:-1)}function $N(e,t){if(e&1&&(z(0,`span`,56),J(1),B()),e&2){let e=K().$implicit;w_(`tone-`+K(2).statusTone(e.status)),M(),Y(e.status)}}function eP(e,t){if(e&1&&(z(0,`span`,52),J(1),B()),e&2){let e=t;M(),Z(``,e,` `,e===1?`change`:`changes`)}}function tP(e,t){if(e&1&&(z(0,`span`,54),J(1),dv(2,`json`),B()),e&2){let e=K().$implicit;M(),Y(pv(2,1,e.error))}}function nP(e,t){if(e&1&&(z(0,`span`,54),J(1),dv(2,`json`),B()),e&2){let e=K().$implicit;M(),Y(pv(2,1,e.value))}}function rP(e,t){e&1&&(z(0,`p`,30),J(1,` This resource has no name. Pass `),z(2,`code`),J(3,`debugName`),B(),J(4,` to `),z(5,`code`),J(6,`resource()`),B(),J(7,` or `),z(8,`code`),J(9,`httpResource()`),B(),J(10,` to name it here. `),B())}function iP(e,t){if(e&1&&(z(0,`dt`),J(1,`Loading`),B(),z(2,`dd`),J(3),B()),e&2){let e=K(2).$implicit;M(3),Y(e.isLoading?`yes`:`no`)}}function aP(e,t){if(e&1&&(z(0,`dt`),J(1,`HTTP status`),B(),z(2,`dd`),J(3),B()),e&2){let e=K(2).$implicit;M(3),Y(e.statusCode)}}function oP(e,t){if(e&1&&(z(0,`dt`),J(1,`Params`),B(),z(2,`dd`)(3,`pre`,60),J(4),dv(5,`json`),B()()),e&2){let e=K(2).$implicit;M(3),N(`aria-label`,`Params of `+e.name),M(),Y(pv(5,2,e.params))}}function sP(e,t){if(e&1&&(z(0,`dt`),J(1,`Value`),B(),z(2,`dd`)(3,`pre`,60),J(4),dv(5,`json`),B()()),e&2){let e=K(2).$implicit;M(3),N(`aria-label`,`Value of `+e.name),M(),Y(pv(5,2,e.value))}}function cP(e,t){if(e&1&&(z(0,`dt`),J(1,`Error`),B(),z(2,`dd`)(3,`pre`,60),J(4),dv(5,`json`),B()()),e&2){let e=K(2).$implicit;M(3),N(`aria-label`,`Error of `+e.name),M(),Y(pv(5,2,e.error))}}function lP(e,t){if(e&1&&(z(0,`li`)(1,`span`,61),J(2),B(),z(3,`span`,62),J(4),B()()),e&2){let e=t.$implicit,n=K(5);M(),C_(`background`,n.kindColor(e.kind)),M(),Y(e.kind),M(2),Y(e.label??e.id)}}function uP(e,t){if(e&1&&(z(0,`ul`,42),I(1,lP,5,4,`li`,null,DN),B()),e&2){let e=K(2).$implicit,t=K(2);R(`id`,`resource-internals-`+e.id),M(),L(t.internalsOf(e))}}function dP(e,t){if(e&1){let e=W();z(0,`div`,55)(1,`h3`,57),J(2),B(),P(3,rP,11,0,`p`,30),z(4,`dl`)(5,`dt`),J(6,`Status`),B(),z(7,`dd`),J(8),B(),P(9,iP,4,1),P(10,aP,4,1),P(11,oP,6,4),P(12,sP,6,4),P(13,cP,6,4),B(),zg(14,58),z(15,`button`,59),G(`click`,function(){O(e);let t=K(3);return k(t.showInternals.set(!t.showInternals()))}),J(16),B(),P(17,uP,3,1,`ul`,42),B()}if(e&2){let e=K().$implicit,t=K(2),n=n_(23);R(`id`,`signal-detail-`+e.id),M(2),Y(e.name),M(),F(e.named?-1:3),M(5),Y(e.status??`unknown`),M(),F(e.isLoading===void 0?-1:9),M(),F(e.statusCode===void 0?-1:10),M(),F(e.params===void 0?-1:11),M(),F(e.value===void 0?-1:12),M(),F(e.error===void 0?-1:13),M(),R(`ngTemplateOutlet`,n)(`ngTemplateOutletContext`,sv(16,SN,e.id)),M(),N(`aria-expanded`,t.showInternals())(`aria-controls`,`resource-internals-`+e.id),M(),Z(` `,t.showInternals()?`Hide`:`Show`,` internal signals (`,e.nodeIds.length,`) `),M(),F(t.showInternals()?17:-1)}}function fP(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,50),G(`click`,function(){let t=O(e).$implicit;return k(K(2).select(t.id))}),z(2,`span`,36)(3,`span`,37),J(4,`resource`),B(),z(5,`span`,38),J(6),B(),P(7,$N,2,3,`span`,51),P(8,eP,2,2,`span`,52),V(9,`span`,53),B(),P(10,tP,3,3,`span`,54)(11,nP,3,3,`span`,54),B(),P(12,dP,18,18,`div`,55),B()}if(e&2){let e,n=t.$implicit,r=K(2);M(),q(`selected`,r.selectedId()===n.id),N(`aria-expanded`,r.selectedId()===n.id)(`aria-controls`,`signal-detail-`+n.id)(`data-card`,n.id),M(2),C_(`background`,r.kindColor(`resource`)),M(3),Y(n.name),M(),F(n.status?7:-1),M(),F((e=n.changes)?8:-1,e),M(2),F(n.error===void 0?n.value===void 0?-1:11:10),M(2),F(r.selectedId()===n.id?12:-1)}}function pP(e,t){if(e&1&&(z(0,`h2`,48),J(1,`Resources`),B(),z(2,`ul`,49),I(3,fP,13,12,`li`,null,DN),B()),e&2){let e=K();M(3),L(e.filteredResources())}}function mP(e,t){if(e&1&&(z(0,`span`,52),J(1),B()),e&2){let e=t;M(),Z(``,e,` `,e===1?`change`:`changes`)}}function hP(e,t){if(e&1&&(z(0,`span`,54),J(1),dv(2,`json`),B()),e&2){let e=K().$implicit;M(),Y(pv(2,1,e.value))}}function gP(e,t){if(e&1&&(z(0,`span`,41),J(1,`·`),B(),z(2,`span`),J(3),B()),e&2){let e=K().$implicit,t=K(2);M(3),X(`Deps: `,t.getDependencies(e).length)}}function _P(e,t){if(e&1&&(z(0,`span`,41),J(1,`·`),B(),z(2,`span`),J(3),B()),e&2){let e=K().$implicit,t=K(2);M(3),X(`Consumers: `,t.getConsumers(e).length)}}function vP(e,t){if(e&1&&(z(0,`dt`),J(1,`Value`),B(),z(2,`dd`)(3,`pre`,60),J(4),dv(5,`json`),B()()),e&2){let e=K(4);M(3),N(`aria-label`,`Value of `+(e.selectedNode().label??`signal`)),M(),Y(pv(5,2,e.selectedNode().value))}}function yP(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,65),G(`click`,function(){let t=O(e).$implicit;return k(K(5).jumpTo(t))}),z(2,`span`,61),J(3),B(),z(4,`span`,62),J(5),B()()()}if(e&2){let e=t.$implicit,n=K(5);M(),N(`aria-label`,`Go to `+e.kind+` `+(e.label??e.id)),M(),C_(`background`,n.kindColor(e.kind)),M(),Y(e.kind),M(2),Y(e.label??e.id)}}function bP(e,t){if(e&1&&(z(0,`h4`),J(1,`Dependencies (producers)`),B(),z(2,`ul`),I(3,yP,6,5,`li`,null,DN),B()),e&2){let e=K(4);M(3),L(e.getDependencies(e.selectedNode()))}}function xP(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,65),G(`click`,function(){let t=O(e).$implicit;return k(K(5).jumpTo(t))}),z(2,`span`,61),J(3),B(),z(4,`span`,62),J(5),B()()()}if(e&2){let e=t.$implicit,n=K(5);M(),N(`aria-label`,`Go to `+e.kind+` `+(e.label??e.id)),M(),C_(`background`,n.kindColor(e.kind)),M(),Y(e.kind),M(2),Y(e.label??e.id)}}function SP(e,t){if(e&1&&(z(0,`h4`),J(1,`Consumers`),B(),z(2,`ul`),I(3,xP,6,5,`li`,null,DN),B()),e&2){let e=K(4);M(3),L(e.getConsumers(e.selectedNode()))}}function CP(e,t){e&1&&(z(0,`p`,30),J(1),B()),e&2&&(M(),Y(t))}function wP(e,t){if(e&1&&(z(0,`div`,55)(1,`h3`,57),J(2),B(),z(3,`dl`)(4,`dt`),J(5,`Kind`),B(),z(6,`dd`),J(7),B(),z(8,`dt`),J(9,`Epoch`),B(),z(10,`dd`),J(11),B(),P(12,vP,6,4),B(),P(13,bP,5,0),P(14,SP,5,0),P(15,CP,2,1,`p`,30),zg(16,58),B()),e&2){let e,t=K().$implicit,n=K(2),r=n_(23);R(`id`,`signal-detail-`+t.id),M(2),Y(n.selectedNode().label??n.selectedNode().id),M(5),Y(n.selectedNode().kind),M(4),Y(n.selectedNode().epoch),M(),F(n.selectedNode().value===void 0?-1:12),M(),F(n.getDependencies(n.selectedNode()).length?13:-1),M(),F(n.getConsumers(n.selectedNode()).length?14:-1),M(),F((e=n.writeHint())?15:-1,e),M(),R(`ngTemplateOutlet`,r)(`ngTemplateOutletContext`,sv(10,CN,t.id))}}function TP(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,50),G(`click`,function(){let t=O(e).$implicit;return k(K(2).select(t.id))}),z(2,`span`,36)(3,`span`,37),J(4),B(),z(5,`span`,38),J(6),B(),P(7,mP,2,2,`span`,52),V(8,`span`,53),B(),P(9,hP,3,3,`span`,54),z(10,`span`,39)(11,`span`),J(12),B(),P(13,gP,4,1),P(14,_P,4,1),B()(),P(15,wP,17,12,`div`,55),B()}if(e&2){let e,n=t.$implicit,r=K(2);M(),q(`selected`,r.selectedId()===n.id),N(`aria-expanded`,r.selectedId()===n.id)(`aria-controls`,`signal-detail-`+n.id)(`data-card`,n.id),M(2),C_(`background`,r.kindColor(n.kind)),M(),Y(n.kind),M(2),Y(n.label??`(unnamed)`),M(),F((e=r.changeCount(n.id))?7:-1,e),M(2),F(n.value===void 0?-1:9),M(3),X(`Epoch: `,n.epoch),M(),F(r.getDependencies(n).length?13:-1),M(),F(r.getConsumers(n).length?14:-1),M(),F(r.selectedId()===n.id&&r.selectedNode()?15:-1)}}function EP(e,t){if(e&1){let e=W();z(0,`button`,31),G(`click`,function(){return O(e),k(K(3).clearFilters())}),J(1,`Clear filters`),B()}}function DP(e,t){if(e&1&&(z(0,`li`,64)(1,`p`,28),J(2),B(),z(3,`p`,30),J(4),B(),P(5,EP,2,0,`button`,66),B()),e&2){let e=K(2);M(2),X(` `,e.hasAnySignals()?`No signals match.`:`No signals in this graph.`,` `),M(2),X(` `,e.hasAnySignals()?`Try a different name or kind.`:`Select a component that reads signals, or interact with the page to create some.`,` `),M(),F(e.hasAnySignals()?5:-1)}}function OP(e,t){if(e&1&&(z(0,`h2`,48),J(1,`Signals`),B(),z(2,`ul`,63),I(3,TP,16,15,`li`,null,DN,!1,DP,6,3,`li`,64),B()),e&2){let e=K();M(3),L(e.filteredNodes())}}var kP=`follow`;function AP(e){return Object.keys(e.pages).length?e.pages:e.graph?{[e.graph.pageId??``]:e.graph}:{}}var jP=`env:`,MP=50,NP={selected:`picked`,routed:`rendered by the router`,root:`first component with signals`},PP={write:`set`,sample:`sampled`,initial:`initial`},FP={resolved:`ok`,local:`ok`,loading:`warn`,reloading:`warn`,error:`danger`},IP={signal:`#facc15`,computed:`#60a5fa`,linkedSignal:`#34d399`,effect:`#fb923c`,template:`#94a3b8`,afterRenderEffectPhase:`#f472b6`,childSignalProp:`#fef08a`,"input (signal)":`#f59e0b`,"input.required (signal)":`#f59e0b`,"output (signal)":`#ec4899`,"model (signal)":`#14b8a6`,"model.required (signal)":`#14b8a6`,"viewChild (signal)":`#a3e635`,"viewChild.required (signal)":`#a3e635`,"viewChildren (signal)":`#a3e635`,"contentChild (signal)":`#fda4af`,"contentChild.required (signal)":`#fda4af`,"contentChildren (signal)":`#fda4af`,resource:`#06b6d4`,unknown:`#a1a1aa`},LP=class e{rpc=$(null);destroyRef=E(Cs);host=E(Ml);filterInput=Rv(`filterInput`);injector=E(xs);pageId=nE();cleanups=[];graphLoad=0;treePages=j({});graphState=j({graph:null,pages:{}});chosenPageId=j(null);announcement=j(``);graphPages=Q(()=>AP(this.graphState()));shownPageId=Tv({source:()=>({pages:this.graphPages(),newest:this.graphState().graph?.pageId??null,chosen:this.chosenPageId()}),computation:({pages:e,newest:t,chosen:n},r)=>{let i={};for(let n of Object.keys(e))i[n]={pageId:n,reportedAt:+(n===t)};return rE(i,{chosen:n,host:this.pageId,previous:r?.value??null})}});reported=Q(()=>{let e=this.shownPageId();return e===null?null:this.graphPages()[e]??null});unsupported=Q(()=>!!this.reported()?.unsupported);graph=Q(()=>{let e=this.reported();return e?.unsupported?null:e});graphOwner=Q(()=>{let e=this.graph();return e?`${e.pageId??``}|${e.component?.id??e.injector?.id??``}`:null});pickedByPage=j({});picked=Q(()=>this.pickedByPage()[this.targetPageId()??``]??null);pageOptions=Q(()=>{if(this.pageId)return[];let e=this.treePages();return Object.keys(this.graphPages()).map(t=>{let n=e[t];return{value:t,label:n?.title||n?.url||`Page ${t}`,hint:n?.url}})});showInternals=j(!1);sourceSignals=j([]);sourceLoaded=j(!1);sourceFailed=j(!1);graphFailed=j(!1);loadFailed=Q(()=>this.sourceFailed()||this.graphFailed());retrying=j(!1);filter=j(``);resources=Q(()=>this.graph()?.resources??[]);internalIds=Q(()=>new Set(this.resources().flatMap(e=>e.nodeIds)));visibleNodes=Q(()=>{let e=this.internalIds();return(this.graph()?.nodes??[]).filter(t=>!e.has(t.id))});hasAnySignals=Q(()=>this.visibleNodes().length+this.resources().length>0);kindCounts=Q(()=>{let e=this.graph()?[...this.visibleNodes().map(e=>e.kind),...this.resources().map(()=>`resource`)]:this.sourceSignals().map(e=>e.kind),t=new Map;for(let n of e)t.set(n,(t.get(n)??0)+1);return[...t].map(([e,t])=>({kind:e,count:t}))});kind=Tv({source:this.graphOwner,computation:(e,t)=>{let n=t?.value??null;return n&&Cv(this.kindCounts).some(e=>e.kind===n)?n:null}});kindChips=Q(()=>{let e=this.kindCounts(),t=this.kind();return t&&!e.some(e=>e.kind===t)?[...e,{kind:t,count:0}]:e});kindTotal=Q(()=>this.kindCounts().reduce((e,t)=>e+t.count,0));selectedId=Tv({source:this.graphOwner,computation:()=>null});selectedNode=Q(()=>this.graph()?.nodes.find(e=>e.id===this.selectedId())??null);jumpedPast=j(null);jumpNote=Q(()=>{let e=this.jumpedPast();return!e||this.filter()||this.kind()||this.selectedId()!==e.id?``:`Cleared the filters to show ${e.label}.`});selectedHistory=Q(()=>{let e=this.selectedId();return e?[...this.graph()?.history?.[e]??[]].reverse():[]});writeHint=Q(()=>{let e=this.selectedNode(),t=this.graph();if(!e||!t||t.writeHook===!1||e.kind!==`signal`&&e.kind!==`linkedSignal`)return``;if(!e.label)return`This signal has no name, so its history holds sampled values only. Pass a debugName in its options, for example signal(0, { debugName: 'count' }).`;let n=t.history?.[e.id]??[];return n.some(e=>e.source===`write`)||!n.some(e=>e.source===`sample`)?``:`Every change here was sampled. Writes are matched by name, kind, version and value, so another live signal with the same name and value can hide them.`});kindLegend=Object.entries(IP).map(([e,t])=>({kind:e,color:t}));filteredResources=Q(()=>{let e=this.filter().toLowerCase(),t=this.kind();return t&&t!==`resource`?[]:this.resources().filter(t=>!e||t.name.toLowerCase().includes(e)||e.length>=3&&`resource`.startsWith(e))});filteredNodes=Q(()=>{let e=this.filter().toLowerCase(),t=this.kind();return this.visibleNodes().filter(n=>(!t||n.kind===t)&&(!e||(n.label??``).toLowerCase().includes(e)||n.kind.toLowerCase().includes(e))).sort((e,t)=>e.id.localeCompare(t.id,void 0,{numeric:!0}))});filteredSourceSignals=Q(()=>{let e=this.filter().toLowerCase(),t=this.kind();return this.sourceSignals().filter(n=>(!t||n.kind===t)&&(!e||n.name.toLowerCase().includes(e)||n.kind.toLowerCase().includes(e)||n.file.toLowerCase().includes(e)))});targetPageId=Q(()=>this.pageId??(this.shownPageId()||null)??this.graph()?.pageId??this.latestTreePage()?.pageId??null);latestTreePage=Q(()=>{let e=null;for(let[t,n]of Object.entries(this.treePages())){let r=n.reportedAt??0;(!e||r>e.reportedAt)&&(e={pageId:t,reportedAt:r})}return e});componentOptions=Q(()=>{let e=this.targetPageId(),t=(e?this.treePages()[e]?.roots:void 0)??[],n=[],r=e=>{for(let t of e)n.push(t),r(t.children)};r(t);let i=this.graph()?.environments??[];if(!n.length&&!i.length)return[];let a=new Map;for(let e of n)a.set(e.name,(a.get(e.name)??0)+1);let o=new Map,s=[{value:kP,label:`Follow the routed component`,hint:`automatic`},...i.map(e=>({value:jP+e.id,label:this.injectorLabel(e),hint:`injector`}))];for(let e of n){let t=(o.get(e.name)??0)+1;o.set(e.name,t),s.push({value:e.id,label:(a.get(e.name)??0)>1?`${e.name} #${t}`:e.name,hint:`<${e.tag}>`})}return s});pickerValue=Q(()=>{let e=this.picked();return e&&this.componentOptions().some(t=>t.value===e)?e:kP});constructor(){uc(()=>{let e=this.rpc();e&&(this.loadSignalGraph(e),this.loadSourceSignals(e))}),this.destroyRef.onDestroy(()=>{for(let e of this.cleanups.splice(0))e()})}async loadSignalGraph(e){for(let e of this.cleanups.splice(0))e();let t=++this.graphLoad,n=()=>this.destroyRef.destroyed||t!==this.graphLoad,r=e.scope(`pangular`);try{let e=await r.rpc.sharedState(`signal-graph`);if(n())return;this.graphFailed.set(!1);let t=e=>{let t=e,n=t?.pages&&typeof t.pages==`object`?t.pages:{},r={graph:t?.graph??null,pages:n};this.notePageGone(AP(r)),this.graphState.set(r)};t(e.value()),this.cleanups.push(e.on(`updated`,t))}catch{if(n())return;this.graphState.set({graph:null,pages:{}}),this.graphFailed.set(!0)}try{let e=await r.rpc.sharedState(`component-tree`);if(n())return;let t=e=>{let t=e?.pages;this.treePages.set(t&&typeof t==`object`?t:{})};t(e.value()),this.cleanups.push(e.on(`updated`,t))}catch{n()||this.treePages.set({})}}notePageGone(e){let t=Object.keys(this.graphPages()).filter(t=>!e[t]);t.length&&this.pickedByPage.update(e=>{let n={...e};for(let e of t)delete n[e];return n});let n=this.chosenPageId();if(!n||e[n])return;let r=this.pageOptions().find(e=>e.value===n)?.label??`The chosen page`;this.chosenPageId.set(null),this.announcement.set(`${r} closed, so this shows another page.`)}selectPage(e){if(!e||e===this.shownPageId())return;this.chosenPageId.set(e);let t=this.pageOptions().find(t=>t.value===e)?.label??e;this.announcement.set(`Showing the signal graph of ${t}.`)}pickComponent(e){let t=e&&e!==kP?e:null,n=this.targetPageId()??void 0;this.pickedByPage.update(e=>{let r={...e};return t?r[n??``]=t:delete r[n??``],r});let r=this.rpc();if(!r)return;let i=t?.startsWith(jP)?{pageId:n,env:t.slice(4)}:{pageId:n,id:t};r.scope(`pangular`).rpc.call(`select-signal-target`,i).catch(()=>{})}injectorLabel(e){return e.name===`Root`?`Root services`:e.name}sourceNote(e){return NP[e]}async loadSourceSignals(e){let t=e.scope(`pangular`);try{let e=await t.rpc.call(`get-signals`);this.sourceSignals.set(e),this.sourceFailed.set(!1)}catch{this.sourceFailed.set(!0)}finally{this.sourceLoaded.set(!0)}}async retry(){let e=this.rpc();if(!e||this.retrying())return;let t=document.activeElement;this.retrying.set(!0);try{await Promise.all([this.loadSignalGraph(e),this.loadSourceSignals(e)])}finally{this.retrying.set(!1)}this.destroyRef.destroyed||Id(()=>{(!t?.isConnected||document.activeElement===document.body)&&this.filterInput()?.nativeElement.focus()},{injector:this.injector})}clearFilters(){this.resetFilters(),this.filterInput()?.nativeElement.focus()}resetFilters(){this.filter.set(``),this.kind.set(null)}select(e){this.selectedId.set(this.selectedId()===e?null:e),this.showInternals.set(!1)}jumpTo(e){let t=this.resources().find(t=>t.nodeIds.includes(e.id)),n=t?.id??e.id,r=t?!this.filteredResources().some(e=>e.id===n):!this.filteredNodes().some(e=>e.id===n);r&&this.resetFilters(),this.jumpedPast.set(r?{id:n,label:t?.name??e.label??e.id}:null),this.selectedId.set(n),this.showInternals.set(!!t),Id(()=>{let e=[...this.host.nativeElement.querySelectorAll(`.node-card[data-card]`)].find(e=>e.dataset.card===n);e?.scrollIntoView?.({block:`nearest`}),e?.focus({preventScroll:!0})},{injector:this.injector})}changeCount(e){let t=this.graph(),n=t?.nodes.find(t=>t.id===e)?.changes??t?.resources?.find(t=>t.id===e)?.changes;return n===void 0?(t?.history?.[e]??[]).reduce((e,t)=>e+(t.source===`initial`?0:1+(t.missed??0)),0):n}historySummary(e){let t=this.changeCount(e),n=this.graph()?.history?.[e]?.length??0;return t?`${`${t} ${t===1?`change`:`changes`} recorded`}${n>=MP&&t>=n?`, showing the last ${n}`:``}, newest first.`:`No changes recorded yet. The entry below is the value seen first.`}statusTone(e){return FP[e]??`neutral`}internalsOf(e){let t=new Set(e.nodeIds);return(this.graph()?.nodes??[]).filter(e=>t.has(e.id))}sourceLabel(e){return PP[e]}kindColor(e){return IP[e]??IP.unknown}relations=Q(()=>{let e=new Map,t=this.graph();if(!t)return e;for(let n of t.nodes)e.set(n.id,{deps:[],consumers:[]});for(let n of t.edges){let r=t.nodes[n.producer],i=t.nodes[n.consumer];r&&i&&(e.get(i.id)?.deps.push(r),e.get(r.id)?.consumers.push(i))}return e});getDependencies(e){return this.relations().get(e.id)?.deps??[]}getConsumers(e){return this.relations().get(e.id)?.consumers??[]}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-signal-inspector`]],viewQuery:function(e,t){e&1&&e_(t.filterInput,xN,5),e&2&&t_()},inputs:{rpc:[1,`rpc`]},decls:28,vars:17,consts:[[`filterInput`,``],[`historyTpl`,``],[1,`toolbar`],[`type`,`search`,`placeholder`,`Filter by name or kind…`,`aria-label`,`Filter signals by name or kind`,3,`input`,`keydown.escape`,`value`],[1,`picker`,`page-picker`],[1,`picker`],[`role`,`status`,1,`sr-only`],[1,`showing`],[`role`,`status`,1,`fallback`],[1,`intro`],[`role`,`group`,`aria-label`,`Filter by kind`,1,`kinds`],[`role`,`status`,1,`empty`],[`role`,`alert`,1,`empty`,3,`compact`],[1,`empty`],[`role`,`status`,1,`jump-note`],[`id`,`signals-page-label`,1,`label-key`],[`labelledBy`,`signals-page-label`,3,`valueChange`,`options`,`value`],[`id`,`signals-component-label`,1,`label-key`],[`labelledBy`,`signals-component-label`,3,`valueChange`,`options`,`value`],[1,`showing-name`],[1,`mono`],[1,`source-note`],[`type`,`button`,1,`kind-chip`,3,`click`],[1,`count`],[`type`,`button`,1,`kind-chip`,3,`active`],[`aria-hidden`,`true`,1,`dot`],[1,`chip-text`],[`aria-hidden`,`true`,1,`spinner`],[1,`empty-title`],[`role`,`alert`,1,`empty`],[1,`hint`],[`type`,`button`,1,`reset`,3,`click`],[1,`source-label`],[1,`nodes`],[1,`node-card`],[`role`,`status`,1,`empty`,`compact`],[1,`node-header`],[1,`kind-badge`],[1,`node-label`],[1,`node-meta`],[1,`file`,3,`title`],[`aria-hidden`,`true`,1,`sep`],[3,`id`],[1,`history-summary`],[`tabindex`,`0`,1,`history`,`scroll-box`],[1,`history-meta`],[1,`source-tag`],[1,`missed`],[1,`list-heading`],[`role`,`list`,1,`nodes`,`resources`],[`type`,`button`,1,`node-card`,3,`click`],[1,`status-tag`,3,`class`],[1,`changed-badge`],[`aria-hidden`,`true`,1,`chevron`],[1,`node-value`],[1,`detail-panel`,3,`id`],[1,`status-tag`],[1,`detail-title`],[3,`ngTemplateOutlet`,`ngTemplateOutletContext`],[`type`,`button`,1,`reset`,`internals-toggle`,3,`click`],[`role`,`region`,`tabindex`,`0`,1,`scroll-box`],[1,`kind-badge`,`sm`],[1,`rel-label`],[`role`,`list`,`appRovingList`,`button.node-card`,1,`nodes`],[1,`empty`,`compact`],[`type`,`button`,1,`rel-link`,3,`click`],[`type`,`button`,1,`reset`]],template:function(e,t){if(e&1&&(z(0,`div`,2)(1,`input`,3,0),G(`input`,function(e){return t.filter.set(e.target.value)})(`keydown.escape`,function(){return t.filter.set(``)}),B(),P(3,ON,4,2,`div`,4),P(4,kN,4,2,`div`,5),B(),z(5,`p`,6),J(6),B(),P(7,jN,6,3,`p`,7)(8,MN,5,1,`p`,7),P(9,NN,2,0,`p`,8),z(10,`p`,9),P(11,PN,1,0)(12,FN,1,0)(13,IN,1,0),B(),P(14,LN,2,0,`p`,8),P(15,RN,2,0,`p`,8),P(16,zN,2,2,`p`,8),P(17,VN,7,4,`div`,10),P(18,HN,4,0,`div`,11),P(19,UN,7,4,`div`,12)(20,WN,14,0,`div`,13),P(21,JN,6,1),tg(22,QN,1,1,`ng-template`,null,1,gv),z(24,`p`,14),J(25),B(),P(26,pP,5,0),P(27,OP,6,1)),e&2){let e,n;M(),R(`value`,t.filter()),M(2),F(t.pageOptions().length>1?3:-1),M(),F(t.componentOptions().length?4:-1),M(2),Y(t.announcement()),M(),F((e=t.graph()?.component)?7:(e=t.graph()?.injector)?8:-1,e),M(2),F(t.graph()&&t.picked()&&t.graph().source!==`selected`?9:-1),M(2),F(t.graph()?.injector?11:t.graph()?12:13),M(3),F(t.unsupported()?14:-1),M(),F(t.graph()?.writeHook===!1?15:-1),M(),F((n=t.graph()?.nodeCount)?16:-1,n),M(),F(t.kindChips().length?17:-1),M(),F(!t.graph()&&!t.sourceLoaded()?18:-1),M(),F(!t.graph()&&t.sourceLoaded()&&t.loadFailed()?19:!t.graph()&&t.sourceLoaded()&&t.sourceSignals().length===0?20:-1),M(2),F(!t.graph()&&t.sourceSignals().length>0?21:-1),M(4),Y(t.jumpNote()),M(),F(t.graph()&&t.filteredResources().length?26:-1),M(),F(t.graph()&&(t.visibleNodes().length||!t.filteredResources().length)?27:-1)}},dependencies:[$y,bN,LD,ib,ab],styles:[`[_nghost-%COMP%] { +}`]})},FN=[`ArrowDown`,`ArrowUp`,`Home`,`End`],IN=`[aria-pressed="true"], [aria-expanded="true"], [aria-current]:not([aria-current="false"]), .selected`,LN=class e{appRovingList=$(``);host=E(Nl).nativeElement;current=null;focusInside=!1;constructor(){let e=E(ws);zd(()=>{if(this.sync(),typeof MutationObserver>`u`)return;let t=new MutationObserver(()=>this.sync());t.observe(this.host,{childList:!0,subtree:!0}),e.onDestroy(()=>t.disconnect())})}isItem(e){let t=this.appRovingList();return!!t&&!!e?.matches(t)}items(){let e=this.appRovingList();return e?[...this.host.querySelectorAll(e)]:[]}sync(){let e=this.items(),t=!1;if(!this.current||!this.host.contains(this.current)){let n=document.activeElement;t=this.focusInside&&(!n||n===document.body),this.current=e.find(e=>e.matches(IN))??e[0]??null}for(let t of e){let e=t===this.current?`0`:`-1`;t.getAttribute(`tabindex`)!==e&&t.setAttribute(`tabindex`,e)}t&&this.current?.focus()}onFocusIn(e){this.focusInside=!0;let t=e.target;this.isItem(t)&&t!==this.current&&(this.current?.setAttribute(`tabindex`,`-1`),this.current=t,t.setAttribute(`tabindex`,`0`))}onFocusOut(e){let t=e.relatedTarget;if(t&&this.host.contains(t))return;let n=e.target;setTimeout(()=>{n?.isConnected!==!1&&!this.host.contains(document.activeElement)&&(this.focusInside=!1)})}onKey(e){if(!FN.includes(e.key)||e.altKey||e.ctrlKey||e.metaKey)return;let t=e.target;if(!this.isItem(t))return;let n=this.items(),r=n.indexOf(t);if(r<0)return;let i={ArrowDown:Math.min(r+1,n.length-1),ArrowUp:Math.max(r-1,0),Home:0,End:n.length-1}[e.key];e.preventDefault(),n[i].focus()}static ɵfac=function(t){return new(t||e)};static ɵdir=Jh({type:e,selectors:[[``,`appRovingList`,``]],hostBindings:function(e,t){e&1&&G(`keydown`,function(e){return t.onKey(e)})(`focusin`,function(e){return t.onFocusIn(e)})(`focusout`,function(e){return t.onFocusOut(e)})},inputs:{appRovingList:[1,`appRovingList`]}})},RN=[`filterInput`],zN=e=>({id:e,label:`Status history`}),BN=e=>({id:e,label:`Value history`}),VN=(e,t)=>t.kind,HN=(e,t)=>t.name+t.file+t.line,UN=(e,t)=>t.epoch,WN=(e,t)=>t.id;function GN(e,t){if(e&1){let e=W();z(0,`div`,4)(1,`span`,15),J(2,`Page`),B(),z(3,`app-select`,16),G(`valueChange`,function(t){return O(e),k(K().selectPage(t))}),B()()}if(e&2){let e=K();M(3),R(`options`,e.pageOptions())(`value`,e.shownPageId())}}function KN(e,t){if(e&1){let e=W();z(0,`div`,5)(1,`span`,17),J(2,`Graph of`),B(),z(3,`app-select`,18),G(`valueChange`,function(t){return O(e),k(K().pickComponent(t))}),B()()}if(e&2){let e=K();M(3),R(`options`,e.componentOptions())(`value`,e.pickerValue())}}function qN(e,t){if(e&1&&(z(0,`span`,21),J(1),B()),e&2){let e=K(2);M(),Y(e.sourceNote(e.graph().source))}}function JN(e,t){if(e&1&&(z(0,`p`,7)(1,`span`,19),J(2),B(),z(3,`span`,20),J(4),B(),P(5,qN,2,1,`span`,21),B()),e&2){let e=t,n=K();M(2),Y(e.name),M(2),Y(e.path),M(),F(n.graph().source?5:-1)}}function YN(e,t){if(e&1&&(z(0,`p`,7)(1,`span`,19),J(2),B(),z(3,`span`,21),J(4,`environment injector`),B()()),e&2){let e=K();M(2),Y(e.injectorLabel(t))}}function XN(e,t){e&1&&(z(0,`p`,8),J(1,` The picked component or injector is gone or has no signal graph, so this shows another one. `),B())}function ZN(e,t){e&1&&J(0,` The effects registered on this injector and the signals they read. A signal that no effect reads is not part of the graph. Pick a kind to filter. `)}function QN(e,t){e&1&&J(0,` The live signal graph of one component. Only signals that its template or an effect has read appear here; a signal nothing has read yet is not part of the graph. Pick a kind to filter. `)}function $N(e,t){e&1&&J(0,` Every signal, computed and effect found in your source. Pick a kind to filter. `)}function eP(e,t){e&1&&(z(0,`p`,8),J(1,` The live signal graph needs Angular 20.1 or later. This list comes from a source scan. `),B())}function tP(e,t){e&1&&(z(0,`p`,8),J(1,` The signal write hook did not load. Value history shows sampled values only, with no exact set entries. `),B())}function nP(e,t){if(e&1&&(z(0,`p`,8),J(1),B()),e&2){let e=K();M(),Z(` Showing `,e.graph().nodes.length,` of `,t,` signals. The rest and their edges are left out. `)}}function rP(e,t){if(e&1){let e=W();z(0,`button`,22),G(`click`,function(){let t=O(e).$implicit,n=K(2);return k(n.kind.set(n.kind()===t.kind?null:t.kind))}),V(1,`span`,25),z(2,`span`,26),J(3),B(),z(4,`span`,23),J(5),B()()}if(e&2){let e=t.$implicit,n=K(2);q(`active`,n.kind()===e.kind),N(`aria-pressed`,n.kind()===e.kind),M(),j_(`background`,n.kindColor(e.kind)),M(2),Y(e.kind),M(2),Y(e.count)}}function iP(e,t){if(e&1){let e=W();z(0,`div`,10)(1,`button`,22),G(`click`,function(){return O(e),k(K().kind.set(null))}),J(2,` All `),z(3,`span`,23),J(4),B()(),I(5,rP,6,7,`button`,24,VN),B()}if(e&2){let e=K();M(),q(`active`,!e.kind()),N(`aria-pressed`,!e.kind()),M(3),Y(e.kindTotal()),M(),L(e.kindChips())}}function aP(e,t){e&1&&(z(0,`div`,11),V(1,`span`,27),z(2,`p`,28),J(3,`Scanning source for signals…`),B()())}function oP(e,t){if(e&1){let e=W();z(0,`div`,29)(1,`p`,28),J(2,`Couldn't load signals`),B(),z(3,`p`,30),J(4,` The devtools server did not answer. Check that it is still running, then retry. `),B(),z(5,`button`,31),G(`click`,function(){return O(e),k(K().retry())}),J(6),B()()}if(e&2){let e=K();q(`compact`,e.sourceSignals().length>0),M(5),N(`aria-disabled`,e.retrying()||null),M(),X(` `,e.retrying()?`Retrying…`:`Retry`,` `)}}function sP(e,t){e&1&&(z(0,`div`,13)(1,`p`,28),J(2,`No signals found.`),B(),z(3,`p`,30),J(4,` No `),z(5,`code`),J(6,`signal()`),B(),J(7,`, `),z(8,`code`),J(9,`computed()`),B(),J(10,` or `),z(11,`code`),J(12,`effect()`),B(),J(13,` calls were found in your source. To see the live graph, run Angular 20.1 or later with the overlay connected and select a component. `),B()())}function cP(e,t){if(e&1&&(z(0,`span`,41),J(1,`·`),B(),z(2,`span`),J(3),B()),e&2){let e=K().$implicit;M(3),X(`in <`,e.component,`>`)}}function lP(e,t){if(e&1&&(z(0,`div`,34)(1,`div`,36)(2,`span`,37),J(3),B(),z(4,`span`,38),J(5),B()(),z(6,`div`,39),V(7,`app-source-link`,40),P(8,cP,4,1),B()()),e&2){let e=t.$implicit,n=K(2);M(2),j_(`background`,n.kindColor(e.kind)),M(),Y(e.kind),M(2),Y(e.name),M(2),R(`file`,e.file)(`line`,e.line),M(),F(e.component?8:-1)}}function uP(e,t){if(e&1){let e=W();z(0,`div`,35)(1,`p`,28),J(2,`No signals match.`),B(),z(3,`p`,30),J(4,`Try a different name or kind.`),B(),z(5,`button`,31),G(`click`,function(){return O(e),k(K(2).clearFilters())}),J(6,`Clear filters`),B()()}}function dP(e,t){if(e&1&&(z(0,`p`,32),J(1,`Signals from source scan (static analysis):`),B(),z(2,`div`,33),I(3,lP,9,7,`div`,34,HN,!1,uP,7,0,`div`,35),B()),e&2){let e=K();M(3),L(e.filteredSourceSignals())}}function fP(e,t){if(e&1&&(z(0,`span`,47),J(1),B()),e&2){let e=K().$implicit;M(),X(``,e.missed,` earlier not captured`)}}function pP(e,t){if(e&1&&(z(0,`li`)(1,`span`,45)(2,`time`),J(3),yv(4,`date`),B(),z(5,`span`,46),J(6),B(),z(7,`span`),J(8),B(),P(9,fP,2,1,`span`,47),B(),z(10,`pre`),J(11),yv(12,`json`),B()()),e&2){let e=t.$implicit,n=K(3);M(3),Y(Sv(4,7,e.at,`HH:mm:ss.SSS`)),M(2),M_(`source-`+e.source),M(),Y(n.sourceLabel(e.source)),M(2),X(`epoch `,e.epoch),M(),F(e.missed?9:-1),M(2),Y(xv(12,10,e.value))}}function mP(e,t){if(e&1&&(z(0,`h4`,42),J(1),B(),z(2,`p`,43),J(3),B(),z(4,`ol`,44),I(5,pP,13,12,`li`,null,UN),B()),e&2){let e=K(),t=e.id,n=e.label,r=K();R(`id`,`history-heading-`+t),M(),Y(n),M(2),Y(r.historySummary(t)),M(),N(`aria-labelledby`,`history-heading-`+t),M(),L(r.selectedHistory())}}function hP(e,t){e&1&&P(0,mP,7,4),e&2&&F(K().selectedHistory().length?0:-1)}function gP(e,t){if(e&1&&(z(0,`span`,56),J(1),B()),e&2){let e=K().$implicit;M_(`tone-`+K(2).statusTone(e.status)),M(),Y(e.status)}}function _P(e,t){if(e&1&&(z(0,`span`,52),J(1),B()),e&2){let e=t;M(),Z(``,e,` `,e===1?`change`:`changes`)}}function vP(e,t){if(e&1&&(z(0,`span`,54),J(1),yv(2,`json`),B()),e&2){let e=K().$implicit;M(),Y(xv(2,1,e.error))}}function yP(e,t){if(e&1&&(z(0,`span`,54),J(1),yv(2,`json`),B()),e&2){let e=K().$implicit;M(),Y(xv(2,1,e.value))}}function bP(e,t){e&1&&(z(0,`p`,30),J(1,` This resource has no name. Pass `),z(2,`code`),J(3,`debugName`),B(),J(4,` to `),z(5,`code`),J(6,`resource()`),B(),J(7,` or `),z(8,`code`),J(9,`httpResource()`),B(),J(10,` to name it here. `),B())}function xP(e,t){if(e&1&&(z(0,`dt`),J(1,`Loading`),B(),z(2,`dd`),J(3),B()),e&2){let e=K(2).$implicit;M(3),Y(e.isLoading?`yes`:`no`)}}function SP(e,t){if(e&1&&(z(0,`dt`),J(1,`HTTP status`),B(),z(2,`dd`),J(3),B()),e&2){let e=K(2).$implicit;M(3),Y(e.statusCode)}}function CP(e,t){if(e&1&&(z(0,`dt`),J(1,`Params`),B(),z(2,`dd`)(3,`pre`,60),J(4),yv(5,`json`),B()()),e&2){let e=K(2).$implicit;M(3),N(`aria-label`,`Params of `+e.name),M(),Y(xv(5,2,e.params))}}function wP(e,t){if(e&1&&(z(0,`dt`),J(1,`Value`),B(),z(2,`dd`)(3,`pre`,60),J(4),yv(5,`json`),B()()),e&2){let e=K(2).$implicit;M(3),N(`aria-label`,`Value of `+e.name),M(),Y(xv(5,2,e.value))}}function TP(e,t){if(e&1&&(z(0,`dt`),J(1,`Error`),B(),z(2,`dd`)(3,`pre`,60),J(4),yv(5,`json`),B()()),e&2){let e=K(2).$implicit;M(3),N(`aria-label`,`Error of `+e.name),M(),Y(xv(5,2,e.error))}}function EP(e,t){if(e&1&&(z(0,`li`)(1,`span`,61),J(2),B(),z(3,`span`,62),J(4),B()()),e&2){let e=t.$implicit,n=K(5);M(),j_(`background`,n.kindColor(e.kind)),M(),Y(e.kind),M(2),Y(e.label??e.id)}}function DP(e,t){if(e&1&&(z(0,`ul`,42),I(1,EP,5,4,`li`,null,WN),B()),e&2){let e=K(2).$implicit,t=K(2);R(`id`,`resource-internals-`+e.id),M(),L(t.internalsOf(e))}}function OP(e,t){if(e&1){let e=W();z(0,`div`,55)(1,`h3`,57),J(2),B(),P(3,bP,11,0,`p`,30),z(4,`dl`)(5,`dt`),J(6,`Status`),B(),z(7,`dd`),J(8),B(),P(9,xP,4,1),P(10,SP,4,1),P(11,CP,6,4),P(12,wP,6,4),P(13,TP,6,4),B(),Ug(14,58),z(15,`button`,59),G(`click`,function(){O(e);let t=K(3);return k(t.showInternals.set(!t.showInternals()))}),J(16),B(),P(17,DP,3,1,`ul`,42),B()}if(e&2){let e=K().$implicit,t=K(2),n=u_(23);R(`id`,`signal-detail-`+e.id),M(2),Y(e.name),M(),F(e.named?-1:3),M(5),Y(e.status??`unknown`),M(),F(e.isLoading===void 0?-1:9),M(),F(e.statusCode===void 0?-1:10),M(),F(e.params===void 0?-1:11),M(),F(e.value===void 0?-1:12),M(),F(e.error===void 0?-1:13),M(),R(`ngTemplateOutlet`,n)(`ngTemplateOutletContext`,hv(16,zN,e.id)),M(),N(`aria-expanded`,t.showInternals())(`aria-controls`,`resource-internals-`+e.id),M(),Z(` `,t.showInternals()?`Hide`:`Show`,` internal signals (`,e.nodeIds.length,`) `),M(),F(t.showInternals()?17:-1)}}function kP(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,50),G(`click`,function(){let t=O(e).$implicit;return k(K(2).select(t.id))}),z(2,`span`,36)(3,`span`,37),J(4,`resource`),B(),z(5,`span`,38),J(6),B(),P(7,gP,2,3,`span`,51),P(8,_P,2,2,`span`,52),V(9,`span`,53),B(),P(10,vP,3,3,`span`,54)(11,yP,3,3,`span`,54),B(),P(12,OP,18,18,`div`,55),B()}if(e&2){let e,n=t.$implicit,r=K(2);M(),q(`selected`,r.selectedId()===n.id),N(`aria-expanded`,r.selectedId()===n.id)(`aria-controls`,`signal-detail-`+n.id)(`data-card`,n.id),M(2),j_(`background`,r.kindColor(`resource`)),M(3),Y(n.name),M(),F(n.status?7:-1),M(),F((e=n.changes)?8:-1,e),M(2),F(n.error===void 0?n.value===void 0?-1:11:10),M(2),F(r.selectedId()===n.id?12:-1)}}function AP(e,t){if(e&1&&(z(0,`h2`,48),J(1,`Resources`),B(),z(2,`ul`,49),I(3,kP,13,12,`li`,null,WN),B()),e&2){let e=K();M(3),L(e.filteredResources())}}function jP(e,t){if(e&1&&(z(0,`span`,52),J(1),B()),e&2){let e=t;M(),Z(``,e,` `,e===1?`change`:`changes`)}}function MP(e,t){if(e&1&&(z(0,`span`,54),J(1),yv(2,`json`),B()),e&2){let e=K().$implicit;M(),Y(xv(2,1,e.value))}}function NP(e,t){if(e&1&&(z(0,`span`,41),J(1,`·`),B(),z(2,`span`),J(3),B()),e&2){let e=K().$implicit,t=K(2);M(3),X(`Deps: `,t.getDependencies(e).length)}}function PP(e,t){if(e&1&&(z(0,`span`,41),J(1,`·`),B(),z(2,`span`),J(3),B()),e&2){let e=K().$implicit,t=K(2);M(3),X(`Consumers: `,t.getConsumers(e).length)}}function FP(e,t){if(e&1&&(z(0,`dt`),J(1,`Value`),B(),z(2,`dd`)(3,`pre`,60),J(4),yv(5,`json`),B()()),e&2){let e=K(4);M(3),N(`aria-label`,`Value of `+(e.selectedNode().label??`signal`)),M(),Y(xv(5,2,e.selectedNode().value))}}function IP(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,65),G(`click`,function(){let t=O(e).$implicit;return k(K(5).jumpTo(t))}),z(2,`span`,61),J(3),B(),z(4,`span`,62),J(5),B()()()}if(e&2){let e=t.$implicit,n=K(5);M(),N(`aria-label`,`Go to `+e.kind+` `+(e.label??e.id)),M(),j_(`background`,n.kindColor(e.kind)),M(),Y(e.kind),M(2),Y(e.label??e.id)}}function LP(e,t){if(e&1&&(z(0,`h4`),J(1,`Dependencies (producers)`),B(),z(2,`ul`),I(3,IP,6,5,`li`,null,WN),B()),e&2){let e=K(4);M(3),L(e.getDependencies(e.selectedNode()))}}function RP(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,65),G(`click`,function(){let t=O(e).$implicit;return k(K(5).jumpTo(t))}),z(2,`span`,61),J(3),B(),z(4,`span`,62),J(5),B()()()}if(e&2){let e=t.$implicit,n=K(5);M(),N(`aria-label`,`Go to `+e.kind+` `+(e.label??e.id)),M(),j_(`background`,n.kindColor(e.kind)),M(),Y(e.kind),M(2),Y(e.label??e.id)}}function zP(e,t){if(e&1&&(z(0,`h4`),J(1,`Consumers`),B(),z(2,`ul`),I(3,RP,6,5,`li`,null,WN),B()),e&2){let e=K(4);M(3),L(e.getConsumers(e.selectedNode()))}}function BP(e,t){e&1&&(z(0,`p`,30),J(1),B()),e&2&&(M(),Y(t))}function VP(e,t){if(e&1&&(z(0,`div`,55)(1,`h3`,57),J(2),B(),z(3,`dl`)(4,`dt`),J(5,`Kind`),B(),z(6,`dd`),J(7),B(),z(8,`dt`),J(9,`Epoch`),B(),z(10,`dd`),J(11),B(),P(12,FP,6,4),B(),P(13,LP,5,0),P(14,zP,5,0),P(15,BP,2,1,`p`,30),Ug(16,58),B()),e&2){let e,t=K().$implicit,n=K(2),r=u_(23);R(`id`,`signal-detail-`+t.id),M(2),Y(n.selectedNode().label??n.selectedNode().id),M(5),Y(n.selectedNode().kind),M(4),Y(n.selectedNode().epoch),M(),F(n.selectedNode().value===void 0?-1:12),M(),F(n.getDependencies(n.selectedNode()).length?13:-1),M(),F(n.getConsumers(n.selectedNode()).length?14:-1),M(),F((e=n.writeHint())?15:-1,e),M(),R(`ngTemplateOutlet`,r)(`ngTemplateOutletContext`,hv(10,BN,t.id))}}function HP(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,50),G(`click`,function(){let t=O(e).$implicit;return k(K(2).select(t.id))}),z(2,`span`,36)(3,`span`,37),J(4),B(),z(5,`span`,38),J(6),B(),P(7,jP,2,2,`span`,52),V(8,`span`,53),B(),P(9,MP,3,3,`span`,54),z(10,`span`,39)(11,`span`),J(12),B(),P(13,NP,4,1),P(14,PP,4,1),B()(),P(15,VP,17,12,`div`,55),B()}if(e&2){let e,n=t.$implicit,r=K(2);M(),q(`selected`,r.selectedId()===n.id),N(`aria-expanded`,r.selectedId()===n.id)(`aria-controls`,`signal-detail-`+n.id)(`data-card`,n.id),M(2),j_(`background`,r.kindColor(n.kind)),M(),Y(n.kind),M(2),Y(n.label??`(unnamed)`),M(),F((e=r.changeCount(n.id))?7:-1,e),M(2),F(n.value===void 0?-1:9),M(3),X(`Epoch: `,n.epoch),M(),F(r.getDependencies(n).length?13:-1),M(),F(r.getConsumers(n).length?14:-1),M(),F(r.selectedId()===n.id&&r.selectedNode()?15:-1)}}function UP(e,t){if(e&1){let e=W();z(0,`button`,31),G(`click`,function(){return O(e),k(K(3).clearFilters())}),J(1,`Clear filters`),B()}}function WP(e,t){if(e&1&&(z(0,`li`,64)(1,`p`,28),J(2),B(),z(3,`p`,30),J(4),B(),P(5,UP,2,0,`button`,66),B()),e&2){let e=K(2);M(2),X(` `,e.hasAnySignals()?`No signals match.`:`No signals in this graph.`,` `),M(2),X(` `,e.hasAnySignals()?`Try a different name or kind.`:`Select a component that reads signals, or interact with the page to create some.`,` `),M(),F(e.hasAnySignals()?5:-1)}}function GP(e,t){if(e&1&&(z(0,`h2`,48),J(1,`Signals`),B(),z(2,`ul`,63),I(3,HP,16,15,`li`,null,WN,!1,WP,6,3,`li`,64),B()),e&2){let e=K();M(3),L(e.filteredNodes())}}var KP=`follow`;function qP(e){return Object.keys(e.pages).length?e.pages:e.graph?{[e.graph.pageId??``]:e.graph}:{}}var JP=`env:`,YP=50,XP={selected:`picked`,routed:`rendered by the router`,root:`first component with signals`},ZP={write:`set`,sample:`sampled`,initial:`initial`},QP={resolved:`ok`,local:`ok`,loading:`warn`,reloading:`warn`,error:`danger`},$P={signal:`#facc15`,computed:`#60a5fa`,linkedSignal:`#34d399`,effect:`#fb923c`,template:`#94a3b8`,afterRenderEffectPhase:`#f472b6`,childSignalProp:`#fef08a`,"input (signal)":`#f59e0b`,"input.required (signal)":`#f59e0b`,"output (signal)":`#ec4899`,"model (signal)":`#14b8a6`,"model.required (signal)":`#14b8a6`,"viewChild (signal)":`#a3e635`,"viewChild.required (signal)":`#a3e635`,"viewChildren (signal)":`#a3e635`,"contentChild (signal)":`#fda4af`,"contentChild.required (signal)":`#fda4af`,"contentChildren (signal)":`#fda4af`,resource:`#06b6d4`,unknown:`#a1a1aa`},eF=class e{rpc=$(null);destroyRef=E(ws);host=E(Nl);filterInput=Kv(`filterInput`);injector=E(Ss);pageId=uE();cleanups=[];graphLoad=0;treePages=j({});graphState=j({graph:null,pages:{}});chosenPageId=j(null);announcement=j(``);graphPages=Q(()=>qP(this.graphState()));shownPageId=Nv({source:()=>({pages:this.graphPages(),newest:this.graphState().graph?.pageId??null,chosen:this.chosenPageId()}),computation:({pages:e,newest:t,chosen:n},r)=>{let i={};for(let n of Object.keys(e))i[n]={pageId:n,reportedAt:+(n===t)};return dE(i,{chosen:n,host:this.pageId,previous:r?.value??null})}});reported=Q(()=>{let e=this.shownPageId();return e===null?null:this.graphPages()[e]??null});unsupported=Q(()=>!!this.reported()?.unsupported);graph=Q(()=>{let e=this.reported();return e?.unsupported?null:e});graphOwner=Q(()=>{let e=this.graph();return e?`${e.pageId??``}|${e.component?.id??e.injector?.id??``}`:null});pickedByPage=j({});picked=Q(()=>this.pickedByPage()[this.targetPageId()??``]??null);pageOptions=Q(()=>{if(this.pageId)return[];let e=this.treePages();return Object.keys(this.graphPages()).map(t=>{let n=e[t];return{value:t,label:n?.title||n?.url||`Page ${t}`,hint:n?.url}})});showInternals=j(!1);sourceSignals=j([]);sourceLoaded=j(!1);sourceFailed=j(!1);graphFailed=j(!1);loadFailed=Q(()=>this.sourceFailed()||this.graphFailed());retrying=j(!1);filter=j(``);resources=Q(()=>this.graph()?.resources??[]);internalIds=Q(()=>new Set(this.resources().flatMap(e=>e.nodeIds)));visibleNodes=Q(()=>{let e=this.internalIds();return(this.graph()?.nodes??[]).filter(t=>!e.has(t.id))});hasAnySignals=Q(()=>this.visibleNodes().length+this.resources().length>0);kindCounts=Q(()=>{let e=this.graph()?[...this.visibleNodes().map(e=>e.kind),...this.resources().map(()=>`resource`)]:this.sourceSignals().map(e=>e.kind),t=new Map;for(let n of e)t.set(n,(t.get(n)??0)+1);return[...t].map(([e,t])=>({kind:e,count:t}))});kind=Nv({source:this.graphOwner,computation:(e,t)=>{let n=t?.value??null;return n&&jv(this.kindCounts).some(e=>e.kind===n)?n:null}});kindChips=Q(()=>{let e=this.kindCounts(),t=this.kind();return t&&!e.some(e=>e.kind===t)?[...e,{kind:t,count:0}]:e});kindTotal=Q(()=>this.kindCounts().reduce((e,t)=>e+t.count,0));selectedId=Nv({source:this.graphOwner,computation:()=>null});selectedNode=Q(()=>this.graph()?.nodes.find(e=>e.id===this.selectedId())??null);jumpedPast=j(null);jumpNote=Q(()=>{let e=this.jumpedPast();return!e||this.filter()||this.kind()||this.selectedId()!==e.id?``:`Cleared the filters to show ${e.label}.`});selectedHistory=Q(()=>{let e=this.selectedId();return e?[...this.graph()?.history?.[e]??[]].reverse():[]});writeHint=Q(()=>{let e=this.selectedNode(),t=this.graph();if(!e||!t||t.writeHook===!1||e.kind!==`signal`&&e.kind!==`linkedSignal`)return``;if(!e.label)return`This signal has no name, so its history holds sampled values only. Pass a debugName in its options, for example signal(0, { debugName: 'count' }).`;let n=t.history?.[e.id]??[];return n.some(e=>e.source===`write`)||!n.some(e=>e.source===`sample`)?``:`Every change here was sampled. Writes are matched by name, kind, version and value, so another live signal with the same name and value can hide them.`});kindLegend=Object.entries($P).map(([e,t])=>({kind:e,color:t}));filteredResources=Q(()=>{let e=this.filter().toLowerCase(),t=this.kind();return t&&t!==`resource`?[]:this.resources().filter(t=>!e||t.name.toLowerCase().includes(e)||e.length>=3&&`resource`.startsWith(e))});filteredNodes=Q(()=>{let e=this.filter().toLowerCase(),t=this.kind();return this.visibleNodes().filter(n=>(!t||n.kind===t)&&(!e||(n.label??``).toLowerCase().includes(e)||n.kind.toLowerCase().includes(e))).sort((e,t)=>e.id.localeCompare(t.id,void 0,{numeric:!0}))});filteredSourceSignals=Q(()=>{let e=this.filter().toLowerCase(),t=this.kind();return this.sourceSignals().filter(n=>(!t||n.kind===t)&&(!e||n.name.toLowerCase().includes(e)||n.kind.toLowerCase().includes(e)||n.file.toLowerCase().includes(e)))});targetPageId=Q(()=>this.pageId??(this.shownPageId()||null)??this.graph()?.pageId??this.latestTreePage()?.pageId??null);latestTreePage=Q(()=>{let e=null;for(let[t,n]of Object.entries(this.treePages())){let r=n.reportedAt??0;(!e||r>e.reportedAt)&&(e={pageId:t,reportedAt:r})}return e});componentOptions=Q(()=>{let e=this.targetPageId(),t=(e?this.treePages()[e]?.roots:void 0)??[],n=[],r=e=>{for(let t of e)n.push(t),r(t.children)};r(t);let i=this.graph()?.environments??[];if(!n.length&&!i.length)return[];let a=new Map;for(let e of n)a.set(e.name,(a.get(e.name)??0)+1);let o=new Map,s=[{value:KP,label:`Follow the routed component`,hint:`automatic`},...i.map(e=>({value:JP+e.id,label:this.injectorLabel(e),hint:`injector`}))];for(let e of n){let t=(o.get(e.name)??0)+1;o.set(e.name,t),s.push({value:e.id,label:(a.get(e.name)??0)>1?`${e.name} #${t}`:e.name,hint:`<${e.tag}>`})}return s});pickerValue=Q(()=>{let e=this.picked();return e&&this.componentOptions().some(t=>t.value===e)?e:KP});constructor(){dc(()=>{let e=this.rpc();e&&(this.loadSignalGraph(e),this.loadSourceSignals(e))}),this.destroyRef.onDestroy(()=>{for(let e of this.cleanups.splice(0))e()})}async loadSignalGraph(e){for(let e of this.cleanups.splice(0))e();let t=++this.graphLoad,n=()=>this.destroyRef.destroyed||t!==this.graphLoad,r=e.scope(`pangular`);try{let e=await r.rpc.sharedState(`signal-graph`);if(n())return;this.graphFailed.set(!1);let t=e=>{let t=e,n=t?.pages&&typeof t.pages==`object`?t.pages:{},r={graph:t?.graph??null,pages:n};this.notePageGone(qP(r)),this.graphState.set(r)};t(e.value()),this.cleanups.push(e.on(`updated`,t))}catch{if(n())return;this.graphState.set({graph:null,pages:{}}),this.graphFailed.set(!0)}try{let e=await r.rpc.sharedState(`component-tree`);if(n())return;let t=e=>{let t=e?.pages;this.treePages.set(t&&typeof t==`object`?t:{})};t(e.value()),this.cleanups.push(e.on(`updated`,t))}catch{n()||this.treePages.set({})}}notePageGone(e){let t=Object.keys(this.graphPages()).filter(t=>!e[t]);t.length&&this.pickedByPage.update(e=>{let n={...e};for(let e of t)delete n[e];return n});let n=this.chosenPageId();if(!n||e[n])return;let r=this.pageOptions().find(e=>e.value===n)?.label??`The chosen page`;this.chosenPageId.set(null),this.announcement.set(`${r} closed, so this shows another page.`)}selectPage(e){if(!e||e===this.shownPageId())return;this.chosenPageId.set(e);let t=this.pageOptions().find(t=>t.value===e)?.label??e;this.announcement.set(`Showing the signal graph of ${t}.`)}pickComponent(e){let t=e&&e!==KP?e:null,n=this.targetPageId()??void 0;this.pickedByPage.update(e=>{let r={...e};return t?r[n??``]=t:delete r[n??``],r});let r=this.rpc();if(!r)return;let i=t?.startsWith(JP)?{pageId:n,env:t.slice(4)}:{pageId:n,id:t};r.scope(`pangular`).rpc.call(`select-signal-target`,i).catch(()=>{})}injectorLabel(e){return e.name===`Root`?`Root services`:e.name}sourceNote(e){return XP[e]}async loadSourceSignals(e){let t=e.scope(`pangular`);try{let e=await t.rpc.call(`get-signals`);this.sourceSignals.set(e),this.sourceFailed.set(!1)}catch{this.sourceFailed.set(!0)}finally{this.sourceLoaded.set(!0)}}async retry(){let e=this.rpc();if(!e||this.retrying())return;let t=document.activeElement;this.retrying.set(!0);try{await Promise.all([this.loadSignalGraph(e),this.loadSourceSignals(e)])}finally{this.retrying.set(!1)}this.destroyRef.destroyed||zd(()=>{(!t?.isConnected||document.activeElement===document.body)&&this.filterInput()?.nativeElement.focus()},{injector:this.injector})}clearFilters(){this.resetFilters(),this.filterInput()?.nativeElement.focus()}resetFilters(){this.filter.set(``),this.kind.set(null)}select(e){this.selectedId.set(this.selectedId()===e?null:e),this.showInternals.set(!1)}jumpTo(e){let t=this.resources().find(t=>t.nodeIds.includes(e.id)),n=t?.id??e.id,r=t?!this.filteredResources().some(e=>e.id===n):!this.filteredNodes().some(e=>e.id===n);r&&this.resetFilters(),this.jumpedPast.set(r?{id:n,label:t?.name??e.label??e.id}:null),this.selectedId.set(n),this.showInternals.set(!!t),zd(()=>{let e=[...this.host.nativeElement.querySelectorAll(`.node-card[data-card]`)].find(e=>e.dataset.card===n);e?.scrollIntoView?.({block:`nearest`}),e?.focus({preventScroll:!0})},{injector:this.injector})}changeCount(e){let t=this.graph(),n=t?.nodes.find(t=>t.id===e)?.changes??t?.resources?.find(t=>t.id===e)?.changes;return n===void 0?(t?.history?.[e]??[]).reduce((e,t)=>e+(t.source===`initial`?0:1+(t.missed??0)),0):n}historySummary(e){let t=this.changeCount(e),n=this.graph()?.history?.[e]?.length??0;return t?`${`${t} ${t===1?`change`:`changes`} recorded`}${n>=YP&&t>=n?`, showing the last ${n}`:``}, newest first.`:`No changes recorded yet. The entry below is the value seen first.`}statusTone(e){return QP[e]??`neutral`}internalsOf(e){let t=new Set(e.nodeIds);return(this.graph()?.nodes??[]).filter(e=>t.has(e.id))}sourceLabel(e){return ZP[e]}kindColor(e){return $P[e]??$P.unknown}relations=Q(()=>{let e=new Map,t=this.graph();if(!t)return e;for(let n of t.nodes)e.set(n.id,{deps:[],consumers:[]});for(let n of t.edges){let r=t.nodes[n.producer],i=t.nodes[n.consumer];r&&i&&(e.get(i.id)?.deps.push(r),e.get(r.id)?.consumers.push(i))}return e});getDependencies(e){return this.relations().get(e.id)?.deps??[]}getConsumers(e){return this.relations().get(e.id)?.consumers??[]}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-signal-inspector`]],viewQuery:function(e,t){e&1&&c_(t.filterInput,RN,5),e&2&&l_()},inputs:{rpc:[1,`rpc`]},decls:28,vars:17,consts:[[`filterInput`,``],[`historyTpl`,``],[1,`toolbar`],[`type`,`search`,`placeholder`,`Filter by name or kind…`,`aria-label`,`Filter signals by name or kind`,3,`input`,`keydown.escape`,`value`],[1,`picker`,`page-picker`],[1,`picker`],[`role`,`status`,1,`sr-only`],[1,`showing`],[`role`,`status`,1,`fallback`],[1,`intro`],[`role`,`group`,`aria-label`,`Filter by kind`,1,`kinds`],[`role`,`status`,1,`empty`],[`role`,`alert`,1,`empty`,3,`compact`],[1,`empty`],[`role`,`status`,1,`jump-note`],[`id`,`signals-page-label`,1,`label-key`],[`labelledBy`,`signals-page-label`,3,`valueChange`,`options`,`value`],[`id`,`signals-component-label`,1,`label-key`],[`labelledBy`,`signals-component-label`,3,`valueChange`,`options`,`value`],[1,`showing-name`],[1,`mono`],[1,`source-note`],[`type`,`button`,1,`kind-chip`,3,`click`],[1,`count`],[`type`,`button`,1,`kind-chip`,3,`active`],[`aria-hidden`,`true`,1,`dot`],[1,`chip-text`],[`aria-hidden`,`true`,1,`spinner`],[1,`empty-title`],[`role`,`alert`,1,`empty`],[1,`hint`],[`type`,`button`,1,`reset`,3,`click`],[1,`source-label`],[1,`nodes`],[1,`node-card`],[`role`,`status`,1,`empty`,`compact`],[1,`node-header`],[1,`kind-badge`],[1,`node-label`],[1,`node-meta`],[1,`file`,3,`file`,`line`],[`aria-hidden`,`true`,1,`sep`],[3,`id`],[1,`history-summary`],[`tabindex`,`0`,1,`history`,`scroll-box`],[1,`history-meta`],[1,`source-tag`],[1,`missed`],[1,`list-heading`],[`role`,`list`,1,`nodes`,`resources`],[`type`,`button`,1,`node-card`,3,`click`],[1,`status-tag`,3,`class`],[1,`changed-badge`],[`aria-hidden`,`true`,1,`chevron`],[1,`node-value`],[1,`detail-panel`,3,`id`],[1,`status-tag`],[1,`detail-title`],[3,`ngTemplateOutlet`,`ngTemplateOutletContext`],[`type`,`button`,1,`reset`,`internals-toggle`,3,`click`],[`role`,`region`,`tabindex`,`0`,1,`scroll-box`],[1,`kind-badge`,`sm`],[1,`rel-label`],[`role`,`list`,`appRovingList`,`button.node-card`,1,`nodes`],[1,`empty`,`compact`],[`type`,`button`,1,`rel-link`,3,`click`],[`type`,`button`,1,`reset`]],template:function(e,t){if(e&1&&(z(0,`div`,2)(1,`input`,3,0),G(`input`,function(e){return t.filter.set(e.target.value)})(`keydown.escape`,function(){return t.filter.set(``)}),B(),P(3,GN,4,2,`div`,4),P(4,KN,4,2,`div`,5),B(),z(5,`p`,6),J(6),B(),P(7,JN,6,3,`p`,7)(8,YN,5,1,`p`,7),P(9,XN,2,0,`p`,8),z(10,`p`,9),P(11,ZN,1,0)(12,QN,1,0)(13,$N,1,0),B(),P(14,eP,2,0,`p`,8),P(15,tP,2,0,`p`,8),P(16,nP,2,2,`p`,8),P(17,iP,7,4,`div`,10),P(18,aP,4,0,`div`,11),P(19,oP,7,4,`div`,12)(20,sP,14,0,`div`,13),P(21,dP,6,1),ag(22,hP,1,1,`ng-template`,null,1,wv),z(24,`p`,14),J(25),B(),P(26,AP,5,0),P(27,GP,6,1)),e&2){let e,n;M(),R(`value`,t.filter()),M(2),F(t.pageOptions().length>1?3:-1),M(),F(t.componentOptions().length?4:-1),M(2),Y(t.announcement()),M(),F((e=t.graph()?.component)?7:(e=t.graph()?.injector)?8:-1,e),M(2),F(t.graph()&&t.picked()&&t.graph().source!==`selected`?9:-1),M(2),F(t.graph()?.injector?11:t.graph()?12:13),M(3),F(t.unsupported()?14:-1),M(),F(t.graph()?.writeHook===!1?15:-1),M(),F((n=t.graph()?.nodeCount)?16:-1,n),M(),F(t.kindChips().length?17:-1),M(),F(!t.graph()&&!t.sourceLoaded()?18:-1),M(),F(!t.graph()&&t.sourceLoaded()&&t.loadFailed()?19:!t.graph()&&t.sourceLoaded()&&t.sourceSignals().length===0?20:-1),M(2),F(!t.graph()&&t.sourceSignals().length>0?21:-1),M(4),Y(t.jumpNote()),M(),F(t.graph()&&t.filteredResources().length?26:-1),M(),F(t.graph()&&(t.visibleNodes().length||!t.filteredResources().length)?27:-1)}},dependencies:[sb,LN,GD,wO,fb,pb],styles:[`[_nghost-%COMP%] { display: block; min-width: 0; color: var(--%NS%text); @@ -5076,7 +5111,7 @@ button.node-card[_ngcontent-%COMP%] { dd[_ngcontent-%COMP%] + dt[_ngcontent-%COMP%] { margin-top: 8px; } -}`]})},RP=[`queryInput`],zP=()=>({compact:!1}),BP=()=>({compact:!0}),VP=(e,t)=>t.node.injector.id,HP=(e,t)=>t.id,UP=(e,t)=>t.from+t.token+e,WP=(e,t)=>t.token+e,GP=(e,t)=>t.type,KP=(e,t)=>t.token+t.file+t.line;function qP(e,t){if(e&1){let e=W();z(0,`div`,6)(1,`p`,7),J(2),B(),z(3,`p`,8),J(4,` The devtools server did not answer. Check that it is still running, then retry. `),B(),z(5,`button`,9),G(`click`,function(){return O(e),k(K().retry())}),J(6),B()()}if(e&2){let e=t.compact,n=K();q(`compact`,e),M(2),X(` `,e?`Couldn't load the live injector tree`:`Couldn't load DI data`,` `),M(3),N(`aria-disabled`,n.retrying()||null),M(),X(` `,n.retrying()?`Retrying…`:`Retry`,` `)}}function JP(e,t){if(e&1){let e=W();z(0,`div`,10)(1,`span`,11),J(2,`Page`),B(),z(3,`app-select`,12),G(`valueChange`,function(t){return O(e),k(K(2).selectPage(t))}),B()()}if(e&2){let e=K(2);M(3),R(`options`,e.pageOptions())(`value`,e.shownPageId())}}function YP(e,t){e&1&&P(0,JP,4,2,`div`,10),e&2&&F(K().pageOptions().length>1?0:-1)}function XP(e,t){if(e&1){let e=W();z(0,`label`,23)(1,`input`,24),G(`change`,function(){O(e);let t=K(2);return k(t.componentsOnly.set(!t.componentsOnly()))}),B(),J(2,` Components only `),B()}if(e&2){let e=K(2);M(),R(`checked`,e.componentsOnly())}}function ZP(e,t){e&1&&(z(0,`span`,25),J(1),B()),e&2&&(M(),X(`Change detection: `,t))}function QP(e,t){e&1&&(z(0,`p`,26),A(),z(1,`svg`,35),V(2,`circle`,36)(3,`path`,37),B(),ps(),z(4,`span`)(5,`strong`),J(6,`This page has more than 2000 element injectors.`),B(),J(7,` Only the first 2000 are shown, so a lookup path or a provider can point to one that is not listed. `),B()())}function $P(e,t){if(e&1){let e=W();z(0,`button`,41),G(`click`,function(){let t=O(e).$implicit;return k(K(3).reveal(t.id))}),V(1,`span`,42),z(2,`span`,43),J(3),B(),z(4,`span`,44),J(5),B()()}if(e&2){let e=t.$implicit,n=K(3);M(),C_(`background`,n.tone(e.kind)),M(2),Y(e.label),M(2),Y(e.tokens)}}function eF(e,t){e&1&&(z(0,`span`,40),J(1),B()),e&2&&(M(),X(`+`,t,` more`))}function tF(e,t){if(e&1&&(z(0,`div`,27)(1,`span`,38),J(2,`Provided by`),B(),I(3,$P,6,4,`button`,39,HP),P(5,eF,2,1,`span`,40),B()),e&2){let e,t=K(2);M(3),L(t.providedBy()),M(2),F((e=t.providedByMore())?5:-1,e)}}function nF(e,t){if(e&1){let e=W();z(0,`div`,28),J(1),z(2,`button`,45),G(`click`,function(){return O(e),k(K(2).clearQuery())}),J(3,`Clear search`),B()()}if(e&2){let e=K(2);M(),X(` Nothing here matches “`,e.query().trim(),`”. `)}}function rF(e,t){e&1&&J(0,` None of them provide anything themselves. `)}function iF(e,t){e&1&&J(0,` Turn off “Components only” to see directives. `)}function aF(e,t){e&1&&J(0,` Try a different search. `)}function oF(e,t){if(e&1&&(z(0,`div`,30)(1,`p`,7),J(2,`No injectors to show`),B(),z(3,`p`,8),P(4,rF,1,0)(5,iF,1,0)(6,aF,1,0),B()()),e&2){let e=K(2);M(4),F(e.onlyProviding()?4:e.componentsOnly()&&e.view()===`element`?5:6)}}function sF(e,t){if(e&1){let e=W();z(0,`span`,56),G(`click`,function(t){O(e);let n=K().$implicit;return k(K(2).toggle(n.node.injector.id,t))}),A(),z(1,`svg`,57),V(2,`path`,58),B()()}if(e&2){let e=K().$implicit;q(`open`,e.expanded)}}function cF(e,t){e&1&&V(0,`span`,48)}function lF(e,t){if(e&1&&(z(0,`span`,52),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.node.injector.component)}}function uF(e,t){if(e&1&&(z(0,`span`,52),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.node.injector.directives.join(`, `))}}function dF(e,t){if(e&1&&(z(0,`span`,54),A(),z(1,`svg`,35),V(2,`path`,59),B(),ps(),z(3,`span`,50),J(4,`injects`),B(),J(5),B()),e&2){let e=K().$implicit;N(`title`,e.node.dependencies.length+` injected`),M(5),X(` `,e.node.dependencies.length,` `)}}function fF(e,t){if(e&1&&(z(0,`span`,55),A(),z(1,`svg`,35),V(2,`path`,60),B(),ps(),z(3,`span`,50),J(4,`provides`),B(),J(5),B()),e&2){let e=K().$implicit;N(`title`,e.node.injector.providerCount+` provided`),M(5),X(` `,e.node.injector.providerCount,` `)}}function pF(e,t){if(e&1){let e=W();z(0,`div`,46),G(`click`,function(){let t=O(e).$implicit;return k(K(2).select(t.node.injector.id))})(`focus`,function(){let t=O(e).$implicit,n=K(2);return n.focusId.set(t.node.injector.id),k(n.highlight(t.node))})(`blur`,function(){return O(e),k(K(2).highlight(null))})(`mouseenter`,function(){let t=O(e).$implicit;return k(K(2).highlight(t.node))})(`mouseleave`,function(){return O(e),k(K(2).highlight(null))}),P(1,sF,3,2,`span`,47)(2,cF,1,0,`span`,48),z(3,`span`,49),J(4),B(),z(5,`span`,50),J(6),B(),z(7,`span`,51),J(8),B(),P(9,lF,2,1,`span`,52)(10,uF,2,1,`span`,52),z(11,`span`,53),P(12,dF,6,2,`span`,54),P(13,fF,6,2,`span`,55),B()()}if(e&2){let e=t.$implicit,n=K(2);C_(`--%NS%depth`,e.depth),q(`selected`,n.selected()?.injector?.id===e.node.injector.id),N(`aria-level`,e.depth+1)(`aria-expanded`,e.hasChildren?e.expanded:null)(`aria-selected`,n.selected()?.injector?.id===e.node.injector.id)(`tabindex`,n.rovingId()===e.node.injector.id?0:-1)(`data-id`,e.node.injector.id),M(),F(e.hasChildren?1:2),M(2),C_(`--%NS%tone`,n.tone(n.kind(e.node))),N(`title`,n.kind(e.node)),M(),Y(n.kind(e.node)[0].toUpperCase()),M(2),Y(n.kind(e.node)),M(2),Y(n.label(e.node)),M(),F(e.node.injector.component?9:e.node.injector.directives?.length?10:-1),M(3),F((e.node.dependencies?.length??0)>0?12:-1),M(),F(e.node.injector.providerCount>0?13:-1)}}function mF(e,t){if(e&1){let e=W();z(0,`button`,9),G(`click`,function(){let t=O(e);return k(K(3).reveal(t.node.injector.id))}),J(1),B()}if(e&2){let e=K(3);M(),X(` Show `,e.label(t.node),` `)}}function hF(e,t){if(e&1&&(z(0,`section`,33)(1,`header`,61)(2,`h2`,62),J(3),B()(),z(4,`div`,63)(5,`p`,8),J(6,` This injector is no longer on the page. Its component or directive was destroyed. `),B(),P(7,mF,2,1,`button`,64),B()()),e&2){let e,n=K(2);M(3),Y(t),M(4),F((e=n.rows()[0])?7:-1,e)}}function gF(e,t){if(e&1&&(z(0,`li`),J(1),B()),e&2){let e=t.$implicit;q(`is-component`,e===K(2).injector.component),M(),Y(e)}}function _F(e,t){if(e&1&&(z(0,`ul`,66),I(1,gF,2,3,`li`,73,wg),B()),e&2){let e=K();M(),L(e.injector.directives)}}function vF(e,t){if(e&1&&(z(0,`span`,74),V(1,`span`,42),J(2,` Null injector `),z(3,`span`,76),J(4,`throws NullInjectorError`),B()()),e&2){let e=K(4);M(),C_(`background`,e.tone(`null`))}}function yF(e,t){if(e&1&&(z(0,`span`,78),J(1),z(2,`span`,50),J(3),B()()),e&2){let e=K(2).$implicit;M(),X(` `,e.providers,` `),M(2),Y(e.providers===1?`provider`:`providers`)}}function bF(e,t){if(e&1){let e=W();z(0,`button`,77),G(`click`,function(){O(e);let t=K().$implicit;return k(K(3).reveal(t.id))}),V(1,`span`,42),z(2,`span`,43),J(3),B(),P(4,yF,4,2,`span`,78),B()}if(e&2){let e=K().$implicit,t=K(3);M(),C_(`background`,t.tone(e.kind)),M(2),Y(e.label),M(),F(e.providers?4:-1)}}function xF(e,t){if(e&1&&(z(0,`li`),P(1,vF,5,2,`span`,74)(2,bF,5,4,`button`,75),B()),e&2){let e=t.$implicit,n=t.$index,r=K(3);q(`current`,n===0),M(),F(e.id===r.nullId?1:2)}}function SF(e,t){e&1&&(z(0,`p`,68),J(1,`Only services this injector has already created are listed.`),B())}function CF(e,t){if(e&1&&(z(0,`span`,84),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function wF(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),X(`for `,e.from)}}function TF(e,t){if(e&1){let e=W();z(0,`button`,89),G(`click`,function(){let t=O(e);return k(K(6).reveal(t))}),V(1,`span`,42),J(2,` from `),z(3,`span`,43),J(4),B()()}if(e&2){let e=t,n=K(6);M(),C_(`background`,n.tone(n.kindById(e))),M(3),Y(n.labelById(e))}}function EF(e,t){e&1&&(z(0,`span`,87),J(1,`optional, not provided`),B())}function DF(e,t){e&1&&(z(0,`span`,88),J(1,`not provided anywhere`),B())}function OF(e,t){if(e&1&&(z(0,`li`,81)(1,`div`,82)(2,`span`,83),J(3),B(),I(4,CF,2,1,`span`,84,wg),B(),z(6,`div`,85),P(7,wF,2,1,`span`),P(8,TF,5,3,`button`,86)(9,EF,2,0,`span`,87)(10,DF,2,0,`span`,88),B()()),e&2){let e,n=t.$implicit,r=K(3);q(`hit`,K(2).matches(n.token)),M(3),Y(n.token),M(),L(n.flags),M(3),F(r.injector.type!==`element`||r.injector.directives&&r.injector.directives.length>1?7:-1),M(),F((e=n.providedBy)?8:n.flags.includes(`optional`)?9:10,e)}}function kF(e,t){if(e&1&&(z(0,`ul`,79),I(1,OF,11,5,`li`,80,UP),B()),e&2){let e=K(2);M(),L(e.dependencies)}}function AF(e,t){e&1&&(z(0,`p`,72),J(1,`Nothing is injected through the constructor or inject().`),B())}function jF(e,t){e&1&&(z(0,`p`,72),J(1,`No service created here has injected anything yet.`),B())}function MF(e,t){if(e&1&&(z(0,`div`,67)(1,`h3`),J(2),z(3,`span`,16),J(4),B()(),P(5,SF,2,0,`p`,68),P(6,kF,3,0,`ul`,79)(7,AF,2,0,`p`,72)(8,jF,2,0,`p`,72),B()),e&2){let e=K();M(2),X(` `,e.injector.type===`element`?`Injected here`:`Injected by its services`,` `),M(2),Y(e.dependencies?.length??0),M(),F(e.injector.type===`element`?-1:5),M(),F(e.dependencies?.length?6:e.injector.type===`element`?7:8)}}function NF(e,t){e&1&&(z(0,`span`,84),J(1,`viewProviders`),B())}function PF(e,t){e&1&&(z(0,`span`,84),J(1,`multi`),B())}function FF(e,t){if(e&1&&(z(0,`div`,85),J(1),B()),e&2){let e=K().$implicit;M(),X(`via `,e.importPath.join(` › `))}}function IF(e,t){if(e&1&&(z(0,`li`,91)(1,`div`,82)(2,`span`,83),J(3),B(),z(4,`span`,92),J(5),B(),P(6,NF,2,0,`span`,84),P(7,PF,2,0,`span`,84),B(),P(8,FF,2,1,`div`,85),B()),e&2){let e=t.$implicit,n=K(4);q(`hit`,n.matches(e.token)),M(3),Y(e.token),M(2),Y(e.type===`unknown`?`provider`:`use`+n.capital(e.type)),M(),F(e.isViewProvider?6:-1),M(),F(e.multi?7:-1),M(),F(e.importPath?.length?8:-1)}}function LF(e,t){if(e&1&&(z(0,`ul`,71),I(1,IF,9,7,`li`,90,WP),B()),e&2){let e=K();M(),L(e.providers)}}function RF(e,t){e&1&&J(0,` No providers or viewProviders on this element. `)}function zF(e,t){e&1&&J(0,` This injector has no providers of its own. `)}function BF(e,t){if(e&1&&(z(0,`p`,72),P(1,RF,1,0)(2,zF,1,0),B()),e&2){let e=K();M(),F(e.injector.type===`element`?1:2)}}function VF(e,t){if(e&1&&(z(0,`section`,34)(1,`header`,61)(2,`span`,65),J(3),B(),z(4,`h2`,62),J(5),B(),P(6,_F,3,0,`ul`,66),B(),z(7,`div`,67)(8,`h3`),J(9,`Lookup path`),B(),z(10,`p`,68),J(11,`Angular asks these injectors in order until one has the token.`),B(),z(12,`ol`,69),I(13,xF,3,3,`li`,70,HP),B()(),P(15,MF,9,4,`div`,67),z(16,`div`,67)(17,`h3`),J(18,` Provides `),z(19,`span`,16),J(20),B()(),P(21,LF,3,0,`ul`,71)(22,BF,3,1,`p`,72),B()()),e&2){let e=t,n=K(2);M(2),C_(`--%NS%tone`,n.tone(n.kind(e))),M(),Y(n.kind(e)),M(2),Y(n.label(e)),M(),F(e.injector.directives?.length?6:-1),M(7),L(n.path()),M(2),F(e.injector.type===`element`||e.dependencies?15:-1),M(5),Y(e.providers.length),M(),F(e.providers.length?21:22)}}function HF(e,t){if(e&1){let e=W();z(0,`p`,13),J(1,` Every component and directive gets an injector. When it asks for a token, Angular walks up this tree, then through the environment injectors, until something provides it. `),B(),z(2,`div`,14)(3,`div`,15)(4,`button`,9),G(`click`,function(){return O(e),k(K().setView(`element`))}),J(5,` Elements `),z(6,`span`,16),J(7),B()(),z(8,`button`,9),G(`click`,function(){return O(e),k(K().setView(`environment`))}),J(9,` Environment `),z(10,`span`,16),J(11),B()()(),z(12,`div`,17),A(),z(13,`svg`,18),V(14,`circle`,19)(15,`path`,20),B(),ps(),z(16,`input`,21,2),G(`input`,function(t){return O(e),k(K().query.set(t.target.value))})(`keydown.escape`,function(){return O(e),k(K().query.set(``))}),B()(),zg(18,22),P(19,XP,3,1,`label`,23),z(20,`label`,23)(21,`input`,24),G(`change`,function(){O(e);let t=K();return k(t.onlyProviding.set(!t.onlyProviding()))}),B(),J(22,` With providers `),B(),P(23,ZP,2,1,`span`,25),B(),P(24,QP,8,0,`p`,26),P(25,tF,6,1,`div`,27)(26,nF,4,1,`div`,28),z(27,`div`,29),P(28,oF,7,1,`div`,30),z(29,`div`,31),G(`keydown`,function(t){return O(e),k(K().onTreeKey(t))}),I(30,pF,14,19,`div`,32,VP),B(),P(32,hF,8,2,`section`,33)(33,VF,23,8,`section`,34),B()}if(e&2){let e,t,n=K(),r=n_(5);M(4),q(`active`,n.view()===`element`),N(`aria-pressed`,n.view()===`element`),M(3),Y(n.elementCount()),M(),q(`active`,n.view()===`environment`),N(`aria-pressed`,n.view()===`environment`),M(3),Y(n.environmentCount()),M(5),R(`value`,n.query()),M(2),R(`ngTemplateOutlet`,r),M(),F(n.view()===`element`?19:-1),M(2),R(`checked`,n.onlyProviding()),M(2),F((e=n.zone())?23:-1,e),M(),F(n.truncated()?24:-1),M(),F(n.providedBy().length?25:n.query().trim()&&!n.rows().length?26:-1),M(3),F(n.rows().length?-1:28),M(),R(`hidden`,!n.rows().length),N(`aria-label`,n.view()===`element`?`Element injectors`:`Environment injectors`),M(),L(n.rows()),M(2),F((t=n.gone())?32:(t=n.selected())?33:-1,t)}}function UF(e,t){e&1&&(z(0,`div`,4),V(1,`span`,93),z(2,`p`,7),J(3,`Loading dependency injection data…`),B()())}function WF(e,t){e&1&&zg(0,5),e&2&&(K(),R(`ngTemplateOutlet`,n_(3))(`ngTemplateOutletContext`,ov(2,zP)))}function GF(e,t){if(e&1&&(z(0,`div`,14),zg(1,22),B()),e&2){K(2);let e=n_(5);M(),R(`ngTemplateOutlet`,e)}}function KF(e,t){e&1&&(P(0,GF,2,1,`div`,14),z(1,`div`,30)(2,`p`,7),J(3,`No DI data found`),B(),z(4,`p`,8),J(5,` Open the app in a browser with the devtools connected to see its live injectors. No providers, injectables or inject() calls were found in the source either. `),B()()),e&2&&F(K().pageOptions().length>1?0:-1)}function qF(e,t){e&1&&zg(0,5),e&2&&(K(2),R(`ngTemplateOutlet`,n_(3))(`ngTemplateOutletContext`,ov(2,BP)))}function JF(e,t){if(e&1){let e=W();z(0,`div`,30)(1,`p`,7),J(2),B(),z(3,`p`,8),J(4,`Try part of a token name or a file path.`),B(),z(5,`button`,9),G(`click`,function(){return O(e),k(K(2).clearQuery())}),J(6,`Clear filter`),B()()}if(e&2){let e=K(2);M(2),X(`No providers match “`,e.query(),`”`)}}function YF(e,t){if(e&1&&(z(0,`span`,103),J(1),B()),e&2){let e=K().$implicit;M(),X(`providedIn: `,e.providedIn)}}function XF(e,t){if(e&1&&(z(0,`span`,105),J(1),B()),e&2){let e=K().$implicit;M(),X(`as `,e.source)}}function ZF(e,t){if(e&1&&(z(0,`li`,100)(1,`div`,101)(2,`span`,102),J(3),B(),P(4,YF,2,1,`span`,103),B(),z(5,`div`,104)(6,`span`,69),J(7),B(),P(8,XF,2,1,`span`,105),B()()),e&2){let e=t.$implicit;M(3),Y(e.token),M(),F(e.providedIn?4:-1),M(3),Z(``,e.file,`:`,e.line),M(),F(e.source!==`class`&&e.source!==`providers array`?8:-1)}}function QF(e,t){if(e&1&&(z(0,`section`,97)(1,`h2`),J(2),z(3,`span`,98),J(4),B()(),z(5,`ul`,99),I(6,ZF,9,5,`li`,100,KP),B()()),e&2){let e=t.$implicit;M(2),X(` `,e.label,` `),M(2),Y(e.items.length),M(2),L(e.items)}}function $F(e,t){if(e&1&&(z(0,`div`,96),I(1,QF,8,2,`section`,97,GP),B()),e&2){let e=K(2);M(),L(e.groupedProviders())}}function eI(e,t){if(e&1){let e=W();z(0,`div`,14)(1,`div`,17),A(),z(2,`svg`,18),V(3,`circle`,19)(4,`path`,20),B(),ps(),z(5,`input`,94,2),G(`input`,function(t){return O(e),k(K().query.set(t.target.value))})(`keydown.escape`,function(){return O(e),k(K().query.set(``))}),B()(),zg(7,22),z(8,`span`,95),J(9),B()(),P(10,qF,1,3,`ng-container`,5),z(11,`p`,26),A(),z(12,`svg`,35),V(13,`circle`,36)(14,`path`,37),B(),ps(),z(15,`span`)(16,`strong`),J(17,`DI from source scan (static analysis).`),B(),J(18,` Connect the overlay on Angular 20 or later to see the live injector tree. `),B()(),P(19,JF,7,1,`div`,30)(20,$F,3,0,`div`,96)}if(e&2){let e=K(),t=n_(5);M(5),R(`value`,e.query()),M(2),R(`ngTemplateOutlet`,t),M(2),Z(` `,e.sourceMatchCount(),` of `,e.sourceProviders().length,` `),M(),F(e.loadFailed()?10:-1),M(9),F(e.groupedProviders().length===0?19:20)}}var tI=`inj-null`,nI=12,rI=600,iI={component:`var(--accent-text)`,directive:`var(--directive)`,environment:`var(--ok-text)`,null:`var(--text-3)`};function aI(e){return e.injector.type===`element`?e.injector.component?`component`:`directive`:`environment`}function oI(e){return e.injector.type===`element`?`<${e.injector.name}>`:e.injector.name}function sI(e){return Array.isArray(e)}var cI=class e{rpc=$(null);injector=E(xs);nullId=tI;hostPage=nE();treeState=j(null);pageTitles=j({});chosenPageId=j(null);treePages=Q(()=>{let e=this.treeState();if(!e)return{};let t=e.pages&&typeof e.pages==`object`?e.pages:{};return Object.keys(t).length||this.hostPage?t:{"":e}});shownPageId=Tv({source:()=>({pages:this.treePages(),chosen:this.chosenPageId()}),computation:({pages:e,chosen:t},n)=>{let r={};for(let[t,n]of Object.entries(e))r[t]={pageId:t,reportedAt:typeof n?.reportedAt==`number`?n.reportedAt:0};return rE(r,{chosen:t,host:this.hostPage,previous:n?.value??null})}});shownPage=Q(()=>{let e=this.shownPageId();return e===null?null:this.treePages()[e]??null});roots=Q(()=>{let e=this.shownPage()?.roots;return sI(e)?e:[]});environment=Q(()=>{let e=this.shownPage()?.environment;return sI(e)?e:[]});truncated=Q(()=>this.shownPage()?.truncated===!0);zone=Q(()=>{let e=this.shownPage()?.zone;return typeof e==`string`?sD(e):null});multiPage=Q(()=>!this.hostPage&&Object.keys(this.treePages()).length>1);pageOptions=Q(()=>{if(!this.multiPage())return[];let e=this.pageTitles();return Object.keys(this.treePages()).map(t=>{let n=e[t];return{value:t,label:n?.title||n?.url||`Page ${t}`,hint:n?.url}})});pageKey=Q(()=>this.shownPageId()??``);perPage(e){let t=new Map;return Tv({source:this.pageKey,computation:(n,r)=>(r&&t.set(r.source,r.value),t.has(n)?t.get(n):e())})}sourceProviders=j([]);loaded=j(!1);treeFailed=j(!1);sourceFailed=j(!1);loadFailed=Q(()=>this.treeFailed()||this.sourceFailed());retrying=j(!1);host=E(Ml);view=j(`element`);query=j(``);queryInput=Rv(`queryInput`);onlyProviding=j(!1);componentsOnly=j(!0);collapsed=this.perPage(()=>new Set);selectedId=this.perPage(()=>null);focusId=this.perPage(()=>null);announcement=j(``);selectedLabel=this.perPage(()=>null);wasGone=!1;index=Q(()=>{let e=new Map,t=new Map,n=(r,i)=>{for(let a of r)e.set(a.injector.id,a),i&&t.set(a.injector.id,i),n(a.children,a.injector.id)};return n(this.roots(),null),n(this.environment(),null),{map:e,parents:t}});elementCount=Q(()=>this.count(this.roots()));environmentCount=Q(()=>this.count(this.environment()));visible=Q(()=>{let e=this.view()===`element`?this.roots():this.environment();this.view()===`element`&&this.componentsOnly()&&(e=this.prune(e,e=>!!e.injector.component)),this.onlyProviding()&&(e=this.prune(e,e=>e.providers.length>0));let t=this.normalizedQuery();return t&&(e=this.prune(e,e=>this.nodeMatches(e,t))),e});rows=Q(()=>{let e=[],t=this.collapsed(),n=!!this.normalizedQuery(),r=(i,a)=>{for(let o of i){let i=n||!t.has(o.injector.id);e.push({node:o,depth:a,hasChildren:o.children.length>0,expanded:i}),i&&r(o.children,a+1)}};return r(this.visible(),0),e});selected=Q(()=>{let e=this.selectedId();return e?this.index().map.get(e)??null:this.rows()[0]?.node??null});gone=Q(()=>{let e=this.selectedId();return e&&!this.index().map.has(e)?this.selectedLabel()??`The injector`:null});rovingId=Q(()=>{let e=this.rows(),t=this.focusId()??this.selected()?.injector.id;return t&&e.some(e=>e.node.injector.id===t)?t:e[0]?.node.injector.id??null});path=Q(()=>{let e=this.selected();if(!e)return[];let{map:t,parents:n}=this.index(),r=e.injector.path??[];if(!r.length){r=[e.injector.id];let t=n.get(e.injector.id);for(;t;)r.push(t),t=n.get(t);r.push(tI)}return r.map(e=>{let n=t.get(e);return{id:e,label:n?oI(n):e===tI?`Null injector`:`Not listed`,kind:n?aI(n):`null`,providers:n?.providers.length??0}})});providerHits=Q(()=>{let e=this.normalizedQuery();if(!e)return[];let t=[];for(let n of this.index().map.values()){let r=n.providers.filter(t=>t.token.toLowerCase().includes(e));r.length&&t.push({id:n.injector.id,label:oI(n),kind:aI(n),tokens:r.map(e=>e.token).join(`, `)})}return t});providedBy=Q(()=>this.providerHits().slice(0,nI));providedByMore=Q(()=>Math.max(0,this.providerHits().length-nI));groupedProviders=Q(()=>{let e=this.normalizedQuery(),t=e?this.sourceProviders().filter(t=>t.token.toLowerCase().includes(e)||t.file.toLowerCase().includes(e)):this.sourceProviders(),n=[{type:`root-provider`,label:`Root Providers (provide*)`,items:[]},{type:`injectable`,label:`Injectable Services`,items:[]},{type:`injection`,label:`inject() Calls`,items:[]},{type:`provider`,label:`Component Providers`,items:[]}];for(let e of t)n.find(t=>t.type===e.type)?.items.push(e);return n.filter(e=>e.items.length>0)});sourceMatchCount=Q(()=>this.groupedProviders().reduce((e,t)=>e+t.items.length,0));searchSummary=Q(()=>{let e=this.query().trim();if(!e)return``;let t=this.providerHits().length;return t===1?`1 injector provides “${e}”.`:t>1?`${t} injectors provide “${e}”.`:this.rows().length?`No injector provides “${e}”.`:`Nothing here matches “${e}”.`});normalizedQuery=Q(()=>this.query().trim().toLowerCase());destroyRef=E(Cs);stopTree=null;treeLoad=0;lastSearchMessage=``;constructor(){uc(e=>{let t=this.searchSummary();if(!t){this.lastSearchMessage=``;return}if(t===this.lastSearchMessage)return;let n=setTimeout(()=>{this.lastSearchMessage=t,this.announcement.set(t)},rI);e(()=>clearTimeout(n))}),uc(()=>{let e=this.rpc();e&&(this.loadInjectorTree(e),this.loadSourceProviders(e))}),uc(e=>{let t=this.rpc();if(!t||!this.multiPage())return;let n=!0,r=null;e(()=>{n=!1,r?.()}),t.scope(`pangular`).rpc.sharedState(`component-tree`).then(e=>{if(!n)return;let t=e=>{let t=e?.pages;this.pageTitles.set(t&&typeof t==`object`?t:{})};t(e.value()),r=e.on(`updated`,t)}).catch(()=>{})}),this.destroyRef.onDestroy(()=>{this.stopTree?.(),this.highlight(null)})}async retry(){let e=this.rpc();if(!e||this.retrying())return;let t=document.activeElement;this.retrying.set(!0);try{await Promise.all([this.loadInjectorTree(e),this.loadSourceProviders(e)])}finally{this.retrying.set(!1)}this.destroyRef.destroyed||Id(()=>{t?.isConnected&&document.activeElement!==document.body||this.host.nativeElement.querySelector(`.toolbar input, .toolbar button`)?.focus()},{injector:this.injector})}clearQuery(){this.query.set(``),this.queryInput()?.nativeElement.focus()}label(e){return oI(e)}kind(e){return aI(e)}tone(e){return iI[e]??iI.null}kindById(e){let t=this.index().map.get(e);return t?aI(t):`null`}labelById(e){let t=this.index().map.get(e);return t?oI(t):e===tI?`Null injector`:`not listed`}capital(e){return e.charAt(0).toUpperCase()+e.slice(1)}matches(e){let t=this.normalizedQuery();return!!t&&e.toLowerCase().includes(t)}setView(e){this.view()!==e&&(this.view.set(e),this.choose(null),this.focusId.set(null))}select(e){this.choose(e),this.focusId.set(e)}choose(e){let t=e?this.index().map.get(e):void 0;this.selectedId.set(e),this.selectedLabel.set(t?oI(t):null),this.wasGone=!1}syncGone(){let e=this.gone()!==null;if(e&&!this.wasGone){let e=`The selected injector is no longer on the page.`;this.announcement.update(t=>t===e?`${e}\u00a0`:e)}this.wasGone=e}selectPage(e){if(!e||e===this.shownPageId())return;this.chosenPageId.set(e),this.wasGone=this.gone()!==null;let t=this.pageOptions().find(t=>t.value===e)?.label??e;this.announcement.set(`Showing the injectors of ${t}.`)}notePageGone(e){let t=this.chosenPageId();if(!t||e?.[t])return;let n=this.pageOptions().find(e=>e.value===t)?.label??`The chosen page`;this.chosenPageId.set(null),this.announcement.set(`${n} closed, so this shows another page.`),this.wasGone=!0}toggle(e,t){t?.stopPropagation(),!this.normalizedQuery()&&this.collapsed.update(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}reveal(e){let t=this.index().map.get(e);if(!t)return;this.setView(t.injector.type===`element`?`element`:`environment`);let{parents:n}=this.index();this.collapsed.update(t=>{let r=new Set(t),i=n.get(e);for(;i;)r.delete(i),i=n.get(i);return r}),this.onlyProviding()&&t.providers.length===0&&this.onlyProviding.set(!1),t.injector.type===`element`&&!t.injector.component&&this.componentsOnly.set(!1),this.select(e),Id(()=>this.focusRow(e,!1),{injector:this.injector})}highlight(e){let t=this.rpc();if(!t)return;let n=e?.injector.type===`element`?e.injector.selector??null:null,r=n?{pageId:this.shownPageId()||null,selector:n}:null;t.scope(`pangular`).rpc.call(`request-page-highlight`,r).catch(()=>{})}onTreeKey(e){let t=this.rows();if(!t.length)return;let n=this.rovingId(),r=t.findIndex(e=>e.node.injector.id===n),i=Math.max(r,0),a=t[i],o=-1;switch(e.key){case`ArrowDown`:o=Math.min(i+1,t.length-1);break;case`ArrowUp`:o=Math.max(i-1,0);break;case`Home`:o=0;break;case`End`:o=t.length-1;break;case`ArrowRight`:a.hasChildren&&!a.expanded?this.toggle(a.node.injector.id):a.hasChildren&&(o=i+1);break;case`ArrowLeft`:if(a.hasChildren&&a.expanded&&!this.normalizedQuery())this.toggle(a.node.injector.id);else{let e=this.index().parents.get(a.node.injector.id);o=t.findIndex(t=>t.node.injector.id===e)}break;case`Enter`:case` `:this.select(a.node.injector.id);break;default:return}if(e.preventDefault(),o>=0){let e=t[o].node.injector.id;this.focusId.set(e),this.choose(e),queueMicrotask(()=>this.focusRow(e,!0))}}focusRow(e,t){let n=document.querySelector(`.row[data-id="${CSS.escape(e)}"]`);n&&(t&&n.focus(),n.scrollIntoView({block:`nearest`}))}clearTree(){this.stopTree?.(),this.stopTree=null}async loadInjectorTree(e){let t=++this.treeLoad;this.clearTree();let n=e.scope(`pangular`),r;try{r=await n.rpc.sharedState(`injector-tree`)}catch{t===this.treeLoad&&this.treeFailed.set(!0);return}if(this.destroyRef.destroyed||this.rpc()!==e||t!==this.treeLoad)return;this.treeFailed.set(!1);let i=e=>{let t=e&&typeof e==`object`?e:null;this.notePageGone(t?.pages),this.treeState.set(t),this.syncGone()};i(r.value()),this.clearTree(),this.stopTree=r.on(`updated`,i)}async loadSourceProviders(e){let t=e.scope(`pangular`);try{this.sourceProviders.set(await t.rpc.call(`get-providers`)),this.sourceFailed.set(!1)}catch{this.sourceProviders.set([]),this.sourceFailed.set(!0)}finally{this.loaded.set(!0)}}count(e){return e.reduce((e,t)=>e+1+this.count(t.children),0)}nodeMatches(e,t){let n=e.injector;return n.name.toLowerCase().includes(t)||!!n.component?.toLowerCase().includes(t)||!!n.directives?.some(e=>e.toLowerCase().includes(t))||e.providers.some(e=>e.token.toLowerCase().includes(t))||!!e.dependencies?.some(e=>e.token.toLowerCase().includes(t))}prune(e,t){let n=[];for(let r of e){let e=this.prune(r.children,t);(t(r)||e.length)&&n.push({...r,children:e})}return n}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-di-inspector`]],viewQuery:function(e,t){e&1&&e_(t.queryInput,RP,5),e&2&&t_()},inputs:{rpc:[1,`rpc`]},decls:11,vars:2,consts:[[`loadError`,``],[`pagePicker`,``],[`queryInput`,``],[`role`,`status`,1,`sr-only`],[`role`,`status`,1,`state`],[3,`ngTemplateOutlet`,`ngTemplateOutletContext`],[`role`,`alert`,1,`state`,`load-error`],[1,`state-title`],[1,`state-hint`],[`type`,`button`,3,`click`],[1,`page-picker`],[`id`,`di-page-label`,1,`label-key`],[`labelledBy`,`di-page-label`,3,`valueChange`,`options`,`value`],[1,`intro`],[1,`toolbar`],[`role`,`group`,`aria-label`,`Injector tree`,1,`segmented`],[1,`pill`],[1,`search`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`search-icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`type`,`search`,`placeholder`,`Find a token, component or injector…`,`aria-label`,`Find a token, component or injector`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`value`],[3,`ngTemplateOutlet`],[1,`checkbox`],[`type`,`checkbox`,3,`change`,`checked`],[1,`total`],[1,`notice`],[1,`where`],[1,`where`,`muted`],[1,`layout`],[1,`state`],[`role`,`tree`,1,`tree`,3,`keydown`,`hidden`],[`role`,`treeitem`,1,`row`,3,`selected`,`--%NS%depth`],[`aria-labelledby`,`di-detail-title`,1,`detail`,`gone`],[`aria-labelledby`,`di-detail-title`,1,`detail`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`cx`,`12`,`cy`,`12`,`r`,`9`],[`d`,`M12 11v5M12 8h.01`],[1,`where-label`],[`type`,`button`,1,`chip`],[1,`more`],[`type`,`button`,1,`chip`,3,`click`],[`aria-hidden`,`true`,1,`dot`],[1,`mono`],[1,`chip-tokens`],[`type`,`button`,1,`link`,3,`click`],[`role`,`treeitem`,1,`row`,3,`click`,`focus`,`blur`,`mouseenter`,`mouseleave`],[`aria-hidden`,`true`,1,`twisty`,3,`open`],[`aria-hidden`,`true`,1,`twisty-space`],[`aria-hidden`,`true`,1,`kind`],[1,`sr-only`],[1,`name`,`mono`],[1,`sub`],[1,`meta`],[1,`count`],[1,`count`,`provides`],[`aria-hidden`,`true`,1,`twisty`,3,`click`],[`viewBox`,`0 0 24 24`],[`d`,`m9 6 6 6-6 6`],[`d`,`M12 5v14M5 12l7 7 7-7`],[`d`,`M21 8 12 3 3 8v8l9 5 9-5z`],[1,`detail-head`],[`id`,`di-detail-title`,1,`mono`],[1,`state`,`compact`],[`type`,`button`],[1,`badge`],[`aria-label`,`Classes on this element`,1,`classes`],[1,`block`],[1,`hint`],[1,`path`],[3,`current`],[1,`providers`],[1,`empty-line`],[3,`is-component`],[1,`step`,`null`],[`type`,`button`,1,`step`],[1,`hint-inline`],[`type`,`button`,1,`step`,3,`click`],[1,`step-count`],[1,`deps`],[1,`dep`,3,`hit`],[1,`dep`],[1,`dep-main`],[1,`token`,`mono`],[1,`flag`],[1,`dep-meta`],[`type`,`button`,1,`from`],[1,`from`,`absent`],[1,`from`,`missing`],[`type`,`button`,1,`from`,3,`click`],[1,`provider`,3,`hit`],[1,`provider`],[1,`flag`,`kind-flag`],[`aria-hidden`,`true`,1,`spinner`],[`type`,`search`,`placeholder`,`Filter by token or file…`,`aria-label`,`Filter by token or file`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`value`],[`aria-live`,`polite`,1,`total`],[1,`source-providers`],[1,`provider-group`],[1,`section-count`],[`role`,`list`,1,`provider-list`],[1,`provider-card`],[1,`provider-header`],[1,`token`],[1,`provided-in`],[1,`provider-meta`],[1,`as`]],template:function(e,t){e&1&&(z(0,`p`,3),J(1),B(),tg(2,qP,7,5,`ng-template`,null,0,gv)(4,YP,1,1,`ng-template`,null,1,gv),P(6,HF,34,19)(7,UF,4,0,`div`,4)(8,WF,1,3,`ng-container`,5)(9,KF,6,1)(10,eI,21,6)),e&2&&(M(),Y(t.announcement()),M(5),F(t.roots().length>0?6:t.loaded()?t.loadFailed()&&t.sourceProviders().length===0?8:t.sourceProviders().length===0?9:10:7))},dependencies:[$y,LD],styles:[`[_nghost-%COMP%] { +}`]})},tF=[`queryInput`],nF=()=>({compact:!1}),rF=()=>({compact:!0}),iF=(e,t)=>t.node.injector.id,aF=(e,t)=>t.id,oF=(e,t)=>t.from+t.token+e,sF=(e,t)=>t.token+e,cF=(e,t)=>t.type,lF=(e,t)=>t.token+t.file+t.line;function uF(e,t){if(e&1){let e=W();z(0,`div`,6)(1,`p`,7),J(2),B(),z(3,`p`,8),J(4,` The devtools server did not answer. Check that it is still running, then retry. `),B(),z(5,`button`,9),G(`click`,function(){return O(e),k(K().retry())}),J(6),B()()}if(e&2){let e=t.compact,n=K();q(`compact`,e),M(2),X(` `,e?`Couldn't load the live injector tree`:`Couldn't load DI data`,` `),M(3),N(`aria-disabled`,n.retrying()||null),M(),X(` `,n.retrying()?`Retrying…`:`Retry`,` `)}}function dF(e,t){if(e&1){let e=W();z(0,`div`,10)(1,`span`,11),J(2,`Page`),B(),z(3,`app-select`,12),G(`valueChange`,function(t){return O(e),k(K(2).selectPage(t))}),B()()}if(e&2){let e=K(2);M(3),R(`options`,e.pageOptions())(`value`,e.shownPageId())}}function fF(e,t){e&1&&P(0,dF,4,2,`div`,10),e&2&&F(K().pageOptions().length>1?0:-1)}function pF(e,t){if(e&1){let e=W();z(0,`label`,23)(1,`input`,24),G(`change`,function(){O(e);let t=K(2);return k(t.componentsOnly.set(!t.componentsOnly()))}),B(),J(2,` Components only `),B()}if(e&2){let e=K(2);M(),R(`checked`,e.componentsOnly())}}function mF(e,t){e&1&&(z(0,`span`,25),J(1),B()),e&2&&(M(),X(`Change detection: `,t))}function hF(e,t){e&1&&(z(0,`p`,26),A(),z(1,`svg`,35),V(2,`circle`,36)(3,`path`,37),B(),ms(),z(4,`span`)(5,`strong`),J(6,`This page has more than 2000 element injectors.`),B(),J(7,` Only the first 2000 are shown, so a lookup path or a provider can point to one that is not listed. `),B()())}function gF(e,t){if(e&1){let e=W();z(0,`button`,41),G(`click`,function(){let t=O(e).$implicit;return k(K(3).reveal(t.id))}),V(1,`span`,42),z(2,`span`,43),J(3),B(),z(4,`span`,44),J(5),B()()}if(e&2){let e=t.$implicit,n=K(3);M(),j_(`background`,n.tone(e.kind)),M(2),Y(e.label),M(2),Y(e.tokens)}}function _F(e,t){e&1&&(z(0,`span`,40),J(1),B()),e&2&&(M(),X(`+`,t,` more`))}function vF(e,t){if(e&1&&(z(0,`div`,27)(1,`span`,38),J(2,`Provided by`),B(),I(3,gF,6,4,`button`,39,aF),P(5,_F,2,1,`span`,40),B()),e&2){let e,t=K(2);M(3),L(t.providedBy()),M(2),F((e=t.providedByMore())?5:-1,e)}}function yF(e,t){if(e&1){let e=W();z(0,`div`,28),J(1),z(2,`button`,45),G(`click`,function(){return O(e),k(K(2).clearQuery())}),J(3,`Clear search`),B()()}if(e&2){let e=K(2);M(),X(` Nothing here matches “`,e.query().trim(),`”. `)}}function bF(e,t){e&1&&J(0,` None of them provide anything themselves. `)}function xF(e,t){e&1&&J(0,` Turn off “Components only” to see directives. `)}function SF(e,t){e&1&&J(0,` Try a different search. `)}function CF(e,t){if(e&1&&(z(0,`div`,30)(1,`p`,7),J(2,`No injectors to show`),B(),z(3,`p`,8),P(4,bF,1,0)(5,xF,1,0)(6,SF,1,0),B()()),e&2){let e=K(2);M(4),F(e.onlyProviding()?4:e.componentsOnly()&&e.view()===`element`?5:6)}}function wF(e,t){if(e&1){let e=W();z(0,`span`,56),G(`click`,function(t){O(e);let n=K().$implicit;return k(K(2).toggle(n.node.injector.id,t))}),A(),z(1,`svg`,57),V(2,`path`,58),B()()}if(e&2){let e=K().$implicit;q(`open`,e.expanded)}}function TF(e,t){e&1&&V(0,`span`,48)}function EF(e,t){if(e&1&&(z(0,`span`,52),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.node.injector.component)}}function DF(e,t){if(e&1&&(z(0,`span`,52),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.node.injector.directives.join(`, `))}}function OF(e,t){if(e&1&&(z(0,`span`,54),A(),z(1,`svg`,35),V(2,`path`,59),B(),ms(),z(3,`span`,50),J(4,`injects`),B(),J(5),B()),e&2){let e=K().$implicit;N(`title`,e.node.dependencies.length+` injected`),M(5),X(` `,e.node.dependencies.length,` `)}}function kF(e,t){if(e&1&&(z(0,`span`,55),A(),z(1,`svg`,35),V(2,`path`,60),B(),ms(),z(3,`span`,50),J(4,`provides`),B(),J(5),B()),e&2){let e=K().$implicit;N(`title`,e.node.injector.providerCount+` provided`),M(5),X(` `,e.node.injector.providerCount,` `)}}function AF(e,t){if(e&1){let e=W();z(0,`div`,46),G(`click`,function(){let t=O(e).$implicit;return k(K(2).select(t.node.injector.id))})(`focus`,function(){let t=O(e).$implicit,n=K(2);return n.focusId.set(t.node.injector.id),k(n.highlight(t.node))})(`blur`,function(){return O(e),k(K(2).highlight(null))})(`mouseenter`,function(){let t=O(e).$implicit;return k(K(2).highlight(t.node))})(`mouseleave`,function(){return O(e),k(K(2).highlight(null))}),P(1,wF,3,2,`span`,47)(2,TF,1,0,`span`,48),z(3,`span`,49),J(4),B(),z(5,`span`,50),J(6),B(),z(7,`span`,51),J(8),B(),P(9,EF,2,1,`span`,52)(10,DF,2,1,`span`,52),z(11,`span`,53),P(12,OF,6,2,`span`,54),P(13,kF,6,2,`span`,55),B()()}if(e&2){let e=t.$implicit,n=K(2);j_(`--%NS%depth`,e.depth),q(`selected`,n.selected()?.injector?.id===e.node.injector.id),N(`aria-level`,e.depth+1)(`aria-expanded`,e.hasChildren?e.expanded:null)(`aria-selected`,n.selected()?.injector?.id===e.node.injector.id)(`tabindex`,n.rovingId()===e.node.injector.id?0:-1)(`data-id`,e.node.injector.id),M(),F(e.hasChildren?1:2),M(2),j_(`--%NS%tone`,n.tone(n.kind(e.node))),N(`title`,n.kind(e.node)),M(),Y(n.kind(e.node)[0].toUpperCase()),M(2),Y(n.kind(e.node)),M(2),Y(n.label(e.node)),M(),F(e.node.injector.component?9:e.node.injector.directives?.length?10:-1),M(3),F((e.node.dependencies?.length??0)>0?12:-1),M(),F(e.node.injector.providerCount>0?13:-1)}}function jF(e,t){if(e&1){let e=W();z(0,`button`,9),G(`click`,function(){let t=O(e);return k(K(3).reveal(t.node.injector.id))}),J(1),B()}if(e&2){let e=K(3);M(),X(` Show `,e.label(t.node),` `)}}function MF(e,t){if(e&1&&(z(0,`section`,33)(1,`header`,61)(2,`h2`,62),J(3),B()(),z(4,`div`,63)(5,`p`,8),J(6,` This injector is no longer on the page. Its component or directive was destroyed. `),B(),P(7,jF,2,1,`button`,64),B()()),e&2){let e,n=K(2);M(3),Y(t),M(4),F((e=n.rows()[0])?7:-1,e)}}function NF(e,t){if(e&1&&(z(0,`li`),J(1),B()),e&2){let e=t.$implicit;q(`is-component`,e===K(2).injector.component),M(),Y(e)}}function PF(e,t){if(e&1&&(z(0,`ul`,66),I(1,NF,2,3,`li`,73,Og),B()),e&2){let e=K();M(),L(e.injector.directives)}}function FF(e,t){if(e&1&&(z(0,`span`,74),V(1,`span`,42),J(2,` Null injector `),z(3,`span`,76),J(4,`throws NullInjectorError`),B()()),e&2){let e=K(4);M(),j_(`background`,e.tone(`null`))}}function IF(e,t){if(e&1&&(z(0,`span`,78),J(1),z(2,`span`,50),J(3),B()()),e&2){let e=K(2).$implicit;M(),X(` `,e.providers,` `),M(2),Y(e.providers===1?`provider`:`providers`)}}function LF(e,t){if(e&1){let e=W();z(0,`button`,77),G(`click`,function(){O(e);let t=K().$implicit;return k(K(3).reveal(t.id))}),V(1,`span`,42),z(2,`span`,43),J(3),B(),P(4,IF,4,2,`span`,78),B()}if(e&2){let e=K().$implicit,t=K(3);M(),j_(`background`,t.tone(e.kind)),M(2),Y(e.label),M(),F(e.providers?4:-1)}}function RF(e,t){if(e&1&&(z(0,`li`),P(1,FF,5,2,`span`,74)(2,LF,5,4,`button`,75),B()),e&2){let e=t.$implicit,n=t.$index,r=K(3);q(`current`,n===0),M(),F(e.id===r.nullId?1:2)}}function zF(e,t){e&1&&(z(0,`p`,68),J(1,`Only services this injector has already created are listed.`),B())}function BF(e,t){if(e&1&&(z(0,`span`,84),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function VF(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),X(`for `,e.from)}}function HF(e,t){if(e&1){let e=W();z(0,`button`,89),G(`click`,function(){let t=O(e);return k(K(6).reveal(t))}),V(1,`span`,42),J(2,` from `),z(3,`span`,43),J(4),B()()}if(e&2){let e=t,n=K(6);M(),j_(`background`,n.tone(n.kindById(e))),M(3),Y(n.labelById(e))}}function UF(e,t){e&1&&(z(0,`span`,87),J(1,`optional, not provided`),B())}function WF(e,t){e&1&&(z(0,`span`,88),J(1,`not provided anywhere`),B())}function GF(e,t){if(e&1&&(z(0,`li`,81)(1,`div`,82)(2,`span`,83),J(3),B(),I(4,BF,2,1,`span`,84,Og),B(),z(6,`div`,85),P(7,VF,2,1,`span`),P(8,HF,5,3,`button`,86)(9,UF,2,0,`span`,87)(10,WF,2,0,`span`,88),B()()),e&2){let e,n=t.$implicit,r=K(3);q(`hit`,K(2).matches(n.token)),M(3),Y(n.token),M(),L(n.flags),M(3),F(r.injector.type!==`element`||r.injector.directives&&r.injector.directives.length>1?7:-1),M(),F((e=n.providedBy)?8:n.flags.includes(`optional`)?9:10,e)}}function KF(e,t){if(e&1&&(z(0,`ul`,79),I(1,GF,11,5,`li`,80,oF),B()),e&2){let e=K(2);M(),L(e.dependencies)}}function qF(e,t){e&1&&(z(0,`p`,72),J(1,`Nothing is injected through the constructor or inject().`),B())}function JF(e,t){e&1&&(z(0,`p`,72),J(1,`No service created here has injected anything yet.`),B())}function YF(e,t){if(e&1&&(z(0,`div`,67)(1,`h3`),J(2),z(3,`span`,16),J(4),B()(),P(5,zF,2,0,`p`,68),P(6,KF,3,0,`ul`,79)(7,qF,2,0,`p`,72)(8,JF,2,0,`p`,72),B()),e&2){let e=K();M(2),X(` `,e.injector.type===`element`?`Injected here`:`Injected by its services`,` `),M(2),Y(e.dependencies?.length??0),M(),F(e.injector.type===`element`?-1:5),M(),F(e.dependencies?.length?6:e.injector.type===`element`?7:8)}}function XF(e,t){e&1&&(z(0,`span`,84),J(1,`viewProviders`),B())}function ZF(e,t){e&1&&(z(0,`span`,84),J(1,`multi`),B())}function QF(e,t){if(e&1&&(z(0,`div`,85),J(1),B()),e&2){let e=K().$implicit;M(),X(`via `,e.importPath.join(` › `))}}function $F(e,t){if(e&1&&(z(0,`li`,91)(1,`div`,82)(2,`span`,83),J(3),B(),z(4,`span`,92),J(5),B(),P(6,XF,2,0,`span`,84),P(7,ZF,2,0,`span`,84),B(),P(8,QF,2,1,`div`,85),B()),e&2){let e=t.$implicit,n=K(4);q(`hit`,n.matches(e.token)),M(3),Y(e.token),M(2),Y(e.type===`unknown`?`provider`:`use`+n.capital(e.type)),M(),F(e.isViewProvider?6:-1),M(),F(e.multi?7:-1),M(),F(e.importPath?.length?8:-1)}}function eI(e,t){if(e&1&&(z(0,`ul`,71),I(1,$F,9,7,`li`,90,sF),B()),e&2){let e=K();M(),L(e.providers)}}function tI(e,t){e&1&&J(0,` No providers or viewProviders on this element. `)}function nI(e,t){e&1&&J(0,` This injector has no providers of its own. `)}function rI(e,t){if(e&1&&(z(0,`p`,72),P(1,tI,1,0)(2,nI,1,0),B()),e&2){let e=K();M(),F(e.injector.type===`element`?1:2)}}function iI(e,t){if(e&1&&(z(0,`section`,34)(1,`header`,61)(2,`span`,65),J(3),B(),z(4,`h2`,62),J(5),B(),P(6,PF,3,0,`ul`,66),B(),z(7,`div`,67)(8,`h3`),J(9,`Lookup path`),B(),z(10,`p`,68),J(11,`Angular asks these injectors in order until one has the token.`),B(),z(12,`ol`,69),I(13,RF,3,3,`li`,70,aF),B()(),P(15,YF,9,4,`div`,67),z(16,`div`,67)(17,`h3`),J(18,` Provides `),z(19,`span`,16),J(20),B()(),P(21,eI,3,0,`ul`,71)(22,rI,3,1,`p`,72),B()()),e&2){let e=t,n=K(2);M(2),j_(`--%NS%tone`,n.tone(n.kind(e))),M(),Y(n.kind(e)),M(2),Y(n.label(e)),M(),F(e.injector.directives?.length?6:-1),M(7),L(n.path()),M(2),F(e.injector.type===`element`||e.dependencies?15:-1),M(5),Y(e.providers.length),M(),F(e.providers.length?21:22)}}function aI(e,t){if(e&1){let e=W();z(0,`p`,13),J(1,` Every component and directive gets an injector. When it asks for a token, Angular walks up this tree, then through the environment injectors, until something provides it. `),B(),z(2,`div`,14)(3,`div`,15)(4,`button`,9),G(`click`,function(){return O(e),k(K().setView(`element`))}),J(5,` Elements `),z(6,`span`,16),J(7),B()(),z(8,`button`,9),G(`click`,function(){return O(e),k(K().setView(`environment`))}),J(9,` Environment `),z(10,`span`,16),J(11),B()()(),z(12,`div`,17),A(),z(13,`svg`,18),V(14,`circle`,19)(15,`path`,20),B(),ms(),z(16,`input`,21,2),G(`input`,function(t){return O(e),k(K().query.set(t.target.value))})(`keydown.escape`,function(){return O(e),k(K().query.set(``))}),B()(),Ug(18,22),P(19,pF,3,1,`label`,23),z(20,`label`,23)(21,`input`,24),G(`change`,function(){O(e);let t=K();return k(t.onlyProviding.set(!t.onlyProviding()))}),B(),J(22,` With providers `),B(),P(23,mF,2,1,`span`,25),B(),P(24,hF,8,0,`p`,26),P(25,vF,6,1,`div`,27)(26,yF,4,1,`div`,28),z(27,`div`,29),P(28,CF,7,1,`div`,30),z(29,`div`,31),G(`keydown`,function(t){return O(e),k(K().onTreeKey(t))}),I(30,AF,14,19,`div`,32,iF),B(),P(32,MF,8,2,`section`,33)(33,iI,23,8,`section`,34),B()}if(e&2){let e,t,n=K(),r=u_(5);M(4),q(`active`,n.view()===`element`),N(`aria-pressed`,n.view()===`element`),M(3),Y(n.elementCount()),M(),q(`active`,n.view()===`environment`),N(`aria-pressed`,n.view()===`environment`),M(3),Y(n.environmentCount()),M(5),R(`value`,n.query()),M(2),R(`ngTemplateOutlet`,r),M(),F(n.view()===`element`?19:-1),M(2),R(`checked`,n.onlyProviding()),M(2),F((e=n.zone())?23:-1,e),M(),F(n.truncated()?24:-1),M(),F(n.providedBy().length?25:n.query().trim()&&!n.rows().length?26:-1),M(3),F(n.rows().length?-1:28),M(),R(`hidden`,!n.rows().length),N(`aria-label`,n.view()===`element`?`Element injectors`:`Environment injectors`),M(),L(n.rows()),M(2),F((t=n.gone())?32:(t=n.selected())?33:-1,t)}}function oI(e,t){e&1&&(z(0,`div`,4),V(1,`span`,93),z(2,`p`,7),J(3,`Loading dependency injection data…`),B()())}function sI(e,t){e&1&&Ug(0,5),e&2&&(K(),R(`ngTemplateOutlet`,u_(3))(`ngTemplateOutletContext`,mv(2,nF)))}function cI(e,t){if(e&1&&(z(0,`div`,14),Ug(1,22),B()),e&2){K(2);let e=u_(5);M(),R(`ngTemplateOutlet`,e)}}function lI(e,t){e&1&&(P(0,cI,2,1,`div`,14),z(1,`div`,30)(2,`p`,7),J(3,`No DI data found`),B(),z(4,`p`,8),J(5,` Open the app in a browser with the devtools connected to see its live injectors. No providers, injectables or inject() calls were found in the source either. `),B()()),e&2&&F(K().pageOptions().length>1?0:-1)}function uI(e,t){e&1&&Ug(0,5),e&2&&(K(2),R(`ngTemplateOutlet`,u_(3))(`ngTemplateOutletContext`,mv(2,rF)))}function dI(e,t){if(e&1){let e=W();z(0,`div`,30)(1,`p`,7),J(2),B(),z(3,`p`,8),J(4,`Try part of a token name or a file path.`),B(),z(5,`button`,9),G(`click`,function(){return O(e),k(K(2).clearQuery())}),J(6,`Clear filter`),B()()}if(e&2){let e=K(2);M(2),X(`No providers match “`,e.query(),`”`)}}function fI(e,t){if(e&1&&(z(0,`span`,103),J(1),B()),e&2){let e=K().$implicit;M(),X(`providedIn: `,e.providedIn)}}function pI(e,t){if(e&1&&(z(0,`span`,106),J(1),B()),e&2){let e=K().$implicit;M(),X(`as `,e.source)}}function mI(e,t){if(e&1&&(z(0,`li`,100)(1,`div`,101)(2,`span`,102),J(3),B(),P(4,fI,2,1,`span`,103),B(),z(5,`div`,104),V(6,`app-source-link`,105),P(7,pI,2,1,`span`,106),B()()),e&2){let e=t.$implicit;M(3),Y(e.token),M(),F(e.providedIn?4:-1),M(2),R(`file`,e.file)(`line`,e.line),M(),F(e.source!==`class`&&e.source!==`providers array`?7:-1)}}function hI(e,t){if(e&1&&(z(0,`section`,97)(1,`h2`),J(2),z(3,`span`,98),J(4),B()(),z(5,`ul`,99),I(6,mI,8,5,`li`,100,lF),B()()),e&2){let e=t.$implicit;M(2),X(` `,e.label,` `),M(2),Y(e.items.length),M(2),L(e.items)}}function gI(e,t){if(e&1&&(z(0,`div`,96),I(1,hI,8,2,`section`,97,cF),B()),e&2){let e=K(2);M(),L(e.groupedProviders())}}function _I(e,t){if(e&1){let e=W();z(0,`div`,14)(1,`div`,17),A(),z(2,`svg`,18),V(3,`circle`,19)(4,`path`,20),B(),ms(),z(5,`input`,94,2),G(`input`,function(t){return O(e),k(K().query.set(t.target.value))})(`keydown.escape`,function(){return O(e),k(K().query.set(``))}),B()(),Ug(7,22),z(8,`span`,95),J(9),B()(),P(10,uI,1,3,`ng-container`,5),z(11,`p`,26),A(),z(12,`svg`,35),V(13,`circle`,36)(14,`path`,37),B(),ms(),z(15,`span`)(16,`strong`),J(17,`DI from source scan (static analysis).`),B(),J(18,` Connect the overlay on Angular 20 or later to see the live injector tree. `),B()(),P(19,dI,7,1,`div`,30)(20,gI,3,0,`div`,96)}if(e&2){let e=K(),t=u_(5);M(5),R(`value`,e.query()),M(2),R(`ngTemplateOutlet`,t),M(2),Z(` `,e.sourceMatchCount(),` of `,e.sourceProviders().length,` `),M(),F(e.loadFailed()?10:-1),M(9),F(e.groupedProviders().length===0?19:20)}}var vI=`inj-null`,yI=12,bI=600,xI={component:`var(--accent-text)`,directive:`var(--directive)`,environment:`var(--ok-text)`,null:`var(--text-3)`};function SI(e){return e.injector.type===`element`?e.injector.component?`component`:`directive`:`environment`}function CI(e){return e.injector.type===`element`?`<${e.injector.name}>`:e.injector.name}function wI(e){return Array.isArray(e)}var TI=class e{rpc=$(null);injector=E(Ss);nullId=vI;hostPage=uE();treeState=j(null);pageTitles=j({});chosenPageId=j(null);treePages=Q(()=>{let e=this.treeState();if(!e)return{};let t=e.pages&&typeof e.pages==`object`?e.pages:{};return Object.keys(t).length||this.hostPage?t:{"":e}});shownPageId=Nv({source:()=>({pages:this.treePages(),chosen:this.chosenPageId()}),computation:({pages:e,chosen:t},n)=>{let r={};for(let[t,n]of Object.entries(e))r[t]={pageId:t,reportedAt:typeof n?.reportedAt==`number`?n.reportedAt:0};return dE(r,{chosen:t,host:this.hostPage,previous:n?.value??null})}});shownPage=Q(()=>{let e=this.shownPageId();return e===null?null:this.treePages()[e]??null});roots=Q(()=>{let e=this.shownPage()?.roots;return wI(e)?e:[]});environment=Q(()=>{let e=this.shownPage()?.environment;return wI(e)?e:[]});truncated=Q(()=>this.shownPage()?.truncated===!0);zone=Q(()=>{let e=this.shownPage()?.zone;return typeof e==`string`?hD(e):null});multiPage=Q(()=>!this.hostPage&&Object.keys(this.treePages()).length>1);pageOptions=Q(()=>{if(!this.multiPage())return[];let e=this.pageTitles();return Object.keys(this.treePages()).map(t=>{let n=e[t];return{value:t,label:n?.title||n?.url||`Page ${t}`,hint:n?.url}})});pageKey=Q(()=>this.shownPageId()??``);perPage(e){let t=new Map;return Nv({source:this.pageKey,computation:(n,r)=>(r&&t.set(r.source,r.value),t.has(n)?t.get(n):e())})}sourceProviders=j([]);loaded=j(!1);treeFailed=j(!1);sourceFailed=j(!1);loadFailed=Q(()=>this.treeFailed()||this.sourceFailed());retrying=j(!1);host=E(Nl);view=j(`element`);query=j(``);queryInput=Kv(`queryInput`);onlyProviding=j(!1);componentsOnly=j(!0);collapsed=this.perPage(()=>new Set);selectedId=this.perPage(()=>null);focusId=this.perPage(()=>null);announcement=j(``);selectedLabel=this.perPage(()=>null);wasGone=!1;index=Q(()=>{let e=new Map,t=new Map,n=(r,i)=>{for(let a of r)e.set(a.injector.id,a),i&&t.set(a.injector.id,i),n(a.children,a.injector.id)};return n(this.roots(),null),n(this.environment(),null),{map:e,parents:t}});elementCount=Q(()=>this.count(this.roots()));environmentCount=Q(()=>this.count(this.environment()));visible=Q(()=>{let e=this.view()===`element`?this.roots():this.environment();this.view()===`element`&&this.componentsOnly()&&(e=this.prune(e,e=>!!e.injector.component)),this.onlyProviding()&&(e=this.prune(e,e=>e.providers.length>0));let t=this.normalizedQuery();return t&&(e=this.prune(e,e=>this.nodeMatches(e,t))),e});rows=Q(()=>{let e=[],t=this.collapsed(),n=!!this.normalizedQuery(),r=(i,a)=>{for(let o of i){let i=n||!t.has(o.injector.id);e.push({node:o,depth:a,hasChildren:o.children.length>0,expanded:i}),i&&r(o.children,a+1)}};return r(this.visible(),0),e});selected=Q(()=>{let e=this.selectedId();return e?this.index().map.get(e)??null:this.rows()[0]?.node??null});gone=Q(()=>{let e=this.selectedId();return e&&!this.index().map.has(e)?this.selectedLabel()??`The injector`:null});rovingId=Q(()=>{let e=this.rows(),t=this.focusId()??this.selected()?.injector.id;return t&&e.some(e=>e.node.injector.id===t)?t:e[0]?.node.injector.id??null});path=Q(()=>{let e=this.selected();if(!e)return[];let{map:t,parents:n}=this.index(),r=e.injector.path??[];if(!r.length){r=[e.injector.id];let t=n.get(e.injector.id);for(;t;)r.push(t),t=n.get(t);r.push(vI)}return r.map(e=>{let n=t.get(e);return{id:e,label:n?CI(n):e===vI?`Null injector`:`Not listed`,kind:n?SI(n):`null`,providers:n?.providers.length??0}})});providerHits=Q(()=>{let e=this.normalizedQuery();if(!e)return[];let t=[];for(let n of this.index().map.values()){let r=n.providers.filter(t=>t.token.toLowerCase().includes(e));r.length&&t.push({id:n.injector.id,label:CI(n),kind:SI(n),tokens:r.map(e=>e.token).join(`, `)})}return t});providedBy=Q(()=>this.providerHits().slice(0,yI));providedByMore=Q(()=>Math.max(0,this.providerHits().length-yI));groupedProviders=Q(()=>{let e=this.normalizedQuery(),t=e?this.sourceProviders().filter(t=>t.token.toLowerCase().includes(e)||t.file.toLowerCase().includes(e)):this.sourceProviders(),n=[{type:`root-provider`,label:`Root Providers (provide*)`,items:[]},{type:`injectable`,label:`Injectable Services`,items:[]},{type:`injection`,label:`inject() Calls`,items:[]},{type:`provider`,label:`Component Providers`,items:[]}];for(let e of t)n.find(t=>t.type===e.type)?.items.push(e);return n.filter(e=>e.items.length>0)});sourceMatchCount=Q(()=>this.groupedProviders().reduce((e,t)=>e+t.items.length,0));searchSummary=Q(()=>{let e=this.query().trim();if(!e)return``;let t=this.providerHits().length;return t===1?`1 injector provides “${e}”.`:t>1?`${t} injectors provide “${e}”.`:this.rows().length?`No injector provides “${e}”.`:`Nothing here matches “${e}”.`});normalizedQuery=Q(()=>this.query().trim().toLowerCase());destroyRef=E(ws);stopTree=null;treeLoad=0;lastSearchMessage=``;constructor(){dc(e=>{let t=this.searchSummary();if(!t){this.lastSearchMessage=``;return}if(t===this.lastSearchMessage)return;let n=setTimeout(()=>{this.lastSearchMessage=t,this.announcement.set(t)},bI);e(()=>clearTimeout(n))}),dc(()=>{let e=this.rpc();e&&(this.loadInjectorTree(e),this.loadSourceProviders(e))}),dc(e=>{let t=this.rpc();if(!t||!this.multiPage())return;let n=!0,r=null;e(()=>{n=!1,r?.()}),t.scope(`pangular`).rpc.sharedState(`component-tree`).then(e=>{if(!n)return;let t=e=>{let t=e?.pages;this.pageTitles.set(t&&typeof t==`object`?t:{})};t(e.value()),r=e.on(`updated`,t)}).catch(()=>{})}),this.destroyRef.onDestroy(()=>{this.stopTree?.(),this.highlight(null)})}async retry(){let e=this.rpc();if(!e||this.retrying())return;let t=document.activeElement;this.retrying.set(!0);try{await Promise.all([this.loadInjectorTree(e),this.loadSourceProviders(e)])}finally{this.retrying.set(!1)}this.destroyRef.destroyed||zd(()=>{t?.isConnected&&document.activeElement!==document.body||this.host.nativeElement.querySelector(`.toolbar input, .toolbar button`)?.focus()},{injector:this.injector})}clearQuery(){this.query.set(``),this.queryInput()?.nativeElement.focus()}label(e){return CI(e)}kind(e){return SI(e)}tone(e){return xI[e]??xI.null}kindById(e){let t=this.index().map.get(e);return t?SI(t):`null`}labelById(e){let t=this.index().map.get(e);return t?CI(t):e===vI?`Null injector`:`not listed`}capital(e){return e.charAt(0).toUpperCase()+e.slice(1)}matches(e){let t=this.normalizedQuery();return!!t&&e.toLowerCase().includes(t)}setView(e){this.view()!==e&&(this.view.set(e),this.choose(null),this.focusId.set(null))}select(e){this.choose(e),this.focusId.set(e)}choose(e){let t=e?this.index().map.get(e):void 0;this.selectedId.set(e),this.selectedLabel.set(t?CI(t):null),this.wasGone=!1}syncGone(){let e=this.gone()!==null;if(e&&!this.wasGone){let e=`The selected injector is no longer on the page.`;this.announcement.update(t=>t===e?`${e}\u00a0`:e)}this.wasGone=e}selectPage(e){if(!e||e===this.shownPageId())return;this.chosenPageId.set(e),this.wasGone=this.gone()!==null;let t=this.pageOptions().find(t=>t.value===e)?.label??e;this.announcement.set(`Showing the injectors of ${t}.`)}notePageGone(e){let t=this.chosenPageId();if(!t||e?.[t])return;let n=this.pageOptions().find(e=>e.value===t)?.label??`The chosen page`;this.chosenPageId.set(null),this.announcement.set(`${n} closed, so this shows another page.`),this.wasGone=!0}toggle(e,t){t?.stopPropagation(),!this.normalizedQuery()&&this.collapsed.update(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}reveal(e){let t=this.index().map.get(e);if(!t)return;this.setView(t.injector.type===`element`?`element`:`environment`);let{parents:n}=this.index();this.collapsed.update(t=>{let r=new Set(t),i=n.get(e);for(;i;)r.delete(i),i=n.get(i);return r}),this.onlyProviding()&&t.providers.length===0&&this.onlyProviding.set(!1),t.injector.type===`element`&&!t.injector.component&&this.componentsOnly.set(!1),this.select(e),zd(()=>this.focusRow(e,!1),{injector:this.injector})}highlight(e){let t=this.rpc();if(!t)return;let n=e?.injector.type===`element`?e.injector.selector??null:null,r=n?{pageId:this.shownPageId()||null,selector:n}:null;t.scope(`pangular`).rpc.call(`request-page-highlight`,r).catch(()=>{})}onTreeKey(e){let t=this.rows();if(!t.length)return;let n=this.rovingId(),r=t.findIndex(e=>e.node.injector.id===n),i=Math.max(r,0),a=t[i],o=-1;switch(e.key){case`ArrowDown`:o=Math.min(i+1,t.length-1);break;case`ArrowUp`:o=Math.max(i-1,0);break;case`Home`:o=0;break;case`End`:o=t.length-1;break;case`ArrowRight`:a.hasChildren&&!a.expanded?this.toggle(a.node.injector.id):a.hasChildren&&(o=i+1);break;case`ArrowLeft`:if(a.hasChildren&&a.expanded&&!this.normalizedQuery())this.toggle(a.node.injector.id);else{let e=this.index().parents.get(a.node.injector.id);o=t.findIndex(t=>t.node.injector.id===e)}break;case`Enter`:case` `:this.select(a.node.injector.id);break;default:return}if(e.preventDefault(),o>=0){let e=t[o].node.injector.id;this.focusId.set(e),this.choose(e),queueMicrotask(()=>this.focusRow(e,!0))}}focusRow(e,t){let n=document.querySelector(`.row[data-id="${CSS.escape(e)}"]`);n&&(t&&n.focus(),n.scrollIntoView({block:`nearest`}))}clearTree(){this.stopTree?.(),this.stopTree=null}async loadInjectorTree(e){let t=++this.treeLoad;this.clearTree();let n=e.scope(`pangular`),r;try{r=await n.rpc.sharedState(`injector-tree`)}catch{t===this.treeLoad&&this.treeFailed.set(!0);return}if(this.destroyRef.destroyed||this.rpc()!==e||t!==this.treeLoad)return;this.treeFailed.set(!1);let i=e=>{let t=e&&typeof e==`object`?e:null;this.notePageGone(t?.pages),this.treeState.set(t),this.syncGone()};i(r.value()),this.clearTree(),this.stopTree=r.on(`updated`,i)}async loadSourceProviders(e){let t=e.scope(`pangular`);try{this.sourceProviders.set(await t.rpc.call(`get-providers`)),this.sourceFailed.set(!1)}catch{this.sourceProviders.set([]),this.sourceFailed.set(!0)}finally{this.loaded.set(!0)}}count(e){return e.reduce((e,t)=>e+1+this.count(t.children),0)}nodeMatches(e,t){let n=e.injector;return n.name.toLowerCase().includes(t)||!!n.component?.toLowerCase().includes(t)||!!n.directives?.some(e=>e.toLowerCase().includes(t))||e.providers.some(e=>e.token.toLowerCase().includes(t))||!!e.dependencies?.some(e=>e.token.toLowerCase().includes(t))}prune(e,t){let n=[];for(let r of e){let e=this.prune(r.children,t);(t(r)||e.length)&&n.push({...r,children:e})}return n}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-di-inspector`]],viewQuery:function(e,t){e&1&&c_(t.queryInput,tF,5),e&2&&l_()},inputs:{rpc:[1,`rpc`]},decls:11,vars:2,consts:[[`loadError`,``],[`pagePicker`,``],[`queryInput`,``],[`role`,`status`,1,`sr-only`],[`role`,`status`,1,`state`],[3,`ngTemplateOutlet`,`ngTemplateOutletContext`],[`role`,`alert`,1,`state`,`load-error`],[1,`state-title`],[1,`state-hint`],[`type`,`button`,3,`click`],[1,`page-picker`],[`id`,`di-page-label`,1,`label-key`],[`labelledBy`,`di-page-label`,3,`valueChange`,`options`,`value`],[1,`intro`],[1,`toolbar`],[`role`,`group`,`aria-label`,`Injector tree`,1,`segmented`],[1,`pill`],[1,`search`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`search-icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`type`,`search`,`placeholder`,`Find a token, component or injector…`,`aria-label`,`Find a token, component or injector`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`value`],[3,`ngTemplateOutlet`],[1,`checkbox`],[`type`,`checkbox`,3,`change`,`checked`],[1,`total`],[1,`notice`],[1,`where`],[1,`where`,`muted`],[1,`layout`],[1,`state`],[`role`,`tree`,1,`tree`,3,`keydown`,`hidden`],[`role`,`treeitem`,1,`row`,3,`selected`,`--%NS%depth`],[`aria-labelledby`,`di-detail-title`,1,`detail`,`gone`],[`aria-labelledby`,`di-detail-title`,1,`detail`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`cx`,`12`,`cy`,`12`,`r`,`9`],[`d`,`M12 11v5M12 8h.01`],[1,`where-label`],[`type`,`button`,1,`chip`],[1,`more`],[`type`,`button`,1,`chip`,3,`click`],[`aria-hidden`,`true`,1,`dot`],[1,`mono`],[1,`chip-tokens`],[`type`,`button`,1,`link`,3,`click`],[`role`,`treeitem`,1,`row`,3,`click`,`focus`,`blur`,`mouseenter`,`mouseleave`],[`aria-hidden`,`true`,1,`twisty`,3,`open`],[`aria-hidden`,`true`,1,`twisty-space`],[`aria-hidden`,`true`,1,`kind`],[1,`sr-only`],[1,`name`,`mono`],[1,`sub`],[1,`meta`],[1,`count`],[1,`count`,`provides`],[`aria-hidden`,`true`,1,`twisty`,3,`click`],[`viewBox`,`0 0 24 24`],[`d`,`m9 6 6 6-6 6`],[`d`,`M12 5v14M5 12l7 7 7-7`],[`d`,`M21 8 12 3 3 8v8l9 5 9-5z`],[1,`detail-head`],[`id`,`di-detail-title`,1,`mono`],[1,`state`,`compact`],[`type`,`button`],[1,`badge`],[`aria-label`,`Classes on this element`,1,`classes`],[1,`block`],[1,`hint`],[1,`path`],[3,`current`],[1,`providers`],[1,`empty-line`],[3,`is-component`],[1,`step`,`null`],[`type`,`button`,1,`step`],[1,`hint-inline`],[`type`,`button`,1,`step`,3,`click`],[1,`step-count`],[1,`deps`],[1,`dep`,3,`hit`],[1,`dep`],[1,`dep-main`],[1,`token`,`mono`],[1,`flag`],[1,`dep-meta`],[`type`,`button`,1,`from`],[1,`from`,`absent`],[1,`from`,`missing`],[`type`,`button`,1,`from`,3,`click`],[1,`provider`,3,`hit`],[1,`provider`],[1,`flag`,`kind-flag`],[`aria-hidden`,`true`,1,`spinner`],[`type`,`search`,`placeholder`,`Filter by token or file…`,`aria-label`,`Filter by token or file`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`value`],[`aria-live`,`polite`,1,`total`],[1,`source-providers`],[1,`provider-group`],[1,`section-count`],[`role`,`list`,1,`provider-list`],[1,`provider-card`],[1,`provider-header`],[1,`token`],[1,`provided-in`],[1,`provider-meta`],[1,`path`,3,`file`,`line`],[1,`as`]],template:function(e,t){e&1&&(z(0,`p`,3),J(1),B(),ag(2,uF,7,5,`ng-template`,null,0,wv)(4,fF,1,1,`ng-template`,null,1,wv),P(6,aI,34,19)(7,oI,4,0,`div`,4)(8,sI,1,3,`ng-container`,5)(9,lI,6,1)(10,_I,21,6)),e&2&&(M(),Y(t.announcement()),M(5),F(t.roots().length>0?6:t.loaded()?t.loadFailed()&&t.sourceProviders().length===0?8:t.sourceProviders().length===0?9:10:7))},dependencies:[sb,GD,wO],styles:[`[_nghost-%COMP%] { --%NS%directive: #7cb4ff; display: block; color: var(--%NS%text); @@ -5994,11 +6029,11 @@ button[_ngcontent-%COMP%] { .provider-meta[_ngcontent-%COMP%] .as[_ngcontent-%COMP%] { color: var(--%NS%text-2); -}`]})},lI=1e3;function uI(e){return`${e>=1e3?`${lI}+`:String(e)} more ${e===1?`change`:`changes`} not shown`}function dI(e){let t=e.diffTruncated??0,n=e.diff.length+t;return n===0?`no change`:`${t>=1e3?`${n}+`:String(n)} ${n===1?`change`:`changes`}`}function fI(e,t){if(e.pageId!==t.pageId)return!1;let n=e.log.at(-1);if(!n)return!0;let r=t.log.at(-1);if(!r||r.seqe.seq===n.seq);return!i||i.timestamp===n.timestamp}var pI=`@type`,mI=new Set([`undefined`,`number`,`bigint`,`symbol`,`function`,`Date`,`RegExp`,`Error`,`Element`,`Map`,`Set`]);function hI(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&pI in e&&mI.has(e[pI])}function gI(e){return/^[A-Za-z_$][\w$]*$/.test(e)?e:JSON.stringify(e)}function _I(e,t=``){if(e===null)return`null`;if(typeof e==`string`)return JSON.stringify(e);if(typeof e!=`object`)return String(e);let n=t+` `;if(Array.isArray(e))return e.length?`[\n${e.map(e=>n+_I(e,n)).join(`, -`)}\n${t}]`:`[]`;if(hI(e)){let r=e;switch(r[pI]){case`undefined`:return`undefined`;case`Date`:return`Date(${r.value})`;case`bigint`:return`${r.value}n`;case`symbol`:return`Symbol(${r.value})`;case`function`:return`ƒ ${r.name}()`;case`Error`:return`${r.name??`Error`}: ${r.message}`;case`Element`:return`<${r.value}>`;case`Map`:{let e=r.entries??[];if(!e.length)return`Map(${r.size}) {}`;let i=e.map(([e,t])=>`${n}${_I(e,n)} => ${_I(t,n)}`);return`Map(${r.size}) {\n${i.join(`, -`)}\n${t}}`}case`Set`:{let e=r.values??[];return e.length?`Set(${r.size}) {\n${e.map(e=>n+_I(e,n)).join(`, -`)}\n${t}}`:`Set(${r.size}) {}`}default:return String(r.value??r[pI])}}let r=Object.entries(e);return r.length?`{\n${r.map(([e,t])=>`${n}${gI(e)}: ${_I(t,n)}`).join(`, -`)}\n${t}}`:`{}`}function vI(e,t=120){let n=_I(e).replace(/\s*\n\s*/g,` `);return n.length>t?`${n.slice(0,t-1)}…`:n}var yI=[`eventDetailHeading`],bI=[`cancelButton`],xI=[`restoreButton`],SI=[`stateTree`],CI=[`filterInput`],wI=[`latestButton`],TI=e=>({selected:e,headingLevel:5,idPrefix:`ngrx-change`}),EI=e=>({selected:e,headingLevel:3,idPrefix:`ngrx-event`}),DI=(e,t)=>t.id,OI=(e,t)=>t.seq,kI=(e,t)=>t.key,AI=(e,t)=>t.name,jI=(e,t)=>t.idsKey,MI=(e,t)=>t.path,NI=(e,t)=>t.kind,PI=(e,t)=>t.name+t.file+t.line;function FI(e,t){if(e&1){let e=W();z(0,`span`,25),J(1,`Page`),B(),z(2,`app-select`,26),G(`valueChange`,function(t){return O(e),k(K().selectPage(t))}),B()}if(e&2){let e=K();M(2),R(`options`,e.pageOptions())(`value`,e.page()?.pageId??null)}}function II(e,t){if(e&1&&(z(0,`span`,14),J(1),B()),e&2){let e=K();M(),Y(e.liveStores().length)}}function LI(e,t){if(e&1){let e=W();z(0,`div`,15)(1,`p`,27),J(2,`Could not load the live store state.`),B(),z(3,`p`,28),J(4,`Check that the dev server with Pangular Inspector is still running.`),B(),z(5,`button`,29),G(`click`,function(){return O(e),k(K().retry())}),J(6,`Retry`),B()()}}function RI(e,t){e&1&&(z(0,`div`,16)(1,`p`,27),J(2,`Loading…`),B()())}function zI(e,t){e&1&&(z(0,`div`,17)(1,`p`,27),J(2,`No page is reporting NgRx state yet.`),B(),z(3,`p`,28),J(4,` Open the app in a browser. Stores show up here as soon as the page creates them. `),B()())}function BI(e,t){e&1&&(z(0,`p`,27),J(1,`No signal store instance on this page yet.`),B(),z(2,`p`,28),J(3,` A `),z(4,`code`),J(5,`signalStore`),B(),J(6,` is created the first time something injects it. Navigate to a page that uses the store and it appears here. `),B())}function VI(e,t){e&1&&(z(0,`p`,27),J(1,`The @ngrx/store Store was not found on this page.`),B(),z(2,`p`,28),J(3,` Check that `),z(4,`code`),J(5,`provideStore()`),B(),J(6,` or `),z(7,`code`),J(8,`StoreModule.forRoot()`),B(),J(9,` is part of the providers of the running app. `),B())}function HI(e,t){e&1&&(z(0,`p`,27),J(1,`This page has no NgRx store.`),B(),z(2,`p`,28),J(3,` Stores from `),z(4,`code`),J(5,`@ngrx/signals`),B(),J(6,` (`),z(7,`code`),J(8,`signalStore`),B(),J(9,`, `),z(10,`code`),J(11,`signalState`),B(),J(12,`) and `),z(13,`code`),J(14,`@ngrx/store`),B(),J(15,` are listed here once the app creates them. `),B())}function UI(e,t){if(e&1&&(z(0,`div`,17),P(1,BI,7,0)(2,VI,10,0)(3,HI,16,0),B()),e&2){let e=K();M(),F(e.usesSignals()?1:e.usesClassic()?2:3)}}function WI(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,33),G(`click`,function(){let t=O(e).$implicit;return k(K(2).selectStore(t.id))}),z(2,`span`,34),V(3,`span`,35),z(4,`span`,36),J(5),B()(),z(6,`span`,37),J(7),B()()()}if(e&2){let e=t.$implicit,n=K(2);M(),q(`selected`,e.id===n.store()?.id),N(`aria-pressed`,e.id===n.store()?.id),M(2),C_(`background`,n.kindColor(e.kind)),M(2),Y(e.label),M(2),X_(` `,n.kindLabel(e.kind),` · `,e.scope,` · `,n.changeCount(e.id),` `,n.changeCount(e.id)===1?`change`:`changes`,` `)}}function GI(e,t){e&1&&(z(0,`li`,31),J(1,`No stores match this filter.`),B())}function KI(e,t){if(e&1&&(z(0,`span`,41),J(1),B()),e&2){let e=t;R(`title`,e),M(),Y(e)}}function qI(e,t){if(e&1&&(z(0,`span`,40),J(1),B()),e&2){let e=K();M(),Y(e.classic.devtools?`Store DevTools on`:`Store DevTools off`)}}function JI(e,t){if(e&1&&(z(0,`code`),J(1),B(),J(2)),e&2){let e=t.$implicit,n=t.$index,r=t.$count;M(),Y(e),M(),X(``,n===r-1?``:`, `,` `)}}function YI(e,t){if(e&1&&(z(0,`p`,42),J(1,` Referenced by `),I(2,JI,3,2,null,null,wg),B()),e&2){let e=K();M(2),L(e.signal.references)}}function XI(e,t){if(e&1&&(z(0,`p`,58),J(1),B()),e&2){let e=K(4);M(),Y(e.restoreOff)}}function ZI(e,t){if(e&1){let e=W();z(0,`div`,43)(1,`p`)(2,`strong`),J(3,`Viewing a past state.`),B(),J(4,` New actions are logged but do not change the state until you go back to the latest state. `),B(),z(5,`button`,57,3),G(`click`,function(){return O(e),k(K(3).backToLatest())}),J(7,` Back to latest `),B(),P(8,XI,2,1,`p`,58),B()}if(e&2){let e=K(3);M(5),R(`disabled`,e.busy()||!e.canRestore()),N(`aria-describedby`,e.canRestore()?null:`store-latest-off`),M(3),F(e.canRestore()?-1:8)}}function QI(e,t){if(e&1&&(z(0,`dt`),J(1),B(),z(2,`dd`)(3,`code`,66),J(4),B()()),e&2){let e=t.$implicit;M(),Y(e.key),M(2),R(`title`,e.full),M(),Y(e.value)}}function $I(e,t){if(e&1&&(z(0,`dl`,61),I(1,QI,5,3,null,null,kI),B()),e&2){let e=K(4);M(),L(e.computedEntries())}}function eL(e,t){e&1&&(z(0,`p`,62),J(1,`No computed signals.`),B())}function tL(e,t){e&1&&(z(0,`span`,68),J(1,`signalMethod`),B())}function nL(e,t){e&1&&(z(0,`span`,68),J(1,`rxMethod`),B())}function rL(e,t){if(e&1&&(z(0,`li`,67),J(1),P(2,tL,2,0,`span`,68)(3,nL,2,0,`span`,68),z(4,`span`,69),J(5),B()()),e&2){let e=t.$implicit,n=K(5);M(),X(` `,e.name,` `),M(),F(e.signalMethod?2:e.rx?3:-1),M(3),Y_(``,e.calls,` `,e.calls===1?`call`:`calls`,``,n.methodDuration(e))}}function iL(e,t){if(e&1&&(z(0,`ul`,64),I(1,rL,6,5,`li`,67,AI),B()),e&2){let e=K();M(),L(e.methods)}}function aL(e,t){e&1&&(z(0,`p`,62),J(1,`No methods.`),B())}function oL(e,t){if(e&1&&(z(0,`li`,67),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function sL(e,t){if(e&1&&(z(0,`li`,76),J(1),B()),e&2){let e=K().$implicit;R(`title`,K(5).entityOverflowTitle(e.ids,e.count)),M(),X(` +`,e.count-30,` more `)}}function cL(e,t){if(e&1&&(z(0,`code`,66),J(1),B()),e&2){let e=K(2).$implicit,t=K(5);R(`title`,t.prettyText(e.selected)),M(),Y(t.shortText(e.selected))}}function lL(e,t){e&1&&(z(0,`span`,62),J(1,`None selected`),B())}function uL(e,t){if(e&1&&(z(0,`dl`,61)(1,`dt`),J(2,`Selected`),B(),z(3,`dd`),P(4,cL,2,2,`code`,66)(5,lL,2,0,`span`,62),B()()),e&2){let e=K().$implicit;M(4),F(e.selected===void 0?5:4)}}function dL(e,t){if(e&1&&(z(0,`div`,72)(1,`div`,73)(2,`span`,67),J(3),B(),z(4,`span`,74),J(5),B()(),z(6,`ul`,75),I(7,oL,2,1,`li`,67,wg),P(9,sL,2,2,`li`,76),B(),P(10,uL,6,1,`dl`,61),B()),e&2){let e=t.$implicit,n=K(5);M(3),Y(e.collection??`entities`),M(2),Z(``,e.count,` `,e.count===1?`entity`:`entities`),M(),N(`aria-label`,(e.collection??`entities`)+` ids`),M(),L(n.entityIds(e.ids)),M(2),F(e.count>30?9:-1),M(),F(e.selectedId===void 0?-1:10)}}function fL(e,t){if(e&1&&(z(0,`section`,65)(1,`h4`,70),J(2,`Entities`),B(),z(3,`div`,71),I(4,dL,11,6,`div`,72,jI),B()()),e&2){let e=K();M(4),L(e.entities)}}function pL(e,t){if(e&1&&(z(0,`section`,59)(1,`h4`,60),J(2,`Computed`),B(),P(3,$I,3,0,`dl`,61)(4,eL,2,0,`p`,62),z(5,`h4`,63),J(6,`Methods`),B(),P(7,iL,3,0,`ul`,64)(8,aL,2,0,`p`,62),B(),P(9,fL,6,0,`section`,65)),e&2){let e=t,n=K(3);M(3),F(n.computedEntries().length?3:4),M(4),F(e.methods.length?7:8),M(2),F(e.entities?.length?9:-1)}}function mL(e,t){if(e&1&&(z(0,`span`,81),J(1),B()),e&2){let e=t;R(`title`,`Caused by `+K(4).kindLabel(`event`)+`: `+e.type),M(),Y(e.type)}}function hL(e,t){if(e&1&&(z(0,`span`,68),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.origin)}}function gL(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` · `,K(3).formatDuration(e.durationMs),` `)}}function _L(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,77),G(`click`,function(){let t=O(e).$implicit;return k(K(3).selectChange(t.seq))}),z(2,`span`,78),J(3),B(),z(4,`span`,79)(5,`span`,80),J(6),B(),P(7,mL,2,2,`span`,81),B(),z(8,`span`,82),P(9,hL,2,1,`span`,68),J(10),P(11,gL,1,1),B()()()}if(e&2){let e,n=t.$implicit,r=K(3);M(),q(`selected`,n.seq===r.selectedChangeSeq()),N(`aria-pressed`,n.seq===r.selectedChangeSeq())(`aria-controls`,n.seq===r.selectedChangeSeq()?`ngrx-change-detail`:null),M(2),X(`#`,n.seq),M(2),R(`title`,n.type),M(),Y(n.type),M(),F((e=n.causedByEvent)?7:-1,e),M(2),F(n.origin?9:-1),M(),Z(` `,r.changesLabel(n),` · `,r.formatTime(n.timestamp),` `),M(),F(n.durationMs===void 0?-1:11)}}function vL(e,t){e&1&&J(0,` No entries match this filter. `)}function yL(e,t){e&1&&J(0,` No actions dispatched since the page connected. `)}function bL(e,t){e&1&&J(0,` No state changes yet. Method calls and patchState writes that change the state are recorded here. `)}function xL(e,t){if(e&1&&(z(0,`li`,31),P(1,vL,1,0)(2,yL,1,0)(3,bL,1,0),B()),e&2){let e=K(),t=K(2);M(),F(t.filter()?1:e.classic?2:3)}}function SL(e,t){if(e&1&&(z(0,`div`,55),zg(1,83),B()),e&2){K(3);let e=n_(21);M(),R(`ngTemplateOutlet`,e)(`ngTemplateOutletContext`,sv(2,TI,t))}}function CL(e,t){if(e&1&&V(0,`option`,88),e&2){let e=t.$implicit;R(`value`,e)}}function wL(e,t){if(e&1&&(z(0,`p`,94),J(1),B()),e&2){let e=K(4);M(),Y(e.restoreOff)}}function TL(e,t){if(e&1){let e=W();z(0,`section`,56)(1,`h4`,84),J(2,`Dispatch an action`),B(),z(3,`form`,85),G(`submit`,function(t){return O(e),k(K(3).dispatchAction(t))}),z(4,`label`)(5,`span`),J(6,`Type`),B(),z(7,`input`,86),G(`input`,function(t){return O(e),k(K(3).dispatchType.set(t.target.value))}),B()(),z(8,`datalist`,87),I(9,CL,1,1,`option`,88,wg),B(),z(11,`label`)(12,`span`),J(13,`Payload `),z(14,`span`,89),J(15,`(JSON object, optional)`),B()(),z(16,`textarea`,90),G(`input`,function(t){return O(e),k(K(3).dispatchPayload.set(t.target.value))}),B()(),z(17,`p`,91),J(18),B(),z(19,`div`,92)(20,`button`,93),J(21,` Dispatch `),B()(),P(22,wL,2,1,`p`,94),B()()}if(e&2){let e=K(3);M(7),R(`value`,e.dispatchType()),M(2),L(e.actionTypes()),M(7),R(`value`,e.dispatchPayload()),N(`aria-invalid`,e.payloadError()?`true`:null),M(2),Y(e.payloadError()),M(2),R(`disabled`,e.busy()||!e.canRestore()||!e.dispatchRequest()),N(`aria-describedby`,e.canRestore()?null:`store-dispatch-off`),M(2),F(e.canRestore()?-1:22)}}function EL(e,t){if(e&1){let e=W();z(0,`div`,32)(1,`div`,38)(2,`h3`),J(3),B(),z(4,`div`,39)(5,`span`,40),J(6),B(),z(7,`span`,40),J(8),B(),P(9,KI,2,2,`span`,41),P(10,qI,2,1,`span`,40),B(),P(11,YI,4,0,`p`,42),B(),P(12,ZI,9,3,`div`,43),z(13,`div`,44)(14,`section`,45)(15,`div`,46)(16,`h4`,47),J(17,`State`),B(),z(18,`button`,48),G(`click`,function(){return O(e),k(K(2).copyState())}),J(19,` Copy `),B()(),z(20,`pre`,49,2),J(22),B()(),P(23,pL,10,3),B(),z(24,`section`,50)(25,`h4`,51),J(26),z(27,`span`,14),J(28),B()(),V(29,`app-limit-note`,52),z(30,`div`,53)(31,`ul`,54),I(32,_L,12,12,`li`,null,OI,!1,xL,4,1,`li`,31),B(),P(35,SL,2,4,`div`,55),B()(),P(36,TL,23,7,`section`,56),B()}if(e&2){let e,n,r,i=t,a=K(2);M(3),Y(i.label),M(3),Y(a.kindLabel(i.kind)),M(2),X(`scope: `,i.scope),M(),F((e=i.signal?.declaredIn)?9:-1,e),M(),F(i.classic?10:-1),M(),F(i.signal?.references?.length?11:-1),M(),F(i.classic?.paused?12:-1),M(10),Y(a.stateText()),M(),F((n=i.signal)?23:-1,n),M(3),X(` `,i.classic?`Action log`:`Change log`,` `),M(2),Y(a.storeLog().length),M(),R(`dropped`,a.page()?.dropped??0)(`max`,a.maxLog()),M(2),N(`aria-label`,i.classic?`Actions`:`Changes`),M(),L(a.storeLog()),M(3),F((r=a.changeEntry())?35:-1,r),M(),F(i.classic?36:-1)}}function DL(e,t){if(e&1&&(z(0,`div`,18)(1,`ul`,30),I(2,WI,8,10,`li`,null,DI,!1,GI,2,0,`li`,31),B(),P(5,EL,37,17,`div`,32),B()),e&2){let e,t=K();M(2),L(t.filteredStores()),M(3),F((e=t.store())?5:-1,e)}}function OL(e,t){if(e&1&&(z(0,`code`,101),J(1),B()),e&2){let e=K().$implicit,t=K(2);R(`title`,t.prettyText(e.payload)),M(),Y(t.shortText(e.payload))}}function kL(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,99),G(`click`,function(){let t=O(e).$implicit;return k(K(2).selectEvent(t.seq))}),V(2,`span`,35),z(3,`span`,100),J(4),B(),P(5,OL,2,2,`code`,101),z(6,`span`,102),J(7),B()()()}if(e&2){let e=t.$implicit,n=K(2);M(),q(`selected`,e.seq===n.selectedEventSeq()),N(`aria-pressed`,e.seq===n.selectedEventSeq())(`aria-controls`,e.seq===n.selectedEventSeq()?`ngrx-event-detail`:null),M(),C_(`background`,n.kindColor(`event`)),M(),R(`title`,e.eventType??e.type),M(),Y(e.eventType??e.type),M(),F(e.payload===void 0?-1:5),M(2),Y(n.formatTime(e.timestamp))}}function AL(e,t){e&1&&(z(0,`li`,31),J(1,`No events match this filter.`),B())}function jL(e,t){if(e&1&&(z(0,`div`,98,4),zg(2,83),B()),e&2){K(2);let e=n_(21);M(2),R(`ngTemplateOutlet`,e)(`ngTemplateOutletContext`,sv(2,EI,t))}}function ML(e,t){if(e&1&&(z(0,`section`,20)(1,`div`,12)(2,`h2`,95),J(3,`Events`),B(),z(4,`span`,14),J(5),B()(),z(6,`p`,96),J(7,` Events dispatched through @ngrx/signals/events, across every store on this page. `),B(),z(8,`ul`,97),I(9,kL,8,10,`li`,null,OI,!1,AL,2,0,`li`,31),B(),P(12,jL,3,4,`div`,98),B()),e&2){let e,t=K();M(5),Y(t.pageEvents().length),M(4),L(t.pageEvents()),M(3),F((e=t.eventEntry())?12:-1,e)}}function NL(e,t){if(e&1&&(z(0,`dt`),J(1,`Origin`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().selected,t=K();M(3),Y(t.originText(e.origin))}}function PL(e,t){if(e&1&&(z(0,`dt`),J(1,`Duration`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().selected,t=K();M(3),Y(t.formatDuration(e.durationMs))}}function FL(e,t){if(e&1&&(z(0,`dt`),J(1,`Action`),B(),z(2,`dd`)(3,`pre`,107),J(4),B()()),e&2){let e=K().selected,t=K();M(4),Y(t.prettyText(e.action))}}function IL(e,t){if(e&1&&(z(0,`dt`),J(1,`Arguments`),B(),z(2,`dd`)(3,`pre`,107),J(4),B()()),e&2){let e=K().selected,t=K();M(4),Y(t.prettyText(e.args))}}function LL(e,t){if(e&1&&(z(0,`dt`),J(1,`Payload`),B(),z(2,`dd`)(3,`pre`,107),J(4),B()()),e&2){let e=K().selected,t=K();M(4),Y(t.prettyText(e.payload))}}function RL(e,t){if(e&1&&(z(0,`pre`,107),J(1),B()),e&2){let e=K(),t=K(2);M(),Y(t.prettyText(e.payload))}}function zL(e,t){if(e&1&&(z(0,`dt`),J(1,`Caused by event`),B(),z(2,`dd`)(3,`code`,108),J(4),B(),P(5,RL,2,1,`pre`,107),B()),e&2){let e=t;M(4),Y(e.type),M(),F(e.payload===void 0?-1:5)}}function BL(e,t){if(e&1){let e=W();z(0,`button`,112),G(`click`,function(){O(e);let t=K(2).selected;return k(K().copyDiff(t))}),J(1,` Copy `),B()}if(e&2){let e=K(2).selected;N(`aria-label`,`Copy the state diff of #`+e.seq)}}function VL(e,t){if(e&1&&(z(0,`code`,118),J(1),B()),e&2){let e=K().$implicit,t=K(4);M(),Y(t.shortText(e.before))}}function HL(e,t){e&1&&(z(0,`span`,120),J(1,`→`),B(),z(2,`span`,121),J(3,`became`),B())}function UL(e,t){if(e&1&&(z(0,`code`,119),J(1),B()),e&2){let e=K().$implicit,t=K(4);M(),Y(t.shortText(e.after))}}function WL(e,t){if(e&1&&(z(0,`li`)(1,`span`,115),J(2),B(),z(3,`code`,116),J(4),B(),z(5,`span`,117),P(6,VL,2,1,`code`,118),P(7,HL,4,0),P(8,UL,2,1,`code`,119),B()()),e&2){let e=t.$implicit,n=K(4);w_(`diff-row `+e.op),M(2),Y(n.opLabel(e.op)),M(2),Y(e.path),M(2),F(e.op===`add`?-1:6),M(),F(e.op===`change`?7:-1),M(),F(e.op===`remove`?-1:8)}}function GL(e,t){if(e&1&&(z(0,`p`,62),J(1),B()),e&2){let e=K(3).selected,t=K();M(),Y(t.moreChanges(e.diffTruncated))}}function KL(e,t){if(e&1&&(z(0,`ul`,113),I(1,WL,9,7,`li`,114,MI),B(),P(3,GL,2,1,`p`,62)),e&2){let e=K(2).selected;M(),L(e.diff),M(2),F(e.diffTruncated?3:-1)}}function qL(e,t){e&1&&(z(0,`p`,62),J(1,`The state did not change.`),B())}function JL(e,t){if(e&1&&(z(0,`div`,109)(1,`div`,110),J(2,`State diff`),B(),P(3,BL,2,1,`button`,111),B(),P(4,KL,4,1)(5,qL,2,0,`p`,62)),e&2){let e=K(),t=e.selected,n=e.headingLevel;M(),N(`aria-level`,n+1),M(2),F(t.diff.length?3:-1),M(),F(t.diff.length?4:5)}}function YL(e,t){if(e&1&&J(0),e&2){let e=K(2).selected;X(` Store DevTools jumps the app state to the state right after action #`,e.seq,`. Until you go back to the latest state, new actions are logged but do not change the state. `)}}function XL(e,t){if(e&1&&J(0),e&2){let e=K(3).selected;Z(` This sets every state key of `,t.label,` back to its value right after change #`,e.seq,`. Components that read the store update at once, and a new "Restore" entry is added to the log. `)}}function ZL(e,t){if(e&1&&J(0),e&2){let e=K(3).selected;X(` This sets every state key of the store back to its value right after change #`,e.seq,`. Components that read the store update at once, and a new "Restore" entry is added to the log. `)}}function QL(e,t){if(e&1&&P(0,XL,1,2)(1,ZL,1,1),e&2){let e;F((e=K(3).store())?0:1,e)}}function $L(e,t){if(e&1){let e=W();z(0,`div`,122),G(`keydown.escape`,function(t){return O(e),k(K(2).cancelRestore(t))}),z(1,`p`,123),P(2,YL,1,1)(3,QL,2,1),B(),z(4,`div`,92)(5,`button`,57),G(`click`,function(){O(e);let t=K().selected;return k(K().restore(t.seq,t.source===`store`))}),J(6,` Restore `),B(),z(7,`button`,29,5),G(`click`,function(){return O(e),k(K(2).cancelRestore())}),J(9,` Cancel `),B()()()}if(e&2){let e=K(),t=e.selected,n=e.idPrefix,r=K();N(`aria-labelledby`,n+`-confirm-text`),M(),R(`id`,n+`-confirm-text`),M(),F(t.source===`store`?2:3),M(3),R(`disabled`,r.busy())}}function eR(e,t){if(e&1){let e=W();z(0,`button`,128,6),G(`click`,function(){O(e);let t=K(2).selected;return k(K().askRestore(t.seq))}),J(2,` Restore this state `),B()}if(e&2){let e=K(2).idPrefix,t=K();R(`disabled`,!t.canRestore()),N(`aria-describedby`,t.canRestore()?null:e+`-writes-off`)}}function tR(e,t){if(e&1){let e=W();z(0,`button`,129),G(`click`,function(){O(e);let t=K(2).selected;return k(K().dispatchAgain(t.seq))}),J(1,` Dispatch again `),B()}if(e&2){let e=K(2).idPrefix,t=K();R(`disabled`,t.busy()||!t.canRestore()),N(`aria-describedby`,t.canRestore()?null:e+`-writes-off`)}}function nR(e,t){if(e&1&&(z(0,`p`,127),J(1),B()),e&2){let e=K(2).idPrefix,t=K();R(`id`,e+`-writes-off`),M(),Y(t.restoreOff)}}function rR(e,t){if(e&1&&(z(0,`div`,124),P(1,eR,3,2,`button`,125),P(2,tR,2,2,`button`,126),B(),P(3,nR,2,2,`p`,127)),e&2){let e=K().selected,t=K();M(),F(e.restorable?1:-1),M(),F(t.canAgain(e)?2:-1),M(),F(t.canRestore()?-1:3)}}function iR(e,t){e&1&&(J(0,` Store DevTools no longer holds this action, so this state cannot be restored. It was dropped past `),z(1,`code`),J(2,`maxAge`),B(),J(3,`, or the Store DevTools history was committed, reset or imported. `))}function aR(e,t){e&1&&(J(0,` Store DevTools never recorded this action, so this state cannot be restored. An `),z(1,`code`),J(2,`actionsBlocklist`),B(),J(3,`, `),z(4,`code`),J(5,`actionsSafelist`),B(),J(6,` or `),z(7,`code`),J(8,`predicate`),B(),J(9,` option filtered it out, or recording was paused. `))}function oR(e,t){e&1&&(J(0,` Time travel for @ngrx/store needs `),z(1,`code`),J(2,`provideStoreDevtools()`),B(),J(3,`. Without it, entries cannot be restored. `))}function sR(e,t){if(e&1&&(z(0,`p`,106),P(1,iR,4,0)(2,aR,10,0)(3,oR,4,0),B()),e&2){let e=K().selected;M(),F(e.unrestorable===`dropped`?1:e.unrestorable===`not-recorded`?2:3)}}function cR(e,t){if(e&1&&(z(0,`section`,103)(1,`div`,104),J(2),B(),z(3,`dl`,61)(4,`dt`),J(5,`Time`),B(),z(6,`dd`),J(7),B(),P(8,NL,4,1),P(9,PL,4,1),P(10,FL,5,1),P(11,IL,5,1),P(12,LL,5,1),P(13,zL,6,2),B(),P(14,JL,6,3),P(15,$L,10,4,`div`,105),P(16,rR,4,3),P(17,sR,4,1,`p`,106),B()),e&2){let e,n=t.selected,r=t.headingLevel,i=t.idPrefix,a=K();N(`aria-labelledby`,i+`-entry-heading`),M(),R(`id`,i+`-entry-heading`),N(`aria-level`,r),M(),Z(` #`,n.seq,` `,n.type,` `),M(5),Y(a.formatTime(n.timestamp)),M(),F(n.origin?8:-1),M(),F(n.durationMs===void 0?-1:9),M(),F(n.action===void 0?-1:10),M(),F(n.args?.length?11:-1),M(),F(n.source===`event`&&n.payload!==void 0?12:-1),M(),F((e=n.causedByEvent)?13:-1,e),M(),F(n.source===`event`?-1:14),M(),F(n.restorable&&a.confirmSeq()===n.seq?15:-1),M(),F(a.confirmSeq()!==n.seq&&(n.restorable||a.canAgain(n))?16:-1),M(),F(!n.restorable&&n.source===`store`?17:-1)}}function lR(e,t){if(e&1&&(z(0,`span`,14),J(1),B()),e&2){let e=K();M(),Y(e.sourceEntries().length)}}function uR(e,t){e&1&&(z(0,`div`,23),V(1,`span`,130),z(2,`p`,27),J(3,`Scanning source for NgRx declarations…`),B()())}function dR(e,t){e&1&&(z(0,`div`,24)(1,`p`,27),J(2,`No NgRx declarations found in source.`),B(),z(3,`p`,28),J(4,` The scan looks for `),z(5,`code`),J(6,`signalStore`),B(),J(7,`, `),z(8,`code`),J(9,`signalState`),B(),J(10,`, `),z(11,`code`),J(12,`signalMethod`),B(),J(13,`, `),z(14,`code`),J(15,`createAction`),B(),J(16,`, `),z(17,`code`),J(18,`createReducer`),B(),J(19,`, `),z(20,`code`),J(21,`createEffect`),B(),J(22,`, `),z(23,`code`),J(24,`createSelector`),B(),J(25,` and `),z(26,`code`),J(27,`createFeature`),B(),J(28,`. `),B()())}function fR(e,t){if(e&1){let e=W();z(0,`button`,132),G(`click`,function(){let t=O(e).$implicit,n=K(2);return k(n.kind.set(n.kind()===t.kind?null:t.kind))}),V(1,`span`,35),z(2,`span`,137),J(3),B(),z(4,`span`,133),J(5),B()()}if(e&2){let e=t.$implicit,n=K(2);q(`active`,n.kind()===e.kind),N(`aria-pressed`,n.kind()===e.kind),M(),C_(`background`,n.kindColor(e.kind)),M(2),Y(n.kindLabel(e.kind)),M(2),Y(e.count)}}function pR(e,t){if(e&1&&(z(0,`p`,142),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.detail)}}function mR(e,t){if(e&1&&(z(0,`li`,136)(1,`div`,138),V(2,`span`,35),z(3,`span`,139),J(4),B(),z(5,`span`,40),J(6),B()(),z(7,`div`,140)(8,`span`,141),J(9),B()(),P(10,pR,2,1,`p`,142),B()),e&2){let e=t.$implicit,n=K(2);M(2),C_(`background`,n.kindColor(e.kind)),M(2),Y(e.name),M(2),Y(n.kindLabel(e.kind)),M(2),R(`title`,e.file+`:`+e.line),M(),Z(``,e.file,`:`,e.line),M(),F(e.detail?10:-1)}}function hR(e,t){if(e&1){let e=W();z(0,`li`)(1,`div`,23)(2,`p`,27),J(3,`No declarations match.`),B(),z(4,`button`,29),G(`click`,function(){return O(e),k(K(2).clearFilters())}),J(5,`Clear filters`),B()()()}}function gR(e,t){if(e&1){let e=W();z(0,`div`,131)(1,`button`,132),G(`click`,function(){return O(e),k(K().kind.set(null))}),J(2,` All `),z(3,`span`,133),J(4),B()(),I(5,fR,6,7,`button`,134,NI),B(),z(7,`ul`,135),I(8,mR,11,8,`li`,136,PI,!1,hR,6,0,`li`),B()}if(e&2){let e=K();M(),q(`active`,!e.kind()),N(`aria-pressed`,!e.kind()),M(3),Y(e.sourceEntries().length),M(),L(e.groupedEntries()),M(3),L(e.filteredEntries())}}var _R={action:`#f59e0b`,reducer:`#a78bfa`,effect:`#fb923c`,selector:`#60a5fa`,feature:`#34d399`,"store-setup":`#94a3b8`,"signal-store":`#e879f9`,"signal-state":`#22d3ee`,"signal-method":`#fb7185`,store:`#a78bfa`,event:`var(--warn)`},vR={"signal-store":`signalStore`,"signal-state":`signalState`,"signal-method":`signalMethod`,"store-setup":`store setup`,store:`@ngrx/store`,event:`event`},yR={dispatch:`store.dispatch(action)`,effect:`NgRx effect (Store.next)`,reactive:`store.dispatch(() => action)`};function bR(e){if(!e.trim())return{};let t;try{t=JSON.parse(e)}catch{return{error:`The payload is not valid JSON.`}}return!t||typeof t!=`object`||Array.isArray(t)?{error:`The payload must be a JSON object, like {"id": 7}.`}:Object.prototype.hasOwnProperty.call(t,`type`)?{error:`The payload cannot have a "type" key. Put the action type in the Type field.`}:{payload:t}}var xR=new Set([`action`,`reducer`,`effect`,`selector`,`feature`,`store-setup`]),SR=class e{rpc=$(null);canRestore=Q(()=>SE(this.rpc(),`ngrx`));restoreOff=JT(`ngrx`);filter=j(``);kind=j(null);sourceEntries=j([]);sourceLoaded=j(!1);pages=j([]);failed=j(!1);stateLoaded=j(!1);selectedPageId=j(null);hostPageId=nE();maxLog=Q(()=>xE(this.rpc()).limits.changeLog);selectedStoreId=j(null);focusEventSeq=j(null);eventDetailHeading=Rv(`eventDetailHeading`);busy=j(!1);focusLatest=j(!1);focusConfirm=j(null);cancelButton=Rv(`cancelButton`);restoreButton=Rv(`restoreButton`);stateTree=Rv(`stateTree`);filterInput=Rv(`filterInput`);latestButton=Rv(`latestButton`);message=j(``);destroyRef=E(Cs);unsubscribe=null;page=Q(()=>{let e=this.pages();return e.find(e=>e.pageId===this.selectedPageId())??e.find(e=>e.pageId===this.hostPageId)??e[0]??null});logKey=Q(()=>{let e=this.page();return{pageId:e?.pageId??null,log:e?.log??[]}});logSession=Tv({source:this.logKey,computation:(e,t)=>t?fI(t.source,e)?t.value:t.value+1:0});selectedChangeSeq=Tv({source:this.logSession,computation:()=>null});selectedEventSeq=Tv({source:this.logSession,computation:()=>null});confirmSeq=Tv({source:this.logSession,computation:()=>null});pageOptions=Q(()=>this.pages().map(e=>({value:e.pageId,label:e.title||e.url,hint:e.url})));liveStores=Q(()=>{let e=this.page();if(!e)return[];let t=e.stores.map(e=>({id:e.id,label:e.name??e.references[0]??e.className,kind:e.kind,scope:e.scope,signal:e}));return e.classic&&t.push({id:`store`,label:`Store`,kind:`store`,scope:e.classic.scope,classic:e.classic}),t});filteredStores=Q(()=>{let e=this.filter().trim().toLowerCase();return e?this.liveStores().filter(t=>t.label.toLowerCase().includes(e)||t.kind.includes(e)||(t.signal?.stateKeys??[]).some(t=>t.toLowerCase().includes(e))||(this.page()?.log??[]).some(n=>n.storeId===t.id&&n.type.toLowerCase().includes(e))):this.liveStores()});store=Q(()=>{let e=this.liveStores();return e.find(e=>e.id===this.selectedStoreId())??e[0]??null});stateText=Q(()=>{let e=this.store();return e?_I(e.signal?e.signal.state:e.classic?.state):``});computedEntries=Q(()=>Object.entries(this.store()?.signal?.computed??{}).map(([e,t])=>({key:e,value:vI(t,160),full:_I(t)})));storeLog=Q(()=>{let e=this.store()?.id,t=this.filter().trim().toLowerCase();return(this.page()?.log??[]).filter(n=>n.storeId===e&&(!t||n.type.toLowerCase().includes(t)||this.storeMatches(t))).reverse()});hasEvents=Q(()=>(this.page()?.log??[]).some(e=>e.source===`event`));pageEvents=Q(()=>{let e=this.filter().trim().toLowerCase();return(this.page()?.log??[]).filter(t=>t.source===`event`&&(!e||t.type.toLowerCase().includes(e))).slice().reverse()});changeEntry=Q(()=>{let e=this.selectedChangeSeq();return e===null?null:this.storeLog().find(t=>t.seq===e)??null});eventEntry=Q(()=>{let e=this.selectedEventSeq();return e===null?null:this.pageEvents().find(t=>t.seq===e)??null});dispatchType=j(``);dispatchPayload=j(``);actionTypes=Q(()=>{let e=new Set;for(let t of this.sourceEntries())for(let n of t.types??[])e.add(n);for(let t of this.page()?.log??[])t.source===`store`&&t.action!==void 0&&e.add(t.type);return[...e].sort().slice(0,200)});payloadError=Q(()=>bR(this.dispatchPayload()).error??``);dispatchRequest=Q(()=>{let e=this.dispatchType().trim(),{payload:t,error:n}=bR(this.dispatchPayload());return!e||n?null:{type:`dispatch`,action:e,...t?{payload:t}:{}}});usesSignals=Q(()=>this.sourceEntries().some(e=>e.kind===`signal-store`||e.kind===`signal-state`));usesClassic=Q(()=>this.sourceEntries().some(e=>xR.has(e.kind)));filteredEntries=Q(()=>{let e=this.filter().trim().toLowerCase(),t=this.kind();return this.sourceEntries().filter(n=>(!t||n.kind===t)&&(!e||n.name.toLowerCase().includes(e)||n.kind.includes(e)||(n.detail??``).toLowerCase().includes(e)))});groupedEntries=Q(()=>{let e=new Map;for(let t of this.sourceEntries())e.set(t.kind,(e.get(t.kind)??0)+1);return[...e.entries()].map(([e,t])=>({kind:e,count:t}))});constructor(){uc(()=>{let e=this.rpc();e&&this.load(e)}),ey(()=>{let e=this.latestButton();e&&this.focusLatest()&&!this.busy()&&(this.focusLatest.set(!1),e.nativeElement.focus())}),uc(()=>{let e=this.focusConfirm(),t=e===`cancel`?this.cancelButton():this.restoreButton();e&&t&&(this.focusConfirm.set(null),t.nativeElement.focus())}),ey(()=>{let e=this.focusEventSeq(),t=this.eventDetailHeading();e!==null&&t&&(this.focusEventSeq.set(null),t.nativeElement.focus())}),this.destroyRef.onDestroy(()=>this.unsubscribe?.())}storeMatches(e){let t=this.store();return!!t&&t.label.toLowerCase().includes(e)}async load(e){this.failed.set(!1),oE(e,`get-ngrx-store`).then(e=>this.sourceEntries.set(Array.isArray(e)?e:[])).catch(()=>this.sourceEntries.set([])).finally(()=>this.sourceLoaded.set(!0));try{let t=await e.scope(`pangular`).rpc.sharedState(`ngrx-store`);if(this.destroyRef.destroyed)return;let n=e=>{let t=e;this.pages.set(Array.isArray(t?.pages)?t.pages:[]),e!==void 0&&this.stateLoaded.set(!0)};n(t.value()),this.unsubscribe?.(),this.unsubscribe=t.on(`updated`,n)}catch{this.failed.set(!0)}}retry(){let e=this.rpc();e&&this.load(e)}selectPage(e){this.selectedPageId.set(e),this.selectedStoreId.set(null),this.selectedChangeSeq.set(null),this.selectedEventSeq.set(null),this.confirmSeq.set(null),this.message.set(``)}selectStore(e){this.selectedStoreId.set(e),this.selectedChangeSeq.set(null),this.confirmSeq.set(null),this.message.set(``)}selectChange(e){this.selectedChangeSeq.set(this.selectedChangeSeq()===e?null:e),this.confirmSeq.set(null),this.message.set(``)}copyState(){return this.copyText(this.stateText())}copyDiff(e){return this.copyText(_I(e.diff))}async copyText(e){try{await navigator.clipboard.writeText(e),this.message.set(`Copied.`)}catch{this.message.set(`The clipboard is not available here.`)}}askRestore(e){this.confirmSeq.set(e),this.focusConfirm.set(`cancel`)}cancelRestore(e){e?.preventDefault(),this.confirmSeq.set(null),this.focusConfirm.set(`restore`)}async restore(e,t){let n=this.page();if(!n)return;this.busy.set(!0),this.focusLatest.set(!1);let r=!1;try{let i=await oE(this.rpc(),`request-ngrx-action`,{pageId:n.pageId,request:{type:`restore`,seq:e}});this.message.set(i?.error??i?.message??`Restored.`),r=t&&!i?.error&&!!i?.paused}catch{this.message.set(`Could not reach the page to restore the state.`)}finally{this.busy.set(!1),this.confirmSeq.set(null),this.focusLatest.set(r),r||this.stateTree()?.nativeElement.focus()}}selectEvent(e){let t=this.selectedEventSeq()===e?null:e;this.selectedEventSeq.set(t),t!==null&&this.focusEventSeq.set(t)}async backToLatest(){let e=this.page();if(e){this.busy.set(!0);try{let t=await oE(this.rpc(),`request-ngrx-action`,{pageId:e.pageId,request:{type:`latest`}});this.focusLatest.set(!1),this.stateTree()?.nativeElement.focus(),this.message.set(t?.error??t?.message??`Back on the latest state.`)}catch{this.message.set(`Could not reach the page to go back to the latest state.`)}finally{this.busy.set(!1)}}}canAgain(e){return e.source===`store`&&e.action!==void 0}async dispatchAction(e){e.preventDefault();let t=this.dispatchRequest();t&&await this.send(t,`Could not reach the page to dispatch the action.`)}dispatchAgain(e){return this.send({type:`dispatch-again`,seq:e},`Could not reach the page to dispatch the action again.`)}async send(e,t){let n=this.page();if(!n||this.busy())return;let r=this.logSession();this.busy.set(!0);try{let t=await oE(this.rpc(),`request-ngrx-action`,{pageId:n.pageId,request:e});this.message.set(t?.error??t?.message??`Dispatched.`),t?.entry&&this.logSession()===r&&(this.selectedStoreId.set(`store`),this.selectedChangeSeq.set(t.entry.seq))}catch{this.message.set(t)}finally{this.busy.set(!1)}}clearFilters(){this.filter.set(``),this.kind.set(null),this.filterInput()?.nativeElement.focus()}changeCount(e){return(this.page()?.log??[]).filter(t=>t.storeId===e).length}entityIds(e){return e.slice(0,30)}entityOverflowTitle(e,t){let n=e.slice(30).join(`, `);return t>e.length?`${n} (first ${e.length} of ${t} shown)`:n}kindColor(e){return _R[e]??`var(--text-3)`}kindLabel(e){return vR[e]??e}originText(e){return yR[e]??e}changesLabel=dI;moreChanges=uI;opLabel(e){return e===`add`?`added`:e===`remove`?`removed`:`changed`}prettyText(e){return _I(e)}shortText(e){return vI(e)}formatTime=GD;formatDuration(e){return e<=0?`<1ms`:`${Math.round(e)}ms`}methodDuration(e){let t=[];return e.avgDurationMs!==void 0&&t.push(`avg ${this.formatDuration(e.avgDurationMs)}`),e.lastDurationMs!==void 0&&t.push(`last ${this.formatDuration(e.lastDurationMs)}`),t.length?` · ${t.join(` · `)}`:``}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-store-inspector`]],viewQuery:function(e,t){e&1&&e_(t.eventDetailHeading,yI,5)(t.cancelButton,bI,5)(t.restoreButton,xI,5)(t.stateTree,SI,5)(t.filterInput,CI,5)(t.latestButton,wI,5),e&2&&t_(6)},inputs:{rpc:[1,`rpc`]},decls:30,vars:11,consts:[[`filterInput`,``],[`entryDetailTpl`,``],[`stateTree`,``],[`latestButton`,``],[`eventDetailHeading`,``],[`cancelButton`,``],[`restoreButton`,``],[1,`toolbar`],[`type`,`search`,`placeholder`,`Filter stores, changes and declarations…`,`aria-label`,`Filter stores, changes and source declarations`,3,`input`,`keydown.escape`,`value`],[1,`status`],[`aria-hidden`,`true`,1,`live-dot`],[`aria-labelledby`,`ngrx-live-heading`,1,`block`],[1,`section-head`],[`id`,`ngrx-live-heading`],[1,`pill`],[`role`,`alert`,1,`empty`],[`role`,`status`,1,`empty`],[1,`empty`],[1,`live-layout`],[`role`,`status`,1,`message`],[`aria-labelledby`,`ngrx-events-heading`,1,`block`],[`aria-labelledby`,`ngrx-source-heading`,1,`block`],[`id`,`ngrx-source-heading`],[`role`,`status`,1,`empty`,`compact`],[1,`empty`,`compact`],[`id`,`ngrx-page-label`,1,`visually-hidden`],[`labelledBy`,`ngrx-page-label`,1,`page-select`,3,`valueChange`,`options`,`value`],[1,`empty-title`],[1,`hint`],[`type`,`button`,1,`btn`,3,`click`],[`aria-label`,`Stores on this page`,1,`store-list`],[1,`muted`,`pad`],[1,`store-detail`],[`type`,`button`,1,`store-item`,3,`click`],[1,`store-top`],[`aria-hidden`,`true`,1,`dot`],[1,`store-name`],[1,`store-meta`],[1,`detail-head`],[1,`chips`],[1,`chip`],[1,`chip`,`mono`,3,`title`],[1,`refs`],[1,`paused`],[1,`facts`],[`aria-labelledby`,`ngrx-state-heading`,1,`fact`],[1,`fact-head`],[`id`,`ngrx-state-heading`],[`type`,`button`,`aria-label`,`Copy state`,1,`btn`,`copy`,3,`click`],[`tabindex`,`0`,`aria-labelledby`,`ngrx-state-heading`,1,`tree`],[`aria-labelledby`,`ngrx-log-heading`,1,`log`],[`id`,`ngrx-log-heading`],[`what`,`changes on this page`,`limit`,`changeLog`,3,`dropped`,`max`],[1,`log-layout`],[`appRovingList`,`button.log-item`,1,`log-list`],[`id`,`ngrx-change-detail`],[`aria-labelledby`,`ngrx-dispatch-heading`,1,`dispatch`],[`type`,`button`,1,`btn`,`primary`,3,`click`,`disabled`],[`id`,`store-latest-off`,1,`hint`,`small`],[`aria-labelledby`,`ngrx-computed-heading`,1,`fact`],[`id`,`ngrx-computed-heading`],[1,`kv`],[1,`muted`],[`id`,`ngrx-methods-heading`,1,`spaced`],[`aria-labelledby`,`ngrx-methods-heading`,1,`methods`],[`aria-labelledby`,`ngrx-entities-heading`,1,`fact`],[3,`title`],[1,`chip`,`mono`],[1,`tag`],[1,`calls`],[`id`,`ngrx-entities-heading`],[1,`entities`],[1,`entity-group`],[1,`entity-head`],[1,`entity-count`],[1,`chips`,`entity-ids`],[1,`chip`,`more`,3,`title`],[`type`,`button`,1,`log-item`,3,`click`],[1,`seq`],[1,`log-type-row`],[1,`log-type`,3,`title`],[1,`tag`,3,`title`],[1,`log-meta`],[3,`ngTemplateOutlet`,`ngTemplateOutletContext`],[`id`,`ngrx-dispatch-heading`],[1,`dispatch-form`,3,`submit`],[`required`,``,`spellcheck`,`false`,`autocomplete`,`off`,`list`,`ngrx-action-types`,`placeholder`,`e.g. [Cart] Add Item`,3,`input`,`value`],[`id`,`ngrx-action-types`],[3,`value`],[1,`optional`],[`rows`,`3`,`spellcheck`,`false`,`placeholder`,`e.g. {"id": 7}`,`aria-describedby`,`ngrx-payload-error`,3,`input`,`value`],[`id`,`ngrx-payload-error`,1,`field-error`],[1,`actions`],[`type`,`submit`,1,`btn`,`primary`,3,`disabled`],[`id`,`store-dispatch-off`,1,`hint`,`small`],[`id`,`ngrx-events-heading`],[1,`intro`],[`appRovingList`,`button.event-item`,`aria-label`,`Dispatched events`,1,`events-list`],[`id`,`ngrx-event-detail`,`tabindex`,`-1`,1,`event-detail-focus`],[`type`,`button`,1,`event-item`,3,`click`],[1,`event-type`,`mono`,3,`title`],[1,`event-payload`,3,`title`],[1,`event-time`],[1,`entry`],[`role`,`heading`,1,`entry-heading`,3,`id`],[`role`,`group`,1,`confirm`],[1,`hint`,`small`],[1,`code`],[1,`mono`],[1,`sub-head`],[`role`,`heading`,1,`sub`],[`type`,`button`,1,`btn`,`copy`],[`type`,`button`,1,`btn`,`copy`,3,`click`],[1,`diff`],[3,`class`],[1,`op`],[1,`path`],[1,`values`],[1,`before`],[1,`after`],[`aria-hidden`,`true`,1,`arrow`],[1,`visually-hidden`],[`role`,`group`,1,`confirm`,3,`keydown.escape`],[3,`id`],[1,`entry-actions`],[`type`,`button`,1,`btn`,`restore`,3,`disabled`],[`type`,`button`,1,`btn`,3,`disabled`],[1,`hint`,`small`,3,`id`],[`type`,`button`,1,`btn`,`restore`,3,`click`,`disabled`],[`type`,`button`,1,`btn`,3,`click`,`disabled`],[`aria-hidden`,`true`,1,`spinner`],[`role`,`group`,`aria-label`,`Filter declarations by kind`,1,`kinds`],[`type`,`button`,1,`kind-chip`,3,`click`],[1,`count`],[`type`,`button`,1,`kind-chip`,3,`active`],[1,`nodes`],[1,`node-card`],[1,`chip-text`],[1,`node-header`],[1,`node-label`],[1,`node-meta`],[1,`file`,3,`title`],[1,`detail`]],template:function(e,t){e&1&&(z(0,`div`,7)(1,`input`,8,0),G(`input`,function(e){return t.filter.set(e.target.value)})(`keydown.escape`,function(){return t.filter.set(``)}),B(),P(3,FI,3,2),z(4,`span`,9),V(5,`span`,10),J(6),B()(),z(7,`section`,11)(8,`div`,12)(9,`h2`,13),J(10,`Live stores`),B(),P(11,II,2,1,`span`,14),B(),P(12,LI,7,0,`div`,15)(13,RI,3,0,`div`,16)(14,zI,5,0,`div`,17)(15,UI,4,1,`div`,17)(16,DL,6,2,`div`,18),z(17,`p`,19),J(18),B()(),P(19,ML,13,3,`section`,20),tg(20,cR,18,16,`ng-template`,null,1,gv),z(22,`section`,21)(23,`div`,12)(24,`h2`,22),J(25,`Source declarations`),B(),P(26,lR,2,1,`span`,14),B(),P(27,uR,4,0,`div`,23)(28,dR,29,0,`div`,24)(29,gR,11,5),B()),e&2&&(M(),R(`value`,t.filter()),M(2),F(t.pages().length>1?3:-1),M(),q(`on`,!!t.page()),M(2),X(` `,t.page()?`Live`:`No page connected`,` `),M(5),F(t.liveStores().length?11:-1),M(),F(t.failed()?12:t.stateLoaded()?t.page()?t.liveStores().length?16:15:14:13),M(6),Y(t.message()),M(),F(t.hasEvents()?19:-1),M(7),F(t.sourceEntries().length?26:-1),M(),F(t.sourceLoaded()?t.sourceEntries().length===0?28:29:27))},dependencies:[XD,bN,LD,$y],styles:[`[_nghost-%COMP%] { +}`]})},EI=1e3;function DI(e){return`${e>=1e3?`${EI}+`:String(e)} more ${e===1?`change`:`changes`} not shown`}function OI(e){let t=e.diffTruncated??0,n=e.diff.length+t;return n===0?`no change`:`${t>=1e3?`${n}+`:String(n)} ${n===1?`change`:`changes`}`}function kI(e,t){if(e.pageId!==t.pageId)return!1;let n=e.log.at(-1);if(!n)return!0;let r=t.log.at(-1);if(!r||r.seqe.seq===n.seq);return!i||i.timestamp===n.timestamp}var AI=`@type`,jI=new Set([`undefined`,`number`,`bigint`,`symbol`,`function`,`Date`,`RegExp`,`Error`,`Element`,`Map`,`Set`]);function MI(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&AI in e&&jI.has(e[AI])}function NI(e){return/^[A-Za-z_$][\w$]*$/.test(e)?e:JSON.stringify(e)}function PI(e,t=``){if(e===null)return`null`;if(typeof e==`string`)return JSON.stringify(e);if(typeof e!=`object`)return String(e);let n=t+` `;if(Array.isArray(e))return e.length?`[\n${e.map(e=>n+PI(e,n)).join(`, +`)}\n${t}]`:`[]`;if(MI(e)){let r=e;switch(r[AI]){case`undefined`:return`undefined`;case`Date`:return`Date(${r.value})`;case`bigint`:return`${r.value}n`;case`symbol`:return`Symbol(${r.value})`;case`function`:return`ƒ ${r.name}()`;case`Error`:return`${r.name??`Error`}: ${r.message}`;case`Element`:return`<${r.value}>`;case`Map`:{let e=r.entries??[];if(!e.length)return`Map(${r.size}) {}`;let i=e.map(([e,t])=>`${n}${PI(e,n)} => ${PI(t,n)}`);return`Map(${r.size}) {\n${i.join(`, +`)}\n${t}}`}case`Set`:{let e=r.values??[];return e.length?`Set(${r.size}) {\n${e.map(e=>n+PI(e,n)).join(`, +`)}\n${t}}`:`Set(${r.size}) {}`}default:return String(r.value??r[AI])}}let r=Object.entries(e);return r.length?`{\n${r.map(([e,t])=>`${n}${NI(e)}: ${PI(t,n)}`).join(`, +`)}\n${t}}`:`{}`}function FI(e,t=120){let n=PI(e).replace(/\s*\n\s*/g,` `);return n.length>t?`${n.slice(0,t-1)}…`:n}var II=[`eventDetailHeading`],LI=[`cancelButton`],RI=[`restoreButton`],zI=[`stateTree`],BI=[`filterInput`],VI=[`latestButton`],HI=e=>({selected:e,headingLevel:5,idPrefix:`ngrx-change`}),UI=e=>({selected:e,headingLevel:3,idPrefix:`ngrx-event`}),WI=(e,t)=>t.id,GI=(e,t)=>t.seq,KI=(e,t)=>t.key,qI=(e,t)=>t.name,JI=(e,t)=>t.idsKey,YI=(e,t)=>t.path,XI=(e,t)=>t.kind,ZI=(e,t)=>t.name+t.file+t.line;function QI(e,t){if(e&1){let e=W();z(0,`span`,25),J(1,`Page`),B(),z(2,`app-select`,26),G(`valueChange`,function(t){return O(e),k(K().selectPage(t))}),B()}if(e&2){let e=K();M(2),R(`options`,e.pageOptions())(`value`,e.page()?.pageId??null)}}function $I(e,t){if(e&1&&(z(0,`span`,14),J(1),B()),e&2){let e=K();M(),Y(e.liveStores().length)}}function eL(e,t){if(e&1){let e=W();z(0,`div`,15)(1,`p`,27),J(2,`Could not load the live store state.`),B(),z(3,`p`,28),J(4,`Check that the dev server with Pangular Inspector is still running.`),B(),z(5,`button`,29),G(`click`,function(){return O(e),k(K().retry())}),J(6,`Retry`),B()()}}function tL(e,t){e&1&&(z(0,`div`,16)(1,`p`,27),J(2,`Loading…`),B()())}function nL(e,t){e&1&&(z(0,`div`,17)(1,`p`,27),J(2,`No page is reporting NgRx state yet.`),B(),z(3,`p`,28),J(4,` Open the app in a browser. Stores show up here as soon as the page creates them. `),B()())}function rL(e,t){e&1&&(z(0,`p`,27),J(1,`No signal store instance on this page yet.`),B(),z(2,`p`,28),J(3,` A `),z(4,`code`),J(5,`signalStore`),B(),J(6,` is created the first time something injects it. Navigate to a page that uses the store and it appears here. `),B())}function iL(e,t){e&1&&(z(0,`p`,27),J(1,`The @ngrx/store Store was not found on this page.`),B(),z(2,`p`,28),J(3,` Check that `),z(4,`code`),J(5,`provideStore()`),B(),J(6,` or `),z(7,`code`),J(8,`StoreModule.forRoot()`),B(),J(9,` is part of the providers of the running app. `),B())}function aL(e,t){e&1&&(z(0,`p`,27),J(1,`This page has no NgRx store.`),B(),z(2,`p`,28),J(3,` Stores from `),z(4,`code`),J(5,`@ngrx/signals`),B(),J(6,` (`),z(7,`code`),J(8,`signalStore`),B(),J(9,`, `),z(10,`code`),J(11,`signalState`),B(),J(12,`) and `),z(13,`code`),J(14,`@ngrx/store`),B(),J(15,` are listed here once the app creates them. `),B())}function oL(e,t){if(e&1&&(z(0,`div`,17),P(1,rL,7,0)(2,iL,10,0)(3,aL,16,0),B()),e&2){let e=K();M(),F(e.usesSignals()?1:e.usesClassic()?2:3)}}function sL(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,33),G(`click`,function(){let t=O(e).$implicit;return k(K(2).selectStore(t.id))}),z(2,`span`,34),V(3,`span`,35),z(4,`span`,36),J(5),B()(),z(6,`span`,37),J(7),B()()()}if(e&2){let e=t.$implicit,n=K(2);M(),q(`selected`,e.id===n.store()?.id),N(`aria-pressed`,e.id===n.store()?.id),M(2),j_(`background`,n.kindColor(e.kind)),M(2),Y(e.label),M(2),iv(` `,n.kindLabel(e.kind),` · `,e.scope,` · `,n.changeCount(e.id),` `,n.changeCount(e.id)===1?`change`:`changes`,` `)}}function cL(e,t){e&1&&(z(0,`li`,31),J(1,`No stores match this filter.`),B())}function lL(e,t){e&1&&V(0,`app-source-link`,41),e&2&&R(`file`,t)}function uL(e,t){if(e&1&&(z(0,`span`,40),J(1),B()),e&2){let e=K();M(),Y(e.classic.devtools?`Store DevTools on`:`Store DevTools off`)}}function dL(e,t){if(e&1&&(z(0,`code`),J(1),B(),J(2)),e&2){let e=t.$implicit,n=t.$index,r=t.$count;M(),Y(e),M(),X(``,n===r-1?``:`, `,` `)}}function fL(e,t){if(e&1&&(z(0,`p`,42),J(1,` Referenced by `),I(2,dL,3,2,null,null,Og),B()),e&2){let e=K();M(2),L(e.signal.references)}}function pL(e,t){if(e&1&&(z(0,`p`,58),J(1),B()),e&2){let e=K(4);M(),Y(e.restoreOff)}}function mL(e,t){if(e&1){let e=W();z(0,`div`,43)(1,`p`)(2,`strong`),J(3,`Viewing a past state.`),B(),J(4,` New actions are logged but do not change the state until you go back to the latest state. `),B(),z(5,`button`,57,3),G(`click`,function(){return O(e),k(K(3).backToLatest())}),J(7,` Back to latest `),B(),P(8,pL,2,1,`p`,58),B()}if(e&2){let e=K(3);M(5),R(`disabled`,e.busy()||!e.canRestore()),N(`aria-describedby`,e.canRestore()?null:`store-latest-off`),M(3),F(e.canRestore()?-1:8)}}function hL(e,t){if(e&1&&(z(0,`dt`),J(1),B(),z(2,`dd`)(3,`code`,66),J(4),B()()),e&2){let e=t.$implicit;M(),Y(e.key),M(2),R(`title`,e.full),M(),Y(e.value)}}function gL(e,t){if(e&1&&(z(0,`dl`,61),I(1,hL,5,3,null,null,KI),B()),e&2){let e=K(4);M(),L(e.computedEntries())}}function _L(e,t){e&1&&(z(0,`p`,62),J(1,`No computed signals.`),B())}function vL(e,t){e&1&&(z(0,`span`,68),J(1,`signalMethod`),B())}function yL(e,t){e&1&&(z(0,`span`,68),J(1,`rxMethod`),B())}function bL(e,t){if(e&1&&(z(0,`li`,67),J(1),P(2,vL,2,0,`span`,68)(3,yL,2,0,`span`,68),z(4,`span`,69),J(5),B()()),e&2){let e=t.$implicit,n=K(5);M(),X(` `,e.name,` `),M(),F(e.signalMethod?2:e.rx?3:-1),M(3),rv(``,e.calls,` `,e.calls===1?`call`:`calls`,``,n.methodDuration(e))}}function xL(e,t){if(e&1&&(z(0,`ul`,64),I(1,bL,6,5,`li`,67,qI),B()),e&2){let e=K();M(),L(e.methods)}}function SL(e,t){e&1&&(z(0,`p`,62),J(1,`No methods.`),B())}function CL(e,t){if(e&1&&(z(0,`li`,67),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function wL(e,t){if(e&1&&(z(0,`li`,76),J(1),B()),e&2){let e=K().$implicit;R(`title`,K(5).entityOverflowTitle(e.ids,e.count)),M(),X(` +`,e.count-30,` more `)}}function TL(e,t){if(e&1&&(z(0,`code`,66),J(1),B()),e&2){let e=K(2).$implicit,t=K(5);R(`title`,t.prettyText(e.selected)),M(),Y(t.shortText(e.selected))}}function EL(e,t){e&1&&(z(0,`span`,62),J(1,`None selected`),B())}function DL(e,t){if(e&1&&(z(0,`dl`,61)(1,`dt`),J(2,`Selected`),B(),z(3,`dd`),P(4,TL,2,2,`code`,66)(5,EL,2,0,`span`,62),B()()),e&2){let e=K().$implicit;M(4),F(e.selected===void 0?5:4)}}function OL(e,t){if(e&1&&(z(0,`div`,72)(1,`div`,73)(2,`span`,67),J(3),B(),z(4,`span`,74),J(5),B()(),z(6,`ul`,75),I(7,CL,2,1,`li`,67,Og),P(9,wL,2,2,`li`,76),B(),P(10,DL,6,1,`dl`,61),B()),e&2){let e=t.$implicit,n=K(5);M(3),Y(e.collection??`entities`),M(2),Z(``,e.count,` `,e.count===1?`entity`:`entities`),M(),N(`aria-label`,(e.collection??`entities`)+` ids`),M(),L(n.entityIds(e.ids)),M(2),F(e.count>30?9:-1),M(),F(e.selectedId===void 0?-1:10)}}function kL(e,t){if(e&1&&(z(0,`section`,65)(1,`h4`,70),J(2,`Entities`),B(),z(3,`div`,71),I(4,OL,11,6,`div`,72,JI),B()()),e&2){let e=K();M(4),L(e.entities)}}function AL(e,t){if(e&1&&(z(0,`section`,59)(1,`h4`,60),J(2,`Computed`),B(),P(3,gL,3,0,`dl`,61)(4,_L,2,0,`p`,62),z(5,`h4`,63),J(6,`Methods`),B(),P(7,xL,3,0,`ul`,64)(8,SL,2,0,`p`,62),B(),P(9,kL,6,0,`section`,65)),e&2){let e=t,n=K(3);M(3),F(n.computedEntries().length?3:4),M(4),F(e.methods.length?7:8),M(2),F(e.entities?.length?9:-1)}}function jL(e,t){if(e&1&&(z(0,`span`,81),J(1),B()),e&2){let e=t;R(`title`,`Caused by `+K(4).kindLabel(`event`)+`: `+e.type),M(),Y(e.type)}}function ML(e,t){if(e&1&&(z(0,`span`,68),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.origin)}}function NL(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` · `,K(3).formatDuration(e.durationMs),` `)}}function PL(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,77),G(`click`,function(){let t=O(e).$implicit;return k(K(3).selectChange(t.seq))}),z(2,`span`,78),J(3),B(),z(4,`span`,79)(5,`span`,80),J(6),B(),P(7,jL,2,2,`span`,81),B(),z(8,`span`,82),P(9,ML,2,1,`span`,68),J(10),P(11,NL,1,1),B()()()}if(e&2){let e,n=t.$implicit,r=K(3);M(),q(`selected`,n.seq===r.selectedChangeSeq()),N(`aria-pressed`,n.seq===r.selectedChangeSeq())(`aria-controls`,n.seq===r.selectedChangeSeq()?`ngrx-change-detail`:null),M(2),X(`#`,n.seq),M(2),R(`title`,n.type),M(),Y(n.type),M(),F((e=n.causedByEvent)?7:-1,e),M(2),F(n.origin?9:-1),M(),Z(` `,r.changesLabel(n),` · `,r.formatTime(n.timestamp),` `),M(),F(n.durationMs===void 0?-1:11)}}function FL(e,t){e&1&&J(0,` No entries match this filter. `)}function IL(e,t){e&1&&J(0,` No actions dispatched since the page connected. `)}function LL(e,t){e&1&&J(0,` No state changes yet. Method calls and patchState writes that change the state are recorded here. `)}function RL(e,t){if(e&1&&(z(0,`li`,31),P(1,FL,1,0)(2,IL,1,0)(3,LL,1,0),B()),e&2){let e=K(),t=K(2);M(),F(t.filter()?1:e.classic?2:3)}}function zL(e,t){if(e&1&&(z(0,`div`,55),Ug(1,83),B()),e&2){K(3);let e=u_(21);M(),R(`ngTemplateOutlet`,e)(`ngTemplateOutletContext`,hv(2,HI,t))}}function BL(e,t){if(e&1&&V(0,`option`,88),e&2){let e=t.$implicit;R(`value`,e)}}function VL(e,t){if(e&1&&(z(0,`p`,94),J(1),B()),e&2){let e=K(4);M(),Y(e.restoreOff)}}function HL(e,t){if(e&1){let e=W();z(0,`section`,56)(1,`h4`,84),J(2,`Dispatch an action`),B(),z(3,`form`,85),G(`submit`,function(t){return O(e),k(K(3).dispatchAction(t))}),z(4,`label`)(5,`span`),J(6,`Type`),B(),z(7,`input`,86),G(`input`,function(t){return O(e),k(K(3).dispatchType.set(t.target.value))}),B()(),z(8,`datalist`,87),I(9,BL,1,1,`option`,88,Og),B(),z(11,`label`)(12,`span`),J(13,`Payload `),z(14,`span`,89),J(15,`(JSON object, optional)`),B()(),z(16,`textarea`,90),G(`input`,function(t){return O(e),k(K(3).dispatchPayload.set(t.target.value))}),B()(),z(17,`p`,91),J(18),B(),z(19,`div`,92)(20,`button`,93),J(21,` Dispatch `),B()(),P(22,VL,2,1,`p`,94),B()()}if(e&2){let e=K(3);M(7),R(`value`,e.dispatchType()),M(2),L(e.actionTypes()),M(7),R(`value`,e.dispatchPayload()),N(`aria-invalid`,e.payloadError()?`true`:null),M(2),Y(e.payloadError()),M(2),R(`disabled`,e.busy()||!e.canRestore()||!e.dispatchRequest()),N(`aria-describedby`,e.canRestore()?null:`store-dispatch-off`),M(2),F(e.canRestore()?-1:22)}}function UL(e,t){if(e&1){let e=W();z(0,`div`,32)(1,`div`,38)(2,`h3`),J(3),B(),z(4,`div`,39)(5,`span`,40),J(6),B(),z(7,`span`,40),J(8),B(),P(9,lL,1,1,`app-source-link`,41),P(10,uL,2,1,`span`,40),B(),P(11,fL,4,0,`p`,42),B(),P(12,mL,9,3,`div`,43),z(13,`div`,44)(14,`section`,45)(15,`div`,46)(16,`h4`,47),J(17,`State`),B(),z(18,`button`,48),G(`click`,function(){return O(e),k(K(2).copyState())}),J(19,` Copy `),B()(),z(20,`pre`,49,2),J(22),B()(),P(23,AL,10,3),B(),z(24,`section`,50)(25,`h4`,51),J(26),z(27,`span`,14),J(28),B()(),V(29,`app-limit-note`,52),z(30,`div`,53)(31,`ul`,54),I(32,PL,12,12,`li`,null,GI,!1,RL,4,1,`li`,31),B(),P(35,zL,2,4,`div`,55),B()(),P(36,HL,23,7,`section`,56),B()}if(e&2){let e,n,r,i=t,a=K(2);M(3),Y(i.label),M(3),Y(a.kindLabel(i.kind)),M(2),X(`scope: `,i.scope),M(),F((e=i.signal?.declaredIn)?9:-1,e),M(),F(i.classic?10:-1),M(),F(i.signal?.references?.length?11:-1),M(),F(i.classic?.paused?12:-1),M(10),Y(a.stateText()),M(),F((n=i.signal)?23:-1,n),M(3),X(` `,i.classic?`Action log`:`Change log`,` `),M(2),Y(a.storeLog().length),M(),R(`dropped`,a.page()?.dropped??0)(`max`,a.maxLog()),M(2),N(`aria-label`,i.classic?`Actions`:`Changes`),M(),L(a.storeLog()),M(3),F((r=a.changeEntry())?35:-1,r),M(),F(i.classic?36:-1)}}function WL(e,t){if(e&1&&(z(0,`div`,18)(1,`ul`,30),I(2,sL,8,10,`li`,null,WI,!1,cL,2,0,`li`,31),B(),P(5,UL,37,17,`div`,32),B()),e&2){let e,t=K();M(2),L(t.filteredStores()),M(3),F((e=t.store())?5:-1,e)}}function GL(e,t){if(e&1&&(z(0,`code`,101),J(1),B()),e&2){let e=K().$implicit,t=K(2);R(`title`,t.prettyText(e.payload)),M(),Y(t.shortText(e.payload))}}function KL(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,99),G(`click`,function(){let t=O(e).$implicit;return k(K(2).selectEvent(t.seq))}),V(2,`span`,35),z(3,`span`,100),J(4),B(),P(5,GL,2,2,`code`,101),z(6,`span`,102),J(7),B()()()}if(e&2){let e=t.$implicit,n=K(2);M(),q(`selected`,e.seq===n.selectedEventSeq()),N(`aria-pressed`,e.seq===n.selectedEventSeq())(`aria-controls`,e.seq===n.selectedEventSeq()?`ngrx-event-detail`:null),M(),j_(`background`,n.kindColor(`event`)),M(),R(`title`,e.eventType??e.type),M(),Y(e.eventType??e.type),M(),F(e.payload===void 0?-1:5),M(2),Y(n.formatTime(e.timestamp))}}function qL(e,t){e&1&&(z(0,`li`,31),J(1,`No events match this filter.`),B())}function JL(e,t){if(e&1&&(z(0,`div`,98,4),Ug(2,83),B()),e&2){K(2);let e=u_(21);M(2),R(`ngTemplateOutlet`,e)(`ngTemplateOutletContext`,hv(2,UI,t))}}function YL(e,t){if(e&1&&(z(0,`section`,20)(1,`div`,12)(2,`h2`,95),J(3,`Events`),B(),z(4,`span`,14),J(5),B()(),z(6,`p`,96),J(7,` Events dispatched through @ngrx/signals/events, across every store on this page. `),B(),z(8,`ul`,97),I(9,KL,8,10,`li`,null,GI,!1,qL,2,0,`li`,31),B(),P(12,JL,3,4,`div`,98),B()),e&2){let e,t=K();M(5),Y(t.pageEvents().length),M(4),L(t.pageEvents()),M(3),F((e=t.eventEntry())?12:-1,e)}}function XL(e,t){if(e&1&&(z(0,`dt`),J(1,`Origin`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().selected,t=K();M(3),Y(t.originText(e.origin))}}function ZL(e,t){if(e&1&&(z(0,`dt`),J(1,`Duration`),B(),z(2,`dd`),J(3),B()),e&2){let e=K().selected,t=K();M(3),Y(t.formatDuration(e.durationMs))}}function QL(e,t){if(e&1&&(z(0,`dt`),J(1,`Action`),B(),z(2,`dd`)(3,`pre`,107),J(4),B()()),e&2){let e=K().selected,t=K();M(4),Y(t.prettyText(e.action))}}function $L(e,t){if(e&1&&(z(0,`dt`),J(1,`Arguments`),B(),z(2,`dd`)(3,`pre`,107),J(4),B()()),e&2){let e=K().selected,t=K();M(4),Y(t.prettyText(e.args))}}function eR(e,t){if(e&1&&(z(0,`dt`),J(1,`Payload`),B(),z(2,`dd`)(3,`pre`,107),J(4),B()()),e&2){let e=K().selected,t=K();M(4),Y(t.prettyText(e.payload))}}function tR(e,t){if(e&1&&(z(0,`pre`,107),J(1),B()),e&2){let e=K(),t=K(2);M(),Y(t.prettyText(e.payload))}}function nR(e,t){if(e&1&&(z(0,`dt`),J(1,`Caused by event`),B(),z(2,`dd`)(3,`code`,108),J(4),B(),P(5,tR,2,1,`pre`,107),B()),e&2){let e=t;M(4),Y(e.type),M(),F(e.payload===void 0?-1:5)}}function rR(e,t){if(e&1){let e=W();z(0,`button`,112),G(`click`,function(){O(e);let t=K(2).selected;return k(K().copyDiff(t))}),J(1,` Copy `),B()}if(e&2){let e=K(2).selected;N(`aria-label`,`Copy the state diff of #`+e.seq)}}function iR(e,t){if(e&1&&(z(0,`code`,118),J(1),B()),e&2){let e=K().$implicit,t=K(4);M(),Y(t.shortText(e.before))}}function aR(e,t){e&1&&(z(0,`span`,120),J(1,`→`),B(),z(2,`span`,121),J(3,`became`),B())}function oR(e,t){if(e&1&&(z(0,`code`,119),J(1),B()),e&2){let e=K().$implicit,t=K(4);M(),Y(t.shortText(e.after))}}function sR(e,t){if(e&1&&(z(0,`li`)(1,`span`,115),J(2),B(),z(3,`code`,116),J(4),B(),z(5,`span`,117),P(6,iR,2,1,`code`,118),P(7,aR,4,0),P(8,oR,2,1,`code`,119),B()()),e&2){let e=t.$implicit,n=K(4);M_(`diff-row `+e.op),M(2),Y(n.opLabel(e.op)),M(2),Y(e.path),M(2),F(e.op===`add`?-1:6),M(),F(e.op===`change`?7:-1),M(),F(e.op===`remove`?-1:8)}}function cR(e,t){if(e&1&&(z(0,`p`,62),J(1),B()),e&2){let e=K(3).selected,t=K();M(),Y(t.moreChanges(e.diffTruncated))}}function lR(e,t){if(e&1&&(z(0,`ul`,113),I(1,sR,9,7,`li`,114,YI),B(),P(3,cR,2,1,`p`,62)),e&2){let e=K(2).selected;M(),L(e.diff),M(2),F(e.diffTruncated?3:-1)}}function uR(e,t){e&1&&(z(0,`p`,62),J(1,`The state did not change.`),B())}function dR(e,t){if(e&1&&(z(0,`div`,109)(1,`div`,110),J(2,`State diff`),B(),P(3,rR,2,1,`button`,111),B(),P(4,lR,4,1)(5,uR,2,0,`p`,62)),e&2){let e=K(),t=e.selected,n=e.headingLevel;M(),N(`aria-level`,n+1),M(2),F(t.diff.length?3:-1),M(),F(t.diff.length?4:5)}}function fR(e,t){if(e&1&&J(0),e&2){let e=K(2).selected;X(` Store DevTools jumps the app state to the state right after action #`,e.seq,`. Until you go back to the latest state, new actions are logged but do not change the state. `)}}function pR(e,t){if(e&1&&J(0),e&2){let e=K(3).selected;Z(` This sets every state key of `,t.label,` back to its value right after change #`,e.seq,`. Components that read the store update at once, and a new "Restore" entry is added to the log. `)}}function mR(e,t){if(e&1&&J(0),e&2){let e=K(3).selected;X(` This sets every state key of the store back to its value right after change #`,e.seq,`. Components that read the store update at once, and a new "Restore" entry is added to the log. `)}}function hR(e,t){if(e&1&&P(0,pR,1,2)(1,mR,1,1),e&2){let e;F((e=K(3).store())?0:1,e)}}function gR(e,t){if(e&1){let e=W();z(0,`div`,122),G(`keydown.escape`,function(t){return O(e),k(K(2).cancelRestore(t))}),z(1,`p`,123),P(2,fR,1,1)(3,hR,2,1),B(),z(4,`div`,92)(5,`button`,57),G(`click`,function(){O(e);let t=K().selected;return k(K().restore(t.seq,t.source===`store`))}),J(6,` Restore `),B(),z(7,`button`,29,5),G(`click`,function(){return O(e),k(K(2).cancelRestore())}),J(9,` Cancel `),B()()()}if(e&2){let e=K(),t=e.selected,n=e.idPrefix,r=K();N(`aria-labelledby`,n+`-confirm-text`),M(),R(`id`,n+`-confirm-text`),M(),F(t.source===`store`?2:3),M(3),R(`disabled`,r.busy())}}function _R(e,t){if(e&1){let e=W();z(0,`button`,128,6),G(`click`,function(){O(e);let t=K(2).selected;return k(K().askRestore(t.seq))}),J(2,` Restore this state `),B()}if(e&2){let e=K(2).idPrefix,t=K();R(`disabled`,!t.canRestore()),N(`aria-describedby`,t.canRestore()?null:e+`-writes-off`)}}function vR(e,t){if(e&1){let e=W();z(0,`button`,129),G(`click`,function(){O(e);let t=K(2).selected;return k(K().dispatchAgain(t.seq))}),J(1,` Dispatch again `),B()}if(e&2){let e=K(2).idPrefix,t=K();R(`disabled`,t.busy()||!t.canRestore()),N(`aria-describedby`,t.canRestore()?null:e+`-writes-off`)}}function yR(e,t){if(e&1&&(z(0,`p`,127),J(1),B()),e&2){let e=K(2).idPrefix,t=K();R(`id`,e+`-writes-off`),M(),Y(t.restoreOff)}}function bR(e,t){if(e&1&&(z(0,`div`,124),P(1,_R,3,2,`button`,125),P(2,vR,2,2,`button`,126),B(),P(3,yR,2,2,`p`,127)),e&2){let e=K().selected,t=K();M(),F(e.restorable?1:-1),M(),F(t.canAgain(e)?2:-1),M(),F(t.canRestore()?-1:3)}}function xR(e,t){e&1&&(J(0,` Store DevTools no longer holds this action, so this state cannot be restored. It was dropped past `),z(1,`code`),J(2,`maxAge`),B(),J(3,`, or the Store DevTools history was committed, reset or imported. `))}function SR(e,t){e&1&&(J(0,` Store DevTools never recorded this action, so this state cannot be restored. An `),z(1,`code`),J(2,`actionsBlocklist`),B(),J(3,`, `),z(4,`code`),J(5,`actionsSafelist`),B(),J(6,` or `),z(7,`code`),J(8,`predicate`),B(),J(9,` option filtered it out, or recording was paused. `))}function CR(e,t){e&1&&(J(0,` Time travel for @ngrx/store needs `),z(1,`code`),J(2,`provideStoreDevtools()`),B(),J(3,`. Without it, entries cannot be restored. `))}function wR(e,t){if(e&1&&(z(0,`p`,106),P(1,xR,4,0)(2,SR,10,0)(3,CR,4,0),B()),e&2){let e=K().selected;M(),F(e.unrestorable===`dropped`?1:e.unrestorable===`not-recorded`?2:3)}}function TR(e,t){if(e&1&&(z(0,`section`,103)(1,`div`,104),J(2),B(),z(3,`dl`,61)(4,`dt`),J(5,`Time`),B(),z(6,`dd`),J(7),B(),P(8,XL,4,1),P(9,ZL,4,1),P(10,QL,5,1),P(11,$L,5,1),P(12,eR,5,1),P(13,nR,6,2),B(),P(14,dR,6,3),P(15,gR,10,4,`div`,105),P(16,bR,4,3),P(17,wR,4,1,`p`,106),B()),e&2){let e,n=t.selected,r=t.headingLevel,i=t.idPrefix,a=K();N(`aria-labelledby`,i+`-entry-heading`),M(),R(`id`,i+`-entry-heading`),N(`aria-level`,r),M(),Z(` #`,n.seq,` `,n.type,` `),M(5),Y(a.formatTime(n.timestamp)),M(),F(n.origin?8:-1),M(),F(n.durationMs===void 0?-1:9),M(),F(n.action===void 0?-1:10),M(),F(n.args?.length?11:-1),M(),F(n.source===`event`&&n.payload!==void 0?12:-1),M(),F((e=n.causedByEvent)?13:-1,e),M(),F(n.source===`event`?-1:14),M(),F(n.restorable&&a.confirmSeq()===n.seq?15:-1),M(),F(a.confirmSeq()!==n.seq&&(n.restorable||a.canAgain(n))?16:-1),M(),F(!n.restorable&&n.source===`store`?17:-1)}}function ER(e,t){if(e&1&&(z(0,`span`,14),J(1),B()),e&2){let e=K();M(),Y(e.sourceEntries().length)}}function DR(e,t){e&1&&(z(0,`div`,23),V(1,`span`,130),z(2,`p`,27),J(3,`Scanning source for NgRx declarations…`),B()())}function OR(e,t){e&1&&(z(0,`div`,24)(1,`p`,27),J(2,`No NgRx declarations found in source.`),B(),z(3,`p`,28),J(4,` The scan looks for `),z(5,`code`),J(6,`signalStore`),B(),J(7,`, `),z(8,`code`),J(9,`signalState`),B(),J(10,`, `),z(11,`code`),J(12,`signalMethod`),B(),J(13,`, `),z(14,`code`),J(15,`createAction`),B(),J(16,`, `),z(17,`code`),J(18,`createReducer`),B(),J(19,`, `),z(20,`code`),J(21,`createEffect`),B(),J(22,`, `),z(23,`code`),J(24,`createSelector`),B(),J(25,` and `),z(26,`code`),J(27,`createFeature`),B(),J(28,`. `),B()())}function kR(e,t){if(e&1){let e=W();z(0,`button`,132),G(`click`,function(){let t=O(e).$implicit,n=K(2);return k(n.kind.set(n.kind()===t.kind?null:t.kind))}),V(1,`span`,35),z(2,`span`,137),J(3),B(),z(4,`span`,133),J(5),B()()}if(e&2){let e=t.$implicit,n=K(2);q(`active`,n.kind()===e.kind),N(`aria-pressed`,n.kind()===e.kind),M(),j_(`background`,n.kindColor(e.kind)),M(2),Y(n.kindLabel(e.kind)),M(2),Y(e.count)}}function AR(e,t){if(e&1&&(z(0,`p`,142),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.detail)}}function jR(e,t){if(e&1&&(z(0,`li`,136)(1,`div`,138),V(2,`span`,35),z(3,`span`,139),J(4),B(),z(5,`span`,40),J(6),B()(),z(7,`div`,140),V(8,`app-source-link`,141),B(),P(9,AR,2,1,`p`,142),B()),e&2){let e=t.$implicit,n=K(2);M(2),j_(`background`,n.kindColor(e.kind)),M(2),Y(e.name),M(2),Y(n.kindLabel(e.kind)),M(2),R(`file`,e.file)(`line`,e.line),M(),F(e.detail?9:-1)}}function MR(e,t){if(e&1){let e=W();z(0,`li`)(1,`div`,23)(2,`p`,27),J(3,`No declarations match.`),B(),z(4,`button`,29),G(`click`,function(){return O(e),k(K(2).clearFilters())}),J(5,`Clear filters`),B()()()}}function NR(e,t){if(e&1){let e=W();z(0,`div`,131)(1,`button`,132),G(`click`,function(){return O(e),k(K().kind.set(null))}),J(2,` All `),z(3,`span`,133),J(4),B()(),I(5,kR,6,7,`button`,134,XI),B(),z(7,`ul`,135),I(8,jR,10,7,`li`,136,ZI,!1,MR,6,0,`li`),B()}if(e&2){let e=K();M(),q(`active`,!e.kind()),N(`aria-pressed`,!e.kind()),M(3),Y(e.sourceEntries().length),M(),L(e.groupedEntries()),M(3),L(e.filteredEntries())}}var PR={action:`#f59e0b`,reducer:`#a78bfa`,effect:`#fb923c`,selector:`#60a5fa`,feature:`#34d399`,"store-setup":`#94a3b8`,"signal-store":`#e879f9`,"signal-state":`#22d3ee`,"signal-method":`#fb7185`,store:`#a78bfa`,event:`var(--warn)`},FR={"signal-store":`signalStore`,"signal-state":`signalState`,"signal-method":`signalMethod`,"store-setup":`store setup`,store:`@ngrx/store`,event:`event`},IR={dispatch:`store.dispatch(action)`,effect:`NgRx effect (Store.next)`,reactive:`store.dispatch(() => action)`};function LR(e){if(!e.trim())return{};let t;try{t=JSON.parse(e)}catch{return{error:`The payload is not valid JSON.`}}return!t||typeof t!=`object`||Array.isArray(t)?{error:`The payload must be a JSON object, like {"id": 7}.`}:Object.prototype.hasOwnProperty.call(t,`type`)?{error:`The payload cannot have a "type" key. Put the action type in the Type field.`}:{payload:t}}var RR=new Set([`action`,`reducer`,`effect`,`selector`,`feature`,`store-setup`]),zR=class e{rpc=$(null);canRestore=Q(()=>AE(this.rpc(),`ngrx`));restoreOff=nE(`ngrx`);filter=j(``);kind=j(null);sourceEntries=j([]);sourceLoaded=j(!1);pages=j([]);failed=j(!1);stateLoaded=j(!1);selectedPageId=j(null);hostPageId=uE();maxLog=Q(()=>kE(this.rpc()).limits.changeLog);selectedStoreId=j(null);focusEventSeq=j(null);eventDetailHeading=Kv(`eventDetailHeading`);busy=j(!1);focusLatest=j(!1);focusConfirm=j(null);cancelButton=Kv(`cancelButton`);restoreButton=Kv(`restoreButton`);stateTree=Kv(`stateTree`);filterInput=Kv(`filterInput`);latestButton=Kv(`latestButton`);message=j(``);destroyRef=E(ws);unsubscribe=null;page=Q(()=>{let e=this.pages();return e.find(e=>e.pageId===this.selectedPageId())??e.find(e=>e.pageId===this.hostPageId)??e[0]??null});logKey=Q(()=>{let e=this.page();return{pageId:e?.pageId??null,log:e?.log??[]}});logSession=Nv({source:this.logKey,computation:(e,t)=>t?kI(t.source,e)?t.value:t.value+1:0});selectedChangeSeq=Nv({source:this.logSession,computation:()=>null});selectedEventSeq=Nv({source:this.logSession,computation:()=>null});confirmSeq=Nv({source:this.logSession,computation:()=>null});pageOptions=Q(()=>this.pages().map(e=>({value:e.pageId,label:e.title||e.url,hint:e.url})));liveStores=Q(()=>{let e=this.page();if(!e)return[];let t=e.stores.map(e=>({id:e.id,label:e.name??e.references[0]??e.className,kind:e.kind,scope:e.scope,signal:e}));return e.classic&&t.push({id:`store`,label:`Store`,kind:`store`,scope:e.classic.scope,classic:e.classic}),t});filteredStores=Q(()=>{let e=this.filter().trim().toLowerCase();return e?this.liveStores().filter(t=>t.label.toLowerCase().includes(e)||t.kind.includes(e)||(t.signal?.stateKeys??[]).some(t=>t.toLowerCase().includes(e))||(this.page()?.log??[]).some(n=>n.storeId===t.id&&n.type.toLowerCase().includes(e))):this.liveStores()});store=Q(()=>{let e=this.liveStores();return e.find(e=>e.id===this.selectedStoreId())??e[0]??null});stateText=Q(()=>{let e=this.store();return e?PI(e.signal?e.signal.state:e.classic?.state):``});computedEntries=Q(()=>Object.entries(this.store()?.signal?.computed??{}).map(([e,t])=>({key:e,value:FI(t,160),full:PI(t)})));storeLog=Q(()=>{let e=this.store()?.id,t=this.filter().trim().toLowerCase();return(this.page()?.log??[]).filter(n=>n.storeId===e&&(!t||n.type.toLowerCase().includes(t)||this.storeMatches(t))).reverse()});hasEvents=Q(()=>(this.page()?.log??[]).some(e=>e.source===`event`));pageEvents=Q(()=>{let e=this.filter().trim().toLowerCase();return(this.page()?.log??[]).filter(t=>t.source===`event`&&(!e||t.type.toLowerCase().includes(e))).slice().reverse()});changeEntry=Q(()=>{let e=this.selectedChangeSeq();return e===null?null:this.storeLog().find(t=>t.seq===e)??null});eventEntry=Q(()=>{let e=this.selectedEventSeq();return e===null?null:this.pageEvents().find(t=>t.seq===e)??null});dispatchType=j(``);dispatchPayload=j(``);actionTypes=Q(()=>{let e=new Set;for(let t of this.sourceEntries())for(let n of t.types??[])e.add(n);for(let t of this.page()?.log??[])t.source===`store`&&t.action!==void 0&&e.add(t.type);return[...e].sort().slice(0,200)});payloadError=Q(()=>LR(this.dispatchPayload()).error??``);dispatchRequest=Q(()=>{let e=this.dispatchType().trim(),{payload:t,error:n}=LR(this.dispatchPayload());return!e||n?null:{type:`dispatch`,action:e,...t?{payload:t}:{}}});usesSignals=Q(()=>this.sourceEntries().some(e=>e.kind===`signal-store`||e.kind===`signal-state`));usesClassic=Q(()=>this.sourceEntries().some(e=>RR.has(e.kind)));filteredEntries=Q(()=>{let e=this.filter().trim().toLowerCase(),t=this.kind();return this.sourceEntries().filter(n=>(!t||n.kind===t)&&(!e||n.name.toLowerCase().includes(e)||n.kind.includes(e)||(n.detail??``).toLowerCase().includes(e)))});groupedEntries=Q(()=>{let e=new Map;for(let t of this.sourceEntries())e.set(t.kind,(e.get(t.kind)??0)+1);return[...e.entries()].map(([e,t])=>({kind:e,count:t}))});constructor(){dc(()=>{let e=this.rpc();e&&this.load(e)}),cy(()=>{let e=this.latestButton();e&&this.focusLatest()&&!this.busy()&&(this.focusLatest.set(!1),e.nativeElement.focus())}),dc(()=>{let e=this.focusConfirm(),t=e===`cancel`?this.cancelButton():this.restoreButton();e&&t&&(this.focusConfirm.set(null),t.nativeElement.focus())}),cy(()=>{let e=this.focusEventSeq(),t=this.eventDetailHeading();e!==null&&t&&(this.focusEventSeq.set(null),t.nativeElement.focus())}),this.destroyRef.onDestroy(()=>this.unsubscribe?.())}storeMatches(e){let t=this.store();return!!t&&t.label.toLowerCase().includes(e)}async load(e){this.failed.set(!1),mE(e,`get-ngrx-store`).then(e=>this.sourceEntries.set(Array.isArray(e)?e:[])).catch(()=>this.sourceEntries.set([])).finally(()=>this.sourceLoaded.set(!0));try{let t=await e.scope(`pangular`).rpc.sharedState(`ngrx-store`);if(this.destroyRef.destroyed)return;let n=e=>{let t=e;this.pages.set(Array.isArray(t?.pages)?t.pages:[]),e!==void 0&&this.stateLoaded.set(!0)};n(t.value()),this.unsubscribe?.(),this.unsubscribe=t.on(`updated`,n)}catch{this.failed.set(!0)}}retry(){let e=this.rpc();e&&this.load(e)}selectPage(e){this.selectedPageId.set(e),this.selectedStoreId.set(null),this.selectedChangeSeq.set(null),this.selectedEventSeq.set(null),this.confirmSeq.set(null),this.message.set(``)}selectStore(e){this.selectedStoreId.set(e),this.selectedChangeSeq.set(null),this.confirmSeq.set(null),this.message.set(``)}selectChange(e){this.selectedChangeSeq.set(this.selectedChangeSeq()===e?null:e),this.confirmSeq.set(null),this.message.set(``)}copyState(){return this.copyText(this.stateText())}copyDiff(e){return this.copyText(PI(e.diff))}async copyText(e){try{await navigator.clipboard.writeText(e),this.message.set(`Copied.`)}catch{this.message.set(`The clipboard is not available here.`)}}askRestore(e){this.confirmSeq.set(e),this.focusConfirm.set(`cancel`)}cancelRestore(e){e?.preventDefault(),this.confirmSeq.set(null),this.focusConfirm.set(`restore`)}async restore(e,t){let n=this.page();if(!n)return;this.busy.set(!0),this.focusLatest.set(!1);let r=!1;try{let i=await mE(this.rpc(),`request-ngrx-action`,{pageId:n.pageId,request:{type:`restore`,seq:e}});this.message.set(i?.error??i?.message??`Restored.`),r=t&&!i?.error&&!!i?.paused}catch{this.message.set(`Could not reach the page to restore the state.`)}finally{this.busy.set(!1),this.confirmSeq.set(null),this.focusLatest.set(r),r||this.stateTree()?.nativeElement.focus()}}selectEvent(e){let t=this.selectedEventSeq()===e?null:e;this.selectedEventSeq.set(t),t!==null&&this.focusEventSeq.set(t)}async backToLatest(){let e=this.page();if(e){this.busy.set(!0);try{let t=await mE(this.rpc(),`request-ngrx-action`,{pageId:e.pageId,request:{type:`latest`}});this.focusLatest.set(!1),this.stateTree()?.nativeElement.focus(),this.message.set(t?.error??t?.message??`Back on the latest state.`)}catch{this.message.set(`Could not reach the page to go back to the latest state.`)}finally{this.busy.set(!1)}}}canAgain(e){return e.source===`store`&&e.action!==void 0}async dispatchAction(e){e.preventDefault();let t=this.dispatchRequest();t&&await this.send(t,`Could not reach the page to dispatch the action.`)}dispatchAgain(e){return this.send({type:`dispatch-again`,seq:e},`Could not reach the page to dispatch the action again.`)}async send(e,t){let n=this.page();if(!n||this.busy())return;let r=this.logSession();this.busy.set(!0);try{let t=await mE(this.rpc(),`request-ngrx-action`,{pageId:n.pageId,request:e});this.message.set(t?.error??t?.message??`Dispatched.`),t?.entry&&this.logSession()===r&&(this.selectedStoreId.set(`store`),this.selectedChangeSeq.set(t.entry.seq))}catch{this.message.set(t)}finally{this.busy.set(!1)}}clearFilters(){this.filter.set(``),this.kind.set(null),this.filterInput()?.nativeElement.focus()}changeCount(e){return(this.page()?.log??[]).filter(t=>t.storeId===e).length}entityIds(e){return e.slice(0,30)}entityOverflowTitle(e,t){let n=e.slice(30).join(`, `);return t>e.length?`${n} (first ${e.length} of ${t} shown)`:n}kindColor(e){return PR[e]??`var(--text-3)`}kindLabel(e){return FR[e]??e}originText(e){return IR[e]??e}changesLabel=OI;moreChanges=DI;opLabel(e){return e===`add`?`added`:e===`remove`?`removed`:`changed`}prettyText(e){return PI(e)}shortText(e){return FI(e)}formatTime=$D;formatDuration(e){return e<=0?`<1ms`:`${Math.round(e)}ms`}methodDuration(e){let t=[];return e.avgDurationMs!==void 0&&t.push(`avg ${this.formatDuration(e.avgDurationMs)}`),e.lastDurationMs!==void 0&&t.push(`last ${this.formatDuration(e.lastDurationMs)}`),t.length?` · ${t.join(` · `)}`:``}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-store-inspector`]],viewQuery:function(e,t){e&1&&c_(t.eventDetailHeading,II,5)(t.cancelButton,LI,5)(t.restoreButton,RI,5)(t.stateTree,zI,5)(t.filterInput,BI,5)(t.latestButton,VI,5),e&2&&l_(6)},inputs:{rpc:[1,`rpc`]},decls:30,vars:11,consts:[[`filterInput`,``],[`entryDetailTpl`,``],[`stateTree`,``],[`latestButton`,``],[`eventDetailHeading`,``],[`cancelButton`,``],[`restoreButton`,``],[1,`toolbar`],[`type`,`search`,`placeholder`,`Filter stores, changes and declarations…`,`aria-label`,`Filter stores, changes and source declarations`,3,`input`,`keydown.escape`,`value`],[1,`status`],[`aria-hidden`,`true`,1,`live-dot`],[`aria-labelledby`,`ngrx-live-heading`,1,`block`],[1,`section-head`],[`id`,`ngrx-live-heading`],[1,`pill`],[`role`,`alert`,1,`empty`],[`role`,`status`,1,`empty`],[1,`empty`],[1,`live-layout`],[`role`,`status`,1,`message`],[`aria-labelledby`,`ngrx-events-heading`,1,`block`],[`aria-labelledby`,`ngrx-source-heading`,1,`block`],[`id`,`ngrx-source-heading`],[`role`,`status`,1,`empty`,`compact`],[1,`empty`,`compact`],[`id`,`ngrx-page-label`,1,`visually-hidden`],[`labelledBy`,`ngrx-page-label`,1,`page-select`,3,`valueChange`,`options`,`value`],[1,`empty-title`],[1,`hint`],[`type`,`button`,1,`btn`,3,`click`],[`aria-label`,`Stores on this page`,1,`store-list`],[1,`muted`,`pad`],[1,`store-detail`],[`type`,`button`,1,`store-item`,3,`click`],[1,`store-top`],[`aria-hidden`,`true`,1,`dot`],[1,`store-name`],[1,`store-meta`],[1,`detail-head`],[1,`chips`],[1,`chip`],[1,`chip`,`mono`,3,`file`],[1,`refs`],[1,`paused`],[1,`facts`],[`aria-labelledby`,`ngrx-state-heading`,1,`fact`],[1,`fact-head`],[`id`,`ngrx-state-heading`],[`type`,`button`,`aria-label`,`Copy state`,1,`btn`,`copy`,3,`click`],[`tabindex`,`0`,`aria-labelledby`,`ngrx-state-heading`,1,`tree`],[`aria-labelledby`,`ngrx-log-heading`,1,`log`],[`id`,`ngrx-log-heading`],[`what`,`changes on this page`,`limit`,`changeLog`,3,`dropped`,`max`],[1,`log-layout`],[`appRovingList`,`button.log-item`,1,`log-list`],[`id`,`ngrx-change-detail`],[`aria-labelledby`,`ngrx-dispatch-heading`,1,`dispatch`],[`type`,`button`,1,`btn`,`primary`,3,`click`,`disabled`],[`id`,`store-latest-off`,1,`hint`,`small`],[`aria-labelledby`,`ngrx-computed-heading`,1,`fact`],[`id`,`ngrx-computed-heading`],[1,`kv`],[1,`muted`],[`id`,`ngrx-methods-heading`,1,`spaced`],[`aria-labelledby`,`ngrx-methods-heading`,1,`methods`],[`aria-labelledby`,`ngrx-entities-heading`,1,`fact`],[3,`title`],[1,`chip`,`mono`],[1,`tag`],[1,`calls`],[`id`,`ngrx-entities-heading`],[1,`entities`],[1,`entity-group`],[1,`entity-head`],[1,`entity-count`],[1,`chips`,`entity-ids`],[1,`chip`,`more`,3,`title`],[`type`,`button`,1,`log-item`,3,`click`],[1,`seq`],[1,`log-type-row`],[1,`log-type`,3,`title`],[1,`tag`,3,`title`],[1,`log-meta`],[3,`ngTemplateOutlet`,`ngTemplateOutletContext`],[`id`,`ngrx-dispatch-heading`],[1,`dispatch-form`,3,`submit`],[`required`,``,`spellcheck`,`false`,`autocomplete`,`off`,`list`,`ngrx-action-types`,`placeholder`,`e.g. [Cart] Add Item`,3,`input`,`value`],[`id`,`ngrx-action-types`],[3,`value`],[1,`optional`],[`rows`,`3`,`spellcheck`,`false`,`placeholder`,`e.g. {"id": 7}`,`aria-describedby`,`ngrx-payload-error`,3,`input`,`value`],[`id`,`ngrx-payload-error`,1,`field-error`],[1,`actions`],[`type`,`submit`,1,`btn`,`primary`,3,`disabled`],[`id`,`store-dispatch-off`,1,`hint`,`small`],[`id`,`ngrx-events-heading`],[1,`intro`],[`appRovingList`,`button.event-item`,`aria-label`,`Dispatched events`,1,`events-list`],[`id`,`ngrx-event-detail`,`tabindex`,`-1`,1,`event-detail-focus`],[`type`,`button`,1,`event-item`,3,`click`],[1,`event-type`,`mono`,3,`title`],[1,`event-payload`,3,`title`],[1,`event-time`],[1,`entry`],[`role`,`heading`,1,`entry-heading`,3,`id`],[`role`,`group`,1,`confirm`],[1,`hint`,`small`],[1,`code`],[1,`mono`],[1,`sub-head`],[`role`,`heading`,1,`sub`],[`type`,`button`,1,`btn`,`copy`],[`type`,`button`,1,`btn`,`copy`,3,`click`],[1,`diff`],[3,`class`],[1,`op`],[1,`path`],[1,`values`],[1,`before`],[1,`after`],[`aria-hidden`,`true`,1,`arrow`],[1,`visually-hidden`],[`role`,`group`,1,`confirm`,3,`keydown.escape`],[3,`id`],[1,`entry-actions`],[`type`,`button`,1,`btn`,`restore`,3,`disabled`],[`type`,`button`,1,`btn`,3,`disabled`],[1,`hint`,`small`,3,`id`],[`type`,`button`,1,`btn`,`restore`,3,`click`,`disabled`],[`type`,`button`,1,`btn`,3,`click`,`disabled`],[`aria-hidden`,`true`,1,`spinner`],[`role`,`group`,`aria-label`,`Filter declarations by kind`,1,`kinds`],[`type`,`button`,1,`kind-chip`,3,`click`],[1,`count`],[`type`,`button`,1,`kind-chip`,3,`active`],[1,`nodes`],[1,`node-card`],[1,`chip-text`],[1,`node-header`],[1,`node-label`],[1,`node-meta`],[1,`file`,3,`file`,`line`],[1,`detail`]],template:function(e,t){e&1&&(z(0,`div`,7)(1,`input`,8,0),G(`input`,function(e){return t.filter.set(e.target.value)})(`keydown.escape`,function(){return t.filter.set(``)}),B(),P(3,QI,3,2),z(4,`span`,9),V(5,`span`,10),J(6),B()(),z(7,`section`,11)(8,`div`,12)(9,`h2`,13),J(10,`Live stores`),B(),P(11,$I,2,1,`span`,14),B(),P(12,eL,7,0,`div`,15)(13,tL,3,0,`div`,16)(14,nL,5,0,`div`,17)(15,oL,4,1,`div`,17)(16,WL,6,2,`div`,18),z(17,`p`,19),J(18),B()(),P(19,YL,13,3,`section`,20),ag(20,TR,18,16,`ng-template`,null,1,wv),z(22,`section`,21)(23,`div`,12)(24,`h2`,22),J(25,`Source declarations`),B(),P(26,ER,2,1,`span`,14),B(),P(27,DR,4,0,`div`,23)(28,OR,29,0,`div`,24)(29,NR,11,5),B()),e&2&&(M(),R(`value`,t.filter()),M(2),F(t.pages().length>1?3:-1),M(),q(`on`,!!t.page()),M(2),X(` `,t.page()?`Live`:`No page connected`,` `),M(5),F(t.liveStores().length?11:-1),M(),F(t.failed()?12:t.stateLoaded()?t.page()?t.liveStores().length?16:15:14:13),M(6),Y(t.message()),M(),F(t.hasEvents()?19:-1),M(7),F(t.sourceEntries().length?26:-1),M(),F(t.sourceLoaded()?t.sourceEntries().length===0?28:29:27))},dependencies:[iO,LN,GD,sb,wO],styles:[`[_nghost-%COMP%] { display: grid; gap: 24px; min-width: 0; @@ -7004,7 +7039,7 @@ textarea[aria-invalid=true][_ngcontent-%COMP%] { .kv[_ngcontent-%COMP%] { grid-template-columns: minmax(0, 1fr); } -}`]})},CR=[`heading`];function wR(e,t){if(e&1){let e=W();H(0,`div`,6)(1,`p`,9),J(2,`Could not explain this field. The devtools server did not answer.`),U(),H(3,`button`,11),Qg(`click`,function(){return O(e),k(K().retry())}),J(4,`Try again`),U()()}}function TR(e,t){if(e&1&&(H(0,`pre`,7),J(1),U()),e&2){let e=K();N(`aria-busy`,e.text()===null?`true`:null),M(),Y(e.text()??`Loading…`)}}function ER(e,t){if(e&1){let e=W();H(0,`div`,8)(1,`label`,15),J(2),U(),H(3,`input`,16),Qg(`input`,function(t){return O(e),k(K().draft.set(t.target.value))})(`keydown.enter`,function(){return O(e),k(K().setValue())}),U(),H(4,`button`,17),Qg(`click`,function(){return O(e),k(K().setValue())}),J(5,` Set `),U()()}if(e&2){let e=K();M(2),X(`New value for `,e.node().path),M(),Vg(`value`,e.draft()),M(),Vg(`disabled`,!e.canWrite()),N(`aria-describedby`,e.canWrite()?null:`field-writes-off`)}}function DR(e,t){if(e&1&&(H(0,`p`,9),J(1),H(2,`a`,18),J(3,`How to unmask it`),U()()),e&2){let e=K();M(),X(` No Set editor: this field is redacted (`,e.redactLabel(e.node().redacted),`). `),M(),Vg(`href`,e.unmaskDocsUrl,ku)}}function OR(e,t){if(e&1&&(H(0,`p`,13),J(1),U()),e&2){let e=K();M(),Y(e.writesOff)}}var kR=class e{form=$.required();node=$.required();version=$(0);rpc=$(null);closed=Ov();canWrite=Q(()=>SE(this.rpc(),`forms`));writesOff=JT(`forms`);redactLabel=hE;unmaskDocsUrl=gE;target=Q(()=>`${this.form().id}|${this.node().path}`);text=Tv({source:this.target,computation:()=>null});failed=Tv({source:this.target,computation:()=>!1});attempt=j(0);heading=Rv.required(`heading`);host=E(Ml);draft=Tv({source:this.target,computation:()=>``});message=Tv({source:this.target,computation:()=>``});constructor(){uc(()=>{let e=this.form().id,t=this.node().path;this.version(),this.attempt();let n=this.rpc();Cv(()=>this.load(n,e,t))}),ey(()=>{this.target();let e=Cv(this.heading).nativeElement;this.host.nativeElement.scrollIntoView?.({block:`nearest`}),e.focus({preventScroll:!0})})}async load(e,t,n){if(!e)return;let r=await pE(e,`forms-explain`,{kind:`field`,form:t,path:n});if(this.form().id===t&&this.node().path===n){if(r===null){this.failed.set(!0);return}this.failed.set(!1),this.text.set(bE(r))}}retry(){this.failed.set(!1),this.attempt.update(e=>e+1)}async act(e){let t=this.form().id,n=this.node().path,r=await _E(this.rpc(),{action:e,formId:t,path:n});this.form().id===t&&this.node().path===n&&this.message.set(r.expression?`${vE(r)} ${r.expression}`:vE(r))}async setValue(){let e=this.form().id,t=this.node().path,n=await _E(this.rpc(),{action:`set-value`,formId:e,path:t,value:this.draft(),coerce:!0,mode:`user`});this.form().id===e&&this.node().path===t&&this.message.set(vE(n))}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-forms-field-detail`]],viewQuery:function(e,t){e&1&&e_(t.heading,CR,5),e&2&&t_()},hostAttrs:[`role`,`region`,`aria-labelledby`,`forms-field-heading`],inputs:{form:[1,`form`],node:[1,`node`],version:[1,`version`],rpc:[1,`rpc`]},outputs:{closed:`closed`},decls:26,vars:11,consts:[[`heading`,``],[1,`head`],[1,`section-label`],[`id`,`forms-field-heading`,`tabindex`,`-1`],[1,`tag`],[`type`,`button`,1,`small`,`close`,3,`click`],[`role`,`alert`,1,`failed`],[1,`explain`],[1,`editor`],[1,`muted`],[`role`,`group`,`aria-label`,`Field actions`,1,`row`],[`type`,`button`,1,`small`,3,`click`],[`type`,`button`,1,`small`,3,`click`,`disabled`],[`id`,`field-writes-off`,1,`muted`],[`role`,`status`,1,`status`],[`for`,`field-value`,1,`sr-only`],[`id`,`field-value`,`type`,`text`,`placeholder`,`New value, read as the current value's type`,`autocomplete`,`off`,`spellcheck`,`false`,1,`field-input`,3,`input`,`keydown.enter`,`value`],[`type`,`button`,1,`small`,`primary`,3,`click`,`disabled`],[`target`,`_blank`,`rel`,`noopener noreferrer`,3,`href`]],template:function(e,t){e&1&&(H(0,`div`,1)(1,`span`,2),J(2,`Field`),U(),H(3,`h3`,3,0),J(5),U(),H(6,`span`,4),J(7),U(),H(8,`button`,5),Qg(`click`,function(){return t.closed.emit()}),J(9,` Close `),U()(),P(10,wR,5,0,`div`,6)(11,TR,2,2,`pre`,7),P(12,ER,6,4,`div`,8)(13,DR,4,2,`p`,9),H(14,`div`,10)(15,`button`,11),Qg(`click`,function(){return t.act(`focus`)}),J(16,`Focus`),U(),H(17,`button`,12),Qg(`click`,function(){return t.act(`mark-touched`)}),J(18,` Touch `),U(),H(19,`button`,12),Qg(`click`,function(){return t.act(`revalidate`)}),J(20,` Revalidate `),U(),H(21,`button`,11),Qg(`click`,function(){return t.act(`store-as-global`)}),J(22,`Store as global`),U()(),P(23,OR,2,1,`p`,13),H(24,`p`,14),J(25),U()),e&2&&(M(5),Y(t.node().path||`(form)`),M(2),Y(t.node().type),M(),N(`aria-label`,`Close details for `+(t.node().path||`the form`)),M(2),F(t.failed()?10:11),M(2),F(t.node().type===`control`&&!t.node().redacted?12:t.node().type===`control`?13:-1),M(5),Vg(`disabled`,!t.canWrite()),N(`aria-describedby`,t.canWrite()?null:`field-writes-off`),M(2),Vg(`disabled`,!t.canWrite()),N(`aria-describedby`,t.canWrite()?null:`field-writes-off`),M(4),F(t.canWrite()?-1:23),M(2),Y(t.message()))},styles:[`.muted[_ngcontent-%COMP%] { +}`]})},BR=[`heading`];function VR(e,t){if(e&1){let e=W();H(0,`div`,6)(1,`p`,9),J(2,`Could not explain this field. The devtools server did not answer.`),U(),H(3,`button`,11),n_(`click`,function(){return O(e),k(K().retry())}),J(4,`Try again`),U()()}}function HR(e,t){if(e&1&&(H(0,`pre`,7),J(1),U()),e&2){let e=K();N(`aria-busy`,e.text()===null?`true`:null),M(),Y(e.text()??`Loading…`)}}function UR(e,t){if(e&1){let e=W();H(0,`div`,8)(1,`label`,15),J(2),U(),H(3,`input`,16),n_(`input`,function(t){return O(e),k(K().draft.set(t.target.value))})(`keydown.enter`,function(){return O(e),k(K().setValue())}),U(),H(4,`button`,17),n_(`click`,function(){return O(e),k(K().setValue())}),J(5,` Set `),U()()}if(e&2){let e=K();M(2),X(`New value for `,e.node().path),M(),Gg(`value`,e.draft()),M(),Gg(`disabled`,!e.canWrite()),N(`aria-describedby`,e.canWrite()?null:`field-writes-off`)}}function WR(e,t){if(e&1&&(H(0,`p`,9),J(1),H(2,`a`,18),J(3,`How to unmask it`),U()()),e&2){let e=K();M(),X(` No Set editor: this field is redacted (`,e.redactLabel(e.node().redacted),`). `),M(),Gg(`href`,e.unmaskDocsUrl,Au)}}function GR(e,t){if(e&1&&(H(0,`p`,13),J(1),U()),e&2){let e=K();M(),Y(e.writesOff)}}var KR=class e{form=$.required();node=$.required();version=$(0);rpc=$(null);closed=Iv();canWrite=Q(()=>AE(this.rpc(),`forms`));writesOff=nE(`forms`);redactLabel=CE;unmaskDocsUrl=wE;target=Q(()=>`${this.form().id}|${this.node().path}`);text=Nv({source:this.target,computation:()=>null});failed=Nv({source:this.target,computation:()=>!1});attempt=j(0);heading=Kv.required(`heading`);host=E(Nl);draft=Nv({source:this.target,computation:()=>``});message=Nv({source:this.target,computation:()=>``});constructor(){dc(()=>{let e=this.form().id,t=this.node().path;this.version(),this.attempt();let n=this.rpc();jv(()=>this.load(n,e,t))}),cy(()=>{this.target();let e=jv(this.heading).nativeElement;this.host.nativeElement.scrollIntoView?.({block:`nearest`}),e.focus({preventScroll:!0})})}async load(e,t,n){if(!e)return;let r=await xE(e,`forms-explain`,{kind:`field`,form:t,path:n});if(this.form().id===t&&this.node().path===n){if(r===null){this.failed.set(!0);return}this.failed.set(!1),this.text.set(OE(r))}}retry(){this.failed.set(!1),this.attempt.update(e=>e+1)}async act(e){let t=this.form().id,n=this.node().path,r=await TE(this.rpc(),{action:e,formId:t,path:n});this.form().id===t&&this.node().path===n&&this.message.set(r.expression?`${EE(r)} ${r.expression}`:EE(r))}async setValue(){let e=this.form().id,t=this.node().path,n=await TE(this.rpc(),{action:`set-value`,formId:e,path:t,value:this.draft(),coerce:!0,mode:`user`});this.form().id===e&&this.node().path===t&&this.message.set(EE(n))}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-forms-field-detail`]],viewQuery:function(e,t){e&1&&c_(t.heading,BR,5),e&2&&l_()},hostAttrs:[`role`,`region`,`aria-labelledby`,`forms-field-heading`],inputs:{form:[1,`form`],node:[1,`node`],version:[1,`version`],rpc:[1,`rpc`]},outputs:{closed:`closed`},decls:26,vars:11,consts:[[`heading`,``],[1,`head`],[1,`section-label`],[`id`,`forms-field-heading`,`tabindex`,`-1`],[1,`tag`],[`type`,`button`,1,`small`,`close`,3,`click`],[`role`,`alert`,1,`failed`],[1,`explain`],[1,`editor`],[1,`muted`],[`role`,`group`,`aria-label`,`Field actions`,1,`row`],[`type`,`button`,1,`small`,3,`click`],[`type`,`button`,1,`small`,3,`click`,`disabled`],[`id`,`field-writes-off`,1,`muted`],[`role`,`status`,1,`status`],[`for`,`field-value`,1,`sr-only`],[`id`,`field-value`,`type`,`text`,`placeholder`,`New value, read as the current value's type`,`autocomplete`,`off`,`spellcheck`,`false`,1,`field-input`,3,`input`,`keydown.enter`,`value`],[`type`,`button`,1,`small`,`primary`,3,`click`,`disabled`],[`target`,`_blank`,`rel`,`noopener noreferrer`,3,`href`]],template:function(e,t){e&1&&(H(0,`div`,1)(1,`span`,2),J(2,`Field`),U(),H(3,`h3`,3,0),J(5),U(),H(6,`span`,4),J(7),U(),H(8,`button`,5),n_(`click`,function(){return t.closed.emit()}),J(9,` Close `),U()(),P(10,VR,5,0,`div`,6)(11,HR,2,2,`pre`,7),P(12,UR,6,4,`div`,8)(13,WR,4,2,`p`,9),H(14,`div`,10)(15,`button`,11),n_(`click`,function(){return t.act(`focus`)}),J(16,`Focus`),U(),H(17,`button`,12),n_(`click`,function(){return t.act(`mark-touched`)}),J(18,` Touch `),U(),H(19,`button`,12),n_(`click`,function(){return t.act(`revalidate`)}),J(20,` Revalidate `),U(),H(21,`button`,11),n_(`click`,function(){return t.act(`store-as-global`)}),J(22,`Store as global`),U()(),P(23,GR,2,1,`p`,13),H(24,`p`,14),J(25),U()),e&2&&(M(5),Y(t.node().path||`(form)`),M(2),Y(t.node().type),M(),N(`aria-label`,`Close details for `+(t.node().path||`the form`)),M(2),F(t.failed()?10:11),M(2),F(t.node().type===`control`&&!t.node().redacted?12:t.node().type===`control`?13:-1),M(5),Gg(`disabled`,!t.canWrite()),N(`aria-describedby`,t.canWrite()?null:`field-writes-off`),M(2),Gg(`disabled`,!t.canWrite()),N(`aria-describedby`,t.canWrite()?null:`field-writes-off`),M(4),F(t.canWrite()?-1:23),M(2),Y(t.message()))},styles:[`.muted[_ngcontent-%COMP%] { color: var(--%NS%text-2); } @@ -7345,7 +7380,7 @@ h3[_ngcontent-%COMP%]:focus-visible { .status[_ngcontent-%COMP%]:empty { height: 0; margin: -12px 0 0; -}`]})};function AR(e,t){if(e&1){let e=W();H(0,`div`,0)(1,`p`,4),J(2,`Could not explain this form`),U(),H(3,`p`),J(4,`The devtools server did not answer. Check that the app is running, then try again.`),U(),H(5,`button`,2),Qg(`click`,function(){return O(e),k(K().retry())}),J(6,`Try again`),U()()}}function jR(e,t){if(e&1&&(H(0,`section`,5)(1,`h3`,6),J(2,`Submit`),U(),H(3,`pre`,7),J(4),U()(),H(5,`section`,8)(6,`h3`,9),J(7,`Payload`),U(),H(8,`pre`,7),J(9),U()()),e&2){let e=K();M(3),N(`aria-busy`,e.submit()===null?`true`:null),M(),Y(e.submit()??`Loading…`),M(4),N(`aria-busy`,e.payload()===null?`true`:null),M(),Y(e.payload()??`Loading…`)}}function MR(e,t){if(e&1){let e=W();H(0,`div`,0)(1,`p`,3),J(2,`Could not check this form`),U(),H(3,`p`),J(4,`The devtools server did not answer. Check that the app is running, then try again.`),U(),H(5,`button`,4),Qg(`click`,function(){return O(e),k(K().retry())}),J(6,`Try again`),U()()}}function NR(e,t){e&1&&(H(0,`div`,1),Fg(1,`span`,5),H(2,`p`),J(3,`Checking the form for problems…`),U()())}function PR(e,t){e&1&&(H(0,`div`,2)(1,`span`,6),A(),H(2,`svg`,7),Fg(3,`path`,8),U()(),ps(),H(4,`p`,3),J(5,`No problems found`),U(),H(6,`p`),J(7,`For generic accessibility checks, run axe on the page.`),U()())}function FR(e,t){if(e&1){let e=W();H(0,`span`,15),J(1,`at `),H(2,`button`,19),Qg(`click`,function(){let t=O(e);return k(K(3).showField.emit(t))}),H(3,`span`,20),J(4,`Show field `),U(),H(5,`code`),J(6),U()()()}e&2&&(M(6),Y(t))}function IR(e,t){if(e&1&&(H(0,`li`)(1,`div`,12)(2,`span`,13),J(3),U(),H(4,`code`,14),J(5),U(),P(6,FR,7,1,`span`,15),U(),H(7,`p`,16),J(8),U(),H(9,`p`,17)(10,`span`,18),J(11,`Fix`),U(),J(12),U()()),e&2){let e,n=t.$implicit;N(`data-severity`,n.severity),M(2),N(`data-tone`,n.severity===`info`?``:n.severity===`error`?`bad`:`warn`),M(),Y(n.severity),M(2),Y(n.rule),M(),F((e=n.path)?6:-1,e),M(2),Y(n.message),M(4),X(` `,n.fix)}}function LR(e,t){if(e&1&&(H(0,`p`,9)(1,`span`,10),J(2),U(),J(3),U(),H(4,`ul`,11),I(5,IR,13,7,`li`,null,Cg),U()),e&2){let e=K();M(2),Y(e.findings().length),M(),X(` `,e.findings().length===1?`finding`:`findings`,` `),M(2),L(e.findings())}}var RR=class e{formId=$.required();version=$(0);rpc=$(null);submit=Tv({source:this.formId,computation:()=>null});payload=Tv({source:this.formId,computation:()=>null});failed=Tv({source:this.formId,computation:()=>!1});message=j(``);attempt=j(0);constructor(){uc(()=>{let e=this.formId();this.version(),this.attempt();let t=this.rpc();t&&Cv(async()=>{let[n,r]=await Promise.all([pE(t,`forms-explain`,{kind:`submit`,form:e}),pE(t,`forms-explain`,{kind:`payload`,form:e})]);if(this.formId()===e){if(n===null||r===null){this.failed.set(!0);return}this.failed.set(!1),this.submit.set(bE(n)),this.payload.set(bE(r))}})})}retry(){this.failed.set(!1),this.attempt.update(e=>e+1)}async copyFixture(){let e=(await pE(this.rpc(),`forms-explain`,{kind:`fixture`,form:this.formId()})??``).match(/```ts\n([\s\S]*)```\s*$/)?.[1];if(!e){this.message.set(`No test fixture is available for this form.`);return}try{await navigator.clipboard.writeText(e),this.message.set(`Copied.`)}catch{this.message.set(`Clipboard is not available here.`)}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-forms-submit`]],inputs:{formId:[1,`formId`],version:[1,`version`],rpc:[1,`rpc`]},decls:7,vars:2,consts:[[`role`,`alert`,1,`empty-state`],[1,`fixture`],[`type`,`button`,1,`small`,3,`click`],[`role`,`status`,1,`status`],[1,`empty-title`],[`aria-labelledby`,`forms-submit-title`,1,`block`],[`id`,`forms-submit-title`,1,`section-label`],[1,`explain`],[`aria-labelledby`,`forms-payload-title`,1,`block`],[`id`,`forms-payload-title`,1,`section-label`]],template:function(e,t){e&1&&(P(0,AR,7,0,`div`,0)(1,jR,10,4),H(2,`div`,1)(3,`button`,2),Qg(`click`,function(){return t.copyFixture()}),J(4,`Copy test fixture`),U(),H(5,`span`,3),J(6),U()()),e&2&&(F(+!t.failed()),M(6),Y(t.message()))},styles:[`.muted[_ngcontent-%COMP%] { +}`]})};function qR(e,t){if(e&1){let e=W();H(0,`div`,0)(1,`p`,4),J(2,`Could not explain this form`),U(),H(3,`p`),J(4,`The devtools server did not answer. Check that the app is running, then try again.`),U(),H(5,`button`,2),n_(`click`,function(){return O(e),k(K().retry())}),J(6,`Try again`),U()()}}function JR(e,t){if(e&1&&(H(0,`section`,5)(1,`h3`,6),J(2,`Submit`),U(),H(3,`pre`,7),J(4),U()(),H(5,`section`,8)(6,`h3`,9),J(7,`Payload`),U(),H(8,`pre`,7),J(9),U()()),e&2){let e=K();M(3),N(`aria-busy`,e.submit()===null?`true`:null),M(),Y(e.submit()??`Loading…`),M(4),N(`aria-busy`,e.payload()===null?`true`:null),M(),Y(e.payload()??`Loading…`)}}function YR(e,t){if(e&1){let e=W();H(0,`div`,0)(1,`p`,3),J(2,`Could not check this form`),U(),H(3,`p`),J(4,`The devtools server did not answer. Check that the app is running, then try again.`),U(),H(5,`button`,4),n_(`click`,function(){return O(e),k(K().retry())}),J(6,`Try again`),U()()}}function XR(e,t){e&1&&(H(0,`div`,1),zg(1,`span`,5),H(2,`p`),J(3,`Checking the form for problems…`),U()())}function ZR(e,t){e&1&&(H(0,`div`,2)(1,`span`,6),A(),H(2,`svg`,7),zg(3,`path`,8),U()(),ms(),H(4,`p`,3),J(5,`No problems found`),U(),H(6,`p`),J(7,`For generic accessibility checks, run axe on the page.`),U()())}function QR(e,t){if(e&1){let e=W();H(0,`span`,15),J(1,`at `),H(2,`button`,19),n_(`click`,function(){let t=O(e);return k(K(3).showField.emit(t))}),H(3,`span`,20),J(4,`Show field `),U(),H(5,`code`),J(6),U()()()}e&2&&(M(6),Y(t))}function $R(e,t){if(e&1&&(H(0,`li`)(1,`div`,12)(2,`span`,13),J(3),U(),H(4,`code`,14),J(5),U(),P(6,QR,7,1,`span`,15),U(),H(7,`p`,16),J(8),U(),H(9,`p`,17)(10,`span`,18),J(11,`Fix`),U(),J(12),U()()),e&2){let e,n=t.$implicit;N(`data-severity`,n.severity),M(2),N(`data-tone`,n.severity===`info`?``:n.severity===`error`?`bad`:`warn`),M(),Y(n.severity),M(2),Y(n.rule),M(),F((e=n.path)?6:-1,e),M(2),Y(n.message),M(4),X(` `,n.fix)}}function ez(e,t){if(e&1&&(H(0,`p`,9)(1,`span`,10),J(2),U(),J(3),U(),H(4,`ul`,11),I(5,$R,13,7,`li`,null,Dg),U()),e&2){let e=K();M(2),Y(e.findings().length),M(),X(` `,e.findings().length===1?`finding`:`findings`,` `),M(2),L(e.findings())}}var tz=class e{formId=$.required();version=$(0);rpc=$(null);submit=Nv({source:this.formId,computation:()=>null});payload=Nv({source:this.formId,computation:()=>null});failed=Nv({source:this.formId,computation:()=>!1});message=j(``);attempt=j(0);constructor(){dc(()=>{let e=this.formId();this.version(),this.attempt();let t=this.rpc();t&&jv(async()=>{let[n,r]=await Promise.all([xE(t,`forms-explain`,{kind:`submit`,form:e}),xE(t,`forms-explain`,{kind:`payload`,form:e})]);if(this.formId()===e){if(n===null||r===null){this.failed.set(!0);return}this.failed.set(!1),this.submit.set(OE(n)),this.payload.set(OE(r))}})})}retry(){this.failed.set(!1),this.attempt.update(e=>e+1)}async copyFixture(){let e=(await xE(this.rpc(),`forms-explain`,{kind:`fixture`,form:this.formId()})??``).match(/```ts\n([\s\S]*)```\s*$/)?.[1];if(!e){this.message.set(`No test fixture is available for this form.`);return}try{await navigator.clipboard.writeText(e),this.message.set(`Copied.`)}catch{this.message.set(`Clipboard is not available here.`)}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-forms-submit`]],inputs:{formId:[1,`formId`],version:[1,`version`],rpc:[1,`rpc`]},decls:7,vars:2,consts:[[`role`,`alert`,1,`empty-state`],[1,`fixture`],[`type`,`button`,1,`small`,3,`click`],[`role`,`status`,1,`status`],[1,`empty-title`],[`aria-labelledby`,`forms-submit-title`,1,`block`],[`id`,`forms-submit-title`,1,`section-label`],[1,`explain`],[`aria-labelledby`,`forms-payload-title`,1,`block`],[`id`,`forms-payload-title`,1,`section-label`]],template:function(e,t){e&1&&(P(0,qR,7,0,`div`,0)(1,JR,10,4),H(2,`div`,1)(3,`button`,2),n_(`click`,function(){return t.copyFixture()}),J(4,`Copy test fixture`),U(),H(5,`span`,3),J(6),U()()),e&2&&(F(+!t.failed()),M(6),Y(t.message()))},styles:[`.muted[_ngcontent-%COMP%] { color: var(--%NS%text-2); } @@ -7617,7 +7652,7 @@ code[_ngcontent-%COMP%] { flex-wrap: wrap; gap: 8px 12px; align-items: center; -}`]})},zR=class e{formId=$.required();version=$(0);rpc=$(null);showField=Ov();findings=Tv({source:this.formId,computation:()=>null});failed=Tv({source:this.formId,computation:()=>!1});attempt=j(0);constructor(){uc(()=>{let e=this.formId();this.version(),this.attempt();let t=this.rpc();t&&Cv(async()=>{let n=await pE(t,`forms-lint`,{form:e});this.formId()===e&&(this.failed.set(n===null),n&&this.findings.set(n))})})}retry(){this.failed.set(!1),this.attempt.update(e=>e+1)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-forms-lint`]],inputs:{formId:[1,`formId`],version:[1,`version`],rpc:[1,`rpc`]},outputs:{showField:`showField`},decls:4,vars:1,consts:[[`role`,`alert`,1,`empty-state`],[`role`,`status`,1,`empty-state`],[1,`empty-state`],[1,`empty-title`],[`type`,`button`,1,`small`,3,`click`],[`aria-hidden`,`true`,1,`spinner`],[`aria-hidden`,`true`,1,`ok-icon`],[`width`,`16`,`height`,`16`,`viewBox`,`0 0 24 24`,`fill`,`none`,`stroke`,`currentColor`,`stroke-width`,`2.5`,`stroke-linecap`,`round`,`stroke-linejoin`,`round`],[`d`,`M20 6 9 17l-5-5`],[1,`summary`],[1,`tabular`],[1,`findings`],[1,`meta`],[1,`tag`,`severity`],[1,`rule`],[1,`muted`,`path`],[1,`message`],[1,`fix`],[1,`fix-label`],[`type`,`button`,1,`summary-link`,3,`click`],[1,`sr-only`]],template:function(e,t){e&1&&P(0,MR,7,0,`div`,0)(1,NR,4,0,`div`,1)(2,PR,8,0,`div`,2)(3,LR,7,2),e&2&&F(t.failed()?0:t.findings()===null?1:t.findings().length?3:2)},styles:[`.muted[_ngcontent-%COMP%] { +}`]})},nz=class e{formId=$.required();version=$(0);rpc=$(null);showField=Iv();findings=Nv({source:this.formId,computation:()=>null});failed=Nv({source:this.formId,computation:()=>!1});attempt=j(0);constructor(){dc(()=>{let e=this.formId();this.version(),this.attempt();let t=this.rpc();t&&jv(async()=>{let n=await xE(t,`forms-lint`,{form:e});this.formId()===e&&(this.failed.set(n===null),n&&this.findings.set(n))})})}retry(){this.failed.set(!1),this.attempt.update(e=>e+1)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-forms-lint`]],inputs:{formId:[1,`formId`],version:[1,`version`],rpc:[1,`rpc`]},outputs:{showField:`showField`},decls:4,vars:1,consts:[[`role`,`alert`,1,`empty-state`],[`role`,`status`,1,`empty-state`],[1,`empty-state`],[1,`empty-title`],[`type`,`button`,1,`small`,3,`click`],[`aria-hidden`,`true`,1,`spinner`],[`aria-hidden`,`true`,1,`ok-icon`],[`width`,`16`,`height`,`16`,`viewBox`,`0 0 24 24`,`fill`,`none`,`stroke`,`currentColor`,`stroke-width`,`2.5`,`stroke-linecap`,`round`,`stroke-linejoin`,`round`],[`d`,`M20 6 9 17l-5-5`],[1,`summary`],[1,`tabular`],[1,`findings`],[1,`meta`],[1,`tag`,`severity`],[1,`rule`],[1,`muted`,`path`],[1,`message`],[1,`fix`],[1,`fix-label`],[`type`,`button`,1,`summary-link`,3,`click`],[1,`sr-only`]],template:function(e,t){e&1&&P(0,YR,7,0,`div`,0)(1,XR,4,0,`div`,1)(2,ZR,8,0,`div`,2)(3,ez,7,2),e&2&&F(t.failed()?0:t.findings()===null?1:t.findings().length?3:2)},styles:[`.muted[_ngcontent-%COMP%] { color: var(--%NS%text-2); } @@ -7973,7 +8008,7 @@ code[_ngcontent-%COMP%] { font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; -}`]})},BR=[`pathInput`],VR=()=>[],HR=(e,t)=>t.formId+`#`+t.seq;function UR(e,t){e&1&&V(0,`span`,6)}function WR(e,t){if(e&1){let e=W();z(0,`label`)(1,`input`,21),G(`change`,function(){let t=O(e).$implicit;return k(K().filter.set(t))}),B(),J(2),B()}if(e&2){let e=t.$implicit,n=K();M(),R(`value`,e)(`checked`,e===n.filter()),M(),X(` `,e,` `)}}function GR(e,t){if(e&1&&(z(0,`span`,26),J(1),B()),e&2){let e=K().$implicit;N(`data-tone`,e.outcome===`ran`?``:`bad`),M(),Y(e.outcome)}}function KR(e,t){if(e&1&&(z(0,`span`,26),J(1),B()),e&2){let e=K().$implicit;M(),X(`×`,e.count)}}function qR(e,t){if(e&1&&(z(0,`span`,26),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.origin)}}function JR(e,t){if(e&1&&(z(0,`span`,26),J(1),B()),e&2){let e=K().$implicit;N(`data-tone`,e.ms>1e3?`warn`:``),M(),X(`pending `,e.ms,`ms`)}}function YR(e,t){if(e&1&&(z(0,`span`,26),J(1),B()),e&2){let e=K().$implicit;N(`data-tone`,e.renders>20?`warn`:``),M(),Z(``,e.renders,` renders: `,(e.rendered??ov(3,VR)).join(`, `))}}function XR(e,t){if(e&1&&(z(0,`span`,29),J(1),B(),z(2,`span`,30),J(3,`→`),B(),z(4,`span`,9),J(5,`changed to`),B()),e&2){let e=K(2).$implicit;M(),Y(e.prev)}}function ZR(e,t){if(e&1&&(z(0,`div`,27),P(1,XR,6,1),J(2),B()),e&2){let e=K().$implicit;M(),F(e.prev===void 0?-1:1),M(),X(` `,e.detail,` `)}}function QR(e,t){if(e&1&&(z(0,`span`,28),J(1),B()),e&2){let e=K().$implicit;M(),X(`from `,e.caller)}}function $R(e,t){if(e&1&&(z(0,`li`)(1,`time`),J(2),B(),z(3,`div`,22)(4,`div`,23)(5,`code`,24),J(6),B(),z(7,`span`,25),J(8),B(),P(9,GR,2,2,`span`,26),P(10,KR,2,1,`span`,26),P(11,qR,2,1,`span`,26),P(12,JR,2,2,`span`,26),P(13,YR,2,4,`span`,26),B(),P(14,ZR,3,2,`div`,27),P(15,QR,2,1,`span`,28),B()()),e&2){let e=t.$implicit,n=K(2);N(`data-type`,e.type),M(),N(`datetime`,n.iso(e.timestamp)),M(),Y(n.time(e.timestamp)),M(4),Y(e.path||`(form)`),M(2),Y(e.type),M(),F(e.outcome?9:-1),M(),F(e.count&&e.count>1?10:-1),M(),F(e.origin?11:-1),M(),F(e.ms===void 0?-1:12),M(),F(e.renders?13:-1),M(),F(e.prev!==void 0||e.detail?14:-1),M(),F(e.caller?15:-1)}}function ez(e,t){if(e&1&&(z(0,`ol`,19),I(1,$R,16,12,`li`,null,HR),B()),e&2){let e=K();M(),L(e.shown())}}function tz(e,t){if(e&1){let e=W();z(0,`div`,20)(1,`p`,31),J(2,`No events match these filters`),B(),z(3,`p`),J(4,`Change the path, type or origin, or interact with the form to record more.`),B(),z(5,`button`,32),G(`click`,function(){return O(e),k(K().clearFilters())}),J(6,`Clear filters`),B()()}}function nz(e,t){e&1&&(z(0,`div`,20)(1,`p`,31),J(2,`No changes yet`),B(),z(3,`p`),J(4,`Type into the form to see them here.`),B()())}var rz=[`all`,`user`,`code`,`agent`,`devtools`],iz=[`value`,`status`,`touched`,`dirty`,`submit`,`reset`,`added`,`removed`,`moved`,`validators`],az=class e{events=$.required();recording=$(!1);record=Ov();toggle(e){let t=e.target;t.checked=this.recording(),this.record.emit(!this.recording())}origins=rz;filter=j(`all`);pathFilter=j(``);typeFilter=j(`all`);pathInput=Rv(`pathInput`);typeOptions=Q(()=>{let e=new Set(this.events().map(e=>e.type)),t=this.typeFilter();t&&t!==`all`&&e.add(t);let n=iz.filter(t=>e.has(t)),r=[...e].filter(e=>!iz.includes(e)).sort();return[{value:`all`,label:`All types`},...[...n,...r].map(e=>({value:e,label:e}))]});matching=Q(()=>{let e=this.filter(),t=this.typeFilter()??`all`,n=this.pathFilter().trim().toLowerCase();return this.events().filter(r=>(e===`all`||r.origin===e)&&(t===`all`||r.type===t)&&(!n||r.path.toLowerCase().includes(n)))});shown=Q(()=>this.matching().slice(-100).reverse());filtered=Q(()=>this.filter()!==`all`||(this.typeFilter()??`all`)!==`all`||!!this.pathFilter().trim());summary=Q(()=>{let e=this.events().length,t=this.matching().length,n=e=>e===1?`event`:`events`,r=this.filtered()?` matching ${n(t)}`:` ${n(t)}`;return t>100?`Showing the latest 100 of ${t}${r}`:this.filtered()?`${t} of ${e} ${n(e)}`:`${e} ${n(e)}`});filterStatus=Q(()=>(this.filter(),this.typeFilter(),this.pathFilter(),Cv(()=>this.summary())));clearFilters(){this.pathFilter.set(``),this.typeFilter.set(`all`),this.filter.set(`all`),this.pathInput()?.nativeElement.focus()}iso(e){return new Date(e).toISOString()}time=GD;static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-forms-timeline`]],viewQuery:function(e,t){e&1&&e_(t.pathInput,BR,5),e&2&&t_()},inputs:{events:[1,`events`],recording:[1,`recording`]},outputs:{record:`record`},decls:29,vars:10,consts:[[`pathInput`,``],[1,`toolbar`],[1,`record`],[`type`,`checkbox`,3,`change`,`checked`],[1,`record-text`],[1,`record-title`],[`aria-hidden`,`true`,1,`rec-dot`],[1,`record-hint`],[1,`chips`],[1,`sr-only`],[1,`filters`],[1,`search`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`search-icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`type`,`search`,`placeholder`,`Filter by field path…`,`aria-label`,`Filter by field path`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`value`],[`ariaLabel`,`Event type`,3,`valueChange`,`options`,`value`],[1,`total`],[`role`,`status`,1,`sr-only`],[1,`events`],[1,`empty-state`],[`type`,`radio`,`name`,`timeline-origin`,3,`change`,`value`,`checked`],[1,`body`],[1,`line`],[1,`path`],[1,`event-type`],[1,`tag`],[1,`detail`],[1,`caller`],[1,`prev`],[`aria-hidden`,`true`,1,`arrow`],[1,`empty-title`],[`type`,`button`,1,`small`,3,`click`]],template:function(e,t){if(e&1){let e=W();z(0,`div`,1)(1,`label`,2)(2,`input`,3),G(`change`,function(e){return t.toggle(e)}),B(),z(3,`span`,4)(4,`span`,5),P(5,UR,1,0,`span`,6),J(6,` Record details `),B(),z(7,`span`,7),J(8,`Record calling code, validator changes and renders per keystroke`),B()()(),z(9,`fieldset`,8)(10,`legend`,9),J(11,`Show changes from`),B(),I(12,WR,3,3,`label`,null,wg),B()(),z(14,`div`,10)(15,`div`,11),A(),z(16,`svg`,12),V(17,`circle`,13)(18,`path`,14),B(),ps(),z(19,`input`,15,0),G(`input`,function(e){return t.pathFilter.set(e.target.value)})(`keydown.escape`,function(){return t.pathFilter.set(``)}),B()(),z(21,`app-select`,16),ev(`valueChange`,function(n){return O(e),$_(t.typeFilter,n)||(t.typeFilter=n),k(n)}),B(),z(22,`span`,17),J(23),B(),z(24,`span`,18),J(25),B()(),P(26,ez,3,0,`ol`,19)(27,tz,7,0,`div`,20)(28,nz,5,0,`div`,20)}e&2&&(M(),q(`on`,t.recording()),M(),R(`checked`,t.recording()),M(3),F(t.recording()?5:-1),M(7),L(t.origins),M(7),R(`value`,t.pathFilter()),M(2),R(`options`,t.typeOptions()),Q_(`value`,t.typeFilter),M(2),Y(t.summary()),M(2),Y(t.filterStatus()),M(),F(t.shown().length?26:t.events().length?27:28))},dependencies:[LD],styles:[`.muted[_ngcontent-%COMP%] { +}`]})},rz=[`pathInput`],iz=()=>[],az=(e,t)=>t.formId+`#`+t.seq;function oz(e,t){e&1&&V(0,`span`,6)}function sz(e,t){if(e&1){let e=W();z(0,`label`)(1,`input`,21),G(`change`,function(){let t=O(e).$implicit;return k(K().filter.set(t))}),B(),J(2),B()}if(e&2){let e=t.$implicit,n=K();M(),R(`value`,e)(`checked`,e===n.filter()),M(),X(` `,e,` `)}}function cz(e,t){if(e&1&&(z(0,`span`,26),J(1),B()),e&2){let e=K().$implicit;N(`data-tone`,e.outcome===`ran`?``:`bad`),M(),Y(e.outcome)}}function lz(e,t){if(e&1&&(z(0,`span`,26),J(1),B()),e&2){let e=K().$implicit;M(),X(`×`,e.count)}}function uz(e,t){if(e&1&&(z(0,`span`,26),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.origin)}}function dz(e,t){if(e&1&&(z(0,`span`,26),J(1),B()),e&2){let e=K().$implicit;N(`data-tone`,e.ms>1e3?`warn`:``),M(),X(`pending `,e.ms,`ms`)}}function fz(e,t){if(e&1&&(z(0,`span`,26),J(1),B()),e&2){let e=K().$implicit;N(`data-tone`,e.renders>20?`warn`:``),M(),Z(``,e.renders,` renders: `,(e.rendered??mv(3,iz)).join(`, `))}}function pz(e,t){if(e&1&&(z(0,`span`,29),J(1),B(),z(2,`span`,30),J(3,`→`),B(),z(4,`span`,9),J(5,`changed to`),B()),e&2){let e=K(2).$implicit;M(),Y(e.prev)}}function mz(e,t){if(e&1&&(z(0,`div`,27),P(1,pz,6,1),J(2),B()),e&2){let e=K().$implicit;M(),F(e.prev===void 0?-1:1),M(),X(` `,e.detail,` `)}}function hz(e,t){if(e&1&&(z(0,`span`,28),J(1),B()),e&2){let e=K().$implicit;M(),X(`from `,e.caller)}}function gz(e,t){if(e&1&&(z(0,`li`)(1,`time`),J(2),B(),z(3,`div`,22)(4,`div`,23)(5,`code`,24),J(6),B(),z(7,`span`,25),J(8),B(),P(9,cz,2,2,`span`,26),P(10,lz,2,1,`span`,26),P(11,uz,2,1,`span`,26),P(12,dz,2,2,`span`,26),P(13,fz,2,4,`span`,26),B(),P(14,mz,3,2,`div`,27),P(15,hz,2,1,`span`,28),B()()),e&2){let e=t.$implicit,n=K(2);N(`data-type`,e.type),M(),N(`datetime`,n.iso(e.timestamp)),M(),Y(n.time(e.timestamp)),M(4),Y(e.path||`(form)`),M(2),Y(e.type),M(),F(e.outcome?9:-1),M(),F(e.count&&e.count>1?10:-1),M(),F(e.origin?11:-1),M(),F(e.ms===void 0?-1:12),M(),F(e.renders?13:-1),M(),F(e.prev!==void 0||e.detail?14:-1),M(),F(e.caller?15:-1)}}function _z(e,t){if(e&1&&(z(0,`ol`,19),I(1,gz,16,12,`li`,null,az),B()),e&2){let e=K();M(),L(e.shown())}}function vz(e,t){if(e&1){let e=W();z(0,`div`,20)(1,`p`,31),J(2,`No events match these filters`),B(),z(3,`p`),J(4,`Change the path, type or origin, or interact with the form to record more.`),B(),z(5,`button`,32),G(`click`,function(){return O(e),k(K().clearFilters())}),J(6,`Clear filters`),B()()}}function yz(e,t){e&1&&(z(0,`div`,20)(1,`p`,31),J(2,`No changes yet`),B(),z(3,`p`),J(4,`Type into the form to see them here.`),B()())}var bz=[`all`,`user`,`code`,`agent`,`devtools`],xz=[`value`,`status`,`touched`,`dirty`,`submit`,`reset`,`added`,`removed`,`moved`,`validators`],Sz=class e{events=$.required();recording=$(!1);record=Iv();toggle(e){let t=e.target;t.checked=this.recording(),this.record.emit(!this.recording())}origins=bz;filter=j(`all`);pathFilter=j(``);typeFilter=j(`all`);pathInput=Kv(`pathInput`);typeOptions=Q(()=>{let e=new Set(this.events().map(e=>e.type)),t=this.typeFilter();t&&t!==`all`&&e.add(t);let n=xz.filter(t=>e.has(t)),r=[...e].filter(e=>!xz.includes(e)).sort();return[{value:`all`,label:`All types`},...[...n,...r].map(e=>({value:e,label:e}))]});matching=Q(()=>{let e=this.filter(),t=this.typeFilter()??`all`,n=this.pathFilter().trim().toLowerCase();return this.events().filter(r=>(e===`all`||r.origin===e)&&(t===`all`||r.type===t)&&(!n||r.path.toLowerCase().includes(n)))});shown=Q(()=>this.matching().slice(-100).reverse());filtered=Q(()=>this.filter()!==`all`||(this.typeFilter()??`all`)!==`all`||!!this.pathFilter().trim());summary=Q(()=>{let e=this.events().length,t=this.matching().length,n=e=>e===1?`event`:`events`,r=this.filtered()?` matching ${n(t)}`:` ${n(t)}`;return t>100?`Showing the latest 100 of ${t}${r}`:this.filtered()?`${t} of ${e} ${n(e)}`:`${e} ${n(e)}`});filterStatus=Q(()=>(this.filter(),this.typeFilter(),this.pathFilter(),jv(()=>this.summary())));clearFilters(){this.pathFilter.set(``),this.typeFilter.set(`all`),this.filter.set(`all`),this.pathInput()?.nativeElement.focus()}iso(e){return new Date(e).toISOString()}time=$D;static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-forms-timeline`]],viewQuery:function(e,t){e&1&&c_(t.pathInput,rz,5),e&2&&l_()},inputs:{events:[1,`events`],recording:[1,`recording`]},outputs:{record:`record`},decls:29,vars:10,consts:[[`pathInput`,``],[1,`toolbar`],[1,`record`],[`type`,`checkbox`,3,`change`,`checked`],[1,`record-text`],[1,`record-title`],[`aria-hidden`,`true`,1,`rec-dot`],[1,`record-hint`],[1,`chips`],[1,`sr-only`],[1,`filters`],[1,`search`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`search-icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`type`,`search`,`placeholder`,`Filter by field path…`,`aria-label`,`Filter by field path`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`value`],[`ariaLabel`,`Event type`,3,`valueChange`,`options`,`value`],[1,`total`],[`role`,`status`,1,`sr-only`],[1,`events`],[1,`empty-state`],[`type`,`radio`,`name`,`timeline-origin`,3,`change`,`value`,`checked`],[1,`body`],[1,`line`],[1,`path`],[1,`event-type`],[1,`tag`],[1,`detail`],[1,`caller`],[1,`prev`],[`aria-hidden`,`true`,1,`arrow`],[1,`empty-title`],[`type`,`button`,1,`small`,3,`click`]],template:function(e,t){if(e&1){let e=W();z(0,`div`,1)(1,`label`,2)(2,`input`,3),G(`change`,function(e){return t.toggle(e)}),B(),z(3,`span`,4)(4,`span`,5),P(5,oz,1,0,`span`,6),J(6,` Record details `),B(),z(7,`span`,7),J(8,`Record calling code, validator changes and renders per keystroke`),B()()(),z(9,`fieldset`,8)(10,`legend`,9),J(11,`Show changes from`),B(),I(12,sz,3,3,`label`,null,Og),B()(),z(14,`div`,10)(15,`div`,11),A(),z(16,`svg`,12),V(17,`circle`,13)(18,`path`,14),B(),ms(),z(19,`input`,15,0),G(`input`,function(e){return t.pathFilter.set(e.target.value)})(`keydown.escape`,function(){return t.pathFilter.set(``)}),B()(),z(21,`app-select`,16),cv(`valueChange`,function(n){return O(e),sv(t.typeFilter,n)||(t.typeFilter=n),k(n)}),B(),z(22,`span`,17),J(23),B(),z(24,`span`,18),J(25),B()(),P(26,_z,3,0,`ol`,19)(27,vz,7,0,`div`,20)(28,yz,5,0,`div`,20)}e&2&&(M(),q(`on`,t.recording()),M(),R(`checked`,t.recording()),M(3),F(t.recording()?5:-1),M(7),L(t.origins),M(7),R(`value`,t.pathFilter()),M(2),R(`options`,t.typeOptions()),ov(`value`,t.typeFilter),M(2),Y(t.summary()),M(2),Y(t.filterStatus()),M(),F(t.shown().length?26:t.events().length?27:28))},dependencies:[GD],styles:[`.muted[_ngcontent-%COMP%] { color: var(--%NS%text-2); } @@ -8566,7 +8601,7 @@ time[_ngcontent-%COMP%] { justify-content: center; padding: 0 8px; } -}`]})},oz=(e,t)=>t.path;function sz(e,t){e&1&&(H(0,`span`,6),J(1,`duplicate name`),U())}function cz(e,t){if(e&1&&(H(0,`p`,7),J(1),U()),e&2){let e=K();M(),Y(e.description)}}function lz(e,t){if(e&1&&(H(0,`p`,8),J(1),U()),e&2){let e=K();M(),Y(e.error)}}function uz(e,t){if(e&1&&(H(0,`li`)(1,`code`),J(2),U(),J(3),U()),e&2){let e=t.$implicit;M(2),Y(e.path),M(),X(` is `,e.reason,` `)}}function dz(e,t){if(e&1&&(H(0,`div`,9)(1,`p`,10),J(2,`Angular could not infer an input schema. These fields block it:`),U(),H(3,`ul`),I(4,uz,4,2,`li`,null,oz),U()()),e&2){let e=K();M(4),L(e.blocking)}}function fz(e,t){e&1&&(H(0,`span`,12),J(1,`required`),U())}function pz(e,t){if(e&1&&(H(0,`li`)(1,`code`),J(2),U(),P(3,fz,2,0,`span`,12),U()),e&2){let e=t.$implicit,n=K(3);M(2),Y(e),M(),F(n.isRequired(e)?3:-1)}}function mz(e,t){if(e&1&&(H(0,`div`,9)(1,`p`,10),J(2,`Inputs`),U(),H(3,`ul`,11),I(4,pz,4,2,`li`,null,wg),U()()),e&2){let e=K();M(4),L(e.inputs)}}function hz(e,t){if(e&1&&(H(0,`li`)(1,`code`),J(2),U(),J(3),U()),e&2){let e=t.$implicit;M(2),Y(e.path),M(),X(` is now `,e.now?`required`:`optional`,` `)}}function gz(e,t){if(e&1&&(H(0,`div`,9)(1,`p`,10),J(2,` Required changed since registration. Angular reads it once, so agents still see the old schema: `),U(),H(3,`ul`),I(4,hz,4,2,`li`,null,oz),U()()),e&2){let e=K();M(4),L(e.requiredChanged)}}function _z(e,t){if(e&1&&(H(0,`span`,10),J(1),U()),e&2){let e=K().$implicit;M(),X(``,e.ms,` ms`)}}function vz(e,t){if(e&1&&(H(0,`span`,10),J(1),U()),e&2){let e=K().$implicit;M(),X(`fields `,e.fields.join(`, `))}}function yz(e,t){if(e&1&&(H(0,`pre`,13),J(1),U()),e&2){let e=K().$implicit;M(),Y(e.detail)}}function bz(e,t){if(e&1&&(H(0,`li`)(1,`time`),J(2),dv(3,`date`),U(),H(4,`span`,5),J(5),U(),P(6,_z,2,1,`span`,10),P(7,vz,2,1,`span`,10),P(8,yz,2,1,`pre`,13),U()),e&2){let e=t.$implicit,n=K(3);M(),N(`datetime`,n.iso(e.at)),M(),Y(mv(3,7,e.at,`HH:mm:ss`)),M(2),N(`data-state`,e.outcome),M(),Y(n.outcome(e.outcome)),M(),F(e.ms===void 0?-1:6),M(),F(e.fields?.length?7:-1),M(),F(e.detail?8:-1)}}function xz(e,t){if(e&1&&(H(0,`ul`),I(1,bz,9,10,`li`,null,Cg),U()),e&2){let e=K();M(),L(e.calls)}}function Sz(e,t){e&1&&(H(0,`p`,10),J(1,` Calls are not recorded for a tool registered before the inspector attached. `),U())}function Cz(e,t){e&1&&(H(0,`p`,10),J(1,`No agent has called this tool since the inspector attached.`),U())}function wz(e,t){if(e&1&&(H(0,`section`,0)(1,`div`,2)(2,`h3`,3),J(3,`WebMCP tool`),U(),H(4,`code`,4),J(5),U(),H(6,`span`,5),J(7),U(),P(8,sz,2,0,`span`,6),U(),P(9,cz,2,1,`p`,7),P(10,lz,2,1,`p`,8),P(11,dz,6,0,`div`,9),P(12,mz,6,0,`div`,9),P(13,gz,6,0,`div`,9),H(14,`div`,9)(15,`p`,10),J(16,`Recent calls`),U(),P(17,xz,3,0,`ul`)(18,Sz,2,0,`p`,10)(19,Cz,2,0,`p`,10),U()()),e&2){let e=t,n=K();M(5),Y(e.name),M(),N(`data-state`,e.status),M(),Y(n.statusText()),M(),F(e.duplicate?8:-1),M(),F(e.description?9:-1),M(),F(e.status===`failed`&&e.error&&e.error!==`schema`?10:-1),M(),F(e.blocking?.length?11:-1),M(),F(e.inputs?.length?12:-1),M(),F(e.requiredChanged?.length?13:-1),M(4),F(e.calls?.length?17:e.seen===`list`?18:19)}}function Tz(e,t){e&1&&(H(0,`p`,1),J(1,` This app uses `),H(2,`code`),J(3,`provideExperimentalWebMcpForms()`),U(),J(4,`, but the browser has no `),H(5,`code`),J(6,`modelContext`),U(),J(7,`, so Angular registers no WebMCP tool for this form. `),U())}var Ez={running:`running`,submitted:`submitted`,failed:`submit failed`,done:`done`,threw:`threw`},Dz=class e{tool=$();page=$();signalForm=$(!1);statusText=Q(()=>{let e=this.tool();return e?e.status===`failed`?`not registered`:e.status===`registering`?`registering`:e.seen===`list`?`registered before the inspector attached`:`registered`:``});noModelContext=Q(()=>{let e=this.page();return this.signalForm()&&!!e&&!e.modelContext&&!!e.provided});isRequired(e){let t=e.slice(0,e.lastIndexOf(`:`));return this.tool()?.required?.includes(t)??!1}outcome(e){return Ez[e]??e}iso(e){return new Date(e).toISOString()}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-forms-webmcp`]],inputs:{tool:[1,`tool`],page:[1,`page`],signalForm:[1,`signalForm`]},decls:2,vars:1,consts:[[`aria-labelledby`,`forms-webmcp-title`,1,`webmcp`],[1,`note`],[1,`head`],[`id`,`forms-webmcp-title`,1,`section-label`],[1,`name`],[1,`state`],[`data-state`,`failed`,1,`state`],[1,`description`],[1,`problem`],[1,`group`],[1,`muted`],[1,`inputs`],[1,`tag`],[1,`detail`]],template:function(e,t){if(e&1&&P(0,wz,20,10,`section`,0)(1,Tz,8,0,`p`,1),e&2){let e;F((e=t.tool())?0:t.noModelContext()?1:-1,e)}},dependencies:[ib],styles:[`[_nghost-%COMP%] { +}`]})},Cz=(e,t)=>t.path;function wz(e,t){e&1&&(H(0,`span`,6),J(1,`duplicate name`),U())}function Tz(e,t){if(e&1&&(H(0,`p`,7),J(1),U()),e&2){let e=K();M(),Y(e.description)}}function Ez(e,t){if(e&1&&(H(0,`p`,8),J(1),U()),e&2){let e=K();M(),Y(e.error)}}function Dz(e,t){if(e&1&&(H(0,`li`)(1,`code`),J(2),U(),J(3),U()),e&2){let e=t.$implicit;M(2),Y(e.path),M(),X(` is `,e.reason,` `)}}function Oz(e,t){if(e&1&&(H(0,`div`,9)(1,`p`,10),J(2,`Angular could not infer an input schema. These fields block it:`),U(),H(3,`ul`),I(4,Dz,4,2,`li`,null,Cz),U()()),e&2){let e=K();M(4),L(e.blocking)}}function kz(e,t){e&1&&(H(0,`span`,12),J(1,`required`),U())}function Az(e,t){if(e&1&&(H(0,`li`)(1,`code`),J(2),U(),P(3,kz,2,0,`span`,12),U()),e&2){let e=t.$implicit,n=K(3);M(2),Y(e),M(),F(n.isRequired(e)?3:-1)}}function jz(e,t){if(e&1&&(H(0,`div`,9)(1,`p`,10),J(2,`Inputs`),U(),H(3,`ul`,11),I(4,Az,4,2,`li`,null,Og),U()()),e&2){let e=K();M(4),L(e.inputs)}}function Mz(e,t){if(e&1&&(H(0,`li`)(1,`code`),J(2),U(),J(3),U()),e&2){let e=t.$implicit;M(2),Y(e.path),M(),X(` is now `,e.now?`required`:`optional`,` `)}}function Nz(e,t){if(e&1&&(H(0,`div`,9)(1,`p`,10),J(2,` Required changed since registration. Angular reads it once, so agents still see the old schema: `),U(),H(3,`ul`),I(4,Mz,4,2,`li`,null,Cz),U()()),e&2){let e=K();M(4),L(e.requiredChanged)}}function Pz(e,t){if(e&1&&(H(0,`span`,10),J(1),U()),e&2){let e=K().$implicit;M(),X(``,e.ms,` ms`)}}function Fz(e,t){if(e&1&&(H(0,`span`,10),J(1),U()),e&2){let e=K().$implicit;M(),X(`fields `,e.fields.join(`, `))}}function Iz(e,t){if(e&1&&(H(0,`pre`,13),J(1),U()),e&2){let e=K().$implicit;M(),Y(e.detail)}}function Lz(e,t){if(e&1&&(H(0,`li`)(1,`time`),J(2),yv(3,`date`),U(),H(4,`span`,5),J(5),U(),P(6,Pz,2,1,`span`,10),P(7,Fz,2,1,`span`,10),P(8,Iz,2,1,`pre`,13),U()),e&2){let e=t.$implicit,n=K(3);M(),N(`datetime`,n.iso(e.at)),M(),Y(Sv(3,7,e.at,`HH:mm:ss`)),M(2),N(`data-state`,e.outcome),M(),Y(n.outcome(e.outcome)),M(),F(e.ms===void 0?-1:6),M(),F(e.fields?.length?7:-1),M(),F(e.detail?8:-1)}}function Rz(e,t){if(e&1&&(H(0,`ul`),I(1,Lz,9,10,`li`,null,Dg),U()),e&2){let e=K();M(),L(e.calls)}}function zz(e,t){e&1&&(H(0,`p`,10),J(1,` Calls are not recorded for a tool registered before the inspector attached. `),U())}function Bz(e,t){e&1&&(H(0,`p`,10),J(1,`No agent has called this tool since the inspector attached.`),U())}function Vz(e,t){if(e&1&&(H(0,`section`,0)(1,`div`,2)(2,`h3`,3),J(3,`WebMCP tool`),U(),H(4,`code`,4),J(5),U(),H(6,`span`,5),J(7),U(),P(8,wz,2,0,`span`,6),U(),P(9,Tz,2,1,`p`,7),P(10,Ez,2,1,`p`,8),P(11,Oz,6,0,`div`,9),P(12,jz,6,0,`div`,9),P(13,Nz,6,0,`div`,9),H(14,`div`,9)(15,`p`,10),J(16,`Recent calls`),U(),P(17,Rz,3,0,`ul`)(18,zz,2,0,`p`,10)(19,Bz,2,0,`p`,10),U()()),e&2){let e=t,n=K();M(5),Y(e.name),M(),N(`data-state`,e.status),M(),Y(n.statusText()),M(),F(e.duplicate?8:-1),M(),F(e.description?9:-1),M(),F(e.status===`failed`&&e.error&&e.error!==`schema`?10:-1),M(),F(e.blocking?.length?11:-1),M(),F(e.inputs?.length?12:-1),M(),F(e.requiredChanged?.length?13:-1),M(4),F(e.calls?.length?17:e.seen===`list`?18:19)}}function Hz(e,t){e&1&&(H(0,`p`,1),J(1,` This app uses `),H(2,`code`),J(3,`provideExperimentalWebMcpForms()`),U(),J(4,`, but the browser has no `),H(5,`code`),J(6,`modelContext`),U(),J(7,`, so Angular registers no WebMCP tool for this form. `),U())}var Uz={running:`running`,submitted:`submitted`,failed:`submit failed`,done:`done`,threw:`threw`},Wz=class e{tool=$();page=$();signalForm=$(!1);statusText=Q(()=>{let e=this.tool();return e?e.status===`failed`?`not registered`:e.status===`registering`?`registering`:e.seen===`list`?`registered before the inspector attached`:`registered`:``});noModelContext=Q(()=>{let e=this.page();return this.signalForm()&&!!e&&!e.modelContext&&!!e.provided});isRequired(e){let t=e.slice(0,e.lastIndexOf(`:`));return this.tool()?.required?.includes(t)??!1}outcome(e){return Uz[e]??e}iso(e){return new Date(e).toISOString()}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-forms-webmcp`]],inputs:{tool:[1,`tool`],page:[1,`page`],signalForm:[1,`signalForm`]},decls:2,vars:1,consts:[[`aria-labelledby`,`forms-webmcp-title`,1,`webmcp`],[1,`note`],[1,`head`],[`id`,`forms-webmcp-title`,1,`section-label`],[1,`name`],[1,`state`],[`data-state`,`failed`,1,`state`],[1,`description`],[1,`problem`],[1,`group`],[1,`muted`],[1,`inputs`],[1,`tag`],[1,`detail`]],template:function(e,t){if(e&1&&P(0,Vz,20,10,`section`,0)(1,Hz,8,0,`p`,1),e&2){let e;F((e=t.tool())?0:t.noModelContext()?1:-1,e)}},dependencies:[fb],styles:[`[_nghost-%COMP%] { display: contents; } @@ -8686,7 +8721,7 @@ li[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] + *[_ngcontent-%COMP%] { font-size: 12px; white-space: pre-wrap; overflow-wrap: anywhere; -}`]})},Oz=()=>[],kz=(e,t)=>t.id,Az=(e,t)=>t.node.path;function jz(e,t){e&1&&(z(0,`div`,1),V(1,`span`,5),z(2,`p`),J(3,`Connecting to the devtools server…`),B()())}function Mz(e,t){if(e&1){let e=W();z(0,`div`,2)(1,`p`,6),J(2,`Could not load forms`),B(),z(3,`p`,7),J(4,` The devtools server did not answer. Check that the app is running, then try again. `),B(),z(5,`button`,8),G(`click`,function(){return O(e),k(K().retry())}),J(6,`Try again`),B()()}}function Nz(e,t){e&1&&(z(0,`div`,1),V(1,`span`,5),z(2,`p`),J(3,`Loading forms…`),B()())}function Pz(e,t){e&1&&(z(0,`div`,3)(1,`p`,6),J(2,`No forms on the page yet`),B(),z(3,`p`,7),J(4,` Open a page that renders a form. Signal Forms, reactive and template-driven forms all show up here, in development builds. `),B()())}function Fz(e,t){if(e&1){let e=W();z(0,`div`,3)(1,`p`,6),J(2,`No forms on this page`),B(),z(3,`p`,7),J(4),B(),z(5,`button`,8),G(`click`,function(){return O(e),k(K().allPages.set(!0))}),J(6,` Show forms from all pages `),B()()}if(e&2){let e=K();M(4),Z(` Other connected tabs report `,e.forms().length,` `,e.forms().length===1?`form`:`forms`,`. `)}}function Iz(e,t){if(e&1){let e=W();z(0,`label`,12)(1,`input`,16),G(`change`,function(t){return O(e),k(K(2).allPages.set(t.target.checked))}),B(),J(2,` All pages `),B()}if(e&2){let e=K(2);M(),R(`checked`,e.allPages())}}function Lz(e,t){e&1&&(z(0,`span`,23),J(1),z(2,`span`,22),J(3,` errors`),B()()),e&2&&(M(),Y(t))}function Rz(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,17),G(`click`,function(){let t=O(e).$implicit;return k(K(2).selectForm(t.id))}),V(2,`span`,18),z(3,`span`,19),J(4),B(),z(5,`span`,20),J(6),z(7,`span`,21),J(8),B(),z(9,`span`,22),J(10),B()(),P(11,Lz,4,1,`span`,23),B()()}if(e&2){let e,n=t.$implicit,r=K(2);M(),q(`active`,n.id===r.selected()?.id),N(`aria-current`,n.id===r.selected()?.id?`true`:null),M(),N(`data-status`,n.root.status),M(),N(`title`,n.label),M(),Y(n.label),M(2),X(``,r.kindLabel(n.kind),` · `),M(2),Y(n.id),M(2),X(`, `,n.root.status),M(),F((e=r.counts().get(n.id)?.errors)?11:-1,e)}}function zz(e,t){if(e&1){let e=W();z(0,`section`,14)(1,`h2`,24),J(2),B(),z(3,`p`,25),J(4,` This form is no longer on the page. It comes back here if the page renders it again. `),B(),z(5,`button`,8),G(`click`,function(){O(e);let t=K(2);return k(t.selectForm(t.visible()[0].id))}),J(6),B()()}if(e&2){let e=K(2);M(2),Y(t),M(4),X(` Show `,e.visible()[0].label,` `)}}function Bz(e,t){if(e&1){let e=W();z(0,`section`,14)(1,`h2`,24),J(2),B(),z(3,`p`,7),J(4,`This form is on another page. Tick "All pages" to see it again.`),B(),z(5,`button`,8),G(`click`,function(){return O(e),k(K(2).allPages.set(!0))}),J(6,` Show forms from all pages `),B()()}e&2&&(M(2),Y(t))}function Vz(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K();M(),Y(e.submitted?`submitted`:`not submitted`)}}function Hz(e,t){e&1&&(z(0,`span`),J(1,`submitting`),B())}function Uz(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,47),G(`click`,function(){let t=O(e).$implicit;return k(K(4).showField(t.path))}),z(2,`span`,22),J(3,`Show field `),B(),z(4,`code`),J(5),B(),z(6,`span`,22),J(7,`:`),B(),J(8),z(9,`code`,48),J(10),B()()()}if(e&2){let e=t.$implicit;M(5),Y(e.path||`(form)`),M(3),X(` `,e.message,` `),M(2),Y(e.kind)}}function Wz(e,t){if(e&1&&(z(0,`details`,31)(1,`summary`),J(2),B(),z(3,`ul`),I(4,Uz,11,3,`li`,null,Cg),B()()),e&2){let e=K();M(2),X(`Error summary (`,e.errorSummary.length,`)`),M(2),L(e.errorSummary)}}function Gz(e,t){if(e&1){let e=W();z(0,`button`,35),G(`click`,function(){return O(e),k(K(3).confirmAct(`restore`))}),J(1),B()}if(e&2){let e=K(3);q(`armed`,e.armed()===`restore`),R(`disabled`,!e.canWrite()),N(`aria-describedby`,e.canWrite()?null:`forms-writes-off`)(`title`,`Restore `+e.snapshot()),M(),X(` `,e.armed()===`restore`?`Confirm restore`:`Restore `+e.snapshot(),` `)}}function Kz(e,t){if(e&1&&(z(0,`p`,41),J(1),B()),e&2){let e=K(3);M(),Y(e.writesOff)}}function qz(e,t){if(e&1){let e=W();z(0,`button`,49),G(`click`,function(){let t=O(e).$implicit;return k(K(3).tab_.set(t.id))}),J(1),B()}if(e&2){let e=t.$implicit,n=K(3);R(`id`,`forms-tab-`+e.id),N(`aria-selected`,e.id===n.tab_())(`aria-controls`,`forms-panel-`+e.id)(`tabindex`,e.id===n.tab_()?0:-1),M(),X(` `,e.label,` `)}}function Jz(e,t){if(e&1){let e=W();z(0,`label`)(1,`input`,16),G(`change`,function(){let t=O(e).$implicit;return k(K(4).toggleChip(t.id))}),B(),J(2),B()}if(e&2){let e=t.$implicit,n=K(4);M(),R(`checked`,n.active().has(e.id)),M(),X(` `,e.label,` `)}}function Yz(e,t){if(e&1&&(z(0,`div`,7),J(1,` typed `),z(2,`code`),J(3),dv(4,`json`),B(),J(5,`, not in the model yet `),B()),e&2){let e=K(2).$implicit;M(3),Y(pv(4,1,e.node.uncommitted))}}function Xz(e,t){if(e&1&&(z(0,`div`,7),J(1,` resets to `),z(2,`code`),J(3),dv(4,`json`),B()()),e&2){let e=K(2).$implicit;M(3),Y(pv(4,1,e.node.defaultValue))}}function Zz(e,t){if(e&1&&(z(0,`code`),J(1),dv(2,`json`),B(),P(3,Yz,6,3,`div`,7),P(4,Xz,5,3,`div`,7)),e&2){let e=K().$implicit;M(),Y(pv(2,3,e.node.value)),M(2),F(e.node.uncommitted===void 0?-1:3),M(),F(e.node.defaultValue===void 0?-1:4)}}function Qz(e,t){e&1&&(z(0,`span`,7),J(1,`not created yet`),B())}function $z(e,t){if(e&1&&(z(0,`span`,29),J(1),B()),e&2){let e=K().$implicit;N(`data-status`,e.node.status),M(),Y(e.node.status)}}function eB(e,t){e&1&&(z(0,`span`),J(1,`touched`),B())}function tB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.node.changed===!1?`dirty, unchanged`:`dirty`)}}function nB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),X(`not validated (`,e.node.skipped,`)`)}}function rB(e,t){if(e&1&&(z(0,`span`,65),J(1),B()),e&2){let e=K().$implicit;M(),X(`stale: `,e.node.stale.join(`, `))}}function iB(e,t){e&1&&(z(0,`span`,65),J(1,`view out of sync`),B())}function aB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit,t=K(4);M(),X(`redacted: `,t.redactLabel(e.node.redacted))}}function oB(e,t){e&1&&(z(0,`span`),J(1,`required`),B())}function sB(e,t){e&1&&(z(0,`span`),J(1,`readonly`),B())}function cB(e,t){e&1&&(z(0,`span`),J(1,`hidden`),B())}function lB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),X(`updates on `,e.node.updateOn)}}function uB(e,t){e&1&&(z(0,`span`),J(1,`debouncing`),B())}function dB(e,t){e&1&&(z(0,`span`),J(1,`validators`),B())}function fB(e,t){e&1&&(z(0,`span`),J(1,`async validator`),B())}function pB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function mB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.node.accessor)}}function hB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),X(`name `,e.node.name)}}function gB(e,t){if(e&1&&(z(0,`span`),J(1),dv(2,`json`),B()),e&2){let e=t.$implicit;M(),X(`metadata `,pv(2,1,e))}}function _B(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=t.$implicit;M(),X(`disabled: `,e)}}function vB(e,t){if(e&1&&(z(0,`span`,68),J(1),B()),e&2){let e=K().$implicit;M(),X(`at `,e.params.path)}}function yB(e,t){if(e&1&&(z(0,`span`,68),J(1),B()),e&2){let e=K().$implicit,t=K(5);M(),Y(t.sourceText(e))}}function bB(e,t){if(e&1&&(z(0,`div`),J(1),z(2,`code`,48),J(3),B(),P(4,vB,2,1,`span`,68),P(5,yB,2,1,`span`,68),B()),e&2){let e=t.$implicit,n=K().$implicit,r=K(4);M(),X(` `,r.errorText(n.node,e),` `),M(2),Y(e.kind),M(),F(e.kind===`standardSchema`&&e.params?.path?4:-1),M(),F(e.source?5:-1)}}function xB(e,t){e&1&&(z(0,`div`,67),J(1,`not shown to the user`),B())}function SB(e,t){if(e&1&&(z(0,`tr`)(1,`td`,69),J(2),B()()),e&2){let e=K().$implicit;M(),C_(`padding-left`,28+e.depth*16,`px`),M(),Z(` `,e.node.truncated,` more fields under `,e.node.path||`the form`,` not shown `)}}function CB(e,t){if(e&1){let e=W();z(0,`tr`,58),G(`mouseenter`,function(){let t=O(e).$implicit,n=K(2);return k(K(2).highlight(n.id,t.node.path))})(`mouseleave`,function(){return O(e),k(K(4).highlight(null,``))}),z(1,`th`,59)(2,`button`,60),G(`focus`,function(){let t=O(e).$implicit,n=K(2);return k(K(2).highlight(n.id,t.node.path))})(`blur`,function(){return O(e),k(K(4).highlight(null,``))})(`click`,function(){let t=O(e).$implicit;return k(K(4).toggleField(t.node.path))}),J(3),B(),z(4,`span`,61),J(5),B()(),z(6,`td`,62),P(7,Zz,5,5),B(),z(8,`td`,63),P(9,Qz,2,0,`span`,7)(10,$z,2,2,`span`,29),B(),z(11,`td`,64),P(12,eB,2,0,`span`),P(13,tB,2,1,`span`),P(14,nB,2,1,`span`),P(15,rB,2,1,`span`,65),P(16,iB,2,0,`span`,65),P(17,aB,2,1,`span`),P(18,oB,2,0,`span`),P(19,sB,2,0,`span`),P(20,cB,2,0,`span`),P(21,lB,2,1,`span`),P(22,uB,2,0,`span`),P(23,dB,2,0,`span`),P(24,fB,2,0,`span`),I(25,pB,2,1,`span`,null,wg),P(27,mB,2,1,`span`),P(28,hB,2,1,`span`),I(29,gB,3,3,`span`,null,Cg),I(31,_B,2,1,`span`,null,Cg),B(),z(33,`td`,66),I(34,bB,6,4,`div`,null,Cg),P(36,xB,2,0,`div`,67),B()(),P(37,SB,3,4,`tr`)}if(e&2){let e=t.$implicit,n=K(4);q(`invalid`,e.node.errors.length),M(),C_(`padding-left`,12+e.depth*16,`px`),M(),N(`aria-label`,`Show details for `+(e.node.path||`the form`))(`aria-pressed`,e.node.path===n.fieldPath())(`title`,e.node.path||`(form)`),M(),X(` `,e.node.key||`(form)`,` `),M(2),Y(e.node.type),M(2),F(e.node.type===`control`?7:-1),M(2),F(e.node.materialized===!1?9:10),M(3),F(e.node.touched?12:-1),M(),F(e.node.dirty?13:-1),M(),F(e.node.skipped?14:-1),M(),F(e.node.stale?.length?15:-1),M(),F(e.node.dom?.drift===void 0?-1:16),M(),F(e.node.redacted?17:-1),M(),F(e.node.required?18:-1),M(),F(e.node.readonly?19:-1),M(),F(e.node.hidden?20:-1),M(),F(e.node.updateOn?21:-1),M(),F(e.node.debouncing?22:-1),M(),F(e.node.validators?.sync?23:-1),M(),F(e.node.validators?.async?24:-1),M(),L(n.constraintList(e.node)),M(2),F(e.node.accessor?27:-1),M(),F(e.node.name?28:-1),M(),L(e.node.metadata??ov(28,Oz)),M(2),L(e.node.disabledReasons??ov(29,Oz)),M(3),L(e.node.errors),M(2),F(e.node.errors.length&&e.node.dom?.errorShown===!1?36:-1),M(),F(e.node.truncated?37:-1)}}function wB(e,t){e&1&&J(0),e&2&&X(` No field path matches "`,K(5).filter(),`". `)}function TB(e,t){e&1&&J(0,` No field matches the selected filters. `)}function EB(e,t){if(e&1){let e=W();z(0,`button`,8),G(`click`,function(){O(e),K(2);let t=n_(2);return k(K(3).clearFilters(t))}),J(1,` Clear filters `),B()}}function DB(e,t){if(e&1&&(z(0,`tr`)(1,`td`,70)(2,`p`),P(3,wB,1,1)(4,TB,1,0),B(),P(5,EB,2,0,`button`,71),B()()),e&2){let e=K(4);M(3),F(e.filter()?3:4),M(2),F(e.filtering()?5:-1)}}function OB(e,t){if(e&1){let e=W();z(0,`app-forms-field-detail`,72),G(`closed`,function(){return O(e),k(K(4).closeField())}),B()}if(e&2){let e=K(2),n=K(2);R(`form`,e)(`node`,t)(`version`,n.version())(`rpc`,n.rpc())}}function kB(e,t){if(e&1){let e=W();z(0,`div`,50)(1,`input`,51,0),G(`input`,function(t){return O(e),k(K(3).onFilter(t))})(`keydown.escape`,function(){return O(e),k(K(3).filter.set(``))}),B(),z(3,`fieldset`,52)(4,`legend`,22),J(5,`Show only fields that are`),B(),I(6,Jz,3,2,`label`,null,kz),B()(),z(8,`p`,53),J(9),B(),z(10,`div`,54)(11,`table`,55)(12,`thead`)(13,`tr`)(14,`th`,56),J(15,`Field`),B(),z(16,`th`,56),J(17,`Value`),B(),z(18,`th`,56),J(19,`Status`),B(),z(20,`th`,56),J(21,`State`),B(),z(22,`th`,56),J(23,`Errors`),B()()(),z(24,`tbody`),I(25,CB,38,30,null,null,Az,!1,DB,6,2,`tr`),B()()(),P(28,OB,1,4,`app-forms-field-detail`,57)}if(e&2){let e,t=K(3);M(),R(`value`,t.filter()),M(5),L(t.chips),M(3),Y(t.filterStatus()),M(16),L(t.rows()),M(3),F((e=t.selectedNode())?28:-1,e)}}function AB(e,t){if(e&1){let e=W();V(0,`app-limit-note`,73),z(1,`app-forms-timeline`,74),G(`record`,function(t){return O(e),k(K(3).setRecording(t))}),B()}if(e&2){let e=K(3);R(`dropped`,e.droppedEvents())(`max`,e.maxEvents()),M(),R(`events`,e.selectedEvents())(`recording`,e.recording())}}function jB(e,t){if(e&1&&V(0,`app-forms-submit`,46),e&2){let e=K(),t=K(2);R(`formId`,e.id)(`version`,t.version())(`rpc`,t.rpc())}}function MB(e,t){if(e&1){let e=W();z(0,`app-forms-lint`,75),G(`showField`,function(t){return O(e),k(K(3).showField(t))}),B()}if(e&2){let e=K(),t=K(2);R(`formId`,e.id)(`version`,t.version())(`rpc`,t.rpc())}}function NB(e,t){if(e&1){let e=W();z(0,`section`,15)(1,`div`,26)(2,`h2`,24),J(3),B(),z(4,`p`,27),J(5),z(6,`code`),J(7),B()()(),z(8,`div`,28)(9,`span`,29),J(10),B(),z(11,`span`),J(12),B(),z(13,`span`),J(14),B(),P(15,Vz,2,1,`span`),P(16,Hz,2,0,`span`),z(17,`span`,30)(18,`b`),J(19),B(),J(20,` fields · `),z(21,`b`),J(22),B(),J(23,` errors`),B()(),P(24,Wz,6,1,`details`,31),V(25,`app-forms-webmcp`,32),z(26,`div`,33)(27,`div`,34)(28,`button`,35),G(`click`,function(){return O(e),k(K(2).act(`touch-all`))}),J(29,` Touch all `),B(),z(30,`button`,35),G(`click`,function(){return O(e),k(K(2).act(`revalidate`))}),J(31,` Revalidate `),B(),z(32,`button`,8),G(`click`,function(){return O(e),k(K(2).act(`focus-first-invalid`))}),J(33,` Focus first invalid `),B(),z(34,`button`,8),G(`click`,function(){O(e);let t=K(2);return k(t.picking()?t.cancelPick():t.pick())}),J(35),B(),V(36,`span`,36),z(37,`button`,8),G(`click`,function(){return O(e),k(K(2).act(`snapshot`))}),J(38,`Snapshot`),B(),P(39,Gz,2,6,`button`,37),V(40,`span`,38),z(41,`button`,39),G(`click`,function(){return O(e),k(K(2).confirmAct(`reset`))}),J(42),B(),z(43,`button`,40),G(`click`,function(){return O(e),k(K(2).confirmAct(`submit`))}),J(44),B()(),P(45,Kz,2,1,`p`,41),z(46,`p`,42),J(47),B()(),z(48,`div`,43),G(`keydown`,function(t){return O(e),k(K(2).onKey(t))}),I(49,qz,2,5,`button`,44,kz),B(),z(51,`div`,45),P(52,kB,29,4)(53,AB,2,4)(54,jB,1,3,`app-forms-submit`,46)(55,MB,1,3,`app-forms-lint`,46),B()()}if(e&2){let e,n=t,r=K(2);M(3),Y(n.label),M(2),X(` `,r.kindLabel(n.kind),` · `),M(2),Y(n.id),M(2),N(`data-status`,n.root.status),M(),Y(n.root.status),M(2),Y(n.root.dirty?`dirty`:`pristine`),M(2),Y(n.root.touched?`touched`:`untouched`),M(),F(n.submitted===void 0?-1:15),M(),F(n.root.submitting?16:-1),M(3),Y(r.counts().get(n.id)?.fields),M(2),q(`has-errors`,r.counts().get(n.id)?.errors),M(),Y(r.counts().get(n.id)?.errors),M(2),F(n.errorSummary?.length?24:-1),M(),R(`tool`,n.webMcp)(`page`,r.webMcpPage(n.id))(`signalForm`,n.kind===`signal`),M(3),R(`disabled`,!r.canWrite()),N(`aria-describedby`,r.canWrite()?null:`forms-writes-off`),M(2),R(`disabled`,!r.canWrite()),N(`aria-describedby`,r.canWrite()?null:`forms-writes-off`),M(4),q(`on`,r.picking()),N(`aria-pressed`,!!r.picking()),M(),X(` `,r.picking()?`Cancel picking`:`Pick field on page`,` `),M(4),F(r.snapshot()?39:-1),M(2),q(`armed`,r.armed()===`reset`),R(`disabled`,!r.canWrite()),N(`aria-describedby`,r.canWrite()?null:`forms-writes-off`),M(),X(` `,r.armed()===`reset`?`Confirm reset`:`Reset`,` `),M(),q(`armed`,r.armed()===`submit`),R(`disabled`,!r.canWrite()),N(`aria-describedby`,r.canWrite()?null:`forms-writes-off`),M(),X(` `,r.armed()===`submit`?`Confirm submit`:`Submit`,` `),M(),F(r.canWrite()?-1:45),M(2),Y(r.message()),M(2),L(r.tabs),M(2),R(`id`,`forms-panel-`+r.tab_()),N(`aria-labelledby`,`forms-tab-`+r.tab_()),M(),F((e=r.tab_())===`fields`?52:e===`timeline`?53:e===`submit`?54:e===`lint`?55:-1)}}function PB(e,t){if(e&1&&(z(0,`div`,4)(1,`div`,9)(2,`h2`,10),J(3,` Forms `),z(4,`span`,11),J(5),B()(),P(6,Iz,3,1,`label`,12),z(7,`ul`,13),I(8,Rz,12,10,`li`,null,kz),B()(),P(10,zz,7,2,`section`,14)(11,Bz,7,1,`section`,14)(12,NB,56,41,`section`,15),B()),e&2){let e,t=K();M(5),Y(t.visible().length),M(),F(t.hostPageId&&(t.allPages()||t.otherPages())?6:-1),M(2),L(t.visible()),M(2),F((e=t.missing())?10:(e=t.hidden())?11:(e=t.selected())?12:-1,e)}}var FB=[{id:`fields`,label:`Fields`},{id:`timeline`,label:`Timeline`},{id:`submit`,label:`Submit`},{id:`lint`,label:`Lint`}],IB=[{id:`invalid`,label:`Invalid`},{id:`dirty`,label:`Dirty`},{id:`touched`,label:`Touched`},{id:`disabled`,label:`Disabled`},{id:`hidden-error`,label:`Error not shown`}];function LB(e,t){switch(t){case`invalid`:return e.errors.length>0;case`dirty`:return e.dirty&&e.type===`control`;case`touched`:return e.touched&&e.type===`control`;case`disabled`:return e.status===`DISABLED`;case`hidden-error`:return e.dom?.errorShown===!1}}function RB(e){return e.errors.length+(e.children??[]).reduce((e,t)=>e+RB(t),0)}function zB(e){return e.children?e.children.reduce((e,t)=>e+zB(t),0):+(e.type===`control`&&e.materialized!==!1)}var BB=class e{rpc=$(null);focus=$(null);canWrite=Q(()=>SE(this.rpc(),`forms`));redactLabel=hE;writesOff=JT(`forms`);focusHandled=Ov();forms=j([]);webMcp=j([]);events=j([]);loading=j(!0);failed=j(!1);selectedId=j(null);selectedLabel=j(null);hostPageId=nE();allPages=j(!1);visible=Q(()=>{let e=this.forms(),t=this.hostPageId;return t&&!this.allPages()?e.filter(e=>uE(e.id)===t):e});otherPages=Q(()=>this.forms().some(e=>uE(e.id)!==this.hostPageId));instrumented=j([]);recording=Q(()=>{let e=this.selected()?.id??``;return this.instrumented().some(t=>e.endsWith(`@${t}`))});filter=j(``);tabs=FB;chips=IB;tab_=j(`fields`);active=j(new Set);filtering=Q(()=>!!this.filter()||this.active().size>0);filterStatus=j(``);version=j(0);message=j(``);webMcpPage(e){let t=uE(e);return this.webMcp().find(e=>e.pageId===t)}picking=j(null);pickSeq=0;unsubscribe=null;destroyRef=E(Cs);host=E(Ml);injector=E(xs);counts=Q(()=>new Map(this.visible().map(e=>[e.id,{fields:zB(e.root),errors:RB(e.root)}])));chosen=Q(()=>{let e=this.selectedId();if(e===null)return null;let t=this.forms(),n=this.selectedLabel(),r=uE(e);return t.find(t=>t.id===e)??t.find(e=>e.label===n&&uE(e.id)===r)??null});selected=Q(()=>{let e=this.visible();if(this.selectedId()===null)return e[0]??null;let t=this.chosen();return t&&e.includes(t)?t:null});missing=Q(()=>this.selectedId()!==null&&!this.chosen()&&this.visible().length?this.selectedLabel()??this.selectedId():null);hidden=Q(()=>{let e=this.chosen();return e&&!this.selected()&&this.visible().length?e.label:null});selectedFormId=Q(()=>this.selected()?.id??null);fieldPath=Tv({source:this.selectedFormId,computation:()=>null});armed=Tv({source:this.selectedFormId,computation:()=>null});snapshot=Tv({source:this.selectedFormId,computation:()=>null});rows=Q(()=>{let e=this.selected();if(!e)return[];let t=this.filter().toLowerCase(),n=Array.from(this.active()),r=[],i=(e,a)=>{let o=r.length,s=(!t||e.path.toLowerCase().includes(t))&&n.every(t=>LB(e,t));for(let t of e.children??[])s=i(t,a+1)||s;return s&&r.splice(o,0,{node:e,depth:a}),s};return i(e.root,0),r});selectedNode=Q(()=>{let e=this.fieldPath(),t=this.selected();if(e===null||!t)return null;let n=t=>t.path===e?t:(t.children??[]).map(n).find(Boolean)??null;return n(t.root)});dropped=j({});droppedEvents=Q(()=>{let e=this.selected()?.id;return e?this.dropped()[uE(e)]??0:0});maxEvents=Q(()=>xE(this.rpc()).limits.formTimeline);selectedEvents=Q(()=>{let e=this.selected()?.id;return this.events().filter(t=>t.formId===e)});constructor(){uc(()=>{let e=this.rpc();e&&this.load(e)}),uc(()=>{let e=this.focus();e&&Cv(()=>{this.selectForm(e.id),this.focusHandled.emit()})}),this.destroyRef.onDestroy(()=>{this.unsubscribe?.(),this.highlight(null,``)})}async load(e){this.loading.set(!0),this.failed.set(!1);try{let t=await e.scope(`pangular`).rpc.sharedState(`forms`);if(this.destroyRef.destroyed)return;let n=e=>{let t=e;this.forms.set(t?.forms??[]),this.events.set(t?.events??[]),this.instrumented.set(t?.instrumented??[]),this.dropped.set(t?.dropped??{}),this.webMcp.set(t?.webMcp??[]),this.version.update(e=>e+1)};n(t.value()),this.unsubscribe?.(),this.unsubscribe=t.on(`updated`,n)}catch{this.failed.set(!0)}finally{this.loading.set(!1)}}retry(){let e=this.rpc();e&&this.load(e)}async pick(){let e=this.selected();if(!e)return;let t=++this.pickSeq;this.picking.set(e.id),this.message.set(`Click a field in the app. Press Escape or Cancel picking to stop.`);let n=await _E(this.rpc(),{action:`pick`,formId:e.id});if(t!==this.pickSeq)return;this.picking.set(null);let r=n;if(!n.ok||!r.formId){this.message.set(vE(n));return}this.selectForm(r.formId),this.tab_.set(`fields`),this.fieldPath.set(r.path??``),this.message.set(`Picked ${r.path||`(form)`}.`)}cancelPick(){let e=this.picking();e&&_E(this.rpc(),{action:`cancel-pick`,formId:e})}async setRecording(e){let t=this.selected();if(!t)return;let n=await _E(this.rpc(),{action:`instrument`,formId:t.id,value:e});this.message.set(vE(n))}selectForm(e){this.hostPageId&&uE(e)&&uE(e)!==this.hostPageId&&this.allPages.set(!0),this.selectedId.set(e),this.selectedLabel.set(this.forms().find(t=>t.id===e)?.label??null),this.filter.set(``),this.fieldPath.set(null),this.snapshot.set(null),this.armed.set(null)}toggleField(e){this.fieldPath.update(t=>t===e?null:e)}closeField(){let e=this.host.nativeElement,t=e.querySelector(`button.field[aria-pressed="true"]`)??e.querySelector(`.table-scroll`);this.fieldPath.set(null),t?.focus()}showField(e){this.tab_.set(`fields`);let t=()=>this.rows().some(t=>t.node.path===e);t()||this.filter.set(``),t()||this.active.set(new Set),this.fieldPath.set(e),Id(()=>{let e=this.host.nativeElement;e.querySelector(`button.field[aria-pressed="true"]`)?.scrollIntoView?.({block:`nearest`}),(e.querySelector(`#forms-field-heading`)??e.querySelector(`.table-scroll`))?.focus()},{injector:this.injector})}toggleChip(e){this.active.update(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}async act(e,t={}){let n=this.selected();if(!n)return;this.armed.set(null);let r=await _E(this.rpc(),{action:e,formId:n.id,...t});r.snapshot&&this.selected()?.id===n.id&&this.snapshot.set(r.snapshot),this.message.set(vE(r))}confirmAct(e){if(this.armed()!==e){this.armed.set(e),this.message.set(`Press "Confirm ${e}" to ${e} the form in the app.`);return}this.act(e,{confirm:!0,snapshot:this.snapshot()??void 0})}onKey(e){let t=this.tabs.map(e=>e.id),n=t.indexOf(this.tab_()),r=n;if(e.key===`ArrowRight`)r=(n+1)%t.length;else if(e.key===`ArrowLeft`)r=(n-1+t.length)%t.length;else if(e.key===`Home`)r=0;else if(e.key===`End`)r=t.length-1;else return;e.preventDefault(),this.tab_.set(t[r]);let i=e.currentTarget;queueMicrotask(()=>i.querySelector(`#forms-tab-${t[r]}`)?.focus())}sourceText(e){let t=fE[e.source??``]??e.source??``;return e.from===void 0?t:`${t} on ${e.from||`the form`}`}clearFilters(e){this.filter.set(``),this.active.set(new Set);let t=this.rows().length,n=`Filters cleared. Showing ${t} ${t===1?`field`:`fields`}.`;this.filterStatus.update(e=>e===n?`${n}\u00a0`:n),e.focus()}onFilter(e){this.filter.set(e.target.value)}highlight(e,t){let n=this.rpc();n&&n.scope(`pangular`).rpc.callEvent(`request-form-highlight`,e?{formId:e,path:t}:null)}kindLabel(e){return dE[e]}constraintList(e){return Object.entries(e.constraints??{}).map(([e,t])=>`${e} ${t}`)}errorText(e,t){return/^[a-z]/.test(t.message)?`${e.key||`The form`} ${t.message}`:t.message}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-forms-inspector`]],hostBindings:function(e,t){e&1&&G(`keydown.escape`,function(){return t.cancelPick()})},inputs:{rpc:[1,`rpc`],focus:[1,`focus`]},outputs:{focusHandled:`focusHandled`},decls:6,vars:1,consts:[[`fieldFilter`,``],[`role`,`status`,1,`empty`],[`role`,`alert`,1,`empty`],[1,`empty`],[1,`layout`],[`aria-hidden`,`true`,1,`spinner`],[1,`empty-title`],[1,`muted`],[`type`,`button`,1,`small`,3,`click`],[1,`sidebar`],[`id`,`forms-list-heading`,1,`list-heading`],[1,`list-count`],[1,`page-toggle`],[`aria-labelledby`,`forms-list-heading`,1,`form-list`],[`aria-labelledby`,`forms-detail-title`,1,`detail`,`gone`],[`aria-labelledby`,`forms-detail-title`,1,`detail`],[`type`,`checkbox`,3,`change`,`checked`],[`type`,`button`,1,`form-item`,3,`click`],[`aria-hidden`,`true`,1,`dot`],[1,`label`],[1,`kind`],[1,`id`],[1,`sr-only`],[1,`count`],[`id`,`forms-detail-title`],[`role`,`status`,1,`muted`],[1,`detail-head`],[1,`detail-meta`],[1,`summary`],[1,`badge`],[1,`totals`],[1,`error-summary`],[3,`tool`,`page`,`signalForm`],[1,`action-bar`],[`role`,`group`,`aria-label`,`Form actions`,1,`actions`],[`type`,`button`,1,`small`,3,`click`,`disabled`],[`aria-hidden`,`true`,1,`divider`],[`type`,`button`,1,`small`,3,`armed`,`disabled`],[`aria-hidden`,`true`,1,`spacer`],[`type`,`button`,1,`small`,`danger`,3,`click`,`disabled`],[`type`,`button`,1,`small`,`primary`,3,`click`,`disabled`],[`id`,`forms-writes-off`,1,`muted`],[`role`,`status`,1,`status`],[`role`,`tablist`,`aria-label`,`Form views`,1,`tabs`,3,`keydown`],[`type`,`button`,`role`,`tab`,3,`id`],[`role`,`tabpanel`,1,`panel`,3,`id`],[3,`formId`,`version`,`rpc`],[`type`,`button`,1,`summary-link`,3,`click`],[1,`kind-tag`],[`type`,`button`,`role`,`tab`,3,`click`,`id`],[1,`filters`],[`type`,`search`,`placeholder`,`Filter fields by path`,`aria-label`,`Filter fields by path`,`autocomplete`,`off`,`spellcheck`,`false`,1,`filter`,3,`input`,`keydown.escape`,`value`],[1,`chips`],[`role`,`status`,1,`sr-only`],[`role`,`region`,`aria-label`,`Fields`,`tabindex`,`0`,1,`table-scroll`],[1,`fields`],[`scope`,`col`],[3,`form`,`node`,`version`,`rpc`],[3,`mouseenter`,`mouseleave`],[`scope`,`row`,1,`name`],[`type`,`button`,1,`field`,3,`focus`,`blur`,`click`],[1,`type`],[1,`value`],[1,`status-cell`],[1,`flags`],[1,`warn`],[1,`errors`],[1,`unseen`],[1,`source`],[`colspan`,`5`,1,`muted`,`truncated`],[`colspan`,`5`,1,`no-match`],[`type`,`button`,1,`small`],[3,`closed`,`form`,`node`,`version`,`rpc`],[`what`,`form events on this page`,`limit`,`formTimeline`,3,`dropped`,`max`],[3,`record`,`events`,`recording`],[3,`showField`,`formId`,`version`,`rpc`]],template:function(e,t){e&1&&P(0,jz,4,0,`div`,1)(1,Mz,7,0,`div`,2)(2,Nz,4,0,`div`,1)(3,Pz,5,0,`div`,3)(4,Fz,7,2,`div`,3)(5,PB,13,3,`div`,4),e&2&&F(t.rpc()?t.failed()?1:t.loading()?2:t.forms().length?t.visible().length?5:4:3:0)},dependencies:[kR,az,RR,zR,Dz,XD,ab],styles:[`.muted[_ngcontent-%COMP%] { +}`]})},Gz=()=>[],Kz=(e,t)=>t.id,qz=(e,t)=>t.node.path;function Jz(e,t){e&1&&(z(0,`div`,1),V(1,`span`,5),z(2,`p`),J(3,`Connecting to the devtools server…`),B()())}function Yz(e,t){if(e&1){let e=W();z(0,`div`,2)(1,`p`,6),J(2,`Could not load forms`),B(),z(3,`p`,7),J(4,` The devtools server did not answer. Check that the app is running, then try again. `),B(),z(5,`button`,8),G(`click`,function(){return O(e),k(K().retry())}),J(6,`Try again`),B()()}}function Xz(e,t){e&1&&(z(0,`div`,1),V(1,`span`,5),z(2,`p`),J(3,`Loading forms…`),B()())}function Zz(e,t){e&1&&(z(0,`div`,3)(1,`p`,6),J(2,`No forms on the page yet`),B(),z(3,`p`,7),J(4,` Open a page that renders a form. Signal Forms, reactive and template-driven forms all show up here, in development builds. `),B()())}function Qz(e,t){if(e&1){let e=W();z(0,`div`,3)(1,`p`,6),J(2,`No forms on this page`),B(),z(3,`p`,7),J(4),B(),z(5,`button`,8),G(`click`,function(){return O(e),k(K().allPages.set(!0))}),J(6,` Show forms from all pages `),B()()}if(e&2){let e=K();M(4),Z(` Other connected tabs report `,e.forms().length,` `,e.forms().length===1?`form`:`forms`,`. `)}}function $z(e,t){if(e&1){let e=W();z(0,`label`,12)(1,`input`,16),G(`change`,function(t){return O(e),k(K(2).allPages.set(t.target.checked))}),B(),J(2,` All pages `),B()}if(e&2){let e=K(2);M(),R(`checked`,e.allPages())}}function eB(e,t){e&1&&(z(0,`span`,23),J(1),z(2,`span`,22),J(3,` errors`),B()()),e&2&&(M(),Y(t))}function tB(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,17),G(`click`,function(){let t=O(e).$implicit;return k(K(2).selectForm(t.id))}),V(2,`span`,18),z(3,`span`,19),J(4),B(),z(5,`span`,20),J(6),z(7,`span`,21),J(8),B(),z(9,`span`,22),J(10),B()(),P(11,eB,4,1,`span`,23),B()()}if(e&2){let e,n=t.$implicit,r=K(2);M(),q(`active`,n.id===r.selected()?.id),N(`aria-current`,n.id===r.selected()?.id?`true`:null),M(),N(`data-status`,n.root.status),M(),N(`title`,n.label),M(),Y(n.label),M(2),X(``,r.kindLabel(n.kind),` · `),M(2),Y(n.id),M(2),X(`, `,n.root.status),M(),F((e=r.counts().get(n.id)?.errors)?11:-1,e)}}function nB(e,t){if(e&1){let e=W();z(0,`section`,14)(1,`h2`,24),J(2),B(),z(3,`p`,25),J(4,` This form is no longer on the page. It comes back here if the page renders it again. `),B(),z(5,`button`,8),G(`click`,function(){O(e);let t=K(2);return k(t.selectForm(t.visible()[0].id))}),J(6),B()()}if(e&2){let e=K(2);M(2),Y(t),M(4),X(` Show `,e.visible()[0].label,` `)}}function rB(e,t){if(e&1){let e=W();z(0,`section`,14)(1,`h2`,24),J(2),B(),z(3,`p`,7),J(4,`This form is on another page. Tick "All pages" to see it again.`),B(),z(5,`button`,8),G(`click`,function(){return O(e),k(K(2).allPages.set(!0))}),J(6,` Show forms from all pages `),B()()}e&2&&(M(2),Y(t))}function iB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K();M(),Y(e.submitted?`submitted`:`not submitted`)}}function aB(e,t){e&1&&(z(0,`span`),J(1,`submitting`),B())}function oB(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,47),G(`click`,function(){let t=O(e).$implicit;return k(K(4).showField(t.path))}),z(2,`span`,22),J(3,`Show field `),B(),z(4,`code`),J(5),B(),z(6,`span`,22),J(7,`:`),B(),J(8),z(9,`code`,48),J(10),B()()()}if(e&2){let e=t.$implicit;M(5),Y(e.path||`(form)`),M(3),X(` `,e.message,` `),M(2),Y(e.kind)}}function sB(e,t){if(e&1&&(z(0,`details`,31)(1,`summary`),J(2),B(),z(3,`ul`),I(4,oB,11,3,`li`,null,Dg),B()()),e&2){let e=K();M(2),X(`Error summary (`,e.errorSummary.length,`)`),M(2),L(e.errorSummary)}}function cB(e,t){if(e&1){let e=W();z(0,`button`,35),G(`click`,function(){return O(e),k(K(3).confirmAct(`restore`))}),J(1),B()}if(e&2){let e=K(3);q(`armed`,e.armed()===`restore`),R(`disabled`,!e.canWrite()),N(`aria-describedby`,e.canWrite()?null:`forms-writes-off`)(`title`,`Restore `+e.snapshot()),M(),X(` `,e.armed()===`restore`?`Confirm restore`:`Restore `+e.snapshot(),` `)}}function lB(e,t){if(e&1&&(z(0,`p`,41),J(1),B()),e&2){let e=K(3);M(),Y(e.writesOff)}}function uB(e,t){if(e&1){let e=W();z(0,`button`,49),G(`click`,function(){let t=O(e).$implicit;return k(K(3).tab_.set(t.id))}),J(1),B()}if(e&2){let e=t.$implicit,n=K(3);R(`id`,`forms-tab-`+e.id),N(`aria-selected`,e.id===n.tab_())(`aria-controls`,`forms-panel-`+e.id)(`tabindex`,e.id===n.tab_()?0:-1),M(),X(` `,e.label,` `)}}function dB(e,t){if(e&1){let e=W();z(0,`label`)(1,`input`,16),G(`change`,function(){let t=O(e).$implicit;return k(K(4).toggleChip(t.id))}),B(),J(2),B()}if(e&2){let e=t.$implicit,n=K(4);M(),R(`checked`,n.active().has(e.id)),M(),X(` `,e.label,` `)}}function fB(e,t){if(e&1&&(z(0,`div`,7),J(1,` typed `),z(2,`code`),J(3),yv(4,`json`),B(),J(5,`, not in the model yet `),B()),e&2){let e=K(2).$implicit;M(3),Y(xv(4,1,e.node.uncommitted))}}function pB(e,t){if(e&1&&(z(0,`div`,7),J(1,` resets to `),z(2,`code`),J(3),yv(4,`json`),B()()),e&2){let e=K(2).$implicit;M(3),Y(xv(4,1,e.node.defaultValue))}}function mB(e,t){if(e&1&&(z(0,`code`),J(1),yv(2,`json`),B(),P(3,fB,6,3,`div`,7),P(4,pB,5,3,`div`,7)),e&2){let e=K().$implicit;M(),Y(xv(2,3,e.node.value)),M(2),F(e.node.uncommitted===void 0?-1:3),M(),F(e.node.defaultValue===void 0?-1:4)}}function hB(e,t){e&1&&(z(0,`span`,7),J(1,`not created yet`),B())}function gB(e,t){if(e&1&&(z(0,`span`,29),J(1),B()),e&2){let e=K().$implicit;N(`data-status`,e.node.status),M(),Y(e.node.status)}}function _B(e,t){e&1&&(z(0,`span`),J(1,`touched`),B())}function vB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.node.changed===!1?`dirty, unchanged`:`dirty`)}}function yB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),X(`not validated (`,e.node.skipped,`)`)}}function bB(e,t){if(e&1&&(z(0,`span`,65),J(1),B()),e&2){let e=K().$implicit;M(),X(`stale: `,e.node.stale.join(`, `))}}function xB(e,t){e&1&&(z(0,`span`,65),J(1,`view out of sync`),B())}function SB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit,t=K(4);M(),X(`redacted: `,t.redactLabel(e.node.redacted))}}function CB(e,t){e&1&&(z(0,`span`),J(1,`required`),B())}function wB(e,t){e&1&&(z(0,`span`),J(1,`readonly`),B())}function TB(e,t){e&1&&(z(0,`span`),J(1,`hidden`),B())}function EB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),X(`updates on `,e.node.updateOn)}}function DB(e,t){e&1&&(z(0,`span`),J(1,`debouncing`),B())}function OB(e,t){e&1&&(z(0,`span`),J(1,`validators`),B())}function kB(e,t){e&1&&(z(0,`span`),J(1,`async validator`),B())}function AB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function jB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.node.accessor)}}function MB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),X(`name `,e.node.name)}}function NB(e,t){if(e&1&&(z(0,`span`),J(1),yv(2,`json`),B()),e&2){let e=t.$implicit;M(),X(`metadata `,xv(2,1,e))}}function PB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=t.$implicit;M(),X(`disabled: `,e)}}function FB(e,t){if(e&1&&(z(0,`span`,68),J(1),B()),e&2){let e=K().$implicit;M(),X(`at `,e.params.path)}}function IB(e,t){if(e&1&&(z(0,`span`,68),J(1),B()),e&2){let e=K().$implicit,t=K(5);M(),Y(t.sourceText(e))}}function LB(e,t){if(e&1&&(z(0,`div`),J(1),z(2,`code`,48),J(3),B(),P(4,FB,2,1,`span`,68),P(5,IB,2,1,`span`,68),B()),e&2){let e=t.$implicit,n=K().$implicit,r=K(4);M(),X(` `,r.errorText(n.node,e),` `),M(2),Y(e.kind),M(),F(e.kind===`standardSchema`&&e.params?.path?4:-1),M(),F(e.source?5:-1)}}function RB(e,t){e&1&&(z(0,`div`,67),J(1,`not shown to the user`),B())}function zB(e,t){if(e&1&&(z(0,`tr`)(1,`td`,69),J(2),B()()),e&2){let e=K().$implicit;M(),j_(`padding-left`,28+e.depth*16,`px`),M(),Z(` `,e.node.truncated,` more fields under `,e.node.path||`the form`,` not shown `)}}function BB(e,t){if(e&1){let e=W();z(0,`tr`,58),G(`mouseenter`,function(){let t=O(e).$implicit,n=K(2);return k(K(2).highlight(n.id,t.node.path))})(`mouseleave`,function(){return O(e),k(K(4).highlight(null,``))}),z(1,`th`,59)(2,`button`,60),G(`focus`,function(){let t=O(e).$implicit,n=K(2);return k(K(2).highlight(n.id,t.node.path))})(`blur`,function(){return O(e),k(K(4).highlight(null,``))})(`click`,function(){let t=O(e).$implicit;return k(K(4).toggleField(t.node.path))}),J(3),B(),z(4,`span`,61),J(5),B()(),z(6,`td`,62),P(7,mB,5,5),B(),z(8,`td`,63),P(9,hB,2,0,`span`,7)(10,gB,2,2,`span`,29),B(),z(11,`td`,64),P(12,_B,2,0,`span`),P(13,vB,2,1,`span`),P(14,yB,2,1,`span`),P(15,bB,2,1,`span`,65),P(16,xB,2,0,`span`,65),P(17,SB,2,1,`span`),P(18,CB,2,0,`span`),P(19,wB,2,0,`span`),P(20,TB,2,0,`span`),P(21,EB,2,1,`span`),P(22,DB,2,0,`span`),P(23,OB,2,0,`span`),P(24,kB,2,0,`span`),I(25,AB,2,1,`span`,null,Og),P(27,jB,2,1,`span`),P(28,MB,2,1,`span`),I(29,NB,3,3,`span`,null,Dg),I(31,PB,2,1,`span`,null,Dg),B(),z(33,`td`,66),I(34,LB,6,4,`div`,null,Dg),P(36,RB,2,0,`div`,67),B()(),P(37,zB,3,4,`tr`)}if(e&2){let e=t.$implicit,n=K(4);q(`invalid`,e.node.errors.length),M(),j_(`padding-left`,12+e.depth*16,`px`),M(),N(`aria-label`,`Show details for `+(e.node.path||`the form`))(`aria-pressed`,e.node.path===n.fieldPath())(`title`,e.node.path||`(form)`),M(),X(` `,e.node.key||`(form)`,` `),M(2),Y(e.node.type),M(2),F(e.node.type===`control`?7:-1),M(2),F(e.node.materialized===!1?9:10),M(3),F(e.node.touched?12:-1),M(),F(e.node.dirty?13:-1),M(),F(e.node.skipped?14:-1),M(),F(e.node.stale?.length?15:-1),M(),F(e.node.dom?.drift===void 0?-1:16),M(),F(e.node.redacted?17:-1),M(),F(e.node.required?18:-1),M(),F(e.node.readonly?19:-1),M(),F(e.node.hidden?20:-1),M(),F(e.node.updateOn?21:-1),M(),F(e.node.debouncing?22:-1),M(),F(e.node.validators?.sync?23:-1),M(),F(e.node.validators?.async?24:-1),M(),L(n.constraintList(e.node)),M(2),F(e.node.accessor?27:-1),M(),F(e.node.name?28:-1),M(),L(e.node.metadata??mv(28,Gz)),M(2),L(e.node.disabledReasons??mv(29,Gz)),M(3),L(e.node.errors),M(2),F(e.node.errors.length&&e.node.dom?.errorShown===!1?36:-1),M(),F(e.node.truncated?37:-1)}}function VB(e,t){e&1&&J(0),e&2&&X(` No field path matches "`,K(5).filter(),`". `)}function HB(e,t){e&1&&J(0,` No field matches the selected filters. `)}function UB(e,t){if(e&1){let e=W();z(0,`button`,8),G(`click`,function(){O(e),K(2);let t=u_(2);return k(K(3).clearFilters(t))}),J(1,` Clear filters `),B()}}function WB(e,t){if(e&1&&(z(0,`tr`)(1,`td`,70)(2,`p`),P(3,VB,1,1)(4,HB,1,0),B(),P(5,UB,2,0,`button`,71),B()()),e&2){let e=K(4);M(3),F(e.filter()?3:4),M(2),F(e.filtering()?5:-1)}}function GB(e,t){if(e&1){let e=W();z(0,`app-forms-field-detail`,72),G(`closed`,function(){return O(e),k(K(4).closeField())}),B()}if(e&2){let e=K(2),n=K(2);R(`form`,e)(`node`,t)(`version`,n.version())(`rpc`,n.rpc())}}function KB(e,t){if(e&1){let e=W();z(0,`div`,50)(1,`input`,51,0),G(`input`,function(t){return O(e),k(K(3).onFilter(t))})(`keydown.escape`,function(){return O(e),k(K(3).filter.set(``))}),B(),z(3,`fieldset`,52)(4,`legend`,22),J(5,`Show only fields that are`),B(),I(6,dB,3,2,`label`,null,Kz),B()(),z(8,`p`,53),J(9),B(),z(10,`div`,54)(11,`table`,55)(12,`thead`)(13,`tr`)(14,`th`,56),J(15,`Field`),B(),z(16,`th`,56),J(17,`Value`),B(),z(18,`th`,56),J(19,`Status`),B(),z(20,`th`,56),J(21,`State`),B(),z(22,`th`,56),J(23,`Errors`),B()()(),z(24,`tbody`),I(25,BB,38,30,null,null,qz,!1,WB,6,2,`tr`),B()()(),P(28,GB,1,4,`app-forms-field-detail`,57)}if(e&2){let e,t=K(3);M(),R(`value`,t.filter()),M(5),L(t.chips),M(3),Y(t.filterStatus()),M(16),L(t.rows()),M(3),F((e=t.selectedNode())?28:-1,e)}}function qB(e,t){if(e&1){let e=W();V(0,`app-limit-note`,73),z(1,`app-forms-timeline`,74),G(`record`,function(t){return O(e),k(K(3).setRecording(t))}),B()}if(e&2){let e=K(3);R(`dropped`,e.droppedEvents())(`max`,e.maxEvents()),M(),R(`events`,e.selectedEvents())(`recording`,e.recording())}}function JB(e,t){if(e&1&&V(0,`app-forms-submit`,46),e&2){let e=K(),t=K(2);R(`formId`,e.id)(`version`,t.version())(`rpc`,t.rpc())}}function YB(e,t){if(e&1){let e=W();z(0,`app-forms-lint`,75),G(`showField`,function(t){return O(e),k(K(3).showField(t))}),B()}if(e&2){let e=K(),t=K(2);R(`formId`,e.id)(`version`,t.version())(`rpc`,t.rpc())}}function XB(e,t){if(e&1){let e=W();z(0,`section`,15)(1,`div`,26)(2,`h2`,24),J(3),B(),z(4,`p`,27),J(5),z(6,`code`),J(7),B()()(),z(8,`div`,28)(9,`span`,29),J(10),B(),z(11,`span`),J(12),B(),z(13,`span`),J(14),B(),P(15,iB,2,1,`span`),P(16,aB,2,0,`span`),z(17,`span`,30)(18,`b`),J(19),B(),J(20,` fields · `),z(21,`b`),J(22),B(),J(23,` errors`),B()(),P(24,sB,6,1,`details`,31),V(25,`app-forms-webmcp`,32),z(26,`div`,33)(27,`div`,34)(28,`button`,35),G(`click`,function(){return O(e),k(K(2).act(`touch-all`))}),J(29,` Touch all `),B(),z(30,`button`,35),G(`click`,function(){return O(e),k(K(2).act(`revalidate`))}),J(31,` Revalidate `),B(),z(32,`button`,8),G(`click`,function(){return O(e),k(K(2).act(`focus-first-invalid`))}),J(33,` Focus first invalid `),B(),z(34,`button`,8),G(`click`,function(){O(e);let t=K(2);return k(t.picking()?t.cancelPick():t.pick())}),J(35),B(),V(36,`span`,36),z(37,`button`,8),G(`click`,function(){return O(e),k(K(2).act(`snapshot`))}),J(38,`Snapshot`),B(),P(39,cB,2,6,`button`,37),V(40,`span`,38),z(41,`button`,39),G(`click`,function(){return O(e),k(K(2).confirmAct(`reset`))}),J(42),B(),z(43,`button`,40),G(`click`,function(){return O(e),k(K(2).confirmAct(`submit`))}),J(44),B()(),P(45,lB,2,1,`p`,41),z(46,`p`,42),J(47),B()(),z(48,`div`,43),G(`keydown`,function(t){return O(e),k(K(2).onKey(t))}),I(49,uB,2,5,`button`,44,Kz),B(),z(51,`div`,45),P(52,KB,29,4)(53,qB,2,4)(54,JB,1,3,`app-forms-submit`,46)(55,YB,1,3,`app-forms-lint`,46),B()()}if(e&2){let e,n=t,r=K(2);M(3),Y(n.label),M(2),X(` `,r.kindLabel(n.kind),` · `),M(2),Y(n.id),M(2),N(`data-status`,n.root.status),M(),Y(n.root.status),M(2),Y(n.root.dirty?`dirty`:`pristine`),M(2),Y(n.root.touched?`touched`:`untouched`),M(),F(n.submitted===void 0?-1:15),M(),F(n.root.submitting?16:-1),M(3),Y(r.counts().get(n.id)?.fields),M(2),q(`has-errors`,r.counts().get(n.id)?.errors),M(),Y(r.counts().get(n.id)?.errors),M(2),F(n.errorSummary?.length?24:-1),M(),R(`tool`,n.webMcp)(`page`,r.webMcpPage(n.id))(`signalForm`,n.kind===`signal`),M(3),R(`disabled`,!r.canWrite()),N(`aria-describedby`,r.canWrite()?null:`forms-writes-off`),M(2),R(`disabled`,!r.canWrite()),N(`aria-describedby`,r.canWrite()?null:`forms-writes-off`),M(4),q(`on`,r.picking()),N(`aria-pressed`,!!r.picking()),M(),X(` `,r.picking()?`Cancel picking`:`Pick field on page`,` `),M(4),F(r.snapshot()?39:-1),M(2),q(`armed`,r.armed()===`reset`),R(`disabled`,!r.canWrite()),N(`aria-describedby`,r.canWrite()?null:`forms-writes-off`),M(),X(` `,r.armed()===`reset`?`Confirm reset`:`Reset`,` `),M(),q(`armed`,r.armed()===`submit`),R(`disabled`,!r.canWrite()),N(`aria-describedby`,r.canWrite()?null:`forms-writes-off`),M(),X(` `,r.armed()===`submit`?`Confirm submit`:`Submit`,` `),M(),F(r.canWrite()?-1:45),M(2),Y(r.message()),M(2),L(r.tabs),M(2),R(`id`,`forms-panel-`+r.tab_()),N(`aria-labelledby`,`forms-tab-`+r.tab_()),M(),F((e=r.tab_())===`fields`?52:e===`timeline`?53:e===`submit`?54:e===`lint`?55:-1)}}function ZB(e,t){if(e&1&&(z(0,`div`,4)(1,`div`,9)(2,`h2`,10),J(3,` Forms `),z(4,`span`,11),J(5),B()(),P(6,$z,3,1,`label`,12),z(7,`ul`,13),I(8,tB,12,10,`li`,null,Kz),B()(),P(10,nB,7,2,`section`,14)(11,rB,7,1,`section`,14)(12,XB,56,41,`section`,15),B()),e&2){let e,t=K();M(5),Y(t.visible().length),M(),F(t.hostPageId&&(t.allPages()||t.otherPages())?6:-1),M(2),L(t.visible()),M(2),F((e=t.missing())?10:(e=t.hidden())?11:(e=t.selected())?12:-1,e)}}var QB=[{id:`fields`,label:`Fields`},{id:`timeline`,label:`Timeline`},{id:`submit`,label:`Submit`},{id:`lint`,label:`Lint`}],$B=[{id:`invalid`,label:`Invalid`},{id:`dirty`,label:`Dirty`},{id:`touched`,label:`Touched`},{id:`disabled`,label:`Disabled`},{id:`hidden-error`,label:`Error not shown`}];function eV(e,t){switch(t){case`invalid`:return e.errors.length>0;case`dirty`:return e.dirty&&e.type===`control`;case`touched`:return e.touched&&e.type===`control`;case`disabled`:return e.status===`DISABLED`;case`hidden-error`:return e.dom?.errorShown===!1}}function tV(e){return e.errors.length+(e.children??[]).reduce((e,t)=>e+tV(t),0)}function nV(e){return e.children?e.children.reduce((e,t)=>e+nV(t),0):+(e.type===`control`&&e.materialized!==!1)}var rV=class e{rpc=$(null);focus=$(null);canWrite=Q(()=>AE(this.rpc(),`forms`));redactLabel=CE;writesOff=nE(`forms`);focusHandled=Iv();forms=j([]);webMcp=j([]);events=j([]);loading=j(!0);failed=j(!1);selectedId=j(null);selectedLabel=j(null);hostPageId=uE();allPages=j(!1);visible=Q(()=>{let e=this.forms(),t=this.hostPageId;return t&&!this.allPages()?e.filter(e=>vE(e.id)===t):e});otherPages=Q(()=>this.forms().some(e=>vE(e.id)!==this.hostPageId));instrumented=j([]);recording=Q(()=>{let e=this.selected()?.id??``;return this.instrumented().some(t=>e.endsWith(`@${t}`))});filter=j(``);tabs=QB;chips=$B;tab_=j(`fields`);active=j(new Set);filtering=Q(()=>!!this.filter()||this.active().size>0);filterStatus=j(``);version=j(0);message=j(``);webMcpPage(e){let t=vE(e);return this.webMcp().find(e=>e.pageId===t)}picking=j(null);pickSeq=0;unsubscribe=null;destroyRef=E(ws);host=E(Nl);injector=E(Ss);counts=Q(()=>new Map(this.visible().map(e=>[e.id,{fields:nV(e.root),errors:tV(e.root)}])));chosen=Q(()=>{let e=this.selectedId();if(e===null)return null;let t=this.forms(),n=this.selectedLabel(),r=vE(e);return t.find(t=>t.id===e)??t.find(e=>e.label===n&&vE(e.id)===r)??null});selected=Q(()=>{let e=this.visible();if(this.selectedId()===null)return e[0]??null;let t=this.chosen();return t&&e.includes(t)?t:null});missing=Q(()=>this.selectedId()!==null&&!this.chosen()&&this.visible().length?this.selectedLabel()??this.selectedId():null);hidden=Q(()=>{let e=this.chosen();return e&&!this.selected()&&this.visible().length?e.label:null});selectedFormId=Q(()=>this.selected()?.id??null);fieldPath=Nv({source:this.selectedFormId,computation:()=>null});armed=Nv({source:this.selectedFormId,computation:()=>null});snapshot=Nv({source:this.selectedFormId,computation:()=>null});rows=Q(()=>{let e=this.selected();if(!e)return[];let t=this.filter().toLowerCase(),n=Array.from(this.active()),r=[],i=(e,a)=>{let o=r.length,s=(!t||e.path.toLowerCase().includes(t))&&n.every(t=>eV(e,t));for(let t of e.children??[])s=i(t,a+1)||s;return s&&r.splice(o,0,{node:e,depth:a}),s};return i(e.root,0),r});selectedNode=Q(()=>{let e=this.fieldPath(),t=this.selected();if(e===null||!t)return null;let n=t=>t.path===e?t:(t.children??[]).map(n).find(Boolean)??null;return n(t.root)});dropped=j({});droppedEvents=Q(()=>{let e=this.selected()?.id;return e?this.dropped()[vE(e)]??0:0});maxEvents=Q(()=>kE(this.rpc()).limits.formTimeline);selectedEvents=Q(()=>{let e=this.selected()?.id;return this.events().filter(t=>t.formId===e)});constructor(){dc(()=>{let e=this.rpc();e&&this.load(e)}),dc(()=>{let e=this.focus();e&&jv(()=>{this.selectForm(e.id),this.focusHandled.emit()})}),this.destroyRef.onDestroy(()=>{this.unsubscribe?.(),this.highlight(null,``)})}async load(e){this.loading.set(!0),this.failed.set(!1);try{let t=await e.scope(`pangular`).rpc.sharedState(`forms`);if(this.destroyRef.destroyed)return;let n=e=>{let t=e;this.forms.set(t?.forms??[]),this.events.set(t?.events??[]),this.instrumented.set(t?.instrumented??[]),this.dropped.set(t?.dropped??{}),this.webMcp.set(t?.webMcp??[]),this.version.update(e=>e+1)};n(t.value()),this.unsubscribe?.(),this.unsubscribe=t.on(`updated`,n)}catch{this.failed.set(!0)}finally{this.loading.set(!1)}}retry(){let e=this.rpc();e&&this.load(e)}async pick(){let e=this.selected();if(!e)return;let t=++this.pickSeq;this.picking.set(e.id),this.message.set(`Click a field in the app. Press Escape or Cancel picking to stop.`);let n=await TE(this.rpc(),{action:`pick`,formId:e.id});if(t!==this.pickSeq)return;this.picking.set(null);let r=n;if(!n.ok||!r.formId){this.message.set(EE(n));return}this.selectForm(r.formId),this.tab_.set(`fields`),this.fieldPath.set(r.path??``),this.message.set(`Picked ${r.path||`(form)`}.`)}cancelPick(){let e=this.picking();e&&TE(this.rpc(),{action:`cancel-pick`,formId:e})}async setRecording(e){let t=this.selected();if(!t)return;let n=await TE(this.rpc(),{action:`instrument`,formId:t.id,value:e});this.message.set(EE(n))}selectForm(e){this.hostPageId&&vE(e)&&vE(e)!==this.hostPageId&&this.allPages.set(!0),this.selectedId.set(e),this.selectedLabel.set(this.forms().find(t=>t.id===e)?.label??null),this.filter.set(``),this.fieldPath.set(null),this.snapshot.set(null),this.armed.set(null)}toggleField(e){this.fieldPath.update(t=>t===e?null:e)}closeField(){let e=this.host.nativeElement,t=e.querySelector(`button.field[aria-pressed="true"]`)??e.querySelector(`.table-scroll`);this.fieldPath.set(null),t?.focus()}showField(e){this.tab_.set(`fields`);let t=()=>this.rows().some(t=>t.node.path===e);t()||this.filter.set(``),t()||this.active.set(new Set),this.fieldPath.set(e),zd(()=>{let e=this.host.nativeElement;e.querySelector(`button.field[aria-pressed="true"]`)?.scrollIntoView?.({block:`nearest`}),(e.querySelector(`#forms-field-heading`)??e.querySelector(`.table-scroll`))?.focus()},{injector:this.injector})}toggleChip(e){this.active.update(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}async act(e,t={}){let n=this.selected();if(!n)return;this.armed.set(null);let r=await TE(this.rpc(),{action:e,formId:n.id,...t});r.snapshot&&this.selected()?.id===n.id&&this.snapshot.set(r.snapshot),this.message.set(EE(r))}confirmAct(e){if(this.armed()!==e){this.armed.set(e),this.message.set(`Press "Confirm ${e}" to ${e} the form in the app.`);return}this.act(e,{confirm:!0,snapshot:this.snapshot()??void 0})}onKey(e){let t=this.tabs.map(e=>e.id),n=t.indexOf(this.tab_()),r=n;if(e.key===`ArrowRight`)r=(n+1)%t.length;else if(e.key===`ArrowLeft`)r=(n-1+t.length)%t.length;else if(e.key===`Home`)r=0;else if(e.key===`End`)r=t.length-1;else return;e.preventDefault(),this.tab_.set(t[r]);let i=e.currentTarget;queueMicrotask(()=>i.querySelector(`#forms-tab-${t[r]}`)?.focus())}sourceText(e){let t=bE[e.source??``]??e.source??``;return e.from===void 0?t:`${t} on ${e.from||`the form`}`}clearFilters(e){this.filter.set(``),this.active.set(new Set);let t=this.rows().length,n=`Filters cleared. Showing ${t} ${t===1?`field`:`fields`}.`;this.filterStatus.update(e=>e===n?`${n}\u00a0`:n),e.focus()}onFilter(e){this.filter.set(e.target.value)}highlight(e,t){let n=this.rpc();n&&n.scope(`pangular`).rpc.callEvent(`request-form-highlight`,e?{formId:e,path:t}:null)}kindLabel(e){return yE[e]}constraintList(e){return Object.entries(e.constraints??{}).map(([e,t])=>`${e} ${t}`)}errorText(e,t){return/^[a-z]/.test(t.message)?`${e.key||`The form`} ${t.message}`:t.message}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-forms-inspector`]],hostBindings:function(e,t){e&1&&G(`keydown.escape`,function(){return t.cancelPick()})},inputs:{rpc:[1,`rpc`],focus:[1,`focus`]},outputs:{focusHandled:`focusHandled`},decls:6,vars:1,consts:[[`fieldFilter`,``],[`role`,`status`,1,`empty`],[`role`,`alert`,1,`empty`],[1,`empty`],[1,`layout`],[`aria-hidden`,`true`,1,`spinner`],[1,`empty-title`],[1,`muted`],[`type`,`button`,1,`small`,3,`click`],[1,`sidebar`],[`id`,`forms-list-heading`,1,`list-heading`],[1,`list-count`],[1,`page-toggle`],[`aria-labelledby`,`forms-list-heading`,1,`form-list`],[`aria-labelledby`,`forms-detail-title`,1,`detail`,`gone`],[`aria-labelledby`,`forms-detail-title`,1,`detail`],[`type`,`checkbox`,3,`change`,`checked`],[`type`,`button`,1,`form-item`,3,`click`],[`aria-hidden`,`true`,1,`dot`],[1,`label`],[1,`kind`],[1,`id`],[1,`sr-only`],[1,`count`],[`id`,`forms-detail-title`],[`role`,`status`,1,`muted`],[1,`detail-head`],[1,`detail-meta`],[1,`summary`],[1,`badge`],[1,`totals`],[1,`error-summary`],[3,`tool`,`page`,`signalForm`],[1,`action-bar`],[`role`,`group`,`aria-label`,`Form actions`,1,`actions`],[`type`,`button`,1,`small`,3,`click`,`disabled`],[`aria-hidden`,`true`,1,`divider`],[`type`,`button`,1,`small`,3,`armed`,`disabled`],[`aria-hidden`,`true`,1,`spacer`],[`type`,`button`,1,`small`,`danger`,3,`click`,`disabled`],[`type`,`button`,1,`small`,`primary`,3,`click`,`disabled`],[`id`,`forms-writes-off`,1,`muted`],[`role`,`status`,1,`status`],[`role`,`tablist`,`aria-label`,`Form views`,1,`tabs`,3,`keydown`],[`type`,`button`,`role`,`tab`,3,`id`],[`role`,`tabpanel`,1,`panel`,3,`id`],[3,`formId`,`version`,`rpc`],[`type`,`button`,1,`summary-link`,3,`click`],[1,`kind-tag`],[`type`,`button`,`role`,`tab`,3,`click`,`id`],[1,`filters`],[`type`,`search`,`placeholder`,`Filter fields by path`,`aria-label`,`Filter fields by path`,`autocomplete`,`off`,`spellcheck`,`false`,1,`filter`,3,`input`,`keydown.escape`,`value`],[1,`chips`],[`role`,`status`,1,`sr-only`],[`role`,`region`,`aria-label`,`Fields`,`tabindex`,`0`,1,`table-scroll`],[1,`fields`],[`scope`,`col`],[3,`form`,`node`,`version`,`rpc`],[3,`mouseenter`,`mouseleave`],[`scope`,`row`,1,`name`],[`type`,`button`,1,`field`,3,`focus`,`blur`,`click`],[1,`type`],[1,`value`],[1,`status-cell`],[1,`flags`],[1,`warn`],[1,`errors`],[1,`unseen`],[1,`source`],[`colspan`,`5`,1,`muted`,`truncated`],[`colspan`,`5`,1,`no-match`],[`type`,`button`,1,`small`],[3,`closed`,`form`,`node`,`version`,`rpc`],[`what`,`form events on this page`,`limit`,`formTimeline`,3,`dropped`,`max`],[3,`record`,`events`,`recording`],[3,`showField`,`formId`,`version`,`rpc`]],template:function(e,t){e&1&&P(0,Jz,4,0,`div`,1)(1,Yz,7,0,`div`,2)(2,Xz,4,0,`div`,1)(3,Zz,5,0,`div`,3)(4,Qz,7,2,`div`,3)(5,ZB,13,3,`div`,4),e&2&&F(t.rpc()?t.failed()?1:t.loading()?2:t.forms().length?t.visible().length?5:4:3:0)},dependencies:[KR,Sz,tz,nz,Wz,iO,pb],styles:[`.muted[_ngcontent-%COMP%] { color: var(--%NS%text-2); } @@ -9735,7 +9770,7 @@ code[_ngcontent-%COMP%] { .divider[_ngcontent-%COMP%] { display: none; } -}`]})},VB=[`filterInput`],HB=(e,t)=>t.file+t.name,UB=(e,t)=>t.file+`:`+t.line,WB=(e,t)=>t.name;function GB(e,t){e&1&&(z(0,`p`,14),A(),z(1,`svg`,26),V(2,`circle`,27)(3,`path`,28),B(),ps(),z(4,`span`),J(5),B()()),e&2&&(M(5),Y(t))}function KB(e,t){if(e&1&&(z(0,`p`,14),A(),z(1,`svg`,26),V(2,`circle`,27)(3,`path`,28),B(),ps(),z(4,`span`)(5,`strong`),J(6),B(),J(7,` Pipe prototypes are patched in the inspected page to count calls and keep the last input and output. Stop recording when you are done. `),B()()),e&2){let e=K();M(6),X(`Recording on `,e.instrumentedPages().length,` page(s).`)}}function qB(e,t){e&1&&(z(0,`div`,15),V(1,`span`,29),z(2,`p`,30),J(3,`Scanning pipes…`),B()())}function JB(e,t){if(e&1){let e=W();z(0,`div`,16)(1,`p`,30),J(2,`Couldn't load pipes`),B(),z(3,`p`,31),J(4,`The devtools server did not answer. Check that it is running.`),B(),z(5,`button`,32),G(`click`,function(){return O(e),k(K().refresh())}),J(6,`Try again`),B()()}}function YB(e,t){e&1&&(z(0,`div`,17)(1,`p`,30),J(2,`No pipes found`),B(),z(3,`p`,31),J(4,` No @Pipe classes were found in the source, and no template uses a built-in pipe yet. `),B()())}function XB(e,t){e&1&&J(0,` Couldn't scan the source again. The list keeps the last scan. `)}function ZB(e,t){e&1&&J(0,` Couldn't scan the source. Only pipes seen on the page are listed. `)}function QB(e,t){if(e&1){let e=W();z(0,`div`,33),A(),z(1,`svg`,26),V(2,`circle`,27)(3,`path`,39),B(),ps(),z(4,`span`),P(5,XB,1,0)(6,ZB,1,0),B(),z(7,`button`,11),G(`click`,function(){return O(e),k(K(2).refresh())}),J(8,`Try again`),B()()}if(e&2){let e=K(2);M(5),F(e.pipes().length?5:6),M(2),R(`disabled`,e.loading())}}function $B(e,t){e&1&&(z(0,`span`,46),J(1,`stale?`),B())}function eV(e,t){if(e&1&&(z(0,`span`,47),J(1),B()),e&2){K();let e=iv(0);M(),X(``,e.instanceCount,` live`)}}function tV(e,t){e&1&&(z(0,`span`,48),J(1,`built-in`),B())}function nV(e,t){e&1&&(z(0,`span`,48),J(1,`runtime only`),B())}function rV(e,t){e&1&&(z(0,`span`,48),J(1,`NgModule`),B())}function iV(e,t){e&1&&(z(0,`span`,50),J(1,`No source location`),B())}function aV(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;Z(` `,e.file,`:`,e.line,` `)}}function oV(e,t){if(e&1&&(z(0,`span`,51),J(1),B()),e&2){let e=K().$implicit;M(),X(`+`,(e.usageCount??1)-1,` more`)}}function sV(e,t){if(e&1&&(z(0,`span`,51),J(1),B()),e&2){let e=K().$implicit;M(),Z(``,e.usageCount,` `,e.usageCount===1?`use`:`uses`)}}function cV(e,t){if(e&1){let e=W();nv(0),z(1,`li`)(2,`button`,41),G(`click`,function(){let t=O(e).$implicit;return k(K(3).select(t))})(`mouseenter`,function(){O(e);let t=iv(0);return k(K(3).highlightPipe(t))})(`mouseleave`,function(){return O(e),k(K(3).highlight(null))})(`focus`,function(){O(e);let t=iv(0);return k(K(3).highlightPipe(t))})(`blur`,function(){return O(e),k(K(3).highlight(null))}),z(3,`span`,42)(4,`span`,43),J(5),B(),z(6,`span`,44),J(7),B()(),z(8,`span`,45),P(9,$B,2,0,`span`,46),P(10,eV,2,1,`span`,47),P(11,tV,2,0,`span`,48),P(12,nV,2,0,`span`,48),P(13,rV,2,0,`span`,48),z(14,`span`,48),J(15),B()(),z(16,`span`,49),P(17,iV,2,0,`span`,50)(18,aV,1,2),P(19,oV,2,1,`span`,51)(20,sV,2,2,`span`,51),B()()()}if(e&2){let e=t.$implicit,n=K(3),r=rv(n.liveFor(e.name));M(2),q(`selected`,n.isSelected(e)),N(`aria-current`,n.isSelected(e)||null),M(3),Y(e.name),M(2),Y(e.className),M(2),F(r?.stale?9:-1),M(),F(r?10:-1),M(),F(e.builtin?11:-1),M(),F(e.runtime?12:-1),M(),F(e.isStandalone?-1:13),M(),q(`impure`,!e.isPure),M(),Y(e.isPure?`pure`:`impure`),M(2),F(e.runtime?17:18),M(2),F(e.builtin&&(e.usageCount??0)>1?19:!e.builtin&&e.usageCount?20:-1)}}function lV(e,t){if(e&1){let e=W();z(0,`ul`,40),G(`keydown`,function(t){return O(e),k(K(2).onListKey(t))}),I(1,cV,21,16,`li`,null,HB),B()}if(e&2){let e=K(2);M(),L(e.filtered())}}function uV(e,t){e&1&&J(0),e&2&&X(` Nothing matches “`,K(3).filter().trim(),`” in this view. `)}function dV(e,t){e&1&&J(0,` None of the pipes fit this filter. `)}function fV(e,t){if(e&1){let e=W();z(0,`div`,37)(1,`p`,30),J(2,`No pipes match`),B(),z(3,`p`,31),P(4,uV,1,1)(5,dV,1,0),B(),z(6,`button`,32),G(`click`,function(){return O(e),k(K(2).clearFilters())}),J(7,`Clear filters`),B()()}if(e&2){let e=K(2);M(4),F(e.filter().trim()?4:5)}}function pV(e,t){e&1&&(z(0,`span`,48),J(1,`built-in`),B())}function mV(e,t){e&1&&(z(0,`span`,48),J(1,`runtime only`),B())}function hV(e,t){if(e&1&&(z(0,`dt`),J(1,`File`),B(),z(2,`dd`,55),J(3),B()),e&2){let e=K();M(3),Z(``,e.file,`:`,e.line)}}function gV(e,t){if(e&1&&(z(0,`dt`),J(1,`Standalone`),B(),z(2,`dd`),J(3),B()),e&2){let e=K();M(3),Y(e.isStandalone?`Yes`:`No, declared in an NgModule`)}}function _V(e,t){if(e&1&&(z(0,`li`,55),J(1),B()),e&2){let e=t.$implicit;M(),Z(``,e.file,`:`,e.line)}}function vV(e,t){if(e&1&&(z(0,`div`,54)(1,`h3`),J(2,` Used in templates `),z(3,`span`,21),J(4),B()(),z(5,`ul`,57),I(6,_V,2,2,`li`,55,UB),B()()),e&2){let e=K();M(4),Y(e.usageCount),M(2),L(e.usages)}}function yV(e,t){e&1&&(z(0,`p`,58)(1,`span`,46),J(2,`experimental`),B(),J(3,` This pure pipe got an argument whose contents changed while its reference stayed the same, so it may be showing a stale value. `),B())}function bV(e,t){if(e&1){let e=W();z(0,`button`,63),G(`click`,function(){let t=O(e);return k(K(5).highlight(t,!0))})(`mouseenter`,function(){let t=O(e);return k(K(5).highlight(t))})(`mouseleave`,function(){return O(e),k(K(5).highlight(null))})(`focus`,function(){let t=O(e);return k(K(5).highlight(t))})(`blur`,function(){return O(e),k(K(5).highlight(null))}),z(1,`span`,55),J(2),B(),z(3,`span`,64),J(4),B()()}if(e&2){let e=K().$implicit;N(`aria-label`,`Highlight `+e.name+` on the page`),M(2),Y(e.name),M(2),Y(e.count)}}function xV(e,t){if(e&1&&(z(0,`span`,62)(1,`span`,55),J(2),B(),z(3,`span`,64),J(4),B()()),e&2){let e=K().$implicit;M(2),Y(e.name),M(2),Y(e.count)}}function SV(e,t){if(e&1&&(z(0,`li`),P(1,bV,5,3,`button`,61)(2,xV,5,2,`span`,62),B()),e&2){let e,n=t.$implicit;M(),F((e=n.targets?.[0])?1:2,e)}}function CV(e,t){if(e&1&&(z(0,`dt`),J(1,`Time`),B(),z(2,`dd`),J(3),B()),e&2){let e=K(),t=K(4);M(3),Y_(` `,t.ms(e.totalMs),` total, `,t.ms(e.totalMs/e.callCount),` average, `,t.ms(e.maxMs??0),` slowest `)}}function wV(e,t){if(e&1&&(z(0,`span`,65),J(1),B()),e&2){let e=K(2);M(),Y(e.lastError)}}function TV(e,t){if(e&1&&(z(0,`dt`),J(1,`Errors`),B(),z(2,`dd`),J(3),P(4,wV,2,1,`span`,65),B()),e&2){let e=K();M(3),X(` `,e.errorCount,` `),M(),F(e.lastError?4:-1)}}function EV(e,t){if(e&1){let e=W();z(0,`button`,63),G(`click`,function(){let t=O(e);return k(K(7).highlight(t,!0))})(`mouseenter`,function(){let t=O(e);return k(K(7).highlight(t))})(`mouseleave`,function(){return O(e),k(K(7).highlight(null))})(`focus`,function(){let t=O(e);return k(K(7).highlight(t))})(`blur`,function(){return O(e),k(K(7).highlight(null))}),z(1,`span`,55),J(2),B()()}if(e&2){let e=K().$implicit;N(`aria-label`,`Highlight `+e.component+` on the page`),M(2),Y(e.component)}}function DV(e,t){if(e&1&&(z(0,`span`,62)(1,`span`,55),J(2),B()()),e&2){let e=K().$implicit;M(2),Y(e.component)}}function OV(e,t){if(e&1&&(z(0,`span`,67),J(1),B()),e&2){let e=K().$implicit,t=K(6);M(),Y(t.ms(e.totalMs))}}function kV(e,t){if(e&1&&(z(0,`span`,68),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.lastCaller)}}function AV(e,t){if(e&1&&(z(0,`li`,66),P(1,EV,3,2,`button`,61)(2,DV,3,1,`span`,62),z(3,`span`,65),J(4),z(5,`span`,67),J(6),B(),P(7,OV,2,1,`span`,67),B(),P(8,kV,2,1,`span`,68),B()),e&2){let e,n=t.$implicit,r=K(6);M(),F((e=n.target)?1:2,e),M(3),Z(` `,r.describe(n.lastArgs),` → `,r.describe(n.lastResult),` `),M(2),X(``,n.callCount,`×`),M(),F(n.totalMs===void 0?-1:7),M(),F(n.lastCaller?8:-1)}}function jV(e,t){if(e&1&&(z(0,`p`,60),J(1),B()),e&2){let e=K(2);M(),Z(` Showing `,e.instances.length,` of `,e.instanceTotal,` instances. `)}}function MV(e,t){if(e&1&&(z(0,`dt`),J(1,`Per instance`),B(),z(2,`dd`)(3,`ul`,57),I(4,AV,9,6,`li`,66,Cg),B(),P(6,jV,2,2,`p`,60),B()),e&2){let e=K();M(4),L(e.instances),M(2),F(e.instanceTotal?6:-1)}}function NV(e,t){if(e&1&&(z(0,`dt`),J(1,`Last caller`),B(),z(2,`dd`,65),J(3),B()),e&2){let e=K();M(3),Y(e.lastCaller)}}function PV(e,t){if(e&1&&(z(0,`dt`),J(1,`Calls`),B(),z(2,`dd`),J(3),B(),P(4,CV,4,3),P(5,TV,5,2),z(6,`dt`),J(7,`Last input`),B(),z(8,`dd`,65),J(9),B(),z(10,`dt`),J(11,`Last output`),B(),z(12,`dd`,65),J(13),B(),P(14,MV,7,1),P(15,NV,4,1)),e&2){let e=t,n=K(4);M(3),Y(e.callCount),M(),F(e.totalMs===void 0?-1:4),M(),F(e.errorCount?5:-1),M(4),Y(n.describe(e.lastArgs)),M(4),Y(n.describe(e.lastResult)),M(),F(e.instances?.length?14:-1),M(),F(e.lastCaller?15:-1)}}function FV(e,t){e&1&&(z(0,`dt`),J(1,`Calls`),B(),z(2,`dd`,69),J(3,`None recorded yet.`),B())}function IV(e,t){e&1&&(z(0,`p`,60),J(1,` The stale check is off for this pipe: it couldn't read the compiled template, which happens in minified builds. `),B())}function LV(e,t){e&1&&(z(0,`p`,60),J(1,`Turn on “Record calls” to see call counts and values.`),B())}function RV(e,t){if(e&1&&(P(0,yV,4,0,`p`,58),z(1,`dl`)(2,`dt`),J(3,`Instances`),B(),z(4,`dd`),J(5),B(),z(6,`dt`),J(7,`Used by`),B(),z(8,`dd`)(9,`ul`,59),I(10,SV,3,1,`li`,null,WB),B()(),P(12,PV,16,7)(13,FV,4,0),B(),P(14,IV,2,0,`p`,60),P(15,LV,2,0,`p`,60)),e&2){let e,n=t,r=K(3);F(n.stale?0:-1),M(5),Y(n.instanceCount),M(5),L(n.components),M(2),F((e=n.call)?12:r.instrumenting()?13:-1,e),M(2),F(n.staleCheck===`unavailable`?14:-1),M(),F(!n.call&&!r.instrumenting()?15:-1)}}function zV(e,t){e&1&&(z(0,`p`,56),J(1,` Not in use on the connected page. Open a view that uses it, or connect the app. `),B())}function BV(e,t){if(e&1&&(z(0,`header`,52)(1,`h2`,53),J(2),B(),z(3,`span`,48),J(4),B(),P(5,pV,2,0,`span`,48),P(6,mV,2,0,`span`,48),B(),z(7,`div`,54)(8,`h3`),J(9,`Declaration`),B(),z(10,`dl`)(11,`dt`),J(12,`Class`),B(),z(13,`dd`,55),J(14),B(),z(15,`dt`),J(16,`Source`),B(),z(17,`dd`),J(18),B(),P(19,hV,4,2),P(20,gV,4,1),z(21,`dt`),J(22,`Pure`),B(),z(23,`dd`),J(24),B()()(),P(25,vV,8,1,`div`,54),z(26,`div`,54)(27,`h3`),J(28,`Live on the page`),B(),P(29,RV,16,5)(30,zV,2,0,`p`,56),B()),e&2){let e,n=t,r=K(2);M(2),Y(n.name),M(),q(`impure`,!n.isPure),M(),Y(n.isPure?`pure`:`impure`),M(),F(n.builtin?5:-1),M(),F(n.runtime?6:-1),M(8),Y(n.className),M(4),Y(r.sourceLabel(n)),M(),F(!n.builtin&&!n.runtime?19:-1),M(),F(n.runtime?-1:20),M(4),X(` `,n.isPure?`Yes, reruns only when an input changes`:`No, reruns on every check`,` `),M(),F(n.usages?.length?25:-1),M(4),F((e=r.liveFor(n.name))?29:30,e)}}function VV(e,t){e&1&&(z(0,`h2`,70),J(1,`Pipe details`),B(),z(2,`div`,71)(3,`p`,30),J(4,`Pick a pipe`),B(),z(5,`p`,31),J(6,` See where it is declared, which components use it and what it last returned. `),B()())}function HV(e,t){if(e&1&&(P(0,QB,9,2,`div`,33),z(1,`div`,34)(2,`div`,35),P(3,lV,3,0,`ul`,36)(4,fV,8,1,`div`,37),B(),z(5,`section`,38),P(6,BV,31,13)(7,VV,7,0),B()()),e&2){let e,t=K();F(t.loadFailed()?0:-1),M(3),F(t.filtered().length?3:4),M(3),F((e=t.selected())?6:7,e)}}function UV(e,t){if(e&1&&(z(0,`p`,60),J(1),B()),e&2){let e=K(2);M(),Z(`Showing `,e.async().length,` of `,t,` subscriptions.`)}}function WV(e,t){if(e&1){let e=W();z(0,`button`,79),G(`click`,function(){let t=O(e);return k(K(3).highlight(t))})(`focus`,function(){let t=O(e);return k(K(3).highlight(t))})(`blur`,function(){return O(e),k(K(3).highlight(null))}),J(1),B()}if(e&2){let e=K().$implicit;N(`aria-label`,`Highlight `+e.component+` on the page`),M(),X(` `,e.component,` `)}}function GV(e,t){if(e&1&&(z(0,`span`,77),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.component)}}function KV(e,t){e&1&&(z(0,`span`,48),J(1,`no source`),B())}function qV(e,t){e&1&&(z(0,`span`,46),J(1,`duplicate subscription`),B())}function JV(e,t){e&1&&(z(0,`span`,46),J(1,`resubscribing`),B())}function YV(e,t){if(e&1){let e=W();z(0,`li`,75),G(`mouseenter`,function(){let t=O(e).$implicit;return k(K(2).highlight(t.target))})(`mouseleave`,function(){return O(e),k(K(2).highlight(null))}),P(1,WV,2,2,`button`,76)(2,GV,2,1,`span`,77),P(3,KV,2,0,`span`,48),P(4,qV,2,0,`span`,46),P(5,JV,2,0,`span`,46),z(6,`span`,78),J(7),B()()}if(e&2){let e,n=t.$implicit;M(),F((e=n.target)?1:2,e),M(2),F(n.hasSource?-1:3),M(),F(n.duplicate?4:-1),M(),F(n.resubscribing?5:-1),M(2),Y(n.latestValue??`no value yet`)}}function XV(e,t){if(e&1&&(z(0,`section`,18)(1,`h2`,72),J(2,` Async subscriptions `),z(3,`span`,21),J(4),B()(),z(5,`p`,60),J(6,` Each `),z(7,`span`,55),J(8,`| async`),B(),J(9,` subscribes on its own. Two on the same source mean the work runs twice. A source that changes on every check, like `),z(10,`span`,55),J(11,`getData() | async`),B(),J(12,`, resubscribes each time. `),B(),P(13,UV,2,2,`p`,60),z(14,`ul`,73),I(15,YV,8,5,`li`,74,Cg),B()()),e&2){let e,t=K();M(4),Y(t.async().length),M(9),F((e=t.asyncTotal())?13:-1,e),M(2),L(t.async())}}function ZV(e,t){e&1&&(z(0,`span`,21),J(1),B()),e&2&&(M(),Y(t.length))}function QV(e,t){e&1&&(z(0,`p`,22),J(1,`Couldn't run the lint check. Try Refresh.`),B())}function $V(e,t){e&1&&(z(0,`p`,23),J(1,`Checking…`),B())}function eH(e,t){e&1&&(z(0,`p`,24),J(1,`No problems found.`),B())}function tH(e,t){if(e&1){let e=W();z(0,`button`,89),G(`click`,function(){O(e),K();let t=iv(6);return k(K(2).showPipe(t))}),z(1,`span`,90),J(2,`Show pipe `),B(),J(3),B()}if(e&2){let e=K().$implicit;M(3),X(``,e.pipe,` `)}}function nH(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` `,e.pipe,` `)}}function rH(e,t){if(e&1&&(z(0,`li`,80)(1,`div`,81)(2,`span`,82),J(3),B(),z(4,`code`,83),J(5),B(),nv(6),z(7,`span`,84),P(8,tH,4,1,`button`,85)(9,nH,1,1),J(10),B()(),z(11,`p`,86),J(12),B(),z(13,`p`,87)(14,`span`,88),J(15,`Fix`),B(),J(16),B()()),e&2){let e=t.$implicit;M(2),N(`data-tone`,e.severity),M(),Y(e.severity),M(2),Y(e.rule),M();let n=rv(K(2).pipeFor(e));M(2),F(n?8:9),M(2),Z(` · `,e.file,`:`,e.line,` `),M(2),Y(e.message),M(4),X(` `,e.fix)}}function iH(e,t){if(e&1&&(z(0,`ul`,25),I(1,rH,17,9,`li`,80,Cg),B()),e&2){let e=K();M(),L(e.lint())}}var aH=5e3,oH=[{value:`all`,label:`All pipes`},{value:`custom`,label:`Custom`},{value:`builtin`,label:`Built-in`},{value:`runtime`,label:`Runtime only`},{value:`impure`,label:`Impure`},{value:`live`,label:`On the page`}],sH=class e{destroyRef=E(Cs);host=E(Ml);injector=E(xs);filterInput=Rv(`filterInput`);rpc=$(null);kindOptions=oH;pipes=j([]);filter=j(``);kind=j(`all`);loading=j(!1);loadFailed=j(!1);selected=j(null);live=j([]);async=j([]);asyncTotal=j(void 0);lint=j(null);lintFailed=j(!1);instrumentedPages=j([]);instrumenting=Q(()=>this.instrumentedPages().length>0);pendingRecord=j(null);recordMessage=j(null);recordLabel=Q(()=>{let e=this.pendingRecord();return e===null?this.instrumenting()?`Stop recording`:`Record calls`:e?`Starting…`:`Stopping…`});pendingTimer;liveByName=Q(()=>new Map(this.live().map(e=>[e.name,e])));allPipes=Q(()=>{let e=this.pipes(),t=new Set(e.map(e=>e.name)),n=this.live().filter(e=>!t.has(e.name)).map(e=>({name:e.name,className:e.className,file:``,line:0,isStandalone:!0,isPure:e.isPure,runtime:!0}));return n.length?[...e,...n]:e});filtered=Q(()=>{let e=this.filter(),t=this.kind()??`all`;return this.allPipes().filter(n=>this.fitsKind(n,t)&&this.fitsQuery(n,e))});pipesByName=Q(()=>{let e=new Map;for(let t of this.allPipes())e.set(t.name,[...e.get(t.name)??[],t]);return e});unsubscribe;constructor(){uc(()=>{let e=this.rpc();e&&(this.refresh(),this.loadLive(e))}),this.destroyRef.onDestroy(()=>{this.unsubscribe?.(),clearTimeout(this.pendingTimer),this.highlight(null)})}async refresh(){let e=this.rpc();if(e){this.loading.set(!0),this.loadFailed.set(!1);try{let t=await e.scope(`pangular`).rpc.call(`get-pipes`);this.pipes.set(t);let n=this.selected();if(n){let e=this.allPipes().find(e=>e.name===n.name&&e.file===n.file);this.selected.set(e??null)}}catch{this.loadFailed.set(!0)}finally{this.loading.set(!1)}this.loadLint(e)}}async loadLint(e){this.lintFailed.set(!1);try{let t=await e.scope(`pangular`).rpc.call(`pipe-lint`);this.lint.set(t)}catch{this.lintFailed.set(!0)}}async loadLive(e){try{let t=await e.scope(`pangular`).rpc.sharedState(`pipe-usage`);if(this.destroyRef.destroyed)return;let n=e=>{let t=e,n=nE(),r=(n?t?.pages?.find(e=>e.pageId===n):void 0)??t;this.live.set(r?.pipes??[]);let i=this.selected();i?.runtime&&!this.liveByName().has(i.name)&&this.selected.set(null),this.async.set(r?.async??[]),this.asyncTotal.set(r?.asyncTotal);let a=t?.instrumented??[];this.instrumentedPages.set(a),this.pendingRecord()===a.length>0&&this.settleRecord(null)};n(t.value()),this.unsubscribe?.(),this.unsubscribe=t.on(`updated`,n)}catch{}}async toggleInstrument(){let e=this.rpc();if(!e||this.pendingRecord()!==null)return;let t=!this.instrumenting();this.recordMessage.set(null),this.pendingRecord.set(t);let n;try{let r=t?{pageId:nE()??void 0,on:t}:{on:t};n=await e.scope(`pangular`).rpc.call(`request-instrument-pipes`,r)}catch{this.settleRecord(`Couldn't reach the devtools server. Try again.`);return}if(this.pendingRecord()===t){if(n?.pages===0){this.settleRecord(`No page is connected. Open your app in the browser with the devtools running, then record again.`);return}clearTimeout(this.pendingTimer),this.pendingTimer=setTimeout(()=>{this.pendingRecord()===t&&this.settleRecord(t?`No page confirmed recording. Reload the app and try again.`:`No page confirmed it stopped recording. Reload the app to stop it.`)},aH)}}settleRecord(e){clearTimeout(this.pendingTimer),this.pendingRecord.set(null),e!==null&&this.recordMessage.set(e)}sourceLabel(e){return e.builtin?`@angular/common`:e.runtime?`Seen on the page only`:`This project`}liveFor(e){return this.liveByName().get(e)}ms(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}describe(e){if(Array.isArray(e))return e.map(e=>this.describe(e)).join(`, `);if(typeof e==`string`)return e.length>80?`${e.slice(0,80)}…`:e;try{let t=JSON.stringify(e);return t&&t.length>120?`${t.slice(0,120)}…`:t??String(e)}catch{return String(e)}}isSelected(e){let t=this.selected();return t!==null&&t.name===e.name&&t.file===e.file}select(e){this.selected.set(this.isSelected(e)?null:e)}pipeFor(e){let t=this.pipesByName().get(e.pipe);return t?.length?t.find(t=>t.file===e.file)??t[0]:null}showPipe(e){this.fitsQuery(e,this.filter())||this.filter.set(``),this.fitsKind(e,this.kind()??`all`)||this.kind.set(`all`),this.selected.set(e),Id(()=>{let e=this.host.nativeElement;e.querySelector(`.row.selected`)?.scrollIntoView?.({block:`nearest`}),e.querySelector(`#pipe-detail-title`)?.focus()},{injector:this.injector})}fitsKind(e,t){return t===`custom`?!e.builtin&&!e.runtime:t===`builtin`?!!e.builtin:t===`runtime`?!!e.runtime:t===`impure`?!e.isPure:t!==`live`||this.liveByName().has(e.name)}fitsQuery(e,t){let n=t.trim().toLowerCase();return!n||e.name.toLowerCase().includes(n)||e.className.toLowerCase().includes(n)||e.file.toLowerCase().includes(n)}clearFilters(){this.filter.set(``),this.kind.set(`all`),this.filterInput()?.nativeElement.focus()}highlightPipe(e){this.highlight(e?.components.find(e=>e.targets?.length)?.targets?.[0])}highlight(e,t=!1){let n=this.rpc();n&&n.scope(`pangular`).rpc.call(`request-page-highlight`,e?{...e,...t?{reveal:t}:{}}:null).catch(()=>{})}onListKey(e){if(![`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key))return;let t=Array.from(this.host.nativeElement.querySelectorAll(`[data-pipe-row]`));if(!t.length)return;let n=t.indexOf(document.activeElement),r=n;r=e.key===`ArrowDown`?Math.min(n+1,t.length-1):e.key===`ArrowUp`?Math.max(n-1,0):e.key===`Home`?0:t.length-1,e.preventDefault(),t[r]?.focus()}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-pipes-inspector`]],viewQuery:function(e,t){e&1&&e_(t.filterInput,VB,5),e&2&&t_()},inputs:{rpc:[1,`rpc`]},decls:33,vars:18,consts:[[`filterInput`,``],[1,`intro`],[1,`toolbar`],[1,`search`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`search-icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`type`,`search`,`placeholder`,`Find a pipe, class or file…`,`aria-label`,`Find a pipe, class or file`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`value`],[`ariaLabel`,`Show pipes`,3,`valueChange`,`options`,`value`],[`aria-live`,`polite`,1,`total`],[1,`actions`],[`type`,`button`,3,`click`,`disabled`],[`type`,`button`,1,`record`,3,`click`],[`aria-hidden`,`true`,1,`rec-dot`],[`role`,`status`,1,`notice`],[`role`,`status`,1,`state`],[`role`,`alert`,1,`state`],[1,`state`],[`aria-labelledby`,`async-title`,1,`section`],[`aria-labelledby`,`lint-title`,1,`section`],[`id`,`lint-title`],[1,`pill`],[`role`,`alert`,1,`empty-line`],[`role`,`status`,1,`empty-line`],[1,`empty-line`,`ok`],[1,`findings`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`cx`,`12`,`cy`,`12`,`r`,`9`],[`d`,`M12 11v5M12 8h.01`],[`aria-hidden`,`true`,1,`spinner`],[1,`state-title`],[1,`state-hint`],[`type`,`button`,3,`click`],[`role`,`alert`,1,`notice`,`error`],[1,`layout`],[1,`list-wrap`],[`aria-label`,`Pipes`,1,`pipe-list`],[`role`,`status`,1,`state`,`compact`],[`id`,`pipe-detail`,`aria-labelledby`,`pipe-detail-title`,1,`detail`],[`d`,`M12 8v5M12 16h.01`],[`aria-label`,`Pipes`,1,`pipe-list`,3,`keydown`],[`type`,`button`,`data-pipe-row`,``,`aria-controls`,`pipe-detail`,1,`row`,3,`click`,`mouseenter`,`mouseleave`,`focus`,`blur`],[1,`row-main`],[1,`name`,`mono`],[1,`sub`,`mono`],[1,`row-meta`],[1,`chip`,`warn`],[1,`chip`,`live`],[1,`chip`],[1,`row-file`,`mono`],[1,`no-source`],[1,`more`],[1,`detail-head`],[`id`,`pipe-detail-title`,`tabindex`,`-1`,1,`mono`],[1,`block`],[1,`mono`],[1,`empty-line`],[1,`sites`],[`role`,`note`,1,`warning`],[1,`chips`],[1,`hint`],[`type`,`button`,1,`component`],[1,`component`],[`type`,`button`,1,`component`,3,`click`,`mouseenter`,`mouseleave`,`focus`,`blur`],[1,`count`],[1,`mono`,`value`],[1,`instance`],[1,`calls`],[1,`mono`,`value`,`caller`],[1,`muted`],[`id`,`pipe-detail-title`,1,`visually-hidden`],[1,`state`,`compact`],[`id`,`async-title`],[1,`async-list`],[1,`async-row`],[1,`async-row`,3,`mouseenter`,`mouseleave`],[`type`,`button`,1,`component-name`,`mono`],[1,`mono`,`component-name`],[1,`mono`,`value`,`latest`],[`type`,`button`,1,`component-name`,`mono`,3,`click`,`focus`,`blur`],[1,`finding`],[1,`finding-head`],[1,`severity`],[1,`mono`,`rule`],[1,`where`,`mono`],[`type`,`button`,1,`pipe-link`],[1,`finding-message`],[1,`finding-fix`],[1,`fix-label`],[`type`,`button`,1,`pipe-link`,3,`click`],[1,`sr-only`]],template:function(e,t){if(e&1){let e=W();z(0,`p`,1),J(1,` Pipes declared in your source, the built-in pipes your templates use and library pipes seen on the page. Live data shows which components use each pipe on the page; turn on recording to capture calls and the last input and output. `),B(),z(2,`div`,2)(3,`div`,3),A(),z(4,`svg`,4),V(5,`circle`,5)(6,`path`,6),B(),ps(),z(7,`input`,7,0),G(`input`,function(e){return t.filter.set(e.target.value)})(`keydown.escape`,function(){return t.filter.set(``)}),B()(),z(9,`app-select`,8),ev(`valueChange`,function(n){return O(e),$_(t.kind,n)||(t.kind=n),k(n)}),B(),z(10,`span`,9),J(11),B(),z(12,`div`,10)(13,`button`,11),G(`click`,function(){return t.refresh()}),J(14,`Refresh`),B(),z(15,`button`,12),G(`click`,function(){return t.toggleInstrument()}),V(16,`span`,13),J(17),B()()(),P(18,GB,6,1,`p`,14),P(19,KB,8,1,`p`,14),P(20,qB,4,0,`div`,15)(21,JB,7,0,`div`,16)(22,YB,5,0,`div`,17)(23,HV,8,3),P(24,XV,17,2,`section`,18),z(25,`section`,19)(26,`h2`,20),J(27,` Lint `),P(28,ZV,2,1,`span`,21),B(),P(29,QV,2,0,`p`,22)(30,$V,2,0,`p`,23)(31,eH,2,0,`p`,24)(32,iH,3,0,`ul`,25),B()}if(e&2){let e,n;M(7),R(`value`,t.filter()),M(2),R(`options`,t.kindOptions),Q_(`value`,t.kind),M(2),Z(``,t.filtered().length,` of `,t.allPipes().length),M(2),R(`disabled`,t.loading()),M(2),q(`on`,t.instrumenting()),N(`aria-pressed`,t.instrumenting())(`aria-busy`,t.pendingRecord()!==null)(`aria-disabled`,t.pendingRecord()!==null),M(2),X(` `,t.recordLabel(),` `),M(),F((e=t.recordMessage())?18:-1,e),M(),F(t.instrumenting()?19:-1),M(),F(t.loading()&&t.allPipes().length===0?20:t.loadFailed()&&t.allPipes().length===0?21:t.allPipes().length===0?22:23),M(4),F(t.async().length>0?24:-1),M(4),F((n=t.lint())?28:-1,n),M(),F(t.lintFailed()?29:t.lint()===null?30:t.lint().length?32:31)}},dependencies:[LD],styles:[`[_nghost-%COMP%] { +}`]})},iV=[`filterInput`],aV=(e,t)=>t.file+t.name,oV=(e,t)=>t.file+`:`+t.line,sV=(e,t)=>t.name;function cV(e,t){e&1&&(z(0,`p`,14),A(),z(1,`svg`,26),V(2,`circle`,27)(3,`path`,28),B(),ms(),z(4,`span`),J(5),B()()),e&2&&(M(5),Y(t))}function lV(e,t){if(e&1&&(z(0,`p`,14),A(),z(1,`svg`,26),V(2,`circle`,27)(3,`path`,28),B(),ms(),z(4,`span`)(5,`strong`),J(6),B(),J(7,` Pipe prototypes are patched in the inspected page to count calls and keep the last input and output. Stop recording when you are done. `),B()()),e&2){let e=K();M(6),X(`Recording on `,e.instrumentedPages().length,` page(s).`)}}function uV(e,t){e&1&&(z(0,`div`,15),V(1,`span`,29),z(2,`p`,30),J(3,`Scanning pipes…`),B()())}function dV(e,t){if(e&1){let e=W();z(0,`div`,16)(1,`p`,30),J(2,`Couldn't load pipes`),B(),z(3,`p`,31),J(4,`The devtools server did not answer. Check that it is running.`),B(),z(5,`button`,32),G(`click`,function(){return O(e),k(K().refresh())}),J(6,`Try again`),B()()}}function fV(e,t){e&1&&(z(0,`div`,17)(1,`p`,30),J(2,`No pipes found`),B(),z(3,`p`,31),J(4,` No @Pipe classes were found in the source, and no template uses a built-in pipe yet. `),B()())}function pV(e,t){e&1&&J(0,` Couldn't scan the source again. The list keeps the last scan. `)}function mV(e,t){e&1&&J(0,` Couldn't scan the source. Only pipes seen on the page are listed. `)}function hV(e,t){if(e&1){let e=W();z(0,`div`,33),A(),z(1,`svg`,26),V(2,`circle`,27)(3,`path`,39),B(),ms(),z(4,`span`),P(5,pV,1,0)(6,mV,1,0),B(),z(7,`button`,11),G(`click`,function(){return O(e),k(K(2).refresh())}),J(8,`Try again`),B()()}if(e&2){let e=K(2);M(5),F(e.pipes().length?5:6),M(2),R(`disabled`,e.loading())}}function gV(e,t){e&1&&(z(0,`span`,46),J(1,`stale?`),B())}function _V(e,t){if(e&1&&(z(0,`span`,47),J(1),B()),e&2){K();let e=fv(0);M(),X(``,e.instanceCount,` live`)}}function vV(e,t){e&1&&(z(0,`span`,48),J(1,`built-in`),B())}function yV(e,t){e&1&&(z(0,`span`,48),J(1,`runtime only`),B())}function bV(e,t){e&1&&(z(0,`span`,48),J(1,`NgModule`),B())}function xV(e,t){e&1&&(z(0,`span`,50),J(1,`No source location`),B())}function SV(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;Z(` `,e.file,`:`,e.line,` `)}}function CV(e,t){if(e&1&&(z(0,`span`,51),J(1),B()),e&2){let e=K().$implicit;M(),X(`+`,(e.usageCount??1)-1,` more`)}}function wV(e,t){if(e&1&&(z(0,`span`,51),J(1),B()),e&2){let e=K().$implicit;M(),Z(``,e.usageCount,` `,e.usageCount===1?`use`:`uses`)}}function TV(e,t){if(e&1){let e=W();uv(0),z(1,`li`)(2,`button`,41),G(`click`,function(){let t=O(e).$implicit;return k(K(3).select(t))})(`mouseenter`,function(){O(e);let t=fv(0);return k(K(3).highlightPipe(t))})(`mouseleave`,function(){return O(e),k(K(3).highlight(null))})(`focus`,function(){O(e);let t=fv(0);return k(K(3).highlightPipe(t))})(`blur`,function(){return O(e),k(K(3).highlight(null))}),z(3,`span`,42)(4,`span`,43),J(5),B(),z(6,`span`,44),J(7),B()(),z(8,`span`,45),P(9,gV,2,0,`span`,46),P(10,_V,2,1,`span`,47),P(11,vV,2,0,`span`,48),P(12,yV,2,0,`span`,48),P(13,bV,2,0,`span`,48),z(14,`span`,48),J(15),B()(),z(16,`span`,49),P(17,xV,2,0,`span`,50)(18,SV,1,2),P(19,CV,2,1,`span`,51)(20,wV,2,2,`span`,51),B()()()}if(e&2){let e=t.$implicit,n=K(3),r=dv(n.liveFor(e.name));M(2),q(`selected`,n.isSelected(e)),N(`aria-current`,n.isSelected(e)||null),M(3),Y(e.name),M(2),Y(e.className),M(2),F(r?.stale?9:-1),M(),F(r?10:-1),M(),F(e.builtin?11:-1),M(),F(e.runtime?12:-1),M(),F(e.isStandalone?-1:13),M(),q(`impure`,!e.isPure),M(),Y(e.isPure?`pure`:`impure`),M(2),F(e.runtime?17:18),M(2),F(e.builtin&&(e.usageCount??0)>1?19:!e.builtin&&e.usageCount?20:-1)}}function EV(e,t){if(e&1){let e=W();z(0,`ul`,40),G(`keydown`,function(t){return O(e),k(K(2).onListKey(t))}),I(1,TV,21,16,`li`,null,aV),B()}if(e&2){let e=K(2);M(),L(e.filtered())}}function DV(e,t){e&1&&J(0),e&2&&X(` Nothing matches “`,K(3).filter().trim(),`” in this view. `)}function OV(e,t){e&1&&J(0,` None of the pipes fit this filter. `)}function kV(e,t){if(e&1){let e=W();z(0,`div`,37)(1,`p`,30),J(2,`No pipes match`),B(),z(3,`p`,31),P(4,DV,1,1)(5,OV,1,0),B(),z(6,`button`,32),G(`click`,function(){return O(e),k(K(2).clearFilters())}),J(7,`Clear filters`),B()()}if(e&2){let e=K(2);M(4),F(e.filter().trim()?4:5)}}function AV(e,t){e&1&&(z(0,`span`,48),J(1,`built-in`),B())}function jV(e,t){e&1&&(z(0,`span`,48),J(1,`runtime only`),B())}function MV(e,t){if(e&1&&(z(0,`dt`),J(1,`File`),B(),z(2,`dd`,55),V(3,`app-source-link`,57),B()),e&2){let e=K();M(3),R(`file`,e.file)(`line`,e.line)}}function NV(e,t){if(e&1&&(z(0,`dt`),J(1,`Standalone`),B(),z(2,`dd`),J(3),B()),e&2){let e=K();M(3),Y(e.isStandalone?`Yes`:`No, declared in an NgModule`)}}function PV(e,t){if(e&1&&(z(0,`li`,55),V(1,`app-source-link`,57),B()),e&2){let e=t.$implicit;M(),R(`file`,e.file)(`line`,e.line)}}function FV(e,t){if(e&1&&(z(0,`div`,54)(1,`h3`),J(2,` Used in templates `),z(3,`span`,21),J(4),B()(),z(5,`ul`,58),I(6,PV,2,2,`li`,55,oV),B()()),e&2){let e=K();M(4),Y(e.usageCount),M(2),L(e.usages)}}function IV(e,t){e&1&&(z(0,`p`,59)(1,`span`,46),J(2,`experimental`),B(),J(3,` This pure pipe got an argument whose contents changed while its reference stayed the same, so it may be showing a stale value. `),B())}function LV(e,t){if(e&1){let e=W();z(0,`button`,64),G(`click`,function(){let t=O(e);return k(K(5).highlight(t,!0))})(`mouseenter`,function(){let t=O(e);return k(K(5).highlight(t))})(`mouseleave`,function(){return O(e),k(K(5).highlight(null))})(`focus`,function(){let t=O(e);return k(K(5).highlight(t))})(`blur`,function(){return O(e),k(K(5).highlight(null))}),z(1,`span`,55),J(2),B(),z(3,`span`,65),J(4),B()()}if(e&2){let e=K().$implicit;N(`aria-label`,`Highlight `+e.name+` on the page`),M(2),Y(e.name),M(2),Y(e.count)}}function RV(e,t){if(e&1&&(z(0,`span`,63)(1,`span`,55),J(2),B(),z(3,`span`,65),J(4),B()()),e&2){let e=K().$implicit;M(2),Y(e.name),M(2),Y(e.count)}}function zV(e,t){if(e&1&&(z(0,`li`),P(1,LV,5,3,`button`,62)(2,RV,5,2,`span`,63),B()),e&2){let e,n=t.$implicit;M(),F((e=n.targets?.[0])?1:2,e)}}function BV(e,t){if(e&1&&(z(0,`dt`),J(1,`Time`),B(),z(2,`dd`),J(3),B()),e&2){let e=K(),t=K(4);M(3),rv(` `,t.ms(e.totalMs),` total, `,t.ms(e.totalMs/e.callCount),` average, `,t.ms(e.maxMs??0),` slowest `)}}function VV(e,t){if(e&1&&(z(0,`span`,66),J(1),B()),e&2){let e=K(2);M(),Y(e.lastError)}}function HV(e,t){if(e&1&&(z(0,`dt`),J(1,`Errors`),B(),z(2,`dd`),J(3),P(4,VV,2,1,`span`,66),B()),e&2){let e=K();M(3),X(` `,e.errorCount,` `),M(),F(e.lastError?4:-1)}}function UV(e,t){if(e&1){let e=W();z(0,`button`,64),G(`click`,function(){let t=O(e);return k(K(7).highlight(t,!0))})(`mouseenter`,function(){let t=O(e);return k(K(7).highlight(t))})(`mouseleave`,function(){return O(e),k(K(7).highlight(null))})(`focus`,function(){let t=O(e);return k(K(7).highlight(t))})(`blur`,function(){return O(e),k(K(7).highlight(null))}),z(1,`span`,55),J(2),B()()}if(e&2){let e=K().$implicit;N(`aria-label`,`Highlight `+e.component+` on the page`),M(2),Y(e.component)}}function WV(e,t){if(e&1&&(z(0,`span`,63)(1,`span`,55),J(2),B()()),e&2){let e=K().$implicit;M(2),Y(e.component)}}function GV(e,t){if(e&1&&(z(0,`span`,68),J(1),B()),e&2){let e=K().$implicit,t=K(6);M(),Y(t.ms(e.totalMs))}}function KV(e,t){if(e&1&&(z(0,`span`,69),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.lastCaller)}}function qV(e,t){if(e&1&&(z(0,`li`,67),P(1,UV,3,2,`button`,62)(2,WV,3,1,`span`,63),z(3,`span`,66),J(4),z(5,`span`,68),J(6),B(),P(7,GV,2,1,`span`,68),B(),P(8,KV,2,1,`span`,69),B()),e&2){let e,n=t.$implicit,r=K(6);M(),F((e=n.target)?1:2,e),M(3),Z(` `,r.describe(n.lastArgs),` → `,r.describe(n.lastResult),` `),M(2),X(``,n.callCount,`×`),M(),F(n.totalMs===void 0?-1:7),M(),F(n.lastCaller?8:-1)}}function JV(e,t){if(e&1&&(z(0,`p`,61),J(1),B()),e&2){let e=K(2);M(),Z(` Showing `,e.instances.length,` of `,e.instanceTotal,` instances. `)}}function YV(e,t){if(e&1&&(z(0,`dt`),J(1,`Per instance`),B(),z(2,`dd`)(3,`ul`,58),I(4,qV,9,6,`li`,67,Dg),B(),P(6,JV,2,2,`p`,61),B()),e&2){let e=K();M(4),L(e.instances),M(2),F(e.instanceTotal?6:-1)}}function XV(e,t){if(e&1&&(z(0,`dt`),J(1,`Last caller`),B(),z(2,`dd`,66),J(3),B()),e&2){let e=K();M(3),Y(e.lastCaller)}}function ZV(e,t){if(e&1&&(z(0,`dt`),J(1,`Calls`),B(),z(2,`dd`),J(3),B(),P(4,BV,4,3),P(5,HV,5,2),z(6,`dt`),J(7,`Last input`),B(),z(8,`dd`,66),J(9),B(),z(10,`dt`),J(11,`Last output`),B(),z(12,`dd`,66),J(13),B(),P(14,YV,7,1),P(15,XV,4,1)),e&2){let e=t,n=K(4);M(3),Y(e.callCount),M(),F(e.totalMs===void 0?-1:4),M(),F(e.errorCount?5:-1),M(4),Y(n.describe(e.lastArgs)),M(4),Y(n.describe(e.lastResult)),M(),F(e.instances?.length?14:-1),M(),F(e.lastCaller?15:-1)}}function QV(e,t){e&1&&(z(0,`dt`),J(1,`Calls`),B(),z(2,`dd`,70),J(3,`None recorded yet.`),B())}function $V(e,t){e&1&&(z(0,`p`,61),J(1,` The stale check is off for this pipe: it couldn't read the compiled template, which happens in minified builds. `),B())}function eH(e,t){e&1&&(z(0,`p`,61),J(1,`Turn on “Record calls” to see call counts and values.`),B())}function tH(e,t){if(e&1&&(P(0,IV,4,0,`p`,59),z(1,`dl`)(2,`dt`),J(3,`Instances`),B(),z(4,`dd`),J(5),B(),z(6,`dt`),J(7,`Used by`),B(),z(8,`dd`)(9,`ul`,60),I(10,zV,3,1,`li`,null,sV),B()(),P(12,ZV,16,7)(13,QV,4,0),B(),P(14,$V,2,0,`p`,61),P(15,eH,2,0,`p`,61)),e&2){let e,n=t,r=K(3);F(n.stale?0:-1),M(5),Y(n.instanceCount),M(5),L(n.components),M(2),F((e=n.call)?12:r.instrumenting()?13:-1,e),M(2),F(n.staleCheck===`unavailable`?14:-1),M(),F(!n.call&&!r.instrumenting()?15:-1)}}function nH(e,t){e&1&&(z(0,`p`,56),J(1,` Not in use on the connected page. Open a view that uses it, or connect the app. `),B())}function rH(e,t){if(e&1&&(z(0,`header`,52)(1,`h2`,53),J(2),B(),z(3,`span`,48),J(4),B(),P(5,AV,2,0,`span`,48),P(6,jV,2,0,`span`,48),B(),z(7,`div`,54)(8,`h3`),J(9,`Declaration`),B(),z(10,`dl`)(11,`dt`),J(12,`Class`),B(),z(13,`dd`,55),J(14),B(),z(15,`dt`),J(16,`Source`),B(),z(17,`dd`),J(18),B(),P(19,MV,4,2),P(20,NV,4,1),z(21,`dt`),J(22,`Pure`),B(),z(23,`dd`),J(24),B()()(),P(25,FV,8,1,`div`,54),z(26,`div`,54)(27,`h3`),J(28,`Live on the page`),B(),P(29,tH,16,5)(30,nH,2,0,`p`,56),B()),e&2){let e,n=t,r=K(2);M(2),Y(n.name),M(),q(`impure`,!n.isPure),M(),Y(n.isPure?`pure`:`impure`),M(),F(n.builtin?5:-1),M(),F(n.runtime?6:-1),M(8),Y(n.className),M(4),Y(r.sourceLabel(n)),M(),F(!n.builtin&&!n.runtime?19:-1),M(),F(n.runtime?-1:20),M(4),X(` `,n.isPure?`Yes, reruns only when an input changes`:`No, reruns on every check`,` `),M(),F(n.usages?.length?25:-1),M(4),F((e=r.liveFor(n.name))?29:30,e)}}function iH(e,t){e&1&&(z(0,`h2`,71),J(1,`Pipe details`),B(),z(2,`div`,72)(3,`p`,30),J(4,`Pick a pipe`),B(),z(5,`p`,31),J(6,` See where it is declared, which components use it and what it last returned. `),B()())}function aH(e,t){if(e&1&&(P(0,hV,9,2,`div`,33),z(1,`div`,34)(2,`div`,35),P(3,EV,3,0,`ul`,36)(4,kV,8,1,`div`,37),B(),z(5,`section`,38),P(6,rH,31,13)(7,iH,7,0),B()()),e&2){let e,t=K();F(t.loadFailed()?0:-1),M(3),F(t.filtered().length?3:4),M(3),F((e=t.selected())?6:7,e)}}function oH(e,t){if(e&1&&(z(0,`p`,61),J(1),B()),e&2){let e=K(2);M(),Z(`Showing `,e.async().length,` of `,t,` subscriptions.`)}}function sH(e,t){if(e&1){let e=W();z(0,`button`,80),G(`click`,function(){let t=O(e);return k(K(3).highlight(t))})(`focus`,function(){let t=O(e);return k(K(3).highlight(t))})(`blur`,function(){return O(e),k(K(3).highlight(null))}),J(1),B()}if(e&2){let e=K().$implicit;N(`aria-label`,`Highlight `+e.component+` on the page`),M(),X(` `,e.component,` `)}}function cH(e,t){if(e&1&&(z(0,`span`,78),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.component)}}function lH(e,t){e&1&&(z(0,`span`,48),J(1,`no source`),B())}function uH(e,t){e&1&&(z(0,`span`,46),J(1,`duplicate subscription`),B())}function dH(e,t){e&1&&(z(0,`span`,46),J(1,`resubscribing`),B())}function fH(e,t){if(e&1){let e=W();z(0,`li`,76),G(`mouseenter`,function(){let t=O(e).$implicit;return k(K(2).highlight(t.target))})(`mouseleave`,function(){return O(e),k(K(2).highlight(null))}),P(1,sH,2,2,`button`,77)(2,cH,2,1,`span`,78),P(3,lH,2,0,`span`,48),P(4,uH,2,0,`span`,46),P(5,dH,2,0,`span`,46),z(6,`span`,79),J(7),B()()}if(e&2){let e,n=t.$implicit;M(),F((e=n.target)?1:2,e),M(2),F(n.hasSource?-1:3),M(),F(n.duplicate?4:-1),M(),F(n.resubscribing?5:-1),M(2),Y(n.latestValue??`no value yet`)}}function pH(e,t){if(e&1&&(z(0,`section`,18)(1,`h2`,73),J(2,` Async subscriptions `),z(3,`span`,21),J(4),B()(),z(5,`p`,61),J(6,` Each `),z(7,`span`,55),J(8,`| async`),B(),J(9,` subscribes on its own. Two on the same source mean the work runs twice. A source that changes on every check, like `),z(10,`span`,55),J(11,`getData() | async`),B(),J(12,`, resubscribes each time. `),B(),P(13,oH,2,2,`p`,61),z(14,`ul`,74),I(15,fH,8,5,`li`,75,Dg),B()()),e&2){let e,t=K();M(4),Y(t.async().length),M(9),F((e=t.asyncTotal())?13:-1,e),M(2),L(t.async())}}function mH(e,t){e&1&&(z(0,`span`,21),J(1),B()),e&2&&(M(),Y(t.length))}function hH(e,t){e&1&&(z(0,`p`,22),J(1,`Couldn't run the lint check. Try Refresh.`),B())}function gH(e,t){e&1&&(z(0,`p`,23),J(1,`Checking…`),B())}function _H(e,t){e&1&&(z(0,`p`,24),J(1,`No problems found.`),B())}function vH(e,t){if(e&1){let e=W();z(0,`button`,90),G(`click`,function(){O(e),K();let t=fv(6);return k(K(2).showPipe(t))}),z(1,`span`,91),J(2,`Show pipe `),B(),J(3),B()}if(e&2){let e=K().$implicit;M(3),X(``,e.pipe,` `)}}function yH(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` `,e.pipe,` `)}}function bH(e,t){if(e&1&&(z(0,`li`,81)(1,`div`,82)(2,`span`,83),J(3),B(),z(4,`code`,84),J(5),B(),uv(6),z(7,`span`,85),P(8,vH,4,1,`button`,86)(9,yH,1,1),J(10,` · `),V(11,`app-source-link`,57),B()(),z(12,`p`,87),J(13),B(),z(14,`p`,88)(15,`span`,89),J(16,`Fix`),B(),J(17),B()()),e&2){let e=t.$implicit;M(2),N(`data-tone`,e.severity),M(),Y(e.severity),M(2),Y(e.rule),M();let n=dv(K(2).pipeFor(e));M(2),F(n?8:9),M(3),R(`file`,e.file)(`line`,e.line),M(2),Y(e.message),M(4),X(` `,e.fix)}}function xH(e,t){if(e&1&&(z(0,`ul`,25),I(1,bH,18,9,`li`,81,Dg),B()),e&2){let e=K();M(),L(e.lint())}}var SH=5e3,CH=[{value:`all`,label:`All pipes`},{value:`custom`,label:`Custom`},{value:`builtin`,label:`Built-in`},{value:`runtime`,label:`Runtime only`},{value:`impure`,label:`Impure`},{value:`live`,label:`On the page`}],wH=class e{destroyRef=E(ws);host=E(Nl);injector=E(Ss);filterInput=Kv(`filterInput`);rpc=$(null);kindOptions=CH;pipes=j([]);filter=j(``);kind=j(`all`);loading=j(!1);loadFailed=j(!1);selected=j(null);live=j([]);async=j([]);asyncTotal=j(void 0);lint=j(null);lintFailed=j(!1);instrumentedPages=j([]);instrumenting=Q(()=>this.instrumentedPages().length>0);pendingRecord=j(null);recordMessage=j(null);recordLabel=Q(()=>{let e=this.pendingRecord();return e===null?this.instrumenting()?`Stop recording`:`Record calls`:e?`Starting…`:`Stopping…`});pendingTimer;liveByName=Q(()=>new Map(this.live().map(e=>[e.name,e])));allPipes=Q(()=>{let e=this.pipes(),t=new Set(e.map(e=>e.name)),n=this.live().filter(e=>!t.has(e.name)).map(e=>({name:e.name,className:e.className,file:``,line:0,isStandalone:!0,isPure:e.isPure,runtime:!0}));return n.length?[...e,...n]:e});filtered=Q(()=>{let e=this.filter(),t=this.kind()??`all`;return this.allPipes().filter(n=>this.fitsKind(n,t)&&this.fitsQuery(n,e))});pipesByName=Q(()=>{let e=new Map;for(let t of this.allPipes())e.set(t.name,[...e.get(t.name)??[],t]);return e});unsubscribe;constructor(){dc(()=>{let e=this.rpc();e&&(this.refresh(),this.loadLive(e))}),this.destroyRef.onDestroy(()=>{this.unsubscribe?.(),clearTimeout(this.pendingTimer),this.highlight(null)})}async refresh(){let e=this.rpc();if(e){this.loading.set(!0),this.loadFailed.set(!1);try{let t=await e.scope(`pangular`).rpc.call(`get-pipes`);this.pipes.set(t);let n=this.selected();if(n){let e=this.allPipes().find(e=>e.name===n.name&&e.file===n.file);this.selected.set(e??null)}}catch{this.loadFailed.set(!0)}finally{this.loading.set(!1)}this.loadLint(e)}}async loadLint(e){this.lintFailed.set(!1);try{let t=await e.scope(`pangular`).rpc.call(`pipe-lint`);this.lint.set(t)}catch{this.lintFailed.set(!0)}}async loadLive(e){try{let t=await e.scope(`pangular`).rpc.sharedState(`pipe-usage`);if(this.destroyRef.destroyed)return;let n=e=>{let t=e,n=uE(),r=(n?t?.pages?.find(e=>e.pageId===n):void 0)??t;this.live.set(r?.pipes??[]);let i=this.selected();i?.runtime&&!this.liveByName().has(i.name)&&this.selected.set(null),this.async.set(r?.async??[]),this.asyncTotal.set(r?.asyncTotal);let a=t?.instrumented??[];this.instrumentedPages.set(a),this.pendingRecord()===a.length>0&&this.settleRecord(null)};n(t.value()),this.unsubscribe?.(),this.unsubscribe=t.on(`updated`,n)}catch{}}async toggleInstrument(){let e=this.rpc();if(!e||this.pendingRecord()!==null)return;let t=!this.instrumenting();this.recordMessage.set(null),this.pendingRecord.set(t);let n;try{let r=t?{pageId:uE()??void 0,on:t}:{on:t};n=await e.scope(`pangular`).rpc.call(`request-instrument-pipes`,r)}catch{this.settleRecord(`Couldn't reach the devtools server. Try again.`);return}if(this.pendingRecord()===t){if(n?.pages===0){this.settleRecord(`No page is connected. Open your app in the browser with the devtools running, then record again.`);return}clearTimeout(this.pendingTimer),this.pendingTimer=setTimeout(()=>{this.pendingRecord()===t&&this.settleRecord(t?`No page confirmed recording. Reload the app and try again.`:`No page confirmed it stopped recording. Reload the app to stop it.`)},SH)}}settleRecord(e){clearTimeout(this.pendingTimer),this.pendingRecord.set(null),e!==null&&this.recordMessage.set(e)}sourceLabel(e){return e.builtin?`@angular/common`:e.runtime?`Seen on the page only`:`This project`}liveFor(e){return this.liveByName().get(e)}ms(e){return`${e<10?e.toFixed(2):Math.round(e)} ms`}describe(e){if(Array.isArray(e))return e.map(e=>this.describe(e)).join(`, `);if(typeof e==`string`)return e.length>80?`${e.slice(0,80)}…`:e;try{let t=JSON.stringify(e);return t&&t.length>120?`${t.slice(0,120)}…`:t??String(e)}catch{return String(e)}}isSelected(e){let t=this.selected();return t!==null&&t.name===e.name&&t.file===e.file}select(e){this.selected.set(this.isSelected(e)?null:e)}pipeFor(e){let t=this.pipesByName().get(e.pipe);return t?.length?t.find(t=>t.file===e.file)??t[0]:null}showPipe(e){this.fitsQuery(e,this.filter())||this.filter.set(``),this.fitsKind(e,this.kind()??`all`)||this.kind.set(`all`),this.selected.set(e),zd(()=>{let e=this.host.nativeElement;e.querySelector(`.row.selected`)?.scrollIntoView?.({block:`nearest`}),e.querySelector(`#pipe-detail-title`)?.focus()},{injector:this.injector})}fitsKind(e,t){return t===`custom`?!e.builtin&&!e.runtime:t===`builtin`?!!e.builtin:t===`runtime`?!!e.runtime:t===`impure`?!e.isPure:t!==`live`||this.liveByName().has(e.name)}fitsQuery(e,t){let n=t.trim().toLowerCase();return!n||e.name.toLowerCase().includes(n)||e.className.toLowerCase().includes(n)||e.file.toLowerCase().includes(n)}clearFilters(){this.filter.set(``),this.kind.set(`all`),this.filterInput()?.nativeElement.focus()}highlightPipe(e){this.highlight(e?.components.find(e=>e.targets?.length)?.targets?.[0])}highlight(e,t=!1){let n=this.rpc();n&&n.scope(`pangular`).rpc.call(`request-page-highlight`,e?{...e,...t?{reveal:t}:{}}:null).catch(()=>{})}onListKey(e){if(![`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key))return;let t=Array.from(this.host.nativeElement.querySelectorAll(`[data-pipe-row]`));if(!t.length)return;let n=t.indexOf(document.activeElement),r=n;r=e.key===`ArrowDown`?Math.min(n+1,t.length-1):e.key===`ArrowUp`?Math.max(n-1,0):e.key===`Home`?0:t.length-1,e.preventDefault(),t[r]?.focus()}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-pipes-inspector`]],viewQuery:function(e,t){e&1&&c_(t.filterInput,iV,5),e&2&&l_()},inputs:{rpc:[1,`rpc`]},decls:33,vars:18,consts:[[`filterInput`,``],[1,`intro`],[1,`toolbar`],[1,`search`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`search-icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`type`,`search`,`placeholder`,`Find a pipe, class or file…`,`aria-label`,`Find a pipe, class or file`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`value`],[`ariaLabel`,`Show pipes`,3,`valueChange`,`options`,`value`],[`aria-live`,`polite`,1,`total`],[1,`actions`],[`type`,`button`,3,`click`,`disabled`],[`type`,`button`,1,`record`,3,`click`],[`aria-hidden`,`true`,1,`rec-dot`],[`role`,`status`,1,`notice`],[`role`,`status`,1,`state`],[`role`,`alert`,1,`state`],[1,`state`],[`aria-labelledby`,`async-title`,1,`section`],[`aria-labelledby`,`lint-title`,1,`section`],[`id`,`lint-title`],[1,`pill`],[`role`,`alert`,1,`empty-line`],[`role`,`status`,1,`empty-line`],[1,`empty-line`,`ok`],[1,`findings`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`cx`,`12`,`cy`,`12`,`r`,`9`],[`d`,`M12 11v5M12 8h.01`],[`aria-hidden`,`true`,1,`spinner`],[1,`state-title`],[1,`state-hint`],[`type`,`button`,3,`click`],[`role`,`alert`,1,`notice`,`error`],[1,`layout`],[1,`list-wrap`],[`aria-label`,`Pipes`,1,`pipe-list`],[`role`,`status`,1,`state`,`compact`],[`id`,`pipe-detail`,`aria-labelledby`,`pipe-detail-title`,1,`detail`],[`d`,`M12 8v5M12 16h.01`],[`aria-label`,`Pipes`,1,`pipe-list`,3,`keydown`],[`type`,`button`,`data-pipe-row`,``,`aria-controls`,`pipe-detail`,1,`row`,3,`click`,`mouseenter`,`mouseleave`,`focus`,`blur`],[1,`row-main`],[1,`name`,`mono`],[1,`sub`,`mono`],[1,`row-meta`],[1,`chip`,`warn`],[1,`chip`,`live`],[1,`chip`],[1,`row-file`,`mono`],[1,`no-source`],[1,`more`],[1,`detail-head`],[`id`,`pipe-detail-title`,`tabindex`,`-1`,1,`mono`],[1,`block`],[1,`mono`],[1,`empty-line`],[3,`file`,`line`],[1,`sites`],[`role`,`note`,1,`warning`],[1,`chips`],[1,`hint`],[`type`,`button`,1,`component`],[1,`component`],[`type`,`button`,1,`component`,3,`click`,`mouseenter`,`mouseleave`,`focus`,`blur`],[1,`count`],[1,`mono`,`value`],[1,`instance`],[1,`calls`],[1,`mono`,`value`,`caller`],[1,`muted`],[`id`,`pipe-detail-title`,1,`visually-hidden`],[1,`state`,`compact`],[`id`,`async-title`],[1,`async-list`],[1,`async-row`],[1,`async-row`,3,`mouseenter`,`mouseleave`],[`type`,`button`,1,`component-name`,`mono`],[1,`mono`,`component-name`],[1,`mono`,`value`,`latest`],[`type`,`button`,1,`component-name`,`mono`,3,`click`,`focus`,`blur`],[1,`finding`],[1,`finding-head`],[1,`severity`],[1,`mono`,`rule`],[1,`where`,`mono`],[`type`,`button`,1,`pipe-link`],[1,`finding-message`],[1,`finding-fix`],[1,`fix-label`],[`type`,`button`,1,`pipe-link`,3,`click`],[1,`sr-only`]],template:function(e,t){if(e&1){let e=W();z(0,`p`,1),J(1,` Pipes declared in your source, the built-in pipes your templates use and library pipes seen on the page. Live data shows which components use each pipe on the page; turn on recording to capture calls and the last input and output. `),B(),z(2,`div`,2)(3,`div`,3),A(),z(4,`svg`,4),V(5,`circle`,5)(6,`path`,6),B(),ms(),z(7,`input`,7,0),G(`input`,function(e){return t.filter.set(e.target.value)})(`keydown.escape`,function(){return t.filter.set(``)}),B()(),z(9,`app-select`,8),cv(`valueChange`,function(n){return O(e),sv(t.kind,n)||(t.kind=n),k(n)}),B(),z(10,`span`,9),J(11),B(),z(12,`div`,10)(13,`button`,11),G(`click`,function(){return t.refresh()}),J(14,`Refresh`),B(),z(15,`button`,12),G(`click`,function(){return t.toggleInstrument()}),V(16,`span`,13),J(17),B()()(),P(18,cV,6,1,`p`,14),P(19,lV,8,1,`p`,14),P(20,uV,4,0,`div`,15)(21,dV,7,0,`div`,16)(22,fV,5,0,`div`,17)(23,aH,8,3),P(24,pH,17,2,`section`,18),z(25,`section`,19)(26,`h2`,20),J(27,` Lint `),P(28,mH,2,1,`span`,21),B(),P(29,hH,2,0,`p`,22)(30,gH,2,0,`p`,23)(31,_H,2,0,`p`,24)(32,xH,3,0,`ul`,25),B()}if(e&2){let e,n;M(7),R(`value`,t.filter()),M(2),R(`options`,t.kindOptions),ov(`value`,t.kind),M(2),Z(``,t.filtered().length,` of `,t.allPipes().length),M(2),R(`disabled`,t.loading()),M(2),q(`on`,t.instrumenting()),N(`aria-pressed`,t.instrumenting())(`aria-busy`,t.pendingRecord()!==null)(`aria-disabled`,t.pendingRecord()!==null),M(2),X(` `,t.recordLabel(),` `),M(),F((e=t.recordMessage())?18:-1,e),M(),F(t.instrumenting()?19:-1),M(),F(t.loading()&&t.allPipes().length===0?20:t.loadFailed()&&t.allPipes().length===0?21:t.allPipes().length===0?22:23),M(4),F(t.async().length>0?24:-1),M(4),F((n=t.lint())?28:-1,n),M(),F(t.lintFailed()?29:t.lint()===null?30:t.lint().length?32:31)}},dependencies:[GD,wO],styles:[`[_nghost-%COMP%] { display: block; color: var(--%NS%text); font-size: 13px; @@ -10496,7 +10531,7 @@ button.pipe-link[_ngcontent-%COMP%]:focus-visible { .spinner[_ngcontent-%COMP%] { animation: none; } -}`]})},cH=()=>[],lH=()=>[`/`],uH=(e,t)=>t.id,dH=(e,t)=>t.route.id,fH=(e,t)=>t[0],pH=(e,t)=>t.file+t.method,mH=(e,t)=>t.path,hH=(e,t)=>t.mode,gH=(e,t)=>t.file,_H=(e,t)=>t.rule;function vH(e,t){if(e&1){let e=W();z(0,`div`,0)(1,`h2`,3),J(2,`Could not read the project.`),B(),z(3,`p`,4),J(4,` Check that the dev server with Pangular Inspector is still running, then retry. `),B(),z(5,`button`,5),G(`click`,function(){return O(e),k(K().retry())}),J(6,`Retry`),B()()}}function yH(e,t){e&1&&(z(0,`div`,1),V(1,`span`,6),z(2,`span`),J(3,`Reading the project…`),B()())}function bH(e,t){e&1&&(z(0,`div`,2)(1,`h2`,3),J(2,`This app is not an Analog app.`),B(),z(3,`p`,4),J(4,` Add `),z(5,`code`),J(6,`pangular()`),B(),J(7,` from `),z(8,`code`),J(9,`@pangular-inspector/devtools/vite`),B(),J(10,` next to `),z(11,`code`),J(12,`analog()`),B(),J(13,` in vite.config.ts and run the Analog dev server. `),B()())}function xH(e,t){if(e&1&&(z(0,`div`,11)(1,`span`,9),J(2,`Open in the browser`),B(),z(3,`span`,15),J(4),B()()),e&2){let e=t;M(3),R(`title`,e.url),M(),Y(e.url)}}function SH(e,t){if(e&1){let e=W();z(0,`button`,16),G(`click`,function(){let t=O(e).$implicit;return k(K(2).view.set(t.id))}),J(1),z(2,`span`,17),J(3),B()()}if(e&2){let e=t.$implicit,n=K(2);R(`id`,`analog-tab-`+e.id),N(`aria-selected`,e.id===n.view())(`aria-controls`,`analog-panel-`+e.id)(`tabindex`,e.id===n.view()?0:-1),M(),X(` `,e.label,` `),M(),N(`data-tone`,e.tone),M(),Y(e.count)}}function CH(e,t){e&1&&(z(0,`div`,26),J(1),B()),e&2&&(M(),Y(t))}function wH(e,t){if(e&1&&(z(0,`li`)(1,`span`,31),J(2),B(),z(3,`span`,34),J(4),B()()),e&2){let e=t.$implicit,n=K(5);M(2),Y(n.short(e.file)??e.fullPath),M(),N(`data-kind`,e.kind),M(),Y(e.kind)}}function TH(e,t){if(e&1&&(z(0,`span`,35),J(1),B()),e&2){let e=t.$implicit;M(),Z(``,e[0],` = `,e[1])}}function EH(e,t){if(e&1&&(z(0,`div`,33),I(1,TH,2,2,`span`,35,fH),B()),e&2){let e=K(2),t=K(3);M(),L(t.paramList(e.match.params))}}function DH(e,t){if(e&1&&(z(0,`strong`,31),J(1),B(),J(2,` renders `),z(3,`ol`,32),I(4,wH,5,3,`li`,null,uH),B(),P(6,EH,3,0,`div`,33)),e&2){let e=K(),t=K(3);M(),Y(e.url),M(3),L(e.match.chain),M(2),F(t.paramList(e.match.params).length?6:-1)}}function OH(e,t){if(e&1&&(z(0,`li`)(1,`span`,31),J(2),B(),z(3,`span`,4),J(4),B()()),e&2){let e=t.$implicit,n=K(6);M(2),Y(n.short(e.file)??e.path),M(2),Y(e.reason)}}function kH(e,t){if(e&1&&(z(0,`ul`,36),I(1,OH,5,2,`li`,null,Cg),B()),e&2){let e=K(2);M(),L(e.match.rejected.slice(0,5))}}function AH(e,t){if(e&1&&(z(0,`strong`,31),J(1),B(),J(2,` matches no file route. Angular throws NG04002 "Cannot match any routes". `),P(3,kH,3,0,`ul`,36)),e&2){let e=K();M(),Y(e.url),M(2),F(e.match.rejected.length?3:-1)}}function jH(e,t){if(e&1&&(z(0,`div`,27),P(1,DH,7,2)(2,AH,4,2),B()),e&2){let e=t;N(`data-tone`,e.match.matched?`good`:`bad`),M(),F(e.match.matched?1:2)}}function MH(e,t){e&1&&(z(0,`span`,38),J(1,`└`),B())}function NH(e,t){e&1&&(z(0,`span`,40),J(1,`open`),B())}function PH(e,t){if(e&1&&(z(0,`span`,41)(1,`span`,45),J(2),B(),J(3),B()),e&2){let e=K().$implicit,t=K(3);M(2),Y(t.dir(e.route.file)),M(),Y(t.base(e.route.file))}}function FH(e,t){e&1&&(z(0,`span`,4),J(1,`folder only`),B())}function IH(e,t){if(e&1&&(z(0,`span`,43),J(1),B()),e&2){let e=t.$implicit;M(),X(``,e,`()`)}}function LH(e,t){if(e&1&&(z(0,`span`,44),J(1),B()),e&2){let e=K().$implicit;M(),X(`"`,e.route.title,`"`)}}function RH(e,t){if(e&1&&(z(0,`span`,35),J(1),B()),e&2){let e=K().$implicit;M(),Y(e)}}function zH(e,t){if(e&1&&P(0,RH,2,1,`span`,35),e&2){let e=t.$implicit;F(e===`title`?-1:0)}}function BH(e,t){if(e&1&&(z(0,`tr`)(1,`td`)(2,`div`,37),P(3,MH,2,0,`span`,38),z(4,`span`,39),J(5),B(),z(6,`span`,34),J(7),B(),P(8,NH,2,0,`span`,40),B()(),z(9,`td`),P(10,PH,4,2,`span`,41)(11,FH,2,0,`span`,4),B(),z(12,`td`)(13,`div`,42),I(14,IH,2,1,`span`,43,wg),B()(),z(16,`td`),P(17,LH,2,1,`span`,44),I(18,zH,1,1,null,null,wg),B()()),e&2){let e=t.$implicit,n=K(3);q(`open`,n.isOpen(e.route))(`dim`,e.route.kind===`group`||e.route.kind===`implicit`),M(2),C_(`padding-left`,e.depth*16,`px`),M(),F(e.depth?3:-1),M(2),Y(e.route.fullPath),M(),N(`data-kind`,e.route.kind),M(),Y(n.kindText(e.route)),M(),F(n.isOpen(e.route)?8:-1),M(2),F(e.route.file?10:11),M(4),L(n.serverExports(e.route)),M(3),F(e.route.title?17:-1),M(),L(e.route.routeMeta??ov(13,cH))}}function VH(e,t){e&1&&J(0,` No route matches the filter. Try part of a path or a file name. `)}function HH(e,t){e&1&&J(0,` No file routes yet. Add a .page.ts file under src/app/pages. `)}function UH(e,t){if(e&1&&(z(0,`tr`)(1,`td`,46),P(2,VH,1,0)(3,HH,1,0),B()()),e&2){let e=K(3);M(2),F(e.filter().trim()?2:3)}}function WH(e,t){if(e&1){let e=W();z(0,`div`,18)(1,`form`,19),G(`submit`,function(t){O(e);let n=K(2);return t.preventDefault(),k(n.explain())}),z(2,`label`,20),J(3,`Test a URL`),B(),z(4,`input`,21),G(`input`,function(t){return O(e),k(K(2).testUrl.set(t.target.value))}),B(),z(5,`button`,22),J(6),B()(),z(7,`label`,23),J(8,`Filter routes`),B(),z(9,`input`,24),G(`input`,function(t){return O(e),k(K(2).filter.set(t.target.value))})(`keydown.escape`,function(){return O(e),k(K(2).filter.set(``))}),B()(),z(10,`div`,25),P(11,CH,2,1,`div`,26)(12,jH,3,2,`div`,27),B(),z(13,`div`,28)(14,`table`)(15,`thead`)(16,`tr`)(17,`th`,29),J(18,`Route`),B(),z(19,`th`,29),J(20,`File`),B(),z(21,`th`,29),J(22,`Data`),B(),z(23,`th`,29),J(24,`Route meta`),B()()(),z(25,`tbody`),I(26,BH,20,14,`tr`,30,dH,!1,UH,4,1,`tr`),B()()()}if(e&2){let e,t=K(2);M(4),R(`value`,t.testUrl()),M(),R(`disabled`,t.explaining()),M(),X(` `,t.explaining()?`Explaining…`:`Explain`,` `),M(3),R(`value`,t.filter()),M(2),F((e=t.explainError())?11:(e=t.explained())?12:-1,e),M(15),L(t.routeRows())}}function GH(e,t){if(e&1&&(z(0,`span`,31),J(1),B(),J(2)),e&2){let e=t.$implicit,n=t.$index,r=t.$count;M(),Y(e),M(),X(``,n===r-1?``:`, `,` `)}}function KH(e,t){if(e&1&&(z(0,`div`,47)(1,`strong`),J(2,`load() ran twice`),B(),J(3,` for `),I(4,GH,3,2,null,null,wg),J(6,` : once while server rendering, again in the browser. TransferState did not serve the server result. `),B()),e&2){let e=K(3);M(4),L(e.duplicates())}}function qH(e,t){if(e&1&&(z(0,`span`,31),J(1),B(),J(2)),e&2){let e=t.$implicit,n=t.$index,r=t.$count;M(),Y(e),M(),X(``,n===r-1?``:`, `,` `)}}function JH(e,t){if(e&1&&(z(0,`div`,47)(1,`strong`),J(2,`Server function read ran twice`),B(),J(3,`: `),I(4,qH,3,2,null,null,wg),J(6,` ran while server rendering, then again in the browser. The browser did not use the TransferState seed. `),B()),e&2){let e=K(3);M(4),L(e.refetchedFns())}}function YH(e,t){if(e&1){let e=W();z(0,`label`)(1,`input`,79),G(`change`,function(){let t=O(e).$implicit;return k(K(3).kind.set(t))}),B(),J(2),z(3,`span`,4),J(4),B()()}if(e&2){let e=t.$implicit,n=K(3);q(`on`,n.kind()===e),M(),R(`checked`,n.kind()===e),N(`data-kind`,e),M(),X(` `,n.kindLabel(e),` `),M(2),Y(n.kindCount(e))}}function XH(e,t){if(e&1&&J(0),e&2){let e=K(4);Z(` Showing the newest `,e.shownCount(),` of `,e.matchingCalls().length,`. `)}}function ZH(e,t){e&1&&J(0),e&2&&X(` The dev server keeps only the newest `,K(4).maxServerCalls,` calls and drops older ones. `)}function QH(e,t){if(e&1&&(z(0,`p`,65),P(1,XH,1,2),P(2,ZH,1,1),B()),e&2){let e=K(3);M(),F(e.shownCount()1?6:-1),M(2),Y(e.summary),M(2),L(e.items),M(5),X(` `,e.fix),M(2),Y(e.rule)}}function uW(e,t){if(e&1&&(z(0,`p`,4),J(1),B(),z(2,`ul`,112),I(3,lW,18,8,`li`,null,_H),B()),e&2){let e=K(3);M(),Z(` `,e.findings().length,` issue(s) in `,e.lintCards().length,` group(s). Each card says what is wrong, where, and how to fix it. `),M(2),L(e.lintCards())}}function dW(e,t){e&1&&(z(0,`div`,111)(1,`strong`),J(2,`No Analog problems found.`),B(),J(3,` Routes, server files, prerender config and content all check out. `),B())}function fW(e,t){e&1&&P(0,uW,5,2)(1,dW,4,0,`div`,111),e&2&&F(+!K(2).findings().length)}function pW(e,t){if(e&1){let e=W();z(0,`section`,7)(1,`div`,8)(2,`span`,9),J(3,`Analog`),B(),z(4,`span`,10),J(5),B()(),z(6,`div`,8)(7,`span`,9),J(8,`Pages`),B(),z(9,`span`,10),J(10),B()(),z(11,`div`,8)(12,`span`,9),J(13,`API routes`),B(),z(14,`span`,10),J(15),B()(),z(16,`div`,8)(17,`span`,9),J(18,`Server calls`),B(),z(19,`span`,10),J(20),B()(),z(21,`div`,8)(22,`span`,9),J(23,`Issues`),B(),z(24,`span`,10),J(25),B()(),P(26,xH,5,2,`div`,11),B(),z(27,`div`,12),G(`keydown`,function(t){return O(e),k(K().onKey(t))}),I(28,SH,4,7,`button`,13,uH),B(),z(30,`div`,14),P(31,WH,29,6)(32,DU,65,21)(33,ZU,18,3)(34,rW,2,1)(35,fW,2,1),B()}if(e&2){let e,t,n=K();M(5),Y(n.project().version||`unknown`),M(5),Y(n.pageCount()),M(5),Y(n.project().api.length),M(5),Y(n.allCalls().length),M(),N(`data-tone`,n.lintTone()||`good`),M(4),Y(n.lintCount().errors+n.lintCount().warnings),M(),F((e=n.page())?26:-1,e),M(2),L(n.views()),M(2),R(`id`,`analog-panel-`+n.view()),N(`aria-labelledby`,`analog-tab-`+n.view()),M(),F((t=n.view())===`routes`?31:t===`server`?32:t===`render`?33:t===`content`?34:t===`lint`?35:-1)}}var mW={"scan-error":{title:`A folder could not be read`,summary:`Its files are missing from routes, API routes and lint results.`},"duplicate-url":{title:`Two files serve the same URL`,summary:`Only one of them is reachable; the other never renders.`},"sibling-params":{title:`Two dynamic pages in one folder`,summary:`Both are [param] pages at the same level, so the first one always wins.`},"missing-default-export":{title:`Page has no default export`,summary:`Analog needs the component as the default export, so the page renders nothing.`},"redirect-with-component":{title:`Redirect page also exports a component`,summary:`The redirect runs first, so the component never shows.`},"redirect-path-match":{title:`Redirect matches too much`,summary:`An empty-path redirect without pathMatch "full" catches every URL below it.`},"layout-without-outlet":{title:`Layout has no router-outlet`,summary:`The layout has child pages, but without they never render.`},"server-without-load":{title:`.server.ts without load or action`,summary:`The server file exports no load, action or server function, so Analog calls nothing.`},"orphan-server-file":{title:`.server.ts without a page`,summary:`No page file sits next to it, so its load never runs.`},"api-method-suffix":{title:`Unknown method suffix on an API file`,summary:`The suffix is not an HTTP method, so it becomes part of the URL.`},"duplicate-api-route":{title:`Two handlers for one API route`,summary:`Two files answer the same method and path.`},"api-outside-prefix":{title:`Server route outside the API prefix`,summary:`During vite dev only routes under the prefix reach Nitro.`},"prerender-unknown-route":{title:`Prerender entry matches no page`,summary:`prerender.routes lists a path that no page file serves.`},"prerender-missing-root":{title:`Home page is not prerendered`,summary:`static is on, but prerender.routes leaves out /.`},"content-frontmatter":{title:`Broken frontmatter`,summary:`The markdown frontmatter cannot be read.`},"duplicate-slug":{title:`Two posts share a slug`,summary:`injectContent picks one of them at random.`},"content-shadows-page":{title:`Markdown file takes over a page`,summary:`Files under src/content are routes too, so these URLs render the markdown file instead of the [param] page.`},"load-fetched-twice":{title:`load() runs twice`,summary:`These pages fetched their data while rendering on the server and again in the browser.`},"fn-fetched-twice":{title:`Server function read runs twice`,summary:`These reads ran while rendering on the server and again in the browser right after hydration.`},"restart-needed":{title:`New pages need a restart`,summary:`These page files exist, but the running router does not know them yet.`},"hydration-error":{title:`Hydration error`,summary:`The browser DOM did not match the server HTML.`},"api-not-found":{title:`API call failed with 404 or 405`,summary:`A request hit a path or method that no server route handles.`}},hW=200,gW=new Set([`missing-default-export`,`redirect-with-component`,`redirect-path-match`,`layout-without-outlet`,`server-without-load`,`orphan-server-file`,`load-fetched-twice`,`restart-needed`,`prerender-missing-root`]),_W={ssr:`SSR`,ssg:`Prerendered`,client:`Client only`,cached:`Cached`,redirect:`Redirect`},vW={all:`All`,page:`Pages`,load:`load()`,action:`Actions`,fn:`Server fn`,api:`API`},yW={success:`succeeded`,redirect:`redirected`,invalid:`validation errors`,error:`failed`},bW={success:`good`,redirect:`info`,invalid:`warn`,error:`bad`};function xW(e,t=0,n=[]){for(let r of e)n.push({route:r,depth:t}),xW(r.children,t+1,n);return n}var SW=class e{rpc=$(null);canCall=Q(()=>SE(this.rpc(),`analog`));callsOff=JT(`analog`);kinds=[`all`,`page`,`load`,`action`,`fn`,`api`];methods=[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`];methodOptions=this.methods.map(e=>({value:e,label:e}));view=j(`routes`);project=j(null);loadFailed=j(!1);state=j({});findings=j([]);renderRows=j([]);plan=j(null);filter=j(``);testUrl=j(``);explained=j(null);explainError=j(``);explaining=j(!1);kind=j(`all`);method=j(`GET`);apiPath=j(``);apiBody=j(``);confirmSend=j(!1);response=j(null);sending=j(!1);needsConfirm=Q(()=>this.method()!==`GET`&&!this.confirmSend());canSend=Q(()=>this.canCall()&&!this.sending()&&!this.needsConfirm());sendHintId=Q(()=>this.canCall()?this.needsConfirm()?`analog-confirm-hint`:null:`analog-calls-off`);unsubscribe=null;refreshTimer;refreshRun=0;destroyRef=E(Cs);host=E(Ml);hostPageId=nE();page=Q(()=>{let e=this.state().pages??[];return(this.hostPageId?e.find(e=>e.pageId===this.hostPageId):e[0])??null});openFiles=Q(()=>new Set((this.page()?.chain??[]).map(e=>e.file)));allCalls=Q(()=>this.state().calls??[]);maxServerCalls=hW;callQuery=j(``);failedOnly=j(!1);callsMessage=j(``);callFiltered=Q(()=>!!this.callQuery().trim()||this.failedOnly());matchingCalls=Q(()=>{let e=this.kind(),t=this.callQuery().trim().toLowerCase(),n=this.failedOnly();return this.allCalls().filter(r=>(e===`all`||r.kind===e)&&(!n||this.isFailed(r))&&(!t||this.callText(r).includes(t)))});calls=Q(()=>this.matchingCalls().slice(-150).reverse());shownCount=Q(()=>this.calls().length);serverFull=Q(()=>this.allCalls().length>=hW);allRoutes=Q(()=>xW(this.project()?.routes??[]));pageCount=Q(()=>this.allRoutes().filter(e=>e.route.file&&e.route.kind!==`layout`).length);routeRows=Q(()=>{let e=this.filter().trim().toLowerCase();return e?this.allRoutes().filter(t=>t.route.fullPath.toLowerCase().includes(e)||!!t.route.file?.toLowerCase().includes(e)):this.allRoutes()});serverFns=Q(()=>this.project()?.serverFns??[]);fnById=Q(()=>new Map(this.serverFns().map(e=>[e.id,e])));refetchedFns=Q(()=>Array.from(new Set((this.state().refetches??[]).map(e=>this.fnById().get(e.id)?.name??e.id))));duplicates=Q(()=>Array.from(new Set((this.state().duplicates??[]).map(e=>e.route))));modeCounts=Q(()=>[`ssr`,`ssg`,`cached`,`client`,`redirect`].map(e=>({mode:e,label:_W[e],count:this.renderRows().filter(t=>t.mode===e).length})).filter(e=>e.count));lintCards=Q(()=>{let e={error:0,warning:1,info:2},t=new Map;for(let e of this.findings()){let n=t.get(e.rule);if(!n){let r=mW[e.rule];n={rule:e.rule,severity:e.severity,title:r?.title??e.rule,summary:r?.summary??e.message,fix:e.fix,items:[]},t.set(e.rule,n)}let r=gW.has(e.rule)||e.message===n.summary?void 0:e.message;n.items.some(t=>t.file===e.file&&t.path===e.path&&t.message===r)||n.items.push({file:e.file,path:e.path,message:r})}return Array.from(t.values()).sort((t,n)=>e[t.severity]-e[n.severity])});lintCount=Q(()=>{let e=this.findings();return{errors:e.filter(e=>e.severity===`error`).length,warnings:e.filter(e=>e.severity===`warning`).length}});lintTone=Q(()=>{let{errors:e,warnings:t}=this.lintCount();return e?`bad`:t?`warn`:``});views=Q(()=>{let{errors:e,warnings:t}=this.lintCount();return[{id:`routes`,label:`Routes`,count:this.pageCount(),tone:``},{id:`server`,label:`Server`,count:this.allCalls().length,tone:``},{id:`render`,label:`Render`,count:this.renderRows().length,tone:``},{id:`content`,label:`Content`,count:this.project()?.content.length??0,tone:``},{id:`lint`,label:`Lint`,count:e+t,tone:this.lintTone()}]});constructor(){uc(()=>{let e=this.rpc();e&&Cv(()=>void this.load(e))}),uc(()=>{let e=this.view();this.state(),Cv(()=>this.scheduleRefresh(e))}),this.destroyRef.onDestroy(()=>{this.unsubscribe?.(),clearTimeout(this.refreshTimer)})}async load(e){let t=await sE(e,`analog-project`);if(!this.destroyRef.destroyed){this.project.set(t),this.loadFailed.set(t===null);try{let t=await e.scope(`pangular`).rpc.sharedState(`analog`);if(this.destroyRef.destroyed)return;let n=e=>this.state.set(e??{});n(t.value()),this.unsubscribe?.(),this.unsubscribe=t.on(`updated`,n)}catch{this.state.set({})}this.destroyRef.destroyed||await this.refresh(this.view())}}retry(){let e=this.rpc();e&&(this.loadFailed.set(!1),this.load(e))}scheduleRefresh(e){clearTimeout(this.refreshTimer),this.refreshTimer=setTimeout(()=>void this.refresh(e),300)}async refresh(e){let t=this.rpc();if(!t)return;let n=++this.refreshRun,[r,i]=await Promise.all([sE(t,`analog-lint`,this.hostPageId??void 0),sE(t,`analog-render`)]);if(n===this.refreshRun&&(this.findings.set(r??[]),this.renderRows.set(i?.rows??[]),this.plan.set(i?.plan??null),e===`routes`||e===`content`||this.project()===null)){let e=await sE(t,`analog-project`);e&&n===this.refreshRun&&(this.project.set(e),this.loadFailed.set(!1))}}isOpen(e){return!!e.file&&this.openFiles().has(e.file)}kindText(e){return e.catchAll?e.catchAll===`optional`?`optional catch-all`:`catch-all`:e.kind===`implicit`?`folder`:e.kind}serverExports(e){return(e.serverExports??[]).filter(e=>e===`load`||e===`action`)}short(e){return e?.replace(/^\/src\/app\//,``).replace(/^\//,``)}dir(e){let t=this.short(e)??e;return t.includes(`/`)?t.slice(0,t.lastIndexOf(`/`)+1):``}base(e){return e.slice(e.lastIndexOf(`/`)+1)}paramList(e){return Object.entries(e)}kindLabel(e){return vW[e]}kindCount(e){return e===`all`?this.allCalls().length:this.allCalls().filter(t=>t.kind===e).length}modeLabel(e){return _W[e]}mismatch(e){return!e.last?.render||e.mode===`redirect`?!1:e.mode===`client`?e.last.render!==`client`:e.last.render===`client`}fnOf(e){return e.kind===`fn`&&e.route?this.fnById().get(e.route):void 0}fnCalls(e){return this.allCalls().filter(t=>t.kind===`fn`&&t.route===e).length}outcomeLabel(e){return yW[e]}outcomeTone(e){return bW[e]}statusClass(e){return e>=500||e===0?`bad`:e>=400?`warn`:`good`}tone(e){return e===`error`?`bad`:e===`warning`?`warn`:`info`}shadowed(e){return this.findings().find(t=>t.rule===`content-shadows-page`&&t.file===e)?.relatedFile}contentUrl(e){return this.allRoutes().find(t=>t.route.file===e)?.route.fullPath}pretty(e){try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}time=GD;tryApi(e){this.method.set(e.method===`ANY`?`GET`:e.method),this.apiPath.set(e.path.replace(/:(\w+)/g,`1`).replace(`**`,`x`)),this.response.set(null),queueMicrotask(()=>document.getElementById(`api-path`)?.focus())}isFailed(e){return!e.status||e.status>=400||e.outcome===`error`}callText(e){let t=this.fnOf(e);return[e.url,e.route,t?.name,t?.file].filter(Boolean).join(` `).toLowerCase()}clearCallFilters(){this.callQuery.set(``),this.failedOnly.set(!1),this.kind.set(`all`),queueMicrotask(()=>this.host.nativeElement.querySelector(`#analog-call-search`)?.focus())}async clearCalls(){let e=this.rpc();try{if(!e)throw Error(`No devtools server`);await oE(e,`analog-clear-calls`),this.callsMessage.set(`Calls cleared.`),queueMicrotask(()=>this.host.nativeElement.querySelector(`input[name="analog-kind"]:checked`)?.focus())}catch{this.callsMessage.set(`Could not clear the calls.`)}}async explain(){let e=this.testUrl().trim();if(!e){this.explained.set(null),this.explainError.set(`Type a URL to explain, for example /products/42.`);return}this.explaining.set(!0),this.explainError.set(``);try{let t=await oE(this.rpc(),`analog-explain-url`,e);if(!t)throw Error(`The devtools server did not answer`);this.explained.set({url:e,match:t})}catch(t){let n=String(t?.message||`The devtools server did not answer`);this.explained.set(null),this.explainError.set(`Could not explain ${e}. ${n.replace(/\.?$/,`.`)}`)}finally{this.explaining.set(!1)}}async send(){let e=this.apiPath().trim();if(!e||this.sending()||this.needsConfirm())return;let t;if(this.method()!==`GET`&&this.apiBody().trim())try{t=JSON.parse(this.apiBody())}catch{this.response.set({error:`The body is not valid JSON.`});return}this.response.set(null),this.sending.set(!0);try{let n=await sE(this.rpc(),`analog-call-api`,{method:this.method(),path:e,body:t,confirm:this.confirmSend()});this.response.set(n??{error:`No answer from the devtools server.`})}finally{this.sending.set(!1)}}onKey(e){let t=this.views().map(e=>e.id),n=t.indexOf(this.view()),r=n;if(e.key===`ArrowRight`)r=(n+1)%t.length;else if(e.key===`ArrowLeft`)r=(n-1+t.length)%t.length;else if(e.key===`Home`)r=0;else if(e.key===`End`)r=t.length-1;else return;e.preventDefault(),this.view.set(t[r]);let i=e.currentTarget;queueMicrotask(()=>i.querySelector(`#analog-tab-${t[r]}`)?.focus())}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-analog-inspector`]],inputs:{rpc:[1,`rpc`]},decls:4,vars:1,consts:[[`role`,`alert`,1,`empty`],[`role`,`status`,1,`loading`],[1,`empty`],[1,`empty-title`],[1,`muted`],[`type`,`button`,1,`btn`,3,`click`],[`aria-hidden`,`true`,1,`spinner`],[`aria-label`,`Analog summary`,1,`summary`],[1,`stat`],[1,`label`],[1,`value`],[1,`stat`,`wide`],[`role`,`tablist`,`aria-label`,`Analog views`,1,`tabs`,3,`keydown`],[`type`,`button`,`role`,`tab`,3,`id`],[`role`,`tabpanel`,1,`panel`,3,`id`],[1,`value`,`mono`,3,`title`],[`type`,`button`,`role`,`tab`,3,`click`,`id`],[1,`count`],[1,`toolbar`],[1,`inline`,`explain`,3,`submit`],[`for`,`analog-url`],[`id`,`analog-url`,`type`,`text`,`placeholder`,`/products/42`,1,`field`,`grow`,`mono`,3,`input`,`value`],[`type`,`submit`,1,`btn`,`primary`,3,`disabled`],[`for`,`route-filter`,1,`sr-only`],[`id`,`route-filter`,`type`,`search`,`placeholder`,`Filter by path or file`,1,`field`,`filter`,3,`input`,`keydown.escape`,`value`],[`role`,`status`,1,`explain-result`],[`data-tone`,`bad`,1,`callout`],[1,`callout`],[`role`,`region`,`aria-label`,`File routes`,`tabindex`,`0`,1,`table-wrap`],[`scope`,`col`],[3,`open`,`dim`],[1,`mono`],[1,`chain`],[1,`chips`],[1,`pill`],[1,`chip`,`mono`],[1,`plain`],[1,`route`],[`aria-hidden`,`true`,1,`guide`],[1,`mono`,`path`],[1,`pill`,`live`],[1,`file`],[1,`meta`],[`data-kind`,`load`,1,`pill`],[1,`chip`],[1,`dir`],[`colspan`,`4`,1,`empty-row`],[`data-tone`,`warn`,`role`,`note`,1,`callout`],[`id`,`analog-calls-heading`],[1,`calls-bar`],[1,`segmented`],[1,`sr-only`],[3,`on`],[1,`calls-actions`],[`type`,`button`,1,`btn`,`ghost`,3,`click`,`disabled`],[`role`,`status`,1,`calls-message`],[`role`,`group`,`aria-label`,`Filter the server calls`,1,`call-filters`],[1,`search`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`search-icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`id`,`analog-call-search`,`type`,`search`,`placeholder`,`Find a URL, path or function…`,`aria-label`,`Find a URL, path or function`,`autocomplete`,`off`,`spellcheck`,`false`,1,`field`,3,`input`,`keydown.escape`,`value`],[1,`check`],[`type`,`checkbox`,3,`change`,`checked`],[`aria-live`,`polite`,1,`total`],[1,`note`],[`role`,`region`,`aria-label`,`Server calls`,`tabindex`,`0`,1,`table-wrap`],[`role`,`status`,1,`empty-box`,`no-match`],[1,`empty-box`],[`role`,`region`,`aria-label`,`API routes`,`tabindex`,`0`,1,`table-wrap`],[1,`card`,`playground`,3,`submit`],[1,`row`],[`ariaLabel`,`Method`,1,`method-select`,3,`valueChange`,`options`,`value`],[`for`,`api-path`,1,`sr-only`],[`id`,`api-path`,`type`,`text`,`placeholder`,`/api/v1/products`,1,`field`,`grow`,`mono`,3,`input`,`value`],[`id`,`analog-calls-off`,1,`muted`],[`id`,`analog-confirm-hint`,1,`muted`],[`role`,`status`,1,`muted`],[`role`,`status`,1,`response`],[`type`,`radio`,`name`,`analog-kind`,1,`sr-only`,3,`change`,`checked`],[`scope`,`col`,1,`num`],[1,`muted`,`nowrap`],[1,`request`],[1,`method`],[1,`mono`,`url`],[1,`status`],[1,`num`,`nowrap`],[1,`mono`,`muted`],[1,`code`],[1,`empty-lead`],[1,`empty-actions`],[`type`,`button`,1,`btn`,`ghost`,3,`click`],[1,`actions`],[`role`,`region`,`aria-label`,`Server functions`,`tabindex`,`0`,1,`table-wrap`],[1,`num`,`tnum`],[`for`,`api-body`],[`id`,`api-body`,`rows`,`3`,`placeholder`,`{"name": "Ada"}`,1,`field`,`mono`,3,`input`,`value`],[1,`check`,`confirm-send`],[`data-status`,`bad`,1,`status`],[`role`,`region`,`aria-label`,`Render modes`,`tabindex`,`0`,1,`table-wrap`],[1,`card`],[1,`muted`,`small`],[1,`muted`,`small`,`tnum`],[`data-tone`,`warn`,1,`pill`],[1,`facts`],[1,`tnum`],[`data-tone`,`warn`,1,`chip`,`mono`],[`data-tone`,`bad`,1,`chip`,`mono`],[`role`,`region`,`aria-label`,`Content files`,`tabindex`,`0`,1,`table-wrap`],[1,`muted`,`nowrap`,`tnum`],[`data-tone`,`bad`,1,`pill`],[`data-tone`,`good`,`role`,`status`,1,`callout`],[1,`findings`],[1,`finding-head`],[1,`finding-title`],[1,`where`],[1,`fix`],[1,`rule`,`mono`],[1,`detail`]],template:function(e,t){e&1&&P(0,vH,7,0,`div`,0)(1,yH,4,0,`div`,1)(2,bH,14,0,`div`,2)(3,pW,36,10),e&2&&F(t.project()===null&&t.loadFailed()?0:t.project()===null?1:t.project().analog?3:2)},dependencies:[LD],styles:[`@charset "UTF-8"; +}`]})},TH=()=>[],EH=()=>[`/`],DH=(e,t)=>t.id,OH=(e,t)=>t.route.id,kH=(e,t)=>t[0],AH=(e,t)=>t.file+t.method,jH=(e,t)=>t.path,MH=(e,t)=>t.mode,NH=(e,t)=>t.file,PH=(e,t)=>t.rule;function FH(e,t){if(e&1){let e=W();z(0,`div`,0)(1,`h2`,3),J(2,`Could not read the project.`),B(),z(3,`p`,4),J(4,` Check that the dev server with Pangular Inspector is still running, then retry. `),B(),z(5,`button`,5),G(`click`,function(){return O(e),k(K().retry())}),J(6,`Retry`),B()()}}function IH(e,t){e&1&&(z(0,`div`,1),V(1,`span`,6),z(2,`span`),J(3,`Reading the project…`),B()())}function LH(e,t){e&1&&(z(0,`div`,2)(1,`h2`,3),J(2,`This app is not an Analog app.`),B(),z(3,`p`,4),J(4,` Add `),z(5,`code`),J(6,`pangular()`),B(),J(7,` from `),z(8,`code`),J(9,`@pangular-inspector/devtools/vite`),B(),J(10,` next to `),z(11,`code`),J(12,`analog()`),B(),J(13,` in vite.config.ts and run the Analog dev server. `),B()())}function RH(e,t){if(e&1&&(z(0,`div`,11)(1,`span`,9),J(2,`Open in the browser`),B(),z(3,`span`,15),J(4),B()()),e&2){let e=t;M(3),R(`title`,e.url),M(),Y(e.url)}}function zH(e,t){if(e&1){let e=W();z(0,`button`,16),G(`click`,function(){let t=O(e).$implicit;return k(K(2).view.set(t.id))}),J(1),z(2,`span`,17),J(3),B()()}if(e&2){let e=t.$implicit,n=K(2);R(`id`,`analog-tab-`+e.id),N(`aria-selected`,e.id===n.view())(`aria-controls`,`analog-panel-`+e.id)(`tabindex`,e.id===n.view()?0:-1),M(),X(` `,e.label,` `),M(),N(`data-tone`,e.tone),M(),Y(e.count)}}function BH(e,t){e&1&&(z(0,`div`,26),J(1),B()),e&2&&(M(),Y(t))}function VH(e,t){if(e&1&&(z(0,`app-source-link`,34),J(1),B()),e&2){let e=K().$implicit,t=K(5);R(`file`,e.file),M(),Y(t.short(e.file))}}function HH(e,t){if(e&1&&(z(0,`span`,31),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.fullPath)}}function UH(e,t){if(e&1&&(z(0,`li`),P(1,VH,2,2,`app-source-link`,34)(2,HH,2,1,`span`,31),z(3,`span`,35),J(4),B()()),e&2){let e=t.$implicit;M(),F(e.file?1:2),M(2),N(`data-kind`,e.kind),M(),Y(e.kind)}}function WH(e,t){if(e&1&&(z(0,`span`,36),J(1),B()),e&2){let e=t.$implicit;M(),Z(``,e[0],` = `,e[1])}}function GH(e,t){if(e&1&&(z(0,`div`,33),I(1,WH,2,2,`span`,36,kH),B()),e&2){let e=K(2),t=K(3);M(),L(t.paramList(e.match.params))}}function KH(e,t){if(e&1&&(z(0,`strong`,31),J(1),B(),J(2,` renders `),z(3,`ol`,32),I(4,UH,5,3,`li`,null,DH),B(),P(6,GH,3,0,`div`,33)),e&2){let e=K(),t=K(3);M(),Y(e.url),M(3),L(e.match.chain),M(2),F(t.paramList(e.match.params).length?6:-1)}}function qH(e,t){if(e&1&&(z(0,`app-source-link`,34),J(1),B()),e&2){let e=K().$implicit,t=K(6);R(`file`,e.file),M(),Y(t.short(e.file))}}function JH(e,t){if(e&1&&(z(0,`span`,31),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.path)}}function YH(e,t){if(e&1&&(z(0,`li`),P(1,qH,2,2,`app-source-link`,34)(2,JH,2,1,`span`,31),z(3,`span`,4),J(4),B()()),e&2){let e=t.$implicit;M(),F(e.file?1:2),M(3),Y(e.reason)}}function XH(e,t){if(e&1&&(z(0,`ul`,37),I(1,YH,5,2,`li`,null,Dg),B()),e&2){let e=K(2);M(),L(e.match.rejected.slice(0,5))}}function ZH(e,t){if(e&1&&(z(0,`strong`,31),J(1),B(),J(2,` matches no file route. Angular throws NG04002 "Cannot match any routes". `),P(3,XH,3,0,`ul`,37)),e&2){let e=K();M(),Y(e.url),M(2),F(e.match.rejected.length?3:-1)}}function QH(e,t){if(e&1&&(z(0,`div`,27),P(1,KH,7,2)(2,ZH,4,2),B()),e&2){let e=t;N(`data-tone`,e.match.matched?`good`:`bad`),M(),F(e.match.matched?1:2)}}function $H(e,t){e&1&&(z(0,`span`,39),J(1,`└`),B())}function eU(e,t){e&1&&(z(0,`span`,41),J(1,`open`),B())}function tU(e,t){if(e&1&&(z(0,`app-source-link`,42)(1,`span`,46),J(2),B(),J(3),B()),e&2){let e=K().$implicit,t=K(3);R(`file`,e.route.file),M(2),Y(t.dir(e.route.file)),M(),Y(t.base(e.route.file))}}function nU(e,t){e&1&&(z(0,`span`,4),J(1,`folder only`),B())}function rU(e,t){if(e&1&&(z(0,`span`,44),J(1),B()),e&2){let e=t.$implicit;M(),X(``,e,`()`)}}function iU(e,t){if(e&1&&(z(0,`span`,45),J(1),B()),e&2){let e=K().$implicit;M(),X(`"`,e.route.title,`"`)}}function aU(e,t){if(e&1&&(z(0,`span`,36),J(1),B()),e&2){let e=K().$implicit;M(),Y(e)}}function oU(e,t){if(e&1&&P(0,aU,2,1,`span`,36),e&2){let e=t.$implicit;F(e===`title`?-1:0)}}function sU(e,t){if(e&1&&(z(0,`tr`)(1,`td`)(2,`div`,38),P(3,$H,2,0,`span`,39),z(4,`span`,40),J(5),B(),z(6,`span`,35),J(7),B(),P(8,eU,2,0,`span`,41),B()(),z(9,`td`),P(10,tU,4,3,`app-source-link`,42)(11,nU,2,0,`span`,4),B(),z(12,`td`)(13,`div`,43),I(14,rU,2,1,`span`,44,Og),B()(),z(16,`td`),P(17,iU,2,1,`span`,45),I(18,oU,1,1,null,null,Og),B()()),e&2){let e=t.$implicit,n=K(3);q(`open`,n.isOpen(e.route))(`dim`,e.route.kind===`group`||e.route.kind===`implicit`),M(2),j_(`padding-left`,e.depth*16,`px`),M(),F(e.depth?3:-1),M(2),Y(e.route.fullPath),M(),N(`data-kind`,e.route.kind),M(),Y(n.kindText(e.route)),M(),F(n.isOpen(e.route)?8:-1),M(2),F(e.route.file?10:11),M(4),L(n.serverExports(e.route)),M(3),F(e.route.title?17:-1),M(),L(e.route.routeMeta??mv(13,TH))}}function cU(e,t){e&1&&J(0,` No route matches the filter. Try part of a path or a file name. `)}function lU(e,t){e&1&&J(0,` No file routes yet. Add a .page.ts file under src/app/pages. `)}function uU(e,t){if(e&1&&(z(0,`tr`)(1,`td`,47),P(2,cU,1,0)(3,lU,1,0),B()()),e&2){let e=K(3);M(2),F(e.filter().trim()?2:3)}}function dU(e,t){if(e&1){let e=W();z(0,`div`,18)(1,`form`,19),G(`submit`,function(t){O(e);let n=K(2);return t.preventDefault(),k(n.explain())}),z(2,`label`,20),J(3,`Test a URL`),B(),z(4,`input`,21),G(`input`,function(t){return O(e),k(K(2).testUrl.set(t.target.value))}),B(),z(5,`button`,22),J(6),B()(),z(7,`label`,23),J(8,`Filter routes`),B(),z(9,`input`,24),G(`input`,function(t){return O(e),k(K(2).filter.set(t.target.value))})(`keydown.escape`,function(){return O(e),k(K(2).filter.set(``))}),B()(),z(10,`div`,25),P(11,BH,2,1,`div`,26)(12,QH,3,2,`div`,27),B(),z(13,`div`,28)(14,`table`)(15,`thead`)(16,`tr`)(17,`th`,29),J(18,`Route`),B(),z(19,`th`,29),J(20,`File`),B(),z(21,`th`,29),J(22,`Data`),B(),z(23,`th`,29),J(24,`Route meta`),B()()(),z(25,`tbody`),I(26,sU,20,14,`tr`,30,OH,!1,uU,4,1,`tr`),B()()()}if(e&2){let e,t=K(2);M(4),R(`value`,t.testUrl()),M(),R(`disabled`,t.explaining()),M(),X(` `,t.explaining()?`Explaining…`:`Explain`,` `),M(3),R(`value`,t.filter()),M(2),F((e=t.explainError())?11:(e=t.explained())?12:-1,e),M(15),L(t.routeRows())}}function fU(e,t){if(e&1&&(z(0,`span`,31),J(1),B(),J(2)),e&2){let e=t.$implicit,n=t.$index,r=t.$count;M(),Y(e),M(),X(``,n===r-1?``:`, `,` `)}}function pU(e,t){if(e&1&&(z(0,`div`,48)(1,`strong`),J(2,`load() ran twice`),B(),J(3,` for `),I(4,fU,3,2,null,null,Og),J(6,` : once while server rendering, again in the browser. TransferState did not serve the server result. `),B()),e&2){let e=K(3);M(4),L(e.duplicates())}}function mU(e,t){if(e&1&&(z(0,`span`,31),J(1),B(),J(2)),e&2){let e=t.$implicit,n=t.$index,r=t.$count;M(),Y(e),M(),X(``,n===r-1?``:`, `,` `)}}function hU(e,t){if(e&1&&(z(0,`div`,48)(1,`strong`),J(2,`Server function read ran twice`),B(),J(3,`: `),I(4,mU,3,2,null,null,Og),J(6,` ran while server rendering, then again in the browser. The browser did not use the TransferState seed. `),B()),e&2){let e=K(3);M(4),L(e.refetchedFns())}}function gU(e,t){if(e&1){let e=W();z(0,`label`)(1,`input`,80),G(`change`,function(){let t=O(e).$implicit;return k(K(3).kind.set(t))}),B(),J(2),z(3,`span`,4),J(4),B()()}if(e&2){let e=t.$implicit,n=K(3);q(`on`,n.kind()===e),M(),R(`checked`,n.kind()===e),N(`data-kind`,e),M(),X(` `,n.kindLabel(e),` `),M(2),Y(n.kindCount(e))}}function _U(e,t){if(e&1&&J(0),e&2){let e=K(4);Z(` Showing the newest `,e.shownCount(),` of `,e.matchingCalls().length,`. `)}}function vU(e,t){e&1&&J(0),e&2&&X(` The dev server keeps only the newest `,K(4).maxServerCalls,` calls and drops older ones. `)}function yU(e,t){if(e&1&&(z(0,`p`,66),P(1,_U,1,2),P(2,vU,1,1),B()),e&2){let e=K(3);M(),F(e.shownCount()1?6:-1),M(2),Y(e.summary),M(2),L(e.items),M(5),X(` `,e.fix),M(2),Y(e.rule)}}function MW(e,t){if(e&1&&(z(0,`p`,4),J(1),B(),z(2,`ul`,113),I(3,jW,18,8,`li`,null,PH),B()),e&2){let e=K(3);M(),Z(` `,e.findings().length,` issue(s) in `,e.lintCards().length,` group(s). Each card says what is wrong, where, and how to fix it. `),M(2),L(e.lintCards())}}function NW(e,t){e&1&&(z(0,`div`,112)(1,`strong`),J(2,`No Analog problems found.`),B(),J(3,` Routes, server files, prerender config and content all check out. `),B())}function PW(e,t){e&1&&P(0,MW,5,2)(1,NW,4,0,`div`,112),e&2&&F(+!K(2).findings().length)}function FW(e,t){if(e&1){let e=W();z(0,`section`,7)(1,`div`,8)(2,`span`,9),J(3,`Analog`),B(),z(4,`span`,10),J(5),B()(),z(6,`div`,8)(7,`span`,9),J(8,`Pages`),B(),z(9,`span`,10),J(10),B()(),z(11,`div`,8)(12,`span`,9),J(13,`API routes`),B(),z(14,`span`,10),J(15),B()(),z(16,`div`,8)(17,`span`,9),J(18,`Server calls`),B(),z(19,`span`,10),J(20),B()(),z(21,`div`,8)(22,`span`,9),J(23,`Issues`),B(),z(24,`span`,10),J(25),B()(),P(26,RH,5,2,`div`,11),B(),z(27,`div`,12),G(`keydown`,function(t){return O(e),k(K().onKey(t))}),I(28,zH,4,7,`button`,13,DH),B(),z(30,`div`,14),P(31,dU,29,6)(32,YU,65,21)(33,yW,18,3)(34,TW,2,1)(35,PW,2,1),B()}if(e&2){let e,t,n=K();M(5),Y(n.project().version||`unknown`),M(5),Y(n.pageCount()),M(5),Y(n.project().api.length),M(5),Y(n.allCalls().length),M(),N(`data-tone`,n.lintTone()||`good`),M(4),Y(n.lintCount().errors+n.lintCount().warnings),M(),F((e=n.page())?26:-1,e),M(2),L(n.views()),M(2),R(`id`,`analog-panel-`+n.view()),N(`aria-labelledby`,`analog-tab-`+n.view()),M(),F((t=n.view())===`routes`?31:t===`server`?32:t===`render`?33:t===`content`?34:t===`lint`?35:-1)}}var IW={"scan-error":{title:`A folder could not be read`,summary:`Its files are missing from routes, API routes and lint results.`},"duplicate-url":{title:`Two files serve the same URL`,summary:`Only one of them is reachable; the other never renders.`},"sibling-params":{title:`Two dynamic pages in one folder`,summary:`Both are [param] pages at the same level, so the first one always wins.`},"missing-default-export":{title:`Page has no default export`,summary:`Analog needs the component as the default export, so the page renders nothing.`},"redirect-with-component":{title:`Redirect page also exports a component`,summary:`The redirect runs first, so the component never shows.`},"redirect-path-match":{title:`Redirect matches too much`,summary:`An empty-path redirect without pathMatch "full" catches every URL below it.`},"layout-without-outlet":{title:`Layout has no router-outlet`,summary:`The layout has child pages, but without they never render.`},"server-without-load":{title:`.server.ts without load or action`,summary:`The server file exports no load, action or server function, so Analog calls nothing.`},"orphan-server-file":{title:`.server.ts without a page`,summary:`No page file sits next to it, so its load never runs.`},"api-method-suffix":{title:`Unknown method suffix on an API file`,summary:`The suffix is not an HTTP method, so it becomes part of the URL.`},"duplicate-api-route":{title:`Two handlers for one API route`,summary:`Two files answer the same method and path.`},"api-outside-prefix":{title:`Server route outside the API prefix`,summary:`During vite dev only routes under the prefix reach Nitro.`},"prerender-unknown-route":{title:`Prerender entry matches no page`,summary:`prerender.routes lists a path that no page file serves.`},"prerender-missing-root":{title:`Home page is not prerendered`,summary:`static is on, but prerender.routes leaves out /.`},"content-frontmatter":{title:`Broken frontmatter`,summary:`The markdown frontmatter cannot be read.`},"duplicate-slug":{title:`Two posts share a slug`,summary:`injectContent picks one of them at random.`},"content-shadows-page":{title:`Markdown file takes over a page`,summary:`Files under src/content are routes too, so these URLs render the markdown file instead of the [param] page.`},"load-fetched-twice":{title:`load() runs twice`,summary:`These pages fetched their data while rendering on the server and again in the browser.`},"fn-fetched-twice":{title:`Server function read runs twice`,summary:`These reads ran while rendering on the server and again in the browser right after hydration.`},"restart-needed":{title:`New pages need a restart`,summary:`These page files exist, but the running router does not know them yet.`},"hydration-error":{title:`Hydration error`,summary:`The browser DOM did not match the server HTML.`},"api-not-found":{title:`API call failed with 404 or 405`,summary:`A request hit a path or method that no server route handles.`}},LW=200,RW=new Set([`missing-default-export`,`redirect-with-component`,`redirect-path-match`,`layout-without-outlet`,`server-without-load`,`orphan-server-file`,`load-fetched-twice`,`restart-needed`,`prerender-missing-root`]),zW={ssr:`SSR`,ssg:`Prerendered`,client:`Client only`,cached:`Cached`,redirect:`Redirect`},BW={all:`All`,page:`Pages`,load:`load()`,action:`Actions`,fn:`Server fn`,api:`API`},VW={success:`succeeded`,redirect:`redirected`,invalid:`validation errors`,error:`failed`},HW={success:`good`,redirect:`info`,invalid:`warn`,error:`bad`};function UW(e,t=0,n=[]){for(let r of e)n.push({route:r,depth:t}),UW(r.children,t+1,n);return n}var WW=class e{rpc=$(null);canCall=Q(()=>AE(this.rpc(),`analog`));callsOff=nE(`analog`);kinds=[`all`,`page`,`load`,`action`,`fn`,`api`];methods=[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`];methodOptions=this.methods.map(e=>({value:e,label:e}));view=j(`routes`);project=j(null);loadFailed=j(!1);state=j({});findings=j([]);renderRows=j([]);plan=j(null);filter=j(``);testUrl=j(``);explained=j(null);explainError=j(``);explaining=j(!1);kind=j(`all`);method=j(`GET`);apiPath=j(``);apiBody=j(``);confirmSend=j(!1);response=j(null);sending=j(!1);needsConfirm=Q(()=>this.method()!==`GET`&&!this.confirmSend());canSend=Q(()=>this.canCall()&&!this.sending()&&!this.needsConfirm());sendHintId=Q(()=>this.canCall()?this.needsConfirm()?`analog-confirm-hint`:null:`analog-calls-off`);unsubscribe=null;refreshTimer;refreshRun=0;destroyRef=E(ws);host=E(Nl);hostPageId=uE();page=Q(()=>{let e=this.state().pages??[];return(this.hostPageId?e.find(e=>e.pageId===this.hostPageId):e[0])??null});openFiles=Q(()=>new Set((this.page()?.chain??[]).map(e=>e.file)));allCalls=Q(()=>this.state().calls??[]);maxServerCalls=LW;callQuery=j(``);failedOnly=j(!1);callsMessage=j(``);callFiltered=Q(()=>!!this.callQuery().trim()||this.failedOnly());matchingCalls=Q(()=>{let e=this.kind(),t=this.callQuery().trim().toLowerCase(),n=this.failedOnly();return this.allCalls().filter(r=>(e===`all`||r.kind===e)&&(!n||this.isFailed(r))&&(!t||this.callText(r).includes(t)))});calls=Q(()=>this.matchingCalls().slice(-150).reverse());shownCount=Q(()=>this.calls().length);serverFull=Q(()=>this.allCalls().length>=LW);allRoutes=Q(()=>UW(this.project()?.routes??[]));pageCount=Q(()=>this.allRoutes().filter(e=>e.route.file&&e.route.kind!==`layout`).length);routeRows=Q(()=>{let e=this.filter().trim().toLowerCase();return e?this.allRoutes().filter(t=>t.route.fullPath.toLowerCase().includes(e)||!!t.route.file?.toLowerCase().includes(e)):this.allRoutes()});serverFns=Q(()=>this.project()?.serverFns??[]);fnById=Q(()=>new Map(this.serverFns().map(e=>[e.id,e])));refetchedFns=Q(()=>Array.from(new Set((this.state().refetches??[]).map(e=>this.fnById().get(e.id)?.name??e.id))));duplicates=Q(()=>Array.from(new Set((this.state().duplicates??[]).map(e=>e.route))));modeCounts=Q(()=>[`ssr`,`ssg`,`cached`,`client`,`redirect`].map(e=>({mode:e,label:zW[e],count:this.renderRows().filter(t=>t.mode===e).length})).filter(e=>e.count));lintCards=Q(()=>{let e={error:0,warning:1,info:2},t=new Map;for(let e of this.findings()){let n=t.get(e.rule);if(!n){let r=IW[e.rule];n={rule:e.rule,severity:e.severity,title:r?.title??e.rule,summary:r?.summary??e.message,fix:e.fix,items:[]},t.set(e.rule,n)}let r=RW.has(e.rule)||e.message===n.summary?void 0:e.message;n.items.some(t=>t.file===e.file&&t.path===e.path&&t.message===r)||n.items.push({file:e.file,path:e.path,message:r})}return Array.from(t.values()).sort((t,n)=>e[t.severity]-e[n.severity])});lintCount=Q(()=>{let e=this.findings();return{errors:e.filter(e=>e.severity===`error`).length,warnings:e.filter(e=>e.severity===`warning`).length}});lintTone=Q(()=>{let{errors:e,warnings:t}=this.lintCount();return e?`bad`:t?`warn`:``});views=Q(()=>{let{errors:e,warnings:t}=this.lintCount();return[{id:`routes`,label:`Routes`,count:this.pageCount(),tone:``},{id:`server`,label:`Server`,count:this.allCalls().length,tone:``},{id:`render`,label:`Render`,count:this.renderRows().length,tone:``},{id:`content`,label:`Content`,count:this.project()?.content.length??0,tone:``},{id:`lint`,label:`Lint`,count:e+t,tone:this.lintTone()}]});constructor(){dc(()=>{let e=this.rpc();e&&jv(()=>void this.load(e))}),dc(()=>{let e=this.view();this.state(),jv(()=>this.scheduleRefresh(e))}),this.destroyRef.onDestroy(()=>{this.unsubscribe?.(),clearTimeout(this.refreshTimer)})}async load(e){let t=await hE(e,`analog-project`);if(!this.destroyRef.destroyed){this.project.set(t),this.loadFailed.set(t===null);try{let t=await e.scope(`pangular`).rpc.sharedState(`analog`);if(this.destroyRef.destroyed)return;let n=e=>this.state.set(e??{});n(t.value()),this.unsubscribe?.(),this.unsubscribe=t.on(`updated`,n)}catch{this.state.set({})}this.destroyRef.destroyed||await this.refresh(this.view())}}retry(){let e=this.rpc();e&&(this.loadFailed.set(!1),this.load(e))}scheduleRefresh(e){clearTimeout(this.refreshTimer),this.refreshTimer=setTimeout(()=>void this.refresh(e),300)}async refresh(e){let t=this.rpc();if(!t)return;let n=++this.refreshRun,[r,i]=await Promise.all([hE(t,`analog-lint`,this.hostPageId??void 0),hE(t,`analog-render`)]);if(n===this.refreshRun&&(this.findings.set(r??[]),this.renderRows.set(i?.rows??[]),this.plan.set(i?.plan??null),e===`routes`||e===`content`||this.project()===null)){let e=await hE(t,`analog-project`);e&&n===this.refreshRun&&(this.project.set(e),this.loadFailed.set(!1))}}isOpen(e){return!!e.file&&this.openFiles().has(e.file)}kindText(e){return e.catchAll?e.catchAll===`optional`?`optional catch-all`:`catch-all`:e.kind===`implicit`?`folder`:e.kind}serverExports(e){return(e.serverExports??[]).filter(e=>e===`load`||e===`action`)}short(e){return e?.replace(/^\/src\/app\//,``).replace(/^\//,``)}dir(e){let t=this.short(e)??e;return t.includes(`/`)?t.slice(0,t.lastIndexOf(`/`)+1):``}base(e){return e.slice(e.lastIndexOf(`/`)+1)}paramList(e){return Object.entries(e)}kindLabel(e){return BW[e]}kindCount(e){return e===`all`?this.allCalls().length:this.allCalls().filter(t=>t.kind===e).length}modeLabel(e){return zW[e]}mismatch(e){return!e.last?.render||e.mode===`redirect`?!1:e.mode===`client`?e.last.render!==`client`:e.last.render===`client`}fnOf(e){return e.kind===`fn`&&e.route?this.fnById().get(e.route):void 0}fnCalls(e){return this.allCalls().filter(t=>t.kind===`fn`&&t.route===e).length}outcomeLabel(e){return VW[e]}outcomeTone(e){return HW[e]}statusClass(e){return e>=500||e===0?`bad`:e>=400?`warn`:`good`}tone(e){return e===`error`?`bad`:e===`warning`?`warn`:`info`}shadowed(e){return this.findings().find(t=>t.rule===`content-shadows-page`&&t.file===e)?.relatedFile}contentUrl(e){return this.allRoutes().find(t=>t.route.file===e)?.route.fullPath}pretty(e){try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}time=$D;tryApi(e){this.method.set(e.method===`ANY`?`GET`:e.method),this.apiPath.set(e.path.replace(/:(\w+)/g,`1`).replace(`**`,`x`)),this.response.set(null),queueMicrotask(()=>document.getElementById(`api-path`)?.focus())}isFailed(e){return!e.status||e.status>=400||e.outcome===`error`}callText(e){let t=this.fnOf(e);return[e.url,e.route,t?.name,t?.file].filter(Boolean).join(` `).toLowerCase()}clearCallFilters(){this.callQuery.set(``),this.failedOnly.set(!1),this.kind.set(`all`),queueMicrotask(()=>this.host.nativeElement.querySelector(`#analog-call-search`)?.focus())}async clearCalls(){let e=this.rpc();try{if(!e)throw Error(`No devtools server`);await mE(e,`analog-clear-calls`),this.callsMessage.set(`Calls cleared.`),queueMicrotask(()=>this.host.nativeElement.querySelector(`input[name="analog-kind"]:checked`)?.focus())}catch{this.callsMessage.set(`Could not clear the calls.`)}}async explain(){let e=this.testUrl().trim();if(!e){this.explained.set(null),this.explainError.set(`Type a URL to explain, for example /products/42.`);return}this.explaining.set(!0),this.explainError.set(``);try{let t=await mE(this.rpc(),`analog-explain-url`,e);if(!t)throw Error(`The devtools server did not answer`);this.explained.set({url:e,match:t})}catch(t){let n=String(t?.message||`The devtools server did not answer`);this.explained.set(null),this.explainError.set(`Could not explain ${e}. ${n.replace(/\.?$/,`.`)}`)}finally{this.explaining.set(!1)}}async send(){let e=this.apiPath().trim();if(!e||this.sending()||this.needsConfirm())return;let t;if(this.method()!==`GET`&&this.apiBody().trim())try{t=JSON.parse(this.apiBody())}catch{this.response.set({error:`The body is not valid JSON.`});return}this.response.set(null),this.sending.set(!0);try{let n=await hE(this.rpc(),`analog-call-api`,{method:this.method(),path:e,body:t,confirm:this.confirmSend()});this.response.set(n??{error:`No answer from the devtools server.`})}finally{this.sending.set(!1)}}onKey(e){let t=this.views().map(e=>e.id),n=t.indexOf(this.view()),r=n;if(e.key===`ArrowRight`)r=(n+1)%t.length;else if(e.key===`ArrowLeft`)r=(n-1+t.length)%t.length;else if(e.key===`Home`)r=0;else if(e.key===`End`)r=t.length-1;else return;e.preventDefault(),this.view.set(t[r]);let i=e.currentTarget;queueMicrotask(()=>i.querySelector(`#analog-tab-${t[r]}`)?.focus())}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-analog-inspector`]],inputs:{rpc:[1,`rpc`]},decls:4,vars:1,consts:[[`role`,`alert`,1,`empty`],[`role`,`status`,1,`loading`],[1,`empty`],[1,`empty-title`],[1,`muted`],[`type`,`button`,1,`btn`,3,`click`],[`aria-hidden`,`true`,1,`spinner`],[`aria-label`,`Analog summary`,1,`summary`],[1,`stat`],[1,`label`],[1,`value`],[1,`stat`,`wide`],[`role`,`tablist`,`aria-label`,`Analog views`,1,`tabs`,3,`keydown`],[`type`,`button`,`role`,`tab`,3,`id`],[`role`,`tabpanel`,1,`panel`,3,`id`],[1,`value`,`mono`,3,`title`],[`type`,`button`,`role`,`tab`,3,`click`,`id`],[1,`count`],[1,`toolbar`],[1,`inline`,`explain`,3,`submit`],[`for`,`analog-url`],[`id`,`analog-url`,`type`,`text`,`placeholder`,`/products/42`,1,`field`,`grow`,`mono`,3,`input`,`value`],[`type`,`submit`,1,`btn`,`primary`,3,`disabled`],[`for`,`route-filter`,1,`sr-only`],[`id`,`route-filter`,`type`,`search`,`placeholder`,`Filter by path or file`,1,`field`,`filter`,3,`input`,`keydown.escape`,`value`],[`role`,`status`,1,`explain-result`],[`data-tone`,`bad`,1,`callout`],[1,`callout`],[`role`,`region`,`aria-label`,`File routes`,`tabindex`,`0`,1,`table-wrap`],[`scope`,`col`],[3,`open`,`dim`],[1,`mono`],[1,`chain`],[1,`chips`],[1,`mono`,3,`file`],[1,`pill`],[1,`chip`,`mono`],[1,`plain`],[1,`route`],[`aria-hidden`,`true`,1,`guide`],[1,`mono`,`path`],[1,`pill`,`live`],[1,`file`,3,`file`],[1,`meta`],[`data-kind`,`load`,1,`pill`],[1,`chip`],[1,`dir`],[`colspan`,`4`,1,`empty-row`],[`data-tone`,`warn`,`role`,`note`,1,`callout`],[`id`,`analog-calls-heading`],[1,`calls-bar`],[1,`segmented`],[1,`sr-only`],[3,`on`],[1,`calls-actions`],[`type`,`button`,1,`btn`,`ghost`,3,`click`,`disabled`],[`role`,`status`,1,`calls-message`],[`role`,`group`,`aria-label`,`Filter the server calls`,1,`call-filters`],[1,`search`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`search-icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`id`,`analog-call-search`,`type`,`search`,`placeholder`,`Find a URL, path or function…`,`aria-label`,`Find a URL, path or function`,`autocomplete`,`off`,`spellcheck`,`false`,1,`field`,3,`input`,`keydown.escape`,`value`],[1,`check`],[`type`,`checkbox`,3,`change`,`checked`],[`aria-live`,`polite`,1,`total`],[1,`note`],[`role`,`region`,`aria-label`,`Server calls`,`tabindex`,`0`,1,`table-wrap`],[`role`,`status`,1,`empty-box`,`no-match`],[1,`empty-box`],[`role`,`region`,`aria-label`,`API routes`,`tabindex`,`0`,1,`table-wrap`],[1,`card`,`playground`,3,`submit`],[1,`row`],[`ariaLabel`,`Method`,1,`method-select`,3,`valueChange`,`options`,`value`],[`for`,`api-path`,1,`sr-only`],[`id`,`api-path`,`type`,`text`,`placeholder`,`/api/v1/products`,1,`field`,`grow`,`mono`,3,`input`,`value`],[`id`,`analog-calls-off`,1,`muted`],[`id`,`analog-confirm-hint`,1,`muted`],[`role`,`status`,1,`muted`],[`role`,`status`,1,`response`],[`type`,`radio`,`name`,`analog-kind`,1,`sr-only`,3,`change`,`checked`],[`scope`,`col`,1,`num`],[1,`muted`,`nowrap`],[1,`request`],[1,`method`],[1,`mono`,`url`],[1,`status`],[1,`num`,`nowrap`],[1,`mono`,`muted`,3,`file`],[1,`code`],[1,`empty-lead`],[1,`empty-actions`],[`type`,`button`,1,`btn`,`ghost`,3,`click`],[1,`actions`],[`role`,`region`,`aria-label`,`Server functions`,`tabindex`,`0`,1,`table-wrap`],[1,`num`,`tnum`],[`for`,`api-body`],[`id`,`api-body`,`rows`,`3`,`placeholder`,`{"name": "Ada"}`,1,`field`,`mono`,3,`input`,`value`],[1,`check`,`confirm-send`],[`data-status`,`bad`,1,`status`],[`role`,`region`,`aria-label`,`Render modes`,`tabindex`,`0`,1,`table-wrap`],[1,`card`],[1,`muted`,`small`],[1,`muted`,`small`,`tnum`],[`data-tone`,`warn`,1,`pill`],[1,`facts`],[1,`tnum`],[`data-tone`,`warn`,1,`chip`,`mono`],[`data-tone`,`bad`,1,`chip`,`mono`],[`role`,`region`,`aria-label`,`Content files`,`tabindex`,`0`,1,`table-wrap`],[1,`muted`,`nowrap`,`tnum`],[`data-tone`,`bad`,1,`pill`],[`data-tone`,`good`,`role`,`status`,1,`callout`],[1,`findings`],[1,`finding-head`],[1,`finding-title`],[1,`where`],[1,`fix`],[1,`rule`,`mono`],[1,`detail`]],template:function(e,t){e&1&&P(0,FH,7,0,`div`,0)(1,IH,4,0,`div`,1)(2,LH,14,0,`div`,2)(3,FW,36,10),e&2&&F(t.project()===null&&t.loadFailed()?0:t.project()===null?1:t.project().analog?3:2)},dependencies:[GD,wO],styles:[`@charset "UTF-8"; [_nghost-%COMP%] { --%NS%good: var(--%NS%ok); --%NS%bad: var(--%NS%danger); @@ -11844,7 +11879,7 @@ h2[_ngcontent-%COMP%] { color: var(--%NS%text-strong); font-size: 15px; font-weight: 600; -}`]})},CW=(e,t)=>t.id,wW=(e,t)=>t.id+t.kind,TW=(e,t)=>t.side+t.id,EW=(e,t)=>t.key;function DW(e,t){e&1&&(z(0,`div`,0),V(1,`span`,67),z(2,`span`),J(3,`Loading…`),B()())}function OW(e,t){if(e&1){let e=W();z(0,`div`,1)(1,`strong`),J(2,`Could not reach the devtools server.`),B(),z(3,`span`),J(4,`Check that the app's dev server is running with the devtools plugin.`),B(),z(5,`button`,68),G(`click`,function(){return O(e),k(K().retry())}),J(6,`Try again`),B()()}}function kW(e,t){e&1&&(z(0,`span`,81),J(1,`this page`),B())}function AW(e,t){e&1&&(z(0,`span`,82),J(1,`overridden`),B())}function jW(e,t){e&1&&(z(0,`span`,83),J(1,`aborted`),B())}function MW(e,t){if(e&1){let e=W();z(0,`tr`,73),G(`click`,function(){let t=O(e).$implicit;return k(K(2).selectedRequestId.set(t.id))}),z(1,`td`,74)(2,`button`,75)(3,`span`,76),J(4),B(),J(5),B()(),z(6,`td`,77),V(7,`span`,78),J(8),B(),z(9,`td`),J(10),B(),z(11,`td`,79),J(12),B(),z(13,`td`,79),J(14),B(),z(15,`td`)(16,`div`,80),P(17,kW,2,0,`span`,81),P(18,AW,2,0,`span`,82),P(19,jW,2,0,`span`,83),B()()()}if(e&2){let e=t.$implicit,n=K(2);q(`selected`,n.selectedRequest()?.id===e.id),M(2),R(`title`,e.url),N(`aria-pressed`,n.selectedRequest()?.id===e.id),M(2),Y(e.method),M(),X(` `,e.url,` `),M(),q(`ok`,n.statusTone(e.status)===`ok`)(`redirect`,n.statusTone(e.status)===`redirect`)(`bad`,n.statusTone(e.status)===`bad`),M(2),X(``,e.status,` `),M(2),Y(n.renderModeLabel(e.renderMode)),M(2),X(``,e.renderMs,` ms`),M(2),Z(``,e.fetches,` (`,e.fetchMs,` ms)`),M(3),F(e.id===n.selected()?.ssrRequestId?17:-1),M(),F(e.overrides?.length?18:-1),M(),F(e.aborted?19:-1)}}function NW(e,t){e&1&&(z(0,`p`,56),J(1),z(2,`code`),J(3,`ssrMiddleware`),B(),J(4,` saw it, so the render mode can't be read and TransferState edits can't apply. Mount `),z(5,`code`),J(6,`ssrMiddleware`),B(),J(7,` after `),z(8,`code`),J(9,`compression()`),B(),J(10,`. `),B()),e&2&&(M(),X(` The body was already compressed (`,t,`) when `))}function PW(e,t){if(e&1&&(z(0,`span`,88),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.note)}}function FW(e,t){if(e&1&&(z(0,`p`,87)(1,`span`,82),J(2),B(),z(3,`span`),J(4),B(),P(5,PW,2,1,`span`,88),B()),e&2){let e=t.$implicit,n=K(4);M(2),Y(n.overrideLabel(e.kind)),M(2),Y(e.applied?`applied`:`not applied`),M(),F(e.note?5:-1)}}function IW(e,t){if(e&1&&(z(0,`h3`),J(1,`Overrides from the panel`),B(),z(2,`p`,56),J(3,` This response was changed on purpose, so it is not what the app sends on its own. `),B(),I(4,FW,6,3,`p`,87,wW)),e&2){let e=K();M(4),L(e.overrides)}}function LW(e,t){if(e&1&&(J(0,` to `),z(1,`code`),J(2),B()),e&2){let e=K().$implicit;M(2),Y(e.finalUrl)}}function RW(e,t){if(e&1&&(z(0,`div`)(1,`dt`),J(2,`Guards`),B(),z(3,`dd`),J(4),B()()),e&2){let e=K().$implicit,t=K(4);M(3),q(`bad`,t.guardVerdict(e)===`rejected`),M(),Z(` `,t.msLabel(e.guards.ms),``,t.guardVerdict(e)?`, `+t.guardVerdict(e):``,` `)}}function zW(e,t){if(e&1&&(z(0,`div`)(1,`dt`),J(2,`Resolvers`),B(),z(3,`dd`),J(4),B()()),e&2){let e=K().$implicit,t=K(4);M(4),Y(t.msLabel(e.resolvers.ms))}}function BW(e,t){if(e&1&&(z(0,`div`)(1,`dt`),J(2,`Navigation total`),B(),z(3,`dd`),J(4),B()()),e&2){let e=K().$implicit;M(4),X(``,e.durationMs,` ms`)}}function VW(e,t){if(e&1&&(z(0,`p`,56),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.reason)}}function HW(e,t){if(e&1&&(z(0,`dl`,89)(1,`div`)(2,`dt`),J(3,`Navigation`),B(),z(4,`dd`)(5,`code`),J(6),B(),P(7,LW,3,1),J(8),B()(),P(9,RW,5,4,`div`),P(10,zW,5,1,`div`),P(11,BW,5,1,`div`),B(),P(12,VW,2,1,`p`,56)),e&2){let e=t.$implicit;M(6),Y(e.url),M(),F(e.finalUrl?7:-1),M(),X(` (`,e.outcome,`) `),M(),F(e.guards?9:-1),M(),F(e.resolvers?10:-1),M(),F(e.durationMs===void 0?-1:11),M(),F(e.reason?12:-1)}}function UW(e,t){if(e&1&&(z(0,`h3`),J(1,`Router during the render`),B(),I(2,HW,13,7,null,null,Cg)),e&2){let e=K();M(2),L(e.navigations)}}function WW(e,t){e&1&&(z(0,`span`,81),J(1,`cached`),B())}function GW(e,t){if(e&1&&(z(0,`span`,91),J(1,`not cached`),B()),e&2){let e=K().$implicit;R(`title`,K(3).skipText(e.cacheSkip))}}function KW(e,t){if(e&1&&(z(0,`p`,92),J(1),B()),e&2){let e=K().$implicit,t=K(3);M(),X(`Not cached: `,t.skipText(e.cacheSkip),`.`)}}function qW(e,t){if(e&1&&(z(0,`p`,87)(1,`span`,76),J(2),B(),z(3,`span`,90),J(4),B(),z(5,`span`,77),J(6),B(),z(7,`span`,88),J(8),B(),P(9,WW,2,0,`span`,81)(10,GW,2,1,`span`,91),B(),P(11,KW,2,1,`p`,92)),e&2){let e=t.$implicit,n=K(3);M(2),Y(e.method),M(),R(`title`,e.url),M(),Y(e.url),M(),q(`ok`,n.callTone(e)===`ok`)(`bad`,n.callTone(e)===`bad`),M(),Y(n.statusLabel(e)),M(2),X(``,e.durationMs,` ms`),M(),F(e.cacheStored?9:e.cacheSkip?10:-1),M(2),F(!e.cacheStored&&e.cacheSkip?11:-1)}}function JW(e,t){e&1&&(z(0,`p`,56),J(1,`The render made no HttpClient calls.`),B())}function YW(e,t){e&1&&(z(0,`p`,92),J(1),B()),e&2&&(M(),X(`Why: `,t,`.`))}function XW(e,t){if(e&1&&(z(0,`p`,87)(1,`span`,76),J(2),B(),z(3,`span`,90),J(4),B(),z(5,`span`,83),J(6,`cache miss`),B()(),P(7,YW,2,1,`p`,92)),e&2){let e,n=t.$implicit,r=K(4);M(2),Y(n.method),M(),R(`title`,n.url),M(),Y(n.url),M(3),F((e=r.refetchReason(n))?7:-1,e)}}function ZW(e,t){if(e&1&&(z(0,`h3`),J(1),B(),z(2,`p`,56),J(3,` These calls ran on the server and again after hydration instead of reading the transfer cache. `),B(),I(4,XW,8,4,null,null,CW)),e&2){let e=K(3);M(),X(`Fetched again in the browser (`,e.refetched().length,`)`),M(3),L(e.refetched())}}function QW(e,t){e&1&&(z(0,`p`,86),J(1,`No server call ran again in the browser.`),B())}function $W(e,t){if(e&1&&(z(0,`div`,72)(1,`h3`,84),J(2),z(3,`code`),J(4),B()(),z(5,`dl`,85)(6,`div`)(7,`dt`),J(8,`Request id`),B(),z(9,`dd`)(10,`code`),J(11),B()()(),z(12,`div`)(13,`dt`),J(14,`Render`),B(),z(15,`dd`),J(16),B()(),z(17,`div`)(18,`dt`),J(19,`Total`),B(),z(20,`dd`),J(21),B()(),z(22,`div`)(23,`dt`),J(24,`Sent`),B(),z(25,`dd`),J(26),B()(),z(27,`div`)(28,`dt`),J(29,`Browser page`),B(),z(30,`dd`),J(31),B()()(),P(32,NW,11,1,`p`,56),P(33,IW,6,0),P(34,UW,4,0),z(35,`h3`),J(36),B(),I(37,qW,12,11,null,null,CW,!1,JW,2,0,`p`,56),P(40,ZW,6,1)(41,QW,2,0,`p`,86),B()),e&2){let e,n=t,r=K(2);M(2),X(` `,n.method,` `),M(2),Y(n.url),M(7),Y(n.id),M(5),X(``,n.renderMs,` ms`),M(5),X(``,n.durationMs,` ms`),M(5),X(``,n.bytes,` B`),M(5),Y(r.requestPage()?.title||r.requestPage()?.url||`not connected`),M(),F((e=r.compressedWith(n))?32:-1,e),M(),F(n.overrides?.length?33:-1),M(),F(n.navigations?.length?34:-1),M(2),X(`Server calls (`,r.requestCalls().length,`)`),M(),L(r.requestCalls()),M(3),F(r.refetched().length?40:r.requestPage()&&r.requestCalls().length?41:-1)}}function eG(e,t){if(e&1&&(z(0,`div`,26)(1,`table`)(2,`thead`)(3,`tr`)(4,`th`,69),J(5,`Request`),B(),z(6,`th`,69),J(7,`Status`),B(),z(8,`th`,69),J(9,`Render mode`),B(),z(10,`th`,70),J(11,`Render`),B(),z(12,`th`,70),J(13,`Server calls`),B(),z(14,`th`,69),J(15,`Notes`),B()()(),z(16,`tbody`),I(17,MW,20,20,`tr`,71,CW),B()()(),P(19,$W,42,13,`div`,72)),e&2){let e,t=K();M(17),L(t.requests()),M(2),F((e=t.selectedRequest())?19:-1,e)}}function tG(e,t){e&1&&(z(0,`div`,11)(1,`p`),J(2,`No SSR requests traced.`),B(),z(3,`p`,56),J(4,` Add `),z(5,`code`),J(6,`app.use(devtools.ssrMiddleware)`),B(),J(7,` before the Angular handler in `),z(8,`code`),J(9,`server.ts`),B(),J(10,`, then load a server rendered page. `),B()())}function nG(e,t){e&1&&(z(0,`span`,94),J(1,`transfer cache`),B())}function rG(e,t){if(e&1&&(z(0,`span`,94),J(1),B()),e&2){let e=K().$implicit;M(),X(`delayed `,e.delayMs,` ms`)}}function iG(e,t){e&1&&(z(0,`span`,82),J(1,`mocked`),B())}function aG(e,t){e&1&&(z(0,`span`,83),J(1,`faulted`),B())}function oG(e,t){if(e&1&&(z(0,`span`,97),J(1,`rule `),z(2,`code`),J(3),B()()),e&2){let e=t;R(`title`,`Matched rule: `+e),M(3),Y(e)}}function sG(e,t){if(e&1){let e=W();z(0,`tr`,73),G(`click`,function(){let t=O(e).$implicit;return k(K(2).openCall(t.id))}),z(1,`td`)(2,`span`,94),J(3),B()(),z(4,`td`,76),J(5),B(),z(6,`td`,74)(7,`button`,95),J(8),B()(),z(9,`td`,96),J(10),B(),z(11,`td`,77),V(12,`span`,78),J(13),B(),z(14,`td`,79),J(15),B(),z(16,`td`)(17,`div`,80),P(18,nG,2,0,`span`,94),P(19,rG,2,1,`span`,94),P(20,iG,2,0,`span`,82),P(21,aG,2,0,`span`,83),P(22,oG,4,2,`span`,97),B()()()}if(e&2){let e,n=t.$implicit,r=K(2);q(`selected`,r.selectedCall()?.id===n.id),M(2),q(`server`,n.side===`server`),M(),Y(n.side===`server`?`SSR`:`Client`),M(2),Y(n.method),M(2),R(`title`,n.url),N(`data-call-id`,n.id)(`aria-pressed`,r.selectedCall()?.id===n.id)(`aria-controls`,r.selectedCall()?`call-preview`:null),M(),X(` `,n.url,` `),M(),R(`title`,n.pageUrl??``),M(),X(` `,n.pageUrl??``,` `),M(),q(`ok`,r.callTone(n)===`ok`)(`redirect`,r.callTone(n)===`redirect`)(`bad`,r.callTone(n)===`bad`),M(2),X(``,r.statusLabel(n),` `),M(2),X(``,n.durationMs,` ms`),M(3),F(n.cacheHit?18:-1),M(),F(n.delayMs?19:-1),M(),F(n.mocked?20:-1),M(),F(n.faulted?21:-1),M(),F((e=r.rulePatternOf(n))?22:-1,e)}}function cG(e,t){if(e&1&&(z(0,`div`,26)(1,`table`)(2,`thead`)(3,`tr`)(4,`th`,69),J(5,`Side`),B(),z(6,`th`,69),J(7,`Method`),B(),z(8,`th`,69),J(9,`URL`),B(),z(10,`th`,69),J(11,`Page`),B(),z(12,`th`,69),J(13,`Status`),B(),z(14,`th`,70),J(15,`Time`),B(),z(16,`th`,69),J(17,`Notes`),B()()(),z(18,`tbody`,93),I(19,sG,23,26,`tr`,71,TW),B()()()),e&2){let e=K();M(19),L(e.visibleCalls())}}function lG(e,t){e&1&&J(0),e&2&&X(` Nothing matches “`,K(2).callQuery().trim(),`” with these filters. `)}function uG(e,t){e&1&&J(0),e&2&&X(` None of the `,K(2).timeline().length,` requests fit these filters. `)}function dG(e,t){if(e&1){let e=W();z(0,`div`,27)(1,`p`),J(2,`No requests match.`),B(),z(3,`p`,56),P(4,lG,1,1)(5,uG,1,1),B(),z(6,`div`,98)(7,`button`,68),G(`click`,function(){return O(e),k(K().clearCallFilters())}),J(8,`Clear filters`),B()()()}if(e&2){let e=K();M(4),F(e.callQuery().trim()?4:5)}}function fG(e,t){e&1&&(z(0,`div`,11)(1,`p`),J(2,`No requests yet.`),B(),z(3,`p`,56),J(4,` Add `),z(5,`code`),J(6,`withPangular()`),B(),J(7,` to `),z(8,`code`),J(9,`provideHttpClient`),B(),J(10,`, then load a page of the app. `),B()())}function pG(e,t){if(e&1){let e=W();z(0,`button`,105),G(`click`,function(){O(e);let t=K();return k(K().copyPreview(t))}),J(1,` Copy `),B()}if(e&2){let e=K();N(`aria-label`,`Copy the response of `+e.method+` `+e.url)}}function mG(e,t){e&1&&(z(0,`p`,107),J(1,` Matched rule `),z(2,`code`),J(3),B()()),e&2&&(M(3),Y(t))}function hG(e,t){if(e&1){let e=W();z(0,`div`,99),G(`keydown.escape`,function(){return O(e),k(K().closePreview())}),z(1,`div`,100)(2,`h3`,101),J(3,`Response preview`),B(),z(4,`div`,102),P(5,pG,2,1,`button`,103),z(6,`button`,104),G(`click`,function(){let t=O(e);return k(K().mockCall(t))}),J(7,` Mock this request `),B(),z(8,`button`,105),G(`click`,function(){return O(e),k(K().closePreview())}),J(9,`Close`),B()()(),z(10,`p`,106)(11,`span`,76),J(12),B(),z(13,`span`,77),J(14),B(),z(15,`span`,90),J(16),B()(),P(17,mG,4,1,`p`,107),z(18,`pre`,108),J(19),B()()}if(e&2){let e,n=t,r=K();M(5),F(!n.error&&n.preview?5:-1),M(),R(`disabled`,!r.canWrite()),N(`aria-describedby`,r.canWrite()?null:`http-writes-off`),M(6),Y(n.method),M(),q(`ok`,r.callTone(n)===`ok`)(`redirect`,r.callTone(n)===`redirect`)(`bad`,r.callTone(n)===`bad`),M(),Y(r.statusLabel(n)),M(),R(`title`,n.url),M(),Y(n.url),M(),F((e=r.rulePatternOf(n))?17:-1,e),M(),q(`error`,!!n.error&&!n.cancelled),N(`aria-label`,n.error?`Response error`:`Response body`),M(),Y(n.error??r.previewText(n)??`(no body)`)}}function gG(e,t){if(e&1&&(z(0,`p`,31),J(1),B()),e&2){let e=K();M(),Y(e.writesOff)}}function _G(e,t){e&1&&(z(0,`p`,46),J(1,` SSR mocks are not transferred to the client: the browser requests the URL again and gets the real response unless the rule also applies on the client. `),B())}function vG(e,t){e&1&&(z(0,`span`),J(1,`passthrough`),B())}function yG(e,t){if(e&1&&(z(0,`span`,77),J(1),B()),e&2){let e=K().$implicit,t=K();q(`ok`,t.statusTone(e.status)===`ok`)(`redirect`,t.statusTone(e.status)===`redirect`)(`bad`,t.statusTone(e.status)===`bad`),M(),Y(e.status)}}function bG(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),X(``,e.delayMs,` ms`)}}function xG(e,t){e&1&&(z(0,`span`),J(1,`mock body`),B())}function SG(e,t){e&1&&(z(0,`p`,116),J(1,` The SSR mock is not written to TransferState, so the browser requests this URL again. `),B())}function CG(e,t){if(e&1){let e=W();z(0,`li`)(1,`label`,109)(2,`input`,110),G(`change`,function(){let t=O(e).$implicit;return k(K().toggleRule(t.id))}),B(),z(3,`code`,111)(4,`span`,112),J(5),B(),J(6),B()(),z(7,`button`,113),G(`click`,function(){let t=O(e).$implicit;return k(K().removeRule(t.id))}),J(8,` Remove `),B(),z(9,`span`,114)(10,`span`),J(11),B(),P(12,vG,2,0,`span`)(13,yG,2,7,`span`,115),P(14,bG,2,1,`span`),P(15,xG,2,0,`span`),B(),P(16,SG,2,0,`p`,116),B()}if(e&2){let e=t.$implicit,n=K();q(`off`,!e.enabled),M(2),R(`checked`,e.enabled)(`disabled`,!n.canWrite()),N(`aria-describedby`,n.canWrite()?null:`http-writes-off`)(`aria-label`,`Enable rule for `+e.pattern),M(),R(`title`,e.pattern),M(2),Y(e.method||`ANY`),M(),X(` `,e.pattern),M(),R(`disabled`,!n.canWrite()),N(`aria-describedby`,n.canWrite()?null:`http-writes-off`)(`aria-label`,`Remove rule for `+e.pattern),M(4),Y(n.targetLabel(e.target)),M(),F(e.status===void 0?12:13),M(2),F(e.delayMs?14:-1),M(),F(e.body?15:-1),M(),F(n.mocksOnServer(e)?16:-1)}}function wG(e,t){e&1&&(z(0,`li`,53),J(1,`No rules. SSR rules apply on the next page load.`),B())}function TG(e,t){if(e&1){let e=W();z(0,`p`,61),J(1,` Throws while the server renders, so it needs `),z(2,`code`),J(3,`providePangularHttp()`),B(),J(4,` and a page the engine renders. Prerendered files served as static files skip it. `),B(),z(5,`label`),J(6,` Error message `),z(7,`input`,117),G(`input`,function(t){return O(e),k(K().patchOverride(`message`,t))}),B()()}if(e&2){let e=K();M(7),R(`value`,e.overrideDraft().message)}}function EG(e,t){e&1&&J(0,` For a cached HTTP response this is the whole cache record, not only the response body. `)}function DG(e,t){e&1&&(z(0,`p`,121),J(1,` Filled in from the TransferState payload. The value starts empty because the panel only shows a redacted copy, so type the JSON the server should send. `),P(2,EG,1,0),B()),e&2&&(M(2),F(t===`http`?2:-1))}function OG(e,t){if(e&1){let e=W();z(0,`label`),J(1,` TransferState key `),z(2,`input`,118),G(`input`,function(t){return O(e),k(K().patchOverride(`key`,t))}),B()(),z(3,`label`)(4,`span`),J(5,`New JSON value `),z(6,`span`,33),J(7,`(empty removes the entry)`),B()(),z(8,`textarea`,119),G(`input`,function(t){return O(e),k(K().patchOverride(`value`,t))}),B()(),z(9,`p`,120),J(10),B(),P(11,DG,3,1,`p`,121)}if(e&2){let e,t=K();M(2),R(`value`,t.overrideDraft().key),M(6),R(`value`,t.overrideDraft().value),N(`aria-invalid`,t.overrideValueError()?`true`:null)(`aria-describedby`,t.overrideFromPayload()?`override-value-error override-value-note`:`override-value-error`),M(2),Y(t.overrideValueError()),M(),F((e=t.overrideFromPayload())?11:-1,e)}}function kG(e,t){e&1&&(z(0,`p`,61),J(1,` Serves `),z(2,`code`),J(3,`index.csr.html`),B(),J(4,` instead of rendering. Needs `),z(5,`code`),J(6,`browserDistFolder`),B(),J(7,` in `),z(8,`code`),J(9,`initPangularHub()`),B(),J(10,`. `),B())}function AG(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.message)}}function jG(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),Z(``,e.value===void 0?`remove`:`set`,` `,e.key)}}function MG(e,t){if(e&1){let e=W();z(0,`li`)(1,`label`,109)(2,`input`,110),G(`change`,function(){let t=O(e).$implicit;return k(K().toggleOverride(t.id))}),B(),z(3,`code`,111)(4,`span`,112),J(5),B(),J(6),B()(),z(7,`button`,122),G(`click`,function(){let t=O(e).$implicit;return k(K().removeOverride(t.id))}),J(8,` Remove `),B(),z(9,`span`,114),P(10,AG,2,1,`span`),P(11,jG,2,2,`span`),B()()}if(e&2){let e=t.$implicit,n=K();q(`off`,!e.enabled),M(2),R(`checked`,e.enabled)(`disabled`,!n.canWrite()),N(`aria-label`,`Enable `+n.overrideLabel(e.kind)+` for `+e.pattern),M(),R(`title`,e.pattern),M(2),Y(n.overrideLabel(e.kind)),M(),X(` `,e.pattern),M(),R(`disabled`,!n.canWrite()),N(`aria-label`,`Remove `+n.overrideLabel(e.kind)+` for `+e.pattern),M(3),F(e.message?10:-1),M(),F(e.key?11:-1)}}function NG(e,t){e&1&&(z(0,`li`,53),J(1,`No overrides.`),B())}function PG(e,t){if(e&1&&(z(0,`div`)(1,`dt`),J(2,`DOM nodes hydrated`),B(),z(3,`dd`),J(4),B()(),z(5,`div`)(6,`dt`),J(7,`DOM nodes skipped`),B(),z(8,`dd`),J(9),B()(),z(10,`div`)(11,`dt`),J(12,`Mismatched components`),B(),z(13,`dd`),J(14),B()()),e&2){let e=t;M(4),Y(e.hydrated),M(5),Y(e.skipped),M(4),q(`bad`,e.mismatched>0),M(),Y(e.mismatched)}}function FG(e,t){if(e&1&&(z(0,`span`,124)(1,`span`,125),J(2,`Expected`),B(),z(3,`code`),J(4),B()()),e&2){let e=K().$implicit;M(4),Y(e.expected)}}function IG(e,t){if(e&1&&(z(0,`span`,124)(1,`span`,125),J(2,`Actual`),B(),z(3,`code`),J(4),B()()),e&2){let e=K().$implicit;M(4),Y(e.actual)}}function LG(e,t){if(e&1&&(z(0,`li`)(1,`code`),J(2),B(),P(3,FG,5,1,`span`,124),P(4,IG,5,1,`span`,124),B()),e&2){let e=t.$implicit;M(2),Y(`<`+e.component+`>`),M(),F(e.expected?3:-1),M(),F(e.actual?4:-1)}}function RG(e,t){if(e&1&&(z(0,`h3`),J(1),B(),z(2,`ul`,123),I(3,LG,5,3,`li`,null,Cg),B()),e&2){let e=K();M(),X(`Mismatches (`,e.mismatches.length,`)`),M(2),L(e.mismatches)}}function zG(e,t){if(e&1&&(z(0,`li`)(1,`code`),J(2),B()()),e&2){let e=t.$implicit;M(2),Y(e)}}function BG(e,t){if(e&1&&(z(0,`h3`),J(1,`ngSkipHydration hosts`),B(),z(2,`ul`,126),I(3,zG,3,1,`li`,null,Cg),B()),e&2){let e=K();M(3),L(e.skipHydrationHosts)}}function VG(e,t){e&1&&(z(0,`h3`),J(1,`Warnings`),B(),z(2,`p`,56),J(3,` Not captured: add `),z(4,`code`),J(5,`providePangularHttp()`),B(),J(6,` to the app providers. `),B())}function HG(e,t){if(e&1&&(z(0,`pre`,127),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function UG(e,t){e&1&&(z(0,`p`,86),J(1,`No hydration warnings.`),B())}function WG(e,t){if(e&1&&(z(0,`h3`),J(1),B(),I(2,HG,2,1,`pre`,127,Cg,!1,UG,2,0,`p`,86)),e&2){let e=K();M(),X(`Warnings (`,e.warnings.length,`)`),M(),L(e.warnings)}}function GG(e,t){if(e&1&&(z(0,`dl`,85)(1,`div`)(2,`dt`),J(3,`Enabled`),B(),z(4,`dd`)(5,`span`,94),J(6),B()()(),z(7,`div`)(8,`dt`),J(9,`Hydrated components`),B(),z(10,`dd`),J(11),B()(),z(12,`div`)(13,`dt`),J(14,`Hydrated nodes`),B(),z(15,`dd`),J(16),B()(),z(17,`div`)(18,`dt`),J(19,`Skipped components`),B(),z(20,`dd`),J(21),B()(),z(22,`div`)(23,`dt`),J(24,`App stable after`),B(),z(25,`dd`),J(26),B()(),z(27,`div`)(28,`dt`),J(29,`Incremental defer blocks`),B(),z(30,`dd`),J(31),B()(),P(32,PG,15,5),B(),P(33,RG,5,1),P(34,BG,5,0),P(35,VG,7,0)(36,WG,5,2)),e&2){let e,n=t;M(5),q(`on`,n.enabled)(`off-tag`,!n.enabled),M(),Y(n.enabled?`yes`:`no (client render only)`),M(5),Y(n.hydratedComponents??`n/a`),M(5),Y(n.hydratedNodes??`n/a`),M(5),Y(n.componentsSkippedHydration??`n/a`),M(5),Y(n.stableMs===void 0?`n/a`:n.stableMs+` ms`),M(5),Y(n.deferBlocksWithIncrementalHydration??`n/a`),M(),F((e=n.nodes)?32:-1,e),M(),F(n.mismatches?.length?33:-1),M(),F(n.skipHydrationHosts.length?34:-1),M(),F(n.warningsCaptured===!1?35:36)}}function KG(e,t){e&1&&(z(0,`div`,11)(1,`p`),J(2,`No hydration data for this page.`),B(),z(3,`p`,56),J(4,`Open a server rendered page of the app to see its stats.`),B()())}function qG(e,t){e&1&&(z(0,`div`,11)(1,`p`),J(2,`No TransferState script: this page was not server rendered.`),B()())}function JG(e,t){if(e&1&&(z(0,`p`,129),J(1),B()),e&2){let e=K(2);M(),Y(e.error)}}function YG(e,t){e&1&&(z(0,`span`,94),J(1),B()),e&2&&(M(),Y(t))}function XG(e,t){if(e&1&&(z(0,`span`,94),J(1),B(),z(2,`span`,132),J(3),B()),e&2){let e=t,n=K().$implicit,r=K(3);q(`server`,r.statusTone(e.status)===`ok`)(`fault`,r.statusTone(e.status)===`bad`),M(),X(`HTTP `,e.status),M(2),Y(e.url??n.key)}}function ZG(e,t){if(e&1&&(z(0,`span`,132),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.key)}}function QG(e,t){if(e&1){let e=W();z(0,`button`,105),G(`click`,function(){O(e);let t=K().$implicit;return k(K(3).editEntry(t))}),J(1,` Edit in SSR overrides `),B()}if(e&2){let e=K().$implicit;N(`aria-label`,`Edit in SSR overrides, key `+e.key)}}function $G(e,t){if(e&1){let e=W();z(0,`details`)(1,`summary`),V(2,`span`,131),P(3,YG,2,1,`span`,94),P(4,XG,4,6)(5,ZG,2,1,`span`,132),z(6,`span`,133),J(7),B()(),z(8,`div`,134)(9,`span`,135),J(10,`Key`),B(),z(11,`code`,136),J(12),B(),z(13,`div`,137)(14,`button`,105),G(`click`,function(){let t=O(e).$implicit;return k(K(3).copyKey(t.key))}),J(15,` Copy `),B(),P(16,QG,2,1,`button`,103),B()(),z(17,`pre`,138),J(18),dv(19,`json`),B()()}if(e&2){let e,n,r=t.$implicit,i=K(3);M(3),F((e=i.payloadLabel(r))?3:-1,e),M(),F((n=r.http)?4:5,n),M(3),X(``,r.size,` B`),M(5),Y(r.key),M(2),N(`aria-label`,`Copy key `+r.key),M(2),F(i.canEditEntry(r)?16:-1),M(),N(`aria-label`,`Value of `+r.key),M(),Y(pv(19,8,r.value))}}function eK(e,t){if(e&1&&(z(0,`p`,128),J(1),B(),P(2,JG,2,1,`p`,129),z(3,`div`,130),I(4,$G,20,10,`details`,null,EW),B()),e&2){let e=K();M(),Y_(` `,e.entries.length,` entr`,e.entries.length===1?`y`:`ies`,`, `,e.size,` bytes `),M(),F(e.error?2:-1),M(2),L(e.entries)}}function tK(e,t){e&1&&P(0,qG,3,0,`div`,11)(1,eK,6,4),e&2&&F(+!!t.found)}function nK(e,t){e&1&&(z(0,`div`,11)(1,`p`),J(2,`Open a page of the app to see its payload.`),B()())}var rK={kind:`render-error`,pattern:``,message:``,key:``,value:``},iK={"render-error":`Render error`,"client-render":`Client render`,"state-edit":`TransferState edit`},aK={server:`Server`,prerender:`Prerender`,client:`Client`,redirect:`Redirect`,"not-rendered":`Not rendered`,unknown:`Unknown`},oK={pattern:``,method:``,target:`both`,status:``,delayMs:``,body:``};function sK(e){try{let t=new URL(e,`http://x`);return t.pathname+t.search}catch{return e}}var cK=/\[redacted\]|%5Bredacted%5D/gi;function lK(e){return(/^([a-z][a-z\d+.-]*:|\/\/)/i.test(e)?sK(e):e).replace(cK,`*`)}function uK(e){let t=qD(e);if(t!==null)return t;try{return JSON.parse(e),e.trim()}catch{return null}}var dK=[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`];function fK(e){try{return new URL(e,`http://x`).pathname}catch{return``}}function pK(e){let t=fK(e);return t===`/`?``:t}var mK=/\[redacted\]|%5Bredacted%5D/i,hK=200,gK=50,_K=500,vK=1e5,yK=[{value:``,label:`None`},...IT.map(([e,t])=>({value:String(e),label:`${e} ${t}`}))],bK=class e{rpc=$(null);canWrite=Q(()=>SE(this.rpc(),`http`));writesOff=JT(`http`);loading=j(!1);failed=j(!1);serverCalls=j([]);pages=j([]);payloads=j({});serverDropped=j(0);requests=j([]);rules=j([]);overrides=j([]);overrideDraft=j({...rK});overrideFromPayload=j(null);overrideKindOptions=[{value:`render-error`,label:`Render error`},{value:`client-render`,label:`Force Client render`},{value:`state-edit`,label:`Edit TransferState entry`}];overrideValueError=Q(()=>{let e=this.overrideDraft().value.trim();if(!e)return``;try{return JSON.parse(e),``}catch{return`The value must be valid JSON.`}});overrideReady=Q(()=>{let e=this.overrideDraft();return!e.pattern.trim()||this.overrides().length>=20?!1:e.kind!==`state-edit`||!!e.key.trim()&&!this.overrideValueError()});hostPageId=nE();selectedPageId=Tv({source:()=>this.pages(),computation:(e,t)=>t?.value&&e.some(e=>e.pageId===t.value)?t.value:e.find(e=>e.pageId===this.hostPageId)?.pageId??e[0]?.pageId??null});selectedCallId=j(null);draft=j({...oK});message=j(``);bodyPlaceholder=`{ "error": "Service unavailable" }`;statusOptions=yK;unsubscribe=[];destroyRef=E(Cs);injector=E(xs);host=E(Ml);selected=Q(()=>this.pages().find(e=>e.pageId===this.selectedPageId())??null);pageRequestId=Q(()=>this.selected()?.ssrRequestId??null);selectedRequestId=Tv(()=>this.pageRequestId());selectedPayload=Q(()=>{let e=this.selectedPageId();return e?this.payloads()[e]??null:null});maxCalls=Q(()=>xE(this.rpc()).limits.httpCalls);droppedCalls=Q(()=>(this.selected()?.dropped??0)+this.serverDropped());pageServerCalls=Q(()=>{let e=this.selected()?.initialUrl;return e?this.serverCalls().filter(t=>!t.pageUrl||t.pageUrl===e):this.serverCalls()});timeline=Q(()=>[...this.pageServerCalls(),...this.selected()?.calls??[]].sort((e,t)=>t.at-e.at));callQuery=j(``);sideFilter=j(`all`);failedOnly=j(!1);sideOptions=[{value:`all`,label:`All sides`},{value:`server`,label:`SSR`},{value:`client`,label:`Client`}];visibleCalls=Q(()=>{let e=this.callQuery().trim().toLowerCase(),t=this.sideFilter()??`all`,n=this.failedOnly();return this.timeline().filter(r=>(t===`all`||r.side===t)&&(!n||this.isFailed(r))&&(!e||`${r.method} ${r.url}`.toLowerCase().includes(e)||`${r.method} ${sK(r.url)}`.toLowerCase().includes(e)))});filterStatus=Q(()=>{this.callQuery(),this.sideFilter(),this.failedOnly(),this.filterFlip=!this.filterFlip;let e=Cv(()=>`${this.visibleCalls().length} of ${this.timeline().length}`);return this.filterFlip?`${e}\u00a0`:e});filterFlip=!0;selectedCall=Q(()=>this.visibleCalls().find(e=>e.id===this.selectedCallId())??null);selectedRequest=Q(()=>this.requests().find(e=>e.id===this.selectedRequestId())??null);requestCalls=Q(()=>{let e=this.selectedRequest()?.id;return e?this.serverCalls().filter(t=>t.requestId===e):[]});requestPage=Q(()=>{let e=this.selectedRequest()?.id;return e?this.pages().find(t=>t.ssrRequestId===e)??null:null});refetched=Q(()=>{let e=this.selectedRequest(),t=this.requestPage();if(!e||!t)return[];let n=new Set(this.requestCalls().filter(e=>e.status).map(e=>`${e.method} ${sK(e.url)}`));return t.calls.filter(t=>t.side===`client`&&!t.cacheHit&&!t.mocked&&t.at>=e.at&&n.has(`${t.method} ${sK(t.url)}`))});draftMocksOnServer=Q(()=>{let e=this.draftRule();return!!e&&this.mocksOnServer(e)});draftRule=Q(()=>{let e=this.draft(),t=e.pattern.trim();if(!t||t.length>_K||this.bodyError()||this.rules().length>=gK)return null;let n=e.body.trim(),r=Math.min(Math.max(Math.round(Number(e.delayMs))||0,0),1e4),i=e.status.trim()?Number(e.status):n?200:void 0;return i!==void 0&&!LT(i)||i===void 0&&!r?null:{pattern:t,enabled:!0,target:e.target,...e.method?{method:e.method}:{},...i===void 0?{}:{status:i},...r?{delayMs:r}:{},...n?{body:n}:{}}});draftHint=Q(()=>{let e=this.draft();return this.rules().length>=gK?`You can add up to ${gK} rules. Remove one to add another.`:e.pattern.trim()?e.pattern.trim().length>_K?`The URL pattern is limited to ${_K} characters.`:this.bodyError()?``:e.status.trim()&&!LT(Number(e.status))?`Pick a status from the list.`:this.draftRule()?!e.status.trim()&&e.body.trim()?`With no status, the mock body returns 200.`:``:`Set a status, a delay or a mock body.`:`Enter a URL pattern to add a rule.`});bodyError=Q(()=>{let e=this.draft().body.trim();if(!e)return``;if(e.length>vK)return`The mock body is limited to ${vK} characters.`;try{return JSON.parse(e),``}catch{return`The mock body must be valid JSON.`}});constructor(){uc(()=>{let e=this.rpc();e&&this.load(e)}),this.destroyRef.onDestroy(()=>this.stopListening())}async load(e){this.loading.set(!0),this.failed.set(!1);try{let t=e.scope(`pangular`).rpc,[n,r]=await Promise.all([t.sharedState(`http`),t.sharedState(`http-payloads`)]);if(this.destroyRef.destroyed)return;let i=e=>{let t=e;this.serverCalls.set(t?.serverCalls??[]),this.serverDropped.set(t?.serverDropped??0),this.requests.set([...t?.requests??[]].reverse()),this.pages.set(t?.pages??[]),this.rules.set(t?.rules??[]),this.overrides.set(t?.ssrOverrides??[])},a=e=>this.payloads.set(e?.pages??{});i(n.value()),a(r.value()),this.stopListening(),this.unsubscribe=[n.on(`updated`,i),r.on(`updated`,a)]}catch{this.failed.set(!0)}finally{this.loading.set(!1)}}retry(){let e=this.rpc();e&&this.load(e)}guardVerdict(e){return e.guards?.passed===!1?e.outcome===`redirected`?`redirected`:`rejected`:``}msLabel(e){return e===void 0?`n/a`:`${e} ms`}skipText(e){return FT[e]??``}refetchReason(e){let t=`${e.method} ${sK(e.url)}`,n=this.requestCalls().filter(e=>`${e.method} ${sK(e.url)}`===t),r=n[0];return r?.cacheSkip&&n.every(e=>e.cacheSkip===r.cacheSkip)?this.skipText(r.cacheSkip):``}compressedWith(e){if(e.compressedBeforeTrace)return e.headers[`content-encoding`]??`unknown encoding`}renderModeLabel(e){return aK[e]??`Unknown`}statusLabel(e){return e.cancelled?`cancelled`:e.status?String(e.status):`ERR`}callTone(e){return e.cancelled?`neutral`:this.statusTone(e.status)}isFailed(e){return!!e.cancelled||!e.status||e.status>=400}clearCallFilters(){this.callQuery.set(``),this.sideFilter.set(`all`),this.failedOnly.set(!1),this.host.nativeElement.querySelector(`#timeline-search`)?.focus()}rulePatternOf(e){return e.rulePattern?e.rulePattern:e.ruleId?this.rules().find(t=>t.id===e.ruleId)?.pattern??null:null}openCall(e){this.selectedCallId.set(e),Id(()=>this.host.nativeElement.querySelector(`#preview-heading`)?.focus(),{injector:this.injector})}previewText(e){if(e.preview!==void 0)return qD(e.preview)??e.preview}async copyPreview(e){let t=this.previewText(e);if(t)try{await navigator.clipboard.writeText(t),this.message.set(`Copied.`)}catch{this.message.set(`The clipboard is not available here.`)}}mockCall(e){let t=e.method.toUpperCase(),n=lK(e.url),r=e.error||!e.preview?null:uK(e.preview);this.draft.set({...oK,pattern:n,method:t,body:r??``});let i=`${t} ${n}`;this.message.set(r?`Filled in a rule for ${i} with the preview as its body. Check it, then add the rule.`:e.preview&&!e.error?`Filled in a rule for ${i}. The preview is not complete JSON, so it is not used as the body.`:`Filled in a rule for ${i}. Set a status, a delay or a body, then add the rule.`),Id(()=>this.host.nativeElement.querySelector(`#rule-pattern`)?.focus(),{injector:this.injector})}closePreview(){let e=this.selectedCallId();this.selectedCallId.set(null),e&&[...this.host.nativeElement.querySelectorAll(`button[data-call-id]`)].find(t=>t.dataset.callId===e)?.focus()}stopListening(){for(let e of this.unsubscribe.splice(0))e()}statusTone(e){return e===void 0?`neutral`:e===0||e>=400?`bad`:e>=300?`redirect`:e>=200?`ok`:`neutral`}mocksOnServer(e){return e.target!==`client`&&e.status!==void 0&&e.status<400}payloadLabel(e){return e.source===`hydration`?`hydration annotations`:e.fn?`Analog server function ${e.fn.name??e.fn.id}`:e.source===`analog`?`Analog`:null}targetLabel(e){return e===`both`?`SSR + client`:e===`server`?`SSR only`:`Client only`}pageOptions=Q(()=>this.pages().map(e=>({value:e.pageId,label:e.title||e.url})));methodOptions=Q(()=>{let e=this.draft().method;return[{value:``,label:`Any`},...(e&&!dK.includes(e)?[...dK,e]:dK).map(e=>({value:e,label:e}))]});targetOptions=[{value:`both`,label:`SSR + client`},{value:`server`,label:`SSR only`},{value:`client`,label:`Client only`}];selectPage(e){e&&this.selectedPageId.set(e),this.selectedCallId.set(null),this.overrideFromPayload.set(null)}setDraft(e,t){this.draft.update(n=>({...n,[e]:t}))}patch(e,t){let n=t.target.value;this.draft.update(t=>({...t,[e]:n}))}async addRule(e){e.preventDefault();let t=this.draftRule();if(!t)return;let n={id:`r${Date.now().toString(36)}${Math.random().toString(36).slice(2,6)}`,...t};await this.saveRules([...this.rules(),n],`Rule added.`,n)&&(this.draft.set({...oK}),this.host.nativeElement.querySelector(`#rule-pattern`)?.focus())}toggleRule(e){let t=this.rules().find(t=>t.id===e);t&&this.saveRules(this.rules().map(t=>t.id===e?{...t,enabled:!t.enabled}:t),`Rule updated.`,t)}async removeRule(e){let t=this.rules().findIndex(t=>t.id===e);if(t<0)return;let n=this.rules().filter(t=>t.id!==e);await this.saveRules(n,`Rule removed.`,this.rules()[t])&&this.focusAfterRemove(`[data-remove-rule]`,t,`#rule-list-heading`)}async clearCalls(){try{await oE(this.rpc(),`clear-http-calls`),this.selectedCallId.set(null),this.message.set(`Timeline cleared.`)}catch{this.message.set(`Could not clear the timeline.`)}}overrideLabel(e){return iK[e]??e}setOverrideDraft(e,t){this.overrideDraft.update(n=>({...n,[e]:t})),e===`kind`&&t!==`state-edit`&&this.overrideFromPayload.set(null)}patchOverride(e,t){let n=t.target.value;this.overrideDraft.update(t=>({...t,[e]:n})),e===`key`&&this.overrideFromPayload.set(null)}async copyKey(e){try{await navigator.clipboard.writeText(e),this.message.set(`Copied.`)}catch{this.message.set(`The clipboard is not available here.`)}}canEditEntry(e){let{key:t}=e;return this.canWrite()&&!!t&&t===t.trim()&&t.length<=hK&&!mK.test(t)}editEntry(e){if(!this.canEditEntry(e))return;let t=this.selected();this.overrideDraft.set({...rK,kind:`state-edit`,pattern:t?pK(t.initialUrl??t.url):``,key:e.key}),this.overrideFromPayload.set(e.http?`http`:`other`),this.message.set(`Editing the TransferState entry in SSR overrides.`),Id(()=>{let e=this.host.nativeElement.querySelector(this.overrideDraft().pattern?`#override-value`:`#override-pattern`);e?.scrollIntoView?.({block:`center`}),e?.focus()},{injector:this.injector})}async addOverride(e){if(e.preventDefault(),!this.overrideReady())return;let t=this.overrideDraft(),n={id:`o${Date.now().toString(36)}${Math.random().toString(36).slice(2,6)}`,kind:t.kind,pattern:t.pattern.trim(),enabled:!0,...t.kind===`render-error`&&t.message.trim()?{message:t.message.trim()}:{},...t.kind===`state-edit`?{key:t.key.trim()}:{},...t.kind===`state-edit`&&t.value.trim()?{value:t.value.trim()}:{}};await this.saveOverrides([...this.overrides(),n],`Override added. Reload the page.`)&&(this.overrideDraft.set({...rK,kind:t.kind}),this.overrideFromPayload.set(null),this.host.nativeElement.querySelector(`#override-pattern`)?.focus())}toggleOverride(e){this.saveOverrides(this.overrides().map(t=>t.id===e?{...t,enabled:!t.enabled}:t),`Override updated. Reload the page.`)}async removeOverride(e){let t=this.overrides().findIndex(t=>t.id===e);if(t<0)return;let n=this.overrides().filter(t=>t.id!==e);await this.saveOverrides(n,`Override removed.`)&&this.focusAfterRemove(`[data-remove-override]`,t,`#override-list-heading`)}focusAfterRemove(e,t,n){Id(()=>{let r=this.host.nativeElement,i=r.querySelectorAll(e);(i[Math.min(t,i.length-1)]??r.querySelector(n))?.focus()},{injector:this.injector})}announce(e){if(this.message()!==e){this.message.set(e);return}this.message.set(``),Id(()=>{this.message()===``&&this.message.set(e)},{injector:this.injector})}async saveOverrides(e,t){try{let n=await oE(this.rpc(),`set-ssr-overrides`,e);return this.overrides.set(Array.isArray(n)?n:e),this.announce(t),!0}catch{return this.message.set(`Could not save the overrides.`),!1}}async saveRules(e,t,n){try{let r=await oE(this.rpc(),`set-http-rules`,e);return this.rules.set(Array.isArray(r)?r:e),this.announce(n.target===`client`?t:`${t} Reload the page to apply it to SSR.`),!0}catch{return this.message.set(`Could not save the rules.`),!1}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-network-inspector`]],inputs:{rpc:[1,`rpc`]},decls:128,vars:54,consts:[[`role`,`status`,1,`state`],[`role`,`alert`,1,`state`,`error`],[1,`toolbar`],[1,`page-picker`],[`id`,`page-picker-label`],[`labelledBy`,`page-picker-label`,`emptyText`,`No connected page`,`placeholder`,`No connected page`,3,`valueChange`,`options`,`value`],[`type`,`button`,3,`click`,`disabled`],[`role`,`status`,1,`message`],[1,`grid`],[`aria-labelledby`,`ssr-heading`,1,`panel`,`wide`],[`id`,`ssr-heading`],[1,`empty`],[`aria-labelledby`,`timeline-heading`,1,`panel`,`wide`],[`id`,`timeline-heading`],[`what`,`HTTP calls`,`limit`,`httpCalls`,3,`dropped`,`max`],[`role`,`group`,`aria-label`,`Filter the HTTP timeline`,1,`filters`],[1,`search`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`search-icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`id`,`timeline-search`,`type`,`search`,`placeholder`,`Find a URL or method…`,`aria-label`,`Find a URL or method`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`value`],[`ariaLabel`,`Side`,1,`side-filter`,3,`valueChange`,`options`,`value`],[1,`inline`,`failed-toggle`],[`type`,`checkbox`,3,`change`,`checked`],[1,`total`],[`role`,`status`,1,`sr-only`],[1,`table-wrap`],[`role`,`status`,1,`empty`,`no-match`],[`id`,`call-preview`,`role`,`region`,`aria-labelledby`,`preview-heading`,1,`preview`],[`aria-labelledby`,`rules-heading`,1,`panel`],[`id`,`rules-heading`],[`id`,`http-writes-off`,1,`muted`,`small`],[`id`,`rule-form`,1,`rule-form`,3,`submit`],[1,`hint`],[`id`,`rule-pattern`,`required`,``,`spellcheck`,`false`,`autocomplete`,`off`,`placeholder`,`e.g. /api/products`,3,`input`,`value`],[1,`row`],[1,`field-group`],[`id`,`rule-method-label`],[`labelledBy`,`rule-method-label`,3,`valueChange`,`options`,`value`],[`id`,`rule-target-label`],[`labelledBy`,`rule-target-label`,3,`valueChange`,`describedBy`,`options`,`value`],[`id`,`rule-status-label`],[`labelledBy`,`rule-status-label`,3,`valueChange`,`describedBy`,`options`,`value`],[`type`,`number`,`inputmode`,`numeric`,`min`,`0`,`max`,`10000`,`placeholder`,`0`,3,`input`,`value`],[`rows`,`3`,`spellcheck`,`false`,`aria-describedby`,`body-error`,3,`input`,`placeholder`,`value`],[`id`,`body-error`,1,`field-error`],[`id`,`rule-ssr-note`,1,`muted`,`small`],[`id`,`rule-hint`,1,`muted`,`small`],[1,`form-actions`],[`type`,`submit`,3,`disabled`],[`id`,`rule-list-heading`,`tabindex`,`-1`,1,`rules-heading`],[1,`rules`],[3,`off`],[1,`empty-rule`],[`aria-labelledby`,`overrides-heading`,1,`panel`],[`id`,`overrides-heading`],[1,`muted`,`small`],[1,`rule-form`,3,`submit`],[`id`,`override-kind-label`],[`labelledBy`,`override-kind-label`,3,`valueChange`,`describedBy`,`options`,`value`],[`id`,`override-pattern`,`required`,``,`spellcheck`,`false`,`autocomplete`,`off`,`placeholder`,`e.g. /examples/ssr`,3,`input`,`value`],[`id`,`override-kind-help`,1,`muted`,`small`],[`id`,`override-list-heading`,`tabindex`,`-1`,1,`rules-heading`],[`aria-labelledby`,`hydration-heading`,1,`panel`],[`id`,`hydration-heading`],[`aria-labelledby`,`payload-heading`,1,`panel`,`wide`],[`id`,`payload-heading`],[`aria-hidden`,`true`,1,`spinner`],[`type`,`button`,3,`click`],[`scope`,`col`],[`scope`,`col`,1,`num`],[3,`selected`],[`id`,`ssr-detail`,`role`,`region`,`aria-labelledby`,`ssr-detail-heading`,1,`preview`],[3,`click`],[1,`url`],[`type`,`button`,`aria-controls`,`ssr-detail`,1,`link`,3,`title`],[1,`method`],[1,`status`],[`aria-hidden`,`true`,1,`dot`],[1,`num`],[1,`notes`],[1,`tag`,`server`],[1,`tag`,`mock`],[1,`tag`,`fault`],[`id`,`ssr-detail-heading`],[1,`stats`],[1,`muted`,`small`,`ok-note`],[1,`request-call`],[1,`muted`],[1,`stats`,`nav-stats`],[1,`preview-url`,3,`title`],[1,`tag`,3,`title`],[1,`muted`,`small`,`skip-reason`],[`appRovingList`,`button[data-call-id]`],[1,`tag`],[`type`,`button`,1,`link`,3,`title`],[1,`page-url`,3,`title`],[1,`tag`,`rule-ref`,3,`title`],[1,`empty-actions`],[`id`,`call-preview`,`role`,`region`,`aria-labelledby`,`preview-heading`,1,`preview`,3,`keydown.escape`],[1,`preview-head`],[`id`,`preview-heading`,`tabindex`,`-1`],[1,`preview-actions`],[`type`,`button`,1,`ghost`],[`type`,`button`,`aria-controls`,`rule-form`,1,`ghost`,3,`click`,`disabled`],[`type`,`button`,1,`ghost`,3,`click`],[1,`preview-meta`],[1,`preview-rule`],[`tabindex`,`0`,`role`,`region`,1,`preview-body`],[1,`inline`],[`type`,`checkbox`,3,`change`,`checked`,`disabled`],[1,`rule-pattern`,3,`title`],[1,`rule-method`],[`type`,`button`,`data-remove-rule`,``,1,`link`,`remove`,3,`click`,`disabled`],[1,`rule-meta`],[1,`status`,3,`ok`,`redirect`,`bad`],[1,`rule-note`],[`spellcheck`,`false`,`placeholder`,`Simulated render error`,`aria-describedby`,`override-kind-help`,3,`input`,`value`],[`id`,`override-key`,`spellcheck`,`false`,`autocomplete`,`off`,3,`input`,`value`],[`id`,`override-value`,`rows`,`3`,`spellcheck`,`false`,3,`input`,`value`],[`id`,`override-value-error`,1,`field-error`],[`id`,`override-value-note`,1,`muted`,`small`],[`type`,`button`,`data-remove-override`,``,1,`link`,`remove`,3,`click`,`disabled`],[1,`plain`,`mismatches`],[1,`mismatch-row`],[1,`mismatch-label`],[1,`plain`],[1,`warn`],[1,`muted`,`small`,`summary-line`],[`role`,`alert`,1,`bad`],[1,`entries`],[`aria-hidden`,`true`,1,`chevron`],[1,`entry-key`],[1,`entry-size`],[1,`entry-key-row`],[1,`entry-key-label`],[1,`entry-key-text`],[1,`entry-actions`],[`tabindex`,`0`,`role`,`region`]],template:function(e,t){if(e&1&&(P(0,DW,4,0,`div`,0)(1,OW,7,0,`div`,1),z(2,`div`,2)(3,`div`,3)(4,`span`,4),J(5,`Page`),B(),z(6,`app-select`,5),G(`valueChange`,function(e){return t.selectPage(e)}),B()(),z(7,`button`,6),G(`click`,function(){return t.clearCalls()}),J(8,` Clear timeline `),B(),z(9,`p`,7),J(10),B()(),z(11,`div`,8)(12,`section`,9)(13,`h2`,10),J(14),B(),P(15,eG,20,1)(16,tG,11,0,`div`,11),B(),z(17,`section`,12)(18,`h2`,13),J(19),B(),V(20,`app-limit-note`,14),z(21,`div`,15)(22,`div`,16),A(),z(23,`svg`,17),V(24,`circle`,18)(25,`path`,19),B(),ps(),z(26,`input`,20),G(`input`,function(e){return t.callQuery.set(e.target.value)})(`keydown.escape`,function(){return t.callQuery.set(``)}),B()(),z(27,`app-select`,21),ev(`valueChange`,function(e){return $_(t.sideFilter,e)||(t.sideFilter=e),e}),B(),z(28,`label`,22)(29,`input`,23),G(`change`,function(e){return t.failedOnly.set(e.target.checked)}),B(),J(30,` Failed only `),B(),z(31,`span`,24),J(32),B(),z(33,`span`,25),J(34),B()(),P(35,cG,21,0,`div`,26)(36,dG,9,1,`div`,27)(37,fG,11,0,`div`,11),P(38,hG,20,18,`div`,28),B(),z(39,`section`,29)(40,`h2`,30),J(41,`Fault injection`),B(),P(42,gG,2,1,`p`,31),z(43,`form`,32),G(`submit`,function(e){return t.addRule(e)}),z(44,`label`)(45,`span`),J(46,`URL pattern `),z(47,`span`,33),J(48,`(substring or * glob, ^ anchors the path)`),B()(),z(49,`input`,34),G(`input`,function(e){return t.patch(`pattern`,e)}),B()(),z(50,`div`,35)(51,`div`,36)(52,`span`,37),J(53,`Method`),B(),z(54,`app-select`,38),G(`valueChange`,function(e){return t.setDraft(`method`,e??``)}),B()(),z(55,`div`,36)(56,`span`,39),J(57,`Apply on`),B(),z(58,`app-select`,40),G(`valueChange`,function(e){return t.setDraft(`target`,e??`both`)}),B()()(),z(59,`div`,35)(60,`div`,36)(61,`span`,41),J(62,`Status`),B(),z(63,`app-select`,42),G(`valueChange`,function(e){return t.setDraft(`status`,e??``)}),B()(),z(64,`label`),J(65,` Delay (ms) `),z(66,`input`,43),G(`input`,function(e){return t.patch(`delayMs`,e)}),B()()(),z(67,`label`)(68,`span`),J(69,`Mock JSON body `),z(70,`span`,33),J(71,`(optional)`),B()(),z(72,`textarea`,44),G(`input`,function(e){return t.patch(`body`,e)}),B()(),z(73,`p`,45),J(74),B(),P(75,_G,2,0,`p`,46),z(76,`p`,47),J(77),B(),z(78,`div`,48)(79,`button`,49),J(80,` Add rule `),B()()(),z(81,`h3`,50),J(82),B(),z(83,`ul`,51),I(84,CG,17,17,`li`,52,CW,!1,wG,2,0,`li`,53),B()(),z(87,`section`,54)(88,`h2`,55),J(89,`SSR overrides`),B(),z(90,`p`,56),J(91,` Development only. These change what the server sends for matching pages, from the next full page load, and the request is marked `),z(92,`strong`),J(93,`overridden`),B(),J(94,`. `),B(),z(95,`form`,57),G(`submit`,function(e){return t.addOverride(e)}),z(96,`div`,36)(97,`span`,58),J(98,`Override`),B(),z(99,`app-select`,59),G(`valueChange`,function(e){return t.setOverrideDraft(`kind`,e??`render-error`)}),B()(),z(100,`label`)(101,`span`),J(102,`Page pattern `),z(103,`span`,33),J(104,`(substring or * glob, ^ anchors the path)`),B()(),z(105,`input`,60),G(`input`,function(e){return t.patchOverride(`pattern`,e)}),B()(),P(106,TG,8,1)(107,OG,12,6)(108,kG,11,0,`p`,61),z(109,`div`,48)(110,`button`,49),J(111,` Add override `),B()()(),z(112,`h3`,62),J(113),B(),z(114,`ul`,51),I(115,MG,12,12,`li`,52,CW,!1,NG,2,0,`li`,53),B()(),z(118,`section`,63)(119,`h2`,64),J(120,`Hydration`),B(),P(121,GG,37,14)(122,KG,5,0,`div`,11),B(),z(123,`section`,65)(124,`h2`,66),J(125,`TransferState payload`),B(),P(126,tK,2,1)(127,nK,3,0,`div`,11),B()()),e&2){let e,n,r,i;F(t.loading()?0:t.failed()?1:-1),M(6),R(`options`,t.pageOptions())(`value`,t.selected()?.pageId??null),M(),R(`disabled`,!t.canWrite()),N(`aria-describedby`,t.canWrite()?null:`http-writes-off`),M(3),Y(t.message()),M(4),X(`SSR requests (`,t.requests().length,`)`),M(),F(t.requests().length?15:16),M(4),X(`HTTP timeline (`,t.timeline().length,`)`),M(),R(`dropped`,t.droppedCalls())(`max`,t.maxCalls()),M(),q(`no-calls`,!t.timeline().length),M(5),R(`value`,t.callQuery()),M(),R(`options`,t.sideOptions),Q_(`value`,t.sideFilter),M(2),R(`checked`,t.failedOnly()),M(3),Z(``,t.visibleCalls().length,` of `,t.timeline().length),M(2),Y(t.filterStatus()),M(),F(t.visibleCalls().length?35:t.timeline().length?36:37),M(3),F((e=t.selectedCall())?38:-1,e),M(4),F(t.canWrite()?-1:42),M(7),R(`value`,t.draft().pattern),M(5),R(`options`,t.methodOptions())(`value`,t.draft().method),M(4),R(`describedBy`,t.draftMocksOnServer()?`rule-ssr-note`:``)(`options`,t.targetOptions)(`value`,t.draft().target),M(5),R(`describedBy`,t.draftMocksOnServer()?`rule-ssr-note`:``)(`options`,t.statusOptions)(`value`,t.draft().status),M(3),R(`value`,t.draft().delayMs),M(6),R(`placeholder`,t.bodyPlaceholder)(`value`,t.draft().body),N(`aria-invalid`,t.bodyError()?`true`:null),M(2),Y(t.bodyError()),M(),F(t.draftMocksOnServer()?75:-1),M(2),Y(t.draftHint()),M(2),R(`disabled`,!t.canWrite()||!t.draftRule()),N(`aria-describedby`,t.canWrite()?`rule-hint`:`http-writes-off`),M(3),X(` Rules (`,t.rules().length,`) `),M(2),L(t.rules()),M(15),R(`describedBy`,t.overrideDraft().kind===`state-edit`?``:`override-kind-help`)(`options`,t.overrideKindOptions)(`value`,t.overrideDraft().kind),M(6),R(`value`,t.overrideDraft().pattern),M(),F((n=t.overrideDraft().kind)===`render-error`?106:n===`state-edit`?107:n===`client-render`?108:-1),M(4),R(`disabled`,!t.canWrite()||!t.overrideReady()),N(`aria-describedby`,t.canWrite()?null:`http-writes-off`),M(3),X(` Overrides (`,t.overrides().length,`) `),M(2),L(t.overrides()),M(6),F((r=t.selected()?.hydration)?121:122,r),M(5),F((i=t.selectedPayload())?126:127,i)}},dependencies:[XD,bN,LD,ab],styles:[`@charset "UTF-8"; +}`]})},GW=(e,t)=>t.id,KW=(e,t)=>t.id+t.kind,qW=(e,t)=>t.side+t.id,JW=(e,t)=>t.key;function YW(e,t){e&1&&(z(0,`div`,0),V(1,`span`,67),z(2,`span`),J(3,`Loading…`),B()())}function XW(e,t){if(e&1){let e=W();z(0,`div`,1)(1,`strong`),J(2,`Could not reach the devtools server.`),B(),z(3,`span`),J(4,`Check that the app's dev server is running with the devtools plugin.`),B(),z(5,`button`,68),G(`click`,function(){return O(e),k(K().retry())}),J(6,`Try again`),B()()}}function ZW(e,t){e&1&&(z(0,`span`,81),J(1,`this page`),B())}function QW(e,t){e&1&&(z(0,`span`,82),J(1,`overridden`),B())}function $W(e,t){e&1&&(z(0,`span`,83),J(1,`aborted`),B())}function eG(e,t){if(e&1){let e=W();z(0,`tr`,73),G(`click`,function(){let t=O(e).$implicit;return k(K(2).selectedRequestId.set(t.id))}),z(1,`td`,74)(2,`button`,75)(3,`span`,76),J(4),B(),J(5),B()(),z(6,`td`,77),V(7,`span`,78),J(8),B(),z(9,`td`),J(10),B(),z(11,`td`,79),J(12),B(),z(13,`td`,79),J(14),B(),z(15,`td`)(16,`div`,80),P(17,ZW,2,0,`span`,81),P(18,QW,2,0,`span`,82),P(19,$W,2,0,`span`,83),B()()()}if(e&2){let e=t.$implicit,n=K(2);q(`selected`,n.selectedRequest()?.id===e.id),M(2),R(`title`,e.url),N(`aria-pressed`,n.selectedRequest()?.id===e.id),M(2),Y(e.method),M(),X(` `,e.url,` `),M(),q(`ok`,n.statusTone(e.status)===`ok`)(`redirect`,n.statusTone(e.status)===`redirect`)(`bad`,n.statusTone(e.status)===`bad`),M(2),X(``,e.status,` `),M(2),Y(n.renderModeLabel(e.renderMode)),M(2),X(``,e.renderMs,` ms`),M(2),Z(``,e.fetches,` (`,e.fetchMs,` ms)`),M(3),F(e.id===n.selected()?.ssrRequestId?17:-1),M(),F(e.overrides?.length?18:-1),M(),F(e.aborted?19:-1)}}function tG(e,t){e&1&&(z(0,`p`,56),J(1),z(2,`code`),J(3,`ssrMiddleware`),B(),J(4,` saw it, so the render mode can't be read and TransferState edits can't apply. Mount `),z(5,`code`),J(6,`ssrMiddleware`),B(),J(7,` after `),z(8,`code`),J(9,`compression()`),B(),J(10,`. `),B()),e&2&&(M(),X(` The body was already compressed (`,t,`) when `))}function nG(e,t){if(e&1&&(z(0,`span`,88),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.note)}}function rG(e,t){if(e&1&&(z(0,`p`,87)(1,`span`,82),J(2),B(),z(3,`span`),J(4),B(),P(5,nG,2,1,`span`,88),B()),e&2){let e=t.$implicit,n=K(4);M(2),Y(n.overrideLabel(e.kind)),M(2),Y(e.applied?`applied`:`not applied`),M(),F(e.note?5:-1)}}function iG(e,t){if(e&1&&(z(0,`h3`),J(1,`Overrides from the panel`),B(),z(2,`p`,56),J(3,` This response was changed on purpose, so it is not what the app sends on its own. `),B(),I(4,rG,6,3,`p`,87,KW)),e&2){let e=K();M(4),L(e.overrides)}}function aG(e,t){if(e&1&&(J(0,` to `),z(1,`code`),J(2),B()),e&2){let e=K().$implicit;M(2),Y(e.finalUrl)}}function oG(e,t){if(e&1&&(z(0,`div`)(1,`dt`),J(2,`Guards`),B(),z(3,`dd`),J(4),B()()),e&2){let e=K().$implicit,t=K(4);M(3),q(`bad`,t.guardVerdict(e)===`rejected`),M(),Z(` `,t.msLabel(e.guards.ms),``,t.guardVerdict(e)?`, `+t.guardVerdict(e):``,` `)}}function sG(e,t){if(e&1&&(z(0,`div`)(1,`dt`),J(2,`Resolvers`),B(),z(3,`dd`),J(4),B()()),e&2){let e=K().$implicit,t=K(4);M(4),Y(t.msLabel(e.resolvers.ms))}}function cG(e,t){if(e&1&&(z(0,`div`)(1,`dt`),J(2,`Navigation total`),B(),z(3,`dd`),J(4),B()()),e&2){let e=K().$implicit;M(4),X(``,e.durationMs,` ms`)}}function lG(e,t){if(e&1&&(z(0,`p`,56),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.reason)}}function uG(e,t){if(e&1&&(z(0,`dl`,89)(1,`div`)(2,`dt`),J(3,`Navigation`),B(),z(4,`dd`)(5,`code`),J(6),B(),P(7,aG,3,1),J(8),B()(),P(9,oG,5,4,`div`),P(10,sG,5,1,`div`),P(11,cG,5,1,`div`),B(),P(12,lG,2,1,`p`,56)),e&2){let e=t.$implicit;M(6),Y(e.url),M(),F(e.finalUrl?7:-1),M(),X(` (`,e.outcome,`) `),M(),F(e.guards?9:-1),M(),F(e.resolvers?10:-1),M(),F(e.durationMs===void 0?-1:11),M(),F(e.reason?12:-1)}}function dG(e,t){if(e&1&&(z(0,`h3`),J(1,`Router during the render`),B(),I(2,uG,13,7,null,null,Dg)),e&2){let e=K();M(2),L(e.navigations)}}function fG(e,t){e&1&&(z(0,`span`,81),J(1,`cached`),B())}function pG(e,t){if(e&1&&(z(0,`span`,91),J(1,`not cached`),B()),e&2){let e=K().$implicit;R(`title`,K(3).skipText(e.cacheSkip))}}function mG(e,t){if(e&1&&(z(0,`p`,92),J(1),B()),e&2){let e=K().$implicit,t=K(3);M(),X(`Not cached: `,t.skipText(e.cacheSkip),`.`)}}function hG(e,t){if(e&1&&(z(0,`p`,87)(1,`span`,76),J(2),B(),z(3,`span`,90),J(4),B(),z(5,`span`,77),J(6),B(),z(7,`span`,88),J(8),B(),P(9,fG,2,0,`span`,81)(10,pG,2,1,`span`,91),B(),P(11,mG,2,1,`p`,92)),e&2){let e=t.$implicit,n=K(3);M(2),Y(e.method),M(),R(`title`,e.url),M(),Y(e.url),M(),q(`ok`,n.callTone(e)===`ok`)(`bad`,n.callTone(e)===`bad`),M(),Y(n.statusLabel(e)),M(2),X(``,e.durationMs,` ms`),M(),F(e.cacheStored?9:e.cacheSkip?10:-1),M(2),F(!e.cacheStored&&e.cacheSkip?11:-1)}}function gG(e,t){e&1&&(z(0,`p`,56),J(1,`The render made no HttpClient calls.`),B())}function _G(e,t){e&1&&(z(0,`p`,92),J(1),B()),e&2&&(M(),X(`Why: `,t,`.`))}function vG(e,t){if(e&1&&(z(0,`p`,87)(1,`span`,76),J(2),B(),z(3,`span`,90),J(4),B(),z(5,`span`,83),J(6,`cache miss`),B()(),P(7,_G,2,1,`p`,92)),e&2){let e,n=t.$implicit,r=K(4);M(2),Y(n.method),M(),R(`title`,n.url),M(),Y(n.url),M(3),F((e=r.refetchReason(n))?7:-1,e)}}function yG(e,t){if(e&1&&(z(0,`h3`),J(1),B(),z(2,`p`,56),J(3,` These calls ran on the server and again after hydration instead of reading the transfer cache. `),B(),I(4,vG,8,4,null,null,GW)),e&2){let e=K(3);M(),X(`Fetched again in the browser (`,e.refetched().length,`)`),M(3),L(e.refetched())}}function bG(e,t){e&1&&(z(0,`p`,86),J(1,`No server call ran again in the browser.`),B())}function xG(e,t){if(e&1&&(z(0,`div`,72)(1,`h3`,84),J(2),z(3,`code`),J(4),B()(),z(5,`dl`,85)(6,`div`)(7,`dt`),J(8,`Request id`),B(),z(9,`dd`)(10,`code`),J(11),B()()(),z(12,`div`)(13,`dt`),J(14,`Render`),B(),z(15,`dd`),J(16),B()(),z(17,`div`)(18,`dt`),J(19,`Total`),B(),z(20,`dd`),J(21),B()(),z(22,`div`)(23,`dt`),J(24,`Sent`),B(),z(25,`dd`),J(26),B()(),z(27,`div`)(28,`dt`),J(29,`Browser page`),B(),z(30,`dd`),J(31),B()()(),P(32,tG,11,1,`p`,56),P(33,iG,6,0),P(34,dG,4,0),z(35,`h3`),J(36),B(),I(37,hG,12,11,null,null,GW,!1,gG,2,0,`p`,56),P(40,yG,6,1)(41,bG,2,0,`p`,86),B()),e&2){let e,n=t,r=K(2);M(2),X(` `,n.method,` `),M(2),Y(n.url),M(7),Y(n.id),M(5),X(``,n.renderMs,` ms`),M(5),X(``,n.durationMs,` ms`),M(5),X(``,n.bytes,` B`),M(5),Y(r.requestPage()?.title||r.requestPage()?.url||`not connected`),M(),F((e=r.compressedWith(n))?32:-1,e),M(),F(n.overrides?.length?33:-1),M(),F(n.navigations?.length?34:-1),M(2),X(`Server calls (`,r.requestCalls().length,`)`),M(),L(r.requestCalls()),M(3),F(r.refetched().length?40:r.requestPage()&&r.requestCalls().length?41:-1)}}function SG(e,t){if(e&1&&(z(0,`div`,26)(1,`table`)(2,`thead`)(3,`tr`)(4,`th`,69),J(5,`Request`),B(),z(6,`th`,69),J(7,`Status`),B(),z(8,`th`,69),J(9,`Render mode`),B(),z(10,`th`,70),J(11,`Render`),B(),z(12,`th`,70),J(13,`Server calls`),B(),z(14,`th`,69),J(15,`Notes`),B()()(),z(16,`tbody`),I(17,eG,20,20,`tr`,71,GW),B()()(),P(19,xG,42,13,`div`,72)),e&2){let e,t=K();M(17),L(t.requests()),M(2),F((e=t.selectedRequest())?19:-1,e)}}function CG(e,t){e&1&&(z(0,`div`,11)(1,`p`),J(2,`No SSR requests traced.`),B(),z(3,`p`,56),J(4,` Add `),z(5,`code`),J(6,`app.use(devtools.ssrMiddleware)`),B(),J(7,` before the Angular handler in `),z(8,`code`),J(9,`server.ts`),B(),J(10,`, then load a server rendered page. `),B()())}function wG(e,t){e&1&&(z(0,`span`,94),J(1,`transfer cache`),B())}function TG(e,t){if(e&1&&(z(0,`span`,94),J(1),B()),e&2){let e=K().$implicit;M(),X(`delayed `,e.delayMs,` ms`)}}function EG(e,t){e&1&&(z(0,`span`,82),J(1,`mocked`),B())}function DG(e,t){e&1&&(z(0,`span`,83),J(1,`faulted`),B())}function OG(e,t){if(e&1&&(z(0,`span`,97),J(1,`rule `),z(2,`code`),J(3),B()()),e&2){let e=t;R(`title`,`Matched rule: `+e),M(3),Y(e)}}function kG(e,t){if(e&1){let e=W();z(0,`tr`,73),G(`click`,function(){let t=O(e).$implicit;return k(K(2).openCall(t.id))}),z(1,`td`)(2,`span`,94),J(3),B()(),z(4,`td`,76),J(5),B(),z(6,`td`,74)(7,`button`,95),J(8),B()(),z(9,`td`,96),J(10),B(),z(11,`td`,77),V(12,`span`,78),J(13),B(),z(14,`td`,79),J(15),B(),z(16,`td`)(17,`div`,80),P(18,wG,2,0,`span`,94),P(19,TG,2,1,`span`,94),P(20,EG,2,0,`span`,82),P(21,DG,2,0,`span`,83),P(22,OG,4,2,`span`,97),B()()()}if(e&2){let e,n=t.$implicit,r=K(2);q(`selected`,r.selectedCall()?.id===n.id),M(2),q(`server`,n.side===`server`),M(),Y(n.side===`server`?`SSR`:`Client`),M(2),Y(n.method),M(2),R(`title`,n.url),N(`data-call-id`,n.id)(`aria-pressed`,r.selectedCall()?.id===n.id)(`aria-controls`,r.selectedCall()?`call-preview`:null),M(),X(` `,n.url,` `),M(),R(`title`,n.pageUrl??``),M(),X(` `,n.pageUrl??``,` `),M(),q(`ok`,r.callTone(n)===`ok`)(`redirect`,r.callTone(n)===`redirect`)(`bad`,r.callTone(n)===`bad`),M(2),X(``,r.statusLabel(n),` `),M(2),X(``,n.durationMs,` ms`),M(3),F(n.cacheHit?18:-1),M(),F(n.delayMs?19:-1),M(),F(n.mocked?20:-1),M(),F(n.faulted?21:-1),M(),F((e=r.rulePatternOf(n))?22:-1,e)}}function AG(e,t){if(e&1&&(z(0,`div`,26)(1,`table`)(2,`thead`)(3,`tr`)(4,`th`,69),J(5,`Side`),B(),z(6,`th`,69),J(7,`Method`),B(),z(8,`th`,69),J(9,`URL`),B(),z(10,`th`,69),J(11,`Page`),B(),z(12,`th`,69),J(13,`Status`),B(),z(14,`th`,70),J(15,`Time`),B(),z(16,`th`,69),J(17,`Notes`),B()()(),z(18,`tbody`,93),I(19,kG,23,26,`tr`,71,qW),B()()()),e&2){let e=K();M(19),L(e.visibleCalls())}}function jG(e,t){e&1&&J(0),e&2&&X(` Nothing matches “`,K(2).callQuery().trim(),`” with these filters. `)}function MG(e,t){e&1&&J(0),e&2&&X(` None of the `,K(2).timeline().length,` requests fit these filters. `)}function NG(e,t){if(e&1){let e=W();z(0,`div`,27)(1,`p`),J(2,`No requests match.`),B(),z(3,`p`,56),P(4,jG,1,1)(5,MG,1,1),B(),z(6,`div`,98)(7,`button`,68),G(`click`,function(){return O(e),k(K().clearCallFilters())}),J(8,`Clear filters`),B()()()}if(e&2){let e=K();M(4),F(e.callQuery().trim()?4:5)}}function PG(e,t){e&1&&(z(0,`div`,11)(1,`p`),J(2,`No requests yet.`),B(),z(3,`p`,56),J(4,` Add `),z(5,`code`),J(6,`withPangular()`),B(),J(7,` to `),z(8,`code`),J(9,`provideHttpClient`),B(),J(10,`, then load a page of the app. `),B()())}function FG(e,t){if(e&1){let e=W();z(0,`button`,105),G(`click`,function(){O(e);let t=K();return k(K().copyPreview(t))}),J(1,` Copy `),B()}if(e&2){let e=K();N(`aria-label`,`Copy the response of `+e.method+` `+e.url)}}function IG(e,t){e&1&&(z(0,`p`,107),J(1,` Matched rule `),z(2,`code`),J(3),B()()),e&2&&(M(3),Y(t))}function LG(e,t){if(e&1){let e=W();z(0,`div`,99),G(`keydown.escape`,function(){return O(e),k(K().closePreview())}),z(1,`div`,100)(2,`h3`,101),J(3,`Response preview`),B(),z(4,`div`,102),P(5,FG,2,1,`button`,103),z(6,`button`,104),G(`click`,function(){let t=O(e);return k(K().mockCall(t))}),J(7,` Mock this request `),B(),z(8,`button`,105),G(`click`,function(){return O(e),k(K().closePreview())}),J(9,`Close`),B()()(),z(10,`p`,106)(11,`span`,76),J(12),B(),z(13,`span`,77),J(14),B(),z(15,`span`,90),J(16),B()(),P(17,IG,4,1,`p`,107),z(18,`pre`,108),J(19),B()()}if(e&2){let e,n=t,r=K();M(5),F(!n.error&&n.preview?5:-1),M(),R(`disabled`,!r.canWrite()),N(`aria-describedby`,r.canWrite()?null:`http-writes-off`),M(6),Y(n.method),M(),q(`ok`,r.callTone(n)===`ok`)(`redirect`,r.callTone(n)===`redirect`)(`bad`,r.callTone(n)===`bad`),M(),Y(r.statusLabel(n)),M(),R(`title`,n.url),M(),Y(n.url),M(),F((e=r.rulePatternOf(n))?17:-1,e),M(),q(`error`,!!n.error&&!n.cancelled),N(`aria-label`,n.error?`Response error`:`Response body`),M(),Y(n.error??r.previewText(n)??`(no body)`)}}function RG(e,t){if(e&1&&(z(0,`p`,31),J(1),B()),e&2){let e=K();M(),Y(e.writesOff)}}function zG(e,t){e&1&&(z(0,`p`,46),J(1,` SSR mocks are not transferred to the client: the browser requests the URL again and gets the real response unless the rule also applies on the client. `),B())}function BG(e,t){e&1&&(z(0,`span`),J(1,`passthrough`),B())}function VG(e,t){if(e&1&&(z(0,`span`,77),J(1),B()),e&2){let e=K().$implicit,t=K();q(`ok`,t.statusTone(e.status)===`ok`)(`redirect`,t.statusTone(e.status)===`redirect`)(`bad`,t.statusTone(e.status)===`bad`),M(),Y(e.status)}}function HG(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),X(``,e.delayMs,` ms`)}}function UG(e,t){e&1&&(z(0,`span`),J(1,`mock body`),B())}function WG(e,t){e&1&&(z(0,`p`,116),J(1,` The SSR mock is not written to TransferState, so the browser requests this URL again. `),B())}function GG(e,t){if(e&1){let e=W();z(0,`li`)(1,`label`,109)(2,`input`,110),G(`change`,function(){let t=O(e).$implicit;return k(K().toggleRule(t.id))}),B(),z(3,`code`,111)(4,`span`,112),J(5),B(),J(6),B()(),z(7,`button`,113),G(`click`,function(){let t=O(e).$implicit;return k(K().removeRule(t.id))}),J(8,` Remove `),B(),z(9,`span`,114)(10,`span`),J(11),B(),P(12,BG,2,0,`span`)(13,VG,2,7,`span`,115),P(14,HG,2,1,`span`),P(15,UG,2,0,`span`),B(),P(16,WG,2,0,`p`,116),B()}if(e&2){let e=t.$implicit,n=K();q(`off`,!e.enabled),M(2),R(`checked`,e.enabled)(`disabled`,!n.canWrite()),N(`aria-describedby`,n.canWrite()?null:`http-writes-off`)(`aria-label`,`Enable rule for `+e.pattern),M(),R(`title`,e.pattern),M(2),Y(e.method||`ANY`),M(),X(` `,e.pattern),M(),R(`disabled`,!n.canWrite()),N(`aria-describedby`,n.canWrite()?null:`http-writes-off`)(`aria-label`,`Remove rule for `+e.pattern),M(4),Y(n.targetLabel(e.target)),M(),F(e.status===void 0?12:13),M(2),F(e.delayMs?14:-1),M(),F(e.body?15:-1),M(),F(n.mocksOnServer(e)?16:-1)}}function KG(e,t){e&1&&(z(0,`li`,53),J(1,`No rules. SSR rules apply on the next page load.`),B())}function qG(e,t){if(e&1){let e=W();z(0,`p`,61),J(1,` Throws while the server renders, so it needs `),z(2,`code`),J(3,`providePangularHttp()`),B(),J(4,` and a page the engine renders. Prerendered files served as static files skip it. `),B(),z(5,`label`),J(6,` Error message `),z(7,`input`,117),G(`input`,function(t){return O(e),k(K().patchOverride(`message`,t))}),B()()}if(e&2){let e=K();M(7),R(`value`,e.overrideDraft().message)}}function JG(e,t){e&1&&J(0,` For a cached HTTP response this is the whole cache record, not only the response body. `)}function YG(e,t){e&1&&(z(0,`p`,121),J(1,` Filled in from the TransferState payload. The value starts empty because the panel only shows a redacted copy, so type the JSON the server should send. `),P(2,JG,1,0),B()),e&2&&(M(2),F(t===`http`?2:-1))}function XG(e,t){if(e&1){let e=W();z(0,`label`),J(1,` TransferState key `),z(2,`input`,118),G(`input`,function(t){return O(e),k(K().patchOverride(`key`,t))}),B()(),z(3,`label`)(4,`span`),J(5,`New JSON value `),z(6,`span`,33),J(7,`(empty removes the entry)`),B()(),z(8,`textarea`,119),G(`input`,function(t){return O(e),k(K().patchOverride(`value`,t))}),B()(),z(9,`p`,120),J(10),B(),P(11,YG,3,1,`p`,121)}if(e&2){let e,t=K();M(2),R(`value`,t.overrideDraft().key),M(6),R(`value`,t.overrideDraft().value),N(`aria-invalid`,t.overrideValueError()?`true`:null)(`aria-describedby`,t.overrideFromPayload()?`override-value-error override-value-note`:`override-value-error`),M(2),Y(t.overrideValueError()),M(),F((e=t.overrideFromPayload())?11:-1,e)}}function ZG(e,t){e&1&&(z(0,`p`,61),J(1,` Serves `),z(2,`code`),J(3,`index.csr.html`),B(),J(4,` instead of rendering. Needs `),z(5,`code`),J(6,`browserDistFolder`),B(),J(7,` in `),z(8,`code`),J(9,`initPangularHub()`),B(),J(10,`. `),B())}function QG(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.message)}}function $G(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),Z(``,e.value===void 0?`remove`:`set`,` `,e.key)}}function eK(e,t){if(e&1){let e=W();z(0,`li`)(1,`label`,109)(2,`input`,110),G(`change`,function(){let t=O(e).$implicit;return k(K().toggleOverride(t.id))}),B(),z(3,`code`,111)(4,`span`,112),J(5),B(),J(6),B()(),z(7,`button`,122),G(`click`,function(){let t=O(e).$implicit;return k(K().removeOverride(t.id))}),J(8,` Remove `),B(),z(9,`span`,114),P(10,QG,2,1,`span`),P(11,$G,2,2,`span`),B()()}if(e&2){let e=t.$implicit,n=K();q(`off`,!e.enabled),M(2),R(`checked`,e.enabled)(`disabled`,!n.canWrite()),N(`aria-label`,`Enable `+n.overrideLabel(e.kind)+` for `+e.pattern),M(),R(`title`,e.pattern),M(2),Y(n.overrideLabel(e.kind)),M(),X(` `,e.pattern),M(),R(`disabled`,!n.canWrite()),N(`aria-label`,`Remove `+n.overrideLabel(e.kind)+` for `+e.pattern),M(3),F(e.message?10:-1),M(),F(e.key?11:-1)}}function tK(e,t){e&1&&(z(0,`li`,53),J(1,`No overrides.`),B())}function nK(e,t){if(e&1&&(z(0,`div`)(1,`dt`),J(2,`DOM nodes hydrated`),B(),z(3,`dd`),J(4),B()(),z(5,`div`)(6,`dt`),J(7,`DOM nodes skipped`),B(),z(8,`dd`),J(9),B()(),z(10,`div`)(11,`dt`),J(12,`Mismatched components`),B(),z(13,`dd`),J(14),B()()),e&2){let e=t;M(4),Y(e.hydrated),M(5),Y(e.skipped),M(4),q(`bad`,e.mismatched>0),M(),Y(e.mismatched)}}function rK(e,t){if(e&1&&(z(0,`span`,124)(1,`span`,125),J(2,`Expected`),B(),z(3,`code`),J(4),B()()),e&2){let e=K().$implicit;M(4),Y(e.expected)}}function iK(e,t){if(e&1&&(z(0,`span`,124)(1,`span`,125),J(2,`Actual`),B(),z(3,`code`),J(4),B()()),e&2){let e=K().$implicit;M(4),Y(e.actual)}}function aK(e,t){if(e&1&&(z(0,`li`)(1,`code`),J(2),B(),P(3,rK,5,1,`span`,124),P(4,iK,5,1,`span`,124),B()),e&2){let e=t.$implicit;M(2),Y(`<`+e.component+`>`),M(),F(e.expected?3:-1),M(),F(e.actual?4:-1)}}function oK(e,t){if(e&1&&(z(0,`h3`),J(1),B(),z(2,`ul`,123),I(3,aK,5,3,`li`,null,Dg),B()),e&2){let e=K();M(),X(`Mismatches (`,e.mismatches.length,`)`),M(2),L(e.mismatches)}}function sK(e,t){if(e&1&&(z(0,`li`)(1,`code`),J(2),B()()),e&2){let e=t.$implicit;M(2),Y(e)}}function cK(e,t){if(e&1&&(z(0,`h3`),J(1,`ngSkipHydration hosts`),B(),z(2,`ul`,126),I(3,sK,3,1,`li`,null,Dg),B()),e&2){let e=K();M(3),L(e.skipHydrationHosts)}}function lK(e,t){e&1&&(z(0,`h3`),J(1,`Warnings`),B(),z(2,`p`,56),J(3,` Not captured: add `),z(4,`code`),J(5,`providePangularHttp()`),B(),J(6,` to the app providers. `),B())}function uK(e,t){if(e&1&&(z(0,`pre`,127),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function dK(e,t){e&1&&(z(0,`p`,86),J(1,`No hydration warnings.`),B())}function fK(e,t){if(e&1&&(z(0,`h3`),J(1),B(),I(2,uK,2,1,`pre`,127,Dg,!1,dK,2,0,`p`,86)),e&2){let e=K();M(),X(`Warnings (`,e.warnings.length,`)`),M(),L(e.warnings)}}function pK(e,t){if(e&1&&(z(0,`dl`,85)(1,`div`)(2,`dt`),J(3,`Enabled`),B(),z(4,`dd`)(5,`span`,94),J(6),B()()(),z(7,`div`)(8,`dt`),J(9,`Hydrated components`),B(),z(10,`dd`),J(11),B()(),z(12,`div`)(13,`dt`),J(14,`Hydrated nodes`),B(),z(15,`dd`),J(16),B()(),z(17,`div`)(18,`dt`),J(19,`Skipped components`),B(),z(20,`dd`),J(21),B()(),z(22,`div`)(23,`dt`),J(24,`App stable after`),B(),z(25,`dd`),J(26),B()(),z(27,`div`)(28,`dt`),J(29,`Incremental defer blocks`),B(),z(30,`dd`),J(31),B()(),P(32,nK,15,5),B(),P(33,oK,5,1),P(34,cK,5,0),P(35,lK,7,0)(36,fK,5,2)),e&2){let e,n=t;M(5),q(`on`,n.enabled)(`off-tag`,!n.enabled),M(),Y(n.enabled?`yes`:`no (client render only)`),M(5),Y(n.hydratedComponents??`n/a`),M(5),Y(n.hydratedNodes??`n/a`),M(5),Y(n.componentsSkippedHydration??`n/a`),M(5),Y(n.stableMs===void 0?`n/a`:n.stableMs+` ms`),M(5),Y(n.deferBlocksWithIncrementalHydration??`n/a`),M(),F((e=n.nodes)?32:-1,e),M(),F(n.mismatches?.length?33:-1),M(),F(n.skipHydrationHosts.length?34:-1),M(),F(n.warningsCaptured===!1?35:36)}}function mK(e,t){e&1&&(z(0,`div`,11)(1,`p`),J(2,`No hydration data for this page.`),B(),z(3,`p`,56),J(4,`Open a server rendered page of the app to see its stats.`),B()())}function hK(e,t){e&1&&(z(0,`div`,11)(1,`p`),J(2,`No TransferState script: this page was not server rendered.`),B()())}function gK(e,t){if(e&1&&(z(0,`p`,129),J(1),B()),e&2){let e=K(2);M(),Y(e.error)}}function _K(e,t){e&1&&(z(0,`span`,94),J(1),B()),e&2&&(M(),Y(t))}function vK(e,t){if(e&1&&(z(0,`span`,94),J(1),B(),z(2,`span`,132),J(3),B()),e&2){let e=t,n=K().$implicit,r=K(3);q(`server`,r.statusTone(e.status)===`ok`)(`fault`,r.statusTone(e.status)===`bad`),M(),X(`HTTP `,e.status),M(2),Y(e.url??n.key)}}function yK(e,t){if(e&1&&(z(0,`span`,132),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.key)}}function bK(e,t){if(e&1){let e=W();z(0,`button`,105),G(`click`,function(){O(e);let t=K().$implicit;return k(K(3).editEntry(t))}),J(1,` Edit in SSR overrides `),B()}if(e&2){let e=K().$implicit;N(`aria-label`,`Edit in SSR overrides, key `+e.key)}}function xK(e,t){if(e&1){let e=W();z(0,`details`)(1,`summary`),V(2,`span`,131),P(3,_K,2,1,`span`,94),P(4,vK,4,6)(5,yK,2,1,`span`,132),z(6,`span`,133),J(7),B()(),z(8,`div`,134)(9,`span`,135),J(10,`Key`),B(),z(11,`code`,136),J(12),B(),z(13,`div`,137)(14,`button`,105),G(`click`,function(){let t=O(e).$implicit;return k(K(3).copyKey(t.key))}),J(15,` Copy `),B(),P(16,bK,2,1,`button`,103),B()(),z(17,`pre`,138),J(18),yv(19,`json`),B()()}if(e&2){let e,n,r=t.$implicit,i=K(3);M(3),F((e=i.payloadLabel(r))?3:-1,e),M(),F((n=r.http)?4:5,n),M(3),X(``,r.size,` B`),M(5),Y(r.key),M(2),N(`aria-label`,`Copy key `+r.key),M(2),F(i.canEditEntry(r)?16:-1),M(),N(`aria-label`,`Value of `+r.key),M(),Y(xv(19,8,r.value))}}function SK(e,t){if(e&1&&(z(0,`p`,128),J(1),B(),P(2,gK,2,1,`p`,129),z(3,`div`,130),I(4,xK,20,10,`details`,null,JW),B()),e&2){let e=K();M(),rv(` `,e.entries.length,` entr`,e.entries.length===1?`y`:`ies`,`, `,e.size,` bytes `),M(),F(e.error?2:-1),M(2),L(e.entries)}}function CK(e,t){e&1&&P(0,hK,3,0,`div`,11)(1,SK,6,4),e&2&&F(+!!t.found)}function wK(e,t){e&1&&(z(0,`div`,11)(1,`p`),J(2,`Open a page of the app to see its payload.`),B()())}var TK={kind:`render-error`,pattern:``,message:``,key:``,value:``},EK={"render-error":`Render error`,"client-render":`Client render`,"state-edit":`TransferState edit`},DK={server:`Server`,prerender:`Prerender`,client:`Client`,redirect:`Redirect`,"not-rendered":`Not rendered`,unknown:`Unknown`},OK={pattern:``,method:``,target:`both`,status:``,delayMs:``,body:``};function kK(e){try{let t=new URL(e,`http://x`);return t.pathname+t.search}catch{return e}}var AK=/\[redacted\]|%5Bredacted%5D/gi;function jK(e){return(/^([a-z][a-z\d+.-]*:|\/\/)/i.test(e)?kK(e):e).replace(AK,`*`)}function MK(e){let t=tO(e);if(t!==null)return t;try{return JSON.parse(e),e.trim()}catch{return null}}var NK=[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`];function PK(e){try{return new URL(e,`http://x`).pathname}catch{return``}}function FK(e){let t=PK(e);return t===`/`?``:t}var IK=/\[redacted\]|%5Bredacted%5D/i,LK=200,RK=50,zK=500,BK=1e5,VK=[{value:``,label:`None`},...WT.map(([e,t])=>({value:String(e),label:`${e} ${t}`}))],HK=class e{rpc=$(null);canWrite=Q(()=>AE(this.rpc(),`http`));writesOff=nE(`http`);loading=j(!1);failed=j(!1);serverCalls=j([]);pages=j([]);payloads=j({});serverDropped=j(0);requests=j([]);rules=j([]);overrides=j([]);overrideDraft=j({...TK});overrideFromPayload=j(null);overrideKindOptions=[{value:`render-error`,label:`Render error`},{value:`client-render`,label:`Force Client render`},{value:`state-edit`,label:`Edit TransferState entry`}];overrideValueError=Q(()=>{let e=this.overrideDraft().value.trim();if(!e)return``;try{return JSON.parse(e),``}catch{return`The value must be valid JSON.`}});overrideReady=Q(()=>{let e=this.overrideDraft();return!e.pattern.trim()||this.overrides().length>=20?!1:e.kind!==`state-edit`||!!e.key.trim()&&!this.overrideValueError()});hostPageId=uE();selectedPageId=Nv({source:()=>this.pages(),computation:(e,t)=>t?.value&&e.some(e=>e.pageId===t.value)?t.value:e.find(e=>e.pageId===this.hostPageId)?.pageId??e[0]?.pageId??null});selectedCallId=j(null);draft=j({...OK});message=j(``);bodyPlaceholder=`{ "error": "Service unavailable" }`;statusOptions=VK;unsubscribe=[];destroyRef=E(ws);injector=E(Ss);host=E(Nl);selected=Q(()=>this.pages().find(e=>e.pageId===this.selectedPageId())??null);pageRequestId=Q(()=>this.selected()?.ssrRequestId??null);selectedRequestId=Nv(()=>this.pageRequestId());selectedPayload=Q(()=>{let e=this.selectedPageId();return e?this.payloads()[e]??null:null});maxCalls=Q(()=>kE(this.rpc()).limits.httpCalls);droppedCalls=Q(()=>(this.selected()?.dropped??0)+this.serverDropped());pageServerCalls=Q(()=>{let e=this.selected()?.initialUrl;return e?this.serverCalls().filter(t=>!t.pageUrl||t.pageUrl===e):this.serverCalls()});timeline=Q(()=>[...this.pageServerCalls(),...this.selected()?.calls??[]].sort((e,t)=>t.at-e.at));callQuery=j(``);sideFilter=j(`all`);failedOnly=j(!1);sideOptions=[{value:`all`,label:`All sides`},{value:`server`,label:`SSR`},{value:`client`,label:`Client`}];visibleCalls=Q(()=>{let e=this.callQuery().trim().toLowerCase(),t=this.sideFilter()??`all`,n=this.failedOnly();return this.timeline().filter(r=>(t===`all`||r.side===t)&&(!n||this.isFailed(r))&&(!e||`${r.method} ${r.url}`.toLowerCase().includes(e)||`${r.method} ${kK(r.url)}`.toLowerCase().includes(e)))});filterStatus=Q(()=>{this.callQuery(),this.sideFilter(),this.failedOnly(),this.filterFlip=!this.filterFlip;let e=jv(()=>`${this.visibleCalls().length} of ${this.timeline().length}`);return this.filterFlip?`${e}\u00a0`:e});filterFlip=!0;selectedCall=Q(()=>this.visibleCalls().find(e=>e.id===this.selectedCallId())??null);selectedRequest=Q(()=>this.requests().find(e=>e.id===this.selectedRequestId())??null);requestCalls=Q(()=>{let e=this.selectedRequest()?.id;return e?this.serverCalls().filter(t=>t.requestId===e):[]});requestPage=Q(()=>{let e=this.selectedRequest()?.id;return e?this.pages().find(t=>t.ssrRequestId===e)??null:null});refetched=Q(()=>{let e=this.selectedRequest(),t=this.requestPage();if(!e||!t)return[];let n=new Set(this.requestCalls().filter(e=>e.status).map(e=>`${e.method} ${kK(e.url)}`));return t.calls.filter(t=>t.side===`client`&&!t.cacheHit&&!t.mocked&&t.at>=e.at&&n.has(`${t.method} ${kK(t.url)}`))});draftMocksOnServer=Q(()=>{let e=this.draftRule();return!!e&&this.mocksOnServer(e)});draftRule=Q(()=>{let e=this.draft(),t=e.pattern.trim();if(!t||t.length>zK||this.bodyError()||this.rules().length>=RK)return null;let n=e.body.trim(),r=Math.min(Math.max(Math.round(Number(e.delayMs))||0,0),1e4),i=e.status.trim()?Number(e.status):n?200:void 0;return i!==void 0&&!GT(i)||i===void 0&&!r?null:{pattern:t,enabled:!0,target:e.target,...e.method?{method:e.method}:{},...i===void 0?{}:{status:i},...r?{delayMs:r}:{},...n?{body:n}:{}}});draftHint=Q(()=>{let e=this.draft();return this.rules().length>=RK?`You can add up to ${RK} rules. Remove one to add another.`:e.pattern.trim()?e.pattern.trim().length>zK?`The URL pattern is limited to ${zK} characters.`:this.bodyError()?``:e.status.trim()&&!GT(Number(e.status))?`Pick a status from the list.`:this.draftRule()?!e.status.trim()&&e.body.trim()?`With no status, the mock body returns 200.`:``:`Set a status, a delay or a mock body.`:`Enter a URL pattern to add a rule.`});bodyError=Q(()=>{let e=this.draft().body.trim();if(!e)return``;if(e.length>BK)return`The mock body is limited to ${BK} characters.`;try{return JSON.parse(e),``}catch{return`The mock body must be valid JSON.`}});constructor(){dc(()=>{let e=this.rpc();e&&this.load(e)}),this.destroyRef.onDestroy(()=>this.stopListening())}async load(e){this.loading.set(!0),this.failed.set(!1);try{let t=e.scope(`pangular`).rpc,[n,r]=await Promise.all([t.sharedState(`http`),t.sharedState(`http-payloads`)]);if(this.destroyRef.destroyed)return;let i=e=>{let t=e;this.serverCalls.set(t?.serverCalls??[]),this.serverDropped.set(t?.serverDropped??0),this.requests.set([...t?.requests??[]].reverse()),this.pages.set(t?.pages??[]),this.rules.set(t?.rules??[]),this.overrides.set(t?.ssrOverrides??[])},a=e=>this.payloads.set(e?.pages??{});i(n.value()),a(r.value()),this.stopListening(),this.unsubscribe=[n.on(`updated`,i),r.on(`updated`,a)]}catch{this.failed.set(!0)}finally{this.loading.set(!1)}}retry(){let e=this.rpc();e&&this.load(e)}guardVerdict(e){return e.guards?.passed===!1?e.outcome===`redirected`?`redirected`:`rejected`:``}msLabel(e){return e===void 0?`n/a`:`${e} ms`}skipText(e){return UT[e]??``}refetchReason(e){let t=`${e.method} ${kK(e.url)}`,n=this.requestCalls().filter(e=>`${e.method} ${kK(e.url)}`===t),r=n[0];return r?.cacheSkip&&n.every(e=>e.cacheSkip===r.cacheSkip)?this.skipText(r.cacheSkip):``}compressedWith(e){if(e.compressedBeforeTrace)return e.headers[`content-encoding`]??`unknown encoding`}renderModeLabel(e){return DK[e]??`Unknown`}statusLabel(e){return e.cancelled?`cancelled`:e.status?String(e.status):`ERR`}callTone(e){return e.cancelled?`neutral`:this.statusTone(e.status)}isFailed(e){return!!e.cancelled||!e.status||e.status>=400}clearCallFilters(){this.callQuery.set(``),this.sideFilter.set(`all`),this.failedOnly.set(!1),this.host.nativeElement.querySelector(`#timeline-search`)?.focus()}rulePatternOf(e){return e.rulePattern?e.rulePattern:e.ruleId?this.rules().find(t=>t.id===e.ruleId)?.pattern??null:null}openCall(e){this.selectedCallId.set(e),zd(()=>this.host.nativeElement.querySelector(`#preview-heading`)?.focus(),{injector:this.injector})}previewText(e){if(e.preview!==void 0)return tO(e.preview)??e.preview}async copyPreview(e){let t=this.previewText(e);if(t)try{await navigator.clipboard.writeText(t),this.message.set(`Copied.`)}catch{this.message.set(`The clipboard is not available here.`)}}mockCall(e){let t=e.method.toUpperCase(),n=jK(e.url),r=e.error||!e.preview?null:MK(e.preview);this.draft.set({...OK,pattern:n,method:t,body:r??``});let i=`${t} ${n}`;this.message.set(r?`Filled in a rule for ${i} with the preview as its body. Check it, then add the rule.`:e.preview&&!e.error?`Filled in a rule for ${i}. The preview is not complete JSON, so it is not used as the body.`:`Filled in a rule for ${i}. Set a status, a delay or a body, then add the rule.`),zd(()=>this.host.nativeElement.querySelector(`#rule-pattern`)?.focus(),{injector:this.injector})}closePreview(){let e=this.selectedCallId();this.selectedCallId.set(null),e&&[...this.host.nativeElement.querySelectorAll(`button[data-call-id]`)].find(t=>t.dataset.callId===e)?.focus()}stopListening(){for(let e of this.unsubscribe.splice(0))e()}statusTone(e){return e===void 0?`neutral`:e===0||e>=400?`bad`:e>=300?`redirect`:e>=200?`ok`:`neutral`}mocksOnServer(e){return e.target!==`client`&&e.status!==void 0&&e.status<400}payloadLabel(e){return e.source===`hydration`?`hydration annotations`:e.fn?`Analog server function ${e.fn.name??e.fn.id}`:e.source===`analog`?`Analog`:null}targetLabel(e){return e===`both`?`SSR + client`:e===`server`?`SSR only`:`Client only`}pageOptions=Q(()=>this.pages().map(e=>({value:e.pageId,label:e.title||e.url})));methodOptions=Q(()=>{let e=this.draft().method;return[{value:``,label:`Any`},...(e&&!NK.includes(e)?[...NK,e]:NK).map(e=>({value:e,label:e}))]});targetOptions=[{value:`both`,label:`SSR + client`},{value:`server`,label:`SSR only`},{value:`client`,label:`Client only`}];selectPage(e){e&&this.selectedPageId.set(e),this.selectedCallId.set(null),this.overrideFromPayload.set(null)}setDraft(e,t){this.draft.update(n=>({...n,[e]:t}))}patch(e,t){let n=t.target.value;this.draft.update(t=>({...t,[e]:n}))}async addRule(e){e.preventDefault();let t=this.draftRule();if(!t)return;let n={id:`r${Date.now().toString(36)}${Math.random().toString(36).slice(2,6)}`,...t};await this.saveRules([...this.rules(),n],`Rule added.`,n)&&(this.draft.set({...OK}),this.host.nativeElement.querySelector(`#rule-pattern`)?.focus())}toggleRule(e){let t=this.rules().find(t=>t.id===e);t&&this.saveRules(this.rules().map(t=>t.id===e?{...t,enabled:!t.enabled}:t),`Rule updated.`,t)}async removeRule(e){let t=this.rules().findIndex(t=>t.id===e);if(t<0)return;let n=this.rules().filter(t=>t.id!==e);await this.saveRules(n,`Rule removed.`,this.rules()[t])&&this.focusAfterRemove(`[data-remove-rule]`,t,`#rule-list-heading`)}async clearCalls(){try{await mE(this.rpc(),`clear-http-calls`),this.selectedCallId.set(null),this.message.set(`Timeline cleared.`)}catch{this.message.set(`Could not clear the timeline.`)}}overrideLabel(e){return EK[e]??e}setOverrideDraft(e,t){this.overrideDraft.update(n=>({...n,[e]:t})),e===`kind`&&t!==`state-edit`&&this.overrideFromPayload.set(null)}patchOverride(e,t){let n=t.target.value;this.overrideDraft.update(t=>({...t,[e]:n})),e===`key`&&this.overrideFromPayload.set(null)}async copyKey(e){try{await navigator.clipboard.writeText(e),this.message.set(`Copied.`)}catch{this.message.set(`The clipboard is not available here.`)}}canEditEntry(e){let{key:t}=e;return this.canWrite()&&!!t&&t===t.trim()&&t.length<=LK&&!IK.test(t)}editEntry(e){if(!this.canEditEntry(e))return;let t=this.selected();this.overrideDraft.set({...TK,kind:`state-edit`,pattern:t?FK(t.initialUrl??t.url):``,key:e.key}),this.overrideFromPayload.set(e.http?`http`:`other`),this.message.set(`Editing the TransferState entry in SSR overrides.`),zd(()=>{let e=this.host.nativeElement.querySelector(this.overrideDraft().pattern?`#override-value`:`#override-pattern`);e?.scrollIntoView?.({block:`center`}),e?.focus()},{injector:this.injector})}async addOverride(e){if(e.preventDefault(),!this.overrideReady())return;let t=this.overrideDraft(),n={id:`o${Date.now().toString(36)}${Math.random().toString(36).slice(2,6)}`,kind:t.kind,pattern:t.pattern.trim(),enabled:!0,...t.kind===`render-error`&&t.message.trim()?{message:t.message.trim()}:{},...t.kind===`state-edit`?{key:t.key.trim()}:{},...t.kind===`state-edit`&&t.value.trim()?{value:t.value.trim()}:{}};await this.saveOverrides([...this.overrides(),n],`Override added. Reload the page.`)&&(this.overrideDraft.set({...TK,kind:t.kind}),this.overrideFromPayload.set(null),this.host.nativeElement.querySelector(`#override-pattern`)?.focus())}toggleOverride(e){this.saveOverrides(this.overrides().map(t=>t.id===e?{...t,enabled:!t.enabled}:t),`Override updated. Reload the page.`)}async removeOverride(e){let t=this.overrides().findIndex(t=>t.id===e);if(t<0)return;let n=this.overrides().filter(t=>t.id!==e);await this.saveOverrides(n,`Override removed.`)&&this.focusAfterRemove(`[data-remove-override]`,t,`#override-list-heading`)}focusAfterRemove(e,t,n){zd(()=>{let r=this.host.nativeElement,i=r.querySelectorAll(e);(i[Math.min(t,i.length-1)]??r.querySelector(n))?.focus()},{injector:this.injector})}announce(e){if(this.message()!==e){this.message.set(e);return}this.message.set(``),zd(()=>{this.message()===``&&this.message.set(e)},{injector:this.injector})}async saveOverrides(e,t){try{let n=await mE(this.rpc(),`set-ssr-overrides`,e);return this.overrides.set(Array.isArray(n)?n:e),this.announce(t),!0}catch{return this.message.set(`Could not save the overrides.`),!1}}async saveRules(e,t,n){try{let r=await mE(this.rpc(),`set-http-rules`,e);return this.rules.set(Array.isArray(r)?r:e),this.announce(n.target===`client`?t:`${t} Reload the page to apply it to SSR.`),!0}catch{return this.message.set(`Could not save the rules.`),!1}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-network-inspector`]],inputs:{rpc:[1,`rpc`]},decls:128,vars:54,consts:[[`role`,`status`,1,`state`],[`role`,`alert`,1,`state`,`error`],[1,`toolbar`],[1,`page-picker`],[`id`,`page-picker-label`],[`labelledBy`,`page-picker-label`,`emptyText`,`No connected page`,`placeholder`,`No connected page`,3,`valueChange`,`options`,`value`],[`type`,`button`,3,`click`,`disabled`],[`role`,`status`,1,`message`],[1,`grid`],[`aria-labelledby`,`ssr-heading`,1,`panel`,`wide`],[`id`,`ssr-heading`],[1,`empty`],[`aria-labelledby`,`timeline-heading`,1,`panel`,`wide`],[`id`,`timeline-heading`],[`what`,`HTTP calls`,`limit`,`httpCalls`,3,`dropped`,`max`],[`role`,`group`,`aria-label`,`Filter the HTTP timeline`,1,`filters`],[1,`search`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`search-icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`id`,`timeline-search`,`type`,`search`,`placeholder`,`Find a URL or method…`,`aria-label`,`Find a URL or method`,`autocomplete`,`off`,`spellcheck`,`false`,3,`input`,`keydown.escape`,`value`],[`ariaLabel`,`Side`,1,`side-filter`,3,`valueChange`,`options`,`value`],[1,`inline`,`failed-toggle`],[`type`,`checkbox`,3,`change`,`checked`],[1,`total`],[`role`,`status`,1,`sr-only`],[1,`table-wrap`],[`role`,`status`,1,`empty`,`no-match`],[`id`,`call-preview`,`role`,`region`,`aria-labelledby`,`preview-heading`,1,`preview`],[`aria-labelledby`,`rules-heading`,1,`panel`],[`id`,`rules-heading`],[`id`,`http-writes-off`,1,`muted`,`small`],[`id`,`rule-form`,1,`rule-form`,3,`submit`],[1,`hint`],[`id`,`rule-pattern`,`required`,``,`spellcheck`,`false`,`autocomplete`,`off`,`placeholder`,`e.g. /api/products`,3,`input`,`value`],[1,`row`],[1,`field-group`],[`id`,`rule-method-label`],[`labelledBy`,`rule-method-label`,3,`valueChange`,`options`,`value`],[`id`,`rule-target-label`],[`labelledBy`,`rule-target-label`,3,`valueChange`,`describedBy`,`options`,`value`],[`id`,`rule-status-label`],[`labelledBy`,`rule-status-label`,3,`valueChange`,`describedBy`,`options`,`value`],[`type`,`number`,`inputmode`,`numeric`,`min`,`0`,`max`,`10000`,`placeholder`,`0`,3,`input`,`value`],[`rows`,`3`,`spellcheck`,`false`,`aria-describedby`,`body-error`,3,`input`,`placeholder`,`value`],[`id`,`body-error`,1,`field-error`],[`id`,`rule-ssr-note`,1,`muted`,`small`],[`id`,`rule-hint`,1,`muted`,`small`],[1,`form-actions`],[`type`,`submit`,3,`disabled`],[`id`,`rule-list-heading`,`tabindex`,`-1`,1,`rules-heading`],[1,`rules`],[3,`off`],[1,`empty-rule`],[`aria-labelledby`,`overrides-heading`,1,`panel`],[`id`,`overrides-heading`],[1,`muted`,`small`],[1,`rule-form`,3,`submit`],[`id`,`override-kind-label`],[`labelledBy`,`override-kind-label`,3,`valueChange`,`describedBy`,`options`,`value`],[`id`,`override-pattern`,`required`,``,`spellcheck`,`false`,`autocomplete`,`off`,`placeholder`,`e.g. /examples/ssr`,3,`input`,`value`],[`id`,`override-kind-help`,1,`muted`,`small`],[`id`,`override-list-heading`,`tabindex`,`-1`,1,`rules-heading`],[`aria-labelledby`,`hydration-heading`,1,`panel`],[`id`,`hydration-heading`],[`aria-labelledby`,`payload-heading`,1,`panel`,`wide`],[`id`,`payload-heading`],[`aria-hidden`,`true`,1,`spinner`],[`type`,`button`,3,`click`],[`scope`,`col`],[`scope`,`col`,1,`num`],[3,`selected`],[`id`,`ssr-detail`,`role`,`region`,`aria-labelledby`,`ssr-detail-heading`,1,`preview`],[3,`click`],[1,`url`],[`type`,`button`,`aria-controls`,`ssr-detail`,1,`link`,3,`title`],[1,`method`],[1,`status`],[`aria-hidden`,`true`,1,`dot`],[1,`num`],[1,`notes`],[1,`tag`,`server`],[1,`tag`,`mock`],[1,`tag`,`fault`],[`id`,`ssr-detail-heading`],[1,`stats`],[1,`muted`,`small`,`ok-note`],[1,`request-call`],[1,`muted`],[1,`stats`,`nav-stats`],[1,`preview-url`,3,`title`],[1,`tag`,3,`title`],[1,`muted`,`small`,`skip-reason`],[`appRovingList`,`button[data-call-id]`],[1,`tag`],[`type`,`button`,1,`link`,3,`title`],[1,`page-url`,3,`title`],[1,`tag`,`rule-ref`,3,`title`],[1,`empty-actions`],[`id`,`call-preview`,`role`,`region`,`aria-labelledby`,`preview-heading`,1,`preview`,3,`keydown.escape`],[1,`preview-head`],[`id`,`preview-heading`,`tabindex`,`-1`],[1,`preview-actions`],[`type`,`button`,1,`ghost`],[`type`,`button`,`aria-controls`,`rule-form`,1,`ghost`,3,`click`,`disabled`],[`type`,`button`,1,`ghost`,3,`click`],[1,`preview-meta`],[1,`preview-rule`],[`tabindex`,`0`,`role`,`region`,1,`preview-body`],[1,`inline`],[`type`,`checkbox`,3,`change`,`checked`,`disabled`],[1,`rule-pattern`,3,`title`],[1,`rule-method`],[`type`,`button`,`data-remove-rule`,``,1,`link`,`remove`,3,`click`,`disabled`],[1,`rule-meta`],[1,`status`,3,`ok`,`redirect`,`bad`],[1,`rule-note`],[`spellcheck`,`false`,`placeholder`,`Simulated render error`,`aria-describedby`,`override-kind-help`,3,`input`,`value`],[`id`,`override-key`,`spellcheck`,`false`,`autocomplete`,`off`,3,`input`,`value`],[`id`,`override-value`,`rows`,`3`,`spellcheck`,`false`,3,`input`,`value`],[`id`,`override-value-error`,1,`field-error`],[`id`,`override-value-note`,1,`muted`,`small`],[`type`,`button`,`data-remove-override`,``,1,`link`,`remove`,3,`click`,`disabled`],[1,`plain`,`mismatches`],[1,`mismatch-row`],[1,`mismatch-label`],[1,`plain`],[1,`warn`],[1,`muted`,`small`,`summary-line`],[`role`,`alert`,1,`bad`],[1,`entries`],[`aria-hidden`,`true`,1,`chevron`],[1,`entry-key`],[1,`entry-size`],[1,`entry-key-row`],[1,`entry-key-label`],[1,`entry-key-text`],[1,`entry-actions`],[`tabindex`,`0`,`role`,`region`]],template:function(e,t){if(e&1&&(P(0,YW,4,0,`div`,0)(1,XW,7,0,`div`,1),z(2,`div`,2)(3,`div`,3)(4,`span`,4),J(5,`Page`),B(),z(6,`app-select`,5),G(`valueChange`,function(e){return t.selectPage(e)}),B()(),z(7,`button`,6),G(`click`,function(){return t.clearCalls()}),J(8,` Clear timeline `),B(),z(9,`p`,7),J(10),B()(),z(11,`div`,8)(12,`section`,9)(13,`h2`,10),J(14),B(),P(15,SG,20,1)(16,CG,11,0,`div`,11),B(),z(17,`section`,12)(18,`h2`,13),J(19),B(),V(20,`app-limit-note`,14),z(21,`div`,15)(22,`div`,16),A(),z(23,`svg`,17),V(24,`circle`,18)(25,`path`,19),B(),ms(),z(26,`input`,20),G(`input`,function(e){return t.callQuery.set(e.target.value)})(`keydown.escape`,function(){return t.callQuery.set(``)}),B()(),z(27,`app-select`,21),cv(`valueChange`,function(e){return sv(t.sideFilter,e)||(t.sideFilter=e),e}),B(),z(28,`label`,22)(29,`input`,23),G(`change`,function(e){return t.failedOnly.set(e.target.checked)}),B(),J(30,` Failed only `),B(),z(31,`span`,24),J(32),B(),z(33,`span`,25),J(34),B()(),P(35,AG,21,0,`div`,26)(36,NG,9,1,`div`,27)(37,PG,11,0,`div`,11),P(38,LG,20,18,`div`,28),B(),z(39,`section`,29)(40,`h2`,30),J(41,`Fault injection`),B(),P(42,RG,2,1,`p`,31),z(43,`form`,32),G(`submit`,function(e){return t.addRule(e)}),z(44,`label`)(45,`span`),J(46,`URL pattern `),z(47,`span`,33),J(48,`(substring or * glob, ^ anchors the path)`),B()(),z(49,`input`,34),G(`input`,function(e){return t.patch(`pattern`,e)}),B()(),z(50,`div`,35)(51,`div`,36)(52,`span`,37),J(53,`Method`),B(),z(54,`app-select`,38),G(`valueChange`,function(e){return t.setDraft(`method`,e??``)}),B()(),z(55,`div`,36)(56,`span`,39),J(57,`Apply on`),B(),z(58,`app-select`,40),G(`valueChange`,function(e){return t.setDraft(`target`,e??`both`)}),B()()(),z(59,`div`,35)(60,`div`,36)(61,`span`,41),J(62,`Status`),B(),z(63,`app-select`,42),G(`valueChange`,function(e){return t.setDraft(`status`,e??``)}),B()(),z(64,`label`),J(65,` Delay (ms) `),z(66,`input`,43),G(`input`,function(e){return t.patch(`delayMs`,e)}),B()()(),z(67,`label`)(68,`span`),J(69,`Mock JSON body `),z(70,`span`,33),J(71,`(optional)`),B()(),z(72,`textarea`,44),G(`input`,function(e){return t.patch(`body`,e)}),B()(),z(73,`p`,45),J(74),B(),P(75,zG,2,0,`p`,46),z(76,`p`,47),J(77),B(),z(78,`div`,48)(79,`button`,49),J(80,` Add rule `),B()()(),z(81,`h3`,50),J(82),B(),z(83,`ul`,51),I(84,GG,17,17,`li`,52,GW,!1,KG,2,0,`li`,53),B()(),z(87,`section`,54)(88,`h2`,55),J(89,`SSR overrides`),B(),z(90,`p`,56),J(91,` Development only. These change what the server sends for matching pages, from the next full page load, and the request is marked `),z(92,`strong`),J(93,`overridden`),B(),J(94,`. `),B(),z(95,`form`,57),G(`submit`,function(e){return t.addOverride(e)}),z(96,`div`,36)(97,`span`,58),J(98,`Override`),B(),z(99,`app-select`,59),G(`valueChange`,function(e){return t.setOverrideDraft(`kind`,e??`render-error`)}),B()(),z(100,`label`)(101,`span`),J(102,`Page pattern `),z(103,`span`,33),J(104,`(substring or * glob, ^ anchors the path)`),B()(),z(105,`input`,60),G(`input`,function(e){return t.patchOverride(`pattern`,e)}),B()(),P(106,qG,8,1)(107,XG,12,6)(108,ZG,11,0,`p`,61),z(109,`div`,48)(110,`button`,49),J(111,` Add override `),B()()(),z(112,`h3`,62),J(113),B(),z(114,`ul`,51),I(115,eK,12,12,`li`,52,GW,!1,tK,2,0,`li`,53),B()(),z(118,`section`,63)(119,`h2`,64),J(120,`Hydration`),B(),P(121,pK,37,14)(122,mK,5,0,`div`,11),B(),z(123,`section`,65)(124,`h2`,66),J(125,`TransferState payload`),B(),P(126,CK,2,1)(127,wK,3,0,`div`,11),B()()),e&2){let e,n,r,i;F(t.loading()?0:t.failed()?1:-1),M(6),R(`options`,t.pageOptions())(`value`,t.selected()?.pageId??null),M(),R(`disabled`,!t.canWrite()),N(`aria-describedby`,t.canWrite()?null:`http-writes-off`),M(3),Y(t.message()),M(4),X(`SSR requests (`,t.requests().length,`)`),M(),F(t.requests().length?15:16),M(4),X(`HTTP timeline (`,t.timeline().length,`)`),M(),R(`dropped`,t.droppedCalls())(`max`,t.maxCalls()),M(),q(`no-calls`,!t.timeline().length),M(5),R(`value`,t.callQuery()),M(),R(`options`,t.sideOptions),ov(`value`,t.sideFilter),M(2),R(`checked`,t.failedOnly()),M(3),Z(``,t.visibleCalls().length,` of `,t.timeline().length),M(2),Y(t.filterStatus()),M(),F(t.visibleCalls().length?35:t.timeline().length?36:37),M(3),F((e=t.selectedCall())?38:-1,e),M(4),F(t.canWrite()?-1:42),M(7),R(`value`,t.draft().pattern),M(5),R(`options`,t.methodOptions())(`value`,t.draft().method),M(4),R(`describedBy`,t.draftMocksOnServer()?`rule-ssr-note`:``)(`options`,t.targetOptions)(`value`,t.draft().target),M(5),R(`describedBy`,t.draftMocksOnServer()?`rule-ssr-note`:``)(`options`,t.statusOptions)(`value`,t.draft().status),M(3),R(`value`,t.draft().delayMs),M(6),R(`placeholder`,t.bodyPlaceholder)(`value`,t.draft().body),N(`aria-invalid`,t.bodyError()?`true`:null),M(2),Y(t.bodyError()),M(),F(t.draftMocksOnServer()?75:-1),M(2),Y(t.draftHint()),M(2),R(`disabled`,!t.canWrite()||!t.draftRule()),N(`aria-describedby`,t.canWrite()?`rule-hint`:`http-writes-off`),M(3),X(` Rules (`,t.rules().length,`) `),M(2),L(t.rules()),M(15),R(`describedBy`,t.overrideDraft().kind===`state-edit`?``:`override-kind-help`)(`options`,t.overrideKindOptions)(`value`,t.overrideDraft().kind),M(6),R(`value`,t.overrideDraft().pattern),M(),F((n=t.overrideDraft().kind)===`render-error`?106:n===`state-edit`?107:n===`client-render`?108:-1),M(4),R(`disabled`,!t.canWrite()||!t.overrideReady()),N(`aria-describedby`,t.canWrite()?null:`http-writes-off`),M(3),X(` Overrides (`,t.overrides().length,`) `),M(2),L(t.overrides()),M(6),F((r=t.selected()?.hydration)?121:122,r),M(5),F((i=t.selectedPayload())?126:127,i)}},dependencies:[iO,LN,GD,pb],styles:[`@charset "UTF-8"; [_nghost-%COMP%] { display: block; color: var(--%NS%text); @@ -12884,7 +12919,7 @@ summary[_ngcontent-%COMP%]:hover .entry-key[_ngcontent-%COMP%] { .message[_ngcontent-%COMP%] { text-align: left; } -}`]})};function xK(e,t){e&1&&(A(),H(0,`svg`,9),Fg(1,`path`,20),U())}function SK(e,t){e&1&&(A(),H(0,`svg`,10)(1,`defs`)(2,`linearGradient`,21),Fg(3,`stop`,22)(4,`stop`,23),U()(),Fg(5,`path`,24),H(6,`g`,25),Fg(7,`path`,26)(8,`path`,27)(9,`path`,28)(10,`path`,29),U()())}function CK(e,t){e&1&&(A(),H(0,`svg`,11),Fg(1,`path`,30)(2,`path`,31)(3,`path`,32)(4,`path`,33),U())}function wK(e,t){e&1&&(A(),H(0,`svg`,9),Fg(1,`path`,34)(2,`path`,35)(3,`path`,36)(4,`path`,37)(5,`path`,38)(6,`path`,39),U())}function TK(e,t){if(e&1&&(H(0,`a`,16)(1,`span`,40)(2,`strong`),J(3),U()(),H(4,`span`,41),J(5,`→`),U(),H(6,`span`,42),J(7,`(opens in a new tab)`),U()()),e&2){let e=t;Vg(`href`,e.href,ku),M(3),Y(e.label)}}function EK(e,t){if(e&1&&(H(0,`li`),J(1),U()),e&2){let e=t.$implicit,n=t.$index;C_(`animation-delay`,200+n*120,`ms`),M(),Y(e)}}var DK=class e{info=$.required();plansTitle=Q(()=>{let e=this.info();return e.plansTitle??(e.link?`In an ${e.name} app`:`On the roadmap`)});static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-coming-soon`]],hostVars:2,hostBindings:function(e,t){e&2&&C_(`--%NS%brand`,t.info().color)},inputs:{info:[1,`info`]},decls:29,vars:6,consts:[[`aria-labelledby`,`soon-title`,1,`soon`],[`aria-hidden`,`true`,1,`stage`],[1,`ring`,`r1`],[1,`ring`,`r2`],[1,`orbit`,`o1`],[1,`dot`],[1,`orbit`,`o2`],[1,`orbit`,`o3`],[1,`logo`],[`viewBox`,`0 0 256 256`,`width`,`96`,`height`,`96`],[`viewBox`,`0 0 32 32`,`width`,`88`,`height`,`88`],[`viewBox`,`0 0 256 182`,`width`,`104`,`height`,`74`],[1,`badge`],[`aria-hidden`,`true`,1,`spark`],[`id`,`soon-title`],[1,`summary`],[`target`,`_blank`,`rel`,`noopener noreferrer`,1,`author`,`cta`,3,`href`],[1,`plans-title`],[1,`plans`],[3,`animation-delay`],[`fill`,`#3c5afd`,`d`,`M237.248 18.752q18.061 18.06 18.748 45.247V192c-.457 18.12-6.707 33.207-18.748 45.247c-12.04 12.04-27.127 18.291-45.251 18.752H63.999q-27.187-.69-45.247-18.752C6.712 225.208.46 210.121 0 192.001V64q.69-27.187 18.752-45.247Q36.812.692 63.999 0h127.998c18.124.46 33.211 6.711 45.251 18.752m-17.655 103q-6.033-6.003-6.28-15.066V64q-.192-9.063-6.221-15.091c-4.02-4.023-9.054-6.093-15.095-6.22h-21.312v106.626L85.315 42.687H63.999c-6.042.128-11.072 2.198-15.091 6.221c-4.023 4.02-6.093 9.05-6.22 15.09v42.688q-.249 9.063-6.281 15.066q-6.03 5.996-15.091 6.246q9.062.255 15.09 6.25c4.024 4.002 6.115 9.024 6.281 15.066V192c.128 6.037 2.198 11.072 6.221 15.091q6.03 6.03 15.09 6.22h21.317V106.687l85.37 106.627h21.312c6.041-.128 11.076-2.202 15.095-6.221s6.093-9.054 6.22-15.09v-42.688q.249-9.063 6.281-15.066q6.03-5.995 15.091-6.25q-9.062-.25-15.09-6.246`],[`id`,`an-hero-grad`,`x1`,`0`,`y1`,`0`,`x2`,`1`,`y2`,`1`],[`offset`,`0`,`stop-color`,`#f0224f`],[`offset`,`1`,`stop-color`,`#c4002d`],[`d`,`M16 0C27.2 0 32 4.8 32 16S27.2 32 16 32 0 27.2 0 16 4.8 0 16 0Z`,`fill`,`url(#an-hero-grad)`],[`transform`,`translate(6.4 6.4) scale(0.8)`,`fill`,`#fff`],[`d`,`M14.8486 0L23.138 16.8551L23.9996 3.99892L14.8486 0Z`],[`d`,`M16.9875 17.7114H7.01272L5.73926 20.627L12.0001 24L18.261 20.627L16.9875 17.7114Z`],[`d`,`M8.72168 13.9298H15.2812L11.9997 6.39575L8.72168 13.9298Z`],[`d`,`M9.15103 0L0 3.99892L0.861556 16.8551L9.15103 0Z`],[`fill`,`#c30f2e`,`d`,`M152.228.001L48.455 181.046H256L152.228 0z`],[`fill`,`#dd0330`,`d`,`M88.314 26.967L0 181.52h176.628L88.315 26.967z`],[`fill`,`#fff`,`d`,`M18.167 135.294h220.236v-2.419H18.167z`],[`fill`,`#fff`,`d`,`M204.38 170.667c-.861 0-1.67-.358-2.348-1.034c-4.045-4.063-4.221-20.586-4.026-45.33c.11-13.521.257-32.043-1.9-33.504c-2.104.873-2.315 16.172-2.451 26.301c-.162 11.785-.327 23.98-2.242 30.189c-.57 1.84-1.306 3.525-2.786 3.39c-2.086-.185-2.76-3.48-4.317-16.478c-.647-5.4-1.317-10.98-2.101-13.14a11 11 0 0 0-.269-.66c-.835 1.889-1.8 7.079-2.47 10.682c-.927 4.976-1.803 9.676-2.9 11.726c-.847 1.575-2.19 3.63-4.067 3.231c-2.558-.537-3.323-5.693-3.552-8.719c0-25.455-3.33-28.417-3.997-28.753l-.107.081l-.162-.036c-2.377 1.038-2.506 9.294-2.627 17.276c-.096 5.856-.198 12.492-1.053 18.701c-1.108 8.05-2.448 9.603-4.115 9.507c-3.838-.262-3.95-13.482-3.95-14.987c0-.472.012-1.028.027-1.642c.074-3.076.205-8.8-1.687-10.604c-.25-.239-.603-.515-.879-.437c-1.347.339-2.745 4.714-3.209 6.153c-.147.457-.265.833-.364 1.09c-.078.214-.177.515-.294.88c-1.02 3.095-2.18 6.183-4.16 6.944c-.732.284-1.498.222-2.216-.183c-.953-.541-1.73-1.646-2.455-3.482c-.397-1.016-.735-2.046-1.082-3.081c-.419-1.263-.85-2.569-1.384-3.808c-.419-.965-1.464-1.4-2.796-1.164c-2.768.494-3.232 3.29-3.622 7.5c-.07.733-.137 1.452-.228 2.128c-.011.198-.501 6.38-.814 8.344c-.865 5.39-2.002 7.512-3.89 7.358c-4.66-.398-6.798-20.836-6.684-29.47c.088-6.592-1.104-9-1.818-9.382c-.074-.034-.189-.096-.46.095c-.843.571-1.594 2.348-1.363 4.215c2.566 20.32.674 43.592-3.96 48.833c-1.46 1.649-3.448 1.627-4.832.236c-4.049-4.064-4.218-20.586-4.026-45.33c.11-13.521.254-32.043-1.9-33.504c-2.105.873-2.311 16.172-2.45 26.301c-.163 11.785-.329 23.98-2.246 30.189c-.57 1.84-1.307 3.525-2.782 3.39c-2.091-.186-2.761-3.48-4.321-16.478c-.649-5.4-1.319-10.98-2.101-13.14c-.1-.273-.189-.49-.27-.66c-.832 1.889-1.796 7.079-2.466 10.682c-.927 4.976-1.803 9.676-2.904 11.726c-.846 1.575-2.19 3.63-4.063 3.231c-2.558-.537-3.324-5.693-3.552-8.719c-.003-25.455-3.33-28.417-3.997-28.753l-.106.081l-.166-.036c-2.374 1.038-2.503 9.293-2.629 17.276c-.091 5.856-.194 12.492-1.048 18.701c-1.107 8.05-2.437 9.618-4.111 9.507c-3.846-.262-3.958-13.482-3.958-14.987c0-.472.016-1.028.03-1.642c.074-3.076.207-8.8-1.685-10.604c-.25-.239-.603-.515-.88-.438c-1.347.34-2.75 4.715-3.206 6.155a47 47 0 0 1-.364 1.09q-.16.432-.298.875c-1.02 3.096-2.18 6.187-4.155 6.95c-.736.282-1.506.22-2.22-.185c-.953-.541-1.734-1.646-2.454-3.482c-.398-1.016-.74-2.046-1.083-3.081c-.42-1.263-.854-2.569-1.387-3.808c-.416-.965-1.465-1.4-2.797-1.164c-3.188.567-3.943 4.52-4.55 9.238l-.106.839l-2.411-.32l.114-.824c.527-4.137 1.328-10.39 6.53-11.31c2.446-.435 4.585.581 5.446 2.583c.578 1.34 1.031 2.695 1.466 4.008c.324.99.654 1.98 1.037 2.959c.674 1.708 1.197 2.15 1.392 2.257c1.218-.38 2.462-4.167 2.873-5.414c.13-.402.24-.732.328-.968c.085-.233.195-.571.328-.98c1.097-3.43 2.474-7.144 4.918-7.762c.747-.191 1.903-.166 3.157 1.035c2.665 2.544 2.525 8.48 2.433 12.41c-.014.59-.028 1.126-.028 1.583c0 6.272.93 10.655 1.64 12.16c.367-.77.998-2.63 1.598-7.007c.831-6.066.938-12.624 1.027-18.41c.161-10.24.275-17.663 3.982-19.408c.552-.339 1.469-.522 2.436-.033c3.586 1.803 5.326 11.885 5.326 30.817c.225 2.926 1.013 6.006 1.66 6.448c.004-.066.53-.39 1.394-2.01c.925-1.718 1.845-6.665 2.655-11.026c1.792-9.614 2.606-12.989 4.726-13.166c1.615-.158 2.362 1.896 2.676 2.76c.883 2.422 1.537 7.888 2.23 13.678c.54 4.49 1.31 10.902 2.094 13.497c.084-.228.18-.5.283-.836c1.815-5.878 1.98-17.887 2.14-29.507c.22-16.14.503-26.139 3.448-28.226a2.44 2.44 0 0 1 2.233-.316c3.448 1.144 3.714 11.254 3.519 35.8c-.14 17.799-.313 39.952 3.323 43.603c.317.32.542.32.622.32c.17 0 .413-.161.67-.452c3.681-4.162 6.01-26.022 3.372-46.927c-.328-2.602.677-5.337 2.392-6.514c.946-.652 2.036-.736 2.978-.232c2.145 1.14 3.187 5.024 3.102 11.546c-.15 11.387 2.584 24.714 4.37 26.842c.282-.471.842-1.763 1.379-5.145c.301-1.87.799-8.153.806-8.216c.09-.71.155-1.398.217-2.097c.369-3.924.82-8.804 5.613-9.654c2.444-.435 4.583.577 5.448 2.583c.577 1.34 1.027 2.695 1.46 4.008c.332.99.664 1.98 1.046 2.959c.67 1.708 1.197 2.15 1.387 2.257c1.218-.38 2.467-4.167 2.875-5.41c.132-.402.243-.737.328-.973c.088-.228.195-.57.324-.979c1.1-3.43 2.477-7.144 4.924-7.762c.74-.191 1.9-.166 3.154 1.035c2.665 2.543 2.526 8.48 2.437 12.41q-.029.792-.033 1.583c0 6.272.931 10.655 1.641 12.16c.365-.77.994-2.63 1.601-7.007c.832-6.066.931-12.624 1.027-18.41c.159-10.24.273-17.663 3.98-19.408c.55-.339 1.467-.522 2.44-.033c3.58 1.803 5.325 11.884 5.325 30.817c.224 2.926 1.012 6.006 1.656 6.448c.008-.066.526-.39 1.399-2.01c.923-1.718 1.84-6.665 2.653-11.026c1.786-9.614 2.602-12.989 4.722-13.166c1.62-.158 2.367 1.896 2.68 2.76c.88 2.422 1.535 7.888 2.233 13.678c.534 4.49 1.304 10.902 2.092 13.497c.08-.228.176-.5.28-.836c1.813-5.878 1.976-17.887 2.138-29.507c.216-16.14.504-26.139 3.448-28.226a2.45 2.45 0 0 1 2.234-.316c3.452 1.144 3.718 11.254 3.52 35.8c-.141 17.799-.314 39.952 3.319 43.603c.324.32.544.32.63.32c.165 0 .408-.161.662-.452c3.687-4.162 6.014-26.022 3.375-46.927c-.342-2.723.43-5.47 1.84-6.526c.71-.537 1.575-.647 2.37-.313c2.054.877 3.445 4.63 4.255 11.484c.339 2.87.641 5.974.931 9.036c.641 6.683 1.509 15.69 2.684 17.67c.36-.46 1.096-1.704 2.19-5.038l2.307.753c-1.696 5.157-3.026 7.1-4.755 6.902c-2.69-.299-3.468-5.734-4.84-20.055c-.29-3.048-.59-6.132-.928-8.989c-1.03-8.74-2.782-9.532-2.801-9.54c-.342.174-1.137 1.992-.842 4.31c2.558 20.32.673 43.597-3.964 48.834c-.747.842-1.587 1.27-2.485 1.27`],[`fill`,`#53b9ff`,`d`,`M39.863 54.115L.311 93.716l60.995 61.179L0 216.385l39.428 39.619l61.43-61.507l61.097 61.068l39.552-39.602z`],[`fill`,`#119eff`,`d`,`m140.517 154.896l-39.658 39.601l61.097 61.069l39.552-39.602z`],[`fill-opacity`,`.2`,`d`,`m140.517 154.896l-39.658 39.601l15.267 15.182z`],[`fill`,`#53b9ff`,`d`,`M194.57 100.985L256 39.478L216.431 0l-61.412 61.384L93.917.311L54.365 39.913L216.01 201.761l39.552-39.602z`],[`fill`,`#119eff`,`d`,`m115.36 100.987l39.659-39.602L93.917.313L54.365 39.914z`],[`fill-opacity`,`.2`,`d`,`m115.359 100.985l39.659-39.601l-15.271-15.186z`],[1,`who`],[`aria-hidden`,`true`,1,`go`],[1,`sr-only`]],template:function(e,t){if(e&1&&(H(0,`section`,0)(1,`div`,1),Fg(2,`span`,2)(3,`span`,3),H(4,`span`,4),Fg(5,`span`,5),U(),H(6,`span`,6),Fg(7,`span`,5),U(),H(8,`span`,7),Fg(9,`span`,5),U(),H(10,`div`,8),P(11,xK,2,0,`:svg:svg`,9)(12,SK,11,0,`:svg:svg`,10)(13,CK,5,0,`:svg:svg`,11)(14,wK,7,0,`:svg:svg`,9),U()(),H(15,`p`,12)(16,`span`,13),J(17,`✦`),U(),J(18),U(),H(19,`h2`,14),J(20),U(),H(21,`p`,15),J(22),U(),P(23,TK,8,2,`a`,16),H(24,`h3`,17),J(25),U(),H(26,`ul`,18),I(27,EK,2,3,`li`,19,wg),U()()),e&2){let e,n;M(11),F((e=t.info().id)===`nativescript`?11:e===`angular-native`?12:e===`analog`?13:e===`capacitor`?14:-1),M(7),X(` `,t.info().badge),M(2),Y(t.info().heading),M(2),Y(t.info().summary),M(),F((n=t.info().link)?23:-1,n),M(2),X(` `,t.plansTitle(),` `),M(2),L(t.info().plans)}},styles:[`[_nghost-%COMP%] { +}`]})};function UK(e,t){e&1&&(A(),H(0,`svg`,9),zg(1,`path`,20),U())}function WK(e,t){e&1&&(A(),H(0,`svg`,10)(1,`defs`)(2,`linearGradient`,21),zg(3,`stop`,22)(4,`stop`,23),U()(),zg(5,`path`,24),H(6,`g`,25),zg(7,`path`,26)(8,`path`,27)(9,`path`,28)(10,`path`,29),U()())}function GK(e,t){e&1&&(A(),H(0,`svg`,11),zg(1,`path`,30)(2,`path`,31)(3,`path`,32)(4,`path`,33),U())}function KK(e,t){e&1&&(A(),H(0,`svg`,9),zg(1,`path`,34)(2,`path`,35)(3,`path`,36)(4,`path`,37)(5,`path`,38)(6,`path`,39),U())}function qK(e,t){if(e&1&&(H(0,`a`,16)(1,`span`,40)(2,`strong`),J(3),U()(),H(4,`span`,41),J(5,`→`),U(),H(6,`span`,42),J(7,`(opens in a new tab)`),U()()),e&2){let e=t;Gg(`href`,e.href,Au),M(3),Y(e.label)}}function JK(e,t){if(e&1&&(H(0,`li`),J(1),U()),e&2){let e=t.$implicit,n=t.$index;j_(`animation-delay`,200+n*120,`ms`),M(),Y(e)}}var YK=class e{info=$.required();plansTitle=Q(()=>{let e=this.info();return e.plansTitle??(e.link?`In an ${e.name} app`:`On the roadmap`)});static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-coming-soon`]],hostVars:2,hostBindings:function(e,t){e&2&&j_(`--%NS%brand`,t.info().color)},inputs:{info:[1,`info`]},decls:29,vars:6,consts:[[`aria-labelledby`,`soon-title`,1,`soon`],[`aria-hidden`,`true`,1,`stage`],[1,`ring`,`r1`],[1,`ring`,`r2`],[1,`orbit`,`o1`],[1,`dot`],[1,`orbit`,`o2`],[1,`orbit`,`o3`],[1,`logo`],[`viewBox`,`0 0 256 256`,`width`,`96`,`height`,`96`],[`viewBox`,`0 0 32 32`,`width`,`88`,`height`,`88`],[`viewBox`,`0 0 256 182`,`width`,`104`,`height`,`74`],[1,`badge`],[`aria-hidden`,`true`,1,`spark`],[`id`,`soon-title`],[1,`summary`],[`target`,`_blank`,`rel`,`noopener noreferrer`,1,`author`,`cta`,3,`href`],[1,`plans-title`],[1,`plans`],[3,`animation-delay`],[`fill`,`#3c5afd`,`d`,`M237.248 18.752q18.061 18.06 18.748 45.247V192c-.457 18.12-6.707 33.207-18.748 45.247c-12.04 12.04-27.127 18.291-45.251 18.752H63.999q-27.187-.69-45.247-18.752C6.712 225.208.46 210.121 0 192.001V64q.69-27.187 18.752-45.247Q36.812.692 63.999 0h127.998c18.124.46 33.211 6.711 45.251 18.752m-17.655 103q-6.033-6.003-6.28-15.066V64q-.192-9.063-6.221-15.091c-4.02-4.023-9.054-6.093-15.095-6.22h-21.312v106.626L85.315 42.687H63.999c-6.042.128-11.072 2.198-15.091 6.221c-4.023 4.02-6.093 9.05-6.22 15.09v42.688q-.249 9.063-6.281 15.066q-6.03 5.996-15.091 6.246q9.062.255 15.09 6.25c4.024 4.002 6.115 9.024 6.281 15.066V192c.128 6.037 2.198 11.072 6.221 15.091q6.03 6.03 15.09 6.22h21.317V106.687l85.37 106.627h21.312c6.041-.128 11.076-2.202 15.095-6.221s6.093-9.054 6.22-15.09v-42.688q.249-9.063 6.281-15.066q6.03-5.995 15.091-6.25q-9.062-.25-15.09-6.246`],[`id`,`an-hero-grad`,`x1`,`0`,`y1`,`0`,`x2`,`1`,`y2`,`1`],[`offset`,`0`,`stop-color`,`#f0224f`],[`offset`,`1`,`stop-color`,`#c4002d`],[`d`,`M16 0C27.2 0 32 4.8 32 16S27.2 32 16 32 0 27.2 0 16 4.8 0 16 0Z`,`fill`,`url(#an-hero-grad)`],[`transform`,`translate(6.4 6.4) scale(0.8)`,`fill`,`#fff`],[`d`,`M14.8486 0L23.138 16.8551L23.9996 3.99892L14.8486 0Z`],[`d`,`M16.9875 17.7114H7.01272L5.73926 20.627L12.0001 24L18.261 20.627L16.9875 17.7114Z`],[`d`,`M8.72168 13.9298H15.2812L11.9997 6.39575L8.72168 13.9298Z`],[`d`,`M9.15103 0L0 3.99892L0.861556 16.8551L9.15103 0Z`],[`fill`,`#c30f2e`,`d`,`M152.228.001L48.455 181.046H256L152.228 0z`],[`fill`,`#dd0330`,`d`,`M88.314 26.967L0 181.52h176.628L88.315 26.967z`],[`fill`,`#fff`,`d`,`M18.167 135.294h220.236v-2.419H18.167z`],[`fill`,`#fff`,`d`,`M204.38 170.667c-.861 0-1.67-.358-2.348-1.034c-4.045-4.063-4.221-20.586-4.026-45.33c.11-13.521.257-32.043-1.9-33.504c-2.104.873-2.315 16.172-2.451 26.301c-.162 11.785-.327 23.98-2.242 30.189c-.57 1.84-1.306 3.525-2.786 3.39c-2.086-.185-2.76-3.48-4.317-16.478c-.647-5.4-1.317-10.98-2.101-13.14a11 11 0 0 0-.269-.66c-.835 1.889-1.8 7.079-2.47 10.682c-.927 4.976-1.803 9.676-2.9 11.726c-.847 1.575-2.19 3.63-4.067 3.231c-2.558-.537-3.323-5.693-3.552-8.719c0-25.455-3.33-28.417-3.997-28.753l-.107.081l-.162-.036c-2.377 1.038-2.506 9.294-2.627 17.276c-.096 5.856-.198 12.492-1.053 18.701c-1.108 8.05-2.448 9.603-4.115 9.507c-3.838-.262-3.95-13.482-3.95-14.987c0-.472.012-1.028.027-1.642c.074-3.076.205-8.8-1.687-10.604c-.25-.239-.603-.515-.879-.437c-1.347.339-2.745 4.714-3.209 6.153c-.147.457-.265.833-.364 1.09c-.078.214-.177.515-.294.88c-1.02 3.095-2.18 6.183-4.16 6.944c-.732.284-1.498.222-2.216-.183c-.953-.541-1.73-1.646-2.455-3.482c-.397-1.016-.735-2.046-1.082-3.081c-.419-1.263-.85-2.569-1.384-3.808c-.419-.965-1.464-1.4-2.796-1.164c-2.768.494-3.232 3.29-3.622 7.5c-.07.733-.137 1.452-.228 2.128c-.011.198-.501 6.38-.814 8.344c-.865 5.39-2.002 7.512-3.89 7.358c-4.66-.398-6.798-20.836-6.684-29.47c.088-6.592-1.104-9-1.818-9.382c-.074-.034-.189-.096-.46.095c-.843.571-1.594 2.348-1.363 4.215c2.566 20.32.674 43.592-3.96 48.833c-1.46 1.649-3.448 1.627-4.832.236c-4.049-4.064-4.218-20.586-4.026-45.33c.11-13.521.254-32.043-1.9-33.504c-2.105.873-2.311 16.172-2.45 26.301c-.163 11.785-.329 23.98-2.246 30.189c-.57 1.84-1.307 3.525-2.782 3.39c-2.091-.186-2.761-3.48-4.321-16.478c-.649-5.4-1.319-10.98-2.101-13.14c-.1-.273-.189-.49-.27-.66c-.832 1.889-1.796 7.079-2.466 10.682c-.927 4.976-1.803 9.676-2.904 11.726c-.846 1.575-2.19 3.63-4.063 3.231c-2.558-.537-3.324-5.693-3.552-8.719c-.003-25.455-3.33-28.417-3.997-28.753l-.106.081l-.166-.036c-2.374 1.038-2.503 9.293-2.629 17.276c-.091 5.856-.194 12.492-1.048 18.701c-1.107 8.05-2.437 9.618-4.111 9.507c-3.846-.262-3.958-13.482-3.958-14.987c0-.472.016-1.028.03-1.642c.074-3.076.207-8.8-1.685-10.604c-.25-.239-.603-.515-.88-.438c-1.347.34-2.75 4.715-3.206 6.155a47 47 0 0 1-.364 1.09q-.16.432-.298.875c-1.02 3.096-2.18 6.187-4.155 6.95c-.736.282-1.506.22-2.22-.185c-.953-.541-1.734-1.646-2.454-3.482c-.398-1.016-.74-2.046-1.083-3.081c-.42-1.263-.854-2.569-1.387-3.808c-.416-.965-1.465-1.4-2.797-1.164c-3.188.567-3.943 4.52-4.55 9.238l-.106.839l-2.411-.32l.114-.824c.527-4.137 1.328-10.39 6.53-11.31c2.446-.435 4.585.581 5.446 2.583c.578 1.34 1.031 2.695 1.466 4.008c.324.99.654 1.98 1.037 2.959c.674 1.708 1.197 2.15 1.392 2.257c1.218-.38 2.462-4.167 2.873-5.414c.13-.402.24-.732.328-.968c.085-.233.195-.571.328-.98c1.097-3.43 2.474-7.144 4.918-7.762c.747-.191 1.903-.166 3.157 1.035c2.665 2.544 2.525 8.48 2.433 12.41c-.014.59-.028 1.126-.028 1.583c0 6.272.93 10.655 1.64 12.16c.367-.77.998-2.63 1.598-7.007c.831-6.066.938-12.624 1.027-18.41c.161-10.24.275-17.663 3.982-19.408c.552-.339 1.469-.522 2.436-.033c3.586 1.803 5.326 11.885 5.326 30.817c.225 2.926 1.013 6.006 1.66 6.448c.004-.066.53-.39 1.394-2.01c.925-1.718 1.845-6.665 2.655-11.026c1.792-9.614 2.606-12.989 4.726-13.166c1.615-.158 2.362 1.896 2.676 2.76c.883 2.422 1.537 7.888 2.23 13.678c.54 4.49 1.31 10.902 2.094 13.497c.084-.228.18-.5.283-.836c1.815-5.878 1.98-17.887 2.14-29.507c.22-16.14.503-26.139 3.448-28.226a2.44 2.44 0 0 1 2.233-.316c3.448 1.144 3.714 11.254 3.519 35.8c-.14 17.799-.313 39.952 3.323 43.603c.317.32.542.32.622.32c.17 0 .413-.161.67-.452c3.681-4.162 6.01-26.022 3.372-46.927c-.328-2.602.677-5.337 2.392-6.514c.946-.652 2.036-.736 2.978-.232c2.145 1.14 3.187 5.024 3.102 11.546c-.15 11.387 2.584 24.714 4.37 26.842c.282-.471.842-1.763 1.379-5.145c.301-1.87.799-8.153.806-8.216c.09-.71.155-1.398.217-2.097c.369-3.924.82-8.804 5.613-9.654c2.444-.435 4.583.577 5.448 2.583c.577 1.34 1.027 2.695 1.46 4.008c.332.99.664 1.98 1.046 2.959c.67 1.708 1.197 2.15 1.387 2.257c1.218-.38 2.467-4.167 2.875-5.41c.132-.402.243-.737.328-.973c.088-.228.195-.57.324-.979c1.1-3.43 2.477-7.144 4.924-7.762c.74-.191 1.9-.166 3.154 1.035c2.665 2.543 2.526 8.48 2.437 12.41q-.029.792-.033 1.583c0 6.272.931 10.655 1.641 12.16c.365-.77.994-2.63 1.601-7.007c.832-6.066.931-12.624 1.027-18.41c.159-10.24.273-17.663 3.98-19.408c.55-.339 1.467-.522 2.44-.033c3.58 1.803 5.325 11.884 5.325 30.817c.224 2.926 1.012 6.006 1.656 6.448c.008-.066.526-.39 1.399-2.01c.923-1.718 1.84-6.665 2.653-11.026c1.786-9.614 2.602-12.989 4.722-13.166c1.62-.158 2.367 1.896 2.68 2.76c.88 2.422 1.535 7.888 2.233 13.678c.534 4.49 1.304 10.902 2.092 13.497c.08-.228.176-.5.28-.836c1.813-5.878 1.976-17.887 2.138-29.507c.216-16.14.504-26.139 3.448-28.226a2.45 2.45 0 0 1 2.234-.316c3.452 1.144 3.718 11.254 3.52 35.8c-.141 17.799-.314 39.952 3.319 43.603c.324.32.544.32.63.32c.165 0 .408-.161.662-.452c3.687-4.162 6.014-26.022 3.375-46.927c-.342-2.723.43-5.47 1.84-6.526c.71-.537 1.575-.647 2.37-.313c2.054.877 3.445 4.63 4.255 11.484c.339 2.87.641 5.974.931 9.036c.641 6.683 1.509 15.69 2.684 17.67c.36-.46 1.096-1.704 2.19-5.038l2.307.753c-1.696 5.157-3.026 7.1-4.755 6.902c-2.69-.299-3.468-5.734-4.84-20.055c-.29-3.048-.59-6.132-.928-8.989c-1.03-8.74-2.782-9.532-2.801-9.54c-.342.174-1.137 1.992-.842 4.31c2.558 20.32.673 43.597-3.964 48.834c-.747.842-1.587 1.27-2.485 1.27`],[`fill`,`#53b9ff`,`d`,`M39.863 54.115L.311 93.716l60.995 61.179L0 216.385l39.428 39.619l61.43-61.507l61.097 61.068l39.552-39.602z`],[`fill`,`#119eff`,`d`,`m140.517 154.896l-39.658 39.601l61.097 61.069l39.552-39.602z`],[`fill-opacity`,`.2`,`d`,`m140.517 154.896l-39.658 39.601l15.267 15.182z`],[`fill`,`#53b9ff`,`d`,`M194.57 100.985L256 39.478L216.431 0l-61.412 61.384L93.917.311L54.365 39.913L216.01 201.761l39.552-39.602z`],[`fill`,`#119eff`,`d`,`m115.36 100.987l39.659-39.602L93.917.313L54.365 39.914z`],[`fill-opacity`,`.2`,`d`,`m115.359 100.985l39.659-39.601l-15.271-15.186z`],[1,`who`],[`aria-hidden`,`true`,1,`go`],[1,`sr-only`]],template:function(e,t){if(e&1&&(H(0,`section`,0)(1,`div`,1),zg(2,`span`,2)(3,`span`,3),H(4,`span`,4),zg(5,`span`,5),U(),H(6,`span`,6),zg(7,`span`,5),U(),H(8,`span`,7),zg(9,`span`,5),U(),H(10,`div`,8),P(11,UK,2,0,`:svg:svg`,9)(12,WK,11,0,`:svg:svg`,10)(13,GK,5,0,`:svg:svg`,11)(14,KK,7,0,`:svg:svg`,9),U()(),H(15,`p`,12)(16,`span`,13),J(17,`✦`),U(),J(18),U(),H(19,`h2`,14),J(20),U(),H(21,`p`,15),J(22),U(),P(23,qK,8,2,`a`,16),H(24,`h3`,17),J(25),U(),H(26,`ul`,18),I(27,JK,2,3,`li`,19,Og),U()()),e&2){let e,n;M(11),F((e=t.info().id)===`nativescript`?11:e===`angular-native`?12:e===`analog`?13:e===`capacitor`?14:-1),M(7),X(` `,t.info().badge),M(2),Y(t.info().heading),M(2),Y(t.info().summary),M(),F((n=t.info().link)?23:-1,n),M(2),X(` `,t.plansTitle(),` `),M(2),L(t.info().plans)}},styles:[`[_nghost-%COMP%] { display: block; min-height: 100%; background: radial-gradient(60% 50% at 50% 18%, color-mix(in srgb, var(--%NS%brand) 22%, transparent), transparent 70%); @@ -13230,9 +13265,9 @@ h2[_ngcontent-%COMP%] { .author[_ngcontent-%COMP%]:hover .go[_ngcontent-%COMP%] { transform: none; } -}`]})},OK=new Set([`CapacitorCookies`,`CapacitorHttp`,`SystemBars`,`WebView`]);function kK(e){return e==null?`Unknown`:e?`Yes`:`No`}function AK(e,t){let n=t.size?Math.max(...t.values())+1:0;for(let r of e)t.has(r.pageId)||t.set(r.pageId,n++);let r=new Set(e.map(e=>e.pageId));for(let e of t.keys())r.has(e)||t.delete(e);return[...e].sort((e,n)=>t.get(e.pageId)-t.get(n.pageId))}function jK(e,t){let n=[...e].sort((e,t)=>t.reportedAt-e.reportedAt);return e.find(e=>e.pageId===t)?.pageId??n.find(e=>e.info.bridge)?.pageId??n[0]?.pageId??null}var MK=new WeakMap;function NK(e){let t=e.calls;if(Array.isArray(t))return e;let n=MK.get(e);if(!n){let r=Object.values(t??{}).filter(e=>!!e&&typeof e.id==`number`);n={...e,calls:r.sort((e,t)=>e.id-t.id)},MK.set(e,n)}return n}function PK(e){let t=e?.pages;return!t||typeof t!=`object`?[]:Object.values(t).filter(e=>e&&typeof e.pageId==`string`&&!!e.info).map(NK).sort((e,t)=>t.reportedAt-e.reportedAt)}function FK(e){let t=e.error;return!!t&&(t.code===`UNIMPLEMENTED`||/not implemented/i.test(t.message))}function IK(e,t){return e.durationMs===void 0?e.status===`pending`?Math.max(0,t-e.startedAt):0:e.durationMs}function LK(e,t,n){return t===`failed`?e.status===`error`:t===`pending`?e.status===`pending`:t!==`slow`||IK(e,n)>=500}function RK(e){if(e<1e3)return`${Math.max(0,Math.round(e))} ms`;let t=Math.round(e/1e3);if(t<60)return`${t} s`;let n=Math.round(t/60);return n<60?`${n} min`:`${Math.round(n/60)} h`}function zK(e,t){let n=t-e;return n<1e3?`just now`:`${RK(n)} ago`}function BK(e,t){return OK.has(e.name)?null:e.registered===!0&&!e.available?t===`android`||t===`ios`?{before:`Not available on ${t}. Run `,command:`npx cap sync ${t}`,after:`, then run the app again.`}:{before:`Not available here. Run `,command:`npx cap sync`,after:` if it should be native.`}:e.native&&e.registered===!1?{before:`Installed, not imported by the app.`}:null}function VK(e,t){let n=e.info,r=n=>e.calls.filter(e=>LK(e,n,t)).length,i=n.env.capacitorHttp;return{pageId:e.pageId,platform:n.platform,native:n.native,logsCalls:n.bridge||n.webCalls,calls:e.calls.length,failed:r(`failed`),slow:r(`slow`),pending:r(`pending`),capacitorHttp:i===null?`Unknown`:i?`On`:`Off`,hints:n.plugins.filter(e=>BK(e,n.platform)).length}}function HK(e){let t=new Map;for(let n of e){if(n.removed)continue;let e=`${n.plugin} ${n.event}`;t.set(e,(t.get(e)??0)+1)}return t}var UK=/^[A-Za-z_$][\w$]*$/;function WK(e,t=``){if(e===void 0)return`undefined`;if(typeof e!=`object`||!e)return JSON.stringify(e)??String(e);let n=`${t} `;if(Array.isArray(e))return e.length?`[\n${e.map(e=>n+WK(e,n)).join(`, -`)},\n${t}]`:`[]`;let r=Object.entries(e);return r.length?`{\n${r.map(([e,t])=>`${n}${UK.test(e)?e:JSON.stringify(e)}: ${WK(t,n)}`).join(`, -`)},\n${t}}`:`{}`}function GK(e){let t=UK.test(e.plugin)?e.plugin:`Capacitor.Plugins[${JSON.stringify(e.plugin)}]`,n=UK.test(e.method)?`.${e.method}`:`[${JSON.stringify(e.method)}]`,r=e.args===void 0?[]:[WK(e.args)];return e.kind===`callback`&&(r.length||r.push(`{}`),r.push(`(result, error) => {}`)),`await ${t}${n}(${r.join(`, `)});`}function KK(e){if(e===void 0)return`undefined`;try{return JSON.stringify(e,null,2)??`undefined`}catch{return String(e)}}function qK(e,t=120){let n;try{n=JSON.stringify(e)??`undefined`}catch{n=String(e)}return n.length>t?`${n.slice(0,t-1)}…`:n}function JK(e,t){if(e&1){let e=W();H(0,`button`,8),Qg(`click`,function(){let t=O(e).$implicit;return k(K().tab.set(t))}),J(1),U()}if(e&2){let e=t.$implicit,n=K();Vg(`id`,`cap-tab-`+e),N(`aria-selected`,n.tab()===e)(`aria-controls`,`cap-panel-`+e)(`tabindex`,n.tab()===e?0:-1),M(),X(` `,n.tabLabel(e),` `)}}function YK(e,t){e&1&&(H(0,`p`,9),J(1,`No arguments.`),U())}function XK(e,t){if(e&1&&(H(0,`pre`,10),J(1),U()),e&2){let e=K(2),t=iv(0);M(),Y(e.json(t.args))}}function ZK(e,t){e&1&&P(0,YK,2,0,`p`,9)(1,XK,2,1,`pre`,10),e&2&&(K(),F(iv(0).args===void 0?0:1))}function QK(e,t){if(e&1&&(H(0,`code`),J(1),U()),e&2){let e=K();M(),Y(e.code)}}function $K(e,t){if(e&1&&(H(0,`p`,11),P(1,QK,2,1,`code`),J(2),U()),e&2){let e=t;M(),F(e.code?1:-1),M(),X(` `,e.message,` `)}}function eq(e,t){e&1&&(H(0,`p`,9),J(1,`No answer yet.`),U())}function tq(e,t){if(e&1&&(H(0,`p`,9),J(1),U()),e&2){K(3);let e=iv(0);M(),X(`The latest of `,e.callbacks,` callbacks.`)}}function nq(e,t){e&1&&(H(0,`p`,9),J(1,`Resolved without a value.`),U())}function rq(e,t){if(e&1&&(H(0,`pre`,12),J(1),U()),e&2){let e=K(3),t=iv(0);M(),Y(e.json(t.result))}}function iq(e,t){if(e&1&&(P(0,tq,2,1,`p`,9),P(1,nq,2,0,`p`,9)(2,rq,2,1,`pre`,12)),e&2){K(2);let e=iv(0);F(e.callbacks&&e.callbacks>1?0:-1),M(),F(e.result===void 0?1:2)}}function aq(e,t){if(e&1&&P(0,$K,3,2,`p`,11)(1,eq,2,0,`p`,9)(2,iq,3,2),e&2){let e;K();let t=iv(0);F((e=t.error)?0:t.status===`pending`?1:2,e)}}function oq(e,t){if(e&1&&(H(0,`div`)(1,`dt`),J(2,`Callbacks`),U(),H(3,`dd`),J(4),U()()),e&2){K(2);let e=iv(0);M(4),Y(e.callbacks??0)}}function sq(e,t){if(e&1&&(H(0,`dl`)(1,`div`)(2,`dt`),J(3,`Started`),U(),H(4,`dd`),J(5),U()(),H(6,`div`)(7,`dt`),J(8,`Finished`),U(),H(9,`dd`),J(10),U()(),H(11,`div`)(12,`dt`),J(13),U(),H(14,`dd`),J(15),U()(),P(16,oq,5,1,`div`),U()),e&2){let e=K(),t=iv(0);M(5),Y(e.time(t.startedAt)),M(5),X(` `,t.durationMs===void 0?`Not yet`:e.time(t.startedAt+t.durationMs),` `),M(3),Y(t.status===`pending`?`Waiting for`:`Duration`),M(2),Y(e.span(e.took(t,e.now()))),M(),F(t.kind===`callback`?16:-1)}}var cq=[`args`,`outcome`,`timing`],lq=class e{call=$.required();now=$.required();announce=Ov();host=E(Ml);tab=j(`args`);tabOrder=cq;json=KK;time=GD;span=RK;took=IK;statusText=Q(()=>{let e=this.call();return e.status===`pending`?`Pending`:e.status===`ok`?`OK`:FK(e)?`Not implemented`:`Error`});panelHasFocusable=Q(()=>{let e=this.call();return this.tab()===`args`?e.args!==void 0:this.tab()===`outcome`&&!e.error&&e.status===`ok`&&e.result!==void 0});tabLabel(e){return e===`args`?`Arguments`:e===`timing`?`Timing`:this.call().status===`error`?`Error`:`Result`}onTabKey(e){let t=cq.indexOf(this.tab()),n;if(e.key===`ArrowRight`)n=(t+1)%cq.length;else if(e.key===`ArrowLeft`)n=(t-1+cq.length)%cq.length;else if(e.key===`Home`)n=0;else if(e.key===`End`)n=cq.length-1;else return;e.preventDefault();let r=cq[n];this.tab.set(r),this.host.nativeElement.querySelector(`#cap-tab-${r}`)?.focus()}async copy(e){let t=this.call(),n=`${t.plugin}.${t.method}()`,r=e===`json`?KK(t):GK(t);try{await navigator.clipboard.writeText(r),this.announce.emit(`Copied ${n} as ${e===`json`?`JSON`:`code`}.`)}catch{this.announce.emit(`The clipboard is not available here.`)}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-capacitor-call-detail`]],inputs:{call:[1,`call`],now:[1,`now`]},outputs:{announce:`announce`},decls:19,vars:10,consts:[[`id`,`cap-detail`,`aria-labelledby`,`cap-detail-title`,1,`detail`],[`id`,`cap-detail-title`],[1,`meta`],[1,`actions`],[`type`,`button`,1,`small`,3,`click`],[`role`,`tablist`,`aria-label`,`Call details`,1,`tabs`,3,`keydown`],[`type`,`button`,`role`,`tab`,3,`id`],[`role`,`tabpanel`,1,`panel`,3,`id`],[`type`,`button`,`role`,`tab`,3,`click`,`id`],[1,`muted`],[`tabindex`,`0`,`aria-label`,`Arguments`],[1,`error-text`],[`tabindex`,`0`,`aria-label`,`Result`]],template:function(e,t){if(e&1&&(nv(0),H(1,`section`,0)(2,`h3`,1)(3,`code`),J(4),U()(),H(5,`p`,2),J(6),U(),H(7,`div`,3)(8,`button`,4),Qg(`click`,function(){return t.copy(`json`)}),J(9,`Copy as JSON`),U(),H(10,`button`,4),Qg(`click`,function(){return t.copy(`code`)}),J(11,`Copy as code`),U()(),H(12,`div`,5),Qg(`keydown`,function(e){return t.onTabKey(e)}),I(13,JK,2,5,`button`,6,wg),U(),H(15,`div`,7),P(16,ZK,2,1)(17,aq,3,1)(18,sq,17,5,`dl`),U()()),e&2){let e,n=rv(t.call());M(4),Z(``,n.plugin,`.`,n.method,`()`),M(2),Y_(` `,t.statusText(),`, `,n.via,`, `,n.kind===`callback`?`stream`:`promise`,` `),M(7),L(t.tabOrder),M(2),Vg(`id`,`cap-panel-`+t.tab()),N(`aria-labelledby`,`cap-tab-`+t.tab())(`tabindex`,t.panelHasFocusable()?null:0),M(),F((e=t.tab())===`args`?16:e===`outcome`?17:e===`timing`?18:-1)}},styles:[`.detail[_ngcontent-%COMP%] { +}`]})},XK=new Set([`CapacitorCookies`,`CapacitorHttp`,`SystemBars`,`WebView`]);function ZK(e){return e==null?`Unknown`:e?`Yes`:`No`}function QK(e,t){let n=t.size?Math.max(...t.values())+1:0;for(let r of e)t.has(r.pageId)||t.set(r.pageId,n++);let r=new Set(e.map(e=>e.pageId));for(let e of t.keys())r.has(e)||t.delete(e);return[...e].sort((e,n)=>t.get(e.pageId)-t.get(n.pageId))}function $K(e,t){let n=[...e].sort((e,t)=>t.reportedAt-e.reportedAt);return e.find(e=>e.pageId===t)?.pageId??n.find(e=>e.info.bridge)?.pageId??n[0]?.pageId??null}var eq=new WeakMap;function tq(e){let t=e.calls;if(Array.isArray(t))return e;let n=eq.get(e);if(!n){let r=Object.values(t??{}).filter(e=>!!e&&typeof e.id==`number`);n={...e,calls:r.sort((e,t)=>e.id-t.id)},eq.set(e,n)}return n}function nq(e){let t=e?.pages;return!t||typeof t!=`object`?[]:Object.values(t).filter(e=>e&&typeof e.pageId==`string`&&!!e.info).map(tq).sort((e,t)=>t.reportedAt-e.reportedAt)}function rq(e){let t=e.error;return!!t&&(t.code===`UNIMPLEMENTED`||/not implemented/i.test(t.message))}function iq(e,t){return e.durationMs===void 0?e.status===`pending`?Math.max(0,t-e.startedAt):0:e.durationMs}function aq(e,t,n){return t===`failed`?e.status===`error`:t===`pending`?e.status===`pending`:t!==`slow`||iq(e,n)>=500}function oq(e){if(e<1e3)return`${Math.max(0,Math.round(e))} ms`;let t=Math.round(e/1e3);if(t<60)return`${t} s`;let n=Math.round(t/60);return n<60?`${n} min`:`${Math.round(n/60)} h`}function sq(e,t){let n=t-e;return n<1e3?`just now`:`${oq(n)} ago`}function cq(e,t){return XK.has(e.name)?null:e.registered===!0&&!e.available?t===`android`||t===`ios`?{before:`Not available on ${t}. Run `,command:`npx cap sync ${t}`,after:`, then run the app again.`}:{before:`Not available here. Run `,command:`npx cap sync`,after:` if it should be native.`}:e.native&&e.registered===!1?{before:`Installed, not imported by the app.`}:null}function lq(e,t){let n=e.info,r=n=>e.calls.filter(e=>aq(e,n,t)).length,i=n.env.capacitorHttp;return{pageId:e.pageId,platform:n.platform,native:n.native,logsCalls:n.bridge||n.webCalls,calls:e.calls.length,failed:r(`failed`),slow:r(`slow`),pending:r(`pending`),capacitorHttp:i===null?`Unknown`:i?`On`:`Off`,hints:n.plugins.filter(e=>cq(e,n.platform)).length}}function uq(e){let t=new Map;for(let n of e){if(n.removed)continue;let e=`${n.plugin} ${n.event}`;t.set(e,(t.get(e)??0)+1)}return t}var dq=/^[A-Za-z_$][\w$]*$/;function fq(e,t=``){if(e===void 0)return`undefined`;if(typeof e!=`object`||!e)return JSON.stringify(e)??String(e);let n=`${t} `;if(Array.isArray(e))return e.length?`[\n${e.map(e=>n+fq(e,n)).join(`, +`)},\n${t}]`:`[]`;let r=Object.entries(e);return r.length?`{\n${r.map(([e,t])=>`${n}${dq.test(e)?e:JSON.stringify(e)}: ${fq(t,n)}`).join(`, +`)},\n${t}}`:`{}`}function pq(e){let t=dq.test(e.plugin)?e.plugin:`Capacitor.Plugins[${JSON.stringify(e.plugin)}]`,n=dq.test(e.method)?`.${e.method}`:`[${JSON.stringify(e.method)}]`,r=e.args===void 0?[]:[fq(e.args)];return e.kind===`callback`&&(r.length||r.push(`{}`),r.push(`(result, error) => {}`)),`await ${t}${n}(${r.join(`, `)});`}function mq(e){if(e===void 0)return`undefined`;try{return JSON.stringify(e,null,2)??`undefined`}catch{return String(e)}}function hq(e,t=120){let n;try{n=JSON.stringify(e)??`undefined`}catch{n=String(e)}return n.length>t?`${n.slice(0,t-1)}…`:n}function gq(e,t){if(e&1){let e=W();H(0,`button`,8),n_(`click`,function(){let t=O(e).$implicit;return k(K().tab.set(t))}),J(1),U()}if(e&2){let e=t.$implicit,n=K();Gg(`id`,`cap-tab-`+e),N(`aria-selected`,n.tab()===e)(`aria-controls`,`cap-panel-`+e)(`tabindex`,n.tab()===e?0:-1),M(),X(` `,n.tabLabel(e),` `)}}function _q(e,t){e&1&&(H(0,`p`,9),J(1,`No arguments.`),U())}function vq(e,t){if(e&1&&(H(0,`pre`,10),J(1),U()),e&2){let e=K(2),t=fv(0);M(),Y(e.json(t.args))}}function yq(e,t){e&1&&P(0,_q,2,0,`p`,9)(1,vq,2,1,`pre`,10),e&2&&(K(),F(fv(0).args===void 0?0:1))}function bq(e,t){if(e&1&&(H(0,`code`),J(1),U()),e&2){let e=K();M(),Y(e.code)}}function xq(e,t){if(e&1&&(H(0,`p`,11),P(1,bq,2,1,`code`),J(2),U()),e&2){let e=t;M(),F(e.code?1:-1),M(),X(` `,e.message,` `)}}function Sq(e,t){e&1&&(H(0,`p`,9),J(1,`No answer yet.`),U())}function Cq(e,t){if(e&1&&(H(0,`p`,9),J(1),U()),e&2){K(3);let e=fv(0);M(),X(`The latest of `,e.callbacks,` callbacks.`)}}function wq(e,t){e&1&&(H(0,`p`,9),J(1,`Resolved without a value.`),U())}function Tq(e,t){if(e&1&&(H(0,`pre`,12),J(1),U()),e&2){let e=K(3),t=fv(0);M(),Y(e.json(t.result))}}function Eq(e,t){if(e&1&&(P(0,Cq,2,1,`p`,9),P(1,wq,2,0,`p`,9)(2,Tq,2,1,`pre`,12)),e&2){K(2);let e=fv(0);F(e.callbacks&&e.callbacks>1?0:-1),M(),F(e.result===void 0?1:2)}}function Dq(e,t){if(e&1&&P(0,xq,3,2,`p`,11)(1,Sq,2,0,`p`,9)(2,Eq,3,2),e&2){let e;K();let t=fv(0);F((e=t.error)?0:t.status===`pending`?1:2,e)}}function Oq(e,t){if(e&1&&(H(0,`div`)(1,`dt`),J(2,`Callbacks`),U(),H(3,`dd`),J(4),U()()),e&2){K(2);let e=fv(0);M(4),Y(e.callbacks??0)}}function kq(e,t){if(e&1&&(H(0,`dl`)(1,`div`)(2,`dt`),J(3,`Started`),U(),H(4,`dd`),J(5),U()(),H(6,`div`)(7,`dt`),J(8,`Finished`),U(),H(9,`dd`),J(10),U()(),H(11,`div`)(12,`dt`),J(13),U(),H(14,`dd`),J(15),U()(),P(16,Oq,5,1,`div`),U()),e&2){let e=K(),t=fv(0);M(5),Y(e.time(t.startedAt)),M(5),X(` `,t.durationMs===void 0?`Not yet`:e.time(t.startedAt+t.durationMs),` `),M(3),Y(t.status===`pending`?`Waiting for`:`Duration`),M(2),Y(e.span(e.took(t,e.now()))),M(),F(t.kind===`callback`?16:-1)}}var Aq=[`args`,`outcome`,`timing`],jq=class e{call=$.required();now=$.required();announce=Iv();host=E(Nl);tab=j(`args`);tabOrder=Aq;json=mq;time=$D;span=oq;took=iq;statusText=Q(()=>{let e=this.call();return e.status===`pending`?`Pending`:e.status===`ok`?`OK`:rq(e)?`Not implemented`:`Error`});panelHasFocusable=Q(()=>{let e=this.call();return this.tab()===`args`?e.args!==void 0:this.tab()===`outcome`&&!e.error&&e.status===`ok`&&e.result!==void 0});tabLabel(e){return e===`args`?`Arguments`:e===`timing`?`Timing`:this.call().status===`error`?`Error`:`Result`}onTabKey(e){let t=Aq.indexOf(this.tab()),n;if(e.key===`ArrowRight`)n=(t+1)%Aq.length;else if(e.key===`ArrowLeft`)n=(t-1+Aq.length)%Aq.length;else if(e.key===`Home`)n=0;else if(e.key===`End`)n=Aq.length-1;else return;e.preventDefault();let r=Aq[n];this.tab.set(r),this.host.nativeElement.querySelector(`#cap-tab-${r}`)?.focus()}async copy(e){let t=this.call(),n=`${t.plugin}.${t.method}()`,r=e===`json`?mq(t):pq(t);try{await navigator.clipboard.writeText(r),this.announce.emit(`Copied ${n} as ${e===`json`?`JSON`:`code`}.`)}catch{this.announce.emit(`The clipboard is not available here.`)}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-capacitor-call-detail`]],inputs:{call:[1,`call`],now:[1,`now`]},outputs:{announce:`announce`},decls:19,vars:10,consts:[[`id`,`cap-detail`,`aria-labelledby`,`cap-detail-title`,1,`detail`],[`id`,`cap-detail-title`],[1,`meta`],[1,`actions`],[`type`,`button`,1,`small`,3,`click`],[`role`,`tablist`,`aria-label`,`Call details`,1,`tabs`,3,`keydown`],[`type`,`button`,`role`,`tab`,3,`id`],[`role`,`tabpanel`,1,`panel`,3,`id`],[`type`,`button`,`role`,`tab`,3,`click`,`id`],[1,`muted`],[`tabindex`,`0`,`aria-label`,`Arguments`],[1,`error-text`],[`tabindex`,`0`,`aria-label`,`Result`]],template:function(e,t){if(e&1&&(uv(0),H(1,`section`,0)(2,`h3`,1)(3,`code`),J(4),U()(),H(5,`p`,2),J(6),U(),H(7,`div`,3)(8,`button`,4),n_(`click`,function(){return t.copy(`json`)}),J(9,`Copy as JSON`),U(),H(10,`button`,4),n_(`click`,function(){return t.copy(`code`)}),J(11,`Copy as code`),U()(),H(12,`div`,5),n_(`keydown`,function(e){return t.onTabKey(e)}),I(13,gq,2,5,`button`,6,Og),U(),H(15,`div`,7),P(16,yq,2,1)(17,Dq,3,1)(18,kq,17,5,`dl`),U()()),e&2){let e,n=dv(t.call());M(4),Z(``,n.plugin,`.`,n.method,`()`),M(2),rv(` `,t.statusText(),`, `,n.via,`, `,n.kind===`callback`?`stream`:`promise`,` `),M(7),L(t.tabOrder),M(2),Gg(`id`,`cap-panel-`+t.tab()),N(`aria-labelledby`,`cap-tab-`+t.tab())(`tabindex`,t.panelHasFocusable()?null:0),M(),F((e=t.tab())===`args`?16:e===`outcome`?17:e===`timing`?18:-1)}},styles:[`.detail[_ngcontent-%COMP%] { border: 1px solid var(--%NS%border); border-radius: var(--%NS%radius); background: var(--%NS%surface); @@ -13385,7 +13420,7 @@ dd[_ngcontent-%COMP%] { margin: 0; color: var(--%NS%text); font-variant-numeric: tabular-nums; -}`]})},uq=(e,t)=>t.plugin,dq=(e,t)=>t.label;function fq(e,t){if(e&1&&(H(0,`span`,5),J(1),U(),J(2,` `),H(3,`span`,6),J(4,`from `),H(5,`code`),J(6),U(),J(7),U()),e&2){let e=K().$implicit,t=K(2);M(),Y(e.value),M(5),Y(e.from),M(),X(`, `,t.ago(e.at,t.now()))}}function pq(e,t){e&1&&(H(0,`span`,4),J(1,`Not reported yet`),U())}function mq(e,t){if(e&1&&(H(0,`div`)(1,`dt`),J(2),U(),H(3,`dd`),P(4,fq,8,3)(5,pq,2,0,`span`,4),U()()),e&2){let e=t.$implicit;M(2),Y(e.label),M(2),F(e.value===null?5:4)}}function hq(e,t){if(e&1&&(H(0,`article`,2)(1,`h3`,3)(2,`code`),J(3),U()(),H(4,`dl`),I(5,mq,6,2,`div`,null,dq),U()()),e&2){let e=t.$implicit;N(`aria-labelledby`,`cap-state-`+e.plugin),M(),Vg(`id`,`cap-state-`+e.plugin),M(2),Y(e.plugin),M(2),L(e.fields)}}function gq(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function _q(e,t=e=>e){return n=>{let r=gq(n)?n[e]:void 0;return typeof r==`string`||typeof r==`number`||typeof r==`boolean`?t(String(r)):null}}function vq(e,t,n){return[...e.map(e=>({method:e,read:n})),...t.map(e=>({event:e,read:n}))]}var yq=[{plugin:`Foldable`,fields:[{label:`Fold state`,sources:vq([`getFoldState`],[`foldStateChange`],_q(`state`))},{label:`Posture`,sources:vq([`getFoldState`],[`foldStateChange`],_q(`posture`))},{label:`Hinge orientation`,sources:vq([`getFoldState`],[`foldStateChange`],_q(`hingeOrientation`))},{label:`Hinge angle`,sources:vq([`getHingeAngle`],[`hingeAngleChange`],_q(`angle`,e=>`${e}°`))},{label:`Active display`,sources:vq([`getFoldState`],[`foldStateChange`],_q(`activeDisplay`))},{label:`Size class`,sources:vq([`getSizeClass`],[`sizeClassChange`],e=>{let t=_q(`widthClass`)(e),n=_q(`heightClass`)(e);return!t&&!n?null:[t&&`width ${t}`,n&&`height ${n}`].filter(Boolean).join(`, `)})}]}];function bq(e,t,n){let r=null,i=(e,t,i)=>{if(r&&r.at>=i)return;let a=n.read(e);a!==null&&(r={value:a,from:t,at:i})};if(`method`in n)for(let r of e.calls)r.plugin===t&&r.method===n.method&&r.status===`ok`&&i(r.result,`${n.method}()`,r.startedAt+(r.durationMs??0));else for(let r of e.listeners)r.plugin===t&&r.event===n.event&&r.lastEventAt!==void 0&&r.last!==void 0&&i(r.last,n.event,r.lastEventAt);return r}function xq(e,t=yq){let n=new Set(e.info.plugins.map(e=>e.name));return t.filter(e=>n.has(e.plugin)).map(t=>({plugin:t.plugin,fields:t.fields.map(n=>{let r=null;for(let i of n.sources){let n=bq(e,t.plugin,i);n&&(!r||n.at>r.at)&&(r=n)}let i=r;return{label:n.label,value:i?.value??null,from:i?.from??null,at:i?.at??null}})}))}var Sq=class e{cards=$.required();now=$.required();ago=zK;static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-capacitor-state`]],inputs:{cards:[1,`cards`],now:[1,`now`]},decls:5,vars:0,consts:[[1,`lead`],[1,`cards`],[1,`card`],[3,`id`],[1,`missing`],[1,`value`],[1,`source`]],template:function(e,t){e&1&&(H(0,`p`,0),J(1,` Read from the results and events the app already received. The panel calls nothing in the app. `),U(),H(2,`div`,1),I(3,hq,7,3,`article`,2,uq),U()),e&2&&(M(3),L(t.cards()))},styles:[`[_nghost-%COMP%] { +}`]})},Mq=(e,t)=>t.plugin,Nq=(e,t)=>t.label;function Pq(e,t){if(e&1&&(H(0,`span`,5),J(1),U(),J(2,` `),H(3,`span`,6),J(4,`from `),H(5,`code`),J(6),U(),J(7),U()),e&2){let e=K().$implicit,t=K(2);M(),Y(e.value),M(5),Y(e.from),M(),X(`, `,t.ago(e.at,t.now()))}}function Fq(e,t){e&1&&(H(0,`span`,4),J(1,`Not reported yet`),U())}function Iq(e,t){if(e&1&&(H(0,`div`)(1,`dt`),J(2),U(),H(3,`dd`),P(4,Pq,8,3)(5,Fq,2,0,`span`,4),U()()),e&2){let e=t.$implicit;M(2),Y(e.label),M(2),F(e.value===null?5:4)}}function Lq(e,t){if(e&1&&(H(0,`article`,2)(1,`h3`,3)(2,`code`),J(3),U()(),H(4,`dl`),I(5,Iq,6,2,`div`,null,Nq),U()()),e&2){let e=t.$implicit;N(`aria-labelledby`,`cap-state-`+e.plugin),M(),Gg(`id`,`cap-state-`+e.plugin),M(2),Y(e.plugin),M(2),L(e.fields)}}function Rq(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function zq(e,t=e=>e){return n=>{let r=Rq(n)?n[e]:void 0;return typeof r==`string`||typeof r==`number`||typeof r==`boolean`?t(String(r)):null}}function Bq(e,t,n){return[...e.map(e=>({method:e,read:n})),...t.map(e=>({event:e,read:n}))]}var Vq=[{plugin:`Foldable`,fields:[{label:`Fold state`,sources:Bq([`getFoldState`],[`foldStateChange`],zq(`state`))},{label:`Posture`,sources:Bq([`getFoldState`],[`foldStateChange`],zq(`posture`))},{label:`Hinge orientation`,sources:Bq([`getFoldState`],[`foldStateChange`],zq(`hingeOrientation`))},{label:`Hinge angle`,sources:Bq([`getHingeAngle`],[`hingeAngleChange`],zq(`angle`,e=>`${e}°`))},{label:`Active display`,sources:Bq([`getFoldState`],[`foldStateChange`],zq(`activeDisplay`))},{label:`Size class`,sources:Bq([`getSizeClass`],[`sizeClassChange`],e=>{let t=zq(`widthClass`)(e),n=zq(`heightClass`)(e);return!t&&!n?null:[t&&`width ${t}`,n&&`height ${n}`].filter(Boolean).join(`, `)})}]}];function Hq(e,t,n){let r=null,i=(e,t,i)=>{if(r&&r.at>=i)return;let a=n.read(e);a!==null&&(r={value:a,from:t,at:i})};if(`method`in n)for(let r of e.calls)r.plugin===t&&r.method===n.method&&r.status===`ok`&&i(r.result,`${n.method}()`,r.startedAt+(r.durationMs??0));else for(let r of e.listeners)r.plugin===t&&r.event===n.event&&r.lastEventAt!==void 0&&r.last!==void 0&&i(r.last,n.event,r.lastEventAt);return r}function Uq(e,t=Vq){let n=new Set(e.info.plugins.map(e=>e.name));return t.filter(e=>n.has(e.plugin)).map(t=>({plugin:t.plugin,fields:t.fields.map(n=>{let r=null;for(let i of n.sources){let n=Hq(e,t.plugin,i);n&&(!r||n.at>r.at)&&(r=n)}let i=r;return{label:n.label,value:i?.value??null,from:i?.from??null,at:i?.at??null}})}))}var Wq=class e{cards=$.required();now=$.required();ago=sq;static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-capacitor-state`]],inputs:{cards:[1,`cards`],now:[1,`now`]},decls:5,vars:0,consts:[[1,`lead`],[1,`cards`],[1,`card`],[3,`id`],[1,`missing`],[1,`value`],[1,`source`]],template:function(e,t){e&1&&(H(0,`p`,0),J(1,` Read from the results and events the app already received. The panel calls nothing in the app. `),U(),H(2,`div`,1),I(3,Lq,7,3,`article`,2,Mq),U()),e&2&&(M(3),L(t.cards()))},styles:[`[_nghost-%COMP%] { display: block; } @@ -13461,7 +13496,7 @@ dd[_ngcontent-%COMP%] { .missing[_ngcontent-%COMP%] { font-style: italic; -}`]})},Cq=(e,t)=>t.filter,wq=(e,t)=>t.id,Tq=(e,t)=>t.name;function Eq(e,t){e&1&&(z(0,`p`,1),J(1,`Loading Capacitor data…`),B())}function Dq(e,t){if(e&1){let e=W();z(0,`div`,2)(1,`p`),J(2,`Can't read the Capacitor data from the devtools server.`),B(),z(3,`button`,3),G(`click`,function(){return O(e),k(K().retry())}),J(4,`Retry`),B()()}}function Oq(e,t){if(e&1){let e=W();z(0,`button`,27),G(`click`,function(){let t=O(e).$implicit;return k(K(4).pickFilter(t.filter))}),z(1,`span`,24),J(2),B(),J(3,` `),z(4,`span`,25),J(5),B()()}if(e&2){let e=t.$implicit,n=K(4);N(`data-filter`,e.filter)(`aria-pressed`,n.callFilter()===e.filter),M(2),Y(e.label),M(3),Y(e.count)}}function kq(e,t){if(e&1&&I(0,Oq,6,4,`button`,26,Cq),e&2){let e=K();L(K(2).callStats(e))}}function Aq(e,t){if(e&1&&(z(0,`span`,23)(1,`span`,24),J(2,`Platform`),B(),J(3,` `),z(4,`span`,25)(5,`code`),J(6),B(),J(7),B()(),P(8,kq,2,0),z(9,`span`,23)(10,`span`,24),J(11,`CapacitorHttp`),B(),J(12,` `),z(13,`span`,25),J(14),B()(),z(15,`span`,23)(16,`span`,24),J(17,`Plugin hints`),B(),J(18,` `),z(19,`span`,25),J(20),B()()),e&2){let e=t;M(6),Y(e.platform),M(),X(` `,e.native?`native`:`web`),M(),F(e.logsCalls?8:-1),M(6),Y(e.capacitorHttp),M(6),Y(e.hints)}}function jq(e,t){if(e&1){let e=W();z(0,`div`,10)(1,`span`,28),J(2,`Page`),B(),z(3,`app-select`,29),G(`valueChange`,function(t){return O(e),k(K(2).selectedPageId.set(t))}),B()()}if(e&2){let e=K(),t=K();M(3),R(`options`,t.pageOptions())(`value`,e.pageId)}}function Mq(e,t){if(e&1&&(z(0,`section`,12)(1,`h2`,30),J(2,`Plugin state`),B(),V(3,`app-capacitor-state`,31),B()),e&2){let e=K(2);M(3),R(`cards`,e.stateCards())(`now`,e.now())}}function Nq(e,t){if(e&1&&(z(0,`p`,15),J(1,` Plugin calls aren't shown on this page. Native calls are logged on iOS and Android, where plugins go through the native bridge. To log calls a web implementation answers, load `),z(2,`code`),J(3,`@pangular-inspector/devtools/capacitor-hook`),B(),J(4,` before `),z(5,`code`),J(6,`@capacitor/core`),B(),J(7,`. `),z(8,`a`,32),J(9,`How to log web calls`),z(10,`span`,6),J(11,` (opens in a new tab)`),B()()()),e&2){let e=K(2);M(8),R(`href`,e.guideUrl,ku)}}function Pq(e,t){if(e&1&&(z(0,`p`,15),J(1,` Only native calls are logged. Calls a web implementation answers are left out. `),z(2,`a`,32),J(3,`How to log them too`),z(4,`span`,6),J(5,` (opens in a new tab)`),B()()()),e&2){let e=K(3);M(2),R(`href`,e.guideUrl,ku)}}function Fq(e,t){e&1&&(z(0,`p`,18),J(1,`No plugin calls yet. Use the app and they show up here.`),B())}function Iq(e,t){if(e&1){let e=W();z(0,`div`,18)(1,`p`),J(2,`No call matches the filters.`),B(),z(3,`p`,43),J(4),B(),z(5,`button`,3),G(`click`,function(){O(e),K();let t=n_(7);return K(2).clearFilters(),k(t.focus())}),J(6,` Clear filters `),B()()}if(e&2){let e=K(2),t=K();M(4),Y_(` `,e.calls.length,` `,e.calls.length===1?`call is`:`calls are`,` hidden by `,t.hiddenBy(),`. `)}}function Lq(e,t){e&1&&(A(),V(0,`path`,50))}function Rq(e,t){e&1&&(A(),V(0,`circle`,55)(1,`path`,56))}function zq(e,t){e&1&&(A(),V(0,`circle`,55)(1,`path`,57))}function Bq(e,t){e&1&&(A(),V(0,`circle`,55)(1,`path`,58))}function Vq(e,t){e&1&&(z(0,`span`,51),J(1,`stream`),B())}function Hq(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,46),G(`focus`,function(){let t=O(e).$implicit;return k(K(4).focusedCallId.set(t.id))})(`click`,function(){let t=O(e).$implicit;return k(K(4).select(t.id))}),z(2,`code`,47),J(3),B(),z(4,`span`,48),A(),z(5,`svg`,49),P(6,Lq,1,0,`:svg:path`,50)(7,Rq,2,0)(8,zq,2,0)(9,Bq,2,0),B(),J(10),B(),P(11,Vq,2,0,`span`,51),ps(),z(12,`span`,52)(13,`span`,53),V(14,`span`),B(),J(15),B(),z(16,`span`,51),J(17),B(),z(18,`time`,54),J(19),B()()()}if(e&2){let e,n=t.$implicit,r=K(4);M(),q(`selected`,r.selected()?.id===n.id),N(`aria-pressed`,r.selected()?.id===n.id)(`tabindex`,r.tabStop()===n.id?0:-1),M(2),Z(``,n.plugin,`.`,n.method,`()`),M(),N(`data-tone`,r.tone(n)),M(2),F((e=r.tone(n))===`ok`?6:e===`danger`?7:e===`warn`?8:9),M(4),X(` `,r.statusLabel(n),` `),M(),F(n.kind===`callback`?11:-1),M(3),C_(`width`,r.barWidth(n),`%`),M(),X(` `,r.durationText(n),` `),M(2),Y(n.via),M(2),Y(r.time(n.startedAt))}}function Uq(e,t){if(e&1){let e=W();z(0,`app-capacitor-call-detail`,59),G(`announce`,function(t){return O(e),k(K(4).announce(t))}),B()}if(e&2){let e=K(4);R(`call`,t)(`now`,e.now())}}function Wq(e,t){if(e&1){let e=W();z(0,`div`,42)(1,`ol`,44),G(`keydown`,function(t){return O(e),k(K(3).onListKey(t))}),I(2,Hq,20,15,`li`,null,wq),B(),P(4,Uq,1,2,`app-capacitor-call-detail`,45),B()}if(e&2){let e,t=K(3);M(2),L(t.shownCalls()),M(2),F((e=t.selected())?4:-1,e)}}function Gq(e,t){if(e&1){let e=W();P(0,Pq,6,1,`p`,15),z(1,`div`,33)(2,`div`,34),A(),z(3,`svg`,35),V(4,`circle`,36)(5,`path`,37),B(),ps(),z(6,`input`,38,0),G(`input`,function(t){return O(e),k(K(2).setSearch(t.target.value))})(`keydown.escape`,function(){return O(e),k(K(2).setSearch(``))}),B()(),z(8,`app-select`,39),G(`valueChange`,function(t){return O(e),k(K(2).setFilter(t))}),B(),z(9,`span`,40),J(10),B()(),V(11,`app-limit-note`,41),P(12,Fq,2,0,`p`,18)(13,Iq,7,3,`div`,18)(14,Wq,5,1,`div`,42)}if(e&2){let e=K(),t=K();F(e.info.webCalls?-1:0),M(6),R(`value`,t.filter()),M(2),R(`options`,t.filterOptions)(`value`,t.callFilter()),M(2),Z(``,t.shownCalls().length,` of `,e.calls.length,` calls`),M(),R(`dropped`,e.dropped)(`max`,t.maxCalls()),M(),F(e.calls.length?t.shownCalls().length?14:13:12)}}function Kq(e,t){e&1&&(z(0,`p`,18),J(1,`No plugins are registered or installed.`),B())}function qq(e,t){if(e&1&&(z(0,`code`),J(1),B()),e&2){let e=K();M(),Y(e.command)}}function Jq(e,t){if(e&1){let e=W();z(0,`button`,65),G(`click`,function(){O(e);let t=K();return k(K(4).copyCommand(t.command))}),J(1,` Copy `),B()}e&2&&N(`aria-label`,`Copy `+K().command)}function Yq(e,t){if(e&1&&(z(0,`span`,63),J(1),P(2,qq,2,1,`code`),J(3),B(),P(4,Jq,2,1,`button`,64)),e&2){let e=t;M(),Y(e.before),M(),F(e.command?2:-1),M(),Y(e.after),M(),F(e.command?4:-1)}}function Xq(e,t){if(e&1&&(z(0,`tr`)(1,`th`,61)(2,`code`),J(3),B()(),z(4,`td`),J(5),B(),z(6,`td`),J(7),B(),z(8,`td`),J(9),B(),z(10,`td`,62),P(11,Yq,5,4),B()()),e&2){let e,n=t.$implicit,r=K(2),i=K();M(3),Y(n.name),M(2),Y(n.available?`Yes`:`No`),M(2),Y(i.yesNo(n.registered)),M(2),Y(n.native?`Yes`:`No`),M(2),F((e=i.pluginHint(n,r.info.platform))?11:-1,e)}}function Zq(e,t){if(e&1&&(z(0,`div`,19)(1,`table`)(2,`thead`)(3,`tr`)(4,`th`,60),J(5,`Plugin`),B(),z(6,`th`,60),J(7,`Available`),B(),z(8,`th`,60),J(9,`Imported`),B(),z(10,`th`,60),J(11,`Native`),B(),z(12,`th`,60),J(13,`Note`),B()()(),z(14,`tbody`),I(15,Xq,12,5,`tr`,null,Tq),B()()()),e&2){let e=K();M(15),L(e.info.plugins)}}function Qq(e,t){e&1&&(z(0,`p`,18),J(1,`No plugin listeners. They show up when the app calls addListener.`),B())}function $q(e,t){if(e&1&&(z(0,`code`,68),J(1),B()),e&2){let e=K(2).$implicit,t=K(3);M(),Y(t.preview(e.last))}}function eJ(e,t){e&1&&(z(0,`span`,68),J(1,`No data`),B())}function tJ(e,t){if(e&1&&(P(0,$q,2,1,`code`,68)(1,eJ,2,0,`span`,68),z(2,`span`,43),J(3),B()),e&2){let e=K().$implicit,t=K(3);F(+(e.last===void 0)),M(3),X(`at `,t.time(e.lastEventAt))}}function nJ(e,t){e&1&&J(0,` None yet `)}function rJ(e,t){if(e&1&&(z(0,`span`,67),A(),z(1,`svg`,49),V(2,`path`,69)(3,`path`,70),B(),J(4),B()),e&2){let e=K().$implicit,t=K(3);M(4),X(` `,t.leakCount(e),` active listeners: possible leak `)}}function iJ(e,t){if(e&1&&(z(0,`tr`)(1,`th`,61)(2,`code`),J(3),B()(),z(4,`td`)(5,`code`),J(6),B()(),z(7,`td`),J(8),B(),z(9,`td`,66),P(10,tJ,4,2)(11,nJ,1,0),B(),z(12,`td`),J(13),P(14,rJ,5,1,`span`,67),B()()),e&2){let e=t.$implicit,n=K(3);M(3),Y(e.plugin),M(3),Y(e.event),M(2),Y(e.events),M(2),F(e.lastEventAt?10:11),M(3),X(` `,e.removed?`Removed`:`Active`,` `),M(),F(!e.removed&&n.leakCount(e)>1?14:-1)}}function aJ(e,t){if(e&1&&(z(0,`div`,22)(1,`table`)(2,`thead`)(3,`tr`)(4,`th`,60),J(5,`Plugin`),B(),z(6,`th`,60),J(7,`Event`),B(),z(8,`th`,60),J(9,`Events`),B(),z(10,`th`,60),J(11,`Last event`),B(),z(12,`th`,60),J(13,`State`),B()()(),z(14,`tbody`),I(15,iJ,15,6,`tr`,null,wq),B()()()),e&2){let e=K();M(15),L(e.listeners)}}function oJ(e,t){if(e&1&&(z(0,`p`,4),J(1,` Plugin calls, plugins and listeners of a Capacitor app, as its WebView reports them. Values are masked like other live data. `),B(),z(2,`div`,5),P(3,Aq,21,5),z(4,`span`,6),J(5),B()(),z(6,`section`,7)(7,`div`,8)(8,`h2`,9),J(9,`Environment`),B(),P(10,jq,4,2,`div`,10),B(),z(11,`dl`)(12,`div`)(13,`dt`),J(14,`Platform`),B(),z(15,`dd`)(16,`code`),J(17),B(),J(18),B()(),z(19,`div`)(20,`dt`),J(21,`Server URL`),B(),z(22,`dd`)(23,`code`),J(24),B()()(),z(25,`div`)(26,`dt`),J(27,`CapacitorHttp`),B(),z(28,`dd`),J(29),B()(),z(30,`div`)(31,`dt`),J(32,`Calls logged`),B(),z(33,`dd`),J(34),B()(),z(35,`div`,11)(36,`dt`),J(37,`User agent`),B(),z(38,`dd`)(39,`code`),J(40),B()()()()(),P(41,Mq,4,2,`section`,12),z(42,`section`,13)(43,`h2`,14),J(44,`Plugin calls`),B(),P(45,Nq,12,1,`p`,15)(46,Gq,15,9),B(),z(47,`section`,16)(48,`h2`,17),J(49,`Plugins`),B(),P(50,Kq,2,0,`p`,18)(51,Zq,17,0,`div`,19),B(),z(52,`section`,20)(53,`h2`,21),J(54,`Listeners`),B(),P(55,Qq,2,0,`p`,18)(56,aJ,17,0,`div`,22),B()),e&2){let e,n=t,r=K();M(3),F((e=r.summary())?3:-1,e),M(2),Y(r.message()),M(5),F(r.pageOptions().length>1?10:-1),M(7),Y(n.info.platform),M(),X(` (`,n.info.native?`native`:`web`,`) `),M(6),Y(n.info.env.serverUrl||`none`),M(5),X(` `,n.info.env.capacitorHttp===null?`Unknown`:n.info.env.capacitorHttp?`On`:`Off`,` `),M(5),Y(r.loggedLabel()),M(6),Y(n.info.env.userAgent||`unknown`),M(),F(r.stateCards().length?41:-1),M(4),F(!n.info.bridge&&!n.info.webCalls?45:46),M(5),F(n.info.plugins.length?51:50),M(5),F(n.listeners.length?56:55)}}function sJ(e,t){e&1&&(z(0,`p`,1),J(1,` No Capacitor app reports to this server. Start the overlay in the app, then use it. `),B())}var cJ=`https://pangular-inspector.dev/inspectors/capacitor/#web-calls`,lJ=2e3,uJ={all:`All calls`,failed:`Failed`,slow:`Slow (500 ms or more)`,pending:`Pending`},dJ=class e{rpc=$(null);destroyRef=E(Cs);host=E(Ml);injector=E(xs);seen=new Map;hostPageId=nE();unsubscribe;time=GD;preview=qK;pluginHint=BK;guideUrl=cJ;yesNo=kK;filterOptions=Object.keys(uJ).map(e=>({value:e,label:uJ[e]}));pages=j([]);loaded=j(!1);failed=j(!1);selectedPageId=Tv({source:()=>this.pages(),computation:(e,t)=>t?.value&&e.some(e=>e.pageId===t.value)?t.value:jK(e,this.hostPageId)});selectedCallId=j(null);focusedCallId=j(null);filter=j(``);callFilter=j(`all`);now=j(Date.now());message=j(``);page=Q(()=>{let e=this.selectedPageId();return this.pages().find(t=>t.pageId===e)??null});pageOptions=Q(()=>this.pages().map(e=>({value:e.pageId,label:e.title||e.url||e.pageId,hint:e.info.platform})));maxCalls=Q(()=>xE(this.rpc()).limits.capacitorCalls);loggedLabel=Q(()=>{let e=this.page()?.info;return e?e.bridge&&e.webCalls?`Native and web`:e.bridge?`Native only`:e.webCalls?`Web only`:`None on this platform`:``});shownCalls=Q(()=>{let e=this.page();if(!e)return[];let t=this.filter().trim().toLowerCase(),n=this.callFilter(),r=n===`slow`?this.now():0;return[...e.calls].filter(e=>LK(e,n,r)).filter(e=>!t||`${e.plugin}.${e.method}`.toLowerCase().includes(t)).sort((e,t)=>t.startedAt-e.startedAt)});selected=Q(()=>this.shownCalls().find(e=>e.id===this.selectedCallId())??null);tabStop=Q(()=>{let e=this.shownCalls();for(let t of[this.focusedCallId(),this.selectedCallId()])if(t!==null&&e.some(e=>e.id===t))return t;return e[0]?.id??null});slowest=Q(()=>{let e=this.now();return Math.max(1,...this.shownCalls().map(t=>IK(t,e)))});hiddenBy=Q(()=>{let e=[],t=this.filter().trim();return t&&e.push(`the search “${t}”`),this.callFilter()!==`all`&&e.push(`the ${uJ[this.callFilter()]} filter`),e.join(` and `)});stateCards=Q(()=>{let e=this.page();return e?xq(e):[]});leaks=Q(()=>HK(this.page()?.listeners??[]));liveSummary=Q(()=>{let e=this.page();return e?VK(e,this.now()):null});summary=j(null);summaryShownAt=0;summaryTimer;messageFlip=!1;constructor(){uc(()=>{let e=this.rpc();e&&this.load(e)}),uc(()=>{let e=this.liveSummary();Cv(()=>this.queueSummary(e))});let e=setInterval(()=>this.now.set(Date.now()),1e3);this.destroyRef.onDestroy(()=>{clearInterval(e),clearTimeout(this.summaryTimer),this.unsubscribe?.()})}retry(){let e=this.rpc();e&&this.load(e)}callStats(e){return[{filter:`all`,label:`Calls`,count:e.calls},{filter:`failed`,label:`Failed`,count:e.failed},{filter:`slow`,label:`Slow, 500 ms+`,count:e.slow},{filter:`pending`,label:`Pending`,count:e.pending}]}select(e){this.selectedCallId.set(e),Id(()=>{globalThis.matchMedia?.(`(max-width: 880px)`).matches&&this.host.nativeElement.querySelector(`#cap-detail`)?.scrollIntoView?.({block:`nearest`})},{injector:this.injector})}onListKey(e){if(![`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key))return;let t=Array.from(this.host.nativeElement.querySelectorAll(`[data-cap-call]`));if(!t.length)return;let n=t.indexOf(document.activeElement),r=n;r=e.key===`ArrowDown`?Math.min(n+1,t.length-1):e.key===`ArrowUp`?Math.max(n-1,0):e.key===`Home`?0:t.length-1,e.preventDefault(),t[r]?.focus()}setSearch(e){e!==this.filter()&&(this.filter.set(e),this.announceCount())}setFilter(e){e!==this.callFilter()&&(this.callFilter.set(e),this.announceCount())}pickFilter(e){this.setFilter(this.callFilter()===e?`all`:e)}clearFilters(){this.filter.set(``),this.callFilter.set(`all`),this.announceCount()}announce(e){this.messageFlip=!this.messageFlip,this.message.set(this.messageFlip?`${e} `:e)}async copyCommand(e){try{await navigator.clipboard.writeText(e),this.announce(`Copied ${e}.`)}catch{this.announce(`The clipboard is not available here.`)}}leakCount(e){return this.leaks().get(`${e.plugin} ${e.event}`)??0}tone(e){return e.status===`pending`?`accent`:e.status===`ok`?`ok`:FK(e)?`warn`:`danger`}statusLabel(e){return e.status===`pending`?`Pending`:e.status===`ok`?`OK`:FK(e)?`Not implemented`:`Error`}durationText(e){return e.status===`pending`?`waiting ${RK(IK(e,this.now()))}`:e.durationMs===void 0?``:`${Math.round(e.durationMs)} ms`}barWidth(e){return Math.min(100,IK(e,this.now())/this.slowest()*100)}announceCount(){let e=this.page();e&&this.announce(`${this.shownCalls().length} of ${e.calls.length} calls shown`)}queueSummary(e){let t=this.summary();if(JSON.stringify(e)===JSON.stringify(t))return;clearTimeout(this.summaryTimer),this.summaryTimer=void 0;let n=this.summaryShownAt+lJ-Date.now();if(!t||!e||e.pageId!==t.pageId||n<=0){this.summary.set(e),this.summaryShownAt=Date.now();return}this.summaryTimer=setTimeout(()=>{this.summaryTimer=void 0,this.summary.set(this.liveSummary()),this.summaryShownAt=Date.now()},n)}async load(e){this.failed.set(!1);try{let t=await e.scope(`pangular`).rpc.sharedState(`capacitor`);if(this.destroyRef.destroyed)return;let n=e=>this.pages.set(AK(PK(e),this.seen));n(t.value()),this.unsubscribe?.(),this.unsubscribe=t.on(`updated`,n)}catch{this.failed.set(!0)}finally{this.loaded.set(!0)}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-capacitor-inspector`]],inputs:{rpc:[1,`rpc`]},decls:4,vars:1,consts:[[`search`,``],[`role`,`status`,1,`state`],[`role`,`alert`,1,`state`],[`type`,`button`,1,`small`,3,`click`],[1,`intro`],[`role`,`status`,`aria-label`,`Capacitor summary`,`aria-atomic`,`false`,1,`strip`],[1,`sr-only`],[`aria-labelledby`,`cap-env-title`,1,`env`],[1,`env-head`],[`id`,`cap-env-title`],[1,`page-picker`],[1,`wide`],[`aria-labelledby`,`cap-state-title`],[`aria-labelledby`,`cap-calls-title`],[`id`,`cap-calls-title`],[1,`notice`],[`aria-labelledby`,`cap-plugins-title`],[`id`,`cap-plugins-title`],[1,`empty`],[`tabindex`,`0`,`role`,`group`,`aria-label`,`Plugins table`,1,`table-wrap`],[`aria-labelledby`,`cap-listeners-title`],[`id`,`cap-listeners-title`],[`tabindex`,`0`,`role`,`group`,`aria-label`,`Listeners table`,1,`table-wrap`],[`aria-atomic`,`true`,1,`stat`],[1,`stat-label`],[1,`stat-value`],[`type`,`button`,`aria-atomic`,`true`,1,`stat`],[`type`,`button`,`aria-atomic`,`true`,1,`stat`,3,`click`],[`id`,`cap-page-label`,1,`label-key`],[`labelledBy`,`cap-page-label`,3,`valueChange`,`options`,`value`],[`id`,`cap-state-title`],[3,`cards`,`now`],[`target`,`_blank`,`rel`,`noopener noreferrer`,3,`href`],[1,`toolbar`],[1,`search`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`search-icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`type`,`search`,`aria-label`,`Filter calls by plugin or method`,`placeholder`,`Filter by plugin or method`,3,`input`,`keydown.escape`,`value`],[`ariaLabel`,`Show calls`,1,`show`,3,`valueChange`,`options`,`value`],[1,`count`],[`what`,`plugin calls`,`limit`,`capacitorCalls`,3,`dropped`,`max`],[1,`split`],[1,`muted`],[`aria-label`,`Plugin calls, newest first`,1,`calls`,3,`keydown`],[3,`call`,`now`],[`type`,`button`,`data-cap-call`,``,1,`call`,3,`focus`,`click`],[1,`name`],[1,`chip`,`status`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`d`,`M20 6 9 17l-5-5`],[1,`chip`,`via`],[1,`duration`],[`aria-hidden`,`true`,1,`bar`],[1,`when`],[`cx`,`12`,`cy`,`12`,`r`,`9`],[`d`,`m15 9-6 6M9 9l6 6`],[`d`,`M5.6 5.6l12.8 12.8`],[`d`,`M12 7v5l3 2`],[3,`announce`,`call`,`now`],[`scope`,`col`],[`scope`,`row`],[1,`note`],[1,`hint`],[`type`,`button`,1,`copy`],[`type`,`button`,1,`copy`,3,`click`],[1,`last`],[`data-tone`,`warn`,1,`chip`,`leak`],[1,`payload`],[`d`,`M12 3 2 21h20z`],[`d`,`M12 10v4M12 17.5v.01`]],template:function(e,t){if(e&1&&P(0,Eq,2,0,`p`,1)(1,Dq,5,0,`div`,2)(2,oJ,57,13)(3,sJ,2,0,`p`,1),e&2){let e;F(t.loaded()?t.failed()?1:(e=t.page())?2:3:0,e)}},dependencies:[XD,LD,lq,Sq],styles:[`[_nghost-%COMP%] { +}`]})},Gq=(e,t)=>t.filter,Kq=(e,t)=>t.id,qq=(e,t)=>t.name;function Jq(e,t){e&1&&(z(0,`p`,1),J(1,`Loading Capacitor data…`),B())}function Yq(e,t){if(e&1){let e=W();z(0,`div`,2)(1,`p`),J(2,`Can't read the Capacitor data from the devtools server.`),B(),z(3,`button`,3),G(`click`,function(){return O(e),k(K().retry())}),J(4,`Retry`),B()()}}function Xq(e,t){if(e&1){let e=W();z(0,`button`,27),G(`click`,function(){let t=O(e).$implicit;return k(K(4).pickFilter(t.filter))}),z(1,`span`,24),J(2),B(),J(3,` `),z(4,`span`,25),J(5),B()()}if(e&2){let e=t.$implicit,n=K(4);N(`data-filter`,e.filter)(`aria-pressed`,n.callFilter()===e.filter),M(2),Y(e.label),M(3),Y(e.count)}}function Zq(e,t){if(e&1&&I(0,Xq,6,4,`button`,26,Gq),e&2){let e=K();L(K(2).callStats(e))}}function Qq(e,t){if(e&1&&(z(0,`span`,23)(1,`span`,24),J(2,`Platform`),B(),J(3,` `),z(4,`span`,25)(5,`code`),J(6),B(),J(7),B()(),P(8,Zq,2,0),z(9,`span`,23)(10,`span`,24),J(11,`CapacitorHttp`),B(),J(12,` `),z(13,`span`,25),J(14),B()(),z(15,`span`,23)(16,`span`,24),J(17,`Plugin hints`),B(),J(18,` `),z(19,`span`,25),J(20),B()()),e&2){let e=t;M(6),Y(e.platform),M(),X(` `,e.native?`native`:`web`),M(),F(e.logsCalls?8:-1),M(6),Y(e.capacitorHttp),M(6),Y(e.hints)}}function $q(e,t){if(e&1){let e=W();z(0,`div`,10)(1,`span`,28),J(2,`Page`),B(),z(3,`app-select`,29),G(`valueChange`,function(t){return O(e),k(K(2).selectedPageId.set(t))}),B()()}if(e&2){let e=K(),t=K();M(3),R(`options`,t.pageOptions())(`value`,e.pageId)}}function eJ(e,t){if(e&1&&(z(0,`section`,12)(1,`h2`,30),J(2,`Plugin state`),B(),V(3,`app-capacitor-state`,31),B()),e&2){let e=K(2);M(3),R(`cards`,e.stateCards())(`now`,e.now())}}function tJ(e,t){if(e&1&&(z(0,`p`,15),J(1,` Plugin calls aren't shown on this page. Native calls are logged on iOS and Android, where plugins go through the native bridge. To log calls a web implementation answers, load `),z(2,`code`),J(3,`@pangular-inspector/devtools/capacitor-hook`),B(),J(4,` before `),z(5,`code`),J(6,`@capacitor/core`),B(),J(7,`. `),z(8,`a`,32),J(9,`How to log web calls`),z(10,`span`,6),J(11,` (opens in a new tab)`),B()()()),e&2){let e=K(2);M(8),R(`href`,e.guideUrl,Au)}}function nJ(e,t){if(e&1&&(z(0,`p`,15),J(1,` Only native calls are logged. Calls a web implementation answers are left out. `),z(2,`a`,32),J(3,`How to log them too`),z(4,`span`,6),J(5,` (opens in a new tab)`),B()()()),e&2){let e=K(3);M(2),R(`href`,e.guideUrl,Au)}}function rJ(e,t){e&1&&(z(0,`p`,18),J(1,`No plugin calls yet. Use the app and they show up here.`),B())}function iJ(e,t){if(e&1){let e=W();z(0,`div`,18)(1,`p`),J(2,`No call matches the filters.`),B(),z(3,`p`,43),J(4),B(),z(5,`button`,3),G(`click`,function(){O(e),K();let t=u_(7);return K(2).clearFilters(),k(t.focus())}),J(6,` Clear filters `),B()()}if(e&2){let e=K(2),t=K();M(4),rv(` `,e.calls.length,` `,e.calls.length===1?`call is`:`calls are`,` hidden by `,t.hiddenBy(),`. `)}}function aJ(e,t){e&1&&(A(),V(0,`path`,50))}function oJ(e,t){e&1&&(A(),V(0,`circle`,55)(1,`path`,56))}function sJ(e,t){e&1&&(A(),V(0,`circle`,55)(1,`path`,57))}function cJ(e,t){e&1&&(A(),V(0,`circle`,55)(1,`path`,58))}function lJ(e,t){e&1&&(z(0,`span`,51),J(1,`stream`),B())}function uJ(e,t){if(e&1){let e=W();z(0,`li`)(1,`button`,46),G(`focus`,function(){let t=O(e).$implicit;return k(K(4).focusedCallId.set(t.id))})(`click`,function(){let t=O(e).$implicit;return k(K(4).select(t.id))}),z(2,`code`,47),J(3),B(),z(4,`span`,48),A(),z(5,`svg`,49),P(6,aJ,1,0,`:svg:path`,50)(7,oJ,2,0)(8,sJ,2,0)(9,cJ,2,0),B(),J(10),B(),P(11,lJ,2,0,`span`,51),ms(),z(12,`span`,52)(13,`span`,53),V(14,`span`),B(),J(15),B(),z(16,`span`,51),J(17),B(),z(18,`time`,54),J(19),B()()()}if(e&2){let e,n=t.$implicit,r=K(4);M(),q(`selected`,r.selected()?.id===n.id),N(`aria-pressed`,r.selected()?.id===n.id)(`tabindex`,r.tabStop()===n.id?0:-1),M(2),Z(``,n.plugin,`.`,n.method,`()`),M(),N(`data-tone`,r.tone(n)),M(2),F((e=r.tone(n))===`ok`?6:e===`danger`?7:e===`warn`?8:9),M(4),X(` `,r.statusLabel(n),` `),M(),F(n.kind===`callback`?11:-1),M(3),j_(`width`,r.barWidth(n),`%`),M(),X(` `,r.durationText(n),` `),M(2),Y(n.via),M(2),Y(r.time(n.startedAt))}}function dJ(e,t){if(e&1){let e=W();z(0,`app-capacitor-call-detail`,59),G(`announce`,function(t){return O(e),k(K(4).announce(t))}),B()}if(e&2){let e=K(4);R(`call`,t)(`now`,e.now())}}function fJ(e,t){if(e&1){let e=W();z(0,`div`,42)(1,`ol`,44),G(`keydown`,function(t){return O(e),k(K(3).onListKey(t))}),I(2,uJ,20,15,`li`,null,Kq),B(),P(4,dJ,1,2,`app-capacitor-call-detail`,45),B()}if(e&2){let e,t=K(3);M(2),L(t.shownCalls()),M(2),F((e=t.selected())?4:-1,e)}}function pJ(e,t){if(e&1){let e=W();P(0,nJ,6,1,`p`,15),z(1,`div`,33)(2,`div`,34),A(),z(3,`svg`,35),V(4,`circle`,36)(5,`path`,37),B(),ms(),z(6,`input`,38,0),G(`input`,function(t){return O(e),k(K(2).setSearch(t.target.value))})(`keydown.escape`,function(){return O(e),k(K(2).setSearch(``))}),B()(),z(8,`app-select`,39),G(`valueChange`,function(t){return O(e),k(K(2).setFilter(t))}),B(),z(9,`span`,40),J(10),B()(),V(11,`app-limit-note`,41),P(12,rJ,2,0,`p`,18)(13,iJ,7,3,`div`,18)(14,fJ,5,1,`div`,42)}if(e&2){let e=K(),t=K();F(e.info.webCalls?-1:0),M(6),R(`value`,t.filter()),M(2),R(`options`,t.filterOptions)(`value`,t.callFilter()),M(2),Z(``,t.shownCalls().length,` of `,e.calls.length,` calls`),M(),R(`dropped`,e.dropped)(`max`,t.maxCalls()),M(),F(e.calls.length?t.shownCalls().length?14:13:12)}}function mJ(e,t){e&1&&(z(0,`p`,18),J(1,`No plugins are registered or installed.`),B())}function hJ(e,t){if(e&1&&(z(0,`code`),J(1),B()),e&2){let e=K();M(),Y(e.command)}}function gJ(e,t){if(e&1){let e=W();z(0,`button`,65),G(`click`,function(){O(e);let t=K();return k(K(4).copyCommand(t.command))}),J(1,` Copy `),B()}e&2&&N(`aria-label`,`Copy `+K().command)}function _J(e,t){if(e&1&&(z(0,`span`,63),J(1),P(2,hJ,2,1,`code`),J(3),B(),P(4,gJ,2,1,`button`,64)),e&2){let e=t;M(),Y(e.before),M(),F(e.command?2:-1),M(),Y(e.after),M(),F(e.command?4:-1)}}function vJ(e,t){if(e&1&&(z(0,`tr`)(1,`th`,61)(2,`code`),J(3),B()(),z(4,`td`),J(5),B(),z(6,`td`),J(7),B(),z(8,`td`),J(9),B(),z(10,`td`,62),P(11,_J,5,4),B()()),e&2){let e,n=t.$implicit,r=K(2),i=K();M(3),Y(n.name),M(2),Y(n.available?`Yes`:`No`),M(2),Y(i.yesNo(n.registered)),M(2),Y(n.native?`Yes`:`No`),M(2),F((e=i.pluginHint(n,r.info.platform))?11:-1,e)}}function yJ(e,t){if(e&1&&(z(0,`div`,19)(1,`table`)(2,`thead`)(3,`tr`)(4,`th`,60),J(5,`Plugin`),B(),z(6,`th`,60),J(7,`Available`),B(),z(8,`th`,60),J(9,`Imported`),B(),z(10,`th`,60),J(11,`Native`),B(),z(12,`th`,60),J(13,`Note`),B()()(),z(14,`tbody`),I(15,vJ,12,5,`tr`,null,qq),B()()()),e&2){let e=K();M(15),L(e.info.plugins)}}function bJ(e,t){e&1&&(z(0,`p`,18),J(1,`No plugin listeners. They show up when the app calls addListener.`),B())}function xJ(e,t){if(e&1&&(z(0,`code`,68),J(1),B()),e&2){let e=K(2).$implicit,t=K(3);M(),Y(t.preview(e.last))}}function SJ(e,t){e&1&&(z(0,`span`,68),J(1,`No data`),B())}function CJ(e,t){if(e&1&&(P(0,xJ,2,1,`code`,68)(1,SJ,2,0,`span`,68),z(2,`span`,43),J(3),B()),e&2){let e=K().$implicit,t=K(3);F(+(e.last===void 0)),M(3),X(`at `,t.time(e.lastEventAt))}}function wJ(e,t){e&1&&J(0,` None yet `)}function TJ(e,t){if(e&1&&(z(0,`span`,67),A(),z(1,`svg`,49),V(2,`path`,69)(3,`path`,70),B(),J(4),B()),e&2){let e=K().$implicit,t=K(3);M(4),X(` `,t.leakCount(e),` active listeners: possible leak `)}}function EJ(e,t){if(e&1&&(z(0,`tr`)(1,`th`,61)(2,`code`),J(3),B()(),z(4,`td`)(5,`code`),J(6),B()(),z(7,`td`),J(8),B(),z(9,`td`,66),P(10,CJ,4,2)(11,wJ,1,0),B(),z(12,`td`),J(13),P(14,TJ,5,1,`span`,67),B()()),e&2){let e=t.$implicit,n=K(3);M(3),Y(e.plugin),M(3),Y(e.event),M(2),Y(e.events),M(2),F(e.lastEventAt?10:11),M(3),X(` `,e.removed?`Removed`:`Active`,` `),M(),F(!e.removed&&n.leakCount(e)>1?14:-1)}}function DJ(e,t){if(e&1&&(z(0,`div`,22)(1,`table`)(2,`thead`)(3,`tr`)(4,`th`,60),J(5,`Plugin`),B(),z(6,`th`,60),J(7,`Event`),B(),z(8,`th`,60),J(9,`Events`),B(),z(10,`th`,60),J(11,`Last event`),B(),z(12,`th`,60),J(13,`State`),B()()(),z(14,`tbody`),I(15,EJ,15,6,`tr`,null,Kq),B()()()),e&2){let e=K();M(15),L(e.listeners)}}function OJ(e,t){if(e&1&&(z(0,`p`,4),J(1,` Plugin calls, plugins and listeners of a Capacitor app, as its WebView reports them. Values are masked like other live data. `),B(),z(2,`div`,5),P(3,Qq,21,5),z(4,`span`,6),J(5),B()(),z(6,`section`,7)(7,`div`,8)(8,`h2`,9),J(9,`Environment`),B(),P(10,$q,4,2,`div`,10),B(),z(11,`dl`)(12,`div`)(13,`dt`),J(14,`Platform`),B(),z(15,`dd`)(16,`code`),J(17),B(),J(18),B()(),z(19,`div`)(20,`dt`),J(21,`Server URL`),B(),z(22,`dd`)(23,`code`),J(24),B()()(),z(25,`div`)(26,`dt`),J(27,`CapacitorHttp`),B(),z(28,`dd`),J(29),B()(),z(30,`div`)(31,`dt`),J(32,`Calls logged`),B(),z(33,`dd`),J(34),B()(),z(35,`div`,11)(36,`dt`),J(37,`User agent`),B(),z(38,`dd`)(39,`code`),J(40),B()()()()(),P(41,eJ,4,2,`section`,12),z(42,`section`,13)(43,`h2`,14),J(44,`Plugin calls`),B(),P(45,tJ,12,1,`p`,15)(46,pJ,15,9),B(),z(47,`section`,16)(48,`h2`,17),J(49,`Plugins`),B(),P(50,mJ,2,0,`p`,18)(51,yJ,17,0,`div`,19),B(),z(52,`section`,20)(53,`h2`,21),J(54,`Listeners`),B(),P(55,bJ,2,0,`p`,18)(56,DJ,17,0,`div`,22),B()),e&2){let e,n=t,r=K();M(3),F((e=r.summary())?3:-1,e),M(2),Y(r.message()),M(5),F(r.pageOptions().length>1?10:-1),M(7),Y(n.info.platform),M(),X(` (`,n.info.native?`native`:`web`,`) `),M(6),Y(n.info.env.serverUrl||`none`),M(5),X(` `,n.info.env.capacitorHttp===null?`Unknown`:n.info.env.capacitorHttp?`On`:`Off`,` `),M(5),Y(r.loggedLabel()),M(6),Y(n.info.env.userAgent||`unknown`),M(),F(r.stateCards().length?41:-1),M(4),F(!n.info.bridge&&!n.info.webCalls?45:46),M(5),F(n.info.plugins.length?51:50),M(5),F(n.listeners.length?56:55)}}function kJ(e,t){e&1&&(z(0,`p`,1),J(1,` No Capacitor app reports to this server. Start the overlay in the app, then use it. `),B())}var AJ=`https://pangular-inspector.dev/inspectors/capacitor/#web-calls`,jJ=2e3,MJ={all:`All calls`,failed:`Failed`,slow:`Slow (500 ms or more)`,pending:`Pending`},NJ=class e{rpc=$(null);destroyRef=E(ws);host=E(Nl);injector=E(Ss);seen=new Map;hostPageId=uE();unsubscribe;time=$D;preview=hq;pluginHint=cq;guideUrl=AJ;yesNo=ZK;filterOptions=Object.keys(MJ).map(e=>({value:e,label:MJ[e]}));pages=j([]);loaded=j(!1);failed=j(!1);selectedPageId=Nv({source:()=>this.pages(),computation:(e,t)=>t?.value&&e.some(e=>e.pageId===t.value)?t.value:$K(e,this.hostPageId)});selectedCallId=j(null);focusedCallId=j(null);filter=j(``);callFilter=j(`all`);now=j(Date.now());message=j(``);page=Q(()=>{let e=this.selectedPageId();return this.pages().find(t=>t.pageId===e)??null});pageOptions=Q(()=>this.pages().map(e=>({value:e.pageId,label:e.title||e.url||e.pageId,hint:e.info.platform})));maxCalls=Q(()=>kE(this.rpc()).limits.capacitorCalls);loggedLabel=Q(()=>{let e=this.page()?.info;return e?e.bridge&&e.webCalls?`Native and web`:e.bridge?`Native only`:e.webCalls?`Web only`:`None on this platform`:``});shownCalls=Q(()=>{let e=this.page();if(!e)return[];let t=this.filter().trim().toLowerCase(),n=this.callFilter(),r=n===`slow`?this.now():0;return[...e.calls].filter(e=>aq(e,n,r)).filter(e=>!t||`${e.plugin}.${e.method}`.toLowerCase().includes(t)).sort((e,t)=>t.startedAt-e.startedAt)});selected=Q(()=>this.shownCalls().find(e=>e.id===this.selectedCallId())??null);tabStop=Q(()=>{let e=this.shownCalls();for(let t of[this.focusedCallId(),this.selectedCallId()])if(t!==null&&e.some(e=>e.id===t))return t;return e[0]?.id??null});slowest=Q(()=>{let e=this.now();return Math.max(1,...this.shownCalls().map(t=>iq(t,e)))});hiddenBy=Q(()=>{let e=[],t=this.filter().trim();return t&&e.push(`the search “${t}”`),this.callFilter()!==`all`&&e.push(`the ${MJ[this.callFilter()]} filter`),e.join(` and `)});stateCards=Q(()=>{let e=this.page();return e?Uq(e):[]});leaks=Q(()=>uq(this.page()?.listeners??[]));liveSummary=Q(()=>{let e=this.page();return e?lq(e,this.now()):null});summary=j(null);summaryShownAt=0;summaryTimer;messageFlip=!1;constructor(){dc(()=>{let e=this.rpc();e&&this.load(e)}),dc(()=>{let e=this.liveSummary();jv(()=>this.queueSummary(e))});let e=setInterval(()=>this.now.set(Date.now()),1e3);this.destroyRef.onDestroy(()=>{clearInterval(e),clearTimeout(this.summaryTimer),this.unsubscribe?.()})}retry(){let e=this.rpc();e&&this.load(e)}callStats(e){return[{filter:`all`,label:`Calls`,count:e.calls},{filter:`failed`,label:`Failed`,count:e.failed},{filter:`slow`,label:`Slow, 500 ms+`,count:e.slow},{filter:`pending`,label:`Pending`,count:e.pending}]}select(e){this.selectedCallId.set(e),zd(()=>{globalThis.matchMedia?.(`(max-width: 880px)`).matches&&this.host.nativeElement.querySelector(`#cap-detail`)?.scrollIntoView?.({block:`nearest`})},{injector:this.injector})}onListKey(e){if(![`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key))return;let t=Array.from(this.host.nativeElement.querySelectorAll(`[data-cap-call]`));if(!t.length)return;let n=t.indexOf(document.activeElement),r=n;r=e.key===`ArrowDown`?Math.min(n+1,t.length-1):e.key===`ArrowUp`?Math.max(n-1,0):e.key===`Home`?0:t.length-1,e.preventDefault(),t[r]?.focus()}setSearch(e){e!==this.filter()&&(this.filter.set(e),this.announceCount())}setFilter(e){e!==this.callFilter()&&(this.callFilter.set(e),this.announceCount())}pickFilter(e){this.setFilter(this.callFilter()===e?`all`:e)}clearFilters(){this.filter.set(``),this.callFilter.set(`all`),this.announceCount()}announce(e){this.messageFlip=!this.messageFlip,this.message.set(this.messageFlip?`${e} `:e)}async copyCommand(e){try{await navigator.clipboard.writeText(e),this.announce(`Copied ${e}.`)}catch{this.announce(`The clipboard is not available here.`)}}leakCount(e){return this.leaks().get(`${e.plugin} ${e.event}`)??0}tone(e){return e.status===`pending`?`accent`:e.status===`ok`?`ok`:rq(e)?`warn`:`danger`}statusLabel(e){return e.status===`pending`?`Pending`:e.status===`ok`?`OK`:rq(e)?`Not implemented`:`Error`}durationText(e){return e.status===`pending`?`waiting ${oq(iq(e,this.now()))}`:e.durationMs===void 0?``:`${Math.round(e.durationMs)} ms`}barWidth(e){return Math.min(100,iq(e,this.now())/this.slowest()*100)}announceCount(){let e=this.page();e&&this.announce(`${this.shownCalls().length} of ${e.calls.length} calls shown`)}queueSummary(e){let t=this.summary();if(JSON.stringify(e)===JSON.stringify(t))return;clearTimeout(this.summaryTimer),this.summaryTimer=void 0;let n=this.summaryShownAt+jJ-Date.now();if(!t||!e||e.pageId!==t.pageId||n<=0){this.summary.set(e),this.summaryShownAt=Date.now();return}this.summaryTimer=setTimeout(()=>{this.summaryTimer=void 0,this.summary.set(this.liveSummary()),this.summaryShownAt=Date.now()},n)}async load(e){this.failed.set(!1);try{let t=await e.scope(`pangular`).rpc.sharedState(`capacitor`);if(this.destroyRef.destroyed)return;let n=e=>this.pages.set(QK(nq(e),this.seen));n(t.value()),this.unsubscribe?.(),this.unsubscribe=t.on(`updated`,n)}catch{this.failed.set(!0)}finally{this.loaded.set(!0)}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-capacitor-inspector`]],inputs:{rpc:[1,`rpc`]},decls:4,vars:1,consts:[[`search`,``],[`role`,`status`,1,`state`],[`role`,`alert`,1,`state`],[`type`,`button`,1,`small`,3,`click`],[1,`intro`],[`role`,`status`,`aria-label`,`Capacitor summary`,`aria-atomic`,`false`,1,`strip`],[1,`sr-only`],[`aria-labelledby`,`cap-env-title`,1,`env`],[1,`env-head`],[`id`,`cap-env-title`],[1,`page-picker`],[1,`wide`],[`aria-labelledby`,`cap-state-title`],[`aria-labelledby`,`cap-calls-title`],[`id`,`cap-calls-title`],[1,`notice`],[`aria-labelledby`,`cap-plugins-title`],[`id`,`cap-plugins-title`],[1,`empty`],[`tabindex`,`0`,`role`,`group`,`aria-label`,`Plugins table`,1,`table-wrap`],[`aria-labelledby`,`cap-listeners-title`],[`id`,`cap-listeners-title`],[`tabindex`,`0`,`role`,`group`,`aria-label`,`Listeners table`,1,`table-wrap`],[`aria-atomic`,`true`,1,`stat`],[1,`stat-label`],[1,`stat-value`],[`type`,`button`,`aria-atomic`,`true`,1,`stat`],[`type`,`button`,`aria-atomic`,`true`,1,`stat`,3,`click`],[`id`,`cap-page-label`,1,`label-key`],[`labelledBy`,`cap-page-label`,3,`valueChange`,`options`,`value`],[`id`,`cap-state-title`],[3,`cards`,`now`],[`target`,`_blank`,`rel`,`noopener noreferrer`,3,`href`],[1,`toolbar`],[1,`search`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`,1,`search-icon`],[`cx`,`11`,`cy`,`11`,`r`,`7`],[`d`,`m20 20-3.5-3.5`],[`type`,`search`,`aria-label`,`Filter calls by plugin or method`,`placeholder`,`Filter by plugin or method`,3,`input`,`keydown.escape`,`value`],[`ariaLabel`,`Show calls`,1,`show`,3,`valueChange`,`options`,`value`],[1,`count`],[`what`,`plugin calls`,`limit`,`capacitorCalls`,3,`dropped`,`max`],[1,`split`],[1,`muted`],[`aria-label`,`Plugin calls, newest first`,1,`calls`,3,`keydown`],[3,`call`,`now`],[`type`,`button`,`data-cap-call`,``,1,`call`,3,`focus`,`click`],[1,`name`],[1,`chip`,`status`],[`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`d`,`M20 6 9 17l-5-5`],[1,`chip`,`via`],[1,`duration`],[`aria-hidden`,`true`,1,`bar`],[1,`when`],[`cx`,`12`,`cy`,`12`,`r`,`9`],[`d`,`m15 9-6 6M9 9l6 6`],[`d`,`M5.6 5.6l12.8 12.8`],[`d`,`M12 7v5l3 2`],[3,`announce`,`call`,`now`],[`scope`,`col`],[`scope`,`row`],[1,`note`],[1,`hint`],[`type`,`button`,1,`copy`],[`type`,`button`,1,`copy`,3,`click`],[1,`last`],[`data-tone`,`warn`,1,`chip`,`leak`],[1,`payload`],[`d`,`M12 3 2 21h20z`],[`d`,`M12 10v4M12 17.5v.01`]],template:function(e,t){if(e&1&&P(0,Jq,2,0,`p`,1)(1,Yq,5,0,`div`,2)(2,OJ,57,13)(3,kJ,2,0,`p`,1),e&2){let e;F(t.loaded()?t.failed()?1:(e=t.page())?2:3:0,e)}},dependencies:[iO,GD,jq,Wq],styles:[`[_nghost-%COMP%] { display: block; font-size: 13px; } @@ -13944,19 +13979,40 @@ td.last[_ngcontent-%COMP%] { .empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%], .state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] { margin: 0 0 8px; -}`]})};function fJ(e){return` +}`]})};function PJ(e){return` .devframes-dock-entry button { - transition: opacity 0.2s, filter 0.2s, background-color 0.2s, transform 0.3s; + transition: background-color 0.2s, transform 0.3s; + } + /* Dim the icon of an inactive dock, never its badge, so the count keeps + its contrast. hub-ui's own dim classes would fade the whole button. */ + .devframes-dock-entry button.op50, + .devframes-dock-entry button.saturate-0 { + opacity: 1; + filter: none; + } + .devframes-dock-entry button > * { + transition: opacity 0.2s, filter 0.2s; } - .devframes-dock-entry button:not(.scale-120) { + .devframes-dock-entry button:not(.scale-120) > :not(.absolute) { opacity: 0.45; filter: saturate(0); } - .devframes-dock-entry button:not(.scale-120):hover, - .devframes-dock-entry button:not(.scale-120):focus-visible { + .devframes-dock-entry button:not(.scale-120):hover > :not(.absolute), + .devframes-dock-entry button:not(.scale-120):focus-visible > :not(.absolute) { opacity: 1; filter: none; } + /* hub-ui's badge palette (blue-500 and red-500 on a pale tint) is below + 4.5:1, and it sets the colors inline, hence the attribute selectors and + !important. blue-600 and red-600 with white text pass. */ + .devframes-dock-entry .absolute[style*="59, 130, 246"] { + background-color: #2563eb !important; + color: #ffffff !important; + } + .devframes-dock-entry .absolute[style*="239, 68, 68"] { + background-color: #dc2626 !important; + color: #ffffff !important; + } .devframes-dock-entry button:focus-visible { outline: 2px solid ${e===`light`?`#92400e`:`#f5a524`}; outline-offset: 2px; @@ -13971,11 +14027,12 @@ td.last[_ngcontent-%COMP%] { color-scheme: ${e}; } @media (prefers-reduced-motion: reduce) { - .devframes-dock-entry button { + .devframes-dock-entry button, + .devframes-dock-entry button > * { transition: none; } } -`}var pJ=new Map;function mJ(e,t=`dark`,n=50){let r=e?.querySelector(`devframes-dock-standalone`)?.shadowRoot;if(r){if(e){let t=pJ.get(e);t!==void 0&&(clearTimeout(t),pJ.delete(e))}let n=r.querySelector(`style[data-pangular]`);n||(n=e.createElement(`style`),n.dataset.pangular=``,r.append(n)),n.textContent=fJ(t);return}if(n>0&&e){let r=pJ.get(e);r!==void 0&&clearTimeout(r);let i=setTimeout(()=>{pJ.delete(e),mJ(e,t,n-1)},100);pJ.set(e,i)}}var hJ=class e{current=j(`dark`);constructor(){let e=E(Cs),t=vJ(),n=document.documentElement.dataset.theme,r=n===`light`||n===`dark`;if(n===`light`||n===`dark`)this.current.set(n);else if(t)r=!0,this.apply(_J(t));else{let t=gJ();if(t){this.current.set(t.matches?`light`:`dark`);let n=e=>{r||this.current.set(e.matches?`light`:`dark`)};t.addEventListener(`change`,n),e.onDestroy(()=>t.removeEventListener(`change`,n))}}let i;try{i=new BroadcastChannel(`pangular:theme`)}catch{}uc(()=>{let e=this.current();try{i?.postMessage(e)}catch{}for(let{win:t,origin:n}of yJ())try{t.postMessage({type:`pangular:theme-change`,theme:e},n)}catch{}});let a=e=>{if(e.source!==window.parent)return;let t=e.data;t?.type===`pangular:theme-change`&&(r=!0,this.apply(t.theme===`dark`?`dark`:`light`))};window.addEventListener(`message`,a);let o;t&&(o=new MutationObserver(()=>this.apply(_J(t))),o.observe(t,{attributes:!0,attributeFilter:[`class`]})),e.onDestroy(()=>{window.removeEventListener(`message`,a),o?.disconnect(),i?.close()})}apply(e){this.current.set(e),document.documentElement.dataset.theme=e}static ɵfac=function(t){return new(t||e)};static ɵprov=kl({token:e,factory:e.ɵfac})};function gJ(){try{return window.matchMedia?.(`(prefers-color-scheme: light)`)??null}catch{return null}}function _J(e){return e.classList.contains(`dark`)?`dark`:`light`}function vJ(){try{return window.frameElement?.closest(`.devframes-color-root`)??null}catch{return null}}function yJ(e=window){let t=[],n;try{n=e.location.ancestorOrigins}catch{}let r=e;try{for(let i=0;r!==r.parent;i++){r=r.parent;let a=bJ(e,r,i,n);a&&t.push({win:r,origin:a})}}catch{}return t}function bJ(e,t,n,r){let i=e=>e&&e!==`null`?e:void 0,a=i(r?.item(n));if(a)return a;try{let e=i(t.location.origin);if(e)return e}catch{}if(!(n>0))try{return i(new URL(e.document.referrer).origin)}catch{return}}var xJ=`__DEVFRAME_HUB_CLIENT_CONTEXT__`;function SJ(){try{return window.parent===window?void 0:window.parent[xJ]}catch{return}}function CJ(e,t,n=50){let r=SJ();if(!r){if(n<=0||window.parent===window)return()=>{};let r=()=>{},i=setTimeout(()=>r=CJ(e,t,n-1),100);return()=>{clearTimeout(i),r()}}let i=e.map(e=>r.docks.getStateById(MT(e))?.events.on(`entry:activated`,()=>t(e))??(()=>{})),a=r.docks.selectedId,o=e.find(e=>MT(e)===a);return o&&t(o),()=>i.forEach(e=>e())}function wJ(){return!!SJ()}async function TJ(e){let t=SJ();if(!t)return!1;try{return await t.docks.switchEntry(MT(e))}catch{return!1}}function EJ(e,t){let n=new URL(e);return n.searchParams.delete(`view`),n.hash=t?`tab=${t}`:``,n.pathname+n.search+n.hash}function DJ(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}var OJ=`pangular-tab`;function kJ(e,t,n){let r=new URLSearchParams(e.replace(/^#/,``)).get(`tab`)||t;return n.find(e=>e===r)}function AJ(e){try{return sessionStorage.getItem(`${OJ}:${e}`)}catch{return null}}function jJ(e,t){try{sessionStorage.setItem(`${OJ}:${e}`,t)}catch{}}function MJ(e,t){try{return new URL(e,t.href).origin===t.origin}catch{return!1}}function NJ(e,t){if(t.protocol!==`chrome-extension:`)return!1;try{let{protocol:t}=new URL(e);return t===`http:`||t===`https:`}catch{return!1}}function PJ(e=location){let t=new URLSearchParams(e.search).get(`baseURL`);if(t&&(MJ(t,e)||NJ(t,e)))return t;if(!(e.pathname.includes(`__pangular`)||e.pathname.includes(`__devframes/`)))return[`/__pangular/`,`./`]}var FJ={dark:{ngrx:{accent:`#d770e8`,text:`#f0abfc`},analog:{accent:`#ff5470`,text:`#fda4af`},"angular-native":{accent:`#ff4d6d`,text:`#fda4af`},nativescript:{accent:`#8196ff`,text:`#a5b4fc`},capacitor:{accent:`#53b9ff`,text:`#7dd3fc`}},light:{ngrx:{accent:`#a21caf`,text:`#701a75`},analog:{accent:`#be123c`,text:`#881337`},"angular-native":{accent:`#be123c`,text:`#881337`},nativescript:{accent:`#3448c5`,text:`#3730a3`},capacitor:{accent:`#0369a1`,text:`#0c4a6e`}}};function IJ(e,t){let n=FJ[t];return e&&n[e]||null}var LJ=[`nav`],RJ=[`main`],zJ=e=>[e],BJ=(e,t)=>t.id;function VJ(e,t){e&1&&(A(),z(0,`svg`,4),V(1,`path`,22),B())}function HJ(e,t){e&1&&(A(),z(0,`svg`,4),V(1,`path`,23)(2,`path`,24)(3,`path`,25)(4,`path`,26)(5,`path`,27)(6,`path`,28),B())}function UJ(e,t){e&1&&(A(),z(0,`svg`,5)(1,`defs`)(2,`linearGradient`,29),V(3,`stop`,30)(4,`stop`,31),B()(),V(5,`path`,32),z(6,`g`,33),V(7,`path`,34)(8,`path`,35)(9,`path`,36)(10,`path`,37),B()())}function WJ(e,t){e&1&&(A(),z(0,`svg`,6),V(1,`path`,38)(2,`path`,39)(3,`path`,40)(4,`path`,41),B())}function GJ(e,t){e&1&&(A(),z(0,`svg`,7),V(1,`path`,42),B())}function KJ(e,t){e&1&&(A(),z(0,`svg`,8)(1,`defs`)(2,`linearGradient`,43),V(3,`stop`,44)(4,`stop`,45)(5,`stop`,46)(6,`stop`,47)(7,`stop`,48)(8,`stop`,49),B()(),V(9,`path`,50),B())}function qJ(e,t){e&1&&(A(),z(0,`svg`,9),V(1,`rect`,51),z(2,`g`,52)(3,`defs`)(4,`mask`,53),V(5,`rect`,54),z(6,`g`,55),V(7,`path`,56)(8,`path`,57),B()(),z(9,`clipPath`,58),V(10,`rect`,59),B()(),z(11,`g`,60),V(12,`ellipse`,61),B(),z(13,`g`,62),V(14,`path`,63)(15,`path`,64),B(),z(16,`g`,60),V(17,`ellipse`,65)(18,`ellipse`,66),z(19,`g`,67),V(20,`line`,68)(21,`circle`,69)(22,`line`,70)(23,`circle`,71),B()()()())}function JJ(e,t){if(e&1){let e=W();z(0,`button`,73),G(`click`,function(){let t=O(e).$implicit;return k(K(2).switchTab(t.id))}),V(1,`app-tab-icon`,74),z(2,`span`),J(3),B()()}if(e&2){let e=t.$implicit,n=K(2);q(`active`,n.tab()===e.id),N(`aria-current`,n.tab()===e.id?`page`:null)(`tabindex`,n.rovingTab()===e.id?0:-1),M(),R(`name`,e.id),M(2),Y(e.label)}}function YJ(e,t){if(e&1&&(z(0,`div`,12),I(1,JJ,4,6,`button`,72,BJ),B()),e&2){let e=K();M(),L(e.tabs())}}function XJ(e,t){if(e&1){let e=W();z(0,`a`,75),G(`click`,function(t){let n=O(e);return k(K().openFullPanel(t,n.tab))}),A(),z(1,`svg`,76),V(2,`rect`,77)(3,`rect`,78)(4,`rect`,79)(5,`rect`,80),B(),J(6,` Open full panel `),B()}e&2&&R(`href`,t.href,ku)}function ZJ(e,t){if(e&1){let e=W();z(0,`div`,18)(1,`p`),J(2,` Can't reach the devtools server. Check that the dev server is running. The panel keeps trying to connect. `),B(),z(3,`button`,73),G(`click`,function(){return O(e),k(K().retryConnection())}),J(4,`Retry now`),B()()}}function QJ(e,t){e&1&&V(0,`app-coming-soon`,19),e&2&&R(`info`,t)}function $J(e,t){e&1&&(z(0,`p`,20),J(1,`Looking for an Angular Native app…`),B())}function eY(e,t){e&1&&(J(0,` To turn it on, set `),z(1,`code`),J(2),B(),J(3,` in the devtools options. `)),e&2&&(M(2),Y(t))}function tY(e,t){if(e&1&&(z(0,`p`,21),J(1,` This inspector is turned off in the devtools config (`),z(2,`code`),J(3,`inspectors`),B(),J(4,`). `),P(5,eY,4,1),z(6,`a`,81),J(7,`About inspectors`),z(8,`span`,82),J(9,` (opens in a new tab)`),B()()()),e&2){let e,t=K();M(5),F((e=t.turnOnSnippet())?5:-1,e),M(),R(`href`,t.inspectorsDocsUrl,ku)}}function nY(e,t){if(e&1){let e=W();z(0,`app-dashboard`,85),G(`navigate`,function(t){return O(e),k(K(3).switchTab(t))}),B()}e&2&&R(`rpc`,K(3).rpc())}function rY(e,t){if(e&1){let e=W();z(0,`app-component-tree`,86),G(`focusHandled`,function(){return O(e),k(K(3).componentFocus.set(null))})(`showForm`,function(t){return O(e),k(K(3).showForm(t))}),B()}if(e&2){let e=K(3);R(`rpc`,e.rpc())(`focus`,e.componentFocus())}}function iY(e,t){if(e&1){let e=W();z(0,`app-route-inspector`,87),G(`showComponent`,function(t){return O(e),k(K(3).showComponent(t))}),B()}e&2&&R(`rpc`,K(3).rpc())}function aY(e,t){e&1&&V(0,`app-signal-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function oY(e,t){e&1&&V(0,`app-di-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function sY(e,t){e&1&&V(0,`app-store-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function cY(e,t){e&1&&V(0,`app-network-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function lY(e,t){if(e&1){let e=W();z(0,`app-forms-inspector`,88),G(`focusHandled`,function(){return O(e),k(K(3).formFocus.set(null))}),B()}if(e&2){let e=K(3);R(`rpc`,e.rpc())(`focus`,e.formFocus())}}function uY(e,t){e&1&&V(0,`app-pipes-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function dY(e,t){e&1&&V(0,`app-analog-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function fY(e,t){e&1&&V(0,`app-capacitor-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function pY(e,t){if(e&1&&P(0,nY,1,1,`app-dashboard`,83)(1,rY,1,2,`app-component-tree`,84)(2,iY,1,1,`app-route-inspector`,83)(3,aY,1,1,`app-signal-inspector`,83)(4,oY,1,1,`app-di-inspector`,83)(5,sY,1,1,`app-store-inspector`,83)(6,cY,1,1,`app-network-inspector`,83)(7,lY,1,2,`app-forms-inspector`,84)(8,uY,1,1,`app-pipes-inspector`,83)(9,dY,1,1,`app-analog-inspector`,83)(10,fY,1,1,`app-capacitor-inspector`,83),e&2){let e;F((e=K(2).tab())===`dashboard`?0:e===`components`?1:e===`routes`?2:e===`signals`?3:e===`injectors`?4:e===`store`?5:e===`network`?6:e===`forms`?7:e===`pipes`?8:e===`analog`?9:e===`capacitor`?10:-1)}}function mY(e,t){e&1&&I(0,pY,11,1,null,null,wg),e&2&&L(sv(0,zJ,K().scopeKey()))}var hY=`all`,gY=[hY,...jT],_Y={angular:`Angular`,ngrx:`NgRx Store`,analog:`Analog`,"angular-native":`Angular Native`,nativescript:`NativeScript`,capacitor:`Capacitor`},vY={ngrx:`store`,analog:`analog`,capacitor:`capacitor`},yY={store:`ngrx`,analog:`analog`,capacitor:`capacitor`},bY={"angular-native":[`components`,`signals`,`injectors`,`store`,`pipes`]},xY={id:`nativescript`,name:`NativeScript`,badge:`Available`,heading:`Inspect NativeScript apps`,summary:`A NativeScript Angular app reports from the simulator or device to this server, and its components, signals, injectors and NgRx stores show up in the Angular dock.`,color:`#3c5afd`,plansTitle:`Set up an app`,plans:[`Install @pangular-inspector/devtools and @valor/nativescript-websockets`,`Call initNativeScriptOverlay() in main.ts, before the app bootstraps`,`Run npx pangular dev --no-auth in the app, then open the Angular dock`],link:{label:`NativeScript setup guide`,href:`https://pangular-inspector.dev/guides/nativescript/`}},SY={id:`capacitor`,name:`Capacitor`,badge:`Available`,heading:`Inspect Capacitor apps`,summary:`An Ionic or Capacitor app runs the browser overlay in its WebView and reports to this server, so it shows up in the Angular dock like a browser tab.`,color:`#119eff`,plansTitle:`Set up an app`,plans:[`With live reload on localhost, load @pangular-inspector/devtools/overlay as in a browser`,`In a bundled build, call initOverlay() from @pangular-inspector/devtools/overlay-manual with this server’s address and connectionMeta`,`Run the app, then come back here for its plugin calls, or open the Angular dock`],link:{label:`Capacitor setup guide`,href:`https://pangular-inspector.dev/guides/capacitor/`}},CY={id:`analog`,name:`Analog`,badge:`Not in this app`,heading:`This app doesn’t use Analog`,summary:`In an Analog app this dock shows your file routes, server load() and API calls, render modes and route lint.`,color:`#dd0330`,plans:[`Which page, layout and .server.ts files render a URL`,`Every load(), server function and API call with timing`,`SSR, prerendered or client only, per page`],link:{label:`Get started with Analog`,href:`https://analogjs.org/docs/getting-started`}},wY={id:`angular-native`,name:`Angular Native`,badge:`Not connected`,heading:`No Angular Native app is connected`,summary:`Start the overlay in your Angular Native app and run this server with --no-auth. The tabs fill as soon as the app reports.`,color:`#e11d48`,plans:[`The component tree, with the view outlined on the device`,`Signals and injectors of the running app`,`Live @ngrx/signals and @ngrx/store state`],link:{label:`Set up Angular Native`,href:`https://pangular-inspector.dev/guides/angular-native/`}},TY=[1e3,2e3,5e3,1e4];function EY(){let e=new URLSearchParams(location.search).get(`view`);return jT.find(t=>t===e)??null}Ub(class e{analog=j(!1);allTabs=[{id:`dashboard`,label:`Dashboard`},{id:`analog`,label:`Analog`},{id:`components`,label:`Components`},{id:`routes`,label:`Routes`},{id:`signals`,label:`Signals`},{id:`injectors`,label:`Injectors`},{id:`store`,label:`Store`},{id:`forms`,label:`Forms`},{id:`pipes`,label:`Pipes`},{id:`network`,label:`SSR & HTTP`},{id:`capacitor`,label:`Capacitor`}];view=j(EY());viewAccent=Q(()=>IJ(this.view(),this.themeService.current()));title=Q(()=>{let e=this.view();return e?_Y[e]:`Pangular Inspector`});mainLabel=Q(()=>this.availableTabs().find(e=>e.id===this.tab())?.label??this.title());analogKnown=j(!1);capacitorReporting=j(!1);capacitorKnown=j(!1);nativePageId=j(null);nativeKnown=j(!1);scopeKey=Q(()=>this.view()===`angular-native`?this.nativePageId()??``:``);comingSoon=Q(()=>{let e=this.view();if(e===`analog`)return this.analogKnown()&&!this.analog()?CY:void 0;if(e===`nativescript`)return xY;if(e===`capacitor`)return this.config().inspectors.capacitor&&this.capacitorKnown()&&!this.capacitorReporting()?SY:void 0;if(e===`angular-native`)return this.nativeKnown()&&!this.nativePageId()?wY:void 0});config=Q(()=>xE(this.rpc()));tabEnabled=EE;inspectorsDocsUrl=TE;turnOnSnippet=Q(()=>{let e=wE(this.tab());return e?`inspectors: {${e}: true}`:null});availableTabs=Q(()=>{if(this.comingSoon())return[];let e=this.view(),t=e?vY[e]:void 0,n=this.allTabs.filter(e=>EE(e.id,this.config()));if(t)return n.filter(e=>e.id===t);let r=e?bY[e]:void 0;return r?n.filter(e=>r.includes(e.id)):n.filter(t=>(t.id!==`analog`||this.analog())&&(t.id!==`capacitor`||this.capacitorReporting())&&!(e===`angular`&&yY[t.id]))});tabs=Q(()=>{let e=this.availableTabs();if(this.rpc())return e;let t=this.tab();return e.filter(e=>e.id===`dashboard`||e.id===t)});rovingTab=Q(()=>{let e=this.tabs(),t=this.tab();return e.some(e=>e.id===t)?t:e[0]?.id});onNavKey(e){let t=this.nav()?.nativeElement;if(!t||e.altKey||e.ctrlKey||e.metaKey)return;let n=[...t.querySelectorAll(`button`)],r=n.indexOf(document.activeElement);if(r<0)return;let i=n.length-1,a={ArrowRight:r===i?0:r+1,ArrowLeft:r===0?i:r-1,Home:0,End:i},o=Object.hasOwn(a,e.key)?a[e.key]:-1;o<0||(e.preventDefault(),n[o].focus())}fullPanelLink=Q(()=>{let e=this.view();if(!e||location.protocol===`chrome-extension:`)return null;let t=this.comingSoon()?`dashboard`:vY[e]??this.tab();return{tab:t,href:EJ(location.href,t)}});tab=Tv(()=>{let e=this.view();return e&&(vY[e]??bY[e]?.[0])||`dashboard`});rpc=j(null);connected=j(!1);connectionFailed=j(!1);hiddenPages=j([]);pageId=nE();backgroundNote=Q(()=>{let e=this.hiddenPages();return this.pageId?e.includes(this.pageId)?`Tab in background, showing the last data.`:``:e.length?e.length===1?`A tab is in the background, showing its last data.`:`${e.length} tabs are in the background, showing their last data.`:``});stopVisibility=()=>{};stopNative=()=>{};stopCapacitor=()=>{};stopFollowing=()=>{};stopHighlights=()=>{};nav=Rv(`nav`);main=Rv(`main`);injector=E(xs);themeService=E(hJ);navObserver;navFade=j({start:!1,end:!1});constructor(){Id(()=>{let e=this.nav()?.nativeElement;e&&typeof ResizeObserver<`u`&&(this.navObserver=new ResizeObserver(()=>this.measureNav()),this.navObserver.observe(e))}),ey(()=>{this.tab(),this.tabs(),Cv(()=>{this.revealActiveTab(),this.measureNav()})}),uc(()=>{let e=this.themeService.current();Cv(()=>{try{window.parent!==window&&mJ(window.parent.document,e)}catch{}})})}measureNav(){let e=this.nav()?.nativeElement;if(!e)return;let t=e.scrollWidth-e.clientWidth,n=e.scrollLeft>1,r=t>1&&e.scrollLeftn?e.scrollLeft=Math.max(0,n):e.scrollLefte===hY?this.showFullPanel():this.showView(e));let e=kJ(location.hash,AJ(this.tabScope()),this.availableTabs().map(e=>e.id));e?this.tab.set(e):!this.view()&&kJ(location.hash,AJ(this.tabScope()),[`capacitor`])===`capacitor`?this.restoreCapacitor=!0:!this.view()&&kJ(location.hash,AJ(this.tabScope()),[`analog`])===`analog`&&(this.restoreAnalog=!0),this.stopHighlights=lE(()=>this.rpc()),this.connect()}connecting=!1;retries=0;retryTimer;connect(){if(this.connecting||this.rpc())return;this.connecting=!0,clearTimeout(this.retryTimer);let e=PJ();kT(e?{baseURL:e}:{}).then(e=>{if(this.connecting=!1,this.destroyed){e.close?.();return}this.retries=0,this.connectionFailed.set(!1),this.refocusOnConnect&&this.focusCurrentTab(),this.refocusOnConnect=!1,this.rpc.set(e),this.connected.set(!0),this.watchVisibility(e),this.watchAngularNative(e),this.watchCapacitor(e),e.scope(`pangular`).rpc.call(`analog-project`).then(e=>{let t=!!e?.analog;this.analog.set(t),this.analogKnown.set(!0),t&&this.restoreAnalog&&EE(`analog`,this.config())&&this.tab.set(`analog`),this.restoreAnalog=!1,!t&&this.tab()===`analog`&&!this.view()&&this.tab.set(`dashboard`)},()=>{this.analogKnown.set(!0),this.restoreAnalog=!1,this.tab()===`analog`&&!this.view()&&this.tab.set(`dashboard`)}),e.events.on(`connection:status`,t=>{this.connected.set(t===`connected`),!(t!==`disconnected`&&t!==`error`||this.rpc()!==e)&&(this.rpc.set(null),e.close?.(),this.retryLater())})},()=>{this.connecting=!1,!this.destroyed&&(this.analogKnown.set(!0),this.nativeKnown.set(!0),this.retryLater())})}retryLater(){if(this.destroyed)return;this.connectionFailed.set(!0);let e=TY[Math.min(this.retries++,TY.length-1)];clearTimeout(this.retryTimer),this.retryTimer=setTimeout(()=>this.connect(),e)}retryConnection(){this.retries=0,this.refocusOnConnect=!0,this.connect()}refocusOnConnect=!1;destroyed=!1;ngOnDestroy(){this.destroyed=!0,clearTimeout(this.retryTimer),this.stopNative(),this.stopCapacitor(),this.stopFollowing(),this.stopVisibility(),this.stopHighlights(),this.navObserver?.disconnect()}showView(e){if(e===this.view())return;tE(e===`angular-native`?this.nativePageId():null),this.view.set(e);let t=new URL(location.href);t.searchParams.set(`view`,e),t.hash=``,history.replaceState(history.state,``,t)}showFullPanel(e){if(!this.view())return;tE(null),this.view.set(null);let t=new URL(location.href);t.searchParams.delete(`view`),t.hash=e?`tab=${e}`:``,history.replaceState(history.state,``,t);let n=e??AJ(this.tabScope()),r=this.availableTabs().map(e=>e.id),i=kJ(t.hash,n,r);i?this.setTab(i):n===`capacitor`&&(this.restoreCapacitor=!0)}openFullPanel(e,t){DJ(e)&&wJ()&&(e.preventDefault(),this.showFullPanel(t),this.focusCurrentTab(),TJ(hY))}formFocus=j(null);componentFocus=Tv({source:this.tab,computation:()=>null});showForm(e){this.formFocus.set({id:e}),this.switchTab(`forms`)}showComponent(e){this.config().inspectors.components&&(this.switchTab(`components`),this.componentFocus.set(e))}inspectFromPanel({source:e,origin:t,data:n}){if(e!==window.parent||t!==location.origin)return;let r=n;r?.type===`pangular:inspect-component`&&typeof r.id==`string`&&this.tab()===`components`&&this.config().inspectors.components&&this.componentFocus.set({id:r.id})}switchTab(e){let t=yY[e];if(this.view()===`angular`&&t){this.activateDock(t,e);return}this.setTab(e),history.replaceState(history.state,``,`#tab=${e}`)}restoreAnalog=!1;restoreCapacitor=!1;setTab(e){this.restoreAnalog=!1,this.restoreCapacitor=!1,this.keepFocus(),this.tab.set(e),jJ(this.tabScope(),e)}tabScope(){return this.view()??`panel`}async watchAngularNative(e){try{let t=await e.scope(`pangular`).rpc.sharedState(`component-tree`),n=e=>{let t=e?.pages,n=DD(t,this.nativePageId());this.view()===`angular-native`&&tE(n),this.nativePageId.set(n),this.nativeKnown.set(!0)};n(t.value()),this.stopNative(),this.stopNative=t.on(`updated`,n)}catch{this.nativeKnown.set(!0)}}async watchCapacitor(e){try{let t=await e.scope(`pangular`).rpc.sharedState(`capacitor`),n=e=>{if(e===void 0)return;let t=PK(e).length>0;this.capacitorReporting.set(t),this.capacitorKnown.set(!0),t&&this.restoreCapacitor&&EE(`capacitor`,this.config())&&(this.restoreCapacitor=!1,this.tab.set(`capacitor`)),!t&&this.tab()===`capacitor`&&!this.view()&&this.tab.set(`dashboard`)};n(t.value()),this.stopCapacitor(),this.stopCapacitor=t.on(`updated`,n)}catch{this.capacitorReporting.set(!1),this.capacitorKnown.set(!0)}}async watchVisibility(e){try{let t=await e.scope(`pangular`).rpc.sharedState(`page-visibility`),n=e=>{let t=e?.hidden;this.hiddenPages.set(Array.isArray(t)?t.filter(e=>typeof e==`string`):[])};n(t.value()),this.stopVisibility(),this.stopVisibility=t.on(`updated`,n)}catch{}}keepFocus(){let e=document.activeElement,t=this.main()?.nativeElement;(!e||e===document.body||t?.contains(e))&&this.focusCurrentTab()}focusCurrentTab(){Id(()=>{let e=document.activeElement;e&&e!==document.body||(this.nav()?.nativeElement.querySelector(`button.active`)??this.main()?.nativeElement)?.focus()},{injector:this.injector})}async activateDock(e,t){if(await TJ(e))return;if(window.parent===window){this.keepFocus(),this.showView(e);return}let n=this.rpc();if(!n?.call){this.setTab(t);return}try{await n.call(`hub:docks:activate`,{dockId:MT(e)}),this.keepFocus(),this.showView(e)}catch{this.setTab(t)}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Bh({type:e,selectors:[[`app-root`]],viewQuery:function(e,t){e&1&&e_(t.nav,LJ,5)(t.main,RJ,5),e&2&&t_(2)},hostVars:4,hostBindings:function(e,t){e&1&&G(`message`,function(e){return t.inspectFromPanel(e)},ju),e&2&&C_(`--%NS%accent`,t.viewAccent()?.accent??null)(`--%NS%accent-text`,t.viewAccent()?.text??null)},decls:29,vars:22,consts:[[`nav`,``],[`main`,``],[1,`brand`],[1,`mark`],[`width`,`22`,`height`,`22`,`viewBox`,`0 0 256 256`,`aria-hidden`,`true`],[`width`,`22`,`height`,`22`,`viewBox`,`0 0 32 32`,`aria-hidden`,`true`],[`width`,`24`,`height`,`17`,`viewBox`,`0 0 256 182`,`aria-hidden`,`true`],[`width`,`22`,`height`,`22`,`viewBox`,`0 0 24 24`,`fill`,`currentColor`,`aria-hidden`,`true`],[`width`,`20`,`height`,`22`,`viewBox`,`0 0 223 236`,`aria-hidden`,`true`],[`width`,`30`,`height`,`30`,`viewBox`,`0 0 500 500`,`aria-hidden`,`true`],[1,`title`],[`aria-label`,`Inspectors`,3,`scroll`,`keydown`],[`role`,`toolbar`,`aria-label`,`Inspectors`,`aria-orientation`,`horizontal`,1,`tab-bar`],[1,`full-panel`,3,`href`],[`role`,`status`,1,`status`],[`aria-hidden`,`true`,1,`dot`],[`tabindex`,`-1`],[`role`,`status`,1,`background-note`],[`role`,`alert`,1,`connection-error`],[3,`info`],[`role`,`status`,1,`turned-off`],[1,`turned-off`],[`fill`,`#3c5afd`,`d`,`M237.248 18.752q18.061 18.06 18.748 45.247V192c-.457 18.12-6.707 33.207-18.748 45.247c-12.04 12.04-27.127 18.291-45.251 18.752H63.999q-27.187-.69-45.247-18.752C6.712 225.208.46 210.121 0 192.001V64q.69-27.187 18.752-45.247Q36.812.692 63.999 0h127.998c18.124.46 33.211 6.711 45.251 18.752m-17.655 103q-6.033-6.003-6.28-15.066V64q-.192-9.063-6.221-15.091c-4.02-4.023-9.054-6.093-15.095-6.22h-21.312v106.626L85.315 42.687H63.999c-6.042.128-11.072 2.198-15.091 6.221c-4.023 4.02-6.093 9.05-6.22 15.09v42.688q-.249 9.063-6.281 15.066q-6.03 5.996-15.091 6.246q9.062.255 15.09 6.25c4.024 4.002 6.115 9.024 6.281 15.066V192c.128 6.037 2.198 11.072 6.221 15.091q6.03 6.03 15.09 6.22h21.317V106.687l85.37 106.627h21.312c6.041-.128 11.076-2.202 15.095-6.221s6.093-9.054 6.22-15.09v-42.688q.249-9.063 6.281-15.066q6.03-5.995 15.091-6.25q-9.062-.25-15.09-6.246`],[`fill`,`#53b9ff`,`d`,`M39.863 54.115L.311 93.716l60.995 61.179L0 216.385l39.428 39.619l61.43-61.507l61.097 61.068l39.552-39.602z`],[`fill`,`#119eff`,`d`,`m140.517 154.896l-39.658 39.601l61.097 61.069l39.552-39.602z`],[`fill-opacity`,`.2`,`d`,`m140.517 154.896l-39.658 39.601l15.267 15.182z`],[`fill`,`#53b9ff`,`d`,`M194.57 100.985L256 39.478L216.431 0l-61.412 61.384L93.917.311L54.365 39.913L216.01 201.761l39.552-39.602z`],[`fill`,`#119eff`,`d`,`m115.36 100.987l39.659-39.602L93.917.313L54.365 39.914z`],[`fill-opacity`,`.2`,`d`,`m115.359 100.985l39.659-39.601l-15.271-15.186z`],[`id`,`an-mark-grad`,`x1`,`0`,`y1`,`0`,`x2`,`1`,`y2`,`1`],[`offset`,`0`,`stop-color`,`#f0224f`],[`offset`,`1`,`stop-color`,`#c4002d`],[`d`,`M16 0C27.2 0 32 4.8 32 16S27.2 32 16 32 0 27.2 0 16 4.8 0 16 0Z`,`fill`,`url(#an-mark-grad)`],[`transform`,`translate(6.4 6.4) scale(0.8)`,`fill`,`#fff`],[`d`,`M14.8486 0L23.138 16.8551L23.9996 3.99892L14.8486 0Z`],[`d`,`M16.9875 17.7114H7.01272L5.73926 20.627L12.0001 24L18.261 20.627L16.9875 17.7114Z`],[`d`,`M8.72168 13.9298H15.2812L11.9997 6.39575L8.72168 13.9298Z`],[`d`,`M9.15103 0L0 3.99892L0.861556 16.8551L9.15103 0Z`],[`fill`,`#c30f2e`,`d`,`M152.228.001L48.455 181.046H256L152.228 0z`],[`fill`,`#dd0330`,`d`,`M88.314 26.967L0 181.52h176.628L88.315 26.967z`],[`fill`,`#fff`,`d`,`M18.167 135.294h220.236v-2.419H18.167z`],[`fill`,`#fff`,`d`,`M204.38 170.667c-.861 0-1.67-.358-2.348-1.034c-4.045-4.063-4.221-20.586-4.026-45.33c.11-13.521.257-32.043-1.9-33.504c-2.104.873-2.315 16.172-2.451 26.301c-.162 11.785-.327 23.98-2.242 30.189c-.57 1.84-1.306 3.525-2.786 3.39c-2.086-.185-2.76-3.48-4.317-16.478c-.647-5.4-1.317-10.98-2.101-13.14a11 11 0 0 0-.269-.66c-.835 1.889-1.8 7.079-2.47 10.682c-.927 4.976-1.803 9.676-2.9 11.726c-.847 1.575-2.19 3.63-4.067 3.231c-2.558-.537-3.323-5.693-3.552-8.719c0-25.455-3.33-28.417-3.997-28.753l-.107.081l-.162-.036c-2.377 1.038-2.506 9.294-2.627 17.276c-.096 5.856-.198 12.492-1.053 18.701c-1.108 8.05-2.448 9.603-4.115 9.507c-3.838-.262-3.95-13.482-3.95-14.987c0-.472.012-1.028.027-1.642c.074-3.076.205-8.8-1.687-10.604c-.25-.239-.603-.515-.879-.437c-1.347.339-2.745 4.714-3.209 6.153c-.147.457-.265.833-.364 1.09c-.078.214-.177.515-.294.88c-1.02 3.095-2.18 6.183-4.16 6.944c-.732.284-1.498.222-2.216-.183c-.953-.541-1.73-1.646-2.455-3.482c-.397-1.016-.735-2.046-1.082-3.081c-.419-1.263-.85-2.569-1.384-3.808c-.419-.965-1.464-1.4-2.796-1.164c-2.768.494-3.232 3.29-3.622 7.5c-.07.733-.137 1.452-.228 2.128c-.011.198-.501 6.38-.814 8.344c-.865 5.39-2.002 7.512-3.89 7.358c-4.66-.398-6.798-20.836-6.684-29.47c.088-6.592-1.104-9-1.818-9.382c-.074-.034-.189-.096-.46.095c-.843.571-1.594 2.348-1.363 4.215c2.566 20.32.674 43.592-3.96 48.833c-1.46 1.649-3.448 1.627-4.832.236c-4.049-4.064-4.218-20.586-4.026-45.33c.11-13.521.254-32.043-1.9-33.504c-2.105.873-2.311 16.172-2.45 26.301c-.163 11.785-.329 23.98-2.246 30.189c-.57 1.84-1.307 3.525-2.782 3.39c-2.091-.186-2.761-3.48-4.321-16.478c-.649-5.4-1.319-10.98-2.101-13.14c-.1-.273-.189-.49-.27-.66c-.832 1.889-1.796 7.079-2.466 10.682c-.927 4.976-1.803 9.676-2.904 11.726c-.846 1.575-2.19 3.63-4.063 3.231c-2.558-.537-3.324-5.693-3.552-8.719c-.003-25.455-3.33-28.417-3.997-28.753l-.106.081l-.166-.036c-2.374 1.038-2.503 9.293-2.629 17.276c-.091 5.856-.194 12.492-1.048 18.701c-1.107 8.05-2.437 9.618-4.111 9.507c-3.846-.262-3.958-13.482-3.958-14.987c0-.472.016-1.028.03-1.642c.074-3.076.207-8.8-1.685-10.604c-.25-.239-.603-.515-.88-.438c-1.347.34-2.75 4.715-3.206 6.155a47 47 0 0 1-.364 1.09q-.16.432-.298.875c-1.02 3.096-2.18 6.187-4.155 6.95c-.736.282-1.506.22-2.22-.185c-.953-.541-1.734-1.646-2.454-3.482c-.398-1.016-.74-2.046-1.083-3.081c-.42-1.263-.854-2.569-1.387-3.808c-.416-.965-1.465-1.4-2.797-1.164c-3.188.567-3.943 4.52-4.55 9.238l-.106.839l-2.411-.32l.114-.824c.527-4.137 1.328-10.39 6.53-11.31c2.446-.435 4.585.581 5.446 2.583c.578 1.34 1.031 2.695 1.466 4.008c.324.99.654 1.98 1.037 2.959c.674 1.708 1.197 2.15 1.392 2.257c1.218-.38 2.462-4.167 2.873-5.414c.13-.402.24-.732.328-.968c.085-.233.195-.571.328-.98c1.097-3.43 2.474-7.144 4.918-7.762c.747-.191 1.903-.166 3.157 1.035c2.665 2.544 2.525 8.48 2.433 12.41c-.014.59-.028 1.126-.028 1.583c0 6.272.93 10.655 1.64 12.16c.367-.77.998-2.63 1.598-7.007c.831-6.066.938-12.624 1.027-18.41c.161-10.24.275-17.663 3.982-19.408c.552-.339 1.469-.522 2.436-.033c3.586 1.803 5.326 11.885 5.326 30.817c.225 2.926 1.013 6.006 1.66 6.448c.004-.066.53-.39 1.394-2.01c.925-1.718 1.845-6.665 2.655-11.026c1.792-9.614 2.606-12.989 4.726-13.166c1.615-.158 2.362 1.896 2.676 2.76c.883 2.422 1.537 7.888 2.23 13.678c.54 4.49 1.31 10.902 2.094 13.497c.084-.228.18-.5.283-.836c1.815-5.878 1.98-17.887 2.14-29.507c.22-16.14.503-26.139 3.448-28.226a2.44 2.44 0 0 1 2.233-.316c3.448 1.144 3.714 11.254 3.519 35.8c-.14 17.799-.313 39.952 3.323 43.603c.317.32.542.32.622.32c.17 0 .413-.161.67-.452c3.681-4.162 6.01-26.022 3.372-46.927c-.328-2.602.677-5.337 2.392-6.514c.946-.652 2.036-.736 2.978-.232c2.145 1.14 3.187 5.024 3.102 11.546c-.15 11.387 2.584 24.714 4.37 26.842c.282-.471.842-1.763 1.379-5.145c.301-1.87.799-8.153.806-8.216c.09-.71.155-1.398.217-2.097c.369-3.924.82-8.804 5.613-9.654c2.444-.435 4.583.577 5.448 2.583c.577 1.34 1.027 2.695 1.46 4.008c.332.99.664 1.98 1.046 2.959c.67 1.708 1.197 2.15 1.387 2.257c1.218-.38 2.467-4.167 2.875-5.41c.132-.402.243-.737.328-.973c.088-.228.195-.57.324-.979c1.1-3.43 2.477-7.144 4.924-7.762c.74-.191 1.9-.166 3.154 1.035c2.665 2.543 2.526 8.48 2.437 12.41q-.029.792-.033 1.583c0 6.272.931 10.655 1.641 12.16c.365-.77.994-2.63 1.601-7.007c.832-6.066.931-12.624 1.027-18.41c.159-10.24.273-17.663 3.98-19.408c.55-.339 1.467-.522 2.44-.033c3.58 1.803 5.325 11.884 5.325 30.817c.224 2.926 1.012 6.006 1.656 6.448c.008-.066.526-.39 1.399-2.01c.923-1.718 1.84-6.665 2.653-11.026c1.786-9.614 2.602-12.989 4.722-13.166c1.62-.158 2.367 1.896 2.68 2.76c.88 2.422 1.535 7.888 2.233 13.678c.534 4.49 1.304 10.902 2.092 13.497c.08-.228.176-.5.28-.836c1.813-5.878 1.976-17.887 2.138-29.507c.216-16.14.504-26.139 3.448-28.226a2.45 2.45 0 0 1 2.234-.316c3.452 1.144 3.718 11.254 3.52 35.8c-.141 17.799-.314 39.952 3.319 43.603c.324.32.544.32.63.32c.165 0 .408-.161.662-.452c3.687-4.162 6.014-26.022 3.375-46.927c-.342-2.723.43-5.47 1.84-6.526c.71-.537 1.575-.647 2.37-.313c2.054.877 3.445 4.63 4.255 11.484c.339 2.87.641 5.974.931 9.036c.641 6.683 1.509 15.69 2.684 17.67c.36-.46 1.096-1.704 2.19-5.038l2.307.753c-1.696 5.157-3.026 7.1-4.755 6.902c-2.69-.299-3.468-5.734-4.84-20.055c-.29-3.048-.59-6.132-.928-8.989c-1.03-8.74-2.782-9.532-2.801-9.54c-.342.174-1.137 1.992-.842 4.31c2.558 20.32.673 43.597-3.964 48.834c-.747.842-1.587 1.27-2.485 1.27`],[`d`,`M12.024.017V0L12 .008L11.976 0v.017L.812 3.892l1.605 14.875l9.559 5.207V24l.024-.013l.024.013v-.026l9.559-5.207l1.605-14.875zm6.868 14.244q-1.64 3.948-6.031 4.166c-2.829 0-4.661-1.7-4.66-1.7q-1.745-1.359-2.398-3.417c-.695-.76-.702-.841-.774-1.145c-.072-.303.045-.388.249-.685q.204-.298.098-.85q-.26-.36-.3-1.128q0-.37.496-.783q.495-.413.607-.632q.083-.119.065-1.031q-.006-.897.995-.975c1-.08 1.565-.832 1.879-1.174c.21-.228.52-.339.91-.341c.551-.026 1.052.185 1.484.62c1.075-.055 2.176.235 3.292.863q2.379 1.414 2.596 3.055q-.257 2.158-5.788-.113q-2.895.819-2.846 3.552q0 2.508 2.422 3.643c-.787-.772-1.122-1.422-1.01-1.959q2.456 2.906 5.588 2.173c-.92.032-1.65-.264-2.198-.893q2.116-.05 3.998-1.972c-.724.576-1.482.794-2.284.657q3.26-2.563 2.307-5.98l-.002-.006a3.02 3.02 0 0 1 .788 2.03q.023 1.175-.795 2.477q.613-.478 1.413-2.047c.23 2.117-.625 3.724-2.574 4.825q.934-.085 2.473-1.23m-5.567-6.63a.319.319 0 1 1 .638 0a.319.319 0 0 1-.638 0`],[`id`,`ng-grad`,`x1`,`49`,`x2`,`226`,`y1`,`214`,`y2`,`130`,`gradientUnits`,`userSpaceOnUse`],[`stop-color`,`#E40035`],[`offset`,`.24`,`stop-color`,`#F60A48`],[`offset`,`.352`,`stop-color`,`#F20755`],[`offset`,`.494`,`stop-color`,`#DC087D`],[`offset`,`.745`,`stop-color`,`#9717E7`],[`offset`,`1`,`stop-color`,`#6C00F5`],[`fill`,`url(#ng-grad)`,`d`,`m222.077 39.192-8.019 125.923L137.387 0l84.69 39.192Zm-53.105 162.825-57.933 33.056-57.934-33.056 11.783-28.556h92.301l11.783 28.556ZM111.039 62.675l30.357 73.803H80.681l30.358-73.803ZM7.937 165.115 0 39.192 84.69 0 7.937 165.115Z`],[`width`,`500`,`height`,`500`,`rx`,`112`,`fill`,`#1c1a17`],[`transform`,`translate(250 252) scale(1.38) translate(-120 -129)`],[`id`,`pi-mark-mask`],[`x`,`-60`,`y`,`-60`,`width`,`360`,`height`,`380`,`fill`,`#fff`],[`fill`,`none`,`stroke`,`#000`,`stroke-width`,`30`,`stroke-linejoin`,`miter`],[`d`,`M88 66 V196`],[`d`,`M88 66 H143 L170 98 L143 130 H88 Z`],[`id`,`pi-mark-clip`],[`x`,`-40`,`y`,`129`,`width`,`320`,`height`,`200`],[`transform`,`rotate(-10 120 129)`],[`cx`,`120`,`cy`,`129`,`rx`,`128`,`ry`,`34`,`fill`,`none`,`stroke`,`#78350f`,`stroke-width`,`10`],[`mask`,`url(#pi-mark-mask)`],[`fill`,`#fbbf24`,`d`,`M120 5 L2 46 L22 198 L120 253 Z`],[`fill`,`#f59e0b`,`d`,`M120 5 L238 46 L218 198 L120 253 Z`],[`clip-path`,`url(#pi-mark-clip)`,`cx`,`120`,`cy`,`129`,`rx`,`128`,`ry`,`34`,`fill`,`none`,`stroke`,`#1c1a17`,`stroke-width`,`22`],[`clip-path`,`url(#pi-mark-clip)`,`cx`,`120`,`cy`,`129`,`rx`,`128`,`ry`,`34`,`fill`,`none`,`stroke`,`#fde68a`,`stroke-width`,`10`],[`transform`,`translate(230.9 146.0) rotate(10) scale(1.5) translate(-4 -4)`],[`x1`,`9`,`y1`,`9`,`x2`,`21`,`y2`,`21`,`stroke`,`#1c1a17`,`stroke-width`,`14`,`stroke-linecap`,`round`],[`r`,`16`,`fill`,`#1c1a17`],[`x1`,`9`,`y1`,`9`,`x2`,`21`,`y2`,`21`,`stroke`,`#fde68a`,`stroke-width`,`7`,`stroke-linecap`,`round`],[`r`,`12`,`fill`,`#1c1a17`,`stroke`,`#fde68a`,`stroke-width`,`5`],[`type`,`button`,3,`active`],[`type`,`button`,3,`click`],[3,`name`],[1,`full-panel`,3,`click`,`href`],[`width`,`14`,`height`,`14`,`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`x`,`3`,`y`,`3`,`width`,`7`,`height`,`7`,`rx`,`1.5`],[`x`,`14`,`y`,`3`,`width`,`7`,`height`,`7`,`rx`,`1.5`],[`x`,`3`,`y`,`14`,`width`,`7`,`height`,`7`,`rx`,`1.5`],[`x`,`14`,`y`,`14`,`width`,`7`,`height`,`7`,`rx`,`1.5`],[`target`,`_blank`,`rel`,`noopener noreferrer`,3,`href`],[1,`sr-only`],[3,`rpc`],[3,`rpc`,`focus`],[3,`navigate`,`rpc`],[3,`focusHandled`,`showForm`,`rpc`,`focus`],[3,`showComponent`,`rpc`],[3,`focusHandled`,`rpc`,`focus`]],template:function(e,t){if(e&1&&(z(0,`header`)(1,`h1`,2)(2,`span`,3),P(3,VJ,2,0,`:svg:svg`,4)(4,HJ,7,0,`:svg:svg`,4)(5,UJ,11,0,`:svg:svg`,5)(6,WJ,5,0,`:svg:svg`,6)(7,GJ,2,0,`:svg:svg`,7)(8,KJ,10,0,`:svg:svg`,8)(9,qJ,24,0,`:svg:svg`,9),B(),z(10,`span`,10),J(11),B()(),z(12,`nav`,11,0),G(`scroll`,function(){return t.measureNav()})(`keydown`,function(e){return t.onNavKey(e)}),P(14,YJ,3,0,`div`,12),B(),P(15,XJ,7,1,`a`,13),z(16,`span`,14)(17,`span`,15),V(18,`span`),B(),J(19),B()(),z(20,`main`,16,1)(22,`p`,17),J(23),B(),P(24,ZJ,5,0,`div`,18)(25,QJ,1,1,`app-coming-soon`,19)(26,$J,2,0,`p`,20)(27,tY,10,2,`p`,21)(28,mY,2,2),B()),e&2){let e,n;M(2),q(`ng-mark`,t.view()===`angular`)(`pi-mark`,!t.view()),M(),F(t.view()===`nativescript`?3:t.view()===`capacitor`?4:t.view()===`angular-native`?5:t.view()===`analog`?6:t.view()===`ngrx`?7:t.view()===`angular`?8:9),M(7),q(`ng-text`,t.view()===`angular`),M(),Y(t.title()),M(),q(`fade-start`,t.navFade().start)(`fade-end`,t.navFade().end),M(2),F(t.availableTabs().length>1?14:-1),M(),F((e=t.fullPanelLink())?15:-1,e),M(),q(`connected`,t.connected())(`failed`,t.connectionFailed()),M(3),X(` `,t.connected()?`Live`:t.connectionFailed()?`Disconnected`:`Connecting…`,` `),M(),N(`aria-label`,t.mainLabel()),M(3),Y(t.backgroundNote()),M(),F(t.connectionFailed()?24:(n=t.comingSoon())?25:t.view()===`angular-native`&&!t.nativePageId()?26:t.tabEnabled(t.tab(),t.config())?28:27,n)}},dependencies:[vD,Rk,_N,LP,cI,SR,BB,sH,SW,bK,dJ,DK,RE],styles:[`[_nghost-%COMP%] { +`}var FJ=new Map;function IJ(e,t=`dark`,n=50){let r=e?.querySelector(`devframes-dock-standalone`)?.shadowRoot;if(r){if(e){let t=FJ.get(e);t!==void 0&&(clearTimeout(t),FJ.delete(e))}let n=r.querySelector(`style[data-pangular]`);n||(n=e.createElement(`style`),n.dataset.pangular=``,r.append(n)),n.textContent=PJ(t);return}if(n>0&&e){let r=FJ.get(e);r!==void 0&&clearTimeout(r);let i=setTimeout(()=>{FJ.delete(e),IJ(e,t,n-1)},100);FJ.set(e,i)}}var LJ=class e{current=j(`dark`);constructor(){let e=E(ws),t=BJ(),n=document.documentElement.dataset.theme,r=n===`light`||n===`dark`;if(n===`light`||n===`dark`)this.current.set(n);else if(t)r=!0,this.apply(zJ(t));else{let t=RJ();if(t){this.current.set(t.matches?`light`:`dark`);let n=e=>{r||this.current.set(e.matches?`light`:`dark`)};t.addEventListener(`change`,n),e.onDestroy(()=>t.removeEventListener(`change`,n))}}let i;try{i=new BroadcastChannel(`pangular:theme`)}catch{}dc(()=>{let e=this.current();try{i?.postMessage(e)}catch{}for(let{win:t,origin:n}of VJ())try{t.postMessage({type:`pangular:theme-change`,theme:e},n)}catch{}});let a=e=>{if(e.source!==window.parent)return;let t=e.data;t?.type===`pangular:theme-change`&&(r=!0,this.apply(t.theme===`dark`?`dark`:`light`))};window.addEventListener(`message`,a);let o;t&&(o=new MutationObserver(()=>this.apply(zJ(t))),o.observe(t,{attributes:!0,attributeFilter:[`class`]})),e.onDestroy(()=>{window.removeEventListener(`message`,a),o?.disconnect(),i?.close()})}apply(e){this.current.set(e),document.documentElement.dataset.theme=e}static ɵfac=function(t){return new(t||e)};static ɵprov=Al({token:e,factory:e.ɵfac})};function RJ(){try{return window.matchMedia?.(`(prefers-color-scheme: light)`)??null}catch{return null}}function zJ(e){return e.classList.contains(`dark`)?`dark`:`light`}function BJ(){try{return window.frameElement?.closest(`.devframes-color-root`)??null}catch{return null}}function VJ(e=window){let t=[],n;try{n=e.location.ancestorOrigins}catch{}let r=e;try{for(let i=0;r!==r.parent;i++){r=r.parent;let a=HJ(e,r,i,n);a&&t.push({win:r,origin:a})}}catch{}return t}function HJ(e,t,n,r){let i=e=>e&&e!==`null`?e:void 0,a=i(r?.item(n));if(a)return a;try{let e=i(t.location.origin);if(e)return e}catch{}if(!(n>0))try{return i(new URL(e.document.referrer).origin)}catch{return}}var UJ=`__DEVFRAME_HUB_CLIENT_CONTEXT__`;function WJ(){try{return window.parent===window?void 0:window.parent[UJ]}catch{return}}function GJ(e,t,n=50){let r=WJ();if(!r){if(n<=0||window.parent===window)return()=>{};let r=()=>{},i=setTimeout(()=>r=GJ(e,t,n-1),100);return()=>{clearTimeout(i),r()}}let i=e.map(e=>r.docks.getStateById(BT(e))?.events.on(`entry:activated`,()=>t(e))??(()=>{})),a=r.docks.selectedId,o=e.find(e=>BT(e)===a);return o&&t(o),()=>i.forEach(e=>e())}function KJ(){return!!WJ()}async function qJ(e){let t=WJ();if(!t)return!1;try{return await t.docks.switchEntry(BT(e))}catch{return!1}}function JJ(e,t){let n=new URL(e);return n.searchParams.delete(`view`),n.hash=t?`tab=${t}`:``,n.pathname+n.search+n.hash}function YJ(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}var XJ=`pangular-tab`;function ZJ(e,t,n){let r=new URLSearchParams(e.replace(/^#/,``)).get(`tab`)||t;return n.find(e=>e===r)}function QJ(e){try{return sessionStorage.getItem(`${XJ}:${e}`)}catch{return null}}function $J(e,t){try{sessionStorage.setItem(`${XJ}:${e}`,t)}catch{}}function eY(e,t){try{return new URL(e,t.href).origin===t.origin}catch{return!1}}function tY(e,t){if(t.protocol!==`chrome-extension:`)return!1;try{let{protocol:t}=new URL(e);return t===`http:`||t===`https:`}catch{return!1}}function nY(e=location){let t=new URLSearchParams(e.search).get(`baseURL`);if(t&&(eY(t,e)||tY(t,e)))return t;if(!(e.pathname.includes(`__pangular`)||e.pathname.includes(`__devframes/`)))return[`/__pangular/`,`./`]}var rY={dark:{ngrx:{accent:`#d770e8`,text:`#f0abfc`},analog:{accent:`#ff5470`,text:`#fda4af`},"angular-native":{accent:`#ff4d6d`,text:`#fda4af`},nativescript:{accent:`#8196ff`,text:`#a5b4fc`},capacitor:{accent:`#53b9ff`,text:`#7dd3fc`}},light:{ngrx:{accent:`#a21caf`,text:`#701a75`},analog:{accent:`#be123c`,text:`#881337`},"angular-native":{accent:`#be123c`,text:`#881337`},nativescript:{accent:`#3448c5`,text:`#3730a3`},capacitor:{accent:`#0369a1`,text:`#0c4a6e`}}};function iY(e,t){let n=rY[t];return e&&n[e]||null}var aY=[`nav`],oY=[`main`],sY=e=>[e],cY=(e,t)=>t.id;function lY(e,t){e&1&&(A(),z(0,`svg`,4),V(1,`path`,22),B())}function uY(e,t){e&1&&(A(),z(0,`svg`,4),V(1,`path`,23)(2,`path`,24)(3,`path`,25)(4,`path`,26)(5,`path`,27)(6,`path`,28),B())}function dY(e,t){e&1&&(A(),z(0,`svg`,5)(1,`defs`)(2,`linearGradient`,29),V(3,`stop`,30)(4,`stop`,31),B()(),V(5,`path`,32),z(6,`g`,33),V(7,`path`,34)(8,`path`,35)(9,`path`,36)(10,`path`,37),B()())}function fY(e,t){e&1&&(A(),z(0,`svg`,6),V(1,`path`,38)(2,`path`,39)(3,`path`,40)(4,`path`,41),B())}function pY(e,t){e&1&&(A(),z(0,`svg`,7),V(1,`path`,42),B())}function mY(e,t){e&1&&(A(),z(0,`svg`,8)(1,`defs`)(2,`linearGradient`,43),V(3,`stop`,44)(4,`stop`,45)(5,`stop`,46)(6,`stop`,47)(7,`stop`,48)(8,`stop`,49),B()(),V(9,`path`,50),B())}function hY(e,t){e&1&&(A(),z(0,`svg`,9),V(1,`rect`,51),z(2,`g`,52)(3,`defs`)(4,`mask`,53),V(5,`rect`,54),z(6,`g`,55),V(7,`path`,56)(8,`path`,57),B()(),z(9,`clipPath`,58),V(10,`rect`,59),B()(),z(11,`g`,60),V(12,`ellipse`,61),B(),z(13,`g`,62),V(14,`path`,63)(15,`path`,64),B(),z(16,`g`,60),V(17,`ellipse`,65)(18,`ellipse`,66),z(19,`g`,67),V(20,`line`,68)(21,`circle`,69)(22,`line`,70)(23,`circle`,71),B()()()())}function gY(e,t){if(e&1){let e=W();z(0,`button`,73),G(`click`,function(){let t=O(e).$implicit;return k(K(2).switchTab(t.id))}),V(1,`app-tab-icon`,74),z(2,`span`),J(3),B()()}if(e&2){let e=t.$implicit,n=K(2);q(`active`,n.tab()===e.id),N(`aria-current`,n.tab()===e.id?`page`:null)(`tabindex`,n.rovingTab()===e.id?0:-1),M(),R(`name`,e.id),M(2),Y(e.label)}}function _Y(e,t){if(e&1&&(z(0,`div`,12),I(1,gY,4,6,`button`,72,cY),B()),e&2){let e=K();M(),L(e.tabs())}}function vY(e,t){if(e&1){let e=W();z(0,`a`,75),G(`click`,function(t){let n=O(e);return k(K().openFullPanel(t,n.tab))}),A(),z(1,`svg`,76),V(2,`rect`,77)(3,`rect`,78)(4,`rect`,79)(5,`rect`,80),B(),J(6,` Open full panel `),B()}e&2&&R(`href`,t.href,Au)}function yY(e,t){if(e&1){let e=W();z(0,`div`,18)(1,`p`),J(2,` Can't reach the devtools server. Check that the dev server is running. The panel keeps trying to connect. `),B(),z(3,`button`,73),G(`click`,function(){return O(e),k(K().retryConnection())}),J(4,`Retry now`),B()()}}function bY(e,t){e&1&&V(0,`app-coming-soon`,19),e&2&&R(`info`,t)}function xY(e,t){e&1&&(z(0,`p`,20),J(1,`Looking for an Angular Native app…`),B())}function SY(e,t){e&1&&(J(0,` To turn it on, set `),z(1,`code`),J(2),B(),J(3,` in the devtools options. `)),e&2&&(M(2),Y(t))}function CY(e,t){if(e&1&&(z(0,`p`,21),J(1,` This inspector is turned off in the devtools config (`),z(2,`code`),J(3,`inspectors`),B(),J(4,`). `),P(5,SY,4,1),z(6,`a`,81),J(7,`About inspectors`),z(8,`span`,82),J(9,` (opens in a new tab)`),B()()()),e&2){let e,t=K();M(5),F((e=t.turnOnSnippet())?5:-1,e),M(),R(`href`,t.inspectorsDocsUrl,Au)}}function wY(e,t){if(e&1){let e=W();z(0,`app-dashboard`,85),G(`navigate`,function(t){return O(e),k(K(3).switchTab(t))}),B()}e&2&&R(`rpc`,K(3).rpc())}function TY(e,t){if(e&1){let e=W();z(0,`app-component-tree`,86),G(`focusHandled`,function(){return O(e),k(K(3).componentFocus.set(null))})(`showForm`,function(t){return O(e),k(K(3).showForm(t))}),B()}if(e&2){let e=K(3);R(`rpc`,e.rpc())(`focus`,e.componentFocus())}}function EY(e,t){if(e&1){let e=W();z(0,`app-route-inspector`,87),G(`showComponent`,function(t){return O(e),k(K(3).showComponent(t))}),B()}e&2&&R(`rpc`,K(3).rpc())}function DY(e,t){e&1&&V(0,`app-signal-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function OY(e,t){e&1&&V(0,`app-di-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function kY(e,t){e&1&&V(0,`app-store-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function AY(e,t){e&1&&V(0,`app-network-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function jY(e,t){if(e&1){let e=W();z(0,`app-forms-inspector`,88),G(`focusHandled`,function(){return O(e),k(K(3).formFocus.set(null))}),B()}if(e&2){let e=K(3);R(`rpc`,e.rpc())(`focus`,e.formFocus())}}function MY(e,t){e&1&&V(0,`app-pipes-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function NY(e,t){e&1&&V(0,`app-analog-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function PY(e,t){e&1&&V(0,`app-capacitor-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function FY(e,t){if(e&1&&P(0,wY,1,1,`app-dashboard`,83)(1,TY,1,2,`app-component-tree`,84)(2,EY,1,1,`app-route-inspector`,83)(3,DY,1,1,`app-signal-inspector`,83)(4,OY,1,1,`app-di-inspector`,83)(5,kY,1,1,`app-store-inspector`,83)(6,AY,1,1,`app-network-inspector`,83)(7,jY,1,2,`app-forms-inspector`,84)(8,MY,1,1,`app-pipes-inspector`,83)(9,NY,1,1,`app-analog-inspector`,83)(10,PY,1,1,`app-capacitor-inspector`,83),e&2){let e;F((e=K(2).tab())===`dashboard`?0:e===`components`?1:e===`routes`?2:e===`signals`?3:e===`injectors`?4:e===`store`?5:e===`network`?6:e===`forms`?7:e===`pipes`?8:e===`analog`?9:e===`capacitor`?10:-1)}}function IY(e,t){e&1&&I(0,FY,11,1,null,null,Og),e&2&&L(hv(0,sY,K().scopeKey()))}var LY=`all`,RY=[LY,...zT],zY={angular:`Angular`,ngrx:`NgRx Store`,analog:`Analog`,"angular-native":`Angular Native`,nativescript:`NativeScript`,capacitor:`Capacitor`},BY={ngrx:`store`,analog:`analog`,capacitor:`capacitor`},VY={store:`ngrx`,analog:`analog`,capacitor:`capacitor`},HY={"angular-native":[`components`,`signals`,`injectors`,`store`,`pipes`]},UY={id:`nativescript`,name:`NativeScript`,badge:`Available`,heading:`Inspect NativeScript apps`,summary:`A NativeScript Angular app reports from the simulator or device to this server, and its components, signals, injectors and NgRx stores show up in the Angular dock.`,color:`#3c5afd`,plansTitle:`Set up an app`,plans:[`Install @pangular-inspector/devtools and @valor/nativescript-websockets`,`Call initNativeScriptOverlay() in main.ts, before the app bootstraps`,`Run npx pangular dev --no-auth in the app, then open the Angular dock`],link:{label:`NativeScript setup guide`,href:`https://pangular-inspector.dev/guides/nativescript/`}},WY={id:`capacitor`,name:`Capacitor`,badge:`Available`,heading:`Inspect Capacitor apps`,summary:`An Ionic or Capacitor app runs the browser overlay in its WebView and reports to this server, so it shows up in the Angular dock like a browser tab.`,color:`#119eff`,plansTitle:`Set up an app`,plans:[`With live reload on localhost, load @pangular-inspector/devtools/overlay as in a browser`,`In a bundled build, call initOverlay() from @pangular-inspector/devtools/overlay-manual with this server’s address and connectionMeta`,`Run the app, then come back here for its plugin calls, or open the Angular dock`],link:{label:`Capacitor setup guide`,href:`https://pangular-inspector.dev/guides/capacitor/`}},GY={id:`analog`,name:`Analog`,badge:`Not in this app`,heading:`This app doesn’t use Analog`,summary:`In an Analog app this dock shows your file routes, server load() and API calls, render modes and route lint.`,color:`#dd0330`,plans:[`Which page, layout and .server.ts files render a URL`,`Every load(), server function and API call with timing`,`SSR, prerendered or client only, per page`],link:{label:`Get started with Analog`,href:`https://analogjs.org/docs/getting-started`}},KY={id:`angular-native`,name:`Angular Native`,badge:`Not connected`,heading:`No Angular Native app is connected`,summary:`Start the overlay in your Angular Native app and run this server with --no-auth. The tabs fill as soon as the app reports.`,color:`#e11d48`,plans:[`The component tree, with the view outlined on the device`,`Signals and injectors of the running app`,`Live @ngrx/signals and @ngrx/store state`],link:{label:`Set up Angular Native`,href:`https://pangular-inspector.dev/guides/angular-native/`}},qY=[1e3,2e3,5e3,1e4];function JY(){let e=new URLSearchParams(location.search).get(`view`);return zT.find(t=>t===e)??null}Zb(class e{analog=j(!1);allTabs=[{id:`dashboard`,label:`Dashboard`},{id:`analog`,label:`Analog`},{id:`components`,label:`Components`},{id:`routes`,label:`Routes`},{id:`signals`,label:`Signals`},{id:`injectors`,label:`Injectors`},{id:`store`,label:`Store`},{id:`forms`,label:`Forms`},{id:`pipes`,label:`Pipes`},{id:`network`,label:`SSR & HTTP`},{id:`capacitor`,label:`Capacitor`}];view=j(JY());viewAccent=Q(()=>iY(this.view(),this.themeService.current()));title=Q(()=>{let e=this.view();return e?zY[e]:`Pangular Inspector`});mainLabel=Q(()=>this.availableTabs().find(e=>e.id===this.tab())?.label??this.title());analogKnown=j(!1);capacitorReporting=j(!1);capacitorKnown=j(!1);nativePageId=j(null);nativeKnown=j(!1);scopeKey=Q(()=>this.view()===`angular-native`?this.nativePageId()??``:``);comingSoon=Q(()=>{let e=this.view();if(e===`analog`)return this.analogKnown()&&!this.analog()?GY:void 0;if(e===`nativescript`)return UY;if(e===`capacitor`)return this.config().inspectors.capacitor&&this.capacitorKnown()&&!this.capacitorReporting()?WY:void 0;if(e===`angular-native`)return this.nativeKnown()&&!this.nativePageId()?KY:void 0});config=Q(()=>kE(this.rpc()));tabEnabled=PE;inspectorsDocsUrl=NE;turnOnSnippet=Q(()=>{let e=ME(this.tab());return e?`inspectors: {${e}: true}`:null});availableTabs=Q(()=>{if(this.comingSoon())return[];let e=this.view(),t=e?BY[e]:void 0,n=this.allTabs.filter(e=>PE(e.id,this.config()));if(t)return n.filter(e=>e.id===t);let r=e?HY[e]:void 0;return r?n.filter(e=>r.includes(e.id)):n.filter(t=>(t.id!==`analog`||this.analog())&&(t.id!==`capacitor`||this.capacitorReporting())&&!(e===`angular`&&VY[t.id]))});tabs=Q(()=>{let e=this.availableTabs();if(this.rpc())return e;let t=this.tab();return e.filter(e=>e.id===`dashboard`||e.id===t)});rovingTab=Q(()=>{let e=this.tabs(),t=this.tab();return e.some(e=>e.id===t)?t:e[0]?.id});onNavKey(e){let t=this.nav()?.nativeElement;if(!t||e.altKey||e.ctrlKey||e.metaKey)return;let n=[...t.querySelectorAll(`button`)],r=n.indexOf(document.activeElement);if(r<0)return;let i=n.length-1,a={ArrowRight:r===i?0:r+1,ArrowLeft:r===0?i:r-1,Home:0,End:i},o=Object.hasOwn(a,e.key)?a[e.key]:-1;o<0||(e.preventDefault(),n[o].focus())}fullPanelLink=Q(()=>{let e=this.view();if(!e||location.protocol===`chrome-extension:`)return null;let t=this.comingSoon()?`dashboard`:BY[e]??this.tab();return{tab:t,href:JJ(location.href,t)}});tab=Nv(()=>{let e=this.view();return e&&(BY[e]??HY[e]?.[0])||`dashboard`});rpc=j(null);openedDock=j(null);connected=j(!1);connectionFailed=j(!1);hiddenPages=j([]);pageId=uE();backgroundNote=Q(()=>{let e=this.hiddenPages();return this.pageId?e.includes(this.pageId)?`Tab in background, showing the last data.`:``:e.length?e.length===1?`A tab is in the background, showing its last data.`:`${e.length} tabs are in the background, showing their last data.`:``});stopVisibility=()=>{};stopNative=()=>{};stopCapacitor=()=>{};stopFollowing=()=>{};stopHighlights=()=>{};nav=Kv(`nav`);main=Kv(`main`);injector=E(Ss);themeService=E(LJ);navObserver;navFade=j({start:!1,end:!1});constructor(){E(SO).use(this.rpc),zd(()=>{let e=this.nav()?.nativeElement;e&&typeof ResizeObserver<`u`&&(this.navObserver=new ResizeObserver(()=>this.measureNav()),this.navObserver.observe(e))}),cy(()=>{this.tab(),this.tabs(),jv(()=>{this.revealActiveTab(),this.measureNav()})}),dc(()=>{let e=this.openedDock(),t=this.rpc();e&&t&&jv(()=>void hE(t,`hub-dock-seen`,BT(e.dock)))}),dc(()=>{let e=this.themeService.current();jv(()=>{try{window.parent!==window&&IJ(window.parent.document,e)}catch{}})})}measureNav(){let e=this.nav()?.nativeElement;if(!e)return;let t=e.scrollWidth-e.clientWidth,n=e.scrollLeft>1,r=t>1&&e.scrollLeftn?e.scrollLeft=Math.max(0,n):e.scrollLeft{this.openedDock.set({dock:e}),e===LY?this.showFullPanel():this.showView(e)});let e=ZJ(location.hash,QJ(this.tabScope()),this.availableTabs().map(e=>e.id));e?this.tab.set(e):!this.view()&&ZJ(location.hash,QJ(this.tabScope()),[`capacitor`])===`capacitor`?this.restoreCapacitor=!0:!this.view()&&ZJ(location.hash,QJ(this.tabScope()),[`analog`])===`analog`&&(this.restoreAnalog=!0),this.stopHighlights=_E(()=>this.rpc()),this.connect()}connecting=!1;retries=0;retryTimer;connect(){if(this.connecting||this.rpc())return;this.connecting=!0,clearTimeout(this.retryTimer);let e=nY();LT(e?{baseURL:e}:{}).then(e=>{if(this.connecting=!1,this.destroyed){e.close?.();return}this.retries=0,this.connectionFailed.set(!1),this.refocusOnConnect&&this.focusCurrentTab(),this.refocusOnConnect=!1,this.rpc.set(e),this.connected.set(!0),this.watchVisibility(e),this.watchAngularNative(e),this.watchCapacitor(e),e.scope(`pangular`).rpc.call(`analog-project`).then(e=>{let t=!!e?.analog;this.analog.set(t),this.analogKnown.set(!0),t&&this.restoreAnalog&&PE(`analog`,this.config())&&this.tab.set(`analog`),this.restoreAnalog=!1,!t&&this.tab()===`analog`&&!this.view()&&this.tab.set(`dashboard`)},()=>{this.analogKnown.set(!0),this.restoreAnalog=!1,this.tab()===`analog`&&!this.view()&&this.tab.set(`dashboard`)}),e.events.on(`connection:status`,t=>{this.connected.set(t===`connected`),!(t!==`disconnected`&&t!==`error`||this.rpc()!==e)&&(this.rpc.set(null),e.close?.(),this.retryLater())})},()=>{this.connecting=!1,!this.destroyed&&(this.analogKnown.set(!0),this.nativeKnown.set(!0),this.retryLater())})}retryLater(){if(this.destroyed)return;this.connectionFailed.set(!0);let e=qY[Math.min(this.retries++,qY.length-1)];clearTimeout(this.retryTimer),this.retryTimer=setTimeout(()=>this.connect(),e)}retryConnection(){this.retries=0,this.refocusOnConnect=!0,this.connect()}refocusOnConnect=!1;destroyed=!1;ngOnDestroy(){this.destroyed=!0,clearTimeout(this.retryTimer),this.stopNative(),this.stopCapacitor(),this.stopFollowing(),this.stopVisibility(),this.stopHighlights(),this.navObserver?.disconnect()}showView(e){if(e===this.view())return;lE(e===`angular-native`?this.nativePageId():null),this.view.set(e);let t=new URL(location.href);t.searchParams.set(`view`,e),t.hash=``,history.replaceState(history.state,``,t)}showFullPanel(e){if(!this.view())return;lE(null),this.view.set(null);let t=new URL(location.href);t.searchParams.delete(`view`),t.hash=e?`tab=${e}`:``,history.replaceState(history.state,``,t);let n=e??QJ(this.tabScope()),r=this.availableTabs().map(e=>e.id),i=ZJ(t.hash,n,r);i?this.setTab(i):n===`capacitor`&&(this.restoreCapacitor=!0)}openFullPanel(e,t){YJ(e)&&KJ()&&(e.preventDefault(),this.showFullPanel(t),this.focusCurrentTab(),qJ(LY))}formFocus=j(null);componentFocus=Nv({source:this.tab,computation:()=>null});showForm(e){this.formFocus.set({id:e}),this.switchTab(`forms`)}showComponent(e){this.config().inspectors.components&&(this.switchTab(`components`),this.componentFocus.set(e))}inspectFromPanel({source:e,origin:t,data:n}){if(e!==window.parent||t!==location.origin)return;let r=n;r?.type===`pangular:inspect-component`&&typeof r.id==`string`&&this.tab()===`components`&&this.config().inspectors.components&&this.componentFocus.set({id:r.id})}switchTab(e){let t=VY[e];if(this.view()===`angular`&&t){this.activateDock(t,e);return}this.setTab(e),history.replaceState(history.state,``,`#tab=${e}`)}restoreAnalog=!1;restoreCapacitor=!1;setTab(e){this.restoreAnalog=!1,this.restoreCapacitor=!1,this.keepFocus(),this.tab.set(e),$J(this.tabScope(),e)}tabScope(){return this.view()??`panel`}async watchAngularNative(e){try{let t=await e.scope(`pangular`).rpc.sharedState(`component-tree`),n=e=>{let t=e?.pages,n=FD(t,this.nativePageId());this.view()===`angular-native`&&lE(n),this.nativePageId.set(n),this.nativeKnown.set(!0)};n(t.value()),this.stopNative(),this.stopNative=t.on(`updated`,n)}catch{this.nativeKnown.set(!0)}}async watchCapacitor(e){try{let t=await e.scope(`pangular`).rpc.sharedState(`capacitor`),n=e=>{if(e===void 0)return;let t=nq(e).length>0;this.capacitorReporting.set(t),this.capacitorKnown.set(!0),t&&this.restoreCapacitor&&PE(`capacitor`,this.config())&&(this.restoreCapacitor=!1,this.tab.set(`capacitor`)),!t&&this.tab()===`capacitor`&&!this.view()&&this.tab.set(`dashboard`)};n(t.value()),this.stopCapacitor(),this.stopCapacitor=t.on(`updated`,n)}catch{this.capacitorReporting.set(!1),this.capacitorKnown.set(!0)}}async watchVisibility(e){try{let t=await e.scope(`pangular`).rpc.sharedState(`page-visibility`),n=e=>{let t=e?.hidden;this.hiddenPages.set(Array.isArray(t)?t.filter(e=>typeof e==`string`):[])};n(t.value()),this.stopVisibility(),this.stopVisibility=t.on(`updated`,n)}catch{}}keepFocus(){let e=document.activeElement,t=this.main()?.nativeElement;(!e||e===document.body||t?.contains(e))&&this.focusCurrentTab()}focusCurrentTab(){zd(()=>{let e=document.activeElement;e&&e!==document.body||(this.nav()?.nativeElement.querySelector(`button.active`)??this.main()?.nativeElement)?.focus()},{injector:this.injector})}async activateDock(e,t){if(await qJ(e))return;if(window.parent===window){this.keepFocus(),this.showView(e);return}let n=this.rpc();if(!n?.call){this.setTab(t);return}try{await n.call(`hub:docks:activate`,{dockId:BT(e)}),this.keepFocus(),this.showView(e)}catch{this.setTab(t)}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Wh({type:e,selectors:[[`app-root`]],viewQuery:function(e,t){e&1&&c_(t.nav,aY,5)(t.main,oY,5),e&2&&l_(2)},hostVars:4,hostBindings:function(e,t){e&1&&G(`message`,function(e){return t.inspectFromPanel(e)},Mu),e&2&&j_(`--%NS%accent`,t.viewAccent()?.accent??null)(`--%NS%accent-text`,t.viewAccent()?.text??null)},decls:29,vars:22,consts:[[`nav`,``],[`main`,``],[1,`brand`],[1,`mark`],[`width`,`22`,`height`,`22`,`viewBox`,`0 0 256 256`,`aria-hidden`,`true`],[`width`,`22`,`height`,`22`,`viewBox`,`0 0 32 32`,`aria-hidden`,`true`],[`width`,`24`,`height`,`17`,`viewBox`,`0 0 256 182`,`aria-hidden`,`true`],[`width`,`22`,`height`,`22`,`viewBox`,`0 0 24 24`,`fill`,`currentColor`,`aria-hidden`,`true`],[`width`,`20`,`height`,`22`,`viewBox`,`0 0 223 236`,`aria-hidden`,`true`],[`width`,`30`,`height`,`30`,`viewBox`,`0 0 500 500`,`aria-hidden`,`true`],[1,`title`],[`aria-label`,`Inspectors`,3,`scroll`,`keydown`],[`role`,`toolbar`,`aria-label`,`Inspectors`,`aria-orientation`,`horizontal`,1,`tab-bar`],[1,`full-panel`,3,`href`],[`role`,`status`,1,`status`],[`aria-hidden`,`true`,1,`dot`],[`tabindex`,`-1`],[`role`,`status`,1,`background-note`],[`role`,`alert`,1,`connection-error`],[3,`info`],[`role`,`status`,1,`turned-off`],[1,`turned-off`],[`fill`,`#3c5afd`,`d`,`M237.248 18.752q18.061 18.06 18.748 45.247V192c-.457 18.12-6.707 33.207-18.748 45.247c-12.04 12.04-27.127 18.291-45.251 18.752H63.999q-27.187-.69-45.247-18.752C6.712 225.208.46 210.121 0 192.001V64q.69-27.187 18.752-45.247Q36.812.692 63.999 0h127.998c18.124.46 33.211 6.711 45.251 18.752m-17.655 103q-6.033-6.003-6.28-15.066V64q-.192-9.063-6.221-15.091c-4.02-4.023-9.054-6.093-15.095-6.22h-21.312v106.626L85.315 42.687H63.999c-6.042.128-11.072 2.198-15.091 6.221c-4.023 4.02-6.093 9.05-6.22 15.09v42.688q-.249 9.063-6.281 15.066q-6.03 5.996-15.091 6.246q9.062.255 15.09 6.25c4.024 4.002 6.115 9.024 6.281 15.066V192c.128 6.037 2.198 11.072 6.221 15.091q6.03 6.03 15.09 6.22h21.317V106.687l85.37 106.627h21.312c6.041-.128 11.076-2.202 15.095-6.221s6.093-9.054 6.22-15.09v-42.688q.249-9.063 6.281-15.066q6.03-5.995 15.091-6.25q-9.062-.25-15.09-6.246`],[`fill`,`#53b9ff`,`d`,`M39.863 54.115L.311 93.716l60.995 61.179L0 216.385l39.428 39.619l61.43-61.507l61.097 61.068l39.552-39.602z`],[`fill`,`#119eff`,`d`,`m140.517 154.896l-39.658 39.601l61.097 61.069l39.552-39.602z`],[`fill-opacity`,`.2`,`d`,`m140.517 154.896l-39.658 39.601l15.267 15.182z`],[`fill`,`#53b9ff`,`d`,`M194.57 100.985L256 39.478L216.431 0l-61.412 61.384L93.917.311L54.365 39.913L216.01 201.761l39.552-39.602z`],[`fill`,`#119eff`,`d`,`m115.36 100.987l39.659-39.602L93.917.313L54.365 39.914z`],[`fill-opacity`,`.2`,`d`,`m115.359 100.985l39.659-39.601l-15.271-15.186z`],[`id`,`an-mark-grad`,`x1`,`0`,`y1`,`0`,`x2`,`1`,`y2`,`1`],[`offset`,`0`,`stop-color`,`#f0224f`],[`offset`,`1`,`stop-color`,`#c4002d`],[`d`,`M16 0C27.2 0 32 4.8 32 16S27.2 32 16 32 0 27.2 0 16 4.8 0 16 0Z`,`fill`,`url(#an-mark-grad)`],[`transform`,`translate(6.4 6.4) scale(0.8)`,`fill`,`#fff`],[`d`,`M14.8486 0L23.138 16.8551L23.9996 3.99892L14.8486 0Z`],[`d`,`M16.9875 17.7114H7.01272L5.73926 20.627L12.0001 24L18.261 20.627L16.9875 17.7114Z`],[`d`,`M8.72168 13.9298H15.2812L11.9997 6.39575L8.72168 13.9298Z`],[`d`,`M9.15103 0L0 3.99892L0.861556 16.8551L9.15103 0Z`],[`fill`,`#c30f2e`,`d`,`M152.228.001L48.455 181.046H256L152.228 0z`],[`fill`,`#dd0330`,`d`,`M88.314 26.967L0 181.52h176.628L88.315 26.967z`],[`fill`,`#fff`,`d`,`M18.167 135.294h220.236v-2.419H18.167z`],[`fill`,`#fff`,`d`,`M204.38 170.667c-.861 0-1.67-.358-2.348-1.034c-4.045-4.063-4.221-20.586-4.026-45.33c.11-13.521.257-32.043-1.9-33.504c-2.104.873-2.315 16.172-2.451 26.301c-.162 11.785-.327 23.98-2.242 30.189c-.57 1.84-1.306 3.525-2.786 3.39c-2.086-.185-2.76-3.48-4.317-16.478c-.647-5.4-1.317-10.98-2.101-13.14a11 11 0 0 0-.269-.66c-.835 1.889-1.8 7.079-2.47 10.682c-.927 4.976-1.803 9.676-2.9 11.726c-.847 1.575-2.19 3.63-4.067 3.231c-2.558-.537-3.323-5.693-3.552-8.719c0-25.455-3.33-28.417-3.997-28.753l-.107.081l-.162-.036c-2.377 1.038-2.506 9.294-2.627 17.276c-.096 5.856-.198 12.492-1.053 18.701c-1.108 8.05-2.448 9.603-4.115 9.507c-3.838-.262-3.95-13.482-3.95-14.987c0-.472.012-1.028.027-1.642c.074-3.076.205-8.8-1.687-10.604c-.25-.239-.603-.515-.879-.437c-1.347.339-2.745 4.714-3.209 6.153c-.147.457-.265.833-.364 1.09c-.078.214-.177.515-.294.88c-1.02 3.095-2.18 6.183-4.16 6.944c-.732.284-1.498.222-2.216-.183c-.953-.541-1.73-1.646-2.455-3.482c-.397-1.016-.735-2.046-1.082-3.081c-.419-1.263-.85-2.569-1.384-3.808c-.419-.965-1.464-1.4-2.796-1.164c-2.768.494-3.232 3.29-3.622 7.5c-.07.733-.137 1.452-.228 2.128c-.011.198-.501 6.38-.814 8.344c-.865 5.39-2.002 7.512-3.89 7.358c-4.66-.398-6.798-20.836-6.684-29.47c.088-6.592-1.104-9-1.818-9.382c-.074-.034-.189-.096-.46.095c-.843.571-1.594 2.348-1.363 4.215c2.566 20.32.674 43.592-3.96 48.833c-1.46 1.649-3.448 1.627-4.832.236c-4.049-4.064-4.218-20.586-4.026-45.33c.11-13.521.254-32.043-1.9-33.504c-2.105.873-2.311 16.172-2.45 26.301c-.163 11.785-.329 23.98-2.246 30.189c-.57 1.84-1.307 3.525-2.782 3.39c-2.091-.186-2.761-3.48-4.321-16.478c-.649-5.4-1.319-10.98-2.101-13.14c-.1-.273-.189-.49-.27-.66c-.832 1.889-1.796 7.079-2.466 10.682c-.927 4.976-1.803 9.676-2.904 11.726c-.846 1.575-2.19 3.63-4.063 3.231c-2.558-.537-3.324-5.693-3.552-8.719c-.003-25.455-3.33-28.417-3.997-28.753l-.106.081l-.166-.036c-2.374 1.038-2.503 9.293-2.629 17.276c-.091 5.856-.194 12.492-1.048 18.701c-1.107 8.05-2.437 9.618-4.111 9.507c-3.846-.262-3.958-13.482-3.958-14.987c0-.472.016-1.028.03-1.642c.074-3.076.207-8.8-1.685-10.604c-.25-.239-.603-.515-.88-.438c-1.347.34-2.75 4.715-3.206 6.155a47 47 0 0 1-.364 1.09q-.16.432-.298.875c-1.02 3.096-2.18 6.187-4.155 6.95c-.736.282-1.506.22-2.22-.185c-.953-.541-1.734-1.646-2.454-3.482c-.398-1.016-.74-2.046-1.083-3.081c-.42-1.263-.854-2.569-1.387-3.808c-.416-.965-1.465-1.4-2.797-1.164c-3.188.567-3.943 4.52-4.55 9.238l-.106.839l-2.411-.32l.114-.824c.527-4.137 1.328-10.39 6.53-11.31c2.446-.435 4.585.581 5.446 2.583c.578 1.34 1.031 2.695 1.466 4.008c.324.99.654 1.98 1.037 2.959c.674 1.708 1.197 2.15 1.392 2.257c1.218-.38 2.462-4.167 2.873-5.414c.13-.402.24-.732.328-.968c.085-.233.195-.571.328-.98c1.097-3.43 2.474-7.144 4.918-7.762c.747-.191 1.903-.166 3.157 1.035c2.665 2.544 2.525 8.48 2.433 12.41c-.014.59-.028 1.126-.028 1.583c0 6.272.93 10.655 1.64 12.16c.367-.77.998-2.63 1.598-7.007c.831-6.066.938-12.624 1.027-18.41c.161-10.24.275-17.663 3.982-19.408c.552-.339 1.469-.522 2.436-.033c3.586 1.803 5.326 11.885 5.326 30.817c.225 2.926 1.013 6.006 1.66 6.448c.004-.066.53-.39 1.394-2.01c.925-1.718 1.845-6.665 2.655-11.026c1.792-9.614 2.606-12.989 4.726-13.166c1.615-.158 2.362 1.896 2.676 2.76c.883 2.422 1.537 7.888 2.23 13.678c.54 4.49 1.31 10.902 2.094 13.497c.084-.228.18-.5.283-.836c1.815-5.878 1.98-17.887 2.14-29.507c.22-16.14.503-26.139 3.448-28.226a2.44 2.44 0 0 1 2.233-.316c3.448 1.144 3.714 11.254 3.519 35.8c-.14 17.799-.313 39.952 3.323 43.603c.317.32.542.32.622.32c.17 0 .413-.161.67-.452c3.681-4.162 6.01-26.022 3.372-46.927c-.328-2.602.677-5.337 2.392-6.514c.946-.652 2.036-.736 2.978-.232c2.145 1.14 3.187 5.024 3.102 11.546c-.15 11.387 2.584 24.714 4.37 26.842c.282-.471.842-1.763 1.379-5.145c.301-1.87.799-8.153.806-8.216c.09-.71.155-1.398.217-2.097c.369-3.924.82-8.804 5.613-9.654c2.444-.435 4.583.577 5.448 2.583c.577 1.34 1.027 2.695 1.46 4.008c.332.99.664 1.98 1.046 2.959c.67 1.708 1.197 2.15 1.387 2.257c1.218-.38 2.467-4.167 2.875-5.41c.132-.402.243-.737.328-.973c.088-.228.195-.57.324-.979c1.1-3.43 2.477-7.144 4.924-7.762c.74-.191 1.9-.166 3.154 1.035c2.665 2.543 2.526 8.48 2.437 12.41q-.029.792-.033 1.583c0 6.272.931 10.655 1.641 12.16c.365-.77.994-2.63 1.601-7.007c.832-6.066.931-12.624 1.027-18.41c.159-10.24.273-17.663 3.98-19.408c.55-.339 1.467-.522 2.44-.033c3.58 1.803 5.325 11.884 5.325 30.817c.224 2.926 1.012 6.006 1.656 6.448c.008-.066.526-.39 1.399-2.01c.923-1.718 1.84-6.665 2.653-11.026c1.786-9.614 2.602-12.989 4.722-13.166c1.62-.158 2.367 1.896 2.68 2.76c.88 2.422 1.535 7.888 2.233 13.678c.534 4.49 1.304 10.902 2.092 13.497c.08-.228.176-.5.28-.836c1.813-5.878 1.976-17.887 2.138-29.507c.216-16.14.504-26.139 3.448-28.226a2.45 2.45 0 0 1 2.234-.316c3.452 1.144 3.718 11.254 3.52 35.8c-.141 17.799-.314 39.952 3.319 43.603c.324.32.544.32.63.32c.165 0 .408-.161.662-.452c3.687-4.162 6.014-26.022 3.375-46.927c-.342-2.723.43-5.47 1.84-6.526c.71-.537 1.575-.647 2.37-.313c2.054.877 3.445 4.63 4.255 11.484c.339 2.87.641 5.974.931 9.036c.641 6.683 1.509 15.69 2.684 17.67c.36-.46 1.096-1.704 2.19-5.038l2.307.753c-1.696 5.157-3.026 7.1-4.755 6.902c-2.69-.299-3.468-5.734-4.84-20.055c-.29-3.048-.59-6.132-.928-8.989c-1.03-8.74-2.782-9.532-2.801-9.54c-.342.174-1.137 1.992-.842 4.31c2.558 20.32.673 43.597-3.964 48.834c-.747.842-1.587 1.27-2.485 1.27`],[`d`,`M12.024.017V0L12 .008L11.976 0v.017L.812 3.892l1.605 14.875l9.559 5.207V24l.024-.013l.024.013v-.026l9.559-5.207l1.605-14.875zm6.868 14.244q-1.64 3.948-6.031 4.166c-2.829 0-4.661-1.7-4.66-1.7q-1.745-1.359-2.398-3.417c-.695-.76-.702-.841-.774-1.145c-.072-.303.045-.388.249-.685q.204-.298.098-.85q-.26-.36-.3-1.128q0-.37.496-.783q.495-.413.607-.632q.083-.119.065-1.031q-.006-.897.995-.975c1-.08 1.565-.832 1.879-1.174c.21-.228.52-.339.91-.341c.551-.026 1.052.185 1.484.62c1.075-.055 2.176.235 3.292.863q2.379 1.414 2.596 3.055q-.257 2.158-5.788-.113q-2.895.819-2.846 3.552q0 2.508 2.422 3.643c-.787-.772-1.122-1.422-1.01-1.959q2.456 2.906 5.588 2.173c-.92.032-1.65-.264-2.198-.893q2.116-.05 3.998-1.972c-.724.576-1.482.794-2.284.657q3.26-2.563 2.307-5.98l-.002-.006a3.02 3.02 0 0 1 .788 2.03q.023 1.175-.795 2.477q.613-.478 1.413-2.047c.23 2.117-.625 3.724-2.574 4.825q.934-.085 2.473-1.23m-5.567-6.63a.319.319 0 1 1 .638 0a.319.319 0 0 1-.638 0`],[`id`,`ng-grad`,`x1`,`49`,`x2`,`226`,`y1`,`214`,`y2`,`130`,`gradientUnits`,`userSpaceOnUse`],[`stop-color`,`#E40035`],[`offset`,`.24`,`stop-color`,`#F60A48`],[`offset`,`.352`,`stop-color`,`#F20755`],[`offset`,`.494`,`stop-color`,`#DC087D`],[`offset`,`.745`,`stop-color`,`#9717E7`],[`offset`,`1`,`stop-color`,`#6C00F5`],[`fill`,`url(#ng-grad)`,`d`,`m222.077 39.192-8.019 125.923L137.387 0l84.69 39.192Zm-53.105 162.825-57.933 33.056-57.934-33.056 11.783-28.556h92.301l11.783 28.556ZM111.039 62.675l30.357 73.803H80.681l30.358-73.803ZM7.937 165.115 0 39.192 84.69 0 7.937 165.115Z`],[`width`,`500`,`height`,`500`,`rx`,`112`,`fill`,`#1c1a17`],[`transform`,`translate(250 252) scale(1.38) translate(-120 -129)`],[`id`,`pi-mark-mask`],[`x`,`-60`,`y`,`-60`,`width`,`360`,`height`,`380`,`fill`,`#fff`],[`fill`,`none`,`stroke`,`#000`,`stroke-width`,`30`,`stroke-linejoin`,`miter`],[`d`,`M88 66 V196`],[`d`,`M88 66 H143 L170 98 L143 130 H88 Z`],[`id`,`pi-mark-clip`],[`x`,`-40`,`y`,`129`,`width`,`320`,`height`,`200`],[`transform`,`rotate(-10 120 129)`],[`cx`,`120`,`cy`,`129`,`rx`,`128`,`ry`,`34`,`fill`,`none`,`stroke`,`#78350f`,`stroke-width`,`10`],[`mask`,`url(#pi-mark-mask)`],[`fill`,`#fbbf24`,`d`,`M120 5 L2 46 L22 198 L120 253 Z`],[`fill`,`#f59e0b`,`d`,`M120 5 L238 46 L218 198 L120 253 Z`],[`clip-path`,`url(#pi-mark-clip)`,`cx`,`120`,`cy`,`129`,`rx`,`128`,`ry`,`34`,`fill`,`none`,`stroke`,`#1c1a17`,`stroke-width`,`22`],[`clip-path`,`url(#pi-mark-clip)`,`cx`,`120`,`cy`,`129`,`rx`,`128`,`ry`,`34`,`fill`,`none`,`stroke`,`#fde68a`,`stroke-width`,`10`],[`transform`,`translate(230.9 146.0) rotate(10) scale(1.5) translate(-4 -4)`],[`x1`,`9`,`y1`,`9`,`x2`,`21`,`y2`,`21`,`stroke`,`#1c1a17`,`stroke-width`,`14`,`stroke-linecap`,`round`],[`r`,`16`,`fill`,`#1c1a17`],[`x1`,`9`,`y1`,`9`,`x2`,`21`,`y2`,`21`,`stroke`,`#fde68a`,`stroke-width`,`7`,`stroke-linecap`,`round`],[`r`,`12`,`fill`,`#1c1a17`,`stroke`,`#fde68a`,`stroke-width`,`5`],[`type`,`button`,3,`active`],[`type`,`button`,3,`click`],[3,`name`],[1,`full-panel`,3,`click`,`href`],[`width`,`14`,`height`,`14`,`viewBox`,`0 0 24 24`,`aria-hidden`,`true`],[`x`,`3`,`y`,`3`,`width`,`7`,`height`,`7`,`rx`,`1.5`],[`x`,`14`,`y`,`3`,`width`,`7`,`height`,`7`,`rx`,`1.5`],[`x`,`3`,`y`,`14`,`width`,`7`,`height`,`7`,`rx`,`1.5`],[`x`,`14`,`y`,`14`,`width`,`7`,`height`,`7`,`rx`,`1.5`],[`target`,`_blank`,`rel`,`noopener noreferrer`,3,`href`],[1,`sr-only`],[3,`rpc`],[3,`rpc`,`focus`],[3,`navigate`,`rpc`],[3,`focusHandled`,`showForm`,`rpc`,`focus`],[3,`showComponent`,`rpc`],[3,`focusHandled`,`rpc`,`focus`]],template:function(e,t){if(e&1&&(z(0,`header`)(1,`h1`,2)(2,`span`,3),P(3,lY,2,0,`:svg:svg`,4)(4,uY,7,0,`:svg:svg`,4)(5,dY,11,0,`:svg:svg`,5)(6,fY,5,0,`:svg:svg`,6)(7,pY,2,0,`:svg:svg`,7)(8,mY,10,0,`:svg:svg`,8)(9,hY,24,0,`:svg:svg`,9),B(),z(10,`span`,10),J(11),B()(),z(12,`nav`,11,0),G(`scroll`,function(){return t.measureNav()})(`keydown`,function(e){return t.onNavKey(e)}),P(14,_Y,3,0,`div`,12),B(),P(15,vY,7,1,`a`,13),z(16,`span`,14)(17,`span`,15),V(18,`span`),B(),J(19),B()(),z(20,`main`,16,1)(22,`p`,17),J(23),B(),P(24,yY,5,0,`div`,18)(25,bY,1,1,`app-coming-soon`,19)(26,xY,2,0,`p`,20)(27,CY,10,2,`p`,21)(28,IY,2,2),B()),e&2){let e,n;M(2),q(`ng-mark`,t.view()===`angular`)(`pi-mark`,!t.view()),M(),F(t.view()===`nativescript`?3:t.view()===`capacitor`?4:t.view()===`angular-native`?5:t.view()===`analog`?6:t.view()===`ngrx`?7:t.view()===`angular`?8:9),M(7),q(`ng-text`,t.view()===`angular`),M(),Y(t.title()),M(),q(`fade-start`,t.navFade().start)(`fade-end`,t.navFade().end),M(2),F(t.availableTabs().length>1?14:-1),M(),F((e=t.fullPanelLink())?15:-1,e),M(),q(`connected`,t.connected())(`failed`,t.connectionFailed()),M(3),X(` `,t.connected()?`Live`:t.connectionFailed()?`Disconnected`:`Connecting…`,` `),M(),N(`aria-label`,t.mainLabel()),M(3),Y(t.backgroundNote()),M(),F(t.connectionFailed()?24:(n=t.comingSoon())?25:t.view()===`angular-native`&&!t.nativePageId()?26:t.tabEnabled(t.tab(),t.config())?28:27,n)}},dependencies:[ED,tA,PN,eF,TI,zR,rV,wH,WW,HK,NJ,YK,KE],styles:[`[_nghost-%COMP%] { --%NS%accent-soft: color-mix(in srgb, var(--%NS%accent) 12%, transparent); --%NS%accent-line: color-mix(in srgb, var(--%NS%accent) 45%, transparent); display: flex; @@ -14388,4 +14445,4 @@ main[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] { flex-shrink: 1; gap: 8px; } -}`]})}).catch(console.error);export{Kx as t}; \ No newline at end of file +}`]})}).catch(console.error);export{eS as t}; \ No newline at end of file diff --git a/extension/ui/index.html b/extension/ui/index.html index 56ddadec..9c9ed586 100644 --- a/extension/ui/index.html +++ b/extension/ui/index.html @@ -9,7 +9,7 @@ Pangular Inspector - + diff --git a/packages/devtools/src/__tests__/analog-inspector.test.ts b/packages/devtools/src/__tests__/analog-inspector.test.ts index 1fa9f528..ede5f7f1 100644 --- a/packages/devtools/src/__tests__/analog-inspector.test.ts +++ b/packages/devtools/src/__tests__/analog-inspector.test.ts @@ -25,6 +25,7 @@ async function mount(handler: Handler, state: unknown = {}) { const { Input, Output, ViewChild } = await import('@angular/core'); const { AnalogInspector } = await import('../../../../app/src/pages/analog-inspector.ts'); const { Select } = await import('../../../../app/src/ui/select.ts'); + const { SourceLink } = await import('../../../../app/src/ui/source-link.ts'); const signalInput = (name: string, required = false) => [ { type: Input, args: [{ isSignal: true, alias: name, required }] }, ]; @@ -42,6 +43,10 @@ async function mount(handler: Handler, state: unknown = {}) { trigger: [{ type: ViewChild, args: ['trigger', { isSignal: true }] }], list: [{ type: ViewChild, args: ['list', { isSignal: true }] }], }; + (SourceLink as unknown as { propDecorators: unknown }).propDecorators = { + file: signalInput('file', true), + line: signalInput('line'), + }; if (!testBedReady) { TestBed.initTestEnvironment(BrowserTestingModule, platformBrowserTesting()); testBedReady = true; diff --git a/packages/devtools/src/__tests__/component-pick.test.ts b/packages/devtools/src/__tests__/component-pick.test.ts index d29954eb..66c5b2c4 100644 --- a/packages/devtools/src/__tests__/component-pick.test.ts +++ b/packages/devtools/src/__tests__/component-pick.test.ts @@ -205,4 +205,65 @@ describe('startComponentPick', () => { expect(await third.pick.result).toEqual({ ok: false, error: 'No component was picked.' }); expect(third.popup.hasAttribute('data-picking')).toBe(false); }); + describe('Alt+click', () => { + class _MapView { + static ɵcmp = { + debugInfo: { className: 'MapView', filePath: 'src/app/map.ts', lineNumber: 12 }, + }; + } + + function pickOn(instance: object) { + document.body.innerHTML = `pin
`; + const host = document.querySelector('app-map')!; + const ng: ComponentDebugNg = { getComponent: (el) => (el === host ? instance : null) }; + const pick = startComponentPick({ + getNg: () => ng, + highlight: { show: vi.fn(), clear: vi.fn() }, + timeoutMs: 1000, + }); + return { pick, target: host.querySelector('b')! }; + } + + it('asks to open the source of the component picked with Alt held', async () => { + const { pick, target } = pickOn(new _MapView()); + target.dispatchEvent( + new MouseEvent('click', { bubbles: true, cancelable: true, altKey: true }), + ); + expect(await pick.result).toMatchObject({ + ok: true, + name: 'MapView', + source: { file: 'src/app/map.ts', line: 12 }, + openInEditor: true, + }); + }); + + it('reads Alt from the pointerup that picks', async () => { + const { pick, target } = pickOn(new _MapView()); + const fire = (type: string) => + target.dispatchEvent( + new MouseEvent(type, { bubbles: true, cancelable: true, button: 0, altKey: true }), + ); + fire('pointerdown'); + fire('pointerup'); + expect(await pick.result).toMatchObject({ ok: true, openInEditor: true }); + }); + + it('keeps a plain click a plain pick, with the source but no open', async () => { + const { pick, target } = pickOn(new _MapView()); + target.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true })); + const result = await pick.result; + expect(result).toMatchObject({ ok: true, source: { file: 'src/app/map.ts', line: 12 } }); + expect(result.ok && result.openInEditor).toBeFalsy(); + }); + + it('does not ask to open anything when the source is unknown', async () => { + const { pick, target } = pickOn({}); + target.dispatchEvent( + new MouseEvent('click', { bubbles: true, cancelable: true, altKey: true }), + ); + const result = await pick.result; + expect(result).toMatchObject({ ok: true }); + expect(result.ok && (result.openInEditor || result.source)).toBeFalsy(); + }); + }); }); diff --git a/packages/devtools/src/__tests__/config.test.ts b/packages/devtools/src/__tests__/config.test.ts index b0c5583e..2a6365fa 100644 --- a/packages/devtools/src/__tests__/config.test.ts +++ b/packages/devtools/src/__tests__/config.test.ts @@ -7,6 +7,7 @@ import { AGENT_SAFETY, PANGULAR_INSPECTORS, RPC_INSPECTOR, + SHARED_RPC, agentAllowed, agentSafety, pangularConfigProblems, @@ -20,8 +21,6 @@ import { initPangularHub } from '../hub.ts'; import { makeProject } from './analog-fixture.ts'; import { isSecretKey, setRedaction } from '../forms-privacy.ts'; -const SHARED_RPC = ['build-meta', 'claim-page', 'report-page-visibility', 'list-pages']; - async function boot(config?: PangularConfig) { const host = { mountStatic: () => {}, @@ -229,6 +228,19 @@ describe('agent tool and RPC registration', () => { ); }); + it('keeps open-in-editor with every inspector off, as an RPC only, inside the project root', async () => { + const { rpc, tools, invoke } = await boot({ inspectors: offAll() }); + expect(rpc).toContain('open-in-editor'); + expect(tools).not.toContain('open-in-editor'); + expect(await invoke('open-in-editor', { file: '../../../../etc/passwd' })).toMatchObject({ + ok: false, + error: expect.stringMatching(/outside the project root/), + }); + expect(await invoke('open-in-editor', { file: 'package.json/nope' })).toMatchObject({ + ok: false, + }); + }); + it('registers everything by default', async () => { const { tools, actionTools } = await boot(); expect(actionTools.sort()).toEqual( diff --git a/packages/devtools/src/__tests__/hub-docks.test.ts b/packages/devtools/src/__tests__/hub-docks.test.ts index e5c29270..25d63ab2 100644 --- a/packages/devtools/src/__tests__/hub-docks.test.ts +++ b/packages/devtools/src/__tests__/hub-docks.test.ts @@ -5,7 +5,10 @@ import { registerHubDocks } from '../hub-docks.ts'; interface Entry { id: string; + type?: string; title: string; + groupId?: string; + defaultChildId?: string; url?: string; badge?: string; badgeVariant?: string; @@ -59,6 +62,58 @@ describe('hub docks', () => { expect(hub.docks.views.has('pangular:capacitor')).toBe(false); }); + it('puts every dock in one Pangular group, registered first, that opens All tools', () => { + const hub = fakeHub(); + const docks = registerHubDocks(hub, 'pangular'); + const [first, ...members] = hub.docks.register.mock.calls.map(([entry]) => entry); + expect(first).toMatchObject({ + type: 'group', + id: 'pangular:group', + title: 'Pangular', + defaultChildId: 'pangular:all', + }); + expect(first?.groupId).toBeUndefined(); + expect(docks?.groupId).toBe('pangular:group'); + expect(members.map((entry) => entry.id)).toEqual(docks?.ids); + expect(members.every((entry) => entry.groupId === 'pangular:group')).toBe(true); + }); + + it('keeps the explaining title when a badge is set, and drops only the badge when cleared', () => { + const hub = fakeHub(); + const docks = registerHubDocks(hub, 'pangular', undefined, { capacitor: false }); + docks?.setBadge('pangular:capacitor', { text: '2', variant: 'danger', severity: 'error' }); + expect(hub.docks.views.get('pangular:capacitor')).toMatchObject({ + title: 'Capacitor: no app connected (2 new, with errors)', + badge: '2', + badgeVariant: 'danger', + }); + docks?.setAvailable('capacitor', true); + expect(hub.docks.views.get('pangular:capacitor')).toMatchObject({ + title: 'Capacitor (2 new, with errors)', + badge: '2', + }); + docks?.setBadge('pangular:capacitor', undefined); + expect(hub.docks.views.get('pangular:capacitor')?.badge).toBeUndefined(); + expect(hub.docks.views.get('pangular:capacitor')?.title).toBe('Capacitor'); + const updates = hub.docks.update.mock.calls.length; + docks?.setBadge('pangular:capacitor', undefined); + docks?.setBadge('pangular:unknown', { text: '1', variant: 'info' }); + expect(hub.docks.update.mock.calls.length).toBe(updates); + }); + + it('puts the badge count into the title that labels the dock button', () => { + const hub = fakeHub(); + const docks = registerHubDocks(hub, 'pangular'); + docks?.setBadge('pangular:ngrx', { text: '3', variant: 'info' }); + expect(hub.docks.views.get('pangular:ngrx')?.title).toBe('NgRx (3 new)'); + docks?.setBadge('pangular:group', { text: '99+', variant: 'danger', severity: 'error' }); + expect(hub.docks.views.get('pangular:group')?.title).toBe('Pangular (99+ new, with errors)'); + docks?.setBadge('pangular:group', { text: '1', variant: 'danger', severity: 'warning' }); + expect(hub.docks.views.get('pangular:group')?.title).toBe('Pangular (1 new, with warnings)'); + docks?.setBadge('pangular:ngrx', undefined); + expect(hub.docks.views.get('pangular:ngrx')?.title).toBe('NgRx'); + }); + it('puts the All tools dock before the others, opening the panel without a view', () => { const hub = fakeHub(); registerHubDocks(hub, 'pangular'); diff --git a/packages/devtools/src/__tests__/hub-messages.test.ts b/packages/devtools/src/__tests__/hub-messages.test.ts new file mode 100644 index 00000000..29234e75 --- /dev/null +++ b/packages/devtools/src/__tests__/hub-messages.test.ts @@ -0,0 +1,365 @@ +import { createHostContext } from 'devframe/node'; +import { describe, expect, it, vi } from 'vitest'; +import { createPangular } from '../devframe.ts'; +import { resolvePangularConfig, type PangularConfig } from '../config.ts'; +import { registerHubDocks } from '../hub-docks.ts'; +import { FEED_PAGE_IDLE_MS, createHubFeed } from '../hub-messages.ts'; +import type { HydrationStats } from '../types.ts'; + +interface Message { + id: string; + message: string; + description?: string; + level: string; + category?: string; + labels?: string[]; + notify?: boolean; + actions?: { activate?: { dockId: string } }[]; +} + +interface Entry { + id: string; + type: string; + badge?: string; + badgeVariant?: string; + title?: string; + groupId?: string; +} + +function fakeMessages() { + const entries = new Map(); + const listeners = new Map void)[]>(); + return { + entries, + events: { + on: (event: string, listener: (arg?: unknown) => void) => { + listeners.set(event, [...(listeners.get(event) ?? []), listener]); + return () => undefined; + }, + }, + add: vi.fn(async (input: Message) => { + entries.set(input.id, { ...entries.get(input.id), ...input }); + return { id: input.id }; + }), + remove: (id: string) => { + entries.delete(id); + for (const listener of listeners.get('messages:removed') ?? []) listener(id); + }, + }; +} + +function fakeHub() { + const views = new Map(); + const docks = { + views, + register: vi.fn((entry: Entry) => { + views.set(entry.id, entry); + return { update: () => {} }; + }), + update: vi.fn((entry: Entry) => views.set(entry.id, entry)), + }; + const messages = fakeMessages(); + return { docks, messages, frames: [{ id: 'pangular', base: '/__devframes/pangular/' }] }; +} + +function setup(options: PangularConfig = {}, now = () => 1000) { + const hub = fakeHub(); + const config = resolvePangularConfig(options); + const feed = createHubFeed(hub, config, now); + feed.attachDocks(registerHubDocks(hub, 'pangular', config)); + const list = () => [...hub.messages.entries.values()]; + const badge = (id: string) => hub.docks.views.get(id)?.badge; + return { hub, feed, list, badge }; +} + +const stats = (patch: Partial = {}): HydrationStats => ({ + enabled: true, + mismatches: [], + skipHydrationHosts: [], + warnings: [], + warningsCaptured: true, + ...patch, +}); + +const run = (feed: ReturnType['feed'], id: string, markdown = 'Done.') => + feed.wrapTool({ id, handler: async (_args: unknown) => ({ markdown }) }); + +describe('hub messages', () => { + it('posts one message per agent write, with the tool, the page and a masked answer', async () => { + const { feed, list } = setup(); + const tool = run( + feed, + 'pangular:set-http-rule', + 'Added rule r1: Authorization: Bearer abc.def.ghi', + ); + await expect(tool.handler({ page: 'p1', pattern: '/api' })).resolves.toEqual({ + markdown: 'Added rule r1: Authorization: Bearer abc.def.ghi', + }); + const [message] = list(); + expect(message).toMatchObject({ + message: 'Agent ran set-http-rule', + level: 'info', + category: 'agent', + labels: ['pangular', 'page:p1'], + }); + expect(message!.description).toContain('Page p1.'); + expect(message!.description).not.toContain('abc.def.ghi'); + expect(JSON.stringify(message)).not.toContain('/api'); + }); + + it('counts a repeated agent write on its first message', async () => { + const { feed, list } = setup(); + const tool = run(feed, 'pangular:dispatch-ngrx-action'); + await tool.handler({ page: 'p1' }); + await tool.handler({ page: 'p1' }); + await tool.handler({ page: 'p1' }); + expect(list()).toHaveLength(1); + expect(list()[0]!.message).toBe('Agent ran dispatch-ngrx-action (3 times)'); + expect(list()[0]!.actions?.[0]?.activate?.dockId).toBe('pangular:ngrx'); + }); + + it('leaves read tools, failed calls and change-detection reads out', async () => { + const { hub, feed, list } = setup(); + const read = { + id: 'pangular:list-http-calls', + handler: async (_args: unknown) => ({ markdown: 'x' }), + }; + expect(feed.wrapTool(read)).toBe(read); + const failing = feed.wrapTool({ + id: 'pangular:clear-recordings', + handler: async (_args: unknown) => { + throw new Error('Provide a valid target'); + }, + }); + await expect(failing.handler({})).rejects.toThrow('Provide a valid target'); + const cd = run(feed, 'pangular:change-detection'); + await cd.handler({}); + expect(list()).toEqual([]); + await cd.handler({ record: 'start' }); + expect(list().map((m) => m.message)).toEqual(['Agent ran change-detection']); + expect(hub.messages.add).toHaveBeenCalledTimes(1); + }); + + it('posts a new NG error once per page and counts it when another page reports it', () => { + const { feed, list } = setup(); + const error = "NG01203: No value accessor for form control name: 'age'"; + feed.ngErrors('p1', 'forms', [error]); + // The page sends its whole list on every push. + feed.ngErrors('p1', 'forms', [error]); + expect(list()).toHaveLength(1); + expect(list()[0]).toMatchObject({ message: error, level: 'error', notify: true }); + feed.ngErrors('p2', 'forms', [error]); + expect(list()).toHaveLength(1); + expect(list()[0]).toMatchObject({ + message: `${error} (2 times)`, + notify: false, + labels: ['pangular', 'page:p1', 'page:p2'], + }); + }); + + it('masks secrets in NG errors', () => { + const { feed, list } = setup(); + feed.ngErrors('p1', 'forms', ['NG01000: bad token eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIn0.abc']); + expect(JSON.stringify(list())).not.toContain('eyJhbGciOiJIUzI1NiJ9'); + }); + + it('posts each failed navigation once, keyed by the page and the navigation', () => { + const { feed, list } = setup(); + const failed = { + id: 3, + startedAt: 10, + outcome: 'failed', + url: '/admin?token=secret123', + errorCode: 'NG04002', + reason: "Cannot match any routes. URL Segment: 'admin'", + }; + const navigations = [{ id: 1, startedAt: 1, outcome: 'succeeded', url: '/' }, failed]; + feed.navigations('p1', navigations); + feed.navigations('p1', navigations); + expect(list()).toHaveLength(1); + expect(list()[0]!.message).toBe( + "Navigation failed (NG04002): Cannot match any routes. URL Segment: 'admin'", + ); + expect(list()[0]!.description).not.toContain('secret123'); + feed.navigations('p1', [...navigations, { ...failed, id: 4, startedAt: 20 }]); + expect(list()[0]!.message).toMatch(/\(2 times\)$/); + }); + + it('posts hydration mismatches and NG05xx messages once per page', () => { + const { feed, list } = setup(); + const report = stats({ + mismatches: [{ component: 'app-cart', expected: '
', actual: '' }], + warnings: ['NG0505: no hydration info in the server response'], + }); + feed.hydration('p1', report); + feed.hydration('p1', report); + expect(list().map((m) => [m.message, m.level, m.category])).toEqual([ + ['Hydration mismatch at ', 'error', 'hydration'], + ['NG0505: no hydration info in the server response', 'warn', 'hydration'], + ]); + expect(list()[0]!.description).toBe('Expected:
\nActual: \n\nPage p1.'); + }); + + it('forgets a page that stopped reporting, so a reload of it counts again', () => { + let now = 1000; + const { feed, list } = setup({}, () => now); + feed.ngErrors('p1', 'forms', ['NG01050: formControlName outside a formGroup']); + now += FEED_PAGE_IDLE_MS + 1; + feed.ngErrors('p1', 'forms', ['NG01050: formControlName outside a formGroup']); + expect(list()[0]!.message).toMatch(/\(2 times\)$/); + }); + + it('starts counting again after the message is dismissed', () => { + const { hub, feed, list } = setup(); + feed.ngErrors('p1', 'forms', ['NG01050: a']); + hub.messages.remove(list()[0]!.id); + feed.ngErrors('p2', 'forms', ['NG01050: a']); + expect(list().map((m) => m.message)).toEqual(['NG01050: a']); + }); + + it('posts nothing for an inspector that is off', async () => { + const { feed, list } = setup({ + inspectors: { forms: false, router: false, http: false, ngrx: false }, + }); + feed.ngErrors('p1', 'forms', ['NG01050: a']); + feed.navigations('p1', [{ id: 1, startedAt: 1, outcome: 'failed', reason: 'x' }]); + feed.hydration('p1', stats({ mismatches: [{ component: 'app-a' }], warnings: ['NG0500'] })); + await run(feed, 'pangular:dispatch-ngrx-action').handler({}); + expect(list()).toEqual([]); + }); + + it('posts nothing for agent tools that are off', async () => { + const { feed, list } = setup({ agent: { tools: { http: false } } }); + await run(feed, 'pangular:set-http-rule').handler({}); + expect(list()).toEqual([]); + }); + + it('does nothing outside a hub', async () => { + const feed = createHubFeed({}, resolvePangularConfig()); + const tool = { id: 'pangular:navigate', handler: async (_args: unknown) => 'ok' }; + expect(feed.wrapTool(tool)).toBe(tool); + expect(() => feed.ngErrors('p1', 'forms', ['NG01050: a'])).not.toThrow(); + }); +}); + +describe('hub dock badges', () => { + it('counts unseen items on the dock that shows them and on the group', async () => { + const { feed, badge, hub } = setup(); + await run(feed, 'pangular:dispatch-ngrx-action').handler({}); + expect(badge('pangular:ngrx')).toBe('1'); + expect(hub.docks.views.get('pangular:ngrx')?.badgeVariant).toBe('info'); + feed.ngErrors('p1', 'forms', ['NG01050: a', 'NG01203: b']); + expect(badge('pangular:angular')).toBe('2'); + expect(hub.docks.views.get('pangular:angular')?.badgeVariant).toBe('danger'); + expect(badge('pangular:group')).toBe('3'); + expect(hub.docks.views.get('pangular:group')?.badgeVariant).toBe('danger'); + }); + + it('says "with warnings" for a dock with only warnings, and "with errors" once an error comes', () => { + const { feed, hub } = setup(); + const view = (id: string) => hub.docks.views.get(id); + feed.hydration('p1', stats({ warnings: ['NG0505: no hydration info'] })); + expect(view('pangular:angular')).toMatchObject({ + badge: '1', + badgeVariant: 'danger', + title: 'Angular (1 new, with warnings)', + }); + expect(view('pangular:group')?.title).toBe('Pangular (1 new, with warnings)'); + feed.hydration('p1', stats({ mismatches: [{ component: 'app-a' }] })); + expect(view('pangular:angular')).toMatchObject({ + badge: '2', + badgeVariant: 'danger', + title: 'Angular (2 new, with errors)', + }); + expect(view('pangular:group')?.title).toBe('Pangular (2 new, with errors)'); + }); + + it('clears a dock when the panel opens it, and every dock for All tools', async () => { + const { feed, badge, hub } = setup(); + await run(feed, 'pangular:dispatch-ngrx-action').handler({}); + feed.ngErrors('p1', 'forms', ['NG01050: a']); + feed.seen('pangular:angular'); + expect(badge('pangular:angular')).toBeUndefined(); + expect(badge('pangular:ngrx')).toBe('1'); + expect(badge('pangular:group')).toBe('1'); + expect(hub.docks.views.get('pangular:group')?.badgeVariant).toBe('info'); + feed.seen('pangular:all'); + expect(badge('pangular:ngrx')).toBeUndefined(); + expect(badge('pangular:group')).toBeUndefined(); + }); + + it('ignores unknown docks and only updates a dock when its badge changes', () => { + const { feed, hub } = setup(); + feed.seen('pangular:nope'); + feed.seen(42); + expect(hub.docks.update).not.toHaveBeenCalled(); + feed.ngErrors('p1', 'forms', ['NG01050: a']); + const updates = hub.docks.update.mock.calls.length; + feed.ngErrors('p1', 'forms', ['NG01050: a']); + expect(hub.docks.update.mock.calls.length).toBe(updates); + }); + + it('counts writes and errors of the other inspectors on the Angular dock', async () => { + const { feed, badge } = setup(); + await run(feed, 'pangular:analog-call-api').handler({}); + await run(feed, 'pangular:navigate').handler({}); + feed.hydration('p1', stats({ mismatches: [{ component: 'app-a' }] })); + expect(badge('pangular:analog')).toBe('1'); + expect(badge('pangular:angular')).toBe('2'); + }); +}); + +describe('hub messages in the devframe', () => { + async function boot(options: PangularConfig = {}) { + const host = { + mountStatic: () => {}, + resolveOrigin: () => 'http://localhost', + getStorageDir: () => '', + }; + const ctx = await createHostContext({ cwd: process.cwd(), mode: 'dev', host: host as never }); + const messages = fakeMessages(); + Object.assign(ctx, { messages }); + await createPangular(options).setup(ctx as never); + const push = (name: string, payload: unknown) => + ctx.rpc.invokeLocal(`pangular:${name}` as never, ...([payload] as never)); + return { ctx, push, list: () => [...messages.entries.values()] }; + } + + it('posts forms setup errors and agent writes', async () => { + const { ctx, push, list } = await boot(); + await push('push-forms', { + pageId: 'pg1', + forms: [], + events: [], + setupErrors: ["NG01203: No value accessor for form control name: 'age'"], + }); + await ctx.agent.invoke('pangular:set-http-rule', { pattern: '/api/*', status: 500 }); + expect(list().map((m) => m.message)).toEqual([ + "NG01203: No value accessor for form control name: 'age'", + 'Agent ran set-http-rule', + ]); + }); + + it('posts hydration mismatches from push-http', async () => { + const { push, list } = await boot(); + await push('push-http', { + pageId: 'pg1', + url: 'http://localhost:4200/', + payload: { entries: [] }, + calls: [], + hydration: stats({ mismatches: [{ component: 'app-root', expected: '

' }] }), + }); + expect(list().map((m) => m.message)).toEqual(['Hydration mismatch at ']); + }); + + it('posts nothing for a turned off inspector', async () => { + const { push, list } = await boot({ inspectors: { forms: false } }); + await push('push-forms', { + pageId: 'pg1', + forms: [], + events: [], + setupErrors: ['NG01203: x'], + }).catch(() => undefined); + expect(list()).toEqual([]); + }); +}); diff --git a/packages/devtools/src/__tests__/hub.test.ts b/packages/devtools/src/__tests__/hub.test.ts index a8e3a5d9..b263c457 100644 --- a/packages/devtools/src/__tests__/hub.test.ts +++ b/packages/devtools/src/__tests__/hub.test.ts @@ -18,7 +18,9 @@ async function boot(cwd: string) { const ctx = await hub.context; const docks = [...ctx.docks.views.values()].map((dock) => ({ id: dock.id, + type: dock.type, title: dock.title, + defaultChildId: 'defaultChildId' in dock ? dock.defaultChildId : undefined, url: 'url' in dock ? dock.url : undefined, frameId: 'frameId' in dock ? dock.frameId : undefined, defaultOrder: dock.defaultOrder ?? 0, @@ -60,7 +62,7 @@ afterEach(async () => { describe('Pangular Inspector hub', () => { it('adds an All tools dock first, then a dock per tool, Analog included even outside Analog apps', async () => { const { docks } = await boot(makeProject({ 'package.json': '{}' })); - const ours = docks.filter((d) => d.id.startsWith('pangular:')); + const ours = docks.filter((d) => d.id.startsWith('pangular:') && d.type !== 'group'); // The rail puts lower orders first. const rail = [...ours].sort((a, b) => a.defaultOrder - b.defaultOrder); expect(rail.map((d) => [d.id, d.url])).toEqual([ @@ -74,7 +76,13 @@ describe('Pangular Inspector hub', () => { ]); expect(rail[0].title).toBe('All tools'); expect(ours.filter((d) => d.title.endsWith('Coming Soon'))).toEqual([]); - expect(ours.some((d) => d.groupId)).toBe(false); + // One rail button for all of them: the Pangular group, which opens All tools. + expect(ours.every((d) => d.groupId === 'pangular:group')).toBe(true); + expect(docks.find((d) => d.id === 'pangular:group')).toMatchObject({ + type: 'group', + title: 'Pangular', + defaultChildId: 'pangular:all', + }); expect(new Set(ours.map((d) => d.frameId))).toEqual(new Set(['pangular'])); expect(docks.find((d) => d.id === 'pangular')?.visibility).toBe('false'); }); @@ -83,10 +91,11 @@ describe('Pangular Inspector hub', () => { const { docks } = await boot(makeProject({ 'package.json': '{}' })); const status = Object.fromEntries( docks - .filter((d) => d.id.startsWith('pangular:')) + .filter((d) => d.id.startsWith('pangular:') && d.type !== 'group') .map((d) => [d.id, [d.title, d.badge, d.badgeVariant]]), ); // The hub fades a badge with its button, so it would fail axe and cover the icon. + // A badge only counts unseen messages, and there are none yet. expect(status).toEqual({ 'pangular:all': ['All tools', undefined, undefined], 'pangular:angular': ['Angular', undefined, undefined], @@ -160,6 +169,32 @@ describe('Pangular Inspector hub', () => { expect(update).toHaveBeenCalledTimes(4); }); + it('posts NG errors to the hub messages and counts them on the dock until it is opened', async () => { + const { ctx } = await boot(makeProject({ 'package.json': '{}' })); + const invoke = (name: string, arg: unknown) => + ctx.rpc.invokeLocal(name as never, ...([arg] as never)); + const report = { + pageId: 'pg1', + forms: [], + events: [], + setupErrors: ['NG01050: formControlName must be used with a parent formGroup directive'], + }; + await invoke('pangular:push-forms', report); + await invoke('pangular:push-forms', report); + await vi.waitFor(() => expect(ctx.messages.entries.size).toBe(1)); + const [message] = [...ctx.messages.entries.values()]; + expect(message).toMatchObject({ + level: 'error', + category: 'runtime', + message: 'NG01050: formControlName must be used with a parent formGroup directive', + labels: ['pangular', 'page:pg1'], + }); + const badge = (id: string) => ctx.docks.views.get(id)?.badge; + expect([badge('pangular:angular'), badge('pangular:group')]).toEqual(['1', '1']); + await invoke('pangular:hub-dock-seen', 'pangular:angular'); + expect([badge('pangular:angular'), badge('pangular:group')]).toEqual([undefined, undefined]); + }); + it('serves the dock script, the viewer and the MCP tools', async () => { const { hub, ctx } = await boot(makeProject({ 'package.json': '{}' })); const get = (path: string) => hub.handler(new Request(`http://localhost${path}`)); diff --git a/packages/devtools/src/__tests__/mcp-print-config.test.ts b/packages/devtools/src/__tests__/mcp-print-config.test.ts new file mode 100644 index 00000000..140ea993 --- /dev/null +++ b/packages/devtools/src/__tests__/mcp-print-config.test.ts @@ -0,0 +1,272 @@ +import { join } from 'node:path'; +import { afterEach, describe, expect, it, vi } from 'vitest'; +import { createPangularCli } from '../cli.ts'; +import { isLoopbackHost, mcpEndpoint, mcpPrintConfig, shellQuote } from '../mcp-print-config.ts'; +import { fixtureDir } from '../rpc/__tests__/fixture-dir.ts'; + +const SECRET = 'do-not-print-this-token-0123456789'; + +/** The JSON block printed after `heading`. */ +function block(text: string, heading: string): Record { + const start = text.indexOf('{', text.indexOf(heading)); + const end = text.indexOf('\n}\n', start); + return JSON.parse(text.slice(start, end + 2)) as Record; +} + +function sections(text: string) { + const http = text.indexOf('== HTTP'); + return { stdio: text.slice(0, http), http: text.slice(http) }; +} + +afterEach(() => { + vi.restoreAllMocks(); + process.exitCode = undefined; +}); + +describe('mcpEndpoint', () => { + it('points at the standalone CLI by default, which asks for no token', () => { + expect(mcpEndpoint({})).toEqual({ + url: 'http://localhost:9999/__mcp', + origin: 'http://localhost:9999', + token: false, + }); + }); + + it('points at a hub base with the bearer token', () => { + expect(mcpEndpoint({ port: 4000, base: '__devframes' })).toEqual({ + url: 'http://localhost:4000/__devframes/__mcp', + origin: 'http://localhost:4000', + token: true, + }); + expect(mcpEndpoint({ base: '/' }).token).toBe(false); + }); + + it('turns a wildcard bind host into one a client can reach', () => { + expect(mcpEndpoint({ host: '0.0.0.0' }).origin).toBe('http://localhost:9999'); + expect(mcpEndpoint({ host: '::1', port: 5173 }).origin).toBe('http://[::1]:5173'); + expect(mcpEndpoint({ host: '192.168.1.20' }).origin).toBe('http://192.168.1.20:9999'); + }); +}); + +describe('mcpPrintConfig', () => { + it('prints stdio config for the project folder and HTTP config for the CLI server', () => { + const text = mcpPrintConfig({ root: '/work/my app', readOnly: true, env: {} }); + const { stdio, http } = sections(text); + expect(stdio).toContain( + "claude mcp add pangular -- npx @pangular-inspector/devtools mcp --root '/work/my app' --read-only", + ); + const args = ['@pangular-inspector/devtools', 'mcp', '--root', '/work/my app', '--read-only']; + expect(block(stdio, 'Cursor')).toEqual({ + mcpServers: { pangular: { command: 'npx', args } }, + }); + expect(block(stdio, 'VS Code')).toEqual({ + servers: { pangular: { type: 'stdio', command: 'npx', args } }, + }); + + expect(http).toContain( + "claude mcp add --transport http --scope project pangular-live http://localhost:9999/__mcp --header 'Origin: http://localhost:9999'\n", + ); + expect(block(http, 'Cursor')).toEqual({ + mcpServers: { + 'pangular-live': { + url: 'http://localhost:9999/__mcp', + headers: { Origin: 'http://localhost:9999' }, + }, + }, + }); + expect(http).not.toContain('Authorization'); + expect(text).not.toContain('Warning'); + }); + + it('names the HTTP server apart from the stdio one, so Claude Code loads both', () => { + const { stdio, http } = sections(mcpPrintConfig({ root: '/work/app', env: {} })); + expect(stdio).toContain('claude mcp add pangular -- '); + expect(http).toContain('claude mcp add --transport http --scope project pangular-live '); + expect(Object.keys(block(http, 'VS Code')['servers'] as object)).toEqual(['pangular-live']); + expect(Object.keys(block(stdio, 'VS Code')['servers'] as object)).toEqual(['pangular']); + }); + + it('prints no clear-text warning for a hub on a loopback host', () => { + for (const host of ['localhost', '127.0.0.1', '::1', '0.0.0.0']) { + const text = mcpPrintConfig({ root: '/work/app', host, port: 4000, base: '/__devframes/' }); + expect(text).toContain('Authorization'); + expect(text).not.toContain('Warning'); + } + }); + + it('warns that the token travels in clear text for a hub on a LAN address over http', () => { + const text = mcpPrintConfig({ + root: '/work/app', + host: '192.168.1.20', + port: 4000, + base: '/__devframes/', + env: {}, + }); + const { http } = sections(text); + expect(http).toContain( + 'Warning: http://192.168.1.20:4000 is not a loopback address and the URL is http, so the MCP token travels in clear text on the network.', + ); + expect(http.indexOf('Warning')).toBeLessThan(http.indexOf('claude mcp add')); + // The standalone CLI asks for no token, so there is nothing to leak. + expect(mcpPrintConfig({ root: '/work/app', host: '192.168.1.20', env: {} })).not.toContain( + 'Warning', + ); + }); + + it('prints an https endpoint with --https, and no warning', () => { + const text = mcpPrintConfig({ + root: '/work/app', + host: 'dev.example.test', + port: 8443, + base: '/__devframes/', + https: true, + env: {}, + }); + const { http } = sections(text); + expect(http).toContain( + '== HTTP: live pages, at https://dev.example.test:8443/__devframes/__mcp ==', + ); + expect(http).toContain("--header 'Origin: https://dev.example.test:8443'"); + expect(block(http, 'Cursor')).toEqual({ + mcpServers: { + 'pangular-live': { + url: 'https://dev.example.test:8443/__devframes/__mcp', + headers: { + Authorization: 'Bearer ${env:PANGULAR_MCP_TOKEN}', + Origin: 'https://dev.example.test:8443', + }, + }, + }, + }); + expect(text).not.toContain('Warning'); + }); + + it('adds the token header for a hub and names the token file, never the token', () => { + const tokenFile = '/home/me/.tokens/pangular token'; + const text = mcpPrintConfig({ + root: '/work/app', + port: 4000, + base: '/__devframes/', + env: { PANGULAR_MCP_TOKEN: SECRET, PANGULAR_MCP_TOKEN_FILE: tokenFile }, + }); + const { http } = sections(text); + expect(text).not.toContain(SECRET); + expect(http).toContain( + "--header 'Origin: http://localhost:4000' --header 'Authorization: Bearer ${PANGULAR_MCP_TOKEN}'", + ); + expect(block(http, 'Cursor')).toEqual({ + mcpServers: { + 'pangular-live': { + url: 'http://localhost:4000/__devframes/__mcp', + headers: { + Authorization: 'Bearer ${env:PANGULAR_MCP_TOKEN}', + Origin: 'http://localhost:4000', + }, + }, + }, + }); + const vscode = block(http, 'VS Code') as { + inputs: { id: string; password: boolean }[]; + servers: { 'pangular-live': { headers: Record } }; + }; + expect(vscode.inputs).toEqual([ + expect.objectContaining({ id: 'pangular-token', password: true }), + ]); + expect(vscode.servers['pangular-live'].headers['Authorization']).toBe( + 'Bearer ${input:pangular-token}', + ); + expect(text).toContain(`export PANGULAR_MCP_TOKEN="$(cat '${tokenFile}')"`); + }); +}); + +describe('isLoopbackHost', () => { + it('knows the names and addresses of this machine', () => { + for (const host of ['localhost', 'app.localhost', '127.0.0.1', '127.1.2.3', '[::1]', '::1']) { + expect(isLoopbackHost(host)).toBe(true); + } + for (const host of ['192.168.1.20', 'dev.example.test', '[fe80::1]', '10.0.0.2']) { + expect(isLoopbackHost(host)).toBe(false); + } + }); +}); + +describe('shellQuote', () => { + it('leaves plain paths alone and quotes the rest', () => { + expect(shellQuote('/a/b-c_d.json')).toBe('/a/b-c_d.json'); + expect(shellQuote("it's here")).toBe(`'it'\\''s here'`); + expect(shellQuote('Bearer ${X}')).toBe(`'Bearer \${X}'`); + }); +}); + +describe('pangular mcp --print-config', () => { + it('prints the config with the CLI flags and starts no server', async () => { + const root = fixtureDir('pangular-print-config-'); + const lines: string[] = []; + const cwd = process.cwd(); + await createPangularCli({ + env: { PANGULAR_MCP_TOKEN: SECRET }, + log: (line) => lines.push(line), + }).parse([ + 'node', + 'pangular', + 'mcp', + '--print-config', + '--root', + root, + '--config', + join(root, 'pangular.config.json'), + '--host', + '127.0.0.1', + '--port', + '5173', + '--base', + '/__devframes/', + ]); + expect(process.exitCode).toBeUndefined(); + expect(process.cwd()).toBe(cwd); + const text = lines.join('\n'); + expect(text).not.toContain(SECRET); + expect(text).toContain(`--root ${root} --config ${join(root, 'pangular.config.json')}`); + expect(text).toContain('== HTTP: live pages, at http://127.0.0.1:5173/__devframes/__mcp =='); + expect(text).toContain("--header 'Authorization: Bearer ${PANGULAR_MCP_TOKEN}'"); + expect(text).not.toContain('Warning'); + }); + + it('takes --https for a server behind TLS', async () => { + const lines: string[] = []; + await createPangularCli({ env: {}, log: (line) => lines.push(line) }).parse([ + 'node', + 'pangular', + 'mcp', + '--print-config', + '--root', + fixtureDir('pangular-print-config-https-'), + '--host', + '192.168.1.20', + '--port', + '4000', + '--base', + '/__devframes/', + '--https', + ]); + const text = lines.join('\n'); + expect(text).toContain( + '== HTTP: live pages, at https://192.168.1.20:4000/__devframes/__mcp ==', + ); + expect(text).not.toContain('Warning'); + }); + + it('fails on a project folder that does not exist', async () => { + const error = vi.spyOn(console, 'error').mockImplementation(() => {}); + await createPangularCli({ env: {}, log: () => {} }).parse([ + 'node', + 'pangular', + 'mcp', + '--print-config', + '--root', + '/no/such/folder', + ]); + expect(process.exitCode).toBe(1); + expect(String(error.mock.calls[0]?.[0])).toContain('does not exist'); + }); +}); diff --git a/packages/devtools/src/__tests__/overlay-nativescript-inspectors.test.ts b/packages/devtools/src/__tests__/overlay-nativescript-inspectors.test.ts new file mode 100644 index 00000000..50ca144c --- /dev/null +++ b/packages/devtools/src/__tests__/overlay-nativescript-inspectors.test.ts @@ -0,0 +1,134 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; + +const calls: [string, unknown][] = []; +const attachNgrx = vi.fn(() => ({ push: async () => undefined, stop: () => undefined })); +const installSignalWriteHook = vi.fn(async () => () => undefined); +let connectionMeta: { configs?: object } = {}; + +const host = { + typeName: 'AppHostView', + parent: null, + isLoaded: true, + eachChildView: () => undefined, +}; +class AppComponent {} +Object.assign(AppComponent, { ɵcmp: { selectors: [['ns-app']] } }); +const app = new AppComponent(); + +vi.mock('@nativescript/core', () => ({ + Application: { getRootView: () => host }, + isAndroid: false, +})); + +vi.mock('devframe/client', () => ({ + connectDevframe: vi.fn(async () => ({ + status: 'connected', + ensureTrusted: async () => true, + connectionMeta, + close: vi.fn(), + scope: () => ({ + rpc: { + register: vi.fn(), + call: vi.fn(async (name: string, payload: unknown) => { + calls.push([name, payload]); + return undefined; + }), + }, + }), + })), +})); + +vi.mock('../signal-history.ts', async (importOriginal) => ({ + ...(await importOriginal()), + installSignalWriteHook, +})); + +vi.mock('../ngrx-overlay.ts', () => ({ attachNgrx })); + +async function flush() { + for (let i = 0; i < 40; i++) await Promise.resolve(); +} + +const names = () => calls.map(([name]) => name); + +describe('NativeScript overlay inspectors', () => { + beforeEach(() => { + vi.useFakeTimers(); + vi.stubGlobal('WebSocket', class {}); + vi.spyOn(console, 'log').mockImplementation(() => undefined); + vi.spyOn(console, 'warn').mockImplementation(() => undefined); + calls.length = 0; + attachNgrx.mockClear(); + installSignalWriteHook.mockClear(); + (globalThis as Record)['ng'] = { + getComponent: (h: unknown) => (h === host ? app : null), + getRootComponents: () => [app], + getHostElement: (c: unknown) => (c === app ? host : null), + getInjector: (h: unknown) => h, + ɵgetSignalGraph: () => ({ + nodes: [{ id: '1', kind: 'signal', label: 'count', epoch: 0, value: 0 }], + }), + }; + }); + + afterEach(() => { + connectionMeta = {}; + vi.useRealTimers(); + vi.unstubAllGlobals(); + vi.restoreAllMocks(); + delete (globalThis as Record)['ng']; + }); + + it('runs every collector by default and forgets each page on dispose', async () => { + const { initNativeScriptOverlay } = await import('../overlay-nativescript.ts'); + const dispose = initNativeScriptOverlay({ baseURL: 'http://localhost:9999/', intervalMs: 100 }); + await flush(); + expect(names()).toEqual( + expect.arrayContaining(['push-component-tree', 'push-signal-graph', 'push-injector-tree']), + ); + expect(attachNgrx).toHaveBeenCalledTimes(1); + expect(installSignalWriteHook).toHaveBeenCalledTimes(1); + + calls.length = 0; + dispose(); + await flush(); + expect(names()).toEqual( + expect.arrayContaining([ + 'forget-component-page', + 'forget-signal-page', + 'forget-injector-page', + 'forget-ngrx-page', + 'forget-pipes-page', + ]), + ); + }); + + it('does not collect, push or forget for inspectors the config turns off', async () => { + connectionMeta = { + configs: { + pangular: { + inspectors: { components: false, signals: false, ngrx: false, pipes: false }, + }, + }, + }; + const { initNativeScriptOverlay } = await import('../overlay-nativescript.ts'); + const dispose = initNativeScriptOverlay({ baseURL: 'http://localhost:9999/', intervalMs: 100 }); + await flush(); + await vi.advanceTimersByTimeAsync(300); + await flush(); + + expect(names()).toContain('push-injector-tree'); + expect(names()).not.toContain('push-component-tree'); + expect(names()).not.toContain('push-signal-graph'); + expect(names()).not.toContain('ping-component-tree'); + expect(names()).not.toContain('ping-signal-graph'); + expect(attachNgrx).not.toHaveBeenCalled(); + expect(installSignalWriteHook).not.toHaveBeenCalled(); + expect(names().some((name) => name.includes('pipe'))).toBe(false); + + calls.length = 0; + dispose(); + await flush(); + expect(names()).toEqual(['forget-injector-page']); + }); +}); diff --git a/packages/devtools/src/__tests__/overlay-open-in-editor.test.ts b/packages/devtools/src/__tests__/overlay-open-in-editor.test.ts new file mode 100644 index 00000000..24d13d6f --- /dev/null +++ b/packages/devtools/src/__tests__/overlay-open-in-editor.test.ts @@ -0,0 +1,87 @@ +// @vitest-environment jsdom +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; + +const calls: { name: string; args: unknown[] }[] = []; +const handlers = new Map unknown>(); + +vi.mock('devframe/client', () => ({ + connectDevframe: async () => ({ + connectionMeta: { + backend: 'websocket', + configs: { pangular: { inspectors: { analog: false } } }, + }, + scope: () => ({ + rpc: { + call: async (name: string, ...args: unknown[]) => { + calls.push({ name, args }); + return undefined; + }, + register: (definition: { name: string; handler: (...args: unknown[]) => unknown }) => { + handlers.set(definition.name, definition.handler); + }, + }, + }), + }), +})); + +class _MapView { + static ɵcmp = { debugInfo: { className: 'MapView', filePath: 'src/app/map.ts', lineNumber: 9 } }; +} + +const stops: (() => void)[] = []; + +async function startPick() { + document.body.innerHTML = 'pin'; + const host = document.querySelector('app-map')!; + const instance = new _MapView(); + vi.stubGlobal('ng', { getComponent: (el: Element) => (el === host ? instance : null) }); + vi.resetModules(); + const { initOverlay } = await import('../overlay.ts'); + const pending = initOverlay(); + await vi.advanceTimersByTimeAsync(200); + stops.push(await pending); + handlers.get('component-pick')!({ requestId: 'r1' }); + return host.querySelector('b')!; +} + +async function pickResult() { + await vi.advanceTimersByTimeAsync(10); + return calls.find((call) => call.name === 'component-pick-result'); +} + +describe.sequential('overlay pick with Alt', () => { + beforeEach(() => { + calls.length = 0; + handlers.clear(); + vi.stubGlobal('BroadcastChannel', undefined); + vi.useFakeTimers({ + toFake: ['Date', 'setTimeout', 'clearTimeout', 'setInterval', 'clearInterval'], + }); + }); + + afterEach(() => { + stops.splice(0).forEach((stop) => stop()); + vi.useRealTimers(); + vi.unstubAllGlobals(); + sessionStorage.clear(); + document.body.innerHTML = ''; + }); + + it('opens the picked component in the editor on Alt+click and still reports the pick', async () => { + const target = await startPick(); + target.dispatchEvent( + new MouseEvent('click', { bubbles: true, cancelable: true, altKey: true }), + ); + expect(await pickResult()).toBeDefined(); + expect(calls.filter((call) => call.name === 'open-in-editor')).toEqual([ + { name: 'open-in-editor', args: [{ file: 'src/app/map.ts', line: 9 }] }, + ]); + }); + + it('only picks on a plain click', async () => { + const target = await startPick(); + target.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true })); + expect(await pickResult()).toBeDefined(); + expect(calls.some((call) => call.name === 'open-in-editor')).toBe(false); + }); +}); diff --git a/packages/devtools/src/brand.ts b/packages/devtools/src/brand.ts index 5f4c3ce7..008bfe96 100644 --- a/packages/devtools/src/brand.ts +++ b/packages/devtools/src/brand.ts @@ -2,3 +2,6 @@ export const PANGULAR_LOGO_SVG = ''; export const PANGULAR_LOGO_DATA_URI = `data:image/svg+xml,${encodeURIComponent(PANGULAR_LOGO_SVG)}`; + +/** The brand amber the hub uses for its accent and the Pangular dock group. */ +export const PANGULAR_PRIMARY_COLOR = '#f5a524'; diff --git a/packages/devtools/src/cli.ts b/packages/devtools/src/cli.ts index 27e17ace..f024114d 100644 --- a/packages/devtools/src/cli.ts +++ b/packages/devtools/src/cli.ts @@ -15,6 +15,7 @@ import { type CliAccessFlags, } from './cli-access.ts'; import pangular, { createPangular } from './devframe.ts'; +import { mcpPrintConfig } from './mcp-print-config.ts'; import type { PangularConfig } from './config.ts'; import pkg from '../package.json' with { type: 'json' }; @@ -224,6 +225,37 @@ export function startupLines( return lines; } +interface PrintConfigFlags { + printConfig?: boolean; + host?: string; + port?: number | string; + base?: string; + https?: boolean; +} + +function addPrintConfigOptions(command: Command) { + command.option('--print-config', 'Print MCP client config for this project and exit'); + command.option('--host ', 'With --print-config: host of the server that runs the app'); + command.option('--port ', 'With --print-config: port of that server (default: 9999)'); + command.option('--base ', 'With --print-config: the hub base, such as /__devframes/'); + command.option('--https', 'With --print-config: the server is behind TLS, so use an https URL'); +} + +/** The `--print-config` text, with the project folder and config file as absolute paths. */ +function printConfig(flags: PangularCliFlags & PrintConfigFlags, env: Env): string { + const named = flags.config ?? env['PANGULAR_CONFIG']; + return mcpPrintConfig({ + root: resolveCliRoot(flags, env), + ...(named ? { config: resolve(named) } : {}), + readOnly: flags.readOnly, + host: flags.host, + port: flags.port, + base: flags.base, + https: flags.https === true, + env, + }); +} + export interface PangularCliOptions { env?: Env; log?: (message: string) => void; @@ -334,7 +366,12 @@ export function createPangularCli(options: PangularCliOptions = {}) { const command = cli.commands.find((entry) => entry.name === name); const run = command?.commandAction; if (!command || !run) continue; - command.action(async (flags: PangularCliFlags) => { + if (name === 'mcp') addPrintConfigOptions(command); + command.action(async (flags: PangularCliFlags & PrintConfigFlags) => { + if (name === 'mcp' && flags.printConfig) { + log(printConfig(flags, env).trimEnd()); + return; + } prepare(name, flags); await run(flags); }); diff --git a/packages/devtools/src/component-pick.ts b/packages/devtools/src/component-pick.ts index 8849580a..d475cccc 100644 --- a/packages/devtools/src/component-pick.ts +++ b/packages/devtools/src/component-pick.ts @@ -1,12 +1,24 @@ +import { componentSource } from './component-source.ts'; import { componentHostOf, type ComponentDebugNg } from './component-tree.ts'; import { elementId } from './element-id.ts'; import { className } from './injector-tree.ts'; import { POPUP_ROOT_ID } from './panel-frame.ts'; +import type { ComponentSource } from './types.ts'; export const COMPONENT_PICK_TIMEOUT_MS = 15_000; export type ComponentPickResult = - { ok: true; id: string; name: string; tag: string } | { ok: false; error: string }; + | { + ok: true; + id: string; + name: string; + tag: string; + /** The class's file and line, when a dev build has them. */ + source?: ComponentSource; + /** Alt+click (Option+click): open `source` in the editor too. */ + openInEditor?: true; + } + | { ok: false; error: string }; const PRESS_EVENTS = ['pointerdown', 'mousedown'] as const; const RELEASE_EVENTS = ['pointerup', 'mouseup'] as const; @@ -39,7 +51,8 @@ interface PickOptions { /** * Lets the user click or tap an element on the page and resolves with the * 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. + * 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. */ export function startComponentPick(options: PickOptions): { result: Promise; @@ -80,12 +93,17 @@ export function startComponentPick(options: PickOptions): { 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.' }; }; diff --git a/packages/devtools/src/config.ts b/packages/devtools/src/config.ts index a70131f4..a1390984 100644 --- a/packages/devtools/src/config.ts +++ b/packages/devtools/src/config.ts @@ -507,6 +507,20 @@ export function actionBlockedMessage(action: PangularAction): string { return `${what} is turned off in the devtools config (actions.${action}).`; } +/** + * Server RPC functions that belong to no inspector, so turning inspectors off + * keeps them. `open-in-editor` launches the editor on the dev machine for a + * file inside the project root; it is not an agent tool. + */ +export const SHARED_RPC: readonly string[] = [ + 'build-meta', + 'claim-page', + 'report-page-visibility', + 'list-pages', + 'open-in-editor', + 'hub-dock-seen', +]; + /** * The inspector each server RPC function belongs to. A function missing here * is shared and always registered. @@ -704,7 +718,8 @@ function agentName(id: string): string { return id.replace(/^pangular:/, ''); } -function agentInspector(id: string): PangularInspector | undefined { +/** The inspector an agent tool or resource belongs to; `undefined` for shared ones. */ +export function agentInspector(id: string): PangularInspector | undefined { const name = agentName(id); return ( AGENT_INSPECTOR[name] ?? diff --git a/packages/devtools/src/devframe.ts b/packages/devtools/src/devframe.ts index 908746b2..3b13aaae 100644 --- a/packages/devtools/src/devframe.ts +++ b/packages/devtools/src/devframe.ts @@ -23,6 +23,8 @@ import { explainPipeOnPage, pipeRecordRequest, pipeRecordText } from './rpc/pipe import { createPageOwners } from './rpc/page-owners.ts'; import { trackPageSessions } from './rpc/page-sessions.ts'; import { getBuildMeta } from './rpc/build-meta.ts'; +import { createOpenInEditor, defaultLauncher } from './rpc/open-in-editor.ts'; +import { servedAnalogRoot } from './rpc/analog-scan.ts'; import { getSignals } from './rpc/get-signals.ts'; import { SIGNAL_TOOL_MAX, signalGraphText, type InspectSignalsArgs } from './rpc/signal-tools.ts'; import { createSignalPeeks } from './rpc/signal-peeks.ts'; @@ -191,6 +193,7 @@ import { } from './rpc/pages.ts'; import { LIVE_RESOURCE_NOTE, liveResourceText } from './rpc/resource-text.ts'; import { trackHubDocks } from './hub-dock-status.ts'; +import { createHubFeed } from './hub-messages.ts'; import { clip } from './text.ts'; import { setRedaction } from './forms-privacy.ts'; import { @@ -263,11 +266,13 @@ const pangular = defineDevframe({ const exposed = !definition.agent || agentAllowed({ id: definition.name }, config); my.rpc.register(exposed ? definition : { ...definition, agent: undefined }); }; + // Agent writes, NG errors and hydration mismatches, posted to the hub's messages. + const feed = createHubFeed(ctx, config); const agent = { registerTool: (tool: Parameters[0]) => { // The tier comes from AGENT_SAFETY, so the config is the one place that sets it. if (agentExposed(tool)) - ctx.agent.registerTool({ ...tool, safety: agentSafety(tool.id, config) }); + ctx.agent.registerTool(feed.wrapTool({ ...tool, safety: agentSafety(tool.id, config) })); }, registerResource: (resource: Parameters[0]) => { if (agentExposed(resource)) ctx.agent.registerResource(resource); @@ -281,6 +286,17 @@ const pangular = defineDevframe({ register(getProviders); register(getNgrxStore); register(getBuildMeta); + register({ + name: 'open-in-editor', + type: 'action', + jsonSerializable: true, + handler: createOpenInEditor({ + // The served app can live in a subfolder (an Nx app, an Analog example), + // and its scans report paths from there. + roots: () => [ctx.workspaceRoot, ctx.cwd, servedAnalogRoot(ctx.cwd)], + launch: defaultLauncher(ctx.services), + }), + }); // Tabs in the background stop reporting, so their last data stays until // they come back or close. @@ -464,6 +480,7 @@ const pangular = defineDevframe({ visibility.ttl(FORMS_PAGE_TTL_MS), ), ); + feed.ngErrors(report.pageId, 'forms', report.setupErrors ?? []); }, }); @@ -611,6 +628,7 @@ const pangular = defineDevframe({ routerPages.delete(report.pageId); applyRouter(currentRouter(routerPages)); } + feed.navigations(report.pageId, report.navigations); return { hasConfig: !!routerPages.get(report.pageId)?.config }; }, }); @@ -879,6 +897,7 @@ const pangular = defineDevframe({ reportedAt: Date.now(), }); applyHttpPages(); + feed.hydration(page.pageId, httpPages.get(page.pageId)?.hydration); if (hasPayload) { const payload = nameServerFns(sanitizePayload(page.payload)); httpPayloads.set(page.pageId, payload); @@ -3270,10 +3289,19 @@ const pangular = defineDevframe({ owners, }); } - trackHubDocks(ctx, 'pangular', config, { - cwd: ctx.cwd, - capacitor: capacitorShared, - components: componentTree, + feed.attachDocks( + trackHubDocks(ctx, 'pangular', config, { + cwd: ctx.cwd, + capacitor: capacitorShared, + components: componentTree, + }), + ); + // The panel says which dock it shows, which clears that dock's unseen count. + register({ + name: 'hub-dock-seen', + type: 'action', + jsonSerializable: true, + handler: (dockId: unknown) => feed.seen(dockId), }); }, }); diff --git a/packages/devtools/src/hub-docks.ts b/packages/devtools/src/hub-docks.ts index d6fd0016..6c2c0388 100644 --- a/packages/devtools/src/hub-docks.ts +++ b/packages/devtools/src/hub-docks.ts @@ -1,6 +1,10 @@ import type { DevframeHubContext } from '@devframes/hub/node'; -import type { DevframeViewIframe } from '@devframes/hub/types'; -import { PANGULAR_LOGO_DATA_URI } from './brand.ts'; +import type { + DevframeDockBadgeVariant, + DevframeViewGroup, + DevframeViewIframe, +} from '@devframes/hub/types'; +import { PANGULAR_LOGO_DATA_URI, PANGULAR_PRIMARY_COLOR } from './brand.ts'; import { HUB_ALL_TOOLS, HUB_VIEWS, @@ -47,6 +51,17 @@ export function dockId(view: HubView): string { /** The dock that opens the full panel, with every tab, instead of one view. */ export const ALL_TOOLS_DOCK_ID = hubDockId(HUB_ALL_TOOLS); +/** The dock group that holds every Pangular dock behind one rail button. */ +export const PANGULAR_GROUP_ID = hubDockId('group'); + +/** A dock's count of unseen items; `undefined` clears it. */ +export interface HubDockBadge { + text: string; + variant: DevframeDockBadgeVariant; + /** The worst unseen item, which the title names: `with errors` or `with warnings`. */ + severity?: 'error' | 'warning'; +} + /** The views whose dock says when the tool has nothing to show yet. */ export const STATUS_VIEWS = ['analog', 'angular-native', 'capacitor'] as const; export type StatusView = (typeof STATUS_VIEWS)[number]; @@ -62,13 +77,20 @@ export const UNAVAILABLE_TITLES: Record = { export type HubDockAvailability = Partial>; export interface HubDocks { - /** The ids of the registered docks, in rail order. */ + /** The ids of the registered docks, in rail order. The group is not one of them. */ ids: string[]; + /** The id of the group the docks belong to. */ + groupId: string; /** * Marks a tool's dock as having data or not. The hub re-sends every dock to * every client on an update, so this only updates when the state changes. */ setAvailable: (view: StatusView, available: boolean) => void; + /** + * Sets or clears the badge of a dock or of the group. Only updates the hub + * when the badge changes. + */ + setBadge: (id: string, badge: HubDockBadge | undefined) => void; } function isHub(ctx: unknown): ctx is DevframeHubContext { @@ -85,11 +107,18 @@ function withStatus( available: boolean, ): DevframeViewIframe { if (available || !isStatusView(view)) return entry; - // The title only: the hub fades a badge with its button, so a badge would - // fail the contrast check and cover the icon. + // The title only: a badge would cover the icon and read as a count. return { ...entry, title: UNAVAILABLE_TITLES[view] }; } +const SEVERITY_NOTES = { error: ', with errors', warning: ', with warnings' } as const; + +/** The dock title with its badge, as `Angular (2 new, with errors)`. */ +export function badgeTitle(title: string, badge: HubDockBadge): string { + const note = badge.severity ? SEVERITY_NOTES[badge.severity] : ''; + return `${title} (${badge.text} new${note})`; +} + export function registerHubDocks( ctx: unknown, id: string, @@ -99,6 +128,18 @@ export function registerHubDocks( if (!isHub(ctx)) return undefined; const base = ctx.frames.find((frame) => frame.id === id)?.base; if (!base) return undefined; + // One rail button for every Pangular dock. Picking it opens the member + // picked last, or All tools the first time. + const group: DevframeViewGroup = { + type: 'group', + id: PANGULAR_GROUP_ID, + title: 'Pangular', + icon: PANGULAR_LOGO_DATA_URI, + category: 'framework', + defaultChildId: ALL_TOOLS_DOCK_ID, + accentColor: PANGULAR_PRIMARY_COLOR, + }; + ctx.docks.register(group); // Lower orders come first on the rail. The full panel shares the views' // frame, and the panel switches between them in place when a dock is picked. const allTools: DevframeViewIframe = { @@ -110,11 +151,35 @@ export function registerHubDocks( defaultOrder: -1, url: base, frameId: 'pangular', + groupId: group.id, }; ctx.docks.register(allTools); const ids = [allTools.id]; - const plain = new Map(); + const plain = new Map([ + [group.id, group], + [allTools.id, allTools], + ]); + const views = new Map(); const available = new Map(); + const badges = new Map(); + const render = (entryId: string) => { + const entry = plain.get(entryId)!; + const badge = badges.get(entryId); + const view = views.get(entryId); + const shown = + view && entry.type === 'iframe' && isStatusView(view) + ? withStatus(entry, view, available.get(view) ?? true) + : entry; + if (!badge) return shown; + // The hub labels the button with the title alone, so the count goes there + // too for screen readers. + return { + ...shown, + title: badgeTitle(shown.title, badge), + badge: badge.text, + badgeVariant: badge.variant, + }; + }; DOCKS.forEach((dock, index) => { if (dock.inspector && !config.inspectors[dock.inspector]) return; const entry: DevframeViewIframe = { @@ -126,25 +191,36 @@ export function registerHubDocks( defaultOrder: index, url: `${base}?view=${dock.view}`, frameId: 'pangular', + groupId: group.id, }; - if (isStatusView(dock.view)) { - const has = initial[dock.view] ?? true; - plain.set(dock.view, entry); - available.set(dock.view, has); - ctx.docks.register(withStatus(entry, dock.view, has)); - } else { - ctx.docks.register(entry); - } + plain.set(entry.id, entry); + views.set(entry.id, dock.view); + if (isStatusView(dock.view)) available.set(dock.view, initial[dock.view] ?? true); + ctx.docks.register(render(entry.id)); ids.push(entry.id); }); return { ids, + groupId: group.id, setAvailable: (view, has) => { - const entry = plain.get(view); - if (!entry || available.get(view) === has) return; + if (!available.has(view) || available.get(view) === has) return; available.set(view, has); // A whole entry, so the plain title replaces the explaining one. - ctx.docks.update(withStatus(entry, view, has)); + ctx.docks.update(render(dockId(view))); + }, + setBadge: (entryId, badge) => { + if (!plain.has(entryId)) return; + const current = badges.get(entryId); + if ( + current?.text === badge?.text && + current?.variant === badge?.variant && + current?.severity === badge?.severity + ) { + return; + } + if (badge) badges.set(entryId, badge); + else badges.delete(entryId); + ctx.docks.update(render(entryId)); }, }; } diff --git a/packages/devtools/src/hub-messages.ts b/packages/devtools/src/hub-messages.ts new file mode 100644 index 00000000..f90a3c03 --- /dev/null +++ b/packages/devtools/src/hub-messages.ts @@ -0,0 +1,375 @@ +import type { + DevframeMessageEntryInput, + DevframeMessageLevel, + DevframeMessagesHost, +} from '@devframes/hub/types'; +import { + agentAllowed, + agentInspector, + agentSafety, + type PangularInspector, + type ResolvedPangularConfig, +} from './config.ts'; +import { ALL_TOOLS_DOCK_ID, dockId, type HubDockBadge, type HubDocks } from './hub-docks.ts'; +import { redactText } from './serialize.ts'; +import { clip } from './text.ts'; +import type { HydrationStats } from './types.ts'; + +/** The kinds of item the feed posts, as the message `category`. */ +export const HUB_MESSAGE_CATEGORIES = { + agent: 'agent', + error: 'runtime', + hydration: 'hydration', +} as const; + +/** A page stops counting as reporting after this long without a report, and its seen items are dropped. */ +export const FEED_PAGE_IDLE_MS = 10 * 60_000; +const MAX_PAGES = 200; +const MAX_KEYS_PER_PAGE = 500; +const MAX_POSTED = 500; +const MAX_PAGE_LABELS = 5; +const MAX_TITLE = 160; +const MAX_DETAIL = 600; + +/** A failed navigation as the router collector reports it. */ +export interface FeedNavigation { + id?: unknown; + startedAt?: unknown; + outcome?: unknown; + url?: unknown; + errorCode?: unknown; + reason?: unknown; +} + +type AgentTool = { id: string; handler: (args: any) => unknown }; + +export interface HubFeed { + /** Wraps an agent tool so each write it completes posts a message. */ + wrapTool: (tool: T) => T; + /** Posts the NG errors a page captured (forms setup errors and the like) that are new for it. */ + ngErrors: (pageId: string, inspector: PangularInspector, errors: readonly unknown[]) => void; + /** Posts the failed navigations a page reported that are new for it. */ + navigations: (pageId: string, navigations: readonly FeedNavigation[]) => void; + /** Posts the hydration mismatches and NG05xx messages a page reported that are new for it. */ + hydration: (pageId: string, stats: HydrationStats | null | undefined) => void; + /** Gives the feed the docks to put unseen counts on. */ + attachDocks: (docks: HubDocks | undefined) => void; + /** Clears the unseen count of a dock the panel opened; All tools clears every dock. */ + seen: (dockId: unknown) => void; +} + +/** A dock's unseen items, with how many of them are errors and warnings. */ +interface Unseen { + count: number; + errors: number; + warnings: number; +} + +interface Posted { + id: string; + count: number; + pages: string[]; +} + +function messagesOf(ctx: unknown): DevframeMessagesHost | undefined { + const messages = (ctx as { messages?: Partial } | null)?.messages; + return messages && typeof messages.add === 'function' + ? (messages as DevframeMessagesHost) + : undefined; +} + +/** A short stable id for a dedupe key (FNV-1a). */ +function hash(text: string): string { + let h = 0x811c9dc5; + for (let i = 0; i < text.length; i++) { + h ^= text.charCodeAt(i); + h = Math.imul(h, 0x01000193); + } + return (h >>> 0).toString(36); +} + +const masked = (value: unknown, max: number) => + typeof value === 'string' && value ? clip(redactText(value.slice(0, max * 4)), max) : ''; + +const pageOf = (args: unknown) => { + const page = (args as { page?: unknown } | null | undefined)?.page; + return typeof page === 'string' && page && page.length < 50 ? page : undefined; +}; + +/** The first line of a tool's answer, masked, to say what the write did. */ +function answerLine(result: unknown): string { + const record = result as { markdown?: unknown } | null | undefined; + const text = + typeof result === 'string' + ? result + : typeof record?.markdown === 'string' + ? record.markdown + : ''; + const line = text.split('\n').find((part) => part.trim()) ?? ''; + return masked(line.replace(/^#+\s*/, '').trim(), 200); +} + +/** The dock that shows an inspector's data: its own dock when it has one, else Angular. */ +function dockOf(inspector: PangularInspector | undefined): string { + if (inspector === 'ngrx' || inspector === 'analog' || inspector === 'capacitor') { + return dockId(inspector); + } + return dockId('angular'); +} + +/** + * Posts what happens in the app to the hub's messages feed (`ctx.messages`): + * agent writes, NG errors, failed navigations and hydration mismatches. An item + * that comes back is counted on its first message instead of posted again, and + * the dock that shows it carries a count of unseen items until it is opened. + * Outside a hub, or for an inspector that is off, it posts nothing. + */ +export function createHubFeed( + ctx: unknown, + config: ResolvedPangularConfig, + now: () => number = Date.now, +): HubFeed { + const messages = messagesOf(ctx); + const posted = new Map(); + const pages = new Map; at: number }>(); + const unseen = new Map(); + let docks: HubDocks | undefined; + + messages?.events?.on('messages:removed', (id) => { + for (const [key, entry] of posted) if (entry.id === id) posted.delete(key); + }); + messages?.events?.on('messages:cleared', () => posted.clear()); + + /** Whether `key` is new for the page; touches the page and forgets idle ones. */ + const firstOnPage = (pageId: string, key: string): boolean => { + const at = now(); + for (const [id, page] of pages) { + if (at - page.at > FEED_PAGE_IDLE_MS) pages.delete(id); + } + let page = pages.get(pageId); + if (!page) { + if (pages.size >= MAX_PAGES) pages.delete(pages.keys().next().value!); + page = { keys: new Set(), at }; + pages.set(pageId, page); + } + page.at = at; + if (page.keys.has(key)) return false; + if (page.keys.size >= MAX_KEYS_PER_PAGE) page.keys.delete(page.keys.values().next().value!); + page.keys.add(key); + return true; + }; + + /** Red for any unseen error or warning; the title says which of the two. */ + const badgeOf = ({ count, errors, warnings }: Unseen): HubDockBadge | undefined => { + if (count <= 0) return undefined; + const severity = errors > 0 ? 'error' : warnings > 0 ? 'warning' : undefined; + return { + text: count > 99 ? '99+' : String(count), + variant: severity ? 'danger' : 'info', + ...(severity ? { severity } : {}), + }; + }; + + const renderBadges = () => { + if (!docks) return; + const total: Unseen = { count: 0, errors: 0, warnings: 0 }; + for (const id of docks.ids) { + const item = unseen.get(id) ?? { count: 0, errors: 0, warnings: 0 }; + total.count += item.count; + total.errors += item.errors; + total.warnings += item.warnings; + docks.setBadge(id, badgeOf(item)); + } + docks.setBadge(docks.groupId, badgeOf(total)); + }; + + const bump = (dock: string, level: DevframeMessageLevel) => { + if (!docks) return; + const target = docks.ids.includes(dock) ? dock : dockId('angular'); + const item = unseen.get(target) ?? { count: 0, errors: 0, warnings: 0 }; + item.count++; + if (level === 'error') item.errors++; + else if (level === 'warn') item.warnings++; + unseen.set(target, item); + renderBadges(); + }; + + const post = ( + key: string, + dock: string, + input: { message: string; level: DevframeMessageLevel; category: string; detail?: string }, + pageId?: string, + ) => { + if (!messages) return; + let entry = posted.get(key); + if (!entry) { + if (posted.size >= MAX_POSTED) posted.delete(posted.keys().next().value!); + entry = { id: `pangular:${input.category}:${hash(key)}`, count: 0, pages: [] }; + posted.set(key, entry); + } + entry.count++; + if (pageId && !entry.pages.includes(pageId)) { + entry.pages.push(pageId); + if (entry.pages.length > MAX_PAGE_LABELS) entry.pages.shift(); + } + const pagesText = entry.pages.length ? `Page ${entry.pages.join(', ')}.` : ''; + const message: DevframeMessageEntryInput = { + id: entry.id, + message: entry.count > 1 ? `${input.message} (${entry.count} times)` : input.message, + description: [input.detail, pagesText].filter(Boolean).join('\n\n') || undefined, + level: input.level, + category: input.category, + labels: ['pangular', ...entry.pages.map((id) => `page:${id}`)], + actions: [ + { id: 'open', label: 'Open in Pangular', kind: 'activate', activate: { dockId: dock } }, + ], + // A toast for the first time an error shows up, not for each repeat. + notify: input.level === 'error' && entry.count === 1, + }; + // `add` with a known id updates the message in place. + void messages.add(message).catch(() => undefined); + bump(dock, input.level); + }; + + const agentWrite = (id: string, args: unknown, result: unknown) => { + const name = id.replace(/^pangular:/, ''); + if (agentSafety(id, config) === 'read' || !agentAllowed({ id }, config)) return; + // change-detection only writes when it starts, stops or clears a recording. + if (name === 'change-detection' && typeof (args as { record?: unknown })?.record !== 'string') { + return; + } + const page = pageOf(args); + post( + `agent:${name}:${page ?? ''}`, + dockOf(agentInspector(id)), + { + message: `Agent ran ${name}`, + level: 'info', + category: HUB_MESSAGE_CATEGORIES.agent, + detail: answerLine(result), + }, + page, + ); + }; + + return { + wrapTool: (tool) => { + if (!messages || agentSafety(tool.id, config) === 'read') return tool; + return { + ...tool, + handler: async (args: unknown) => { + const result = await tool.handler(args); + try { + agentWrite(tool.id, args, result); + } catch { + // The feed never fails a tool call. + } + return result; + }, + }; + }, + + ngErrors: (pageId, inspector, errors) => { + if (!messages || !config.inspectors[inspector]) return; + for (const raw of errors.slice(0, 50)) { + const text = masked(raw, MAX_DETAIL); + if (!text) continue; + const key = `ng:${inspector}:${text}`; + if (!firstOnPage(pageId, key)) continue; + post( + key, + dockOf(inspector), + { + message: clip(text.split('\n')[0]!, MAX_TITLE), + level: 'error', + category: HUB_MESSAGE_CATEGORIES.error, + detail: text, + }, + pageId, + ); + } + }, + + navigations: (pageId, navigations) => { + if (!messages || !config.inspectors.router) return; + for (const nav of navigations.slice(-100)) { + if (nav?.outcome !== 'failed') continue; + if (!firstOnPage(pageId, `nav:${String(nav.id)}:${String(nav.startedAt)}`)) continue; + const code = typeof nav.errorCode === 'string' ? clip(nav.errorCode, 20) : ''; + const reason = masked(nav.reason, MAX_TITLE); + const url = masked(nav.url, 300); + post( + `router:${code}:${reason}`, + dockOf('router'), + { + message: clip( + ['Navigation failed', code && `(${code})`, reason && `: ${reason}`] + .filter(Boolean) + .join(' ') + .replace(' :', ':'), + MAX_TITLE, + ), + level: 'error', + category: HUB_MESSAGE_CATEGORIES.error, + detail: url ? `URL: ${url}` : undefined, + }, + pageId, + ); + } + }, + + hydration: (pageId, stats) => { + if (!messages || !config.inspectors.http || !stats) return; + for (const mismatch of stats.mismatches.slice(0, 20)) { + const component = masked(mismatch.component, 200); + const expected = masked(mismatch.expected, MAX_DETAIL); + const actual = masked(mismatch.actual, MAX_DETAIL); + const key = `mismatch:${component}|${expected}|${actual}`; + if (!firstOnPage(pageId, key)) continue; + post( + key, + dockOf('http'), + { + message: `Hydration mismatch at <${component}>`, + level: 'error', + category: HUB_MESSAGE_CATEGORIES.hydration, + detail: [expected && `Expected: ${expected}`, actual && `Actual: ${actual}`] + .filter(Boolean) + .join('\n'), + }, + pageId, + ); + } + for (const raw of stats.warnings.slice(0, 50)) { + const text = masked(raw, MAX_DETAIL); + if (!text) continue; + const key = `hydration-warning:${text}`; + if (!firstOnPage(pageId, key)) continue; + post( + key, + dockOf('http'), + { + message: clip(text.split('\n')[0]!, MAX_TITLE), + level: 'warn', + category: HUB_MESSAGE_CATEGORIES.hydration, + detail: text, + }, + pageId, + ); + } + }, + + attachDocks: (next) => { + docks = next; + renderBadges(); + }, + + seen: (id) => { + if (!docks || typeof id !== 'string') return; + if (id === ALL_TOOLS_DOCK_ID || id === docks.groupId) unseen.clear(); + else if (docks.ids.includes(id)) unseen.delete(id); + else return; + renderBadges(); + }, + }; +} diff --git a/packages/devtools/src/hub.ts b/packages/devtools/src/hub.ts index 0cb1ecc1..f878b35b 100644 --- a/packages/devtools/src/hub.ts +++ b/packages/devtools/src/hub.ts @@ -19,7 +19,7 @@ import { PANGULAR_MCP_TOKEN_ENV, loadMcpToken } from './mcp-token.ts'; import { authTokensFrom, isAuthTokens, type PangularAuthTokens } from './auth-tokens.ts'; import { PANGULAR_EXTENSION_ORIGINS, isAllowedExtensionOrigin } from './extension-origin.ts'; import { pickPangularConfig, type PangularConfig } from './config.ts'; -import { PANGULAR_LOGO_DATA_URI } from './brand.ts'; +import { PANGULAR_LOGO_DATA_URI, PANGULAR_PRIMARY_COLOR } from './brand.ts'; import { createSsrMiddleware } from './ssr-middleware.ts'; import { releaseServerState } from './server-state.ts'; import pkg from '../package.json' with { type: 'json' }; @@ -67,7 +67,7 @@ function hubUi() { branding: { productName: 'Pangular Inspector', logo: PANGULAR_LOGO_DATA_URI, - primaryColor: '#f5a524', + primaryColor: PANGULAR_PRIMARY_COLOR, }, }); const dir = hubUiClientDir(); diff --git a/packages/devtools/src/mcp-print-config.ts b/packages/devtools/src/mcp-print-config.ts new file mode 100644 index 00000000..42123fba --- /dev/null +++ b/packages/devtools/src/mcp-print-config.ts @@ -0,0 +1,175 @@ +// `pangular mcp --print-config`: the MCP client config for this project, ready +// to paste. It names the token file and the variable that holds the token, +// never the token itself. +import { PANGULAR_MCP_TOKEN_ENV, mcpTokenFile } from './mcp-token.ts'; + +/** The package name `npx` runs for the stdio server. */ +const PACKAGE = '@pangular-inspector/devtools'; +/** The stdio server's name in the client config. */ +const SERVER_NAME = 'pangular'; +/** + * The HTTP server's name. It differs from the stdio one: Claude Code prefers a + * local entry over a project one of the same name, so a shared name would hide + * the HTTP server whenever both are added. + */ +const HTTP_SERVER_NAME = 'pangular-live'; +const DEFAULT_HOST = 'localhost'; +const DEFAULT_PORT = 9999; + +export interface McpPrintConfigOptions { + /** The absolute project folder the stdio server scans. */ + root: string; + /** An absolute config file to pass to the stdio server. */ + config?: string; + readOnly?: boolean; + /** Host and port of the server that runs the app. Default: the standalone CLI on localhost:9999. */ + host?: string; + port?: number | string; + /** Whether the server is behind TLS, so the endpoint is `https://`. */ + https?: boolean; + /** + * The hub base, such as `/__devframes/`. Without it, the endpoint is the + * standalone CLI's `/__mcp`, which asks for no token. + */ + base?: string; + env?: Record; +} + +/** Quotes `value` for a POSIX shell when it holds anything but plain path characters. */ +export function shellQuote(value: string): string { + return /^[\w@%+=:,./-]+$/.test(value) ? value : `'${value.replace(/'/g, `'\\''`)}'`; +} + +function normalizeBase(base: string): string { + return `/${base}/`.replace(/\/{2,}/g, '/'); +} + +/** A host a client can reach: a wildcard bind address becomes `localhost`. */ +function clientHost(host: string): string { + const bare = host.replace(/^\[|\]$/g, ''); + if (bare === '0.0.0.0' || bare === '::' || bare === '') return DEFAULT_HOST; + return bare.includes(':') ? `[${bare}]` : bare; +} + +/** Whether `host` (as `clientHost` returns it) names this machine. */ +export function isLoopbackHost(host: string): boolean { + const bare = host.replace(/^\[|\]$/g, '').toLowerCase(); + return ( + bare === 'localhost' || + bare.endsWith('.localhost') || + /^127(\.\d{1,3}){3}$/.test(bare) || + bare === '::1' || + bare === '0:0:0:0:0:0:0:1' || + /^::ffff:127(\.\d{1,3}){3}$/.test(bare) + ); +} + +/** The HTTP endpoint, its `Origin` and whether it asks for the bearer token. */ +export function mcpEndpoint( + options: Pick, +) { + const scheme = options.https ? 'https' : 'http'; + const origin = `${scheme}://${clientHost(options.host ?? DEFAULT_HOST)}:${options.port ?? DEFAULT_PORT}`; + const hub = options.base !== undefined && normalizeBase(options.base) !== '/'; + const base = hub ? normalizeBase(options.base as string) : '/'; + return { url: `${origin}${base}__mcp`, origin, token: hub }; +} + +function json(value: unknown): string { + return JSON.stringify(value, null, 2); +} + +/** The text `pangular mcp --print-config` prints. */ +export function mcpPrintConfig(options: McpPrintConfigOptions): string { + const args = [ + PACKAGE, + 'mcp', + '--root', + options.root, + ...(options.config ? ['--config', options.config] : []), + ...(options.readOnly ? ['--read-only'] : []), + ]; + const { url, origin, token } = mcpEndpoint(options); + const clearText = + token && !options.https && !isLoopbackHost(clientHost(options.host ?? DEFAULT_HOST)); + const bearer = (variable: string) => `Bearer ${variable}`; + const headers = (variable: string) => ({ + ...(token ? { Authorization: bearer(variable) } : {}), + Origin: origin, + }); + const claudeHeaders = [ + `--header ${shellQuote(`Origin: ${origin}`)}`, + ...(token + ? [`--header ${shellQuote(`Authorization: ${bearer(`\${${PANGULAR_MCP_TOKEN_ENV}}`)}`)}`] + : []), + ]; + + const lines = [ + 'Pangular Inspector MCP config', + '', + '== stdio: source scans only, no page connects ==', + '', + 'Claude Code (run in the project folder):', + ` claude mcp add ${SERVER_NAME} -- npx ${args.map(shellQuote).join(' ')}`, + '', + 'Cursor (.cursor/mcp.json):', + json({ mcpServers: { [SERVER_NAME]: { command: 'npx', args } } }), + '', + 'VS Code (.vscode/mcp.json):', + json({ servers: { [SERVER_NAME]: { type: 'stdio', command: 'npx', args } } }), + '', + `== HTTP: live pages, at ${url} ==`, + '', + ...(clearText + ? [ + `Warning: ${origin} is not a loopback address and the URL is http, so the MCP token travels in clear text on the network.`, + 'Serve the hub over TLS and pass --https, or keep it to a network you trust.', + '', + ] + : []), + 'Start the server that runs your app and open the app in a browser first.', + '', + 'Claude Code (writes .mcp.json in the project folder):', + ` claude mcp add --transport http --scope project ${HTTP_SERVER_NAME} ${url} ${claudeHeaders.join(' ')}`, + '', + 'Cursor (.cursor/mcp.json):', + json({ + mcpServers: { + [HTTP_SERVER_NAME]: { url, headers: headers(`\${env:${PANGULAR_MCP_TOKEN_ENV}}`) }, + }, + }), + '', + 'VS Code (.vscode/mcp.json):', + json({ + ...(token + ? { + inputs: [ + { + type: 'promptString', + id: 'pangular-token', + description: 'Pangular Inspector MCP token', + password: true, + }, + ], + } + : {}), + servers: { + [HTTP_SERVER_NAME]: { type: 'http', url, headers: headers('${input:pangular-token}') }, + }, + }), + '', + ]; + if (token) { + lines.push( + `The hub keeps its MCP token in ${mcpTokenFile(options.env)}. Claude Code and Cursor read it from ${PANGULAR_MCP_TOKEN_ENV}:`, + ` export ${PANGULAR_MCP_TOKEN_ENV}="$(cat ${shellQuote(mcpTokenFile(options.env))})"`, + `If the server sets ${PANGULAR_MCP_TOKEN_ENV} itself, use that value. VS Code asks for the token once.`, + 'Leave the Authorization header out when the hub runs with auth: false.', + ); + } else { + lines.push( + 'The standalone CLI asks for no token. For the Express hub or the Vite plugin, pass --base /__devframes/ and their port.', + ); + } + return `${lines.join('\n')}\n`; +} diff --git a/packages/devtools/src/overlay-nativescript.ts b/packages/devtools/src/overlay-nativescript.ts index 94ebe2bb..17fad8cb 100644 --- a/packages/devtools/src/overlay-nativescript.ts +++ b/packages/devtools/src/overlay-nativescript.ts @@ -193,6 +193,7 @@ async function startSession( // Before any report, so the server hands this connection the page at once. await claimPageOnServer(my.rpc, pageId, pageKey); const config = configFromConnection(rpc.connectionMeta); + const on = config.inspectors; const tickMs = intervalMs ?? config.limits.refreshMs; setRedaction(config.redaction); const title = `NativeScript (${isAndroid ? 'Android' : 'iOS'})`; @@ -238,7 +239,7 @@ async function startSession( Date.now, (value, name) => graphValue(name, value), ); - const restoreSignalHook = await installSignalWriteHook(signalHistory.onWrite); + const restoreSignalHook = on.signals ? await installSignalWriteHook(signalHistory.onWrite) : null; let signalTarget: SignalTarget = null; let lastSignalKey = ''; @@ -316,22 +317,24 @@ async function startSession( } } - const ngrx = attachNgrx(my, pageId, angularDebugApi, config.limits.changeLog, { - tree, - describe: () => ({ url: '/', title }), - }); + const ngrx = on.ngrx + ? attachNgrx(my, pageId, angularDebugApi, config.limits.changeLog, { + tree, + describe: () => ({ url: '/', title }), + }) + : null; - const pipes = config.inspectors.pipes + const pipes = on.pipes ? attachPipes(my, pageId, () => angularDebugApi() as NgDebugApi | undefined, { tree }) : null; const collectors = [ - pushTree, - pushSignalGraph, - pushInjectorTree, - () => ngrx.push(), - ...(pipes ? [async () => pipes.push()] : []), - ]; + on.components && pushTree, + on.signals && pushSignalGraph, + on.injectors && pushInjectorTree, + ngrx && (() => ngrx.push()), + pipes && (async () => pipes.push()), + ].filter((collect) => typeof collect === 'function'); const report = async () => { for (const collect of collectors) { await collect().catch((error: unknown) => console.warn('[pangular] report failed', error)); @@ -399,19 +402,22 @@ async function startSession( clearInterval(interval); clearFlash(); restoreSignalHook?.(); - ngrx.stop(); + ngrx?.stop(); pipes?.stop(); if (!forget) { rpc.close?.(); return; } - void Promise.allSettled([ - my.rpc.call('forget-component-page', pageId), - my.rpc.call('forget-signal-page', pageId), - my.rpc.call('forget-injector-page', pageId), - my.rpc.call('forget-ngrx-page', pageId), - ...(pipes ? [my.rpc.call('forget-pipes-page', pageId)] : []), - ]).finally(() => rpc.close?.()); + const pages = [ + on.components && 'forget-component-page', + on.signals && 'forget-signal-page', + on.injectors && 'forget-injector-page', + on.ngrx && 'forget-ngrx-page', + on.pipes && 'forget-pipes-page', + ].filter((name): name is string => typeof name === 'string'); + void Promise.allSettled(pages.map((name) => my.rpc.call(name, pageId))).finally(() => + rpc.close?.(), + ); }; } diff --git a/packages/devtools/src/overlay.ts b/packages/devtools/src/overlay.ts index f3077d11..1c04676e 100644 --- a/packages/devtools/src/overlay.ts +++ b/packages/devtools/src/overlay.ts @@ -754,6 +754,9 @@ async function startOverlay(options: OverlayOptions, own: (cleanup: () => void) if (result.ok) { componentTarget = result.id; void pushTree(true).catch(() => {}); + if (result.openInEditor && result.source) { + void my.rpc.call('open-in-editor', result.source).catch(() => {}); + } } void my.rpc.call('component-pick-result', { requestId, pageId, result }).catch(() => {}); }); diff --git a/packages/devtools/src/rpc/__tests__/open-in-editor.test.ts b/packages/devtools/src/rpc/__tests__/open-in-editor.test.ts new file mode 100644 index 00000000..e4138768 --- /dev/null +++ b/packages/devtools/src/rpc/__tests__/open-in-editor.test.ts @@ -0,0 +1,145 @@ +import { mkdirSync, symlinkSync, writeFileSync } from 'node:fs'; +import { realpathSync } from 'node:fs'; +import { join } from 'node:path'; +import { describe, expect, it, vi } from 'vitest'; +import { + OPEN_SERVICE_PACKAGE, + createOpenInEditor, + defaultLauncher, + resolveEditorFile, +} from '../open-in-editor.ts'; +import { fixtureDir } from './fixture-dir.ts'; + +function project() { + const base = realpathSync(fixtureDir('pangular-open-')); + const root = join(base, 'app'); + const outside = join(base, 'secret'); + mkdirSync(join(root, 'src/app'), { recursive: true }); + mkdirSync(outside); + writeFileSync(join(root, 'src/app/app.ts'), 'export class App {}\n'); + writeFileSync(join(outside, 'keys.txt'), 'secret\n'); + return { base, root, outside, app: join(root, 'src/app/app.ts') }; +} + +describe('resolveEditorFile', () => { + it('resolves a project-relative, an absolute and a root-relative path', async () => { + const { root, app } = project(); + expect(await resolveEditorFile('src/app/app.ts', [root])).toEqual({ ok: true, file: app }); + expect(await resolveEditorFile(app, [root])).toEqual({ ok: true, file: app }); + expect(await resolveEditorFile('/src/app/app.ts', [root])).toEqual({ ok: true, file: app }); + }); + + it('refuses a path outside the root, absolute or through ..', async () => { + const { root, outside } = project(); + for (const file of [ + join(outside, 'keys.txt'), + '../secret/keys.txt', + 'src/../../secret/keys.txt', + ]) { + expect(await resolveEditorFile(file, [root]), file).toEqual({ + ok: false, + error: `${file} is outside the project root.`, + }); + } + }); + + it('refuses a symlink inside the root that points outside it', async () => { + const { root, outside } = project(); + symlinkSync(join(outside, 'keys.txt'), join(root, 'src/keys.ts')); + symlinkSync(outside, join(root, 'linked')); + expect(await resolveEditorFile('src/keys.ts', [root])).toMatchObject({ + ok: false, + error: expect.stringMatching(/outside the project root/), + }); + expect(await resolveEditorFile('linked/keys.txt', [root])).toMatchObject({ + ok: false, + error: expect.stringMatching(/outside the project root/), + }); + }); + + it('follows a symlink that stays inside the root', async () => { + const { root, app } = project(); + symlinkSync(app, join(root, 'alias.ts')); + expect(await resolveEditorFile('alias.ts', [root])).toEqual({ ok: true, file: app }); + }); + + it('refuses a missing file, a directory and an empty or odd path', async () => { + const { root } = project(); + expect(await resolveEditorFile('src/app/gone.ts', [root])).toEqual({ + ok: false, + error: 'src/app/gone.ts was not found.', + }); + expect(await resolveEditorFile('src/app', [root])).toEqual({ + ok: false, + error: 'src/app is not a file.', + }); + for (const file of ['', ' ', 'src/\0app.ts', 42, null, 'a'.repeat(5000)]) { + expect(await resolveEditorFile(file, [root])).toEqual({ + ok: false, + error: 'No file to open.', + }); + } + }); + + it('accepts a file under any of several roots', async () => { + const { root, outside } = project(); + expect(await resolveEditorFile('keys.txt', [root, outside])).toEqual({ + ok: true, + file: join(outside, 'keys.txt'), + }); + }); +}); + +describe('createOpenInEditor', () => { + it('launches the editor at the line and column of a file inside the root', async () => { + const { root, app } = project(); + const launch = vi.fn(); + const open = createOpenInEditor({ roots: () => [root], launch }); + expect(await open({ file: 'src/app/app.ts', line: 3, column: 7 })).toEqual({ + ok: true, + file: app, + }); + expect(launch).toHaveBeenCalledWith(app, 3, 7); + }); + + it('drops a line or column that is not a positive integer', async () => { + const { root, app } = project(); + const launch = vi.fn(); + const open = createOpenInEditor({ roots: () => [root], launch }); + await open({ file: 'src/app/app.ts', line: '3; rm -rf /', column: -1 }); + await open({ file: 'src/app/app.ts', line: 1.5 }); + expect(launch.mock.calls).toEqual([ + [app, undefined, undefined], + [app, undefined, undefined], + ]); + }); + + it('never launches for a refused path', async () => { + const { root, outside } = project(); + const launch = vi.fn(); + const open = createOpenInEditor({ roots: () => [root], launch }); + expect(await open({ file: join(outside, 'keys.txt') })).toMatchObject({ ok: false }); + expect(await open(null)).toMatchObject({ ok: false }); + expect(launch).not.toHaveBeenCalled(); + }); + + it('reports a launcher that throws', async () => { + const { root } = project(); + const open = createOpenInEditor({ + roots: () => [root], + launch: () => { + throw new Error('no editor'); + }, + }); + expect(await open({ file: 'src/app/app.ts' })).toEqual({ ok: false, error: 'no editor' }); + }); +}); + +describe('defaultLauncher', () => { + it('goes through the open wire service when the host installed it', async () => { + const openInEditor = vi.fn(async () => {}); + const get = vi.fn((id: string) => (id === OPEN_SERVICE_PACKAGE ? { openInEditor } : undefined)); + await defaultLauncher({ get })('/w/src/app.ts', 4, 2); + expect(openInEditor).toHaveBeenCalledWith({ path: '/w/src/app.ts', line: 4, column: 2 }); + }); +}); diff --git a/packages/devtools/src/rpc/open-in-editor.ts b/packages/devtools/src/rpc/open-in-editor.ts new file mode 100644 index 00000000..0f18eb45 --- /dev/null +++ b/packages/devtools/src/rpc/open-in-editor.ts @@ -0,0 +1,136 @@ +import { realpath, stat } from 'node:fs/promises'; +import { isAbsolute, join, relative, resolve } from 'node:path'; + +/** The package of the devframe wire service that opens files, when the host installs it. */ +export const OPEN_SERVICE_PACKAGE = '@devframes/service-open'; + +export interface OpenInEditorRequest { + file?: unknown; + line?: unknown; + column?: unknown; +} + +export type OpenInEditorResult = { ok: true; file: string } | { ok: false; error: string }; + +/** Opens `target` (`file`, `file:line` or `file:line:column`) in the developer's editor. */ +export type EditorLauncher = (path: string, line?: number, column?: number) => void | Promise; + +const MAX_PATH = 4096; +const MAX_LINE = 10_000_000; + +function within(root: string, path: string): boolean { + const rel = relative(root, path); + return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel)); +} + +function position(value: unknown): number | undefined { + return typeof value === 'number' && Number.isInteger(value) && value >= 1 && value <= MAX_LINE + ? value + : undefined; +} + +async function canonical(path: string): Promise { + try { + return await realpath(path); + } catch { + return null; + } +} + +/** + * Where `file` could be under `roots`: itself when absolute, then under each + * root, so a project-relative path (Angular's `debugInfo.filePath`) and a + * root-relative one (`/src/app/app.ts` from a dev server) both resolve. + */ +function candidates(file: string, roots: readonly string[]): string[] { + const list = isAbsolute(file) + ? [resolve(file), ...roots.map((root) => resolve(join(root, file)))] + : roots.map((root) => resolve(root, file)); + return [...new Set(list)]; +} + +/** + * Resolves `file` to a regular file inside one of `roots`, or says why not. + * Refuses paths that leave every root, by `..`, by an absolute path or + * through a symlink, and paths that are missing or are not files. + */ +export async function resolveEditorFile( + file: unknown, + roots: readonly string[], +): Promise { + if (typeof file !== 'string' || !file.trim() || file.length > MAX_PATH || file.includes('\0')) { + return { ok: false, error: 'No file to open.' }; + } + const allowed = [...new Set(roots.map((root) => resolve(root)))]; + const real = (await Promise.all(allowed.map(canonical))).filter( + (root): root is string => root !== null, + ); + let inside = false; + let notFile = false; + for (const path of candidates(file.trim(), allowed)) { + if (!allowed.some((root) => within(root, path))) continue; + inside = true; + const target = await canonical(path); + if (!target) continue; + if (!real.some((root) => within(root, target))) { + return { ok: false, error: `${file} is outside the project root.` }; + } + const info = await stat(target).catch(() => null); + if (!info?.isFile()) { + notFile = true; + continue; + } + return { ok: true, file: target }; + } + // An absolute path outside every root is refused as such, even when the + // root-relative reading of it is merely missing. + const literal = file.trim(); + const absoluteOutside = + isAbsolute(literal) && !allowed.some((root) => within(root, resolve(literal))); + if (!inside || absoluteOutside) { + return { ok: false, error: `${file} is outside the project root.` }; + } + return { ok: false, error: notFile ? `${file} is not a file.` : `${file} was not found.` }; +} + +/** The handler of the `open-in-editor` RPC: checks the path, then launches the editor. */ +export function createOpenInEditor(options: { + roots: () => readonly string[]; + launch: EditorLauncher; +}) { + return async (request: OpenInEditorRequest | null): Promise => { + const result = await resolveEditorFile(request?.file, options.roots()); + if (!result.ok) return result; + try { + await options.launch(result.file, position(request?.line), position(request?.column)); + } catch (error) { + return { + ok: false, + error: error instanceof Error ? error.message : 'Could not open the editor.', + }; + } + return result; + }; +} + +interface OpenServiceApi { + openInEditor: (input: { path: string; line?: number; column?: number }) => Promise; +} + +/** + * Launches through the `@devframes/service-open` wire service when the host + * installed it, so its editor setting applies, and otherwise through + * devframe's `launch-editor`, which picks the editor from `LAUNCH_EDITOR`, + * then a running editor, then `VISUAL` or `EDITOR`. + */ +export function defaultLauncher(services: { get(id: string): unknown }): EditorLauncher { + return async (path, line, column) => { + const service = services.get(OPEN_SERVICE_PACKAGE) as OpenServiceApi | undefined; + if (typeof service?.openInEditor === 'function') { + await service.openInEditor({ path, line, column }); + return; + } + const { launchEditor } = await import('devframe/utils/launch-editor'); + launchEditor(line ? `${path}:${line}${column ? `:${column}` : ''}` : path); + }; +}