diff --git a/app/src/__tests__/cd-recording-status.test.ts b/app/src/__tests__/cd-recording-status.test.ts
index 05237b49..bb399576 100644
--- a/app/src/__tests__/cd-recording-status.test.ts
+++ b/app/src/__tests__/cd-recording-status.test.ts
@@ -110,4 +110,19 @@ describe('CdRecording status', () => {
expect(live()).toBe('Could not reach the page.');
expect(live()).not.toContain('Cleared');
});
+
+ it('notes the classes and instances a recording checked past its caps', async () => {
+ expect(host().querySelectorAll('.note')).toHaveLength(0);
+ fixture.componentRef.setInput('page', {
+ ...page(false, 1),
+ droppedClasses: 905,
+ droppedHosts: 1,
+ });
+ await fixture.whenStable();
+ const notes = [...host().querySelectorAll('.note')].map((n) => n.textContent!.trim());
+ expect(notes).toEqual([
+ '905 more component classes were checked than a recording keeps, so they are left out of these totals.',
+ '1 component instance was checked past the 2000 a recording counts, so its tree row shows no check count.',
+ ]);
+ });
});
diff --git a/app/src/__tests__/component-tree-defer.test.ts b/app/src/__tests__/component-tree-defer.test.ts
index 0d22e685..293f9147 100644
--- a/app/src/__tests__/component-tree-defer.test.ts
+++ b/app/src/__tests__/component-tree-defer.test.ts
@@ -86,4 +86,38 @@ describe('defer blocks', () => {
await fixture.whenStable();
expect(row.textContent).toContain('Unknown component');
});
+
+ it('shows a + on the count when the page has more blocks than it reported', async () => {
+ const block = (id: string) => ({
+ id,
+ state: 'complete',
+ hydration: 'not-configured',
+ triggers: [],
+ rootIds: [],
+ });
+ const page = (deferTruncated?: boolean) => ({
+ pageId: 'p1',
+ roots: [{ id: 'c1', name: 'App', tag: 'app-root', children: [] }],
+ count: 1,
+ detail: null,
+ reportedAt: 1000,
+ deferBlocks: [block('d1'), block('d2')],
+ ...(deferTruncated ? { deferTruncated } : {}),
+ });
+ const pill = async (value: unknown) => {
+ const fixture = TestBed.createComponent(ComponentTree);
+ fixture.componentRef.setInput('rpc', client({ p1: value }));
+ for (let i = 0; i < 3; i++) {
+ await new Promise((resolve) => setTimeout(resolve));
+ await fixture.whenStable();
+ }
+ const text = (fixture.nativeElement as HTMLElement)
+ .querySelector('#ct-defer-title .pill')!
+ .textContent!.trim();
+ fixture.destroy();
+ return text;
+ };
+ expect(await pill(page())).toBe('2');
+ expect(await pill(page(true))).toBe('2+');
+ });
});
diff --git a/app/src/pages/cd-recording.ts b/app/src/pages/cd-recording.ts
index 287f12e1..cb5e028b 100644
--- a/app/src/pages/cd-recording.ts
+++ b/app/src/pages/cd-recording.ts
@@ -45,6 +45,9 @@ const SHOWN_CYCLES = 30;
what="cycles"
limit="cdCycles"
/>
+ @for (note of capNotes(); track note) {
+
{{ note }}
+ }
@if (slowest().length) {
@@ -253,6 +256,23 @@ export class CdRecording {
[...(this.page()?.components ?? [])].sort((a, b) => b.ms - a.ms).slice(0, SHOWN),
);
readonly latest = computed(() => this.cycles().slice(-SHOWN_CYCLES).reverse());
+ /** Says when the recording checked more classes or instances than it keeps. */
+ readonly capNotes = computed(() => {
+ const classes = this.page()?.droppedClasses ?? 0;
+ const hosts = this.page()?.droppedHosts ?? 0;
+ const notes: string[] = [];
+ if (classes > 0) {
+ notes.push(
+ `${classes} more component ${classes === 1 ? 'class was' : 'classes were'} checked than a recording keeps, so ${classes === 1 ? 'it is' : 'they are'} left out of these totals.`,
+ );
+ }
+ if (hosts > 0) {
+ notes.push(
+ `${hosts} component ${hosts === 1 ? 'instance was' : 'instances were'} checked past the 2000 a recording counts, so ${hosts === 1 ? 'its tree row shows' : 'their tree rows show'} no check count.`,
+ );
+ }
+ return notes;
+ });
readonly status = computed(() => {
if (this.message()) return this.message();
const count = this.cycles().length;
diff --git a/app/src/pages/component-tree.ts b/app/src/pages/component-tree.ts
index 8d8c1511..98eaca29 100644
--- a/app/src/pages/component-tree.ts
+++ b/app/src/pages/component-tree.ts
@@ -101,6 +101,8 @@ interface Page {
title?: string;
platform?: string;
deferBlocks?: DeferBlock[];
+ /** The page has more defer blocks than the ones in `deferBlocks`. */
+ deferTruncated?: boolean;
roots: LiveNode[];
count: number;
truncated?: boolean;
@@ -516,7 +518,8 @@ function bare(name: string): string {
@if (deferBlocks().length) {
- Defer blocks {{ deferBlocks().length }}
+ Defer blocks
+ {{ deferCount() }}
@for (block of deferBlocks(); track block.id) {
@@ -1469,6 +1472,10 @@ export class ComponentTree {
private readonly filtered = computed(() => filterTree(this.page()?.roots ?? [], this.query()));
readonly deferBlocks = computed(() => this.page()?.deferBlocks ?? []);
+ /** The block count, with a `+` when the page has more blocks than it reported. */
+ readonly deferCount = computed(
+ () => `${this.deferBlocks().length}${this.page()?.deferTruncated ? '+' : ''}`,
+ );
readonly countLabel = computed(() =>
countText(
diff --git a/app/src/pages/di-inspector.ts b/app/src/pages/di-inspector.ts
index 56f73650..a04248d6 100644
--- a/app/src/pages/di-inspector.ts
+++ b/app/src/pages/di-inspector.ts
@@ -212,9 +212,10 @@ function isTree(value: unknown): value is InjectorNode[] {
- This page has more than 2000 element injectors.
- Only the first 2000 are shown, so a lookup path or a provider can point to one that is
- not listed.
+ The page reported only part of its injector tree.
+ It keeps at most 2000 element injectors and 2500 in all, and leaves out injectors nested
+ more than 1000 levels deep, so a lookup path or a provider can point to one that is not
+ listed.
}
diff --git a/app/src/pages/route-setup.ts b/app/src/pages/route-setup.ts
index bf0c3b50..d66becd6 100644
--- a/app/src/pages/route-setup.ts
+++ b/app/src/pages/route-setup.ts
@@ -7,8 +7,9 @@ import { SHARED_STYLES, type RouterPage } from './router-types';
@if (page().setup; as setup) {
@if (setup.mode === 'events-only') {
- Events-only mode: this build has no debug utils (production build or unusual setup), so
- the route config, lint and actions are limited.
+ Events-only mode: this build lacks the injector provider debug helper, so setup detection
+ is limited. The preloader, the scroller and the router providers can't be found, and the
+ features and options below can show defaults.
}
diff --git a/apps/docs/src/content/agents/resources.md b/apps/docs/src/content/agents/resources.md
index 3b25833e..0b5b52ca 100644
--- a/apps/docs/src/content/agents/resources.md
+++ b/apps/docs/src/content/agents/resources.md
@@ -60,7 +60,7 @@ The signal graph of each page, under `pages[pageId]`. `graph` is the latest one.
### injector-tree
-The injector hierarchy the page last reported, with the providers at each level. Each page is under `pages[pageId]`. `roots` and `environment` are the latest. Element injectors list what their components and directives inject in `dependencies`. Environment injectors list what the services they already created inject, with `from` naming the service or `InjectionToken`. `zone` is the change detection mode: `zoneless`, `zone` (zone.js) or `zone-unused` (zoneless, with zone.js still loaded). `truncated` is `true` when the page has more than 2000 element injectors and reported only the first 2000, or more than 2500 injectors in all. The server drops malformed nodes and clips long names.
+The injector hierarchy the page last reported, with the providers at each level. Each page is under `pages[pageId]`. `roots` and `environment` are the latest. Element injectors list what their components and directives inject in `dependencies`. Environment injectors list what the services they already created inject, with `from` naming the service or `InjectionToken`. `zone` is the change detection mode: `zoneless`, `zone` (zone.js) or `zone-unused` (zoneless, with zone.js still loaded). `truncated` is `true` when the tree was cut: it keeps at most 2000 element injectors and 2500 injectors in all, and leaves out injectors nested more than 1000 levels deep. The server drops malformed nodes and clips long names.
### ngrx-store
diff --git a/apps/docs/src/content/agents/tools.md b/apps/docs/src/content/agents/tools.md
index 5ea8518c..43a135f1 100644
--- a/apps/docs/src/content/agents/tools.md
+++ b/apps/docs/src/content/agents/tools.md
@@ -134,7 +134,7 @@ The `@defer` blocks of each page: the component that holds each one, its state,
Without a development build, the page has no util to read defer blocks, and the answer says so.
-Each page lists at most 50 blocks in the table and 50 under **Needs attention**, with a note on how many more are not shown. The whole answer stops at 20,000 characters. If several tabs report, pass `page` to read one. The **Defer blocks** list on the [Components](../inspectors/components.md#defer-blocks) page has every block.
+Each page lists at most 50 blocks in the table and 50 under **Needs attention**, with a note on how many more are not shown. The whole answer stops at 20,000 characters. If several tabs report, pass `page` to read one. The **Defer blocks** list on the [Components](../inspectors/components.md#defer-blocks) page has every block the page reported. A page reports its first 500 blocks. When it has more, the answer says so.
### change-detection Action
@@ -145,7 +145,7 @@ Change detection cycles recorded with Angular's profiler: the slowest components
| `record` | no | `start` starts a fresh recording on a page that is not recording and leaves a running one as it is, `stop` stops it and keeps the cycles, `clear` empties it. Leave out to read. |
| `limit` | no | Rows per list. Default 10, at most 50. |
-Without `page`, it reads the page that is recording, and `record` goes to every connected page. A `page` that names no connected tab gets the list of connected tabs. A connected tab that has not recorded yet gets a hint to start a recording there. The answer starts with the change detection mode of the page it reports on: zoneless, zone.js, or zoneless with zone.js still loaded. Recording is off until the panel or this tool starts it. Call it with `record: "start"`, use the app, then call it again without `record`. With `agent.readOnly`, the tool has no `record` argument and is marked read-only, so start the recording from the panel. When older cycles were dropped at [`limits.cdCycles`](../getting-started/configuration.md#limits), the answer says how many.
+Without `page`, it reads the page that is recording, and `record` goes to every connected page. A `page` that names no connected tab gets the list of connected tabs. A connected tab that has not recorded yet gets a hint to start a recording there. The answer starts with the change detection mode of the page it reports on: zoneless, zone.js, or zoneless with zone.js still loaded. Recording is off until the panel or this tool starts it. Call it with `record: "start"`, use the app, then call it again without `record`. With `agent.readOnly`, the tool has no `record` argument and is marked read-only, so start the recording from the panel. When older cycles were dropped at [`limits.cdCycles`](../getting-started/configuration.md#limits), the answer says how many. A recording lists at most 100 component classes and counts checks for up to 2000 instances. When it checked more, the answer says how many were left out.
### inspect-signals
@@ -187,7 +187,7 @@ The injectors a page reported. Element injectors list what each component inject
A `selector` that names an element injector returns it with its lookup path resolved to names and provided tokens. One that names an environment injector, in any case, returns that injector's providers, what the services it already created inject, and its parent injectors. When nothing matches, the answer lists the tags and environment injector names on the page to retry with.
-Without `selector` or `token`, the answer is the whole tree and says which change detection mode the page runs. The answer stays within 20,000 characters and its JSON always parses. A larger tree shows element injectors as an outline (id, name, type, component, and provider and dependency counts), and when that is still too long it leaves out the deepest injectors and says how many. The environment injectors are always there, as an outline when they are large, and without their deepest injectors when even that outline is too long. A `selector` or `token` answer that is too long keeps whole entries and says how many it shows. `selector` and `token` take at most 500 characters each. When the page has more than 2000 element injectors, the answer says that it holds only the first 2000.
+Without `selector` or `token`, the answer is the whole tree and says which change detection mode the page runs. The answer stays within 20,000 characters and its JSON always parses. A larger tree shows element injectors as an outline (id, name, type, component, and provider and dependency counts), and when that is still too long it leaves out the deepest injectors and says how many. The environment injectors are always there, as an outline when they are large, and without their deepest injectors when even that outline is too long. A `selector` or `token` answer that is too long keeps whole entries and says how many it shows. `selector` and `token` take at most 500 characters each. When the page reported only part of its injector tree (it keeps at most 2000 element injectors and 2500 in all, and leaves out injectors nested more than 1000 levels deep), the answer says so.
## NgRx
diff --git a/apps/docs/src/content/inspectors/components.md b/apps/docs/src/content/inspectors/components.md
index ea27c333..3f88734d 100644
--- a/apps/docs/src/content/inspectors/components.md
+++ b/apps/docs/src/content/inspectors/components.md
@@ -83,6 +83,8 @@ When the page renders `@defer` blocks, a **Defer blocks** list follows the tree.
Hover or focus a row to highlight the block in the page. Click it to select the component that holds it. The list is hidden when the page renders no defer blocks, or when its Angular version has no util to read them.
+The list holds the first 500 blocks of a page. When the page has more, the count reads **500+**.
+
### Change detection
Below the tree and the defer blocks, the **Change detection** section records change detection cycles with Angular's profiler. Click **Record**, use the app, then click **Stop recording**. **Clear** empties the recording. Each new recording starts empty, but a start sent while the page records, such as an agent's `record: "start"`, keeps the cycles recorded so far.
@@ -91,6 +93,8 @@ Below the tree and the defer blocks, the **Change detection** section records ch
- **Latest cycles**, newest first: the start time, the duration, how many components Angular checked, how many sync passes it ran, the output listener that ran just before the cycle (an output that ended more than 50 ms before the cycle is not counted), and the slowest component in it.
- Tree rows show how many times each instance was checked while recording.
+**Slowest components** shows the 100 component classes with the most self time among the first 1000 classes a recording checks. A class first checked after those 1000 has no totals, so it isn't ranked. Tree rows count checks for up to 2000 instances. When a recording checks more classes or instances, a note in the section says how many were left out.
+
Recording is off by default. While it is off, the page registers no profiler for it. The page keeps the last 200 cycles, set with [`limits.cdCycles`](../getting-started/configuration.md#limits). Recording needs Angular 20 or later. On older versions, the section says so. Times come from a development build, so they are higher than in production.
### Source mode
diff --git a/apps/docs/src/content/inspectors/injectors.md b/apps/docs/src/content/inspectors/injectors.md
index 5dabfd05..bc6feb8b 100644
--- a/apps/docs/src/content/inspectors/injectors.md
+++ b/apps/docs/src/content/inspectors/injectors.md
@@ -137,7 +137,7 @@ See [Tools](../agents/tools.md) and [Resources](../agents/resources.md).
### Up to 2000 element injectors
-The page reports at most 2000 element injectors. Past that, a notice above the tree says so, and a lookup path or a provider can point to an injector that isn't listed. `inspect-providers` says it too. Environment injectors are kept after them, up to 2500 injectors in all, so they never push element injectors out.
+The page reports at most 2000 element injectors. Environment injectors are kept after them, up to 2500 injectors in all, so they never push element injectors out. Injectors nested more than 1000 levels deep are left out too. When any of these limits cuts the tree, a notice above the tree says the page reported only part of its injector tree, and a lookup path or a provider can point to an injector that isn't listed. `inspect-providers` says it too.
### Some injectors can't be highlighted
diff --git a/apps/docs/src/content/inspectors/pipes.md b/apps/docs/src/content/inspectors/pipes.md
index 83c4bde7..95e533ec 100644
--- a/apps/docs/src/content/inspectors/pipes.md
+++ b/apps/docs/src/content/inspectors/pipes.md
@@ -158,6 +158,10 @@ It runs only while recording. It reads the template source, so it needs an unmin
`signal-read-in-pure-pipe` can't tell a signal on an injected service from a method with no arguments, so it reports those calls at info level.
+### Highlighting keeps 10 hosts per component
+
+A component chip keeps up to 10 host elements per page to highlight. When a component has more, `pangular:pipe-usage` gives the number of distinct host elements in `targetTotal`. A report that combines pages keeps at most 10 host elements per component across all pages, and its `targetTotal` adds up the host elements of every page.
+
### Recording ends on reload
Recording is off by default. Reload the page and it is off again.
diff --git a/apps/docs/src/content/inspectors/router.md b/apps/docs/src/content/inspectors/router.md
index 510630bc..7d3d9e82 100644
--- a/apps/docs/src/content/inspectors/router.md
+++ b/apps/docs/src/content/inspectors/router.md
@@ -127,7 +127,7 @@ The overlay reads the helper `provideRouter()` publishes (`ng.ɵgetRouterInstanc
The live views need `window.ng`, so they need a development build. In a production build the overlay finds no Router, and **Current** says **This page reports no Router**.
-When the debug API exists but lacks the provider helpers, the tab runs in events-only mode. The **Setup** view says so, and the config, lint and actions are limited.
+When the debug API exists but lacks the provider helper (`ng.ɵgetInjectorProviders`), the tab runs in events-only mode. The route config is still read, so the tree and lint work. Setup detection is limited: the overlay can't find the preloader, the scroller or the router providers, so the **Setup** view says so and its features and options can show defaults.
### Guard verdicts
diff --git a/extension/ui/assets/browser-agent-rpc-BXhoSh1z-6a4lgDHo.js b/extension/ui/assets/browser-agent-rpc-BXhoSh1z-CeUhVYZt.js
similarity index 93%
rename from extension/ui/assets/browser-agent-rpc-BXhoSh1z-6a4lgDHo.js
rename to extension/ui/assets/browser-agent-rpc-BXhoSh1z-CeUhVYZt.js
index 3b981d54..3818d5d0 100644
--- a/extension/ui/assets/browser-agent-rpc-BXhoSh1z-6a4lgDHo.js
+++ b/extension/ui/assets/browser-agent-rpc-BXhoSh1z-CeUhVYZt.js
@@ -1 +1 @@
-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
+import{t as e}from"./index-DJmCe5Yg.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-ChKyyuJq.js b/extension/ui/assets/index-DJmCe5Yg.js
similarity index 85%
rename from extension/ui/assets/index-ChKyyuJq.js
rename to extension/ui/assets/index-DJmCe5Yg.js
index 4eb22acf..150529f4 100644
--- a/extension/ui/assets/index-ChKyyuJq.js
+++ b/extension/ui/assets/index-DJmCe5Yg.js
@@ -5,7 +5,7 @@
`):``,this.name=`UnsubscriptionError`,this.errors=t}});function mr(e,t){if(e){var n=e.indexOf(t);0<=n&&e.splice(n,1)}}var hr=function(){function e(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var e,t,n,r,i;if(!this.closed){this.closed=!0;var a=this._parentage;if(a){if(this._parentage=null,Array.isArray(a))try{for(var o=cr(a),s=o.next();!s.done;s=o.next())s.value.remove(this)}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}else a.remove(this)}var c=this.initialTeardown;if(dr(c))try{c()}catch(e){i=e instanceof pr?e.errors:[e]}var l=this._finalizers;if(l){this._finalizers=null;try{for(var u=cr(l),d=u.next();!d.done;d=u.next()){var f=d.value;try{vr(f)}catch(e){i??=[],e instanceof pr?i=ur(ur([],lr(i)),lr(e.errors)):i.push(e)}}}catch(e){n={error:e}}finally{try{d&&!d.done&&(r=u.return)&&r.call(u)}finally{if(n)throw n.error}}}if(i)throw new pr(i)}},e.prototype.add=function(t){if(t&&t!==this){if(this.closed)vr(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=this._finalizers??[]).push(t)}}},e.prototype._hasParent=function(e){var t=this._parentage;return t===e||Array.isArray(t)&&t.includes(e)},e.prototype._addParent=function(e){var t=this._parentage;this._parentage=Array.isArray(t)?(t.push(e),t):t?[t,e]:e},e.prototype._removeParent=function(e){var t=this._parentage;t===e?this._parentage=null:Array.isArray(t)&&mr(t,e)},e.prototype.remove=function(t){var n=this._finalizers;n&&mr(n,t),t instanceof e&&t._removeParent(this)},e.EMPTY=(function(){var t=new e;return t.closed=!0,t})(),e}(),gr=hr.EMPTY;function _r(e){return e instanceof hr||e&&`closed`in e&&dr(e.remove)&&dr(e.add)&&dr(e.unsubscribe)}function vr(e){dr(e)?e():e.unsubscribe()}var yr={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1},br={setTimeout:function(e,t){var n=[...arguments].slice(2),r=br.delegate;return r?.setTimeout?r.setTimeout.apply(r,ur([e,t],lr(n))):setTimeout.apply(void 0,ur([e,t],lr(n)))},clearTimeout:function(e){return(br.delegate?.clearTimeout||clearTimeout)(e)},delegate:void 0};function xr(e){br.setTimeout(function(){var t=yr.onUnhandledError;if(t)t(e);else throw e})}function Sr(){}var Cr=(function(){return Er(`C`,void 0,void 0)})();function wr(e){return Er(`E`,void 0,e)}function Tr(e){return Er(`N`,e,void 0)}function Er(e,t,n){return{kind:e,value:t,error:n}}var Dr=null;function Or(e){if(yr.useDeprecatedSynchronousErrorHandling){var t=!Dr;if(t&&(Dr={errorThrown:!1,error:null}),e(),t){var n=Dr,r=n.errorThrown,i=n.error;if(Dr=null,r)throw i}}else e()}function kr(e){yr.useDeprecatedSynchronousErrorHandling&&Dr&&(Dr.errorThrown=!0,Dr.error=e)}var Ar=function(e){sr(t,e);function t(t){var n=e.call(this)||this;return n.isStopped=!1,t?(n.destination=t,_r(t)&&t.add(n)):n.destination=Rr,n}return t.create=function(e,t,n){return new Pr(e,t,n)},t.prototype.next=function(e){this.isStopped?Lr(Tr(e),this):this._next(e)},t.prototype.error=function(e){this.isStopped?Lr(wr(e),this):(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped?Lr(Cr,this):(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this),this.destination=null)},t.prototype._next=function(e){this.destination.next(e)},t.prototype._error=function(e){try{this.destination.error(e)}finally{this.unsubscribe()}},t.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},t}(hr),jr=Function.prototype.bind;function Mr(e,t){return jr.call(e,t)}var Nr=function(){function e(e){this.partialObserver=e}return e.prototype.next=function(e){var t=this.partialObserver;if(t.next)try{t.next(e)}catch(e){Fr(e)}},e.prototype.error=function(e){var t=this.partialObserver;if(t.error)try{t.error(e)}catch(e){Fr(e)}else Fr(e)},e.prototype.complete=function(){var e=this.partialObserver;if(e.complete)try{e.complete()}catch(e){Fr(e)}},e}(),Pr=function(e){sr(t,e);function t(t,n,r){var i=e.call(this)||this,a;if(dr(t)||!t)a={next:t??void 0,error:n??void 0,complete:r??void 0};else{var o;i&&yr.useDeprecatedNextContext?(o=Object.create(t),o.unsubscribe=function(){return i.unsubscribe()},a={next:t.next&&Mr(t.next,o),error:t.error&&Mr(t.error,o),complete:t.complete&&Mr(t.complete,o)}):a=t}return i.destination=new Nr(a),i}return t}(Ar);function Fr(e){yr.useDeprecatedSynchronousErrorHandling?kr(e):xr(e)}function Ir(e){throw e}function Lr(e,t){var n=yr.onStoppedNotification;n&&br.setTimeout(function(){return n(e,t)})}var Rr={closed:!0,next:Sr,error:Ir,complete:Sr},zr=(function(){return typeof Symbol==`function`&&Symbol.observable||`@@observable`})();function Br(e){return e}function Vr(e){return e.length===0?Br:e.length===1?e[0]:function(t){return e.reduce(function(e,t){return t(e)},t)}}var Hr=function(){function e(e){e&&(this._subscribe=e)}return e.prototype.lift=function(t){var n=new e;return n.source=this,n.operator=t,n},e.prototype.subscribe=function(e,t,n){var r=this,i=Gr(e)?e:new Pr(e,t,n);return Or(function(){var e=r,t=e.operator,n=e.source;i.add(t?t.call(i,n):n?r._subscribe(i):r._trySubscribe(i))}),i},e.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(t){e.error(t)}},e.prototype.forEach=function(e,t){var n=this;return t=Ur(t),new t(function(t,r){var i=new Pr({next:function(t){try{e(t)}catch(e){r(e),i.unsubscribe()}},error:r,complete:t});n.subscribe(i)})},e.prototype._subscribe=function(e){return this.source?.subscribe(e)},e.prototype[zr]=function(){return this},e.prototype.pipe=function(){return Vr([...arguments])(this)},e.prototype.toPromise=function(e){var t=this;return e=Ur(e),new e(function(e,n){var r;t.subscribe(function(e){return r=e},function(e){return n(e)},function(){return e(r)})})},e.create=function(t){return new e(t)},e}();function Ur(e){return e??yr.Promise??Promise}function Wr(e){return e&&dr(e.next)&&dr(e.error)&&dr(e.complete)}function Gr(e){return e&&e instanceof Ar||Wr(e)&&_r(e)}function Kr(e){return dr(e?.lift)}function qr(e){return function(t){if(Kr(t))return t.lift(function(t){try{return e(t,this)}catch(e){this.error(e)}});throw TypeError(`Unable to lift unknown Observable type`)}}function Jr(e,t,n,r,i){return new Yr(e,t,n,r,i)}var Yr=function(e){sr(t,e);function t(t,n,r,i,a,o){var s=e.call(this,t)||this;return s.onFinalize=a,s.shouldUnsubscribe=o,s._next=n?function(e){try{n(e)}catch(e){t.error(e)}}:e.prototype._next,s._error=i?function(e){try{i(e)}catch(e){t.error(e)}finally{this.unsubscribe()}}:e.prototype._error,s._complete=r?function(){try{r()}catch(e){t.error(e)}finally{this.unsubscribe()}}:e.prototype._complete,s}return t.prototype.unsubscribe=function(){var t;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var n=this.closed;e.prototype.unsubscribe.call(this),!n&&((t=this.onFinalize)==null||t.call(this))}},t}(Ar),Xr=fr(function(e){return function(){e(this),this.name=`ObjectUnsubscribedError`,this.message=`object unsubscribed`}}),Zr=function(e){sr(t,e);function t(){var t=e.call(this)||this;return t.closed=!1,t.currentObservers=null,t.observers=[],t.isStopped=!1,t.hasError=!1,t.thrownError=null,t}return t.prototype.lift=function(e){var t=new Qr(this,this);return t.operator=e,t},t.prototype._throwIfClosed=function(){if(this.closed)throw new Xr},t.prototype.next=function(e){var t=this;Or(function(){var n,r;if(t._throwIfClosed(),!t.isStopped){t.currentObservers||=Array.from(t.observers);try{for(var i=cr(t.currentObservers),a=i.next();!a.done;a=i.next())a.value.next(e)}catch(e){n={error:e}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}}})},t.prototype.error=function(e){var t=this;Or(function(){if(t._throwIfClosed(),!t.isStopped){t.hasError=t.isStopped=!0,t.thrownError=e;for(var n=t.observers;n.length;)n.shift().error(e)}})},t.prototype.complete=function(){var e=this;Or(function(){if(e._throwIfClosed(),!e.isStopped){e.isStopped=!0;for(var t=e.observers;t.length;)t.shift().complete()}})},t.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(t.prototype,"observed",{get:function(){return this.observers?.length>0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(t){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,t)},t.prototype._subscribe=function(e){return this._throwIfClosed(),this._checkFinalizedStatuses(e),this._innerSubscribe(e)},t.prototype._innerSubscribe=function(e){var t=this,n=this,r=n.hasError,i=n.isStopped,a=n.observers;return r||i?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){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%] {
+`))}}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-CeUhVYZt.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;
}`]})},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%] {
@@ -547,7 +547,7 @@ a[_ngcontent-%COMP%] {
a[_ngcontent-%COMP%]:focus-visible {
outline: 2px solid var(--%NS%accent);
outline-offset: 2px;
-}`]})},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%] {
+}`]})},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,`p`,9),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function lO(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 uO(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 dO(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 fO(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,uO,4,1,`span`,20),P(8,dO,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 pO(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,lO,9,4,`tr`,null,Dg),B()()(),z(18,`div`)(19,`h3`),J(20,`Latest cycles`),B(),z(21,`ol`,16),I(22,fO,9,8,`li`,null,aO),B()()()),e&2){let e=K();M(16),L(e.slowest()),M(6),L(e.latest())}}function mO(e,t){e&1&&(z(0,`p`,12),J(1,`Use the app. Cycles show up here as Angular runs change detection.`),B())}var hO=10,gO=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,hO));latest=Q(()=>this.cycles().slice(-30).reverse());capNotes=Q(()=>{let e=this.page()?.droppedClasses??0,t=this.page()?.droppedHosts??0,n=[];return e>0&&n.push(`${e} more component ${e===1?`class was`:`classes were`} checked than a recording keeps, so ${e===1?`it is`:`they are`} left out of these totals.`),t>0&&n.push(`${t} component ${t===1?`instance was`:`instances were`} checked past the 2000 a recording counts, so ${t===1?`its tree row shows`:`their tree rows show`} no check count.`),n});status=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:20,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),I(16,cO,2,1,`p`,9,Og),P(18,pO,24,0,`div`,11)(19,mO,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(),L(t.capNotes()),M(2),F(t.slowest().length?18:t.recording()?19:-1))},dependencies:[iO],styles:[`[_nghost-%COMP%] {
display: block;
margin-top: 16px;
}
@@ -703,7 +703,7 @@ td.mono[_ngcontent-%COMP%] {
.trigger[_ngcontent-%COMP%] .mono[_ngcontent-%COMP%],
.top[_ngcontent-%COMP%] .mono[_ngcontent-%COMP%] {
overflow-wrap: anywhere;
-}`]})},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%] {
+}`]})},_O=[`*`];function vO(e,t){e&1&&J(0),e&2&&Y(K(2).label())}function yO(e,t){e&1&&o_(0,0,null,vO,1,1)}function bO(e,t){if(e&1&&(z(0,`span`,4),J(1),B()),e&2){let e=K(2);M(),Y(e.message())}}function xO(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,bO,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 SO(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 CO=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 wO(e,t){return t?`${e}:${t}`:e}var TO=class e{editor=E(CO);file=$.required();line=$(void 0);label=Q(()=>wO(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:_O,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,yO,2,0,`ng-template`,null,0,wv),P(2,xO,3,4)(3,SO,2,2,`span`,1)),e&2&&(M(2),F(t.editor.available()?2:3))},dependencies:[sb],styles:[`[_nghost-%COMP%] {
display: inline;
min-width: 0;
}
@@ -738,7 +738,7 @@ td.mono[_ngcontent-%COMP%] {
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%] {
+}`]})},EO=[`filterInput`],DO=()=>[],OO=(e,t)=>t.node.id,kO=(e,t)=>t.outlet+t.route,AO=(e,t)=>t.formId,jO=(e,t)=>t.name+e,MO=(e,t)=>t.name,NO=(e,t)=>t.token+e,PO=(e,t)=>t.id;function FO(e,t){return this.sourceKey(t)}function IO(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 LO(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 RO(e,t){if(e&1&&(z(0,`p`,17),J(1),B()),e&2){let e=K(2);M(),Y(e.pickMessage())}}function zO(e,t){if(e&1&&(z(0,`p`,18),J(1),B()),e&2){let e=K(2);M(),Y(e.truncationText())}}function BO(e,t){e&1&&(z(0,`p`,33),J(1,`The filter only searches the components the tree lists.`),B())}function VO(e,t){if(e&1){let e=W();z(0,`div`,21)(1,`p`,32),J(2),B(),P(3,BO,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 HO(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 UO(e,t){e&1&&V(0,`span`,37)}function WO(e,t){if(e&1&&(z(0,`span`,40),J(1),B()),e&2){let e=t.$implicit;M(),Y(e.route||`/`)}}function GO(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 KO(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 qO(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,HO,3,2,`span`,36)(2,UO,1,0,`span`,37),z(3,`span`,38),J(4),B(),z(5,`span`,39),J(6),B(),I(7,WO,2,1,`span`,40,kO),P(9,GO,4,2,`span`,41),P(10,KO,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,DO)),M(2),F((e=r.cdHosts()[n.node.id])?9:-1,e),M(),F(n.node.directives?.length?10:-1)}}function JO(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 YO(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 XO(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 ZO(e,t){if(e&1&&(z(0,`div`,55),I(1,XO,2,1,`button`,56,AO),B()),e&2){let e=K(),t=K(3);M(),L(t.formsIn(e.file))}}function QO(e,t){e&1&&P(0,ZO,3,0,`div`,55),e&2&&F(K(3).formsIn(t.file).length?0:-1)}function $O(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 ek(e,t){if(e&1&&(z(0,`span`,68),J(1),B()),e&2){let e=K().$implicit;M(),X(`(`,e.prop,`)`)}}function tk(e,t){if(e&1&&(z(0,`li`,66)(1,`span`,67),J(2),P(3,ek,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 nk(e,t){if(e&1&&(z(0,`ul`,62),I(1,tk,7,5,`li`,66,MO),B()),e&2){let e=K();M(),L(e.inputs)}}function rk(e,t){e&1&&(z(0,`p`,63),J(1,`No inputs.`),B())}function ik(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 ak(e,t){if(e&1&&(z(0,`ul`,64),I(1,ik,5,4,`li`,69,MO),B()),e&2){let e=K();M(),L(e.outputs)}}function ok(e,t){e&1&&(z(0,`p`,63),J(1,`No outputs.`),B())}function sk(e,t){if(e&1&&(z(0,`span`,72),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.kind)}}function ck(e,t){if(e&1&&(z(0,`li`,66)(1,`span`,67),J(2),P(3,sk,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 lk(e,t){if(e&1&&(z(0,`ul`,62),I(1,ck,7,5,`li`,66,MO),B()),e&2){let e=K();M(),L(e.properties)}}function uk(e,t){e&1&&(z(0,`p`,63),J(1,`No other properties.`),B())}function dk(e,t){if(e&1&&(z(0,`li`,73),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function fk(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,dk,2,1,`li`,73,Og),B()()),e&2){let e=K();M(4),Y(e.listeners.length),M(2),L(e.listeners)}}function pk(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 mk(e,t){if(e&1&&(z(0,`ul`,62),I(1,pk,6,4,`li`,66,MO),B()),e&2){let e=K().$implicit;M(),L(e.inputs)}}function hk(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 gk(e,t){if(e&1&&(z(0,`ul`,64),I(1,hk,5,4,`li`,69,MO),B()),e&2){let e=K().$implicit;M(),L(e.outputs)}}function _k(e,t){e&1&&(z(0,`p`,63),J(1,`No inputs or outputs.`),B())}function vk(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,mk,3,0,`ul`,62),P(7,gk,3,0,`ul`,64),P(8,_k,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 yk(e,t){if(e&1&&(z(0,`span`,72),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function bk(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 xk(e,t){e&1&&(z(0,`span`,77),J(1,`not provided`),B())}function Sk(e,t){if(e&1&&(z(0,`li`,74)(1,`span`,75),J(2),B(),I(3,yk,2,1,`span`,72,Og),P(5,bk,4,1,`span`,76)(6,xk,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 Ck(e,t){if(e&1&&(z(0,`ul`,65),I(1,Sk,7,2,`li`,74,NO),B()),e&2){let e=K();M(),L(e.dependencies)}}function wk(e,t){e&1&&(z(0,`p`,63),J(1,`Nothing is injected through the constructor or inject().`),B())}function Tk(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,$O,4,2,null,null,kO),B(),z(15,`div`,60)(16,`h3`),J(17,` Inputs `),z(18,`span`,61),J(19),B()(),P(20,nk,3,0,`ul`,62)(21,rk,2,0,`p`,63),B(),z(22,`div`,60)(23,`h3`),J(24,` Outputs `),z(25,`span`,61),J(26),B()(),P(27,ak,3,0,`ul`,64)(28,ok,2,0,`p`,63),B(),z(29,`div`,60)(30,`h3`),J(31,` Properties `),z(32,`span`,61),J(33),B()(),P(34,lk,3,0,`ul`,62)(35,uk,2,0,`p`,63),B(),P(36,fk,8,1,`div`,60),I(37,vk,9,4,`div`,60,jO),z(39,`div`,60)(40,`h3`),J(41,` Injected `),z(42,`span`,61),J(43),B()(),P(44,Ck,3,0,`ul`,65)(45,wk,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,DO)),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 Ek(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 Dk(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,JO,2,2,`p`,50),P(9,YO,7,1),P(10,QO,1,1),B(),P(11,Tk,46,13)(12,Ek,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 Ok(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 kk(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 Ak(e,t){if(e&1&&(z(0,`div`,25),P(1,Ok,6,1)(2,kk,2,0,`p`,33),B()),e&2){let e,t=K(2);M(),F((e=t.destroyed())?1:2,e)}}function jk(e,t){e&1&&(z(0,`span`,72),J(1,`hydrate never`),B())}function Mk(e,t){if(e&1&&(z(0,`span`,72),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.hydration)}}function Nk(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,jk,2,0,`span`,72)(7,Mk,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 Pk(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,Nk,10,7,`li`,null,PO),B()()),e&2){let e=K(2);M(4),Y(e.deferCount()),M(2),L(e.deferBlocks())}}function Fk(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 Ik(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,IO,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,LO,4,3,`button`,15),B(),ms(),z(23,`p`,16),J(24),B(),P(25,RO,2,1,`p`,17),P(26,zO,2,1,`p`,18),z(27,`div`,19)(28,`div`)(29,`h2`,20),J(30,`Component tree`),B(),P(31,VO,6,2,`div`,21),z(32,`div`,22),G(`keydown`,function(t){return O(e),k(K().onTreeKey(t))}),I(33,qO,11,15,`div`,23,OO),B()(),P(35,Dk,13,6,`section`,24)(36,Ak,3,1,`div`,25),B(),P(37,Pk,8,1,`section`,26),P(38,Fk,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 Lk(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 Rk(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 zk(e,t){if(e&1&&J(0),e&2){let e=K(3);Z(` `,e.filteredSource().length,` of `,e.source().length,` `)}}function Bk(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 Vk(e,t){if(e&1&&(z(0,`span`,86),P(1,zk,1,2)(2,Bk,1,4),B()),e&2){let e=K(2);M(),F(e.filter().trim()?1:2)}}function Hk(e,t){e&1&&(z(0,`div`,90),V(1,`span`,78),z(2,`p`,32),J(3,`Scanning components…`),B()())}function Uk(e,t){e&1&&(J(0,` Run `),z(1,`code`),J(2,`pangular build`),B(),J(3,` again to rebuild the report. `))}function Wk(e,t){e&1&&J(0,` Check that the dev server is running, then try again. `)}function Gk(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,Uk,4,0)(5,Wk,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 Kk(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 qk(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 Jk(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` `,K(3).bareName(e.className),` · `)}}function Yk(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 Xk(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 Zk(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,Yk,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,Xk,2,1,`button`,56,AO),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 Qk(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,Jk,1,1),J(9),B()(),A(),z(10,`svg`,101),V(11,`path`,45),B()(),P(12,Zk,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 $k(e,t){if(e&1&&(z(0,`ul`,93),I(1,Qk,13,12,`li`,94,FO,!0),B()),e&2){let e=K(2);M(),L(e.filteredSource())}}function eA(e,t){if(e&1){let e=W();P(0,Lk,2,0,`p`,18)(1,Rk,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,Vk,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,Hk,4,0,`div`,90)(16,Gk,8,1,`div`,91)(17,Kk,5,0,`div`,92)(18,qk,5,1,`div`,92)(19,$k,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 tA(e){return e.replace(/^_(?=[A-Z])/,``)}var nA=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??[]);deferCount=Q(()=>`${this.deferBlocks().length}${this.page()?.deferTruncated?`+`:``}`);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=tA(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(tA(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:tA(e.className)}bareName(e){return tA(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,EO,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,Ik,39,14)(1,eA,20,7),e&2&&F(+!t.live())},dependencies:[GD,gO,TO,pb],styles:[`[_nghost-%COMP%] {
display: block;
color: var(--%NS%text);
font-size: 13px;
@@ -1558,7 +1558,7 @@ pre[_ngcontent-%COMP%] {
.inline-detail[_ngcontent-%COMP%] .show-form[_ngcontent-%COMP%] {
margin: 0 16px;
-}`]})};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%] {
+}`]})};function rA(e){return e.line?`${e.file}:${e.line}`:e.file}function iA(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 aA=hE;function oA(e){return e.startsWith(`/`)&&!e.startsWith(`//`)&&!/^\/*[a-z][a-z0-9+.-]*:/i.test(e)&&!e.includes(`[redacted]`)&&e.length<=2e3}var sA=`Could not reach the page.`;async function cA(e,t,n){return await aA(e,`request-router-action`,{pageId:t,request:n})??{error:`Could not reach the page.`}}function lA(e){return e===`succeeded`?`good`:e===`redirected`||e===`pending`||e===`skipped`?`warn`:e===`cancelled`||e===`failed`?`bad`:``}var uA=()=>[],dA=(e,t)=>t[0],fA=(e,t)=>t.input;function pA(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 mA(e,t){if(e&1&&(H(0,`p`,12),J(1),U()),e&2){let e=K(3);M(),Y(e.navigationOff)}}function hA(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,mA,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 gA(e,t){if(e&1&&(H(0,`p`,4),J(1),U()),e&2){let e=K(2);M(),Y(e.message())}}function _A(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 vA(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 yA(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 bA(e,t){if(e&1&&(H(0,`span`,14),J(1),U()),e&2){let e=K().$implicit;M(),X(`, `,e.nesting)}}function xA(e,t){if(e&1&&(H(0,`span`,15),J(1),U()),e&2){let e=K().$implicit;M(),Y(e.route.outlet)}}function SA(e,t){e&1&&(H(0,`span`,15),J(1,`lazy`),U())}function CA(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 wA(e,t){if(e&1&&(H(0,`code`,17),J(1),U()),e&2){let e=K().$implicit;M(),Y(e.route.component)}}function TA(e,t){e&1&&(H(0,`span`,20),J(1,`–`),U(),H(2,`span`,14),J(3,`none`),U())}function EA(e,t){e&1&&(H(0,`span`,15),J(1,`inherited`),U())}function DA(e,t){if(e&1&&(H(0,`div`,18)(1,`code`),J(2),yv(3,`json`),U(),P(4,EA,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 OA(e,t){e&1&&(H(0,`span`,20),J(1,`–`),U(),H(2,`span`,14),J(3,`none`),U())}function kA(e,t){e&1&&(H(0,`span`,15),J(1),U()),e&2&&(M(),Y(t))}function AA(e,t){if(e&1&&(H(0,`div`,19)(1,`code`),J(2),yv(3,`json`),U(),P(4,kA,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 jA(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 NA(e,t){if(e&1&&(H(0,`span`,15),J(1),U()),e&2){let e=t.$implicit;M(),X(`resolve `,e)}}function PA(e,t){e&1&&(H(0,`span`,20),J(1,`–`),U(),H(2,`span`,14),J(3,`none`),U())}function FA(e,t){if(e&1&&(H(0,`tr`)(1,`td`,13),J(2),P(3,bA,2,1,`span`,14),P(4,xA,2,1,`span`,15),P(5,SA,2,0,`span`,15),P(6,CA,2,2,`div`,16),U(),H(7,`td`),P(8,wA,2,1,`code`,17)(9,TA,4,0),U(),H(10,`td`),I(11,DA,5,5,`div`,18,dA,!1,OA,4,0),U(),H(14,`td`),I(15,AA,5,5,`div`,19,dA,!1,jA,4,0),U(),H(18,`td`),I(19,MA,2,1,`span`,15,Og),I(21,NA,2,1,`span`,15,Og),P(23,PA,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,uA)),M(2),F(!n.guardList(e.route).length&&!e.route.resolvers?.length?23:-1)}}function IA(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 LA(e,t){if(e&1&&(H(0,`code`),J(1),U(),J(2,` for `),H(3,`code`),J(4),U(),P(5,IA,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 RA(e,t){e&1&&(H(0,`span`,23),J(1,`not activated`),U())}function zA(e,t){e&1&&(H(0,`span`,15),J(1,`detached by reuse strategy`),U())}function BA(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 VA(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 HA(e,t){if(e&1&&(H(0,`li`)(1,`span`,15),J(2),U(),P(3,LA,6,3)(4,RA,2,0,`span`,23),P(5,zA,2,0,`span`,15),I(6,BA,2,2,`span`,15,fA),P(8,VA,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 UA(e,t){if(e&1&&(H(0,`h3`),J(1,`Outlets`),U(),H(2,`ul`,21),I(3,HA,9,6,`li`,22,Dg),U()),e&2){let e=K(2);M(3),L(e.outletRows())}}function WA(e,t){if(e&1&&(H(0,`p`,1)(1,`span`,2),J(2,`URL`),U(),H(3,`code`),J(4),U()(),P(5,pA,5,1,`p`,3),P(6,hA,10,5),P(7,gA,2,1,`p`,4),H(8,`dl`,5),P(9,_A,4,1),P(10,vA,6,3),P(11,yA,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,FA,24,12,`tr`,null,Dg),U()()(),P(31,UA,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 GA(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 KA=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 cA(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,WA,32,8)(1,GA,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;
@@ -1991,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 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%] {
+}`]})};function qA(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 JA(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 YA(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 XA(e,t){if(e&1&&(H(0,`span`,3),P(1,qA,2,1,`span`,8),P(2,JA,2,1,`span`,9),P(3,YA,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 ZA(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 QA(e,t){e&1&&(H(0,`p`,5),J(1,`Checking…`),U())}function $A(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 ej(e,t){e&1&&J(0,` The page has not reported its route config yet. It appears after the app finishes bootstrapping. `)}function tj(e,t){e&1&&J(0,` No page with a router is connected. `)}function nj(e,t){if(e&1&&(H(0,`div`,6)(1,`p`,11),J(2,`No checks ran.`),U(),H(3,`p`,2),P(4,$A,1,0)(5,ej,1,0)(6,tj,1,0),U()()),e&2){let e;M(4),F((e=t)===`events-only`?4:e===`no-config`?5:6)}}function rj(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 ij(e,t){if(e&1&&(H(0,`ul`,7),I(1,rj,17,8,`li`,null,Dg),U()),e&2){let e=K();N(`aria-busy`,e.checking()),M(),L(e.findings())}}function aj(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 oj=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 aA(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,XA,4,3,`span`,3),U(),P(6,ZA,7,0,`div`,4)(7,QA,2,0,`p`,5)(8,nj,7,1,`div`,6)(9,ij,3,1,`ul`,7)(10,aj,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;
@@ -2413,7 +2413,7 @@ h3[_ngcontent-%COMP%] {
.fix[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] {
font-size: 12px;
-}`]})},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%] {
+}`]})},sj=(e,t)=>t.name,cj=(e,t)=>t[0];function lj(e,t){e&1&&(H(0,`p`,1),J(1,` Events-only mode: this build lacks the injector provider debug helper, so setup detection is limited. The preloader, the scroller and the router providers can't be found, and the features and options below can show defaults. `),U())}function uj(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 dj(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 fj(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 pj(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 mj(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 hj(e,t){if(e&1&&(H(0,`h3`),J(1,`Features`),U(),H(2,`ul`,8),I(3,mj,3,3,`li`,null,cj),U()),e&2){let e=K(),t=K();M(3),L(t.entries(e.features))}}function gj(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 _j(e,t){if(e&1&&(H(0,`h3`),J(1,`Strategies`),U(),H(2,`dl`,2),I(3,gj,5,2,null,null,cj),U()),e&2){let e=K(),t=K();M(3),L(t.entries(e.strategies))}}function vj(e,t){if(e&1&&(P(0,lj,2,0,`p`,1),H(1,`dl`,2)(2,`dt`),J(3,`Set up with`),U(),H(4,`dd`),J(5),U(),P(6,uj,4,1),P(7,dj,5,1),P(8,fj,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,pj,10,4,`tr`,null,sj),U()()(),P(24,hj,5,0),P(25,_j,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 yj(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 bj=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,vj,26,8)(1,yj,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;
@@ -2744,7 +2744,7 @@ h3[_ngcontent-%COMP%] {
.facts[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {
color: var(--%NS%text-strong);
-}`]})},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%] {
+}`]})},xj=(e,t)=>t.id,Sj=(e,t)=>t.phase;function Cj(e,t){if(e&1&&(z(0,`p`,8),J(1),B()),e&2){let e=K();M(),Y(e.message())}}function wj(e,t){if(e&1&&(z(0,`p`,9),J(1),B()),e&2){let e=K();M(),Y(e.navigationOff)}}function Tj(e,t){e&1&&(z(0,`span`,18),J(1,`→`),B(),z(2,`span`,19),J(3,`then`),B())}function Ej(e,t){if(e&1&&(P(0,Tj,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 Dj(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 Oj(e,t){if(e&1&&(z(0,`div`,13)(1,`p`,14)(2,`span`,15),J(3),B(),I(4,Ej,3,2,null,null,Dg),B(),z(6,`ol`,16),I(7,Dj,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 kj(e,t){if(e&1&&(z(0,`section`,11)(1,`h3`,12),J(2),B(),I(3,Oj,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 Aj(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 jj(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 Nj(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 Pj(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 Fj(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 Ij(e,t){e&1&&(z(0,`span`,32),J(1,`probe`),B())}function Lj(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 Rj(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 zj(e,t){if(e&1&&(z(0,`div`,33),I(1,Rj,1,5,`span`,39,Sj),B()),e&2){let e=K().$implicit,t=K(2);N(`aria-label`,t.barLabel(e)),M(),L(t.bars(e))}}function Bj(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 Vj(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 Hj(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 Uj(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 Wj(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 Gj(e,t){if(e&1&&(z(0,`dt`),J(1,`Loop`),B(),z(2,`dd`,40),J(3),I(4,Wj,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 Kj(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 qj(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 Jj(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 Yj(e,t){if(e&1&&(z(0,`dt`),J(1,`Runs`),B(),z(2,`dd`),I(3,Jj,10,7,`div`,null,Dg),B()),e&2){let e=K().$implicit;M(3),L(e.runs)}}function Xj(e,t){if(e&1&&J(0),e&2){let e=K(2).$implicit;X(` leaving `,e.checked.deactivate.join(`, `),`; `)}}function Zj(e,t){if(e&1&&(z(0,`dt`),J(1,`Checked`),B(),z(2,`dd`),P(3,Xj,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 Qj(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 $j(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 eM(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 tM(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 nM(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 rM(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 iM(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 aM(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 oM(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 sM(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 cM(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 lM(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 uM(e,t){if(e&1){let e=W();z(0,`li`)(1,`div`,25),P(2,jj,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,Nj,2,1,`span`,30)(12,Pj,2,1,`span`,31)(13,Fj,2,1,`span`,31),P(14,Ij,2,0,`span`,32),P(15,Lj,4,2,`span`,15),B()(),P(16,zj,3,1,`div`,33),z(17,`dl`,34),P(18,Bj,5,1),P(19,Vj,4,2),P(20,Hj,4,1),P(21,Uj,4,1),P(22,Gj,6,1),P(23,Kj,6,2),P(24,qj,4,2),P(25,Yj,5,0),P(26,Zj,5,2),P(27,Qj,4,1),P(28,$j,4,1),P(29,eM,4,1),P(30,tM,4,2),P(31,nM,4,1),P(32,rM,4,1),P(33,iM,4,1),P(34,aM,4,1),P(35,oM,4,1),P(36,sM,4,1),P(37,cM,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,lM,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 dM(e,t){if(e&1&&(z(0,`div`,20)(1,`span`,21),J(2),B(),z(3,`div`,22),I(4,Aj,3,3,`span`,null,Og),B()(),z(6,`ol`,23),I(7,uM,44,37,`li`,24,xj),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 fM(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 pM(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 mM(e,t){e&1&&P(0,fM,7,1,`div`,41)(1,pM,5,0,`div`,41),e&2&&F(+!K().page().navigations.length)}var hM=[`recognize`,`guards`,`resolve`,`activate`],gM={recognize:`#60a5fa`,guards:`#f59e0b`,resolve:`#2dd4bf`,activate:`#34d399`},_M=class e{page=$.required();rpc=$(null);maxNavigations=Q(()=>kE(this.rpc()).limits.navigations);navigationAllowed=Q(()=>AE(this.rpc(),`router`));navigationOff=nE(`router`);phases=hM;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 lA(e)}color(e){return gM[e]}bars(e){let t=e.phases?.total;return t?hM.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 cA(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 oA(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 cA(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 aA(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,Cj,2,1,`p`,8),P(16,wj,2,1,`p`,9),V(17,`app-limit-note`,10),P(18,kj,5,1,`section`,11),P(19,dM,9,2)(20,mM,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;
@@ -3328,7 +3328,7 @@ time[_ngcontent-%COMP%] {
.export[_ngcontent-%COMP%] {
margin-left: 0;
}
-}`]})},_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%] {
+}`]})},vM=[`urlInput`],yM=()=>[],bM=(e,t)=>t.node.id;function xM(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 SM(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,xM,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 CM(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 wM(e,t){if(e&1&&(z(0,`span`,21),J(1,`no match`),B(),J(2,` Matches no route (NG04002). `),P(3,CM,3,1)),e&2){K();let e=fv(0);M(3),F(e.nearest.length?3:-1)}}function TM(e,t){if(e&1&&(z(0,`div`,18),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function EM(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,SM,6,2)(8,wM,4,1),I(9,TM,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 DM(e,t){if(e&1&&(z(0,`p`,9),J(1),B()),e&2){let e=K();M(),Y(e.message())}}function OM(e,t){if(e&1&&(z(0,`p`,11),J(1),B()),e&2){let e=K();M(),Y(e.navigationOff)}}function kM(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 AM(e,t){e&1&&J(0),e&2&&X(` `,K(2).rows().length,` route(s). `)}function jM(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&&(z(0,`p`,14),J(1),P(2,kM,3,1)(3,AM,1,1),J(4,` Lazy routes show their children once loaded. `),P(5,jM,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 NM(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 PM(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 FM(e,t){e&1&&(z(0,`span`,28),J(1,`active`),B())}function IM(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 LM(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 RM(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 zM(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 BM(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 VM(e,t){if(e&1&&(z(0,`span`,28),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function HM(e,t){if(e&1&&(z(0,`span`,28),J(1),B()),e&2){let e=t.$implicit;M(),X(`resolve `,e)}}function UM(e,t){e&1&&(z(0,`span`,37),J(1,`–`),B(),z(2,`span`,26),J(3,`none`),B())}function WM(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` `,e.node.title,` `)}}function GM(e,t){e&1&&(z(0,`span`,37),J(1,`–`),B(),z(2,`span`,26),J(3,`none`),B())}function KM(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 qM(e,t){if(e&1){let e=W();I(0,KM,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 JM(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 YM(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 XM(e,t){if(e&1&&(z(0,`tr`,null,2)(2,`td`,27),J(3),P(4,FM,2,0,`span`,28),P(5,IM,2,1,`span`,28),P(6,LM,2,1,`span`,28),P(7,RM,4,2,`span`,29),B(),z(8,`td`),P(9,zM,6,1,`span`,30)(10,BM,1,1),B(),z(11,`td`),I(12,VM,2,1,`span`,28,Dg),I(14,HM,2,1,`span`,28,Og),P(16,UM,4,0),B(),z(17,`td`),P(18,WM,1,1)(19,GM,4,0),B(),z(20,`td`,31)(21,`div`,32),P(22,qM,4,3),P(23,JM,2,1,`button`,33),B()()(),P(24,YM,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,yM)),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 ZM(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,XM,25,16,null,null,bM),B()()()),e&2){let e=K();M(16),L(e.rows())}}function QM(e,t){return`${e} of ${t} ${t===1?`route`:`routes`}`}var $M=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=iA(o,t),s=i&&rA(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(()=>QM(this.rows().length,this.total()));setFilter(e){this.filter.set(e);let t=this.rows().length,n=e?t?`${QM(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 aA(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(sA))}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 cA(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 cA(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 cA(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,vM,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,EM,11,4,`div`,8),P(10,DM,2,1,`p`,9),z(11,`p`,10),J(12),B(),P(13,OM,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,MM,6,3,`p`,14),B(),z(18,`p`,10),J(19),B(),P(20,NM,5,2,`div`,15)(21,PM,7,0,`div`,15)(22,ZM,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:[TO,pb],styles:[`.muted[_ngcontent-%COMP%] {
color: var(--%NS%text-2);
font-size: 13px;
line-height: 1.5;
@@ -3811,7 +3811,7 @@ tr.active[_ngcontent-%COMP%] td[_ngcontent-%COMP%]:first-child {
.filter[_ngcontent-%COMP%] {
flex-basis: 100%;
}
-}`]})},$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%] {
+}`]})},eN=(e,t)=>t.id;function tN(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 nN(e,t){e&1&&P(0,tN,4,2,`div`,4),e&2&&F(K().pages().length>1?0:-1)}function rN(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 iN(e,t){e&1&&(z(0,`p`,2),J(1,`Loading the live router state…`),B())}function aN(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 oN(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,aN,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 sN(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 cN(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 lN(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 uN(e,t){e&1&&V(0,`app-route-setup`,15),e&2&&R(`page`,K())}function dN(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 fN(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,oN,3,6,`button`,11,eN),B(),z(3,`div`,12),P(4,sN,1,2,`app-route-current`,13)(5,cN,1,2,`app-route-timeline`,13)(6,lN,1,3,`app-route-tree`,14)(7,uN,1,1,`app-route-setup`,15)(8,dN,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 pN(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 mN=[{id:`current`,label:`Current`},{id:`navigations`,label:`Navigations`},{id:`routes`,label:`Routes`},{id:`setup`,label:`Setup`},{id:`lint`,label:`Lint`}],hN=class e{rpc=$(null);sources=$([]);showComponent=Iv();tabs=mN;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,nN,1,1),B(),P(4,rN,7,0,`div`,1)(5,iN,2,0,`p`,2)(6,fN,9,3)(7,pN,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:[KA,oj,bj,_M,$M,GD],styles:[`[_nghost-%COMP%] {
display: grid;
gap: 16px;
min-width: 0;
@@ -3976,7 +3976,7 @@ h2[_ngcontent-%COMP%] {
line-height: 16px;
text-align: center;
font-variant-numeric: tabular-nums;
-}`]})};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%] {
+}`]})};function gN(e,t){e&1&&J(0,` The Routes tab above shows what the router uses. `)}function _N(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 vN(e,t){e&1&&(J(0,` Run `),z(1,`code`),J(2,`pangular build`),B(),J(3,` again to rebuild the report. `))}function yN(e,t){e&1&&J(0,` Check that the dev server is running, then refresh. `)}function bN(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,vN,4,0)(5,yN,1,0),B()()),e&2){let e=K();M(4),F(e.staticReport()?4:5)}}function xN(e,t){e&1&&(z(0,`p`,12),J(1,`Scanning routes…`),B())}function SN(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 CN(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 wN(e,t){e&1&&P(0,SN,7,0,`div`,16)(1,CN,11,0,`div`,16),e&2&&F(+!K().routes().length)}function TN(e,t){if(e&1&&(z(0,`span`,21),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.kind)}}function EN(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 DN(e,t){if(e&1&&(z(0,`code`,23),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.component)}}function ON(e,t){e&1&&(z(0,`span`,28),J(1,`–`),B(),z(2,`span`,27),J(3,`none`),B())}function kN(e,t){if(e&1&&(z(0,`span`,21),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function AN(e,t){e&1&&(z(0,`span`,28),J(1,`–`),B(),z(2,`span`,27),J(3,`none`),B())}function jN(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`,28),J(1,`–`),B(),z(2,`span`,27),J(3,`none`),B())}function NN(e,t){if(e&1&&(z(0,`tr`)(1,`td`,20),J(2),P(3,TN,2,1,`span`,21),B(),z(4,`td`),P(5,EN,6,1,`span`,22)(6,DN,2,1,`code`,23)(7,ON,4,0),B(),z(8,`td`),I(9,kN,2,1,`span`,21,Dg,!1,AN,4,0),B(),z(12,`td`),P(13,jN,1,1)(14,MN,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 PN(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,NN,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 FN=class e{rpc=$(null);showComponent=Iv();staticReport=Q(()=>gE(this.rpc()));routes=j([]);filter=j(``);loading=j(!1);error=j(!1);live=Kv(hN);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,hN,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,gN,1,0),B(),P(8,_N,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,bN,6,1,`div`,11)(16,xN,2,0,`p`,12)(17,wN,2,1)(18,PN,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:[hN,TO],styles:[`.muted[_ngcontent-%COMP%] {
color: var(--%NS%text-2);
font-size: 13px;
line-height: 1.5;
@@ -4357,7 +4357,7 @@ h2[_ngcontent-%COMP%] {
font-family: var(--%NS%font-mono);
font-size: 12px;
overflow-wrap: anywhere;
-}`]})},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%] {
+}`]})},IN=[`ArrowDown`,`ArrowUp`,`Home`,`End`],LN=`[aria-pressed="true"], [aria-expanded="true"], [aria-current]:not([aria-current="false"]), .selected`,RN=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(LN))??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(!IN.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`]}})},zN=[`filterInput`],BN=e=>({id:e,label:`Status history`}),VN=e=>({id:e,label:`Value history`}),HN=(e,t)=>t.kind,UN=(e,t)=>t.name+t.file+t.line,WN=(e,t)=>t.epoch,GN=(e,t)=>t.id;function KN(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 qN(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 JN(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 YN(e,t){if(e&1&&(z(0,`p`,7)(1,`span`,19),J(2),B(),z(3,`span`,20),J(4),B(),P(5,JN,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 XN(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 ZN(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 QN(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 $N(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 eP(e,t){e&1&&J(0,` Every signal, computed and effect found in your source. Pick a kind to filter. `)}function tP(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 nP(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 rP(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 iP(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 aP(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,iP,6,7,`button`,24,HN),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 oP(e,t){e&1&&(z(0,`div`,11),V(1,`span`,27),z(2,`p`,28),J(3,`Scanning source for signals…`),B()())}function sP(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 cP(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 lP(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 uP(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,lP,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 dP(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 fP(e,t){if(e&1&&(z(0,`p`,32),J(1,`Signals from source scan (static analysis):`),B(),z(2,`div`,33),I(3,uP,9,7,`div`,34,UN,!1,dP,7,0,`div`,35),B()),e&2){let e=K();M(3),L(e.filteredSourceSignals())}}function pP(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 mP(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,pP,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 hP(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,mP,13,12,`li`,null,WN),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 gP(e,t){e&1&&P(0,hP,7,4),e&2&&F(K().selectedHistory().length?0:-1)}function _P(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 vP(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 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.error))}}function bP(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 xP(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 SP(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 CP(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 wP(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 TP(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 EP(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 DP(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 OP(e,t){if(e&1&&(z(0,`ul`,42),I(1,DP,5,4,`li`,null,GN),B()),e&2){let e=K(2).$implicit,t=K(2);R(`id`,`resource-internals-`+e.id),M(),L(t.internalsOf(e))}}function kP(e,t){if(e&1){let e=W();z(0,`div`,55)(1,`h3`,57),J(2),B(),P(3,xP,11,0,`p`,30),z(4,`dl`)(5,`dt`),J(6,`Status`),B(),z(7,`dd`),J(8),B(),P(9,SP,4,1),P(10,CP,4,1),P(11,wP,6,4),P(12,TP,6,4),P(13,EP,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,OP,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,BN,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 AP(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,_P,2,3,`span`,51),P(8,vP,2,2,`span`,52),V(9,`span`,53),B(),P(10,yP,3,3,`span`,54)(11,bP,3,3,`span`,54),B(),P(12,kP,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 jP(e,t){if(e&1&&(z(0,`h2`,48),J(1,`Resources`),B(),z(2,`ul`,49),I(3,AP,13,12,`li`,null,GN),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 NP(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 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(`Deps: `,t.getDependencies(e).length)}}function FP(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 IP(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 LP(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 RP(e,t){if(e&1&&(z(0,`h4`),J(1,`Dependencies (producers)`),B(),z(2,`ul`),I(3,LP,6,5,`li`,null,GN),B()),e&2){let e=K(4);M(3),L(e.getDependencies(e.selectedNode()))}}function zP(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 BP(e,t){if(e&1&&(z(0,`h4`),J(1,`Consumers`),B(),z(2,`ul`),I(3,zP,6,5,`li`,null,GN),B()),e&2){let e=K(4);M(3),L(e.getConsumers(e.selectedNode()))}}function VP(e,t){e&1&&(z(0,`p`,30),J(1),B()),e&2&&(M(),Y(t))}function HP(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,IP,6,4),B(),P(13,RP,5,0),P(14,BP,5,0),P(15,VP,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,VN,t.id))}}function UP(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,NP,3,3,`span`,54),z(10,`span`,39)(11,`span`),J(12),B(),P(13,PP,4,1),P(14,FP,4,1),B()(),P(15,HP,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 WP(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 GP(e,t){if(e&1&&(z(0,`li`,64)(1,`p`,28),J(2),B(),z(3,`p`,30),J(4),B(),P(5,WP,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 KP(e,t){if(e&1&&(z(0,`h2`,48),J(1,`Signals`),B(),z(2,`ul`,63),I(3,UP,16,15,`li`,null,GN,!1,GP,6,3,`li`,64),B()),e&2){let e=K();M(3),L(e.filteredNodes())}}var qP=`follow`;function JP(e){return Object.keys(e.pages).length?e.pages:e.graph?{[e.graph.pageId??``]:e.graph}:{}}var YP=`env:`,XP=50,ZP={selected:`picked`,routed:`rendered by the router`,root:`first component with signals`},QP={write:`set`,sample:`sampled`,initial:`initial`},$P={resolved:`ok`,local:`ok`,loading:`warn`,reloading:`warn`,error:`danger`},eF={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`},tF=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(()=>JP(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(eF).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:qP,label:`Follow the routed component`,hint:`automatic`},...i.map(e=>({value:YP+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:qP});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(JP(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!==qP?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(YP)?{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 ZP[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>=XP&&t>=n?`, showing the last ${n}`:``}, newest first.`:`No changes recorded yet. The entry below is the value seen first.`}statusTone(e){return $P[e]??`neutral`}internalsOf(e){let t=new Set(e.nodeIds);return(this.graph()?.nodes??[]).filter(e=>t.has(e.id))}sourceLabel(e){return QP[e]}kindColor(e){return eF[e]??eF.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,zN,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,KN,4,2,`div`,4),P(4,qN,4,2,`div`,5),B(),z(5,`p`,6),J(6),B(),P(7,YN,6,3,`p`,7)(8,XN,5,1,`p`,7),P(9,ZN,2,0,`p`,8),z(10,`p`,9),P(11,QN,1,0)(12,$N,1,0)(13,eP,1,0),B(),P(14,tP,2,0,`p`,8),P(15,nP,2,0,`p`,8),P(16,rP,2,2,`p`,8),P(17,aP,7,4,`div`,10),P(18,oP,4,0,`div`,11),P(19,sP,7,4,`div`,12)(20,cP,14,0,`div`,13),P(21,fP,6,1),ag(22,gP,1,1,`ng-template`,null,1,wv),z(24,`p`,14),J(25),B(),P(26,jP,5,0),P(27,KP,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,RN,GD,TO,fb,pb],styles:[`[_nghost-%COMP%] {
display: block;
min-width: 0;
color: var(--%NS%text);
@@ -5111,7 +5111,7 @@ button.node-card[_ngcontent-%COMP%] {
dd[_ngcontent-%COMP%] + dt[_ngcontent-%COMP%] {
margin-top: 8px;
}
-}`]})},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%] {
+}`]})},nF=[`queryInput`],rF=()=>({compact:!1}),iF=()=>({compact:!0}),aF=(e,t)=>t.node.injector.id,oF=(e,t)=>t.id,sF=(e,t)=>t.from+t.token+e,cF=(e,t)=>t.token+e,lF=(e,t)=>t.type,uF=(e,t)=>t.token+t.file+t.line;function dF(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 fF(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 pF(e,t){e&1&&P(0,fF,4,2,`div`,10),e&2&&F(K().pageOptions().length>1?0:-1)}function mF(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 hF(e,t){e&1&&(z(0,`span`,25),J(1),B()),e&2&&(M(),X(`Change detection: `,t))}function gF(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,`The page reported only part of its injector tree.`),B(),J(7,` It keeps at most 2000 element injectors and 2500 in all, and leaves out injectors nested more than 1000 levels deep, so a lookup path or a provider can point to one that is not listed. `),B()())}function _F(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 vF(e,t){e&1&&(z(0,`span`,40),J(1),B()),e&2&&(M(),X(`+`,t,` more`))}function yF(e,t){if(e&1&&(z(0,`div`,27)(1,`span`,38),J(2,`Provided by`),B(),I(3,_F,6,4,`button`,39,oF),P(5,vF,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 bF(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 xF(e,t){e&1&&J(0,` None of them provide anything themselves. `)}function SF(e,t){e&1&&J(0,` Turn off “Components only” to see directives. `)}function CF(e,t){e&1&&J(0,` Try a different search. `)}function wF(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,xF,1,0)(5,SF,1,0)(6,CF,1,0),B()()),e&2){let e=K(2);M(4),F(e.onlyProviding()?4:e.componentsOnly()&&e.view()===`element`?5:6)}}function TF(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 EF(e,t){e&1&&V(0,`span`,48)}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.component)}}function OF(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 kF(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 AF(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 jF(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,TF,3,2,`span`,47)(2,EF,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,DF,2,1,`span`,52)(10,OF,2,1,`span`,52),z(11,`span`,53),P(12,kF,6,2,`span`,54),P(13,AF,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 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 NF(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 PF(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 FF(e,t){if(e&1&&(z(0,`ul`,66),I(1,PF,2,3,`li`,73,Og),B()),e&2){let e=K();M(),L(e.injector.directives)}}function IF(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 LF(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 RF(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,LF,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 zF(e,t){if(e&1&&(z(0,`li`),P(1,IF,5,2,`span`,74)(2,RF,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 BF(e,t){e&1&&(z(0,`p`,68),J(1,`Only services this injector has already created are listed.`),B())}function VF(e,t){if(e&1&&(z(0,`span`,84),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function HF(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),X(`for `,e.from)}}function UF(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 WF(e,t){e&1&&(z(0,`span`,87),J(1,`optional, not provided`),B())}function GF(e,t){e&1&&(z(0,`span`,88),J(1,`not provided anywhere`),B())}function KF(e,t){if(e&1&&(z(0,`li`,81)(1,`div`,82)(2,`span`,83),J(3),B(),I(4,VF,2,1,`span`,84,Og),B(),z(6,`div`,85),P(7,HF,2,1,`span`),P(8,UF,5,3,`button`,86)(9,WF,2,0,`span`,87)(10,GF,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 qF(e,t){if(e&1&&(z(0,`ul`,79),I(1,KF,11,5,`li`,80,sF),B()),e&2){let e=K(2);M(),L(e.dependencies)}}function JF(e,t){e&1&&(z(0,`p`,72),J(1,`Nothing is injected through the constructor or inject().`),B())}function YF(e,t){e&1&&(z(0,`p`,72),J(1,`No service created here has injected anything yet.`),B())}function XF(e,t){if(e&1&&(z(0,`div`,67)(1,`h3`),J(2),z(3,`span`,16),J(4),B()(),P(5,BF,2,0,`p`,68),P(6,qF,3,0,`ul`,79)(7,JF,2,0,`p`,72)(8,YF,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 ZF(e,t){e&1&&(z(0,`span`,84),J(1,`viewProviders`),B())}function QF(e,t){e&1&&(z(0,`span`,84),J(1,`multi`),B())}function $F(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 eI(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,ZF,2,0,`span`,84),P(7,QF,2,0,`span`,84),B(),P(8,$F,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 tI(e,t){if(e&1&&(z(0,`ul`,71),I(1,eI,9,7,`li`,90,cF),B()),e&2){let e=K();M(),L(e.providers)}}function nI(e,t){e&1&&J(0,` No providers or viewProviders on this element. `)}function rI(e,t){e&1&&J(0,` This injector has no providers of its own. `)}function iI(e,t){if(e&1&&(z(0,`p`,72),P(1,nI,1,0)(2,rI,1,0),B()),e&2){let e=K();M(),F(e.injector.type===`element`?1:2)}}function aI(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,FF,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,zF,3,3,`li`,70,oF),B()(),P(15,XF,9,4,`div`,67),z(16,`div`,67)(17,`h3`),J(18,` Provides `),z(19,`span`,16),J(20),B()(),P(21,tI,3,0,`ul`,71)(22,iI,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 oI(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,mF,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,hF,2,1,`span`,25),B(),P(24,gF,8,0,`p`,26),P(25,yF,6,1,`div`,27)(26,bF,4,1,`div`,28),z(27,`div`,29),P(28,wF,7,1,`div`,30),z(29,`div`,31),G(`keydown`,function(t){return O(e),k(K().onTreeKey(t))}),I(30,jF,14,19,`div`,32,aF),B(),P(32,NF,8,2,`section`,33)(33,aI,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 sI(e,t){e&1&&(z(0,`div`,4),V(1,`span`,93),z(2,`p`,7),J(3,`Loading dependency injection data…`),B()())}function cI(e,t){e&1&&Ug(0,5),e&2&&(K(),R(`ngTemplateOutlet`,u_(3))(`ngTemplateOutletContext`,mv(2,rF)))}function lI(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 uI(e,t){e&1&&(P(0,lI,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 dI(e,t){e&1&&Ug(0,5),e&2&&(K(2),R(`ngTemplateOutlet`,u_(3))(`ngTemplateOutletContext`,mv(2,iF)))}function fI(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 pI(e,t){if(e&1&&(z(0,`span`,103),J(1),B()),e&2){let e=K().$implicit;M(),X(`providedIn: `,e.providedIn)}}function mI(e,t){if(e&1&&(z(0,`span`,106),J(1),B()),e&2){let e=K().$implicit;M(),X(`as `,e.source)}}function hI(e,t){if(e&1&&(z(0,`li`,100)(1,`div`,101)(2,`span`,102),J(3),B(),P(4,pI,2,1,`span`,103),B(),z(5,`div`,104),V(6,`app-source-link`,105),P(7,mI,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 gI(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,hI,8,5,`li`,100,uF),B()()),e&2){let e=t.$implicit;M(2),X(` `,e.label,` `),M(2),Y(e.items.length),M(2),L(e.items)}}function _I(e,t){if(e&1&&(z(0,`div`,96),I(1,gI,8,2,`section`,97,lF),B()),e&2){let e=K(2);M(),L(e.groupedProviders())}}function vI(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,dI,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,fI,7,1,`div`,30)(20,_I,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 yI=`inj-null`,bI=12,xI=600,SI={component:`var(--accent-text)`,directive:`var(--directive)`,environment:`var(--ok-text)`,null:`var(--text-3)`};function CI(e){return e.injector.type===`element`?e.injector.component?`component`:`directive`:`environment`}function wI(e){return e.injector.type===`element`?`<${e.injector.name}>`:e.injector.name}function TI(e){return Array.isArray(e)}var EI=class e{rpc=$(null);injector=E(Ss);nullId=yI;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 TI(e)?e:[]});environment=Q(()=>{let e=this.shownPage()?.environment;return TI(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(yI)}return r.map(e=>{let n=t.get(e);return{id:e,label:n?wI(n):e===yI?`Null injector`:`Not listed`,kind:n?CI(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:wI(n),kind:CI(n),tokens:r.map(e=>e.token).join(`, `)})}return t});providedBy=Q(()=>this.providerHits().slice(0,bI));providedByMore=Q(()=>Math.max(0,this.providerHits().length-bI));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)},xI);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 wI(e)}kind(e){return CI(e)}tone(e){return SI[e]??SI.null}kindById(e){let t=this.index().map.get(e);return t?CI(t):`null`}labelById(e){let t=this.index().map.get(e);return t?wI(t):e===yI?`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?wI(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,nF,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,dF,7,5,`ng-template`,null,0,wv)(4,pF,1,1,`ng-template`,null,1,wv),P(6,oI,34,19)(7,sI,4,0,`div`,4)(8,cI,1,3,`ng-container`,5)(9,uI,6,1)(10,vI,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,TO],styles:[`[_nghost-%COMP%] {
--%NS%directive: #7cb4ff;
display: block;
color: var(--%NS%text);
@@ -6029,11 +6029,11 @@ button[_ngcontent-%COMP%] {
.provider-meta[_ngcontent-%COMP%] .as[_ngcontent-%COMP%] {
color: var(--%NS%text-2);
-}`]})},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%] {
+}`]})},DI=1e3;function OI(e){return`${e>=1e3?`${DI}+`:String(e)} more ${e===1?`change`:`changes`} not shown`}function kI(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 AI(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 jI=`@type`,MI=new Set([`undefined`,`number`,`bigint`,`symbol`,`function`,`Date`,`RegExp`,`Error`,`Element`,`Map`,`Set`]);function NI(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&jI in e&&MI.has(e[jI])}function PI(e){return/^[A-Za-z_$][\w$]*$/.test(e)?e:JSON.stringify(e)}function FI(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+FI(e,n)).join(`,
+`)}\n${t}]`:`[]`;if(NI(e)){let r=e;switch(r[jI]){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}${FI(e,n)} => ${FI(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+FI(e,n)).join(`,
+`)}\n${t}}`:`Set(${r.size}) {}`}default:return String(r.value??r[jI])}}let r=Object.entries(e);return r.length?`{\n${r.map(([e,t])=>`${n}${PI(e)}: ${FI(t,n)}`).join(`,
+`)}\n${t}}`:`{}`}function II(e,t=120){let n=FI(e).replace(/\s*\n\s*/g,` `);return n.length>t?`${n.slice(0,t-1)}…`:n}var LI=[`eventDetailHeading`],RI=[`cancelButton`],zI=[`restoreButton`],BI=[`stateTree`],VI=[`filterInput`],HI=[`latestButton`],UI=e=>({selected:e,headingLevel:5,idPrefix:`ngrx-change`}),WI=e=>({selected:e,headingLevel:3,idPrefix:`ngrx-event`}),GI=(e,t)=>t.id,KI=(e,t)=>t.seq,qI=(e,t)=>t.key,JI=(e,t)=>t.name,YI=(e,t)=>t.idsKey,XI=(e,t)=>t.path,ZI=(e,t)=>t.kind,QI=(e,t)=>t.name+t.file+t.line;function $I(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 eL(e,t){if(e&1&&(z(0,`span`,14),J(1),B()),e&2){let e=K();M(),Y(e.liveStores().length)}}function tL(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 nL(e,t){e&1&&(z(0,`div`,16)(1,`p`,27),J(2,`Loading…`),B()())}function rL(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 iL(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 aL(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 oL(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 sL(e,t){if(e&1&&(z(0,`div`,17),P(1,iL,7,0)(2,aL,10,0)(3,oL,16,0),B()),e&2){let e=K();M(),F(e.usesSignals()?1:e.usesClassic()?2:3)}}function cL(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 lL(e,t){e&1&&(z(0,`li`,31),J(1,`No stores match this filter.`),B())}function uL(e,t){e&1&&V(0,`app-source-link`,41),e&2&&R(`file`,t)}function dL(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 fL(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 pL(e,t){if(e&1&&(z(0,`p`,42),J(1,` Referenced by `),I(2,fL,3,2,null,null,Og),B()),e&2){let e=K();M(2),L(e.signal.references)}}function mL(e,t){if(e&1&&(z(0,`p`,58),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,`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,mL,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 gL(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 _L(e,t){if(e&1&&(z(0,`dl`,61),I(1,gL,5,3,null,null,qI),B()),e&2){let e=K(4);M(),L(e.computedEntries())}}function vL(e,t){e&1&&(z(0,`p`,62),J(1,`No computed signals.`),B())}function yL(e,t){e&1&&(z(0,`span`,68),J(1,`signalMethod`),B())}function bL(e,t){e&1&&(z(0,`span`,68),J(1,`rxMethod`),B())}function xL(e,t){if(e&1&&(z(0,`li`,67),J(1),P(2,yL,2,0,`span`,68)(3,bL,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 SL(e,t){if(e&1&&(z(0,`ul`,64),I(1,xL,6,5,`li`,67,JI),B()),e&2){let e=K();M(),L(e.methods)}}function CL(e,t){e&1&&(z(0,`p`,62),J(1,`No methods.`),B())}function wL(e,t){if(e&1&&(z(0,`li`,67),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function TL(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 EL(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 DL(e,t){e&1&&(z(0,`span`,62),J(1,`None selected`),B())}function OL(e,t){if(e&1&&(z(0,`dl`,61)(1,`dt`),J(2,`Selected`),B(),z(3,`dd`),P(4,EL,2,2,`code`,66)(5,DL,2,0,`span`,62),B()()),e&2){let e=K().$implicit;M(4),F(e.selected===void 0?5:4)}}function kL(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,wL,2,1,`li`,67,Og),P(9,TL,2,2,`li`,76),B(),P(10,OL,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 AL(e,t){if(e&1&&(z(0,`section`,65)(1,`h4`,70),J(2,`Entities`),B(),z(3,`div`,71),I(4,kL,11,6,`div`,72,YI),B()()),e&2){let e=K();M(4),L(e.entities)}}function jL(e,t){if(e&1&&(z(0,`section`,59)(1,`h4`,60),J(2,`Computed`),B(),P(3,_L,3,0,`dl`,61)(4,vL,2,0,`p`,62),z(5,`h4`,63),J(6,`Methods`),B(),P(7,SL,3,0,`ul`,64)(8,CL,2,0,`p`,62),B(),P(9,AL,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 NL(e,t){if(e&1&&(z(0,`span`,68),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.origin)}}function PL(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` · `,K(3).formatDuration(e.durationMs),` `)}}function FL(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,NL,2,1,`span`,68),J(10),P(11,PL,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 IL(e,t){e&1&&J(0,` No entries match this filter. `)}function LL(e,t){e&1&&J(0,` No actions dispatched since the page connected. `)}function RL(e,t){e&1&&J(0,` No state changes yet. Method calls and patchState writes that change the state are recorded here. `)}function zL(e,t){if(e&1&&(z(0,`li`,31),P(1,IL,1,0)(2,LL,1,0)(3,RL,1,0),B()),e&2){let e=K(),t=K(2);M(),F(t.filter()?1:e.classic?2:3)}}function BL(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,UI,t))}}function VL(e,t){if(e&1&&V(0,`option`,88),e&2){let e=t.$implicit;R(`value`,e)}}function HL(e,t){if(e&1&&(z(0,`p`,94),J(1),B()),e&2){let e=K(4);M(),Y(e.restoreOff)}}function UL(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,VL,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,HL,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 WL(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,uL,1,1,`app-source-link`,41),P(10,dL,2,1,`span`,40),B(),P(11,pL,4,0,`p`,42),B(),P(12,hL,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,jL,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,FL,12,12,`li`,null,KI,!1,zL,4,1,`li`,31),B(),P(35,BL,2,4,`div`,55),B()(),P(36,UL,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 GL(e,t){if(e&1&&(z(0,`div`,18)(1,`ul`,30),I(2,cL,8,10,`li`,null,GI,!1,lL,2,0,`li`,31),B(),P(5,WL,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 KL(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 qL(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,KL,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 JL(e,t){e&1&&(z(0,`li`,31),J(1,`No events match this filter.`),B())}function YL(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,WI,t))}}function XL(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,qL,8,10,`li`,null,KI,!1,JL,2,0,`li`,31),B(),P(12,YL,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 ZL(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 QL(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 $L(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 eR(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 tR(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 nR(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 rR(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,nR,2,1,`pre`,107),B()),e&2){let e=t;M(4),Y(e.type),M(),F(e.payload===void 0?-1:5)}}function iR(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 aR(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 oR(e,t){e&1&&(z(0,`span`,120),J(1,`→`),B(),z(2,`span`,121),J(3,`became`),B())}function sR(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 cR(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,aR,2,1,`code`,118),P(7,oR,4,0),P(8,sR,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 lR(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 uR(e,t){if(e&1&&(z(0,`ul`,113),I(1,cR,9,7,`li`,114,XI),B(),P(3,lR,2,1,`p`,62)),e&2){let e=K(2).selected;M(),L(e.diff),M(2),F(e.diffTruncated?3:-1)}}function dR(e,t){e&1&&(z(0,`p`,62),J(1,`The state did not change.`),B())}function fR(e,t){if(e&1&&(z(0,`div`,109)(1,`div`,110),J(2,`State diff`),B(),P(3,iR,2,1,`button`,111),B(),P(4,uR,4,1)(5,dR,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 pR(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 mR(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 hR(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 gR(e,t){if(e&1&&P(0,mR,1,2)(1,hR,1,1),e&2){let e;F((e=K(3).store())?0:1,e)}}function _R(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,pR,1,1)(3,gR,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 vR(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 yR(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 bR(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 xR(e,t){if(e&1&&(z(0,`div`,124),P(1,vR,3,2,`button`,125),P(2,yR,2,2,`button`,126),B(),P(3,bR,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 SR(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 CR(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 wR(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 TR(e,t){if(e&1&&(z(0,`p`,106),P(1,SR,4,0)(2,CR,10,0)(3,wR,4,0),B()),e&2){let e=K().selected;M(),F(e.unrestorable===`dropped`?1:e.unrestorable===`not-recorded`?2:3)}}function ER(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,ZL,4,1),P(9,QL,4,1),P(10,$L,5,1),P(11,eR,5,1),P(12,tR,5,1),P(13,rR,6,2),B(),P(14,fR,6,3),P(15,_R,10,4,`div`,105),P(16,xR,4,3),P(17,TR,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 DR(e,t){if(e&1&&(z(0,`span`,14),J(1),B()),e&2){let e=K();M(),Y(e.sourceEntries().length)}}function OR(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 kR(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 AR(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 jR(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),V(8,`app-source-link`,141),B(),P(9,jR,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 NR(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 PR(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,AR,6,7,`button`,134,ZI),B(),z(7,`ul`,135),I(8,MR,10,7,`li`,136,QI,!1,NR,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 FR={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)`},IR={"signal-store":`signalStore`,"signal-state":`signalState`,"signal-method":`signalMethod`,"store-setup":`store setup`,store:`@ngrx/store`,event:`event`},LR={dispatch:`store.dispatch(action)`,effect:`NgRx effect (Store.next)`,reactive:`store.dispatch(() => action)`};function RR(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 zR=new Set([`action`,`reducer`,`effect`,`selector`,`feature`,`store-setup`]),BR=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?AI(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?FI(e.signal?e.signal.state:e.classic?.state):``});computedEntries=Q(()=>Object.entries(this.store()?.signal?.computed??{}).map(([e,t])=>({key:e,value:II(t,160),full:FI(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(()=>RR(this.dispatchPayload()).error??``);dispatchRequest=Q(()=>{let e=this.dispatchType().trim(),{payload:t,error:n}=RR(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=>zR.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(FI(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 FR[e]??`var(--text-3)`}kindLabel(e){return IR[e]??e}originText(e){return LR[e]??e}changesLabel=kI;moreChanges=OI;opLabel(e){return e===`add`?`added`:e===`remove`?`removed`:`changed`}prettyText(e){return FI(e)}shortText(e){return II(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,LI,5)(t.cancelButton,RI,5)(t.restoreButton,zI,5)(t.stateTree,BI,5)(t.filterInput,VI,5)(t.latestButton,HI,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,$I,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,eL,2,1,`span`,14),B(),P(12,tL,7,0,`div`,15)(13,nL,3,0,`div`,16)(14,rL,5,0,`div`,17)(15,sL,4,1,`div`,17)(16,GL,6,2,`div`,18),z(17,`p`,19),J(18),B()(),P(19,XL,13,3,`section`,20),ag(20,ER,18,16,`ng-template`,null,1,wv),z(22,`section`,21)(23,`div`,12)(24,`h2`,22),J(25,`Source declarations`),B(),P(26,DR,2,1,`span`,14),B(),P(27,OR,4,0,`div`,23)(28,kR,29,0,`div`,24)(29,PR,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,RN,GD,sb,TO],styles:[`[_nghost-%COMP%] {
display: grid;
gap: 24px;
min-width: 0;
@@ -7039,7 +7039,7 @@ textarea[aria-invalid=true][_ngcontent-%COMP%] {
.kv[_ngcontent-%COMP%] {
grid-template-columns: minmax(0, 1fr);
}
-}`]})},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%] {
+}`]})},VR=[`heading`];function HR(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 UR(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 WR(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 GR(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 KR(e,t){if(e&1&&(H(0,`p`,13),J(1),U()),e&2){let e=K();M(),Y(e.writesOff)}}var qR=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,VR,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,HR,5,0,`div`,6)(11,UR,2,2,`pre`,7),P(12,WR,6,4,`div`,8)(13,GR,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,KR,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);
}
@@ -7380,7 +7380,7 @@ h3[_ngcontent-%COMP%]:focus-visible {
.status[_ngcontent-%COMP%]:empty {
height: 0;
margin: -12px 0 0;
-}`]})};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%] {
+}`]})};function JR(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 YR(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 XR(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 ZR(e,t){e&1&&(H(0,`div`,1),zg(1,`span`,5),H(2,`p`),J(3,`Checking the form for problems…`),U()())}function QR(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 $R(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 ez(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,$R,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 tz(e,t){if(e&1&&(H(0,`p`,9)(1,`span`,10),J(2),U(),J(3),U(),H(4,`ul`,11),I(5,ez,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 nz=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,JR,7,0,`div`,0)(1,YR,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);
}
@@ -7652,7 +7652,7 @@ code[_ngcontent-%COMP%] {
flex-wrap: wrap;
gap: 8px 12px;
align-items: center;
-}`]})},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%] {
+}`]})},rz=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,XR,7,0,`div`,0)(1,ZR,4,0,`div`,1)(2,QR,8,0,`div`,2)(3,tz,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);
}
@@ -8008,7 +8008,7 @@ code[_ngcontent-%COMP%] {
font-weight: 600;
letter-spacing: 0.06em;
text-transform: uppercase;
-}`]})},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%] {
+}`]})},iz=[`pathInput`],az=()=>[],oz=(e,t)=>t.formId+`#`+t.seq;function sz(e,t){e&1&&V(0,`span`,6)}function cz(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 lz(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 uz(e,t){if(e&1&&(z(0,`span`,26),J(1),B()),e&2){let e=K().$implicit;M(),X(`×`,e.count)}}function dz(e,t){if(e&1&&(z(0,`span`,26),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.origin)}}function fz(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 pz(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,az)).join(`, `))}}function mz(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 hz(e,t){if(e&1&&(z(0,`div`,27),P(1,mz,6,1),J(2),B()),e&2){let e=K().$implicit;M(),F(e.prev===void 0?-1:1),M(),X(` `,e.detail,` `)}}function gz(e,t){if(e&1&&(z(0,`span`,28),J(1),B()),e&2){let e=K().$implicit;M(),X(`from `,e.caller)}}function _z(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,lz,2,2,`span`,26),P(10,uz,2,1,`span`,26),P(11,dz,2,1,`span`,26),P(12,fz,2,2,`span`,26),P(13,pz,2,4,`span`,26),B(),P(14,hz,3,2,`div`,27),P(15,gz,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 vz(e,t){if(e&1&&(z(0,`ol`,19),I(1,_z,16,12,`li`,null,oz),B()),e&2){let e=K();M(),L(e.shown())}}function yz(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 bz(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 xz=[`all`,`user`,`code`,`agent`,`devtools`],Sz=[`value`,`status`,`touched`,`dirty`,`submit`,`reset`,`added`,`removed`,`moved`,`validators`],Cz=class e{events=$.required();recording=$(!1);record=Iv();toggle(e){let t=e.target;t.checked=this.recording(),this.record.emit(!this.recording())}origins=xz;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=Sz.filter(t=>e.has(t)),r=[...e].filter(e=>!Sz.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,iz,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,sz,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,cz,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,vz,3,0,`ol`,19)(27,yz,7,0,`div`,20)(28,bz,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);
}
@@ -8601,7 +8601,7 @@ time[_ngcontent-%COMP%] {
justify-content: center;
padding: 0 8px;
}
-}`]})},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%] {
+}`]})},wz=(e,t)=>t.path;function Tz(e,t){e&1&&(H(0,`span`,6),J(1,`duplicate name`),U())}function Ez(e,t){if(e&1&&(H(0,`p`,7),J(1),U()),e&2){let e=K();M(),Y(e.description)}}function Dz(e,t){if(e&1&&(H(0,`p`,8),J(1),U()),e&2){let e=K();M(),Y(e.error)}}function Oz(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 kz(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,Oz,4,2,`li`,null,wz),U()()),e&2){let e=K();M(4),L(e.blocking)}}function Az(e,t){e&1&&(H(0,`span`,12),J(1,`required`),U())}function jz(e,t){if(e&1&&(H(0,`li`)(1,`code`),J(2),U(),P(3,Az,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,jz,4,2,`li`,null,Og),U()()),e&2){let e=K();M(4),L(e.inputs)}}function Nz(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 Pz(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,Nz,4,2,`li`,null,wz),U()()),e&2){let e=K();M(4),L(e.requiredChanged)}}function Fz(e,t){if(e&1&&(H(0,`span`,10),J(1),U()),e&2){let e=K().$implicit;M(),X(``,e.ms,` ms`)}}function Iz(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 Lz(e,t){if(e&1&&(H(0,`pre`,13),J(1),U()),e&2){let e=K().$implicit;M(),Y(e.detail)}}function Rz(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,Fz,2,1,`span`,10),P(7,Iz,2,1,`span`,10),P(8,Lz,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 zz(e,t){if(e&1&&(H(0,`ul`),I(1,Rz,9,10,`li`,null,Dg),U()),e&2){let e=K();M(),L(e.calls)}}function Bz(e,t){e&1&&(H(0,`p`,10),J(1,` Calls are not recorded for a tool registered before the inspector attached. `),U())}function Vz(e,t){e&1&&(H(0,`p`,10),J(1,`No agent has called this tool since the inspector attached.`),U())}function Hz(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,Tz,2,0,`span`,6),U(),P(9,Ez,2,1,`p`,7),P(10,Dz,2,1,`p`,8),P(11,kz,6,0,`div`,9),P(12,Mz,6,0,`div`,9),P(13,Pz,6,0,`div`,9),H(14,`div`,9)(15,`p`,10),J(16,`Recent calls`),U(),P(17,zz,3,0,`ul`)(18,Bz,2,0,`p`,10)(19,Vz,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 Uz(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 Wz={running:`running`,submitted:`submitted`,failed:`submit failed`,done:`done`,threw:`threw`},Gz=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 Wz[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,Hz,20,10,`section`,0)(1,Uz,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;
}
@@ -8721,7 +8721,7 @@ li[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] + *[_ngcontent-%COMP%] {
font-size: 12px;
white-space: pre-wrap;
overflow-wrap: anywhere;
-}`]})},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%] {
+}`]})},Kz=()=>[],qz=(e,t)=>t.id,Jz=(e,t)=>t.node.path;function Yz(e,t){e&1&&(z(0,`div`,1),V(1,`span`,5),z(2,`p`),J(3,`Connecting to the devtools server…`),B()())}function Xz(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 Zz(e,t){e&1&&(z(0,`div`,1),V(1,`span`,5),z(2,`p`),J(3,`Loading forms…`),B()())}function Qz(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 $z(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 eB(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 tB(e,t){e&1&&(z(0,`span`,23),J(1),z(2,`span`,22),J(3,` errors`),B()()),e&2&&(M(),Y(t))}function nB(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,tB,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 rB(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 iB(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 aB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K();M(),Y(e.submitted?`submitted`:`not submitted`)}}function oB(e,t){e&1&&(z(0,`span`),J(1,`submitting`),B())}function sB(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 cB(e,t){if(e&1&&(z(0,`details`,31)(1,`summary`),J(2),B(),z(3,`ul`),I(4,sB,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 lB(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 uB(e,t){if(e&1&&(z(0,`p`,41),J(1),B()),e&2){let e=K(3);M(),Y(e.writesOff)}}function dB(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 fB(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 pB(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 mB(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 hB(e,t){if(e&1&&(z(0,`code`),J(1),yv(2,`json`),B(),P(3,pB,6,3,`div`,7),P(4,mB,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 gB(e,t){e&1&&(z(0,`span`,7),J(1,`not created yet`),B())}function _B(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 vB(e,t){e&1&&(z(0,`span`),J(1,`touched`),B())}function yB(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 bB(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 xB(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 SB(e,t){e&1&&(z(0,`span`,65),J(1,`view out of sync`),B())}function CB(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 wB(e,t){e&1&&(z(0,`span`),J(1,`required`),B())}function TB(e,t){e&1&&(z(0,`span`),J(1,`readonly`),B())}function EB(e,t){e&1&&(z(0,`span`),J(1,`hidden`),B())}function DB(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 OB(e,t){e&1&&(z(0,`span`),J(1,`debouncing`),B())}function kB(e,t){e&1&&(z(0,`span`),J(1,`validators`),B())}function AB(e,t){e&1&&(z(0,`span`),J(1,`async validator`),B())}function jB(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 NB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),X(`name `,e.node.name)}}function PB(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 FB(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=t.$implicit;M(),X(`disabled: `,e)}}function IB(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 LB(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 RB(e,t){if(e&1&&(z(0,`div`),J(1),z(2,`code`,48),J(3),B(),P(4,IB,2,1,`span`,68),P(5,LB,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 zB(e,t){e&1&&(z(0,`div`,67),J(1,`not shown to the user`),B())}function BB(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 VB(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,hB,5,5),B(),z(8,`td`,63),P(9,gB,2,0,`span`,7)(10,_B,2,2,`span`,29),B(),z(11,`td`,64),P(12,vB,2,0,`span`),P(13,yB,2,1,`span`),P(14,bB,2,1,`span`),P(15,xB,2,1,`span`,65),P(16,SB,2,0,`span`,65),P(17,CB,2,1,`span`),P(18,wB,2,0,`span`),P(19,TB,2,0,`span`),P(20,EB,2,0,`span`),P(21,DB,2,1,`span`),P(22,OB,2,0,`span`),P(23,kB,2,0,`span`),P(24,AB,2,0,`span`),I(25,jB,2,1,`span`,null,Og),P(27,MB,2,1,`span`),P(28,NB,2,1,`span`),I(29,PB,3,3,`span`,null,Dg),I(31,FB,2,1,`span`,null,Dg),B(),z(33,`td`,66),I(34,RB,6,4,`div`,null,Dg),P(36,zB,2,0,`div`,67),B()(),P(37,BB,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,Kz)),M(2),L(e.node.disabledReasons??mv(29,Kz)),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 HB(e,t){e&1&&J(0),e&2&&X(` No field path matches "`,K(5).filter(),`". `)}function UB(e,t){e&1&&J(0,` No field matches the selected filters. `)}function WB(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 GB(e,t){if(e&1&&(z(0,`tr`)(1,`td`,70)(2,`p`),P(3,HB,1,1)(4,UB,1,0),B(),P(5,WB,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 KB(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 qB(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,fB,3,2,`label`,null,qz),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,VB,38,30,null,null,Jz,!1,GB,6,2,`tr`),B()()(),P(28,KB,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 JB(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 YB(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 XB(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 ZB(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,aB,2,1,`span`),P(16,oB,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,cB,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,lB,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,uB,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,dB,2,5,`button`,44,qz),B(),z(51,`div`,45),P(52,qB,29,4)(53,JB,2,4)(54,YB,1,3,`app-forms-submit`,46)(55,XB,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 QB(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,eB,3,1,`label`,12),z(7,`ul`,13),I(8,nB,12,10,`li`,null,qz),B()(),P(10,rB,7,2,`section`,14)(11,iB,7,1,`section`,14)(12,ZB,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 $B=[{id:`fields`,label:`Fields`},{id:`timeline`,label:`Timeline`},{id:`submit`,label:`Submit`},{id:`lint`,label:`Lint`}],eV=[{id:`invalid`,label:`Invalid`},{id:`dirty`,label:`Dirty`},{id:`touched`,label:`Touched`},{id:`disabled`,label:`Disabled`},{id:`hidden-error`,label:`Error not shown`}];function tV(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 nV(e){return e.errors.length+(e.children??[]).reduce((e,t)=>e+nV(t),0)}function rV(e){return e.children?e.children.reduce((e,t)=>e+rV(t),0):+(e.type===`control`&&e.materialized!==!1)}var iV=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=$B;chips=eV;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:rV(e.root),errors:nV(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=>tV(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,Yz,4,0,`div`,1)(1,Xz,7,0,`div`,2)(2,Zz,4,0,`div`,1)(3,Qz,5,0,`div`,3)(4,$z,7,2,`div`,3)(5,QB,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:[qR,Cz,nz,rz,Gz,iO,pb],styles:[`.muted[_ngcontent-%COMP%] {
color: var(--%NS%text-2);
}
@@ -9770,7 +9770,7 @@ code[_ngcontent-%COMP%] {
.divider[_ngcontent-%COMP%] {
display: none;
}
-}`]})},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%] {
+}`]})},aV=[`filterInput`],oV=(e,t)=>t.file+t.name,sV=(e,t)=>t.file+`:`+t.line,cV=(e,t)=>t.name;function lV(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 uV(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 dV(e,t){e&1&&(z(0,`div`,15),V(1,`span`,29),z(2,`p`,30),J(3,`Scanning pipes…`),B()())}function fV(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 pV(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 mV(e,t){e&1&&J(0,` Couldn't scan the source again. The list keeps the last scan. `)}function hV(e,t){e&1&&J(0,` Couldn't scan the source. Only pipes seen on the page are listed. `)}function gV(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,mV,1,0)(6,hV,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 _V(e,t){e&1&&(z(0,`span`,46),J(1,`stale?`),B())}function vV(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 yV(e,t){e&1&&(z(0,`span`,48),J(1,`built-in`),B())}function bV(e,t){e&1&&(z(0,`span`,48),J(1,`runtime only`),B())}function xV(e,t){e&1&&(z(0,`span`,48),J(1,`NgModule`),B())}function SV(e,t){e&1&&(z(0,`span`,50),J(1,`No source location`),B())}function CV(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;Z(` `,e.file,`:`,e.line,` `)}}function wV(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 TV(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 EV(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,_V,2,0,`span`,46),P(10,vV,2,1,`span`,47),P(11,yV,2,0,`span`,48),P(12,bV,2,0,`span`,48),P(13,xV,2,0,`span`,48),z(14,`span`,48),J(15),B()(),z(16,`span`,49),P(17,SV,2,0,`span`,50)(18,CV,1,2),P(19,wV,2,1,`span`,51)(20,TV,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 DV(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,EV,21,16,`li`,null,oV),B()}if(e&2){let e=K(2);M(),L(e.filtered())}}function OV(e,t){e&1&&J(0),e&2&&X(` Nothing matches “`,K(3).filter().trim(),`” in this view. `)}function kV(e,t){e&1&&J(0,` None of the pipes fit this filter. `)}function AV(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,OV,1,1)(5,kV,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 jV(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 NV(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 PV(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 FV(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 IV(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,FV,2,2,`li`,55,sV),B()()),e&2){let e=K();M(4),Y(e.usageCount),M(2),L(e.usages)}}function LV(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 RV(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 zV(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 BV(e,t){if(e&1&&(z(0,`li`),P(1,RV,5,3,`button`,62)(2,zV,5,2,`span`,63),B()),e&2){let e,n=t.$implicit;M(),F((e=n.targets?.[0])?1:2,e)}}function VV(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 HV(e,t){if(e&1&&(z(0,`span`,66),J(1),B()),e&2){let e=K(2);M(),Y(e.lastError)}}function UV(e,t){if(e&1&&(z(0,`dt`),J(1,`Errors`),B(),z(2,`dd`),J(3),P(4,HV,2,1,`span`,66),B()),e&2){let e=K();M(3),X(` `,e.errorCount,` `),M(),F(e.lastError?4:-1)}}function WV(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 GV(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 KV(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 qV(e,t){if(e&1&&(z(0,`span`,69),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.lastCaller)}}function JV(e,t){if(e&1&&(z(0,`li`,67),P(1,WV,3,2,`button`,62)(2,GV,3,1,`span`,63),z(3,`span`,66),J(4),z(5,`span`,68),J(6),B(),P(7,KV,2,1,`span`,68),B(),P(8,qV,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 YV(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 XV(e,t){if(e&1&&(z(0,`dt`),J(1,`Per instance`),B(),z(2,`dd`)(3,`ul`,58),I(4,JV,9,6,`li`,67,Dg),B(),P(6,YV,2,2,`p`,61),B()),e&2){let e=K();M(4),L(e.instances),M(2),F(e.instanceTotal?6:-1)}}function ZV(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 QV(e,t){if(e&1&&(z(0,`dt`),J(1,`Calls`),B(),z(2,`dd`),J(3),B(),P(4,VV,4,3),P(5,UV,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,XV,7,1),P(15,ZV,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 $V(e,t){e&1&&(z(0,`dt`),J(1,`Calls`),B(),z(2,`dd`,70),J(3,`None recorded yet.`),B())}function eH(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 tH(e,t){e&1&&(z(0,`p`,61),J(1,`Turn on “Record calls” to see call counts and values.`),B())}function nH(e,t){if(e&1&&(P(0,LV,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,BV,3,1,`li`,null,cV),B()(),P(12,QV,16,7)(13,$V,4,0),B(),P(14,eH,2,0,`p`,61),P(15,tH,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 rH(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 iH(e,t){if(e&1&&(z(0,`header`,52)(1,`h2`,53),J(2),B(),z(3,`span`,48),J(4),B(),P(5,jV,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,NV,4,2),P(20,PV,4,1),z(21,`dt`),J(22,`Pure`),B(),z(23,`dd`),J(24),B()()(),P(25,IV,8,1,`div`,54),z(26,`div`,54)(27,`h3`),J(28,`Live on the page`),B(),P(29,nH,16,5)(30,rH,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 aH(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 oH(e,t){if(e&1&&(P(0,gV,9,2,`div`,33),z(1,`div`,34)(2,`div`,35),P(3,DV,3,0,`ul`,36)(4,AV,8,1,`div`,37),B(),z(5,`section`,38),P(6,iH,31,13)(7,aH,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 sH(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 cH(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 lH(e,t){if(e&1&&(z(0,`span`,78),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.component)}}function uH(e,t){e&1&&(z(0,`span`,48),J(1,`no source`),B())}function dH(e,t){e&1&&(z(0,`span`,46),J(1,`duplicate subscription`),B())}function fH(e,t){e&1&&(z(0,`span`,46),J(1,`resubscribing`),B())}function pH(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,cH,2,2,`button`,77)(2,lH,2,1,`span`,78),P(3,uH,2,0,`span`,48),P(4,dH,2,0,`span`,46),P(5,fH,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 mH(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,sH,2,2,`p`,61),z(14,`ul`,74),I(15,pH,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 hH(e,t){e&1&&(z(0,`span`,21),J(1),B()),e&2&&(M(),Y(t.length))}function gH(e,t){e&1&&(z(0,`p`,22),J(1,`Couldn't run the lint check. Try Refresh.`),B())}function _H(e,t){e&1&&(z(0,`p`,23),J(1,`Checking…`),B())}function vH(e,t){e&1&&(z(0,`p`,24),J(1,`No problems found.`),B())}function yH(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 bH(e,t){if(e&1&&J(0),e&2){let e=K().$implicit;X(` `,e.pipe,` `)}}function xH(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,yH,4,1,`button`,86)(9,bH,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 SH(e,t){if(e&1&&(z(0,`ul`,25),I(1,xH,18,9,`li`,81,Dg),B()),e&2){let e=K();M(),L(e.lint())}}var CH=5e3,wH=[{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`}],TH=class e{destroyRef=E(ws);host=E(Nl);injector=E(Ss);filterInput=Kv(`filterInput`);rpc=$(null);kindOptions=wH;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.`)},CH)}}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,aV,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,lV,6,1,`p`,14),P(19,uV,8,1,`p`,14),P(20,dV,4,0,`div`,15)(21,fV,7,0,`div`,16)(22,pV,5,0,`div`,17)(23,oH,8,3),P(24,mH,17,2,`section`,18),z(25,`section`,19)(26,`h2`,20),J(27,` Lint `),P(28,hH,2,1,`span`,21),B(),P(29,gH,2,0,`p`,22)(30,_H,2,0,`p`,23)(31,vH,2,0,`p`,24)(32,SH,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,TO],styles:[`[_nghost-%COMP%] {
display: block;
color: var(--%NS%text);
font-size: 13px;
@@ -10531,7 +10531,7 @@ button.pipe-link[_ngcontent-%COMP%]:focus-visible {
.spinner[_ngcontent-%COMP%] {
animation: none;
}
-}`]})},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";
+}`]})},EH=()=>[],DH=()=>[`/`],OH=(e,t)=>t.id,kH=(e,t)=>t.route.id,AH=(e,t)=>t[0],jH=(e,t)=>t.file+t.method,MH=(e,t)=>t.path,NH=(e,t)=>t.mode,PH=(e,t)=>t.file,FH=(e,t)=>t.rule;function IH(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 LH(e,t){e&1&&(z(0,`div`,1),V(1,`span`,6),z(2,`span`),J(3,`Reading the project…`),B()())}function RH(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 zH(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 BH(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 VH(e,t){e&1&&(z(0,`div`,26),J(1),B()),e&2&&(M(),Y(t))}function HH(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 UH(e,t){if(e&1&&(z(0,`span`,31),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.fullPath)}}function WH(e,t){if(e&1&&(z(0,`li`),P(1,HH,2,2,`app-source-link`,34)(2,UH,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 GH(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 KH(e,t){if(e&1&&(z(0,`div`,33),I(1,GH,2,2,`span`,36,AH),B()),e&2){let e=K(2),t=K(3);M(),L(t.paramList(e.match.params))}}function qH(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,OH),B(),P(6,KH,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 JH(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 YH(e,t){if(e&1&&(z(0,`span`,31),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.path)}}function XH(e,t){if(e&1&&(z(0,`li`),P(1,JH,2,2,`app-source-link`,34)(2,YH,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 ZH(e,t){if(e&1&&(z(0,`ul`,37),I(1,XH,5,2,`li`,null,Dg),B()),e&2){let e=K(2);M(),L(e.match.rejected.slice(0,5))}}function QH(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,ZH,3,0,`ul`,37)),e&2){let e=K();M(),Y(e.url),M(2),F(e.match.rejected.length?3:-1)}}function $H(e,t){if(e&1&&(z(0,`div`,27),P(1,qH,7,2)(2,QH,4,2),B()),e&2){let e=t;N(`data-tone`,e.match.matched?`good`:`bad`),M(),F(e.match.matched?1:2)}}function eU(e,t){e&1&&(z(0,`span`,39),J(1,`└`),B())}function tU(e,t){e&1&&(z(0,`span`,41),J(1,`open`),B())}function nU(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 rU(e,t){e&1&&(z(0,`span`,4),J(1,`folder only`),B())}function iU(e,t){if(e&1&&(z(0,`span`,44),J(1),B()),e&2){let e=t.$implicit;M(),X(``,e,`()`)}}function aU(e,t){if(e&1&&(z(0,`span`,45),J(1),B()),e&2){let e=K().$implicit;M(),X(`"`,e.route.title,`"`)}}function oU(e,t){if(e&1&&(z(0,`span`,36),J(1),B()),e&2){let e=K().$implicit;M(),Y(e)}}function sU(e,t){if(e&1&&P(0,oU,2,1,`span`,36),e&2){let e=t.$implicit;F(e===`title`?-1:0)}}function cU(e,t){if(e&1&&(z(0,`tr`)(1,`td`)(2,`div`,38),P(3,eU,2,0,`span`,39),z(4,`span`,40),J(5),B(),z(6,`span`,35),J(7),B(),P(8,tU,2,0,`span`,41),B()(),z(9,`td`),P(10,nU,4,3,`app-source-link`,42)(11,rU,2,0,`span`,4),B(),z(12,`td`)(13,`div`,43),I(14,iU,2,1,`span`,44,Og),B()(),z(16,`td`),P(17,aU,2,1,`span`,45),I(18,sU,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,EH))}}function lU(e,t){e&1&&J(0,` No route matches the filter. Try part of a path or a file name. `)}function uU(e,t){e&1&&J(0,` No file routes yet. Add a .page.ts file under src/app/pages. `)}function dU(e,t){if(e&1&&(z(0,`tr`)(1,`td`,47),P(2,lU,1,0)(3,uU,1,0),B()()),e&2){let e=K(3);M(2),F(e.filter().trim()?2:3)}}function fU(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,VH,2,1,`div`,26)(12,$H,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,cU,20,14,`tr`,30,kH,!1,dU,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 pU(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 mU(e,t){if(e&1&&(z(0,`div`,48)(1,`strong`),J(2,`load() ran twice`),B(),J(3,` for `),I(4,pU,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 hU(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 gU(e,t){if(e&1&&(z(0,`div`,48)(1,`strong`),J(2,`Server function read ran twice`),B(),J(3,`: `),I(4,hU,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 _U(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 vU(e,t){if(e&1&&J(0),e&2){let e=K(4);Z(` Showing the newest `,e.shownCount(),` of `,e.matchingCalls().length,`. `)}}function yU(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 bU(e,t){if(e&1&&(z(0,`p`,66),P(1,vU,1,2),P(2,yU,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 NW(e,t){if(e&1&&(z(0,`p`,4),J(1),B(),z(2,`ul`,113),I(3,MW,18,8,`li`,null,FH),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 PW(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 FW(e,t){e&1&&P(0,NW,5,2)(1,PW,4,0,`div`,112),e&2&&F(+!K(2).findings().length)}function IW(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,zH,5,2,`div`,11),B(),z(27,`div`,12),G(`keydown`,function(t){return O(e),k(K().onKey(t))}),I(28,BH,4,7,`button`,13,OH),B(),z(30,`div`,14),P(31,fU,29,6)(32,XU,65,21)(33,bW,18,3)(34,EW,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 LW={"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.`}},RW=200,zW=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`]),BW={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`},HW={success:`succeeded`,redirect:`redirected`,invalid:`validation errors`,error:`failed`},UW={success:`good`,redirect:`info`,invalid:`warn`,error:`bad`};function WW(e,t=0,n=[]){for(let r of e)n.push({route:r,depth:t}),WW(r.children,t+1,n);return n}var GW=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=RW;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>=RW);allRoutes=Q(()=>WW(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:BW[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=LW[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=zW.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 VW[e]}kindCount(e){return e===`all`?this.allCalls().length:this.allCalls().filter(t=>t.kind===e).length}modeLabel(e){return BW[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 HW[e]}outcomeTone(e){return UW[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,IH,7,0,`div`,0)(1,LH,4,0,`div`,1)(2,RH,14,0,`div`,2)(3,IW,36,10),e&2&&F(t.project()===null&&t.loadFailed()?0:t.project()===null?1:t.project().analog?3:2)},dependencies:[GD,TO],styles:[`@charset "UTF-8";
[_nghost-%COMP%] {
--%NS%good: var(--%NS%ok);
--%NS%bad: var(--%NS%danger);
@@ -11879,7 +11879,7 @@ h2[_ngcontent-%COMP%] {
color: var(--%NS%text-strong);
font-size: 15px;
font-weight: 600;
-}`]})},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";
+}`]})},KW=(e,t)=>t.id,qW=(e,t)=>t.id+t.kind,JW=(e,t)=>t.side+t.id,YW=(e,t)=>t.key;function XW(e,t){e&1&&(z(0,`div`,0),V(1,`span`,67),z(2,`span`),J(3,`Loading…`),B()())}function ZW(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 QW(e,t){e&1&&(z(0,`span`,81),J(1,`this page`),B())}function $W(e,t){e&1&&(z(0,`span`,82),J(1,`overridden`),B())}function eG(e,t){e&1&&(z(0,`span`,83),J(1,`aborted`),B())}function tG(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,QW,2,0,`span`,81),P(18,$W,2,0,`span`,82),P(19,eG,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 nG(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 rG(e,t){if(e&1&&(z(0,`span`,88),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.note)}}function iG(e,t){if(e&1&&(z(0,`p`,87)(1,`span`,82),J(2),B(),z(3,`span`),J(4),B(),P(5,rG,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 aG(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,iG,6,3,`p`,87,qW)),e&2){let e=K();M(4),L(e.overrides)}}function oG(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 sG(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 cG(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 lG(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 uG(e,t){if(e&1&&(z(0,`p`,56),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.reason)}}function dG(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,oG,3,1),J(8),B()(),P(9,sG,5,4,`div`),P(10,cG,5,1,`div`),P(11,lG,5,1,`div`),B(),P(12,uG,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 fG(e,t){if(e&1&&(z(0,`h3`),J(1,`Router during the render`),B(),I(2,dG,13,7,null,null,Dg)),e&2){let e=K();M(2),L(e.navigations)}}function pG(e,t){e&1&&(z(0,`span`,81),J(1,`cached`),B())}function mG(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 hG(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 gG(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,pG,2,0,`span`,81)(10,mG,2,1,`span`,91),B(),P(11,hG,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 _G(e,t){e&1&&(z(0,`p`,56),J(1,`The render made no HttpClient calls.`),B())}function vG(e,t){e&1&&(z(0,`p`,92),J(1),B()),e&2&&(M(),X(`Why: `,t,`.`))}function yG(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,vG,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 bG(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,yG,8,4,null,null,KW)),e&2){let e=K(3);M(),X(`Fetched again in the browser (`,e.refetched().length,`)`),M(3),L(e.refetched())}}function xG(e,t){e&1&&(z(0,`p`,86),J(1,`No server call ran again in the browser.`),B())}function SG(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,nG,11,1,`p`,56),P(33,aG,6,0),P(34,fG,4,0),z(35,`h3`),J(36),B(),I(37,gG,12,11,null,null,KW,!1,_G,2,0,`p`,56),P(40,bG,6,1)(41,xG,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 CG(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,tG,20,20,`tr`,71,KW),B()()(),P(19,SG,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 wG(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 TG(e,t){e&1&&(z(0,`span`,94),J(1,`transfer cache`),B())}function EG(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 DG(e,t){e&1&&(z(0,`span`,82),J(1,`mocked`),B())}function OG(e,t){e&1&&(z(0,`span`,83),J(1,`faulted`),B())}function kG(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 AG(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,TG,2,0,`span`,94),P(19,EG,2,1,`span`,94),P(20,DG,2,0,`span`,82),P(21,OG,2,0,`span`,83),P(22,kG,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 jG(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,AG,23,26,`tr`,71,JW),B()()()),e&2){let e=K();M(19),L(e.visibleCalls())}}function MG(e,t){e&1&&J(0),e&2&&X(` Nothing matches “`,K(2).callQuery().trim(),`” with these filters. `)}function NG(e,t){e&1&&J(0),e&2&&X(` None of the `,K(2).timeline().length,` requests fit these filters. `)}function PG(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,MG,1,1)(5,NG,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 IG(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 LG(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 RG(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,IG,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,LG,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 zG(e,t){if(e&1&&(z(0,`p`,31),J(1),B()),e&2){let e=K();M(),Y(e.writesOff)}}function BG(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 HG(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 UG(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),X(``,e.delayMs,` ms`)}}function WG(e,t){e&1&&(z(0,`span`),J(1,`mock body`),B())}function GG(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 KG(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,HG,2,7,`span`,115),P(14,UG,2,1,`span`),P(15,WG,2,0,`span`),B(),P(16,GG,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 qG(e,t){e&1&&(z(0,`li`,53),J(1,`No rules. SSR rules apply on the next page load.`),B())}function JG(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 YG(e,t){e&1&&J(0,` For a cached HTTP response this is the whole cache record, not only the response body. `)}function XG(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,YG,1,0),B()),e&2&&(M(2),F(t===`http`?2:-1))}function ZG(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,XG,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 QG(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 $G(e,t){if(e&1&&(z(0,`span`),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.message)}}function eK(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 tK(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,$G,2,1,`span`),P(11,eK,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 nK(e,t){e&1&&(z(0,`li`,53),J(1,`No overrides.`),B())}function rK(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 iK(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 aK(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 oK(e,t){if(e&1&&(z(0,`li`)(1,`code`),J(2),B(),P(3,iK,5,1,`span`,124),P(4,aK,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 sK(e,t){if(e&1&&(z(0,`h3`),J(1),B(),z(2,`ul`,123),I(3,oK,5,3,`li`,null,Dg),B()),e&2){let e=K();M(),X(`Mismatches (`,e.mismatches.length,`)`),M(2),L(e.mismatches)}}function cK(e,t){if(e&1&&(z(0,`li`)(1,`code`),J(2),B()()),e&2){let e=t.$implicit;M(2),Y(e)}}function lK(e,t){if(e&1&&(z(0,`h3`),J(1,`ngSkipHydration hosts`),B(),z(2,`ul`,126),I(3,cK,3,1,`li`,null,Dg),B()),e&2){let e=K();M(3),L(e.skipHydrationHosts)}}function uK(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 dK(e,t){if(e&1&&(z(0,`pre`,127),J(1),B()),e&2){let e=t.$implicit;M(),Y(e)}}function fK(e,t){e&1&&(z(0,`p`,86),J(1,`No hydration warnings.`),B())}function pK(e,t){if(e&1&&(z(0,`h3`),J(1),B(),I(2,dK,2,1,`pre`,127,Dg,!1,fK,2,0,`p`,86)),e&2){let e=K();M(),X(`Warnings (`,e.warnings.length,`)`),M(),L(e.warnings)}}function mK(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,rK,15,5),B(),P(33,sK,5,1),P(34,lK,5,0),P(35,uK,7,0)(36,pK,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 hK(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 gK(e,t){e&1&&(z(0,`div`,11)(1,`p`),J(2,`No TransferState script: this page was not server rendered.`),B()())}function _K(e,t){if(e&1&&(z(0,`p`,129),J(1),B()),e&2){let e=K(2);M(),Y(e.error)}}function vK(e,t){e&1&&(z(0,`span`,94),J(1),B()),e&2&&(M(),Y(t))}function yK(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 bK(e,t){if(e&1&&(z(0,`span`,132),J(1),B()),e&2){let e=K().$implicit;M(),Y(e.key)}}function xK(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 SK(e,t){if(e&1){let e=W();z(0,`details`)(1,`summary`),V(2,`span`,131),P(3,vK,2,1,`span`,94),P(4,yK,4,6)(5,bK,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,xK,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 CK(e,t){if(e&1&&(z(0,`p`,128),J(1),B(),P(2,_K,2,1,`p`,129),z(3,`div`,130),I(4,SK,20,10,`details`,null,YW),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 wK(e,t){e&1&&P(0,gK,3,0,`div`,11)(1,CK,6,4),e&2&&F(+!!t.found)}function TK(e,t){e&1&&(z(0,`div`,11)(1,`p`),J(2,`Open a page of the app to see its payload.`),B()())}var EK={kind:`render-error`,pattern:``,message:``,key:``,value:``},DK={"render-error":`Render error`,"client-render":`Client render`,"state-edit":`TransferState edit`},OK={server:`Server`,prerender:`Prerender`,client:`Client`,redirect:`Redirect`,"not-rendered":`Not rendered`,unknown:`Unknown`},kK={pattern:``,method:``,target:`both`,status:``,delayMs:``,body:``};function AK(e){try{let t=new URL(e,`http://x`);return t.pathname+t.search}catch{return e}}var jK=/\[redacted\]|%5Bredacted%5D/gi;function MK(e){return(/^([a-z][a-z\d+.-]*:|\/\/)/i.test(e)?AK(e):e).replace(jK,`*`)}function NK(e){let t=tO(e);if(t!==null)return t;try{return JSON.parse(e),e.trim()}catch{return null}}var PK=[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`];function FK(e){try{return new URL(e,`http://x`).pathname}catch{return``}}function IK(e){let t=FK(e);return t===`/`?``:t}var LK=/\[redacted\]|%5Bredacted%5D/i,RK=200,zK=50,BK=500,VK=1e5,HK=[{value:``,label:`None`},...WT.map(([e,t])=>({value:String(e),label:`${e} ${t}`}))],UK=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({...EK});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({...kK});message=j(``);bodyPlaceholder=`{ "error": "Service unavailable" }`;statusOptions=HK;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} ${AK(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} ${AK(e.url)}`));return t.calls.filter(t=>t.side===`client`&&!t.cacheHit&&!t.mocked&&t.at>=e.at&&n.has(`${t.method} ${AK(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>BK||this.bodyError()||this.rules().length>=zK)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>=zK?`You can add up to ${zK} rules. Remove one to add another.`:e.pattern.trim()?e.pattern.trim().length>BK?`The URL pattern is limited to ${BK} 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>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(){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} ${AK(e.url)}`,n=this.requestCalls().filter(e=>`${e.method} ${AK(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 OK[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=MK(e.url),r=e.error||!e.preview?null:NK(e.preview);this.draft.set({...kK,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&&!PK.includes(e)?[...PK,e]:PK).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({...kK}),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 DK[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<=RK&&!LK.test(t)}editEntry(e){if(!this.canEditEntry(e))return;let t=this.selected();this.overrideDraft.set({...EK,kind:`state-edit`,pattern:t?IK(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({...EK,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,XW,4,0,`div`,0)(1,ZW,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,CG,20,1)(16,wG,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,jG,21,0,`div`,26)(36,PG,9,1,`div`,27)(37,FG,11,0,`div`,11),P(38,RG,20,18,`div`,28),B(),z(39,`section`,29)(40,`h2`,30),J(41,`Fault injection`),B(),P(42,zG,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,BG,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,KG,17,17,`li`,52,KW,!1,qG,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,JG,8,1)(107,ZG,12,6)(108,QG,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,tK,12,12,`li`,52,KW,!1,nK,2,0,`li`,53),B()(),z(118,`section`,63)(119,`h2`,64),J(120,`Hydration`),B(),P(121,mK,37,14)(122,hK,5,0,`div`,11),B(),z(123,`section`,65)(124,`h2`,66),J(125,`TransferState payload`),B(),P(126,wK,2,1)(127,TK,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,RN,GD,pb],styles:[`@charset "UTF-8";
[_nghost-%COMP%] {
display: block;
color: var(--%NS%text);
@@ -12919,7 +12919,7 @@ summary[_ngcontent-%COMP%]:hover .entry-key[_ngcontent-%COMP%] {
.message[_ngcontent-%COMP%] {
text-align: left;
}
-}`]})};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%] {
+}`]})};function WK(e,t){e&1&&(A(),H(0,`svg`,9),zg(1,`path`,20),U())}function GK(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 KK(e,t){e&1&&(A(),H(0,`svg`,11),zg(1,`path`,30)(2,`path`,31)(3,`path`,32)(4,`path`,33),U())}function qK(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 JK(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 YK(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 XK=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,WK,2,0,`:svg:svg`,9)(12,GK,11,0,`:svg:svg`,10)(13,KK,5,0,`:svg:svg`,11)(14,qK,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,JK,8,2,`a`,16),H(24,`h3`,17),J(25),U(),H(26,`ul`,18),I(27,YK,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%);
@@ -13265,9 +13265,9 @@ h2[_ngcontent-%COMP%] {
.author[_ngcontent-%COMP%]:hover .go[_ngcontent-%COMP%] {
transform: none;
}
-}`]})},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%] {
+}`]})},ZK=new Set([`CapacitorCookies`,`CapacitorHttp`,`SystemBars`,`WebView`]);function QK(e){return e==null?`Unknown`:e?`Yes`:`No`}function $K(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 eq(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 tq=new WeakMap;function nq(e){let t=e.calls;if(Array.isArray(t))return e;let n=tq.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)},tq.set(e,n)}return n}function rq(e){let t=e?.pages;return!t||typeof t!=`object`?[]:Object.values(t).filter(e=>e&&typeof e.pageId==`string`&&!!e.info).map(nq).sort((e,t)=>t.reportedAt-e.reportedAt)}function iq(e){let t=e.error;return!!t&&(t.code===`UNIMPLEMENTED`||/not implemented/i.test(t.message))}function aq(e,t){return e.durationMs===void 0?e.status===`pending`?Math.max(0,t-e.startedAt):0:e.durationMs}function oq(e,t,n){return t===`failed`?e.status===`error`:t===`pending`?e.status===`pending`:t!==`slow`||aq(e,n)>=500}function sq(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 cq(e,t){let n=t-e;return n<1e3?`just now`:`${sq(n)} ago`}function lq(e,t){return ZK.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 uq(e,t){let n=e.info,r=n=>e.calls.filter(e=>oq(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=>lq(e,n.platform)).length}}function dq(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 fq=/^[A-Za-z_$][\w$]*$/;function pq(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+pq(e,n)).join(`,
+`)},\n${t}]`:`[]`;let r=Object.entries(e);return r.length?`{\n${r.map(([e,t])=>`${n}${fq.test(e)?e:JSON.stringify(e)}: ${pq(t,n)}`).join(`,
+`)},\n${t}}`:`{}`}function mq(e){let t=fq.test(e.plugin)?e.plugin:`Capacitor.Plugins[${JSON.stringify(e.plugin)}]`,n=fq.test(e.method)?`.${e.method}`:`[${JSON.stringify(e.method)}]`,r=e.args===void 0?[]:[pq(e.args)];return e.kind===`callback`&&(r.length||r.push(`{}`),r.push(`(result, error) => {}`)),`await ${t}${n}(${r.join(`, `)});`}function hq(e){if(e===void 0)return`undefined`;try{return JSON.stringify(e,null,2)??`undefined`}catch{return String(e)}}function gq(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 _q(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 vq(e,t){e&1&&(H(0,`p`,9),J(1,`No arguments.`),U())}function yq(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 bq(e,t){e&1&&P(0,vq,2,0,`p`,9)(1,yq,2,1,`pre`,10),e&2&&(K(),F(fv(0).args===void 0?0:1))}function xq(e,t){if(e&1&&(H(0,`code`),J(1),U()),e&2){let e=K();M(),Y(e.code)}}function Sq(e,t){if(e&1&&(H(0,`p`,11),P(1,xq,2,1,`code`),J(2),U()),e&2){let e=t;M(),F(e.code?1:-1),M(),X(` `,e.message,` `)}}function Cq(e,t){e&1&&(H(0,`p`,9),J(1,`No answer yet.`),U())}function wq(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 Tq(e,t){e&1&&(H(0,`p`,9),J(1,`Resolved without a value.`),U())}function Eq(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 Dq(e,t){if(e&1&&(P(0,wq,2,1,`p`,9),P(1,Tq,2,0,`p`,9)(2,Eq,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 Oq(e,t){if(e&1&&P(0,Sq,3,2,`p`,11)(1,Cq,2,0,`p`,9)(2,Dq,3,2),e&2){let e;K();let t=fv(0);F((e=t.error)?0:t.status===`pending`?1:2,e)}}function kq(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 Aq(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,kq,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 jq=[`args`,`outcome`,`timing`],Mq=class e{call=$.required();now=$.required();announce=Iv();host=E(Nl);tab=j(`args`);tabOrder=jq;json=hq;time=$D;span=sq;took=aq;statusText=Q(()=>{let e=this.call();return e.status===`pending`?`Pending`:e.status===`ok`?`OK`:iq(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=jq.indexOf(this.tab()),n;if(e.key===`ArrowRight`)n=(t+1)%jq.length;else if(e.key===`ArrowLeft`)n=(t-1+jq.length)%jq.length;else if(e.key===`Home`)n=0;else if(e.key===`End`)n=jq.length-1;else return;e.preventDefault();let r=jq[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`?hq(t):mq(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,_q,2,5,`button`,6,Og),U(),H(15,`div`,7),P(16,bq,2,1)(17,Oq,3,1)(18,Aq,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);
@@ -13420,7 +13420,7 @@ dd[_ngcontent-%COMP%] {
margin: 0;
color: var(--%NS%text);
font-variant-numeric: tabular-nums;
-}`]})},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%] {
+}`]})},Nq=(e,t)=>t.plugin,Pq=(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 Iq(e,t){e&1&&(H(0,`span`,4),J(1,`Not reported yet`),U())}function Lq(e,t){if(e&1&&(H(0,`div`)(1,`dt`),J(2),U(),H(3,`dd`),P(4,Fq,8,3)(5,Iq,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 Rq(e,t){if(e&1&&(H(0,`article`,2)(1,`h3`,3)(2,`code`),J(3),U()(),H(4,`dl`),I(5,Lq,6,2,`div`,null,Pq),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 zq(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Bq(e,t=e=>e){return n=>{let r=zq(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 Hq=[{plugin:`Foldable`,fields:[{label:`Fold state`,sources:Vq([`getFoldState`],[`foldStateChange`],Bq(`state`))},{label:`Posture`,sources:Vq([`getFoldState`],[`foldStateChange`],Bq(`posture`))},{label:`Hinge orientation`,sources:Vq([`getFoldState`],[`foldStateChange`],Bq(`hingeOrientation`))},{label:`Hinge angle`,sources:Vq([`getHingeAngle`],[`hingeAngleChange`],Bq(`angle`,e=>`${e}°`))},{label:`Active display`,sources:Vq([`getFoldState`],[`foldStateChange`],Bq(`activeDisplay`))},{label:`Size class`,sources:Vq([`getSizeClass`],[`sizeClassChange`],e=>{let t=Bq(`widthClass`)(e),n=Bq(`heightClass`)(e);return!t&&!n?null:[t&&`width ${t}`,n&&`height ${n}`].filter(Boolean).join(`, `)})}]}];function Uq(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 Wq(e,t=Hq){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=Uq(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 Gq=class e{cards=$.required();now=$.required();ago=cq;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,Rq,7,3,`article`,2,Nq),U()),e&2&&(M(3),L(t.cards()))},styles:[`[_nghost-%COMP%] {
display: block;
}
@@ -13496,7 +13496,7 @@ dd[_ngcontent-%COMP%] {
.missing[_ngcontent-%COMP%] {
font-style: italic;
-}`]})},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%] {
+}`]})},Kq=(e,t)=>t.filter,qq=(e,t)=>t.id,Jq=(e,t)=>t.name;function Yq(e,t){e&1&&(z(0,`p`,1),J(1,`Loading Capacitor data…`),B())}function Xq(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 Zq(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 Qq(e,t){if(e&1&&I(0,Zq,6,4,`button`,26,Kq),e&2){let e=K();L(K(2).callStats(e))}}function $q(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,Qq,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 eJ(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 tJ(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 nJ(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 rJ(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 iJ(e,t){e&1&&(z(0,`p`,18),J(1,`No plugin calls yet. Use the app and they show up here.`),B())}function aJ(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 oJ(e,t){e&1&&(A(),V(0,`path`,50))}function sJ(e,t){e&1&&(A(),V(0,`circle`,55)(1,`path`,56))}function cJ(e,t){e&1&&(A(),V(0,`circle`,55)(1,`path`,57))}function lJ(e,t){e&1&&(A(),V(0,`circle`,55)(1,`path`,58))}function uJ(e,t){e&1&&(z(0,`span`,51),J(1,`stream`),B())}function dJ(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,oJ,1,0,`:svg:path`,50)(7,sJ,2,0)(8,cJ,2,0)(9,lJ,2,0),B(),J(10),B(),P(11,uJ,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 fJ(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 pJ(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,dJ,20,15,`li`,null,qq),B(),P(4,fJ,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 mJ(e,t){if(e&1){let e=W();P(0,rJ,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,iJ,2,0,`p`,18)(13,aJ,7,3,`div`,18)(14,pJ,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 hJ(e,t){e&1&&(z(0,`p`,18),J(1,`No plugins are registered or installed.`),B())}function gJ(e,t){if(e&1&&(z(0,`code`),J(1),B()),e&2){let e=K();M(),Y(e.command)}}function _J(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 vJ(e,t){if(e&1&&(z(0,`span`,63),J(1),P(2,gJ,2,1,`code`),J(3),B(),P(4,_J,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 yJ(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,vJ,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 bJ(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,yJ,12,5,`tr`,null,Jq),B()()()),e&2){let e=K();M(15),L(e.info.plugins)}}function xJ(e,t){e&1&&(z(0,`p`,18),J(1,`No plugin listeners. They show up when the app calls addListener.`),B())}function SJ(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 CJ(e,t){e&1&&(z(0,`span`,68),J(1,`No data`),B())}function wJ(e,t){if(e&1&&(P(0,SJ,2,1,`code`,68)(1,CJ,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 TJ(e,t){e&1&&J(0,` None yet `)}function EJ(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 DJ(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,wJ,4,2)(11,TJ,1,0),B(),z(12,`td`),J(13),P(14,EJ,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 OJ(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,DJ,15,6,`tr`,null,qq),B()()()),e&2){let e=K();M(15),L(e.listeners)}}function kJ(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,$q,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,eJ,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,tJ,4,2,`section`,12),z(42,`section`,13)(43,`h2`,14),J(44,`Plugin calls`),B(),P(45,nJ,12,1,`p`,15)(46,mJ,15,9),B(),z(47,`section`,16)(48,`h2`,17),J(49,`Plugins`),B(),P(50,hJ,2,0,`p`,18)(51,bJ,17,0,`div`,19),B(),z(52,`section`,20)(53,`h2`,21),J(54,`Listeners`),B(),P(55,xJ,2,0,`p`,18)(56,OJ,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 AJ(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 jJ=`https://pangular-inspector.dev/inspectors/capacitor/#web-calls`,MJ=2e3,NJ={all:`All calls`,failed:`Failed`,slow:`Slow (500 ms or more)`,pending:`Pending`},PJ=class e{rpc=$(null);destroyRef=E(ws);host=E(Nl);injector=E(Ss);seen=new Map;hostPageId=uE();unsubscribe;time=$D;preview=gq;pluginHint=lq;guideUrl=jJ;yesNo=QK;filterOptions=Object.keys(NJ).map(e=>({value:e,label:NJ[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:eq(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=>oq(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=>aq(t,e)))});hiddenBy=Q(()=>{let e=[],t=this.filter().trim();return t&&e.push(`the search “${t}”`),this.callFilter()!==`all`&&e.push(`the ${NJ[this.callFilter()]} filter`),e.join(` and `)});stateCards=Q(()=>{let e=this.page();return e?Wq(e):[]});leaks=Q(()=>dq(this.page()?.listeners??[]));liveSummary=Q(()=>{let e=this.page();return e?uq(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`:iq(e)?`warn`:`danger`}statusLabel(e){return e.status===`pending`?`Pending`:e.status===`ok`?`OK`:iq(e)?`Not implemented`:`Error`}durationText(e){return e.status===`pending`?`waiting ${sq(aq(e,this.now()))}`:e.durationMs===void 0?``:`${Math.round(e.durationMs)} ms`}barWidth(e){return Math.min(100,aq(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+MJ-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($K(rq(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,Yq,2,0,`p`,1)(1,Xq,5,0,`div`,2)(2,kJ,57,13)(3,AJ,2,0,`p`,1),e&2){let e;F(t.loaded()?t.failed()?1:(e=t.page())?2:3:0,e)}},dependencies:[iO,GD,Mq,Gq],styles:[`[_nghost-%COMP%] {
display: block;
font-size: 13px;
}
@@ -13979,7 +13979,7 @@ td.last[_ngcontent-%COMP%] {
.empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%],
.state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {
margin: 0 0 8px;
-}`]})};function PJ(e){return`
+}`]})};function FJ(e){return`
.devframes-dock-entry button {
transition: background-color 0.2s, transform 0.3s;
}
@@ -14032,7 +14032,7 @@ td.last[_ngcontent-%COMP%] {
transition: none;
}
}
-`}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%] {
+`}var IJ=new Map;function LJ(e,t=`dark`,n=50){let r=e?.querySelector(`devframes-dock-standalone`)?.shadowRoot;if(r){if(e){let t=IJ.get(e);t!==void 0&&(clearTimeout(t),IJ.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=IJ.get(e);r!==void 0&&clearTimeout(r);let i=setTimeout(()=>{IJ.delete(e),LJ(e,t,n-1)},100);IJ.set(e,i)}}var RJ=class e{current=j(`dark`);constructor(){let e=E(ws),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(BJ(t));else{let t=zJ();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 HJ())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(BJ(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 zJ(){try{return window.matchMedia?.(`(prefers-color-scheme: light)`)??null}catch{return null}}function BJ(e){return e.classList.contains(`dark`)?`dark`:`light`}function VJ(){try{return window.frameElement?.closest(`.devframes-color-root`)??null}catch{return null}}function HJ(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=UJ(e,r,i,n);a&&t.push({win:r,origin:a})}}catch{}return t}function UJ(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 WJ=`__DEVFRAME_HUB_CLIENT_CONTEXT__`;function GJ(){try{return window.parent===window?void 0:window.parent[WJ]}catch{return}}function KJ(e,t,n=50){let r=GJ();if(!r){if(n<=0||window.parent===window)return()=>{};let r=()=>{},i=setTimeout(()=>r=KJ(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 qJ(){return!!GJ()}async function JJ(e){let t=GJ();if(!t)return!1;try{return await t.docks.switchEntry(BT(e))}catch{return!1}}function YJ(e,t){let n=new URL(e);return n.searchParams.delete(`view`),n.hash=t?`tab=${t}`:``,n.pathname+n.search+n.hash}function XJ(e){return e.button===0&&!e.metaKey&&!e.ctrlKey&&!e.shiftKey&&!e.altKey}var ZJ=`pangular-tab`;function QJ(e,t,n){let r=new URLSearchParams(e.replace(/^#/,``)).get(`tab`)||t;return n.find(e=>e===r)}function $J(e){try{return sessionStorage.getItem(`${ZJ}:${e}`)}catch{return null}}function eY(e,t){try{sessionStorage.setItem(`${ZJ}:${e}`,t)}catch{}}function tY(e,t){try{return new URL(e,t.href).origin===t.origin}catch{return!1}}function nY(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 rY(e=location){let t=new URLSearchParams(e.search).get(`baseURL`);if(t&&(tY(t,e)||nY(t,e)))return t;if(!(e.pathname.includes(`__pangular`)||e.pathname.includes(`__devframes/`)))return[`/__pangular/`,`./`]}var iY={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 aY(e,t){let n=iY[t];return e&&n[e]||null}var oY=[`nav`],sY=[`main`],cY=e=>[e],lY=(e,t)=>t.id;function uY(e,t){e&1&&(A(),z(0,`svg`,4),V(1,`path`,22),B())}function dY(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 fY(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 pY(e,t){e&1&&(A(),z(0,`svg`,6),V(1,`path`,38)(2,`path`,39)(3,`path`,40)(4,`path`,41),B())}function mY(e,t){e&1&&(A(),z(0,`svg`,7),V(1,`path`,42),B())}function hY(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 gY(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 _Y(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 vY(e,t){if(e&1&&(z(0,`div`,12),I(1,_Y,4,6,`button`,72,lY),B()),e&2){let e=K();M(),L(e.tabs())}}function yY(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 bY(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 xY(e,t){e&1&&V(0,`app-coming-soon`,19),e&2&&R(`info`,t)}function SY(e,t){e&1&&(z(0,`p`,20),J(1,`Looking for an Angular Native app…`),B())}function CY(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 wY(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,CY,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 TY(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 EY(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 DY(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 OY(e,t){e&1&&V(0,`app-signal-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function kY(e,t){e&1&&V(0,`app-di-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function AY(e,t){e&1&&V(0,`app-store-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function jY(e,t){e&1&&V(0,`app-network-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function MY(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 NY(e,t){e&1&&V(0,`app-pipes-inspector`,83),e&2&&R(`rpc`,K(3).rpc())}function PY(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 IY(e,t){if(e&1&&P(0,TY,1,1,`app-dashboard`,83)(1,EY,1,2,`app-component-tree`,84)(2,DY,1,1,`app-route-inspector`,83)(3,OY,1,1,`app-signal-inspector`,83)(4,kY,1,1,`app-di-inspector`,83)(5,AY,1,1,`app-store-inspector`,83)(6,jY,1,1,`app-network-inspector`,83)(7,MY,1,2,`app-forms-inspector`,84)(8,NY,1,1,`app-pipes-inspector`,83)(9,PY,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 LY(e,t){e&1&&I(0,IY,11,1,null,null,Og),e&2&&L(hv(0,cY,K().scopeKey()))}var RY=`all`,zY=[RY,...zT],BY={angular:`Angular`,ngrx:`NgRx Store`,analog:`Analog`,"angular-native":`Angular Native`,nativescript:`NativeScript`,capacitor:`Capacitor`},VY={ngrx:`store`,analog:`analog`,capacitor:`capacitor`},HY={store:`ngrx`,analog:`analog`,capacitor:`capacitor`},UY={"angular-native":[`components`,`signals`,`injectors`,`store`,`pipes`]},WY={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/`}},GY={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/`}},KY={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`}},qY={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/`}},JY=[1e3,2e3,5e3,1e4];function YY(){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(YY());viewAccent=Q(()=>aY(this.view(),this.themeService.current()));title=Q(()=>{let e=this.view();return e?BY[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()?KY:void 0;if(e===`nativescript`)return WY;if(e===`capacitor`)return this.config().inspectors.capacitor&&this.capacitorKnown()&&!this.capacitorReporting()?GY:void 0;if(e===`angular-native`)return this.nativeKnown()&&!this.nativePageId()?qY: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?VY[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?UY[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`&&HY[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:YJ(location.href,t)}});tab=Nv(()=>{let e=this.view();return e&&(VY[e]??UY[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(RJ);navObserver;navFade=j({start:!1,end:!1});constructor(){E(CO).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&&LJ(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===RY?this.showFullPanel():this.showView(e)});let e=QJ(location.hash,$J(this.tabScope()),this.availableTabs().map(e=>e.id));e?this.tab.set(e):!this.view()&&QJ(location.hash,$J(this.tabScope()),[`capacitor`])===`capacitor`?this.restoreCapacitor=!0:!this.view()&&QJ(location.hash,$J(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=rY();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=JY[Math.min(this.retries++,JY.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??$J(this.tabScope()),r=this.availableTabs().map(e=>e.id),i=QJ(t.hash,n,r);i?this.setTab(i):n===`capacitor`&&(this.restoreCapacitor=!0)}openFullPanel(e,t){XJ(e)&&qJ()&&(e.preventDefault(),this.showFullPanel(t),this.focusCurrentTab(),JJ(RY))}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=HY[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),eY(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=rq(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 JJ(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,oY,5)(t.main,sY,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,uY,2,0,`:svg:svg`,4)(4,dY,7,0,`:svg:svg`,4)(5,fY,11,0,`:svg:svg`,5)(6,pY,5,0,`:svg:svg`,6)(7,mY,2,0,`:svg:svg`,7)(8,hY,10,0,`:svg:svg`,8)(9,gY,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,vY,3,0,`div`,12),B(),P(15,yY,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,bY,5,0,`div`,18)(25,xY,1,1,`app-coming-soon`,19)(26,SY,2,0,`p`,20)(27,wY,10,2,`p`,21)(28,LY,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,nA,FN,tF,EI,BR,iV,TH,GW,UK,PJ,XK,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;
diff --git a/extension/ui/index.html b/extension/ui/index.html
index 9c9ed586..28f7cdd2 100644
--- a/extension/ui/index.html
+++ b/extension/ui/index.html
@@ -9,7 +9,7 @@
Pangular Inspector
-
+
diff --git a/packages/devtools/src/__tests__/agent-tools.test.ts b/packages/devtools/src/__tests__/agent-tools.test.ts
index d18e7830..feca045c 100644
--- a/packages/devtools/src/__tests__/agent-tools.test.ts
+++ b/packages/devtools/src/__tests__/agent-tools.test.ts
@@ -814,11 +814,15 @@ describe('agent tools', () => {
});
const state = await injectorState();
expect(state).toMatchObject({ truncated: true, pages: { p1: { truncated: true } } });
- expect(await call('inspect-providers', '')).toMatch(/more than 2000 element injectors/);
- expect(await call('inspect-providers', 'A')).toMatch(/more than 2000 element injectors/);
+ expect(await call('inspect-providers', '')).toMatch(
+ /only part of its injector tree \(it keeps at most 2000 element injectors and 2500 in all, and leaves out injectors nested more than 1000 levels deep\)/,
+ );
+ expect(await call('inspect-providers', 'A')).toMatch(
+ /only part of its injector tree \(it keeps at most 2000 element injectors and 2500 in all, and leaves out injectors nested more than 1000 levels deep\)/,
+ );
await push('push-injector-tree', { pageId: 'p1', roots: [injectorRoot('A')], environment: [] });
expect(await injectorState()).toMatchObject({ truncated: false });
- expect(await call('inspect-providers', '')).not.toMatch(/more than 2000/);
+ expect(await call('inspect-providers', '')).not.toMatch(/only part of its injector tree/);
});
it('resolves a class name on the most recent tab and names the other tabs', async () => {
diff --git a/packages/devtools/src/__tests__/cd-recorder-real.test.ts b/packages/devtools/src/__tests__/cd-recorder-real.test.ts
new file mode 100644
index 00000000..d19f36e1
--- /dev/null
+++ b/packages/devtools/src/__tests__/cd-recorder-real.test.ts
@@ -0,0 +1,146 @@
+// @vitest-environment jsdom
+import '@angular/compiler';
+import {
+ Component,
+ provideZonelessChangeDetection,
+ signal,
+ type ApplicationRef,
+} from '@angular/core';
+import { bootstrapApplication } from '@angular/platform-browser';
+import { afterEach, describe, expect, it } from 'vitest';
+import { attachChangeDetection, type CdReport } from '../cd-overlay.ts';
+import { PROFILER_EVENT as E } from '../cd-recorder.ts';
+import { addProfilerListener } from '../change-detection.ts';
+import { elementId } from '../element-id.ts';
+import { angularAtLeast } from './angular-version.ts';
+
+class TripCart {
+ readonly items = signal(0);
+ add() {
+ this.items.update((n) => n + 1);
+ }
+}
+Component({
+ selector: 'app-trip-cart',
+ template: 'Add {{ items() }} items',
+})(TripCart);
+
+class TripShell {}
+Component({ selector: 'app-root', imports: [TripCart], template: ' ' })(TripShell);
+
+const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
+const ngOf = () => (globalThis as { ng?: unknown }).ng;
+
+function fakeRpc() {
+ const handlers = new Map unknown>();
+ const reports: CdReport[] = [];
+ const my = {
+ rpc: {
+ call: async (name: string, ...args: unknown[]) => {
+ if (name === 'push-change-detection') reports.push(args[0] as CdReport);
+ return undefined;
+ },
+ register: (definition: { name: string; handler: (...args: unknown[]) => unknown }) => {
+ handlers.set(definition.name, definition.handler);
+ },
+ },
+ };
+ return { my, handlers, reports };
+}
+
+describe('change detection recorder with a real app', () => {
+ let app: ApplicationRef | null = null;
+ let cleanup: (() => void) | null = null;
+ afterEach(() => {
+ cleanup?.();
+ cleanup = null;
+ app?.destroy();
+ app = null;
+ document.body.innerHTML = '';
+ });
+
+ async function boot() {
+ document.body.innerHTML = ' ';
+ app = await bootstrapApplication(TripShell, {
+ providers: [provideZonelessChangeDetection()],
+ });
+ app.tick();
+ }
+
+ it('gets the profiler events the recorder reads, with the numbers it expects', async () => {
+ await boot();
+ const events: { event: number; instance: unknown }[] = [];
+ const remove = addProfilerListener(ngOf(), (event, instance) =>
+ events.push({ event, instance }),
+ );
+ if (!angularAtLeast('20.0')) {
+ expect(remove).toBeNull();
+ return;
+ }
+ cleanup = remove;
+ document.querySelector('button')!.click();
+ await wait(40);
+
+ const seen = events.map(({ event }) => event);
+ for (const event of [
+ E.OutputStart,
+ E.OutputEnd,
+ E.ChangeDetectionStart,
+ E.ChangeDetectionSyncStart,
+ E.ComponentStart,
+ E.ComponentEnd,
+ E.ChangeDetectionEnd,
+ ])
+ expect(seen).toContain(event);
+ const output = events.find(({ event }) => event === E.OutputStart);
+ expect(output?.instance).toBeInstanceOf(TripCart);
+ const ended = events.filter(({ event }) => event === E.ComponentEnd);
+ expect(ended.some(({ instance }) => instance instanceof TripCart)).toBe(true);
+ expect(seen.indexOf(E.OutputEnd)).toBeLessThan(seen.indexOf(E.ChangeDetectionStart));
+ });
+
+ it('records a real cycle with its trigger, components and host ids, and stops on request', async () => {
+ await boot();
+ const { my, handlers, reports } = fakeRpc();
+ const cd = attachChangeDetection(my, 'pg1', ngOf, 50);
+ cleanup = () => cd.stop();
+ const record = handlers.get('change-detection-record')!;
+
+ record({ pageId: 'pg1', on: true });
+ await wait(0);
+ const started = reports.at(-1)!;
+ if (!angularAtLeast('20.0')) {
+ expect(started).toMatchObject({ pageId: 'pg1', supported: false, recording: false });
+ return;
+ }
+ expect(started).toMatchObject({ pageId: 'pg1', supported: true, recording: true, cycles: [] });
+
+ document.querySelector('button')!.click();
+ await wait(40);
+ expect(document.body.textContent).toContain('1 items');
+ await cd.push();
+ const report = reports.at(-1)!;
+ expect(report.cycles.length).toBeGreaterThan(0);
+ const cycle = report.cycles.find((each) => each.trigger?.startsWith('TripCart'));
+ expect(cycle).toBeDefined();
+ expect(cycle!.passes).toBeGreaterThan(0);
+ expect(cycle!.components.map((c) => c.name)).toContain('TripCart');
+ expect(report.components.find((c) => c.name === 'TripCart')?.checks).toBeGreaterThan(0);
+ const host = document.querySelector('app-trip-cart')!;
+ expect(report.hosts[elementId(host)]).toBeGreaterThan(0);
+
+ const sent = reports.length;
+ await cd.push();
+ expect(reports.length).toBe(sent);
+
+ record({ pageId: 'pg1', on: false });
+ await wait(0);
+ const cycles = reports.at(-1)!.cycles.length;
+ expect(reports.at(-1)!.recording).toBe(false);
+ document.querySelector('button')!.click();
+ await wait(40);
+ expect(document.body.textContent).toContain('2 items');
+ await cd.push(true);
+ expect(reports.at(-1)!.cycles.length).toBe(cycles);
+ });
+});
diff --git a/packages/devtools/src/__tests__/cd-recorder.test.ts b/packages/devtools/src/__tests__/cd-recorder.test.ts
index 8d2a41dc..cf1694f8 100644
--- a/packages/devtools/src/__tests__/cd-recorder.test.ts
+++ b/packages/devtools/src/__tests__/cd-recorder.test.ts
@@ -79,6 +79,89 @@ describe('change detection recorder', () => {
expect(recorder.snapshot(() => null)).toMatchObject({ cycles: [], dropped: 0 });
});
+ it('counts the component classes and instances it checked past its caps', () => {
+ const recorder = createCdRecorder({ maxCycles: 10 });
+ recorder.start();
+ const classes = Array.from({ length: 1005 }, () => class {});
+ const check = (instance: object) => {
+ recorder.onEvent(E.ComponentStart);
+ recorder.onEvent(E.ComponentEnd, instance);
+ };
+ recorder.onEvent(E.ChangeDetectionStart);
+ // 2005 instances of 1005 classes, and the last class checked twice.
+ const instances = [...classes, ...classes.slice(0, 1000)].map((Ctor) => new Ctor());
+ for (const instance of instances) check(instance);
+ check(instances[1004]!);
+ recorder.onEvent(E.ChangeDetectionEnd);
+
+ const snap = recorder.snapshot(() => null);
+ expect(snap.components).toHaveLength(100);
+ // 900 kept classes past the 100 listed, and 5 classes never kept.
+ expect(snap.droppedClasses).toBe(905);
+ // The last 5 instances, each counted once.
+ expect(snap.droppedHosts).toBe(5);
+
+ recorder.clear();
+ const empty = recorder.snapshot(() => null);
+ expect(empty.droppedClasses).toBeUndefined();
+ expect(empty.droppedHosts).toBeUndefined();
+ });
+
+ it("carries an untracked instance's checks over when a slot frees up", () => {
+ // A WeakRef the test can clear, standing in for garbage collection.
+ const collected = new WeakSet();
+ class TestRef {
+ constructor(private target: T) {}
+ deref() {
+ return collected.has(this.target) ? undefined : this.target;
+ }
+ }
+ vi.stubGlobal('WeakRef', TestRef);
+ try {
+ const recorder = createCdRecorder({ maxCycles: 10 });
+ recorder.start();
+ const check = (instance: object) => {
+ recorder.onEvent(E.ComponentStart);
+ recorder.onEvent(E.ComponentEnd, instance);
+ };
+ const kept = Array.from({ length: 2000 }, () => new Cart());
+ const late = new Price();
+ const other = new Price();
+ recorder.onEvent(E.ChangeDetectionStart);
+ for (const instance of kept) check(instance);
+ check(late);
+ check(other);
+ recorder.onEvent(E.ChangeDetectionEnd);
+ recorder.onEvent(E.ChangeDetectionStart);
+ check(late);
+ recorder.onEvent(E.ChangeDetectionEnd);
+ expect(recorder.snapshot(() => null).droppedHosts).toBe(2);
+
+ collected.add(kept[0]!);
+ recorder.onEvent(E.ChangeDetectionStart);
+ check(late);
+ recorder.onEvent(E.ChangeDetectionEnd);
+ const snap = recorder.snapshot((instance) => (instance === late ? 'late' : null));
+ // Two checks while untracked, one after it got a slot.
+ expect(snap.hosts).toEqual({ late: 3 });
+ expect(snap.droppedHosts).toBe(1);
+ } finally {
+ vi.unstubAllGlobals();
+ }
+ });
+
+ it('reports no dropped classes or hosts below its caps', () => {
+ const recorder = createCdRecorder({ maxCycles: 10 });
+ recorder.start();
+ recorder.onEvent(E.ChangeDetectionStart);
+ recorder.onEvent(E.ComponentStart);
+ recorder.onEvent(E.ComponentEnd, new Cart());
+ recorder.onEvent(E.ChangeDetectionEnd);
+ const snap = recorder.snapshot(() => null);
+ expect(snap).not.toHaveProperty('droppedClasses');
+ expect(snap).not.toHaveProperty('droppedHosts');
+ });
+
it('does not record outputs that run inside a cycle as its trigger', () => {
const recorder = createCdRecorder({ maxCycles: 10 });
recorder.start();
@@ -341,6 +424,42 @@ describe('change detection agent text', () => {
expect(toCdPage({ pageId: 5 }, 10)).toBeNull();
});
+ it('keeps the dropped class and host counts and notes them', () => {
+ const base = {
+ pageId: 'p1',
+ recording: false,
+ startedAt: 1,
+ dropped: 0,
+ cycles: [{ id: 1, at: 1, ms: 1, passes: 1, checks: 1, components: [] }],
+ components: [{ name: 'Cart', checks: 2, ms: 9, maxMs: 5, cycles: 2 }],
+ hosts: {},
+ };
+ const page = toCdPage({ ...base, droppedClasses: 905, droppedHosts: 1 }, 200)!;
+ expect(page).toMatchObject({ droppedClasses: 905, droppedHosts: 1 });
+ const text = changeDetectionText({ pages: { p1: page } });
+ expect(text).toContain('905 more component classes were checked but are not listed');
+ expect(text).toContain('1 component instance was checked past the 2000 instances');
+
+ const plain = toCdPage({ ...base, droppedClasses: -3, droppedHosts: 'x' }, 200)!;
+ expect(plain).not.toHaveProperty('droppedClasses');
+ expect(plain).not.toHaveProperty('droppedHosts');
+ expect(changeDetectionText({ pages: { p1: plain } })).not.toContain('not listed');
+
+ // A page that sends more than the server keeps has the rest counted too.
+ const components = Array.from({ length: 103 }, (_, i) => ({
+ name: `C${i}`,
+ checks: 1,
+ ms: 1,
+ maxMs: 1,
+ cycles: 1,
+ }));
+ const hosts = Object.fromEntries(Array.from({ length: 2002 }, (_, i) => [`h${i}`, 1]));
+ const big = toCdPage({ ...base, components, hosts, droppedClasses: 2 }, 200)!;
+ expect(big.components).toHaveLength(100);
+ expect(big.droppedClasses).toBe(5);
+ expect(big.droppedHosts).toBe(2);
+ });
+
it('falls back to the default limit when `limit` is not a number', () => {
const components = Array.from({ length: 15 }, (_, i) => ({
name: `Row${i}`,
diff --git a/packages/devtools/src/__tests__/change-detection-real.test.ts b/packages/devtools/src/__tests__/change-detection-real.test.ts
new file mode 100644
index 00000000..405332ce
--- /dev/null
+++ b/packages/devtools/src/__tests__/change-detection-real.test.ts
@@ -0,0 +1,114 @@
+// @vitest-environment jsdom
+import '@angular/compiler';
+import {
+ Component,
+ VERSION,
+ provideZonelessChangeDetection,
+ signal,
+ type ApplicationRef,
+} from '@angular/core';
+import { bootstrapApplication } from '@angular/platform-browser';
+import { afterEach, describe, expect, it } from 'vitest';
+import { addProfilerListener, angularMajor, watchChangeDetection } from '../change-detection.ts';
+import { angularAtLeast } from './angular-version.ts';
+
+class TripCounter {
+ readonly count = signal(0);
+}
+Component({ selector: 'app-root', template: '{{ count() }} trips
' })(TripCounter);
+
+const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
+const ngOf = () => (globalThis as { ng?: unknown }).ng;
+
+describe('watchChangeDetection with a real app', () => {
+ let app: ApplicationRef | null = null;
+ let stop: (() => void) | null = null;
+ afterEach(() => {
+ stop?.();
+ stop = null;
+ app?.destroy();
+ app = null;
+ document.body.innerHTML = '';
+ });
+
+ async function boot() {
+ document.body.innerHTML = ' ';
+ app = await bootstrapApplication(TripCounter, {
+ providers: [provideZonelessChangeDetection()],
+ });
+ app.tick();
+ return app.components[0].instance as TripCounter;
+ }
+
+ it('reads the major version from the ng-version attribute', async () => {
+ await boot();
+ expect(angularMajor(document)).toBe(Number(VERSION.major));
+ });
+
+ it('refreshes after a template update through the private profiler hook', async () => {
+ const counter = await boot();
+ let refreshes = 0;
+ const scheduler = watchChangeDetection({
+ getNg: ngOf,
+ refresh: () => refreshes++,
+ debounceMs: 5,
+ pollMs: 60_000,
+ heartbeatMs: 60_000,
+ });
+ stop = () => scheduler.stop();
+ if (!angularAtLeast('20.0')) {
+ // Before Angular 20 there is one profiler slot, so the watcher polls instead.
+ expect(scheduler.mode).toBe('poll');
+ return;
+ }
+ expect(scheduler.mode).toBe('change-detection');
+ expect(scheduler.intervalMs).toBe(60_000);
+
+ counter.count.set(1);
+ await wait(40);
+ expect(document.body.textContent).toContain('1 trips');
+ expect(refreshes).toBeGreaterThan(0);
+
+ scheduler.stop();
+ const before = refreshes;
+ counter.count.set(2);
+ await wait(40);
+ expect(document.body.textContent).toContain('2 trips');
+ expect(refreshes).toBe(before);
+ });
+
+ it('shares one Angular profiler between listeners and removes it with the last one', async () => {
+ const counter = await boot();
+ const ng = ngOf();
+ expect(typeof (ng as { ɵsetProfiler?: unknown }).ɵsetProfiler).toBe('function');
+ const first: number[] = [];
+ const second: number[] = [];
+ const removeFirst = addProfilerListener(ng, (event) => first.push(event));
+ const removeSecond = addProfilerListener(ng, (event) => second.push(event));
+ if (!angularAtLeast('20.0')) {
+ expect(removeFirst).toBeNull();
+ expect(removeSecond).toBeNull();
+ return;
+ }
+ expect(removeFirst).toBeTypeOf('function');
+
+ counter.count.set(1);
+ await wait(40);
+ expect(first.length).toBeGreaterThan(0);
+ expect(second).toEqual(first);
+
+ removeFirst!();
+ const kept = first.length;
+ counter.count.set(2);
+ await wait(40);
+ expect(first.length).toBe(kept);
+ expect(second.length).toBeGreaterThan(kept);
+
+ removeSecond!();
+ const last = second.length;
+ counter.count.set(3);
+ await wait(40);
+ expect(document.body.textContent).toContain('3 trips');
+ expect(second.length).toBe(last);
+ });
+});
diff --git a/packages/devtools/src/__tests__/defer-blocks.test.ts b/packages/devtools/src/__tests__/defer-blocks.test.ts
index 714bee6d..e3ea8a23 100644
--- a/packages/devtools/src/__tests__/defer-blocks.test.ts
+++ b/packages/devtools/src/__tests__/defer-blocks.test.ts
@@ -1,6 +1,6 @@
// @vitest-environment jsdom
import { afterEach, describe, expect, it } from 'vitest';
-import { createDeferTracker, type DeferDebugNg } from '../defer-blocks.ts';
+import { MAX_DEFER_BLOCKS, createDeferTracker, type DeferDebugNg } from '../defer-blocks.ts';
import { elementById } from '../element-id.ts';
import { DEFER_ROWS, deferBlocksText, toComponentPage } from '../rpc/component-tools.ts';
import { MAX_TOOL_CHARS } from '../rpc/router-tools.ts';
@@ -50,6 +50,57 @@ describe('createDeferTracker', () => {
expect(createDeferTracker().collect(undefined)).toBeUndefined();
});
+ it('stops at MAX_DEFER_BLOCKS and says so until a collection fits again', () => {
+ const { root, instances } = page();
+ let count = MAX_DEFER_BLOCKS + 1;
+ const ng: DeferDebugNg = {
+ getComponent: (el) => instances.get(el) ?? null,
+ ɵgetControlFlowBlocks: (node) =>
+ node === root
+ ? Array.from({ length: count }, () => {
+ const anchor = document.createComment('container');
+ root.appendChild(anchor);
+ return block({ hostNode: anchor });
+ })
+ : [],
+ };
+ const tracker = createDeferTracker(() => 1000);
+ expect(tracker.truncated).toBe(false);
+ expect(tracker.collect(ng)).toHaveLength(MAX_DEFER_BLOCKS);
+ expect(tracker.truncated).toBe(true);
+ count = MAX_DEFER_BLOCKS;
+ expect(tracker.collect(ng)).toHaveLength(MAX_DEFER_BLOCKS);
+ expect(tracker.truncated).toBe(false);
+ expect(tracker.collect(undefined)).toBeUndefined();
+ expect(tracker.truncated).toBe(false);
+ });
+
+ it('does not mark a list cut when the block past the cap repeats a host', () => {
+ const { root, instances } = page();
+ const anchors = Array.from({ length: MAX_DEFER_BLOCKS }, () => {
+ const anchor = document.createComment('container');
+ root.appendChild(anchor);
+ return anchor;
+ });
+ let extra: Comment | null = null;
+ const ng: DeferDebugNg = {
+ getComponent: (el) => instances.get(el) ?? null,
+ ɵgetControlFlowBlocks: (node) =>
+ node === root
+ ? [...anchors, ...(extra ? [extra] : []), anchors[0]].map((anchor) =>
+ block({ hostNode: anchor }),
+ )
+ : [],
+ };
+ const tracker = createDeferTracker(() => 1000);
+ expect(tracker.collect(ng)).toHaveLength(MAX_DEFER_BLOCKS);
+ expect(tracker.truncated).toBe(false);
+ extra = document.createComment('container');
+ root.appendChild(extra);
+ expect(tracker.collect(ng)).toHaveLength(MAX_DEFER_BLOCKS);
+ expect(tracker.truncated).toBe(true);
+ });
+
it('reads defer blocks with their owner, state, triggers and root elements', () => {
const { root, reviews, anchor, lazy, instances } = page();
const section = reviews.querySelector('section')!;
@@ -293,6 +344,27 @@ describe('deferBlocksText', () => {
expect(two).toContain('7 more blocks not shown. Pass `page` to read one tab. The Defer blocks');
});
+ it('keeps the truncated flag on the server and says the list stops at the cap', () => {
+ const blocks = Array.from({ length: 3 }, (_, n) => info({ id: `d${n}` }));
+ const page = toComponentPage({ ...report(blocks), deferTruncated: true });
+ expect(page.deferTruncated).toBe(true);
+ const text = deferBlocksText([page], 30_000);
+ expect(text).toContain(
+ `more than ${MAX_DEFER_BLOCKS} defer blocks. Only the first ${MAX_DEFER_BLOCKS} are collected`,
+ );
+ expect(text).not.toContain('3 defer blocks');
+
+ const plain = toComponentPage({ ...report(blocks), deferTruncated: 'yes' as never });
+ expect(plain).not.toHaveProperty('deferTruncated');
+ expect(deferBlocksText([plain], 30_000)).toContain('3 defer blocks.');
+
+ // A page that sends more than the cap is cut and flagged on the server.
+ const many = Array.from({ length: MAX_DEFER_BLOCKS + 2 }, (_, n) => info({ id: `d${n}` }));
+ const cut = toComponentPage(report(many));
+ expect(cut.deferBlocks).toHaveLength(MAX_DEFER_BLOCKS);
+ expect(cut.deferTruncated).toBe(true);
+ });
+
it('cuts the whole answer at the shared tool size and says how to narrow it', () => {
const pages = Array.from({ length: 8 }, (_, n) => ({
...report(Array.from({ length: DEFER_ROWS }, (_, i) => info({ id: `d${i}` }))),
diff --git a/packages/devtools/src/__tests__/pipes-collector.test.ts b/packages/devtools/src/__tests__/pipes-collector.test.ts
index 8114e68b..a116433a 100644
--- a/packages/devtools/src/__tests__/pipes-collector.test.ts
+++ b/packages/devtools/src/__tests__/pipes-collector.test.ts
@@ -96,6 +96,15 @@ Component({
template: `{{ value() | explode }}
`,
})(Explodes);
+class Receipts {
+ rows = Array.from({ length: 12 }, (_, i) => i);
+}
+Component({
+ selector: 'app-receipts',
+ imports: [Receipt],
+ template: `@for (row of rows; track row) { }`,
+})(Receipts);
+
function harness(pageId = 'pg', tree?: HostTree) {
const calls: { name: string; args: unknown[] }[] = [];
const handlers = new Map unknown>();
@@ -164,6 +173,21 @@ describe('pipes collector', () => {
expect(currency.call).toBeUndefined();
});
+ it('lists the first ten host elements of a component and counts them all', async () => {
+ await mount(Receipts);
+ const h = harness();
+ h.collector.push();
+ await Promise.resolve();
+ const currency = h
+ .reports()
+ .at(-1)!
+ .pipes.find((p) => p.name === 'currency')!;
+ const [receipt] = currency.components;
+ expect(receipt).toMatchObject({ name: 'Receipt', count: 24, targetTotal: 12 });
+ expect(receipt!.targets).toHaveLength(10);
+ expect(new Set(receipt!.targets!.map((t) => t.id)).size).toBe(10);
+ });
+
it('tracks call count, last input/output and caller once instrumented', async () => {
const fixture = await mount(Receipt);
const h = harness();
diff --git a/packages/devtools/src/__tests__/pipes-pages.test.ts b/packages/devtools/src/__tests__/pipes-pages.test.ts
index 514e203d..2360115a 100644
--- a/packages/devtools/src/__tests__/pipes-pages.test.ts
+++ b/packages/devtools/src/__tests__/pipes-pages.test.ts
@@ -123,6 +123,52 @@ describe('pipe page targets', () => {
expect(state.pipes[0].components[0].targets).toEqual([{ pageId: 'tab-1', id: 'c1' }]);
});
+ it('keeps and adds up targetTotal across pages, and counts targets the server cuts', () => {
+ const pages = new Map();
+ const targets = (pageId: string, n: number) =>
+ Array.from({ length: n }, (_, i) => ({ pageId, id: `c${i}` }));
+ const withTargets = (pageId: string, usage: Record): PipePageReport => ({
+ ...page(pageId),
+ pipes: [
+ { ...page(pageId).pipes[0], components: [{ name: 'Row', count: 30, ...usage } as never] },
+ ],
+ });
+ const one = mergePipePageReport(
+ pages,
+ withTargets('tab-1', { targets: targets('tab-1', 10), targetTotal: 25 }),
+ 0,
+ );
+ expect(one.pipes[0].components[0]).toMatchObject({ targetTotal: 25 });
+ const two = mergePipePageReport(
+ pages,
+ withTargets('tab-2', { targets: targets('tab-2', 3) }),
+ 0,
+ );
+ const row = two.pipes[0].components[0]!;
+ expect(row.targets).toHaveLength(10);
+ expect(row.targetTotal).toBe(28);
+
+ // A page that sends more targets than the server keeps.
+ const cut = mergePipePageReport(
+ new Map(),
+ withTargets('tab-3', { targets: targets('tab-3', 14) }),
+ 0,
+ ).pipes[0].components[0]!;
+ expect(cut.targets).toHaveLength(10);
+ expect(cut.targetTotal).toBe(14);
+
+ // No total when every target is listed, even if the page sent a stale one.
+ const whole = mergePipePageReport(
+ new Map(),
+ withTargets('tab-4', { targets: targets('tab-4', 2), targetTotal: 1 }),
+ 0,
+ ).pipes[0].components[0]!;
+ expect(whole).not.toHaveProperty('targetTotal');
+
+ const report = withTargets('tab-5', { targets: targets('tab-5', 1), targetTotal: 'x' });
+ expect(isPipePageReport(report)).toBe(false);
+ });
+
it('rejects a report whose targets are malformed', () => {
const report = page('tab-1');
expect(isPipePageReport(report)).toBe(true);
diff --git a/packages/devtools/src/__tests__/private-api-canary.test.ts b/packages/devtools/src/__tests__/private-api-canary.test.ts
new file mode 100644
index 00000000..b2e11161
--- /dev/null
+++ b/packages/devtools/src/__tests__/private-api-canary.test.ts
@@ -0,0 +1,173 @@
+// @vitest-environment jsdom
+import '@angular/compiler';
+import {
+ Component,
+ Directive,
+ provideZonelessChangeDetection,
+ signal,
+ ɵsetClassDebugInfo,
+ type ApplicationRef,
+} from '@angular/core';
+import { bootstrapApplication } from '@angular/platform-browser';
+import { provideRouter } from '@angular/router';
+import { afterAll, beforeAll, describe, expect, it } from 'vitest';
+import { angularAtLeast } from './angular-version.ts';
+
+/**
+ * Every private (`ɵ`) and public debug symbol the collectors read from the
+ * running Angular. A rename or removal fails here first, by name, instead of
+ * as an empty inspector. Symbols with a version are optional before it, and
+ * the collectors fall back or report that the page has no data.
+ */
+
+/** `window.ng` utils every supported version (Angular 20.0+) publishes. */
+const REQUIRED_NG_UTILS = [
+ // component-tree, forms, pipes-runtime, signal-graph, cd-overlay, router
+ 'getComponent',
+ 'getDirectives',
+ 'getInjector',
+ 'getHostElement',
+ 'getOwningComponent',
+ 'getListeners',
+ 'getDirectiveMetadata',
+ 'getRootComponents',
+ 'applyChanges',
+ 'isSignal',
+ // injector-tree, router, router-setup, ngrx-collector, forms-webmcp
+ 'ɵgetInjectorProviders',
+ 'ɵgetInjectorResolutionPath',
+ 'ɵgetInjectorMetadata',
+ 'ɵgetDependenciesFromInjectable',
+ // change-detection, cd-overlay
+ 'ɵsetProfiler',
+ // signal-graph
+ 'ɵgetSignalGraph',
+] as const;
+
+/**
+ * Utils that exist only from a given version, or only up to one. Each entry
+ * names the version that brought it in (`since`) or took it out (`until`).
+ */
+const VERSIONED_NG_UTILS = [
+ // defer-blocks: renamed from `ɵgetDeferBlocks` in Angular 22.0.
+ { name: 'ɵgetControlFlowBlocks', since: '22.0.0' },
+ { name: 'ɵgetDeferBlocks', until: '22.0.0' },
+ // router: provideRouter publishes it since Angular 20.3.5; before that the
+ // overlay finds the Router through `ɵgetInjectorProviders`.
+ { name: 'ɵgetRouterInstance', since: '20.3.5' },
+] as const;
+
+class TripBadge {}
+Directive({ selector: '[appTripBadge]' })(TripBadge);
+
+class TripCard {
+ tripId = '';
+ readonly selected = signal(false);
+}
+Component({
+ selector: 'app-trip-card',
+ imports: [TripBadge],
+ inputs: [{ name: 'tripId', alias: 'trip' }],
+ template: 'Trip ',
+})(TripCard);
+ɵsetClassDebugInfo(TripCard, {
+ className: 'TripCard',
+ filePath: 'src/app/trip-card.ts',
+ lineNumber: 12,
+});
+
+class TripPage {}
+Component({
+ selector: 'app-root',
+ imports: [TripCard],
+ template: ' ',
+})(TripPage);
+
+type Ng = Record;
+type Def = Record;
+
+describe('private API canary', () => {
+ let app: ApplicationRef;
+ let ng: Ng;
+
+ beforeAll(async () => {
+ document.body.innerHTML = ' ';
+ app = await bootstrapApplication(TripPage, {
+ providers: [provideZonelessChangeDetection(), provideRouter([])],
+ });
+ app.tick();
+ ng = (globalThis as { ng?: Ng }).ng!;
+ });
+
+ afterAll(() => {
+ app.destroy();
+ document.body.innerHTML = '';
+ });
+
+ it.each(REQUIRED_NG_UTILS)('window.ng.%s is a function', (name) => {
+ expect(typeof ng[name], `ng.${name}`).toBe('function');
+ });
+
+ it.each(VERSIONED_NG_UTILS)('window.ng.$name matches its version range', (entry) => {
+ const expected =
+ ('since' in entry ? angularAtLeast(entry.since) : true) &&
+ ('until' in entry ? !angularAtLeast(entry.until) : true);
+ expect(typeof ng[entry.name] === 'function', `ng.${entry.name}`).toBe(expected);
+ });
+
+ it('ɵsetProfiler hands back a remover (Angular 20.0+)', () => {
+ const remove = (ng['ɵsetProfiler'] as (fn: () => void) => unknown)(() => {});
+ expect(typeof remove).toBe('function');
+ (remove as () => void)();
+ });
+
+ it('component and directive definitions keep the fields the collectors read', () => {
+ const cmp = (TripCard as unknown as { ɵcmp?: Def }).ɵcmp;
+ expect(cmp, 'TripCard.ɵcmp').toBeDefined();
+ // overlay-angular-native-views, overlay-nativescript-views: selectors[0][0]
+ expect((cmp!['selectors'] as unknown[][])[0][0]).toBe('app-trip-card');
+ // router-config, router-links: inputs keyed by public name
+ expect(Object.keys(cmp!['inputs'] as object)).toContain('trip');
+ // component-source, router: debugInfo set by ɵsetClassDebugInfo in dev builds
+ expect(cmp!['debugInfo']).toMatchObject({
+ className: 'TripCard',
+ filePath: 'src/app/trip-card.ts',
+ lineNumber: 12,
+ });
+ // forms: ɵdir.selectors
+ const dir = (TripBadge as unknown as { ɵdir?: Def }).ɵdir;
+ expect((dir!['selectors'] as unknown[][])[0]).toContain('appTripBadge');
+ });
+
+ it('the debug utils return the shapes the collectors read', () => {
+ const host = document.querySelector('app-trip-card')!;
+ const getComponent = ng['getComponent'] as (el: Element) => unknown;
+ const card = getComponent(host);
+ expect(card).toBeInstanceOf(TripCard);
+ expect((card as TripCard).tripId).toBe('lisbon');
+ expect((ng['getHostElement'] as (c: unknown) => unknown)(card)).toBe(host);
+ const span = host.querySelector('span')!;
+ expect((ng['getDirectives'] as (el: Element) => unknown[])(span)[0]).toBeInstanceOf(TripBadge);
+ expect((ng['getOwningComponent'] as (el: Element) => unknown)(span)).toBe(card);
+ expect((ng['isSignal'] as (v: unknown) => boolean)((card as TripCard).selected)).toBe(true);
+
+ const injector = (ng['getInjector'] as (el: Element) => unknown)(host);
+ const meta = (ng['ɵgetInjectorMetadata'] as (i: unknown) => { type: string } | null)(injector);
+ expect(meta?.type).toBe('element');
+ const path = (ng['ɵgetInjectorResolutionPath'] as (i: unknown) => unknown[])(injector);
+ expect(path.length).toBeGreaterThan(1);
+ const types = path.map(
+ (each) => (ng['ɵgetInjectorMetadata'] as (i: unknown) => { type: string } | null)(each)?.type,
+ );
+ expect(types).toContain('environment');
+ const providers = (ng['ɵgetInjectorProviders'] as (i: unknown) => { token: unknown }[])(
+ path.find((_, i) => types[i] === 'environment'),
+ );
+ expect(providers.length).toBeGreaterThan(0);
+ expect(providers[0]).toHaveProperty('token');
+
+ // pipes-runtime: after getComponent, __ngContext__ is an LContext with an lView array.
+ const context = (host as unknown as { __ngContext__?: { lView?: unknown } }).__ngContext__;
+ expect(Array.isArray(context?.lView)).toBe(true);
+ });
+});
diff --git a/packages/devtools/src/__tests__/router-mcp.test.ts b/packages/devtools/src/__tests__/router-mcp.test.ts
index 54a1c955..ea2d4011 100644
--- a/packages/devtools/src/__tests__/router-mcp.test.ts
+++ b/packages/devtools/src/__tests__/router-mcp.test.ts
@@ -348,6 +348,20 @@ describe('router MCP tools', () => {
expect(text).toContain('`onSameUrlNavigation`: `ignore`');
expect(text).toContain('`preloading`: `PreloadAllModules`');
expect(text).toContain('**Instrumentation** on');
+ expect(text).toContain('**Mode** full');
+ });
+
+ it('router-config says events-only mode limits setup detection, not the config', async () => {
+ const { push, call } = await boot();
+ await push('push-router', report({ setup: { ...report().setup, mode: 'events-only' } }));
+ const text = await call('router-config');
+ expect(text).toContain('**Mode** events-only');
+ expect(text).toMatch(
+ /setup detection is limited: the preloader, the scroller and the router providers/,
+ );
+ expect(text).not.toMatch(/config, lint and actions are limited/);
+ expect(await call('list-routes')).toContain('/users/:id');
+ expect(await call('lint-routes')).not.toMatch(/No checks ran/);
});
it('export-navigation builds a repro for the latest failure', async () => {
diff --git a/packages/devtools/src/cd-recorder.ts b/packages/devtools/src/cd-recorder.ts
index 94c8918b..3dd1b468 100644
--- a/packages/devtools/src/cd-recorder.ts
+++ b/packages/devtools/src/cd-recorder.ts
@@ -13,8 +13,12 @@ export const PROFILER_EVENT = {
} as const;
const TOP_PER_CYCLE = 10;
-const MAX_COMPONENTS = 100;
-const MAX_HOSTS = 2000;
+/** Component classes a snapshot lists, by self time. */
+export const MAX_COMPONENTS = 100;
+/** Component classes the recorder keeps totals for. */
+const MAX_TRACKED_CLASSES = MAX_COMPONENTS * 10;
+/** Component instances the recorder counts checks for. */
+export const MAX_HOSTS = 2000;
const MAX_NESTED = 10;
/**
* How long after an output listener ends a tick can still be credited to it.
@@ -88,6 +92,12 @@ export function createCdRecorder(options: {
let perInstance = new WeakMap();
let instances: WeakRef[] = [];
let prunedCycle = 0;
+ // Classes and instances checked past the caps, each counted once. An
+ // untracked instance keeps its checks so they carry over if a slot frees up.
+ let untrackedClasses = new WeakSet();
+ let untrackedClassCount = 0;
+ let untrackedHosts = new WeakMap();
+ let untrackedHostCount = 0;
const onEvent = (event: number, instance?: unknown, hook?: unknown) => {
if (!recording) return;
@@ -149,7 +159,7 @@ export function createCdRecorder(options: {
stat.cycles++;
stat.lastCycle = current.id;
}
- } else if (totals.size < MAX_COMPONENTS * 10) {
+ } else if (totals.size < MAX_TRACKED_CLASSES) {
totals.set(ctor, {
name: '',
checks: 1,
@@ -158,6 +168,9 @@ export function createCdRecorder(options: {
cycles: 1,
lastCycle: current.id,
});
+ } else if (!untrackedClasses.has(ctor)) {
+ untrackedClasses.add(ctor);
+ untrackedClassCount++;
}
const seen = perInstance.get(instance);
if (seen !== undefined) {
@@ -168,9 +181,17 @@ export function createCdRecorder(options: {
prunedCycle = current.id;
instances = instances.filter((ref) => ref.deref());
}
+ const earlier = untrackedHosts.get(instance);
if (instances.length < MAX_HOSTS) {
instances.push(new WeakRef(instance));
- perInstance.set(instance, 1);
+ perInstance.set(instance, (earlier ?? 0) + 1);
+ if (earlier !== undefined) {
+ untrackedHosts.delete(instance);
+ untrackedHostCount--;
+ }
+ } else {
+ untrackedHosts.set(instance, (earlier ?? 0) + 1);
+ if (earlier === undefined) untrackedHostCount++;
}
return;
}
@@ -202,6 +223,10 @@ export function createCdRecorder(options: {
perInstance = new WeakMap();
instances = [];
prunedCycle = 0;
+ untrackedClasses = new WeakSet();
+ untrackedClassCount = 0;
+ untrackedHosts = new WeakMap();
+ untrackedHostCount = 0;
};
return {
@@ -239,10 +264,13 @@ export function createCdRecorder(options: {
const id = instance && hostId(instance);
if (id) hosts[id] = (hosts[id] ?? 0) + (perInstance.get(instance!) ?? 0);
}
+ const droppedClasses = untrackedClassCount + Math.max(0, totals.size - MAX_COMPONENTS);
return {
recording,
startedAt,
dropped,
+ ...(droppedClasses ? { droppedClasses } : {}),
+ ...(untrackedHostCount ? { droppedHosts: untrackedHostCount } : {}),
hosts,
cycles: cycles.map((cycle) => {
const checks = [...cycle.checks].map(([ctor, check]) => ({
diff --git a/packages/devtools/src/config.ts b/packages/devtools/src/config.ts
index befeeb04..96d98b8d 100644
--- a/packages/devtools/src/config.ts
+++ b/packages/devtools/src/config.ts
@@ -894,6 +894,13 @@ export interface CdRecording {
/** Older cycles removed at `limits.cdCycles`. */
dropped: number;
components: CdComponentStat[];
+ /**
+ * Component classes checked but left out of `components`: past the 100
+ * listed by self time, or past the 1000 the recorder keeps totals for.
+ */
+ droppedClasses?: number;
+ /** Component instances checked past the 2000 that `hosts` counts. */
+ droppedHosts?: number;
/** Checks per component host, keyed by the component tree's element id. */
hosts: Record;
}
diff --git a/packages/devtools/src/defer-blocks.ts b/packages/devtools/src/defer-blocks.ts
index 43368464..b21ca41e 100644
--- a/packages/devtools/src/defer-blocks.ts
+++ b/packages/devtools/src/defer-blocks.ts
@@ -21,7 +21,8 @@ interface RawDeferBlock {
rootNodes?: unknown;
}
-const MAX_BLOCKS = 500;
+/** The most defer blocks one collection reports. */
+export const MAX_DEFER_BLOCKS = 500;
const MAX_ROOT_IDS = 5;
const DEFER_TYPE = 0;
const HYDRATION = new Set(['not-configured', 'dehydrated', 'hydrated']);
@@ -70,6 +71,7 @@ export function createDeferTracker(now: () => number = Date.now) {
const byPosition = new WeakMap();
const lastHosts = new WeakMap();
let nextId = 0;
+ let truncated = false;
const positionKey = (root: Element, index: number) => {
let keys = byPosition.get(root);
@@ -114,8 +116,13 @@ export function createDeferTracker(now: () => number = Date.now) {
};
return {
+ /** True when the last `collect` stopped at {@link MAX_DEFER_BLOCKS} with blocks left. */
+ get truncated() {
+ return truncated;
+ },
/** Every defer block on the page, or `undefined` when Angular exposes no util for them. */
collect(ng: DeferDebugNg | undefined, doc: Document = document): DeferBlockInfo[] | undefined {
+ truncated = false;
const util = ng?.ɵgetControlFlowBlocks ?? ng?.ɵgetDeferBlocks;
if (!ng || typeof util !== 'function') return undefined;
const hosts = new Set();
@@ -126,7 +133,6 @@ export function createDeferTracker(now: () => number = Date.now) {
const order: object[] = [];
let position = 0;
for (const [index, raw] of valid.entries()) {
- if (out.length >= MAX_BLOCKS) return out;
const roots: unknown[] = Array.isArray(raw.rootNodes) ? raw.rootNodes : [];
const hostNode = raw.hostNode instanceof Node ? raw.hostNode : anchorOf(roots);
if (hostNode && !(raw.hostNode instanceof Node)) {
@@ -135,6 +141,11 @@ export function createDeferTracker(now: () => number = Date.now) {
const host = hostNode ?? positionKey(root, position++);
order.push(host);
if (hosts.has(host)) continue;
+ // Only a new block past the cap means some were left out.
+ if (out.length >= MAX_DEFER_BLOCKS) {
+ truncated = true;
+ return out;
+ }
hosts.add(host);
const hydration = HYDRATION.has(raw.incrementalHydrationState as string)
? (raw.incrementalHydrationState as DeferBlockInfo['hydration'])
diff --git a/packages/devtools/src/overlay.ts b/packages/devtools/src/overlay.ts
index 1c04676e..b82dbf51 100644
--- a/packages/devtools/src/overlay.ts
+++ b/packages/devtools/src/overlay.ts
@@ -290,6 +290,7 @@ async function startOverlay(options: OverlayOptions, own: (cleanup: () => void)
url: redactUrl(location.href),
title: redactMessage(document.title),
...(deferBlocks ? { deferBlocks } : {}),
+ ...(deferTracker.truncated ? { deferTruncated: true } : {}),
};
const json = JSON.stringify(tree);
if (!force && json === lastTreeJson) {
diff --git a/packages/devtools/src/pipes-collector.ts b/packages/devtools/src/pipes-collector.ts
index 475ac181..454f5c50 100644
--- a/packages/devtools/src/pipes-collector.ts
+++ b/packages/devtools/src/pipes-collector.ts
@@ -460,6 +460,8 @@ export function attachPipes(
const out: PipeUsageInfo[] = [];
for (const [name, group] of byName) {
const byComponent = new Map();
+ // Every host id per component, to count the targets past MAX_TARGETS.
+ const targetIds = new Map>();
for (const usage of group) {
const label = componentName(usage.component);
let entry = byComponent.get(label);
@@ -469,11 +471,22 @@ export function attachPipes(
}
entry.count++;
const target = targetOf(usage.component);
- if (target && !entry.targets?.some((t) => t.id === target.id)) {
- entry.targets ??= [];
- if (entry.targets.length < MAX_TARGETS) entry.targets.push(target);
+ if (target) {
+ let ids = targetIds.get(entry);
+ if (!ids) {
+ ids = new Set();
+ targetIds.set(entry, ids);
+ }
+ if (!ids.has(target.id)) {
+ ids.add(target.id);
+ entry.targets ??= [];
+ if (entry.targets.length < MAX_TARGETS) entry.targets.push(target);
+ }
}
}
+ for (const [entry, ids] of targetIds) {
+ if (ids.size > (entry.targets?.length ?? 0)) entry.targetTotal = ids.size;
+ }
const components = Array.from(byComponent.values());
let callCount = 0;
diff --git a/packages/devtools/src/rpc/__tests__/injector-report.test.ts b/packages/devtools/src/rpc/__tests__/injector-report.test.ts
index 9816e384..c1733474 100644
--- a/packages/devtools/src/rpc/__tests__/injector-report.test.ts
+++ b/packages/devtools/src/rpc/__tests__/injector-report.test.ts
@@ -1,6 +1,10 @@
import { describe, expect, it } from 'vitest';
import { MAX_INJECTOR_NODES } from '../../injector-tree.ts';
-import { MAX_REPORTED_INJECTORS, sanitizeInjectorTree } from '../injector-report.ts';
+import {
+ MAX_INJECTOR_DEPTH,
+ MAX_REPORTED_INJECTORS,
+ sanitizeInjectorTree,
+} from '../injector-report.ts';
const node = (name: string, extra: Record = {}) => ({
injector: { id: `inj-${name}`, type: 'element', name, providerCount: 0 },
@@ -99,4 +103,22 @@ describe('sanitizeInjectorTree', () => {
);
expect(full.truncated).toBe(false);
});
+
+ it('leaves out injectors nested past the depth cap and says so', () => {
+ const chain = (levels: number) => {
+ let tree = node('leaf');
+ for (let i = levels - 1; i > 0; i--) tree = node(`n${i}`, { children: [tree] });
+ return tree;
+ };
+ const depthOf = (list: { children: unknown[] }[]): number =>
+ list.length ? 1 + depthOf(list[0]!.children as { children: unknown[] }[]) : 0;
+
+ const fits = sanitizeInjectorTree([chain(MAX_INJECTOR_DEPTH + 1)], []);
+ expect(depthOf(fits.roots)).toBe(MAX_INJECTOR_DEPTH + 1);
+ expect(fits.truncated).toBe(false);
+
+ const deep = sanitizeInjectorTree([chain(MAX_INJECTOR_DEPTH + 3)], []);
+ expect(depthOf(deep.roots)).toBe(MAX_INJECTOR_DEPTH + 1);
+ expect(deep.truncated).toBe(true);
+ });
});
diff --git a/packages/devtools/src/rpc/cd-tools.ts b/packages/devtools/src/rpc/cd-tools.ts
index 9ff41521..824a5c71 100644
--- a/packages/devtools/src/rpc/cd-tools.ts
+++ b/packages/devtools/src/rpc/cd-tools.ts
@@ -74,11 +74,18 @@ export function toCdPage(value: unknown, maxCycles: number, now = Date.now()): C
.filter((c): c is CdCycle => !!c)
: [];
const hosts: Record = {};
+ let extraHosts = 0;
if (isRecord(value['hosts'])) {
- for (const [id, count] of Object.entries(value['hosts']).slice(0, MAX_HOSTS)) {
+ const entries = Object.entries(value['hosts']);
+ extraHosts = Math.max(0, entries.length - MAX_HOSTS);
+ for (const [id, count] of entries.slice(0, MAX_HOSTS)) {
if (id.length < 50 && num(count)) hosts[id] = num(count);
}
}
+ const components = Array.isArray(value['components']) ? value['components'] : [];
+ const droppedClasses =
+ Math.floor(num(value['droppedClasses'])) + Math.max(0, components.length - MAX_COMPONENTS);
+ const droppedHosts = Math.floor(num(value['droppedHosts'])) + extraHosts;
return {
pageId,
supported: value['supported'] !== false,
@@ -86,13 +93,13 @@ export function toCdPage(value: unknown, maxCycles: number, now = Date.now()): C
startedAt: typeof value['startedAt'] === 'number' ? value['startedAt'] : null,
dropped: num(value['dropped']),
cycles,
- components: Array.isArray(value['components'])
- ? value['components']
- .slice(0, MAX_COMPONENTS)
- .map(stat)
- .filter((c): c is CdComponentStat => !!c)
- : [],
+ components: components
+ .slice(0, MAX_COMPONENTS)
+ .map(stat)
+ .filter((c): c is CdComponentStat => !!c),
+ ...(droppedClasses ? { droppedClasses } : {}),
hosts,
+ ...(droppedHosts ? { droppedHosts } : {}),
reportedAt: now,
};
}
@@ -145,6 +152,27 @@ export function pickCdPage(state: CdState, pageId?: string): CdPage | undefined
return pages.find((p) => p.recording) ?? pages.sort((a, b) => b.reportedAt - a.reportedAt)[0];
}
+/**
+ * Agent tool note for the component classes and instances a recording checked
+ * past its fixed caps, so the totals do not read as complete.
+ */
+export function cdCapsNote(page: Pick): string {
+ const notes: string[] = [];
+ const classes = page.droppedClasses ?? 0;
+ const hosts = page.droppedHosts ?? 0;
+ if (classes > 0) {
+ notes.push(
+ `${classes} more component ${classes === 1 ? 'class was' : 'classes were'} checked but ${classes === 1 ? 'is' : 'are'} not listed: a recording lists at most ${MAX_COMPONENTS} classes, by self time.`,
+ );
+ }
+ if (hosts > 0) {
+ notes.push(
+ `${hosts} component ${hosts === 1 ? 'instance was' : 'instances were'} checked past the ${MAX_HOSTS} instances a recording counts, so ${hosts === 1 ? 'it has' : 'they have'} no check count in the component tree.`,
+ );
+ }
+ return notes.length ? `\n\n_${notes.join(' ')}_` : '';
+}
+
const ms = (value: number) => `${Math.round(value * 100) / 100}ms`;
/** Markdown for the `change-detection` agent tool. */
@@ -183,5 +211,5 @@ export function changeDetectionText(
.join(', ')}`
: ''
}`;
- return `${UNTRUSTED}\n\n${status} Page ${code(page.pageId)}: ${page.cycles.length} cycle(s) kept, ${ms(totalMs)} in total. Times are self times from Angular's profiler in a development build, so they are higher than in production.\n\n**Slowest components**\n${slowest.map(line).join('\n')}\n\n**Most often checked**\n${busiest.map(line).join('\n')}\n\n**Latest cycles**, newest first\n${recent.map(cycleLine).join('\n')}${droppedNote(page.dropped, 'cycles', 'cdCycles')}`;
+ return `${UNTRUSTED}\n\n${status} Page ${code(page.pageId)}: ${page.cycles.length} cycle(s) kept, ${ms(totalMs)} in total. Times are self times from Angular's profiler in a development build, so they are higher than in production.\n\n**Slowest components**\n${slowest.map(line).join('\n')}\n\n**Most often checked**\n${busiest.map(line).join('\n')}\n\n**Latest cycles**, newest first\n${recent.map(cycleLine).join('\n')}${droppedNote(page.dropped, 'cycles', 'cdCycles')}${cdCapsNote(page)}`;
}
diff --git a/packages/devtools/src/rpc/component-tools.ts b/packages/devtools/src/rpc/component-tools.ts
index 49a5b7dc..de52ab87 100644
--- a/packages/devtools/src/rpc/component-tools.ts
+++ b/packages/devtools/src/rpc/component-tools.ts
@@ -1,3 +1,4 @@
+import { MAX_DEFER_BLOCKS } from '../defer-blocks.ts';
import type { ComponentPage, DeferBlockInfo, LiveComponentNode } from '../types.ts';
import { redactMessage, redactUrl } from '../router.ts';
import { untrusted } from './forms-tools.ts';
@@ -39,7 +40,12 @@ export function toComponentPage(report: Omit, now =
}
if (typeof report.url === 'string') page.url = redactUrl(report.url.slice(0, 2000));
if (typeof report.title === 'string') page.title = redactMessage(report.title.slice(0, 200));
- if (Array.isArray(report.deferBlocks)) page.deferBlocks = report.deferBlocks.slice(0, 500);
+ if (Array.isArray(report.deferBlocks)) {
+ page.deferBlocks = report.deferBlocks.slice(0, MAX_DEFER_BLOCKS);
+ if (report.deferTruncated === true || report.deferBlocks.length > MAX_DEFER_BLOCKS) {
+ page.deferTruncated = true;
+ }
+ }
if (report.platform === 'angular-native' || report.platform === 'nativescript') {
page.platform = report.platform;
}
@@ -189,8 +195,11 @@ export function deferBlocksText(pages: ComponentPage[], now = Date.now()): strin
const more = (hidden: number, what: string) =>
hidden > 0 ? ['', `${hidden} more ${what} not shown.${narrow}`] : [];
const hiddenRows = rows.length - DEFER_ROWS;
+ const count = page.deferTruncated
+ ? `more than ${MAX_DEFER_BLOCKS} defer blocks. Only the first ${MAX_DEFER_BLOCKS} are collected, so blocks past them are not listed or counted here.`
+ : `${page.deferBlocks.length} defer ${page.deferBlocks.length === 1 ? 'block' : 'blocks'}.`;
return [
- `${title}: ${page.deferBlocks.length} defer ${page.deferBlocks.length === 1 ? 'block' : 'blocks'}.`,
+ `${title}: ${count}`,
'',
'| Block | Owner | State | Hydration | Triggers | Notes |',
'| --- | --- | --- | --- | --- | --- |',
diff --git a/packages/devtools/src/rpc/injector-report.ts b/packages/devtools/src/rpc/injector-report.ts
index 7a4c8db0..df8b53c8 100644
--- a/packages/devtools/src/rpc/injector-report.ts
+++ b/packages/devtools/src/rpc/injector-report.ts
@@ -7,7 +7,8 @@ export const MAX_REPORTED_INJECTORS = MAX_INJECTOR_NODES + 500;
const MAX_TEXT = 500;
const MAX_SELECTOR = 4000;
const MAX_PROVIDERS = 1000;
-const MAX_DEPTH = 1000;
+/** How deep an injector can sit before the server leaves it out. */
+export const MAX_INJECTOR_DEPTH = 1000;
const clipped = (max: number) =>
v.pipe(
@@ -70,7 +71,8 @@ function valid(
* providers and dependencies are dropped, long strings are clipped, and the
* tree is cut with `truncated` set: element injectors at `MAX_INJECTOR_NODES`,
* then environment injectors at what is left of `MAX_REPORTED_INJECTORS`, so
- * environment injectors never push element injectors out.
+ * environment injectors never push element injectors out. Injectors nested
+ * deeper than `MAX_INJECTOR_DEPTH` are left out too.
*/
export function sanitizeInjectorTree(
roots: unknown,
@@ -81,7 +83,7 @@ export function sanitizeInjectorTree(
const nodes = (list: unknown, depth: number): InjectorTreeNode[] => {
const out: InjectorTreeNode[] = [];
if (!Array.isArray(list)) return out;
- if (depth > MAX_DEPTH) {
+ if (depth > MAX_INJECTOR_DEPTH) {
if (list.length) truncated = true;
return out;
}
diff --git a/packages/devtools/src/rpc/injector-tools.ts b/packages/devtools/src/rpc/injector-tools.ts
index 84d84596..585f7e3f 100644
--- a/packages/devtools/src/rpc/injector-tools.ts
+++ b/packages/devtools/src/rpc/injector-tools.ts
@@ -1,4 +1,5 @@
import { MAX_INJECTOR_NODES, NULL_INJECTOR_ID } from '../injector-tree.ts';
+import { MAX_INJECTOR_DEPTH, MAX_REPORTED_INJECTORS } from './injector-report.ts';
import type { InjectorPage, InjectorTreeNode } from '../types.ts';
import { zoneModeText } from '../zone-mode.ts';
import { untrusted } from './forms-tools.ts';
@@ -174,7 +175,7 @@ export function inspectProvidersText(
? 'Null injector'
: (byId.get(id)?.injector.name ?? '(not in the report)');
const notes = page.truncated
- ? `\n\nThe page has more than ${MAX_INJECTOR_NODES} element injectors and stopped reporting there, so injectors further down the page are missing from this answer.`
+ ? `\n\nThe page reported only part of its injector tree (it keeps at most ${MAX_INJECTOR_NODES} element injectors and ${MAX_REPORTED_INJECTORS} in all, and leaves out injectors nested more than ${MAX_INJECTOR_DEPTH} levels deep), so some injectors are missing from this answer and a lookup path or a provider can point to one that is not listed.`
: '';
const selector = args.selector?.trim();
diff --git a/packages/devtools/src/rpc/pipes-tools.ts b/packages/devtools/src/rpc/pipes-tools.ts
index cabe754b..ab581c0a 100644
--- a/packages/devtools/src/rpc/pipes-tools.ts
+++ b/packages/devtools/src/rpc/pipes-tools.ts
@@ -20,6 +20,8 @@ export interface PipeComponentUsage {
name: string;
count: number;
targets?: PipeTarget[];
+ /** How many host elements the component has, present when `targets` was cut short. */
+ targetTotal?: number;
}
/** Time spent in `transform` and the calls that threw, shared by a pipe's
@@ -138,10 +140,23 @@ function isPipeComponentUsage(value: unknown): value is PipeComponentUsage {
typeof usage.name === 'string' &&
typeof usage.count === 'number' &&
(usage.targets === undefined ||
- (Array.isArray(usage.targets) && usage.targets.every(isPipeTarget)))
+ (Array.isArray(usage.targets) && usage.targets.every(isPipeTarget))) &&
+ (usage.targetTotal === undefined ||
+ (typeof usage.targetTotal === 'number' && Number.isFinite(usage.targetTotal)))
);
}
+/** How many hosts a component usage has: `targetTotal`, or its listed targets. */
+function targetCount(usage: PipeComponentUsage): number {
+ return Math.max(usage.targetTotal ?? 0, usage.targets?.length ?? 0);
+}
+
+/** `usage` with `targetTotal` set only when it is more than the targets it lists. */
+function withTargetTotal(usage: PipeComponentUsage, total: number): PipeComponentUsage {
+ const { targetTotal: _old, ...rest } = usage;
+ return total > (usage.targets?.length ?? 0) ? { ...rest, targetTotal: total } : rest;
+}
+
const optional = (value: unknown, type: 'string' | 'number' | 'boolean') =>
value === undefined || typeof value === type;
@@ -264,11 +279,16 @@ export function clampPipePageReport(report: PipePageReport): PipePageReport {
...pipe,
name: clampText(pipe.name) as string,
className: clampText(pipe.className) as string,
- components: pipe.components.slice(0, MAX_REPORT_COMPONENTS).map((c) => ({
- ...c,
- name: clampText(c.name) as string,
- ...(c.targets ? { targets: c.targets.slice(0, MAX_MERGED_TARGETS) } : {}),
- })),
+ components: pipe.components.slice(0, MAX_REPORT_COMPONENTS).map((c) =>
+ withTargetTotal(
+ {
+ ...c,
+ name: clampText(c.name) as string,
+ ...(c.targets ? { targets: c.targets.slice(0, MAX_MERGED_TARGETS) } : {}),
+ },
+ targetCount(c),
+ ),
+ ),
call: pipe.call && {
...clampCall(pipe.call),
...(pipe.call.instances
@@ -322,6 +342,8 @@ function aggregatePipes(all: (PipePageReport & { reportedAt: number })[]): PipeU
continue;
}
match.count += component.count;
+ // Targets carry their page id, so two pages never share one: the totals add up.
+ const total = targetCount(match) + targetCount(component);
if (component.targets?.length) {
const merged = [...(match.targets ?? [])];
for (const target of component.targets) {
@@ -331,6 +353,8 @@ function aggregatePipes(all: (PipePageReport & { reportedAt: number })[]): PipeU
}
match.targets = merged;
}
+ const index = existing.components.indexOf(match);
+ existing.components[index] = withTargetTotal(match, total);
}
if (pipe.call) {
if (!existing.call) {
diff --git a/packages/devtools/src/rpc/router-config-tools.ts b/packages/devtools/src/rpc/router-config-tools.ts
index 2114543b..b2df5d80 100644
--- a/packages/devtools/src/rpc/router-config-tools.ts
+++ b/packages/devtools/src/rpc/router-config-tools.ts
@@ -621,7 +621,7 @@ export function routerConfigText(
if (!setup)
return `Page ${code(page.pageId)} has not reported its router setup yet.${freshness(page, now)}`;
const lines = [
- `**Mode** ${setup.mode === 'full' ? 'full' : 'events-only (no debug utils: production build or unusual setup; config, lint and actions are limited)'}`,
+ `**Mode** ${setup.mode === 'full' ? 'full' : 'events-only (`ng.ɵgetInjectorProviders` is missing, so setup detection is limited: the preloader, the scroller and the router providers cannot be found, and the features and options below can show defaults)'}`,
`**Set up with** ${setup.setupKind}${setup.routers > 1 ? `, ${setup.routers} routers on the page (showing the first in use)` : ''}`,
];
if (setup.angularVersion) lines.push(`**Angular** ${code(setup.angularVersion)}`);
diff --git a/packages/devtools/src/types.ts b/packages/devtools/src/types.ts
index 30d477bd..e1d84fcc 100644
--- a/packages/devtools/src/types.ts
+++ b/packages/devtools/src/types.ts
@@ -191,6 +191,8 @@ export interface ComponentTreeReport {
detail: ComponentDetail | null;
/** Missing when the page's Angular exposes no defer block util. */
deferBlocks?: DeferBlockInfo[];
+ /** True when the page has more defer blocks than the 500 in `deferBlocks`. */
+ deferTruncated?: boolean;
}
export interface ComponentPage extends ComponentTreeReport {
diff --git a/packages/devtools/vitest.compat.config.ts b/packages/devtools/vitest.compat.config.ts
index b886f4db..a6cb3689 100644
--- a/packages/devtools/vitest.compat.config.ts
+++ b/packages/devtools/vitest.compat.config.ts
@@ -8,7 +8,9 @@ const angular = Number(require('@angular/core/package.json').version.split('.')[
const pageSide = [
'analog-scan',
'cd-recorder',
+ 'cd-recorder-real',
'change-detection',
+ 'change-detection-real',
'component-tree',
'defer-blocks',
'defer-blocks-real',
@@ -23,6 +25,7 @@ const pageSide = [
'ngrx-collector',
'pipes-collector',
'pipes-runtime',
+ 'private-api-canary',
'router-actions-wait',
'router-angular20',
'router-audit',