From d2766d371a3273c7a46bc0e8937ac3da7f8ff89a Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 24 Sep 2026 22:00:12 +0300 Subject: [PATCH 1/3] feat: add initial HTML structure for Angular DevTools --- README.md | 2 +- docs/privacy-policy.html | 2 +- extension/content-script.js | 8 - extension/manifest.json | 24 +- extension/panel-bridge.js | 11 +- packages/ng-devtools/dist/devframe.d.mts | 4 + packages/ng-devtools/dist/devframe.mjs | 1228 +++++++++++++++++ packages/ng-devtools/dist/overlay.d.mts | 19 + packages/ng-devtools/dist/overlay.mjs | 353 +++++ packages/ng-devtools/dist/popup.d.mts | 6 + packages/ng-devtools/dist/popup.mjs | 444 ++++++ .../browser-agent-rpc-BXhoSh1z-DT7_jkxB.js | 1 + .../dist/public/assets/index-BUkjK2_k.js | 896 ++++++++++++ packages/ng-devtools/dist/public/index.html | 13 + 14 files changed, 2989 insertions(+), 22 deletions(-) create mode 100644 packages/ng-devtools/dist/devframe.d.mts create mode 100644 packages/ng-devtools/dist/devframe.mjs create mode 100644 packages/ng-devtools/dist/overlay.d.mts create mode 100644 packages/ng-devtools/dist/overlay.mjs create mode 100644 packages/ng-devtools/dist/popup.d.mts create mode 100644 packages/ng-devtools/dist/popup.mjs create mode 100644 packages/ng-devtools/dist/public/assets/browser-agent-rpc-BXhoSh1z-DT7_jkxB.js create mode 100644 packages/ng-devtools/dist/public/assets/index-BUkjK2_k.js create mode 100644 packages/ng-devtools/dist/public/index.html diff --git a/README.md b/README.md index 6256432..96443e5 100644 --- a/README.md +++ b/README.md @@ -241,7 +241,7 @@ extension/ "description": "Inspect Angular components, signals, DI, and routes.", "devtools_page": "devtools.html", "permissions": ["scripting"], - "host_permissions": [""], + "host_permissions": ["http://localhost/*", "http://127.0.0.1/*"], "icons": { "128": "icon-128.png" } diff --git a/docs/privacy-policy.html b/docs/privacy-policy.html index 4424314..da560a1 100644 --- a/docs/privacy-policy.html +++ b/docs/privacy-policy.html @@ -41,7 +41,7 @@

What the Extension Accesses

All data processing happens entirely within your browser and your local machine. No information ever leaves your device.

Host Permissions

-

The Extension requests host permissions (<all_urls>) solely to inject a lightweight content script that detects Angular on any page. The content script only checks for the presence of Angular and does not read or modify page content.

+

The Extension requests host permissions only for localhost and 127.0.0.1, to reach the devframe server on the developer's own machine. It also runs a lightweight content script on pages to detect Angular. The content script only checks for the presence of Angular and does not read or modify page content.

Data Storage

The Extension does not persist any data between sessions. All inspection data exists only in memory while the DevTools panel is open and is discarded when the panel is closed.

diff --git a/extension/content-script.js b/extension/content-script.js index 2662092..c9e594e 100644 --- a/extension/content-script.js +++ b/extension/content-script.js @@ -1,11 +1,3 @@ -// Inject a page-level script to detect Angular, since content scripts -// can't access the page's JS globals directly. - -const script = document.createElement('script'); -script.src = chrome.runtime.getURL('detect-angular.js'); -script.onload = () => script.remove(); -(document.head || document.documentElement).appendChild(script); - // Listen for the detection result posted from the page context window.addEventListener('message', (event) => { if (event.source !== window) return; diff --git a/extension/manifest.json b/extension/manifest.json index bcc4f23..8caffbf 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -3,14 +3,26 @@ "name": "Angular DevTools", "version": "0.0.1", "description": "Inspect Angular components, signals, dependency injection, and routes.", + "minimum_chrome_version": "111", "devtools_page": "devtools.html", "permissions": [], - "host_permissions": [""], + "host_permissions": [ + "http://localhost/*", + "https://localhost/*", + "http://127.0.0.1/*", + "https://127.0.0.1/*" + ], "content_scripts": [ { "matches": [""], "js": ["content-script.js"], - "run_at": "document_idle" + "run_at": "document_start" + }, + { + "matches": [""], + "js": ["detect-angular.js"], + "run_at": "document_idle", + "world": "MAIN" } ], "background": { @@ -20,11 +32,5 @@ "16": "icons/icon-16.png", "48": "icons/icon-48.png", "128": "icons/icon-128.png" - }, - "web_accessible_resources": [ - { - "resources": ["detect-angular.js"], - "matches": [""] - } - ] + } } diff --git a/extension/panel-bridge.js b/extension/panel-bridge.js index e42a0d3..b1623d1 100644 --- a/extension/panel-bridge.js +++ b/extension/panel-bridge.js @@ -5,6 +5,7 @@ const frame = document.getElementById('devtools-frame'); const status = document.getElementById('status'); const tabId = chrome.devtools.inspectedWindow.tabId; +const LOCAL_HOSTS = ['localhost', '127.0.0.1']; // Try to find the devframe connection on the inspected page function detectConnection() { @@ -35,7 +36,7 @@ function detectConnection() { return null; })()`, (result, err) => { - if (result && result.base) { + if (result && paths.includes(result.base)) { loadPanel(result.base); } else { // No live devframe found — load in standalone/static mode @@ -55,8 +56,12 @@ function loadPanel(baseURL) { if (baseURL) { // Get the inspected page's origin to build the full baseURL chrome.devtools.inspectedWindow.eval('location.origin', (origin) => { - const fullBase = origin + baseURL; - frame.src = `${panelUrl}?baseURL=${encodeURIComponent(fullBase)}`; + const url = new URL(baseURL, origin); + if (!LOCAL_HOSTS.includes(url.hostname)) { + frame.src = panelUrl; + return; + } + frame.src = `${panelUrl}?baseURL=${encodeURIComponent(url.href)}`; }); } else { frame.src = panelUrl; diff --git a/packages/ng-devtools/dist/devframe.d.mts b/packages/ng-devtools/dist/devframe.d.mts new file mode 100644 index 0000000..d1602c8 --- /dev/null +++ b/packages/ng-devtools/dist/devframe.d.mts @@ -0,0 +1,4 @@ +//#region src/devframe.d.ts +declare const ngDevtools: import("devframe").DevframeDefinition; +//#endregion +export { ngDevtools as default }; \ No newline at end of file diff --git a/packages/ng-devtools/dist/devframe.mjs b/packages/ng-devtools/dist/devframe.mjs new file mode 100644 index 0000000..28a8b9c --- /dev/null +++ b/packages/ng-devtools/dist/devframe.mjs @@ -0,0 +1,1228 @@ +import { defineDevframe, defineRpcFunction } from "devframe"; +import * as v from "valibot"; +import { toStandardJsonSchema } from "@valibot/to-json-schema"; +import { existsSync, lstatSync, readFileSync, readdirSync, realpathSync, statSync } from "node:fs"; +import { isAbsolute, join, relative, resolve, sep } from "node:path"; +//#region src/rpc/agent-schema.ts +/** +* Attach a [Standard JSON Schema](https://standardschema.dev/) converter to a +* valibot schema. +* +* Devframe stays validator neutral: it describes an RPC `returns` schema with +* the validator's own converter, and valibot does not ship one by default. +* Without it devframe falls back to a permissive object schema and advertises +* that as the MCP `outputSchema`, so a tool returning an array fails every +* `tools/call` against the schema the server itself published. +* +* With the converter attached, an object return is described accurately, and +* an array return advertises no output schema at all, since MCP only allows an +* object there. Either way the response matches what was advertised. +*/ +function describable(schema) { + const described = { + ...schema, + ...toStandardJsonSchema(schema) + }; + described["~standard"].jsonSchema.input({ target: "draft-2020-12" }); + return described; +} +//#endregion +//#region src/rpc/source-scan.ts +/** +* Index of the `/` that closes the regular expression starting at `start`, or +* `start` itself when this is a division rather than a literal. +*/ +function skipRegex(source, start) { + let inClass = false; + for (let i = start + 1; i < source.length; i++) { + const ch = source[i]; + if (ch === "\\") i++; + else if (ch === "\n") return start; + else if (ch === "[") inClass = true; + else if (ch === "]") inClass = false; + else if (ch === "/" && !inClass) return i; + } + return start; +} +/** Whether the `/` at `at` opens a regular expression rather than dividing. */ +function startsRegex(source, at) { + for (let i = at - 1; i >= 0; i--) { + const ch = source[i]; + if (ch === " " || ch === " " || ch === "\n" || ch === "\r") continue; + return !/[\w$)\]]/.test(ch) || /(?:^|[^\w$.])(?:return|typeof|case|in|of|do|else)$/.test(source.slice(Math.max(0, i - 6), i + 1)); + } + return true; +} +/** +* Index of the quote that closes the string starting at `start`, or `start` +* itself when there is none. +* +* Only a template literal may span lines, so a `'` or `"` left open at the end +* of its line is not a string at all. It is usually a quote inside a regular +* expression, as in `/['"]/`, and treating it as a string would blank out the +* rest of the file. +*/ +function skipString(source, start) { + const quote = source[start]; + for (let i = start + 1; i < source.length; i++) { + const ch = source[i]; + if (ch === "\\") i++; + else if (ch === quote) return i; + else if (ch === "\n" && quote !== "`") return start; + } + return start; +} +/** +* Replace comments with whitespace, keeping every newline so line numbers and +* offsets still match the original file. +*/ +function stripComments(source) { + let out = ""; + for (let i = 0; i < source.length; i++) { + const ch = source[i]; + if (source.startsWith("//", i)) { + const end = source.indexOf("\n", i); + const stop = end === -1 ? source.length : end; + out += blank(source.slice(i, stop)); + i = stop - 1; + } else if (source.startsWith("/*", i)) { + const end = source.indexOf("*/", i + 2); + if (end === -1) { + out += ch; + continue; + } + out += blank(source.slice(i, end + 2)); + i = end + 1; + } else if (ch === "/" && startsRegex(source, i)) { + const end = skipRegex(source, i); + out += source.slice(i, end + 1); + i = end; + } else if (ch === "\"" || ch === "'" || ch === "`") { + const end = skipString(source, i); + if (end === i) { + out += ch; + continue; + } + out += source.slice(i, end + 1); + i = end; + } else out += ch; + } + return out; +} +/** +* Replace the contents of regular expression literals with spaces, keeping the +* delimiters and the length. A pattern is not code, so a call spelled out +* inside one, as in `/signalStore\(\)/`, must not be reported as a real +* declaration. Run it after `maskStrings`, so a `/` inside a string is gone. +*/ +function maskRegexes(source) { + let out = ""; + for (let i = 0; i < source.length; i++) { + const ch = source[i]; + if (ch !== "/" || !startsRegex(source, i)) { + out += ch; + continue; + } + const end = skipRegex(source, i); + if (end === i) { + out += ch; + continue; + } + out += ch + blank(source.slice(i + 1, end)) + source[end]; + i = end; + } + return out; +} +/** +* Replace the contents of string and template literals with spaces, keeping +* the quotes, the length and every newline. Use it before matching patterns +* that would otherwise fire on code quoted inside a template. +*/ +function maskStrings(source) { + let out = ""; + for (let i = 0; i < source.length; i++) { + const ch = source[i]; + if (ch === "/" && startsRegex(source, i)) { + const end = skipRegex(source, i); + out += source.slice(i, end + 1); + i = end; + } else if (ch === "\"" || ch === "'" || ch === "`") { + const end = skipString(source, i); + if (end === i) { + out += ch; + continue; + } + out += ch + blank(source.slice(i + 1, end)) + (end < source.length ? source[end] : ""); + i = end; + } else out += ch; + } + return out; +} +/** +* A reusable line lookup for one file. Scanning for newlines on every match is +* quadratic over a file; this walks it once and then binary searches. +*/ +function lineCounter(source) { + const starts = [0]; + for (let i = 0; i < source.length; i++) if (source[i] === "\n") starts.push(i + 1); + return (index) => { + let low = 0; + let high = starts.length - 1; + while (low < high) { + const mid = low + high + 1 >> 1; + if (starts[mid] <= index) low = mid; + else high = mid - 1; + } + return low + 1; + }; +} +/** Same length as `text`, with every character but the newlines blanked out. */ +function blank(text) { + return text.replace(/[^\n]/g, " "); +} +/** A class body, with the selector of the decorator that precedes it. */ +/** +* A single line type annotation between a member name and its `=`. A top level +* comma ends it, so `constructor(label: string, count = signal(0))` declares +* `count` rather than swallowing the parameter list into `label`'s annotation. +* Commas inside a generic argument list are still part of the annotation. +*/ +const ANNOTATION = String.raw`(?::(?:[^=;\n,<]|=>|<[^;\n]*?>){0,120})?`; +const DECORATOR = /@(Component|Directive)\s*\(/g; +/** +* The span of every class in the file, each with the selector of the +* `@Component` or `@Directive` decorating it. +*/ +function classScopes(code, source) { + const scopes = []; + const declaration = /\bclass\s+\w+/g; + let previousEnd = 0; + let match; + while ((match = declaration.exec(code)) !== null) { + const bodyStart = classBodyStart(code, match.index + match[0].length); + if (bodyStart === -1) break; + const end = matchDelimiter(code, bodyStart, "{", "}"); + scopes.push({ + start: match.index, + end, + ...decoratorOf(code.slice(previousEnd, match.index), source.slice(previousEnd, match.index)) + }); + previousEnd = end; + declaration.lastIndex = end; + } + return scopes; +} +/** +* The first `{` that opens the class body, skipping the braces a generic +* parameter list can hold, as in `class Panel {`. +*/ +function classBodyStart(code, from) { + let angle = 0; + for (let i = from; i < code.length; i++) { + const ch = code[i]; + if (ch === "/" && startsRegex(code, i)) i = skipRegex(code, i); + else if (ch === "\"" || ch === "'" || ch === "`") i = skipString(code, i); + else if (ch === "<") angle++; + else if (ch === ">" && angle > 0) angle--; + else if (ch === "{" && angle === 0) return i; + } + return -1; +} +/** +* The selector of the last `@Component`/`@Directive` decorator in `code`, read +* out of `source` at the same offsets. Both the decorator and the `selector` +* key are found in the masked copy, so neither a decorator nor a `selector:` +* written inside a template can be picked up, and only the value is read from +* the unmasked copy, where it survives. +*/ +/** +* The `@Component` or `@Directive` that precedes a class, read once. Matching +* the decorator name with a word boundary keeps `@ComponentMeta()` from being +* taken for `@Component`, and returning its arguments here means no caller has +* to look the decorator up a second time and disagree about which one it is. +*/ +function decoratorOf(code, source) { + let open = -1; + let kind; + for (const match of code.matchAll(DECORATOR)) { + open = match.index + match[0].length - 1; + kind = match[1] === "Directive" ? "directive" : "component"; + } + if (open === -1) return {}; + const close = matchDelimiter(code, open, "(", ")"); + const args = code.slice(open, close); + const decoratorArgs = code.slice(open, close + 1); + const key = /\bselector\s*:\s*['"`]/.exec(args); + if (!key) return { + kind, + decoratorArgs + }; + const quote = open + key.index + key[0].length - 1; + return { + component: source.slice(quote + 1, skipString(source, quote)), + kind, + decoratorArgs + }; +} +/** Index of the delimiter that closes the one at `open`. */ +function matchDelimiter(source, open, start, end) { + let depth = 0; + for (let i = open; i < source.length; i++) { + const ch = source[i]; + if (ch === "\"" || ch === "'" || ch === "`") i = skipString(source, i); + else if (ch === "/" && i > open && startsRegex(source, i)) i = skipRegex(source, i); + else if (ch === start) depth++; + else if (ch === end && --depth === 0) return i; + } + return source.length; +} +/** +* The directories to scan for source files: every `sourceRoot` in +* `angular.json`, so a workspace with more than one project is covered, and +* `src` for a project without one. Falls back to the working directory. +*/ +function sourceRoots(cwd) { + const roots = []; + try { + const projects = JSON.parse(parseJsonc(readFileSync(join(cwd, "angular.json"), "utf-8")))?.projects; + for (const project of Object.values(projects ?? {})) { + if (!project || typeof project !== "object") continue; + const entry = project; + const root = entry["sourceRoot"] ?? join(String(entry["root"] ?? ""), "src"); + if (typeof root === "string" && root) roots.push(resolve(cwd, root)); + } + } catch {} + const declared = new Set(roots); + roots.push(join(cwd, "src")); + const root = realPath(cwd); + const seen = /* @__PURE__ */ new Set(); + const realOf = /* @__PURE__ */ new Map(); + const usable = [...new Set(roots)].filter((dir) => { + const real = realPath(dir); + if (seen.has(real)) return false; + const inside = relative(root, real); + if (!inside || escapes(inside) || isAbsolute(inside)) return false; + const refused = declared.has(dir) ? DEPENDENCY_DIRS : IGNORED_DIRS; + if (inside.split(/[\\/]/).some((part) => refused.has(part.toLowerCase()))) return false; + try { + if (!statSync(real).isDirectory()) return false; + } catch { + return false; + } + seen.add(real); + realOf.set(dir, real); + return true; + }); + const kept = []; + let cover; + const order = usable.map((dir) => ({ + dir, + real: realOf.get(dir) ?? dir + })).sort((a, b) => a.real + sep < b.real + sep ? -1 : a.real === b.real ? 0 : 1); + for (const { dir, real } of order) { + if (cover !== void 0 && !escapes(relative(cover, real))) { + if (!relative(cover, real).split(/[\\/]/).some((part) => IGNORED_DIRS.has(part.toLowerCase()))) continue; + kept.push(dir); + continue; + } + kept.push(dir); + cover = real; + } + return kept; +} +/** Directories holding third-party code, never scanned even when declared. */ +const DEPENDENCY_DIRS = /* @__PURE__ */ new Set([ + "node_modules", + ".git", + ".yarn" +]); +/** Directories that never hold project source. */ +const IGNORED_DIRS = /* @__PURE__ */ new Set([ + "node_modules", + "dist", + "build", + "out-tsc", + "coverage", + "tmp", + ".angular", + ".git", + ".nx", + ".cache", + ".turbo", + ".yarn" +]); +/** +* JSONC as plain JSON: comments gone and trailing commas dropped. The commas +* are located in a masked copy, so a `,}` inside a path stays untouched. +*/ +function parseJsonc(source) { + const text = stripComments(source); + const masked = maskStrings(text); + const trailing = /,(\s*[}\]])/g; + let out = ""; + let last = 0; + let match; + while ((match = trailing.exec(masked)) !== null) { + out += text.slice(last, match.index); + last = match.index + 1; + } + return out + text.slice(last); +} +/** +* Whether a relative path leaves its base. A plain `startsWith('..')` also +* matches a child named `..foo`, which does not. +*/ +function escapes(rel) { + return rel === ".." || rel.startsWith(".." + sep); +} +/** The path with symlinks resolved, or the path itself when it does not exist. */ +function realPath(path) { + try { + return realpathSync(path); + } catch { + return path; + } +} +//#endregion +//#region src/rpc/get-routes.ts +const RouteSchema = v.object({ + path: v.string(), + component: v.optional(v.string()), + hasChildren: v.boolean(), + file: v.string() +}); +const getRoutes = defineRpcFunction({ + name: "get-routes", + type: "query", + jsonSerializable: true, + args: [], + returns: describable(v.array(RouteSchema)), + agent: { + description: "List Angular routes extracted from route configuration files in the workspace. Call before suggesting navigation changes or analyzing the app structure.", + title: "List Angular routes" + }, + setup: (ctx) => ({ handler: async () => extractRoutes(ctx.cwd) }) +}); +function extractRoutes(cwd) { + const routes = []; + for (const root of sourceRoots(cwd)) findRouteFiles(root, cwd, routes); + return routes; +} +function findRouteFiles(dir, cwd, routes) { + let entries; + try { + entries = readdirSync(dir); + } catch { + return; + } + for (const entry of entries) { + const full = join(dir, entry); + try { + const stats = lstatSync(full); + if (stats.isSymbolicLink()) continue; + if (stats.isDirectory()) { + if (!IGNORED_DIRS.has(entry.toLowerCase())) findRouteFiles(full, cwd, routes); + continue; + } + } catch { + continue; + } + if (!entry.match(/\.routes\.ts$|routing\.module\.ts$/)) continue; + try { + const content = readFileSync(full, "utf-8"); + const relPath = relative(cwd, full); + for (const body of objectLiterals(stripComments(content))) { + const props = topLevelProps(body); + const path = props.get("path")?.match(/^['"`]([^'"`]*)['"`]$/)?.[1]; + if (path === void 0) continue; + routes.push({ + path, + component: routeComponent(props), + hasChildren: props.has("children") || props.has("loadChildren"), + file: relPath + }); + } + } catch {} + } +} +function routeComponent(props) { + const eager = props.get("component")?.match(/^(\w+)/)?.[1]; + if (eager) return eager; + return props.get("loadComponent")?.match(/\.then\(\s*\(?\s*(\w+)\s*\)?\s*=>\s*\1\.(\w+)/)?.[2]; +} +const ROUTE_ARRAY = /(?:\bchildren\s*:|\b(?:provideRouter|forRoot|forChild)\s*\()\s*$/; +function objectLiterals(source) { + const spans = []; + const open = []; + for (let i = 0; i < source.length; i++) { + const ch = source[i]; + if (ch === "/" && startsRegex(source, i)) i = skipRegex(source, i); + else if (ch === "\"" || ch === "'" || ch === "`") i = skipString(source, i); + else if ("([{".includes(ch)) { + const parent = open.at(-1); + open.push({ + ch, + at: i, + routeArray: ch === "[" && (!parent || ROUTE_ARRAY.test(source.slice(Math.max(0, i - 64), i))), + routeObject: ch === "{" && parent?.ch === "[" && parent.routeArray + }); + } else if (")]}".includes(ch)) { + const closed = open.pop(); + if (ch === "}" && closed?.routeObject) spans.push([closed.at, i]); + } + } + return spans.sort((a, b) => a[0] - b[0]).map(([start, end]) => source.slice(start + 1, end)); +} +function topLevelProps(body) { + const props = /* @__PURE__ */ new Map(); + const add = (text) => { + const prop = text.match(/^\s*(\w+)\s*:\s*([\s\S]*?)\s*$/); + if (prop) props.set(prop[1], prop[2]); + }; + let depth = 0; + let start = 0; + for (let i = 0; i < body.length; i++) { + const ch = body[i]; + if (ch === "/" && startsRegex(body, i)) i = skipRegex(body, i); + else if (ch === "\"" || ch === "'" || ch === "`") i = skipString(body, i); + else if ("([{".includes(ch)) depth++; + else if (")]}".includes(ch)) depth--; + else if (ch === "," && depth === 0) { + add(body.slice(start, i)); + start = i + 1; + } + } + add(body.slice(start)); + return props; +} +//#endregion +//#region src/rpc/get-components.ts +const ComponentSchema = v.object({ + selector: v.string(), + kind: v.string(), + file: v.string(), + inputs: v.array(v.string()), + outputs: v.array(v.string()), + isStandalone: v.boolean() +}); +const getComponents = defineRpcFunction({ + name: "get-components", + type: "query", + jsonSerializable: true, + args: [], + returns: describable(v.array(ComponentSchema)), + agent: { + description: "Discover Angular components and directives by scanning source files for @Component and @Directive decorators. Returns each selector with its kind, inputs, outputs, and file path. Call this to understand the component architecture.", + title: "List Angular components" + }, + setup: (ctx) => ({ handler: async () => scanComponents(ctx.cwd) }) +}); +function scanComponents(cwd) { + const components = []; + for (const root of sourceRoots(cwd)) walk$3(root, cwd, components); + return components; +} +function walk$3(dir, cwd, out) { + let entries; + try { + entries = readdirSync(dir); + } catch { + return; + } + for (const entry of entries) { + const full = join(dir, entry); + try { + const stats = lstatSync(full); + if (stats.isSymbolicLink()) continue; + if (stats.isDirectory()) { + if (!IGNORED_DIRS.has(entry.toLowerCase())) walk$3(full, cwd, out); + continue; + } + } catch { + continue; + } + if (!entry.endsWith(".ts") || entry.endsWith(".spec.ts")) continue; + try { + out.push(...componentsIn(readFileSync(full, "utf-8"), relative(cwd, full))); + } catch {} + } +} +function componentsIn(content, relPath) { + const source = stripComments(content); + const code = maskStrings(source); + const components = []; + classScopes(code, source).forEach((scope) => { + if (!scope.component) return; + const body = code.slice(scope.start, scope.end); + components.push({ + selector: scope.component, + kind: scope.kind ?? "component", + file: relPath, + inputs: [...names(body, INPUT), ...names(body, INPUT_DECORATOR)], + outputs: [...names(body, OUTPUT), ...names(body, OUTPUT_DECORATOR)], + isStandalone: !/\bstandalone\s*:\s*false\b/.test(scope.decoratorArgs ?? "") + }); + }); + return components; +} +function names(body, pattern) { + pattern.lastIndex = 0; + return [...body.matchAll(pattern)].map((match) => match[1]); +} +const INPUT = new RegExp(String.raw`(? ({ handler: async () => { + const pkg = readJson(join(ctx.cwd, "package.json")); + const angularJson = readJson(join(ctx.cwd, "angular.json")); + const deps = { + ...pkg["dependencies"], + ...pkg["devDependencies"] + }; + const angularVersion = (deps["@angular/core"] ?? "unknown").replace(/^\^|~/, ""); + const typescript = (deps["typescript"] ?? "unknown").replace(/^\^|~/, ""); + const defaultProject = angularJson?.["defaultProject"] ?? Object.keys(angularJson?.["projects"] ?? {})[0] ?? pkg["name"] ?? "unknown"; + const projectConfig = angularJson?.["projects"]?.[defaultProject]; + return { + angularVersion, + projectName: defaultProject, + typescript, + ssr: !!(projectConfig?.architect?.build?.options?.ssr || projectConfig?.architect?.build?.options?.server), + builtAt: Date.now() + }; + } }) +}); +function readJson(path) { + try { + if (!existsSync(path)) return {}; + return JSON.parse(readFileSync(path, "utf-8")); + } catch { + return {}; + } +} +//#endregion +//#region src/rpc/get-signals.ts +const SignalEntrySchema = v.object({ + name: v.string(), + kind: v.string(), + file: v.string(), + line: v.number(), + component: v.optional(v.string()) +}); +const getSignals = defineRpcFunction({ + name: "get-signals", + type: "query", + jsonSerializable: true, + args: [], + returns: describable(v.array(SignalEntrySchema)), + agent: { + description: "Scan source files for signal(), computed(), linkedSignal(), and effect() declarations. Returns name, kind, file, and line number. Call this to understand the reactive architecture before suggesting changes.", + title: "List Angular signals from source" + }, + setup: (ctx) => ({ handler: async () => scanSignals(ctx.cwd) }) +}); +const KINDS = { + signal: "signal", + computed: "computed", + linkedSignal: "linkedSignal", + effect: "effect", + resource: "resource", + input: "input (signal)", + output: "output (signal)", + model: "model (signal)", + viewChild: "viewChild (signal)", + viewChildren: "viewChildren (signal)", + contentChild: "contentChild (signal)", + contentChildren: "contentChildren (signal)" +}; +const SIGNAL_CALL = new RegExp(String.raw`(? at >= scope.start && at < scope.end)?.component + }); + } + return entries; +} +//#endregion +//#region src/rpc/get-providers.ts +const ProviderEntrySchema = v.object({ + token: v.string(), + source: v.string(), + file: v.string(), + line: v.number(), + providedIn: v.optional(v.string()), + type: v.string() +}); +const getProviders = defineRpcFunction({ + name: "get-providers", + type: "query", + jsonSerializable: true, + args: [], + returns: describable(v.array(ProviderEntrySchema)), + agent: { + description: "Scan source files for DI providers: @Injectable services, inject() calls, and providers arrays. Returns token, file, and where it is provided. Call this to understand the DI architecture.", + title: "List Angular DI providers from source" + }, + setup: (ctx) => ({ handler: async () => scanProviders(ctx.cwd) }) +}); +const DECORATOR_KEYWORDS = /* @__PURE__ */ new Set([ + "Component", + "NgModule", + "Injectable", + "Directive", + "Pipe", + "Service", + "Input", + "Output", + "Inject", + "Optional", + "Self", + "SkipSelf", + "Host" +]); +const PROVIDE_FN_TO_TOKEN = { + provideHttpClient: "HttpClient", + provideRouter: "Router", + provideAnimations: "AnimationDriver", + provideAnimationsAsync: "AnimationDriver", + provideClientHydration: "ClientHydration", + provideZoneChangeDetection: "NgZone", + provideZonelessChangeDetection: "ChangeDetection (zoneless)", + provideExperimentalZonelessChangeDetection: "ChangeDetection (zoneless)", + provideBrowserGlobalErrorListeners: "ErrorHandler", + provideServiceWorker: "ServiceWorker", + provideCheckNoChangesConfig: "CheckNoChanges", + provideExperimentalCheckNoChanges: "CheckNoChanges", + providePlatformInitializer: "PlatformInitializer", + provideAppInitializer: "AppInitializer", + provideEnvironmentInitializer: "EnvironmentInitializer" +}; +function scanProviders(cwd) { + const entries = []; + for (const root of sourceRoots(cwd)) walk$1(root, cwd, entries); + return entries; +} +function walk$1(dir, cwd, out) { + let items; + try { + items = readdirSync(dir); + } catch { + return; + } + for (const item of items) { + const full = join(dir, item); + try { + const stats = lstatSync(full); + if (stats.isSymbolicLink()) continue; + if (stats.isDirectory()) { + if (!IGNORED_DIRS.has(item.toLowerCase())) walk$1(full, cwd, out); + continue; + } + } catch { + continue; + } + if (!item.endsWith(".ts") || item.endsWith(".spec.ts") || item.endsWith(".d.ts")) continue; + try { + const source = stripComments(readFileSync(full, "utf-8")); + const code = maskRegexes(maskStrings(source)); + const relPath = relative(cwd, full); + const lineAt = lineCounter(code); + for (const decorator of code.matchAll(/@(Injectable|Service)\b/g)) { + const at = decorator.index; + let after = at + decorator[0].length; + let args = ""; + const parenAt = code.indexOf("(", after); + if (parenAt !== -1 && code.slice(after, parenAt).trim() === "") { + const close = matchDelimiter(code, parenAt, "(", ")"); + args = source.slice(parenAt, close + 1); + after = close + 1; + } + DECLARATION.lastIndex = skipDecorators(code, after); + const declaration = DECLARATION.exec(code); + if (!declaration) continue; + const isService = decorator[1] === "Service"; + out.push({ + token: declaration[1], + source: "class", + file: relPath, + line: lineAt(at), + providedIn: /providedIn\s*:\s*(?:['"`](\w+)['"`]|([A-Za-z_$][\w$]*))/.exec(args)?.slice(1).find(Boolean) ?? (isService ? "root" : void 0), + type: "injectable" + }); + } + for (const match of code.matchAll(/(?]*>)?\s*\(\s*(\w+)/g)) out.push({ + token: match[2], + source: match[1], + file: relPath, + line: lineAt(match.index), + type: "injection" + }); + for (const match of code.matchAll(/@Inject\(\s*(\w+)\s*\)\s*(?:private|protected|public|readonly|\s)*(\w+)/g)) out.push({ + token: match[1], + source: match[2], + file: relPath, + line: lineAt(match.index), + type: "injection" + }); + for (const match of code.matchAll(/\b(provide\w+)\s*\(/g)) { + const fnName = match[1]; + const token = PROVIDE_FN_TO_TOKEN[fnName]; + if (token) out.push({ + token, + source: fnName + "()", + file: relPath, + line: lineAt(match.index), + providedIn: "root", + type: "root-provider" + }); + } + for (const providersMatch of code.matchAll(/providers\s*:\s*\[/g)) { + const openAt = providersMatch.index + providersMatch[0].lastIndexOf("["); + const blockStart = openAt + 1; + const block = code.slice(blockStart, matchDelimiter(code, openAt, "[", "]")); + for (const tokenMatch of block.matchAll(/\b([A-Z]\w+)\b/g)) { + const token = tokenMatch[1]; + if (DECORATOR_KEYWORDS.has(token)) continue; + out.push({ + token, + source: "providers array", + file: relPath, + line: lineAt(blockStart + tokenMatch.index), + type: "provider" + }); + } + } + } catch {} + } +} +/** +* Past any further decorators on the same declaration. TypeScript allows more +* than one, and the sticky `DECLARATION` match would otherwise stop at the +* first of them and miss the class. +*/ +function skipDecorators(code, from) { + let at = from; + for (;;) { + const next = /\S/.exec(code.slice(at)); + if (!next || code[at + next.index] !== "@") return at; + const nameEnd = at + next.index + 1 + (/^[\w$]*/.exec(code.slice(at + next.index + 1))?.[0].length ?? 0); + const paren = /\S/.exec(code.slice(nameEnd)); + if (paren && code[nameEnd + paren.index] === "(") at = matchDelimiter(code, nameEnd + paren.index, "(", ")") + 1; + else at = nameEnd; + } +} +/** Sticky, so the class after a decorator is found however far it sits. */ +const DECLARATION = /\s*(?:export\s+)?(?:default\s+)?(?:abstract\s+)?class\s+(\w+)/y; +//#endregion +//#region src/rpc/get-ngrx-store.ts +const NgrxStoreEntrySchema = v.object({ + name: v.string(), + kind: v.picklist([ + "action", + "reducer", + "effect", + "selector", + "feature", + "store-setup", + "signal-store", + "signal-state", + "signal-method" + ]), + file: v.string(), + line: v.number(), + detail: v.optional(v.string()) +}); +const getNgrxStore = defineRpcFunction({ + name: "get-ngrx-store", + type: "query", + jsonSerializable: true, + args: [], + returns: describable(v.array(NgrxStoreEntrySchema)), + agent: { + description: "Scan source files for NgRx store patterns: actions, reducers, effects, selectors, features, and store setup. Returns name, kind, file, and line number. Call this to understand the NgRx state management architecture.", + title: "List NgRx store entries from source" + }, + setup: (ctx) => ({ handler: async () => scanNgrxStore(ctx.cwd) }) +}); +const NGRX_PATTERNS = [ + { + pattern: /export\s+const\s+(\w+)\s*=\s*createAction\s*\(/g, + kind: "action" + }, + { + pattern: /(\w+)\s*=\s*createActionGroup\s*\(/g, + kind: "action" + }, + { + pattern: /export\s+const\s+(\w+)\s*=\s*createReducer\s*\(/g, + kind: "reducer" + }, + { + pattern: /([\w$]+)\s*=\s*createEffect\s*\(/g, + kind: "effect" + }, + { + pattern: /export\s+const\s+(\w+)\s*=\s*createSelector\s*\(/g, + kind: "selector" + }, + { + pattern: /export\s+const\s+(\w+)\s*=\s*createFeatureSelector\s*[<(]/g, + kind: "selector" + }, + { + pattern: /export\s+const\s+(\w+)\s*=\s*createFeature\s*\(/g, + kind: "feature" + }, + { + pattern: /(provideStore)\s*\(/g, + kind: "store-setup" + }, + { + pattern: /(provideState)\s*\(/g, + kind: "store-setup" + }, + { + pattern: /(provideEffects)\s*\(/g, + kind: "store-setup" + }, + { + pattern: /StoreModule\.(forRoot|forFeature)\s*\(/g, + kind: "store-setup" + }, + { + pattern: /EffectsModule\.(forRoot|forFeature)\s*\(/g, + kind: "store-setup" + }, + { + pattern: /(?:export\s+)?const\s+(\w+)\s*=\s*signalStore\s*\(/g, + kind: "signal-store" + }, + { + pattern: /(?:export\s+)?const\s+(\w+)\s*=\s*signalState\s*[<(]/g, + kind: "signal-state" + }, + { + pattern: /export\s+const\s+(\w+)\s*=\s*signalMethod\s*[<(]/g, + kind: "signal-method" + }, + { + pattern: /(\w+)\s*:\s*signalMethod\s*[<(]/g, + kind: "signal-method" + } +]; +function scanNgrxStore(cwd) { + const entries = []; + for (const root of sourceRoots(cwd)) walk(root, cwd, entries); + const seen = /* @__PURE__ */ new Set(); + return entries.filter((e) => { + const key = `${e.name}:${e.file}:${e.line}`; + if (seen.has(key)) return false; + seen.add(key); + return true; + }); +} +function walk(dir, cwd, out) { + let items; + try { + items = readdirSync(dir); + } catch { + return; + } + for (const item of items) { + const full = join(dir, item); + try { + const stats = lstatSync(full); + if (stats.isSymbolicLink()) continue; + if (stats.isDirectory()) { + if (!IGNORED_DIRS.has(item.toLowerCase())) walk(full, cwd, out); + continue; + } + } catch { + continue; + } + if (!item.endsWith(".ts") || item.endsWith(".spec.ts") || item.endsWith(".d.ts")) continue; + try { + const raw = readFileSync(full, "utf-8"); + if (!raw.includes("@ngrx/") && !raw.includes("createAction") && !raw.includes("createReducer") && !raw.includes("createEffect") && !raw.includes("createSelector") && !raw.includes("createFeature") && !raw.includes("signalStore") && !raw.includes("signalState")) continue; + const content = maskRegexes(maskStrings(stripComments(raw))); + const lineAt = lineCounter(content); + const relPath = relative(cwd, full); + for (const { pattern, kind } of NGRX_PATTERNS) { + pattern.lastIndex = 0; + let match; + while ((match = pattern.exec(content)) !== null) { + const lineNum = lineAt(match.index); + const name = match[1]; + const displayName = kind === "store-setup" && (match[0].includes("StoreModule") || match[0].includes("EffectsModule")) ? match[0].replace(/\s*\($/, "") : name; + out.push({ + name: displayName, + kind, + file: relPath, + line: lineNum + }); + } + } + } catch {} + } +} +//#endregion +//#region package.json +var name = "@santoshyadavdev/ng-devtools"; +var version = "0.0.1"; +//#endregion +//#region src/devframe.ts +const clientAssets = { + package: name, + version, + path: "dist/public" +}; +const ngDevtools = defineDevframe({ + id: "ng-devtools", + name: "Angular DevTools", + version, + packageName: name, + description: "Inspect Angular component trees, signals, and routes at dev and build time.", + homepage: "https://github.com/santoshyadavdev/angular-devtools", + icon: "ph:angular-logo-duotone", + importMetaUrl: import.meta.url, + clientAssets, + async setup(ctx) { + const my = ctx.scope("ng-devtools"); + my.rpc.register(getRoutes); + my.rpc.register(getComponents); + my.rpc.register(getSignals); + my.rpc.register(getProviders); + my.rpc.register(getNgrxStore); + my.rpc.register(getBuildMeta); + const componentTree = await my.rpc.sharedState("component-tree", { initialValue: { + nodes: [], + selectedId: null, + highlightedId: null + } }); + await my.rpc.sharedState("routes", { initialValue: { + routes: [], + activeRoute: null + } }); + const signalGraphState = await my.rpc.sharedState("signal-graph", { initialValue: { + graph: null, + selectedNodeId: null + } }); + const injectorTreeState = await my.rpc.sharedState("injector-tree", { initialValue: { + roots: [], + selectedInjectorId: null + } }); + const ngrxStoreState = await my.rpc.sharedState("ngrx-store", { initialValue: { + state: null, + actions: [], + connected: false + } }); + my.rpc.register({ + name: "push-component-tree", + type: "action", + jsonSerializable: true, + handler: (nodes) => { + componentTree.mutate((draft) => { + draft.nodes = nodes; + }); + } + }); + my.rpc.register({ + name: "select-component", + type: "action", + jsonSerializable: true, + handler: (id) => { + componentTree.mutate((draft) => { + draft.selectedId = id; + }); + } + }); + my.rpc.register({ + name: "push-signal-graph", + type: "action", + jsonSerializable: true, + handler: (graph) => { + signalGraphState.mutate((draft) => { + draft.graph = graph; + }); + } + }); + my.rpc.register({ + name: "push-injector-tree", + type: "action", + jsonSerializable: true, + handler: (roots) => { + injectorTreeState.mutate((draft) => { + draft.roots = roots; + }); + } + }); + my.rpc.register({ + name: "push-ngrx-state", + type: "action", + jsonSerializable: true, + handler: (data) => { + ngrxStoreState.mutate((draft) => { + draft.state = data.state; + draft.actions = data.actions; + draft.connected = data.connected; + }); + } + }); + ctx.agent.registerResource({ + id: "ng-devtools:component-tree", + name: "Angular Component Tree", + description: "Component hierarchy last reported by a connected page, as JSON. Empty when no page is connected.", + mimeType: "application/json", + read: () => ({ text: JSON.stringify(componentTree.value(), null, 2) }) + }); + ctx.agent.registerResource({ + id: "ng-devtools:signal-graph", + name: "Angular Signal Graph", + description: "Live signal dependency graph: nodes (signal, computed, effect, linkedSignal) and edges (producer→consumer). Read this to understand reactive data flow.", + mimeType: "application/json", + read: () => ({ text: JSON.stringify(signalGraphState.value(), null, 2) }) + }); + ctx.agent.registerResource({ + id: "ng-devtools:injector-tree", + name: "Angular Injector Tree", + description: "DI injector hierarchy last reported by a connected page, with providers at each level. Empty when no page is connected.", + mimeType: "application/json", + read: () => ({ text: JSON.stringify(injectorTreeState.value(), null, 2) }) + }); + ctx.agent.registerResource({ + id: "ng-devtools:ngrx-store", + name: "NgRx Store State", + description: "NgRx store state and recent actions last reported by a connected page. Empty when no page is connected.", + mimeType: "application/json", + read: () => ({ text: JSON.stringify(ngrxStoreState.value(), null, 2) }) + }); + ctx.agent.registerTool({ + id: "ng-devtools:highlight", + description: "Highlight a component in the running Angular app by its selector.", + safety: "action", + inputSchema: { + type: "object", + properties: { selector: { + type: "string", + description: "CSS selector of the component to highlight, e.g. app-root." + } }, + required: ["selector"] + }, + handler: async (args) => { + if (!componentTree.value().nodes.length) return { markdown: `No component tree has been reported, so nothing was highlighted. This is what a page that has never connected reports, and also what a connected page reports when its components are not readable. Live data needs a page: connect through the MCP endpoint of the server that runs the app, with the app open in a browser. The stdio server has no page attached and only ever reports this.` }; + await ctx.rpc.invokeLocal("ng-devtools:select-component", args.selector); + my.rpc.broadcast({ + method: "highlight-in-page", + args: [args.selector], + optional: true + }); + return { markdown: `Sent a highlight request for \`${args.selector}\`. It only shows if the selector matches an element on the page.` }; + } + }); + ctx.agent.registerTool({ + id: "ng-devtools:inspect-signals", + description: "Get the signal graph the running page last reported: signal nodes (signal, computed, linkedSignal, effect) and their dependency edges. The page reports one graph, for its root component, so a selector that does not match it returns what is available instead.", + safety: "read", + inputSchema: { + type: "object", + properties: { selector: { + type: "string", + description: "CSS selector of the component to inspect, e.g. app-root." + } }, + required: ["selector"] + }, + handler: async (args) => { + const graph = signalGraphState.value().graph; + if (!graph) return { markdown: `No signal graph available. Live data needs a page: connect through the MCP endpoint of the server that runs the app, with the app open in a browser. The stdio server has no page attached and only ever reports this.` }; + const json = JSON.stringify(graph, null, 2); + if (graph.componentSelector && graph.componentSelector !== args.selector) return { markdown: `No signal graph for \`${args.selector}\`. The live graph covers \`${graph.componentSelector}\`:\n\n${json}` }; + return { markdown: json }; + } + }); + ctx.agent.registerTool({ + id: "ng-devtools:inspect-providers", + description: "Get the DI injector hierarchy the running page last reported, with the providers at each level. The page reports the whole tree rather than one component, so the selector only labels the answer.", + safety: "read", + inputSchema: { + type: "object", + properties: { selector: { + type: "string", + description: "Optional CSS selector, e.g. app-root. It only labels the answer: the page reports the whole tree either way." + } } + }, + handler: async (args) => { + const roots = injectorTreeState.value().roots; + if (!roots.length) return { markdown: `No injector data available. Live data needs a page: connect through the MCP endpoint of the server that runs the app, with the app open in a browser. The stdio server has no page attached and only ever reports this.` }; + return { markdown: `This is the injector tree for the whole page${args.selector ? `, not filtered to \`${args.selector}\`` : ""}:\n\n${JSON.stringify(roots, null, 2)}` }; + } + }); + } +}); +//#endregion +export { ngDevtools as default }; diff --git a/packages/ng-devtools/dist/overlay.d.mts b/packages/ng-devtools/dist/overlay.d.mts new file mode 100644 index 0000000..be69aaa --- /dev/null +++ b/packages/ng-devtools/dist/overlay.d.mts @@ -0,0 +1,19 @@ +//#region src/overlay.d.ts +export declare function initOverlay(options?: { + baseURL?: string | string[]; +}): Promise<() => void>; +export interface AngularDebugApi { + getComponent(el: Element): unknown; + getInjector?(el: Element): unknown; + ɵgetSignalGraph?(injector: unknown): unknown; +} +export declare function collectComponentTree(): ComponentTreeNode[]; +export interface ComponentTreeNode { + id: string; + selector: string; + tagName: string; + children: ComponentTreeNode[]; + inputs?: Record; +} +export declare function walkAngularTree(el: Element, out: ComponentTreeNode[], ng: AngularDebugApi): void; +//#endregion \ No newline at end of file diff --git a/packages/ng-devtools/dist/overlay.mjs b/packages/ng-devtools/dist/overlay.mjs new file mode 100644 index 0000000..0e8b9bf --- /dev/null +++ b/packages/ng-devtools/dist/overlay.mjs @@ -0,0 +1,353 @@ +import { connectDevframe } from "devframe/client"; +//#region src/overlay.ts +let highlightEl = null; +async function initOverlay(options = {}) { + const my = (await connectDevframe({ baseURL: options.baseURL ?? ["./", "/__ng-devtools/"] })).scope("ng-devtools"); + async function pushTree() { + const tree = collectComponentTree(); + await my.rpc.call("push-component-tree", tree); + } + async function pushSignalGraph() { + const graph = collectSignalGraph(); + if (graph) await my.rpc.call("push-signal-graph", graph); + } + async function pushInjectorTree() { + const tree = collectInjectorTree(); + if (tree.length) await my.rpc.call("push-injector-tree", tree); + } + async function pushNgrxState() { + const data = collectNgrxState(); + if (data) await my.rpc.call("push-ngrx-state", data); + } + pushTree(); + pushSignalGraph(); + pushInjectorTree(); + pushNgrxState(); + const interval = setInterval(() => { + pushTree(); + pushSignalGraph(); + pushInjectorTree(); + pushNgrxState(); + }, 3e3); + my.rpc.register({ + name: "highlight-in-page", + type: "event", + jsonSerializable: true, + handler: (selector) => { + clearHighlight(); + let el = null; + try { + el = document.querySelector(selector); + } catch { + return; + } + if (el instanceof HTMLElement) showHighlight(el); + } + }); + return () => { + clearInterval(interval); + clearHighlight(); + }; +} +function findAngularElements() { + const versionEls = Array.from(document.querySelectorAll("[ng-version]")); + const hostEls = Array.from(document.querySelectorAll("*")).filter((el) => Array.from(el.attributes).some((a) => a.name.startsWith("_nghost"))); + return Array.from(/* @__PURE__ */ new Set([...versionEls, ...hostEls])); +} +function collectComponentTree() { + const nodes = []; + const allRoots = findAngularElements(); + const roots = allRoots.filter((root) => !allRoots.some((other) => other !== root && other.contains(root))); + const ng = window.ng; + if (ng?.getComponent) { + if (roots.length > 0) for (const root of roots) walkAngularTree(root, nodes, ng); + else if (typeof document !== "undefined" && document.body) walkAngularTree(document.body, nodes, ng); + } else if (typeof document !== "undefined" && document.body) walkDom(document.body, nodes); + return nodes; +} +function walkAngularTree(el, out, ng) { + const component = ng.getComponent(el); + if (component) { + const node = { + id: generateId(el), + selector: el.tagName.toLowerCase(), + tagName: el.tagName.toLowerCase(), + children: [], + inputs: tryGetInputs(component) + }; + for (const child of el.children) walkAngularTree(child, node.children, ng); + out.push(node); + } else for (const child of el.children) walkAngularTree(child, out, ng); +} +function walkDom(el, out) { + const tagName = el.tagName.toLowerCase(); + if (tagName.includes("-") || Array.from(el.attributes).some((a) => a.name.startsWith("_nghost"))) { + const node = { + id: generateId(el), + selector: tagName, + tagName, + children: [] + }; + for (const child of el.children) walkDom(child, node.children); + out.push(node); + } else for (const child of el.children) walkDom(child, out); +} +function isSignal(val) { + if (typeof val !== "function") return false; + if (val.name === "signalValueFn") return true; + return Object.getOwnPropertySymbols(val).some((s) => s.description === "SIGNAL" || s.toString().includes("SIGNAL")); +} +function tryGetInputs(component) { + if (!component || typeof component !== "object") return void 0; + try { + const inputs = {}; + const comp = component; + for (const key of Object.keys(comp)) { + const val = comp[key]; + if (isSignal(val)) try { + inputs[key] = serializeValue(val()); + } catch {} + else if (typeof val !== "function") inputs[key] = serializeValue(val); + } + return Object.keys(inputs).length > 0 ? inputs : void 0; + } catch { + return; + } +} +let idCounter = 0; +function generateId(el) { + const existing = el.getAttribute("data-ng-devtools-id"); + if (existing) return existing; + const id = `ngdt-${++idCounter}`; + el.setAttribute("data-ng-devtools-id", id); + return id; +} +function showHighlight(el) { + clearHighlight(); + const rect = el.getBoundingClientRect(); + highlightEl = document.createElement("div"); + Object.assign(highlightEl.style, { + position: "fixed", + top: `${rect.top}px`, + left: `${rect.left}px`, + width: `${rect.width}px`, + height: `${rect.height}px`, + background: "rgba(104, 182, 255, 0.25)", + border: "2px solid rgba(104, 182, 255, 0.8)", + borderRadius: "4px", + pointerEvents: "none", + zIndex: "2147483647", + transition: "all 0.15s ease" + }); + document.body.appendChild(highlightEl); + setTimeout(clearHighlight, 2e3); +} +function clearHighlight() { + highlightEl?.remove(); + highlightEl = null; +} +function getNg() { + return window.ng; +} +function collectSignalGraph() { + if (!getNg()?.ɵgetSignalGraph) return null; + const roots = document.querySelectorAll("[ng-version], [_nghost-ng-c]"); + for (const root of roots) { + const graph = getSignalGraphForElement(root); + if (graph) return graph; + } + return null; +} +function getSignalGraphForElement(el) { + const ng = getNg(); + if (!ng?.ɵgetSignalGraph || !ng?.getInjector) return null; + try { + const injector = ng.getInjector(el); + if (!injector) return null; + const raw = ng.ɵgetSignalGraph(injector); + if (!raw) return null; + return { + nodes: raw.nodes.map((n) => ({ + id: n.id, + kind: n.kind ?? "unknown", + label: n.label, + epoch: n.epoch ?? 0, + value: serializeValue(n.value), + watched: n.watched ?? false + })), + edges: raw.edges ?? [], + componentSelector: el.tagName.toLowerCase() + }; + } catch { + return null; + } +} +function serializeValue(val) { + if (val === void 0 || val === null) return val; + if (typeof val === "function") return `[Function: ${val.name || "anonymous"}]`; + if (typeof val === "symbol") return val.toString(); + if (typeof val === "bigint") return val.toString(); + if (typeof val === "object") try { + return JSON.parse(JSON.stringify(val)); + } catch { + return String(val); + } + return val; +} +function collectInjectorTree() { + const ng = getNg(); + if (!ng?.getInjector || !ng?.ɵgetInjectorMetadata) return []; + const roots = []; + const visited = /* @__PURE__ */ new WeakSet(); + const componentEls = document.querySelectorAll("[ng-version], [_nghost-ng-c]"); + for (const el of componentEls) try { + const injector = ng.getInjector(el); + if (!injector || visited.has(injector)) continue; + visited.add(injector); + const node = serializeInjectorNode(ng, injector, el, visited); + if (node) roots.push(node); + } catch {} + return roots; +} +function serializeInjectorNode(ng, injector, el, visited) { + try { + const metadata = ng.ɵgetInjectorMetadata?.(injector); + if (!metadata) return null; + const providers = getInjectorProvidersList(ng, injector); + const children = []; + for (const child of el.querySelectorAll(":scope > *")) try { + const childInjector = ng.getInjector(child); + if (!childInjector || visited.has(childInjector) || childInjector === injector) continue; + visited.add(childInjector); + const childNode = serializeInjectorNode(ng, childInjector, child, visited); + if (childNode) children.push(childNode); + } catch {} + return { + injector: { + id: `inj-${el.tagName.toLowerCase()}-${Math.random().toString(36).slice(2, 8)}`, + type: metadata.type ?? "unknown", + name: metadata.type === "element" ? el.tagName.toLowerCase() : metadata.source?.toString?.() ?? "Environment", + providerCount: providers.length + }, + providers, + children + }; + } catch { + return null; + } +} +function getInjectorProvidersList(ng, injector) { + if (!ng.ɵgetInjectorProviders) return []; + try { + return (ng.ɵgetInjectorProviders(injector) ?? []).map((p) => ({ + token: p.token?.name ?? p.token?.toString?.() ?? "unknown", + type: inferProviderType(p), + isViewProvider: p.isViewProvider ?? false + })); + } catch { + return []; + } +} +function inferProviderType(p) { + if (p.useClass) return "class"; + if (p.useValue !== void 0) return "value"; + if (p.useFactory) return "factory"; + if (p.useExisting) return "existing"; + return "class"; +} +const ngrxActionLog = []; +const MAX_ACTION_LOG = 50; +let reduxDevToolsSubscribed = false; +function collectNgrxState() { + const win = window; + if (!reduxDevToolsSubscribed) subscribeToReduxDevTools(); + const storeState = getNgrxStoreState(); + if (storeState !== void 0) return { + state: storeState, + actions: ngrxActionLog.slice(), + connected: true + }; + if (ngrxActionLog.length > 0) return { + state: win.__NGRX_DEVTOOLS_LAST_STATE__ ?? null, + actions: ngrxActionLog.slice(), + connected: true + }; + return null; +} +function getNgrxStoreState() { + const ng = getNg(); + if (!ng?.getInjector) return void 0; + const roots = document.querySelectorAll("[ng-version], [_nghost-ng-c]"); + for (const root of roots) try { + const injector = ng.getInjector(root); + if (!injector) continue; + const allProviders = ng.ɵgetInjectorProviders?.(injector) ?? []; + for (const p of allProviders) { + const token = p.token; + if (!token) continue; + if ((token.name ?? token.toString?.() ?? "") === "Store") try { + const store = injector.get(token); + if (!store || typeof store.subscribe !== "function") continue; + let snapshot; + store.subscribe((val) => { + snapshot = val; + }).unsubscribe(); + if (snapshot !== void 0) return safeSerialize(snapshot); + } catch {} + } + } catch {} +} +function subscribeToReduxDevTools() { + const win = window; + const ext = win.__REDUX_DEVTOOLS_EXTENSION__; + if (!ext) return; + reduxDevToolsSubscribed = true; + const originalConnect = ext.connect?.bind(ext); + if (originalConnect) ext.connect = function(...args) { + const connection = originalConnect(...args); + const originalSend = connection.send?.bind(connection); + if (originalSend) connection.send = function(action, state) { + captureAction(action); + win.__NGRX_DEVTOOLS_LAST_STATE__ = safeSerialize(state); + return originalSend(action, state); + }; + const originalInit = connection.init?.bind(connection); + if (originalInit) connection.init = function(state) { + win.__NGRX_DEVTOOLS_LAST_STATE__ = safeSerialize(state); + return originalInit(state); + }; + return connection; + }; + if (typeof ext.subscribe === "function") try { + ext.subscribe((message) => { + try { + if (message?.type === "ACTION" || message?.type === "DISPATCH") captureAction(message.payload); + if (message?.state) win.__NGRX_DEVTOOLS_LAST_STATE__ = safeSerialize(typeof message.state === "string" ? JSON.parse(message.state) : message.state); + } catch {} + }); + } catch {} +} +function captureAction(action) { + if (!action) return; + const entry = { + type: action.type ?? String(action), + payload: safeSerialize(action.payload ?? action), + timestamp: Date.now() + }; + ngrxActionLog.push(entry); + if (ngrxActionLog.length > MAX_ACTION_LOG) ngrxActionLog.splice(0, ngrxActionLog.length - MAX_ACTION_LOG); +} +function safeSerialize(val) { + if (val === void 0 || val === null) return val; + try { + return JSON.parse(JSON.stringify(val)); + } catch { + return String(val); + } +} +if (typeof document !== "undefined" && !(typeof process !== "undefined" && process.env?.["VITEST"])) { + initOverlay().catch(console.error); + import("./popup.mjs").then((m) => m.createDevtoolsPopup()).catch(console.error); +} +//#endregion +export { collectComponentTree, initOverlay, walkAngularTree }; diff --git a/packages/ng-devtools/dist/popup.d.mts b/packages/ng-devtools/dist/popup.d.mts new file mode 100644 index 0000000..1b39226 --- /dev/null +++ b/packages/ng-devtools/dist/popup.d.mts @@ -0,0 +1,6 @@ +//#region src/popup.d.ts +export declare function createDevtoolsPopup(): { + toggle: () => void; + destroy: () => void; +} | undefined; +//#endregion \ No newline at end of file diff --git a/packages/ng-devtools/dist/popup.mjs b/packages/ng-devtools/dist/popup.mjs new file mode 100644 index 0000000..aed1a7b --- /dev/null +++ b/packages/ng-devtools/dist/popup.mjs @@ -0,0 +1,444 @@ +//#region src/popup.ts +let popupRoot = null; +/** Kept so a later call returns the same handle rather than nothing. */ +let handle; +let isOpen = false; +const STORAGE_KEY = "ng-devtools-popup"; +const DEFAULT_STATE = { + x: 16, + y: 16, + width: 720, + height: 480, + docked: "float" +}; +function loadState() { + try { + const raw = localStorage.getItem(STORAGE_KEY); + const stored = raw ? JSON.parse(raw) : null; + if (!stored || typeof stored !== "object" || Array.isArray(stored)) return { ...DEFAULT_STATE }; + const saved = stored; + const point = saved.launcher; + return { + ...DEFAULT_STATE, + ...Number.isFinite(saved.x) ? { x: saved.x } : {}, + ...Number.isFinite(saved.y) ? { y: saved.y } : {}, + ...Number.isFinite(saved.width) ? { width: saved.width } : {}, + ...Number.isFinite(saved.height) ? { height: saved.height } : {}, + ...saved.docked === "float" || saved.docked === "bottom" || saved.docked === "right" ? { docked: saved.docked } : {}, + ...point && Number.isFinite(point.x) && Number.isFinite(point.y) ? { launcher: { + x: point.x, + y: point.y + } } : {} + }; + } catch { + return { ...DEFAULT_STATE }; + } +} +function saveState(state) { + try { + localStorage.setItem(STORAGE_KEY, JSON.stringify(state)); + } catch {} +} +function getBaseURL() { + for (const base of [ + "/__ng-devtools/", + "/__devframe/", + "/" + ]) { + try { + const xhr = new XMLHttpRequest(); + xhr.open("GET", base + "__devframe/__connection.json", false); + xhr.send(); + if (xhr.status === 200) return base; + } catch {} + try { + const xhr = new XMLHttpRequest(); + xhr.open("GET", base + "__connection.json", false); + xhr.send(); + if (xhr.status === 200) return base; + } catch {} + } + return "/__ng-devtools/"; +} +function createDevtoolsPopup() { + if (popupRoot) return handle; + const state = loadState(); + popupRoot = document.createElement("div"); + popupRoot.id = "ng-devtools-popup-root"; + const shadow = popupRoot.attachShadow({ mode: "open" }); + const fab = document.createElement("button"); + fab.setAttribute("aria-label", "Toggle Angular DevTools"); + fab.setAttribute("aria-expanded", "false"); + fab.title = "Angular DevTools"; + fab.innerHTML = ""; + const panel = document.createElement("div"); + panel.classList.add("panel"); + panel.setAttribute("role", "region"); + panel.setAttribute("aria-label", "Angular DevTools"); + const toolbar = document.createElement("div"); + toolbar.classList.add("toolbar"); + const title = document.createElement("span"); + title.classList.add("title"); + title.textContent = "Angular DevTools"; + const dockGroup = document.createElement("div"); + dockGroup.classList.add("dock-group"); + for (const mode of [ + "float", + "bottom", + "right" + ]) { + const btn = document.createElement("button"); + btn.type = "button"; + btn.textContent = mode === "float" ? "⊡" : mode === "bottom" ? "⬓" : "⬔"; + btn.title = `Dock ${mode}`; + btn.setAttribute("aria-label", `Dock ${mode}`); + btn.setAttribute("aria-pressed", String(state.docked === mode)); + btn.classList.add("dock-btn"); + if (state.docked === mode) btn.classList.add("active"); + btn.addEventListener("click", () => { + state.docked = mode; + applyDock(); + dockGroup.querySelectorAll(".dock-btn").forEach((b) => { + b.classList.remove("active"); + b.setAttribute("aria-pressed", "false"); + }); + btn.classList.add("active"); + btn.setAttribute("aria-pressed", "true"); + saveState(state); + }); + dockGroup.appendChild(btn); + } + const closeBtn = document.createElement("button"); + closeBtn.type = "button"; + closeBtn.classList.add("close-btn"); + closeBtn.innerHTML = "✕"; + closeBtn.title = "Close"; + closeBtn.setAttribute("aria-label", "Close Angular DevTools"); + closeBtn.addEventListener("click", togglePanel); + toolbar.append(title, dockGroup, closeBtn); + const iframe = document.createElement("iframe"); + iframe.classList.add("frame"); + iframe.title = "Angular DevTools"; + panel.append(toolbar, iframe); + const style = document.createElement("style"); + style.textContent = ` + :host { all: initial; } + .fab { + position: fixed; + z-index: 2147483646; + inset: auto 16px 16px auto; + width: 44px; + height: 44px; + border-radius: 50%; + border: none; + background: var(--ng-devtools-accent, #7c3aed); + color: var(--ng-devtools-accent-ink, #fff); + cursor: pointer; + touch-action: none; + display: flex; + align-items: center; + justify-content: center; + box-shadow: 0 2px 12px rgba(0,0,0,0.3); + transition: transform 0.15s, background 0.15s; + } + .fab:hover { background: var(--ng-devtools-accent-hover, #6d28d9); transform: scale(1.08); } + .fab.open { background: #3f3f46; } + .fab.dragging { + transition: none; + cursor: grabbing; + transform: scale(1.06); + } + /* The shadow root cannot inherit the page's focus styles. */ + .dock-btn:focus-visible, .close-btn:focus-visible { + outline: 2px solid #fff; + outline-offset: 2px; + } + /* The launcher sits on the host page, whose background is unknown, so the + ring is drawn in both directions to stay visible either way. */ + .fab:focus-visible { + outline: 2px solid #fff; + outline-offset: 2px; + box-shadow: 0 0 0 4px #111827; + } + .panel { + position: fixed; + z-index: 2147483647; + display: flex; + flex-direction: column; + opacity: 0; + visibility: hidden; + pointer-events: none; + transform: translateY(8px) scale(0.98); + transform-origin: bottom right; + transition: opacity 160ms ease, transform 160ms ease, visibility 0s linear 160ms; + background: #0f0f11; + border: 1px solid #27272a; + border-radius: 10px; + overflow: hidden; + box-shadow: 0 8px 32px rgba(0,0,0,0.5); + resize: both; + } + .panel.open { + opacity: 1; + visibility: visible; + pointer-events: auto; + transform: none; + transition: opacity 160ms ease, transform 160ms ease, visibility 0s; + } + @media (prefers-reduced-motion: reduce) { + .panel, .panel.open, .fab { transition: none; } + } + .panel.dock-float { + border-radius: 10px; + } + .panel.dock-bottom { + left: 0 !important; + right: 0 !important; + bottom: 0 !important; + top: auto !important; + width: 100% !important; + height: 40vh !important; + border-radius: 10px 10px 0 0; + resize: vertical; + } + .panel.dock-right { + top: 0 !important; + right: 0 !important; + bottom: 0 !important; + left: auto !important; + width: 40vw !important; + height: 100% !important; + border-radius: 10px 0 0 10px; + resize: horizontal; + } + .toolbar { + cursor: grab; + display: flex; + align-items: center; + gap: 8px; + padding: 6px 12px; + background: #18181b; + border-bottom: 1px solid #27272a; + user-select: none; + min-height: 36px; + } + .toolbar:active { cursor: grabbing; } + .title { + font-family: system-ui, sans-serif; + font-size: 13px; + font-weight: 600; + color: var(--ng-devtools-title, #a78bfa); + flex: 1; + } + .dock-group { + display: flex; + gap: 2px; + } + .dock-btn, .close-btn { + border: none; + background: transparent; + color: #8a8a94; + cursor: pointer; + font-size: 14px; + padding: 2px 6px; + border-radius: 4px; + line-height: 1; + } + .dock-btn:hover, .close-btn:hover { background: #27272a; color: #e4e4e7; } + .dock-btn.active { color: var(--ng-devtools-title, #a78bfa); } + .close-btn { font-size: 13px; } + .frame { + flex: 1; + border: none; + width: 100%; + height: 100%; + background: #0f0f11; + } + `; + fab.classList.add("fab"); + shadow.append(style, fab, panel); + document.body.appendChild(popupRoot); + let dragging = false; + let dragOffsetX = 0; + let dragOffsetY = 0; + toolbar.addEventListener("mousedown", (e) => { + if (state.docked !== "float") return; + dragging = true; + dragOffsetX = e.clientX - panel.offsetLeft; + dragOffsetY = e.clientY - panel.offsetTop; + e.preventDefault(); + }); + const onMouseMove = (e) => { + if (!dragging) return; + const maxX = Math.max(0, window.innerWidth - panel.offsetWidth); + const maxY = Math.max(0, window.innerHeight - panel.offsetHeight); + state.x = Math.min(Math.max(0, e.clientX - dragOffsetX), maxX); + state.y = Math.min(Math.max(0, e.clientY - dragOffsetY), maxY); + panel.style.left = state.x + "px"; + panel.style.top = state.y + "px"; + }; + const onMouseUp = () => { + if (dragging) { + dragging = false; + saveState(state); + } + }; + window.addEventListener("mousemove", onMouseMove); + window.addEventListener("mouseup", onMouseUp); + const onEscape = (event) => { + if (event.key === "Escape" && isOpen) togglePanel(); + }; + popupRoot.addEventListener("keydown", onEscape); + iframe.addEventListener("load", () => { + try { + iframe.contentDocument?.addEventListener("keydown", onEscape); + } catch {} + }); + function applyDock() { + panel.className = `panel${isOpen ? " open" : ""} dock-${state.docked}`; + if (state.docked === "float") { + panel.style.left = state.x + "px"; + panel.style.top = state.y + "px"; + panel.style.width = state.width + "px"; + panel.style.height = state.height + "px"; + } else { + panel.style.left = ""; + panel.style.top = ""; + panel.style.width = ""; + panel.style.height = ""; + } + } + function togglePanel() { + isOpen = !isOpen; + fab.classList.toggle("open", isOpen); + fab.setAttribute("aria-expanded", String(isOpen)); + panel.classList.toggle("open", isOpen); + applyDock(); + if (!isOpen && popupRoot?.contains(document.activeElement)) fab.focus(); + if (isOpen && !iframe.src) { + const base = getBaseURL(); + const origin = location.origin; + iframe.src = `${origin}${base}?baseURL=${encodeURIComponent(origin + base)}`; + } + } + const DRAG_THRESHOLD = 4; + const MARGIN = 8; + let fabPointer = null; + let launcherAt = null; + let suppressClick = false; + fab.addEventListener("pointerdown", (event) => { + if (fabPointer) return; + fabPointer = { + id: event.pointerId, + offsetX: event.clientX - fab.offsetLeft, + offsetY: event.clientY - fab.offsetTop, + moved: false + }; + try { + fab.setPointerCapture(event.pointerId); + } catch {} + }); + fab.addEventListener("pointermove", (event) => { + if (!fabPointer || event.pointerId !== fabPointer.id) return; + if (event.pointerType === "mouse" && event.buttons === 0) { + cancelFabDrag(); + return; + } + const x = event.clientX - fabPointer.offsetX; + const y = event.clientY - fabPointer.offsetY; + if (!fabPointer.moved) { + if (Math.hypot(x - fab.offsetLeft, y - fab.offsetTop) < DRAG_THRESHOLD) return; + fabPointer.moved = true; + fab.classList.add("dragging"); + } + placeLauncher(x, y); + }); + function cancelFabDrag() { + fabPointer = null; + fab.classList.remove("dragging"); + } + const endFabDrag = (event) => { + if (!fabPointer || event.pointerId !== fabPointer.id) return; + const moved = fabPointer.moved; + cancelFabDrag(); + if (!moved) return; + suppressClick = true; + requestAnimationFrame(() => { + suppressClick = false; + }); + if (launcherAt) state.launcher = launcherAt; + saveState(state); + }; + fab.addEventListener("pointerup", endFabDrag); + fab.addEventListener("pointercancel", cancelFabDrag); + fab.addEventListener("lostpointercapture", cancelFabDrag); + fab.addEventListener("click", () => { + if (suppressClick) { + suppressClick = false; + return; + } + togglePanel(); + }); + /** Positions the launcher, keeping it fully on screen. */ + function placeLauncher(x, y) { + const size = fab.offsetWidth; + const left = Math.round(Math.min(Math.max(x, MARGIN), window.innerWidth - size - MARGIN)); + const top = Math.round(Math.min(Math.max(y, MARGIN), window.innerHeight - size - MARGIN)); + fab.style.inset = `${top}px auto auto ${left}px`; + launcherAt = { + x: left, + y: top + }; + return launcherAt; + } + function applyLauncher() { + if (!state.launcher) return; + placeLauncher(state.launcher.x, state.launcher.y); + } + fab.addEventListener("keydown", (event) => { + const step = event.shiftKey ? 32 : 8; + const move = { + ArrowLeft: [-step, 0], + ArrowRight: [step, 0], + ArrowUp: [0, -step], + ArrowDown: [0, step] + }[event.key]; + if (!move) return; + event.preventDefault(); + state.launcher = placeLauncher(fab.offsetLeft + move[0], fab.offsetTop + move[1]); + saveState(state); + }); + fab.addEventListener("dblclick", () => { + delete state.launcher; + fab.style.inset = ""; + saveState(state); + }); + applyLauncher(); + window.addEventListener("resize", applyLauncher); + const resizeObserver = typeof ResizeObserver === "undefined" ? void 0 : new ResizeObserver(() => { + if (state.docked === "float" && isOpen) { + state.width = panel.offsetWidth; + state.height = panel.offsetHeight; + saveState(state); + } + }); + resizeObserver?.observe(panel); + applyDock(); + handle = { + toggle: togglePanel, + destroy: () => { + window.removeEventListener("mousemove", onMouseMove); + window.removeEventListener("mouseup", onMouseUp); + window.removeEventListener("resize", applyLauncher); + resizeObserver?.disconnect(); + popupRoot?.remove(); + popupRoot = null; + handle = void 0; + isOpen = false; + } + }; + return handle; +} +if (typeof document !== "undefined") createDevtoolsPopup(); +//#endregion +export { createDevtoolsPopup }; diff --git a/packages/ng-devtools/dist/public/assets/browser-agent-rpc-BXhoSh1z-DT7_jkxB.js b/packages/ng-devtools/dist/public/assets/browser-agent-rpc-BXhoSh1z-DT7_jkxB.js new file mode 100644 index 0000000..58416a7 --- /dev/null +++ b/packages/ng-devtools/dist/public/assets/browser-agent-rpc-BXhoSh1z-DT7_jkxB.js @@ -0,0 +1 @@ +import{t as e}from"./index-BUkjK2_k.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/packages/ng-devtools/dist/public/assets/index-BUkjK2_k.js b/packages/ng-devtools/dist/public/assets/index-BUkjK2_k.js new file mode 100644 index 0000000..ba761c7 --- /dev/null +++ b/packages/ng-devtools/dist/public/assets/index-BUkjK2_k.js @@ -0,0 +1,896 @@ +(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=Object.defineProperty,t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable,i=(t,n,r)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r,a=(e,a)=>{for(var o in a||={})n.call(a,o)&&i(e,o,a[o]);if(t)for(var o of t(a))r.call(a,o)&&i(e,o,a[o]);return e},o=(e,t,n)=>(i(e,typeof t==`symbol`?t:t+``,n),n),s=globalThis;function c(e){let t=s.__Zone_symbol_prefix;return(typeof t==`string`?t:`__zone_symbol__`)+e}function l(){let e=s.performance;function t(t){e&&e.mark&&e.mark(t)}function n(t,n){e&&e.measure&&e.measure(t,n)}t(`Zone`);let r=class e{constructor(e,t){o(this,`_parent`),o(this,`_name`),o(this,`_properties`),o(this,`_zoneDelegate`),this._parent=e,this._name=t?t.name||`unnamed`:``,this._properties=t&&t.properties||{},this._zoneDelegate=new l(this,this._parent&&this._parent._zoneDelegate,t)}static assertZonePatched(){if(s.Promise!==re.ZoneAwarePromise)throw Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let t=e.current;for(;t.parent;)t=t.parent;return t}static get current(){return O.zone}static get currentTask(){return ae}static __load_patch(r,i,a=!1){if(Object.hasOwn(re,r)){let e=s[c(`forceDuplicateZoneCheck`)]===!0;if(!a&&e)throw Error(`Already loaded patch: `+r)}else if(!s[`__Zone_disable_`+r]){let a=`Zone:`+r;t(a),re[r]=i(s,e,ie),n(a,a)}}get parent(){return this._parent}get name(){return this._name}get(e){let t=this.getZoneWith(e);if(t)return t._properties[e]}getZoneWith(e){let t=this;for(;t;){if(Object.hasOwn(t._properties,e))return t;t=t._parent}return null}fork(e){if(!e)throw Error(`ZoneSpec required!`);return this._zoneDelegate.fork(this,e)}wrap(e,t){if(typeof e!=`function`)throw Error(`Expecting function got: `+e);let n=this._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}}run(e,t,n,r){O={parent:O,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{O=O.parent}}runGuarded(e,t=null,n,r){O={parent:O,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{O=O.parent}}runTask(e,t,n){if(e.zone!=this)throw Error(`A task can only be run in the zone of creation! (Creation: `+(e.zone||x).name+`; Execution: `+this.name+`)`);let r=e,{type:i,data:{isPeriodic:a=!1,isRefreshable:o=!1}={}}=e;if(e.state===S&&(i===D||i===ne))return;let s=e.state!=w;s&&r._transitionTo(w,C);let c=ae;ae=r,O={parent:O,zone:this};try{i==ne&&e.data&&!a&&!o&&(e.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,r,t,n)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{let t=e.state;if(t!==S&&t!==te){if(i==D||a||o&&t===ee)s&&r._transitionTo(C,w,ee);else{let e=r._zoneDelegates;this._updateTaskCount(r,-1),s&&r._transitionTo(S,w,S),o&&(r._zoneDelegates=e)}}O=O.parent,ae=c}}scheduleTask(e){if(e.zone&&e.zone!==this){let t=this;for(;t;){if(t===e.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${e.zone.name}`);t=t.parent}}e._transitionTo(ee,S);let t=[];e._zoneDelegates=t,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(t){throw e._transitionTo(te,ee,S),this._zoneDelegate.handleError(this,t),t}return e._zoneDelegates===t&&this._updateTaskCount(e,1),e.state==ee&&e._transitionTo(C,ee),e}scheduleMicroTask(e,t,n,r){return this.scheduleTask(new u(E,e,t,n,r,void 0))}scheduleMacroTask(e,t,n,r,i){return this.scheduleTask(new u(ne,e,t,n,r,i))}scheduleEventTask(e,t,n,r,i){return this.scheduleTask(new u(D,e,t,n,r,i))}cancelTask(e){if(e.zone!=this)throw Error(`A task can only be cancelled in the zone of creation! (Creation: `+(e.zone||x).name+`; Execution: `+this.name+`)`);if(e.state===C||e.state===w){e._transitionTo(T,C,w);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(te,T),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(S,T),e.runCount=-1,e}}_updateTaskCount(e,t){let n=e._zoneDelegates;t==-1&&(e._zoneDelegates=null);for(let r=0;re.hasTask(n,r),onScheduleTask:(e,t,n,r)=>e.scheduleTask(n,r),onInvokeTask:(e,t,n,r,i,a)=>e.invokeTask(n,r,i,a),onCancelTask:(e,t,n,r)=>e.cancelTask(n,r)};class l{constructor(e,t,n){o(this,`_zone`),o(this,`_taskCounts`,{microTask:0,macroTask:0,eventTask:0}),o(this,`_forkDlgt`),o(this,`_forkZS`),o(this,`_forkCurrZone`),o(this,`_interceptDlgt`),o(this,`_interceptZS`),o(this,`_interceptCurrZone`),o(this,`_invokeDlgt`),o(this,`_invokeZS`),o(this,`_invokeCurrZone`),o(this,`_handleErrorDlgt`),o(this,`_handleErrorZS`),o(this,`_handleErrorCurrZone`),o(this,`_scheduleTaskDlgt`),o(this,`_scheduleTaskZS`),o(this,`_scheduleTaskCurrZone`),o(this,`_invokeTaskDlgt`),o(this,`_invokeTaskZS`),o(this,`_invokeTaskCurrZone`),o(this,`_cancelTaskDlgt`),o(this,`_cancelTaskZS`),o(this,`_cancelTaskCurrZone`),o(this,`_hasTaskDlgt`),o(this,`_hasTaskDlgtOwner`),o(this,`_hasTaskZS`),o(this,`_hasTaskCurrZone`),this._zone=e,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),this._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this._zone:t._forkCurrZone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this._zone:t._interceptCurrZone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this._zone:t._invokeCurrZone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this._zone:t._handleErrorCurrZone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this._zone:t._scheduleTaskCurrZone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this._zone:t._invokeTaskCurrZone),this._cancelTaskZS=n&&(n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this._zone:t._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;let r=n&&n.onHasTask,i=t&&t._hasTaskZS;(r||i)&&(this._hasTaskZS=r?n:a,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=this._zone,n.onScheduleTask||(this._scheduleTaskZS=a,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this._zone),n.onInvokeTask||(this._invokeTaskZS=a,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this._zone),n.onCancelTask||(this._cancelTaskZS=a,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this._zone))}get zone(){return this._zone}fork(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new i(e,t)}intercept(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t}invoke(e,t,n,r,i){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,r,i):t.apply(n,r)}handleError(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)}scheduleTask(e,t){let n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t),n||=t;else if(t.scheduleFn)t.scheduleFn(t);else if(t.type==E)y(t);else throw Error(`Task is missing scheduleFn.`);return n}invokeTask(e,t,n,r){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,r):t.callback.apply(n,r)}cancelTask(e,t){let n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error(`Task is not cancelable`);n=t.cancelFn(t)}return n}hasTask(e,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(t){this.handleError(e,t)}}_updateTaskCount(e,t){let n=this._taskCounts,r=n[e],i=n[e]=r+t;if(i<0)throw Error(`More tasks executed then were scheduled.`);if(r==0||i==0){let t={microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e};this.hasTask(this._zone,t)}}}class u{constructor(e,t,n,r,i,a){if(o(this,`type`),o(this,`source`),o(this,`invoke`),o(this,`callback`),o(this,`data`),o(this,`scheduleFn`),o(this,`cancelFn`),o(this,`_zone`,null),o(this,`runCount`,0),o(this,`_zoneDelegates`,null),o(this,`_state`,`notScheduled`),this.type=e,this.source=t,this.data=r,this.scheduleFn=i,this.cancelFn=a,!n)throw Error(`callback is not defined`);this.callback=n;let c=this;this.invoke=e===D&&r&&r.useG?u.invokeTask:function(){return u.invokeTask.call(s,c,this,arguments)}}static invokeTask(e,t,n){e||=this,oe++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{try{oe===1&&!s[m]&&b()}finally{oe--}}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(S,ee)}_transitionTo(e,t,n){if(this._state===t||this._state===n)this._state=e,e==S&&(this._zoneDelegates=null);else throw Error(`${this.type} '${this.source}': can not transition to '${e}', expecting state '${t}'${n?` or '`+n+`'`:``}, was '${this._state}'.`)}toString(){return this.data&&this.data.handleId!==void 0?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}let d=c(`setTimeout`),f=c(`Promise`),p=c(`then`),m=c(`enable_native_microtask_draining`),h=[],g=!1,_;function v(e){!_&&s[f]&&(_=s[f].resolve(0)),_?(_[p]??_.then).call(_,e):s[d](e,0)}function y(e){let t=s[m],n=t&&h.length===0&&!g,r=!t&&oe===0&&h.length===0;(n||r)&&v(b),e&&h.push(e)}function b(){if(!g){g=!0;try{for(;h.length;){let e=h;h=[];for(let t of e)try{t.zone.runTask(t,null,null)}catch(e){ie.onUnhandledError(e)}}}finally{if(s[m])g=!1,ie.microtaskDrainDone();else try{ie.microtaskDrainDone()}finally{g=!1}}}}let x={name:`NO ZONE`},S=`notScheduled`,ee=`scheduling`,C=`scheduled`,w=`running`,T=`canceling`,te=`unknown`,E=`microTask`,ne=`macroTask`,D=`eventTask`,re=Object.create(null),ie={symbol:c,currentZoneFrame:()=>O,onUnhandledError:se,microtaskDrainDone:se,scheduleMicroTask:y,showUncaughtError:()=>!i[c(`ignoreConsoleErrorUncaughtError`)],patchEventTarget:()=>[],patchOnProperties:se,patchMethod:()=>se,bindArguments:()=>[],patchThen:()=>se,patchMacroTask:()=>se,patchEventPrototype:()=>se,getGlobalObjects:()=>void 0,ObjectDefineProperty:()=>se,ObjectGetOwnPropertyDescriptor:()=>void 0,ObjectCreate:()=>void 0,ArraySlice:()=>[],patchClass:()=>se,wrapWithCurrentZone:()=>se,filterProperties:()=>[],attachOriginToPatched:()=>se,_redefineProperty:()=>se,patchCallbacks:()=>se,nativeScheduleMicroTask:v},O={parent:null,zone:new i(null,null)},ae=null,oe=0;function se(){}return n(`Zone`,`Zone`),i}function u(){let e=globalThis,t=e[c(`forceDuplicateZoneCheck`)]===!0;if(e.Zone&&(t||typeof e.Zone.__symbol__!=`function`))throw Error(`Zone already loaded.`);return e.Zone??=l(),e.Zone}var d=Object.getOwnPropertyDescriptor,f=Object.defineProperty,p=Object.getPrototypeOf,m=Object.create,h=Array.prototype.slice,g=`addEventListener`,_=`removeEventListener`,v=c(g),y=c(_),b=`true`,x=`false`,S=c(``);function ee(e,t){return Zone.current.wrap(e,t)}function C(e,t,n,r,i){return Zone.current.scheduleMacroTask(e,t,n,r,i)}var w=c,T=typeof window<`u`,te=T?window:void 0,E=T&&te||globalThis,ne=`removeAttribute`;function D(e,t){for(let n=e.length-1;n>=0;n--)typeof e[n]==`function`&&(e[n]=ee(e[n],t+`_`+n));return e}function re(e,t){let n=e.constructor.name;for(let r=0;r{let t=function(){return e.apply(this,D(arguments,n+`.`+i))};return _e(t,e),t})(a)}}}function ie(e){return e?e.writable===!1?!1:typeof e.get!=`function`||e.set!==void 0:!0}var O=typeof WorkerGlobalScope<`u`&&self instanceof WorkerGlobalScope,ae=!(`nw`in E)&&E.process!==void 0&&E.process.toString()===`[object process]`,oe=!ae&&!O&&!!(T&&te.HTMLElement),se=E.process!==void 0&&E.process.toString()===`[object process]`&&!O&&!!(T&&te.HTMLElement),ce=Object.create(null),le=w(`enable_beforeunload`),ue=function(e){if(e||=E.event,!e)return;let t=ce[e.type];t||=ce[e.type]=w(`ON_PROPERTY`+e.type);let n=this||e.target||E,r=n[t],i;if(oe&&n===te&&e.type===`error`){let t=e;i=r&&r.call(this,t.message,t.filename,t.lineno,t.colno,t.error),i===!0&&e.preventDefault()}else i=r&&r.apply(this,arguments),e.type===`beforeunload`&&E[le]&&typeof i==`string`?e.returnValue=i:i!=null&&!i&&e.preventDefault();return i};function de(e,t,n){let r=d(e,t);if(!r&&n&&d(n,t)&&(r={enumerable:!0,configurable:!0}),!r||!r.configurable)return;let i=w(`on`+t+`patched`);if(Object.hasOwn(e,i)&&e[i])return;delete r.writable,delete r.value;let a=r.get,o=r.set,s=t.slice(2),c=ce[s];c||=ce[s]=w(`ON_PROPERTY`+s),r.set=function(t){let n=this;!n&&e===E&&(n=E),n&&(typeof n[c]==`function`&&n.removeEventListener(s,ue),o?.call(n,null),n[c]=t,typeof t==`function`&&n.addEventListener(s,ue,!1))},r.get=function(){let n=this;if(!n&&e===E&&(n=E),!n)return null;let i=n[c];if(i)return i;if(a){let e=a.call(this);if(e)return r.set.call(this,e),typeof n[ne]==`function`&&n.removeAttribute(t),e}return null},f(e,t,r),e[i]=!0}function fe(e,t,n){if(t)for(let r=0;rfunction(t,r){let a=n(t,r);return a.cbIdx>=0&&typeof r[a.cbIdx]==`function`?C(a.name,r[a.cbIdx],a,i):e.apply(t,r)})}function _e(e,t){e[w(`OriginalDelegate`)]=t}function ve(e){return typeof e==`function`}function ye(e){return typeof e==`number`}var be={useG:!0},xe=Object.create(null),Se={},Ce=RegExp(`^`+S+`(\\w+)(true|false)$`),we=w(`propagationStopped`),Te=[`capture`,`once`,`passive`,`signal`];function Ee(e,t){let n=(t?t(e):e)+x,r=(t?t(e):e)+b,i=S+n,a=S+r;xe[e]={[x]:i,[b]:a}}function De(e,t,n,r){let i=r&&r.add||g,o=r&&r.rm||_,s=r&&r.listeners||`eventListeners`,c=r&&r.rmAll||`removeAllListeners`,l=w(i),u=`.`+i+`:`,d=function(e,t,n){if(e.isRemoved)return;let r=e.callback;typeof r==`object`&&r.handleEvent&&(e.callback=e=>r.handleEvent(e),e.originalDelegate=r);let i;try{e.invoke(e,t,[n])}catch(e){i=e}let a=e.options;if(a&&typeof a==`object`&&a.once){let r=e.originalDelegate?e.originalDelegate:e.callback;t[o].call(t,n.type,r,a)}return i};function f(n,r,i){if(r||=e.event,!r)return;let a=n||r.target||e,o=a[xe[r.type][i?b:x]];if(o){let e=[];if(o.length===1){let t=d(o[0],a,r);t&&e.push(t)}else{let t=o.slice();for(let n=0;n{throw r})}}}let m=function(e){return f(this,e,!1)},h=function(e){return f(this,e,!0)};function v(t,n){if(!t)return!1;let r=!0;n&&n.useG!==void 0&&(r=n.useG);let d=n&&n.vh,f=!0;n&&n.chkDup!==void 0&&(f=n.chkDup);let g=!1;n&&n.rt!==void 0&&(g=n.rt);let _=t;for(;_&&!Object.hasOwn(_,i);)_=p(_);if(!_&&t[i]&&(_=t),!_||_[l])return!1;let v=n&&n.eventNameToString,y={},ee=_[l]=_[i],C=_[w(o)]=_[o],T=_[w(s)]=_[s],te=_[w(c)]=_[c],E;n&&n.prepend&&(E=_[w(n.prepend)]=_[n.prepend]);function ne(e,t){return t?typeof e==`boolean`?{capture:e,passive:!0}:e?(typeof e==`object`&&e.passive!==!1&&(e.passive=!0),e):{passive:!0}:e}let D=function(e){if(!y.isExisting)return ee.call(y.target,y.eventName,y.capture?h:m,y.options)},re=function(e){if(!e.isRemoved){let t=xe[e.eventName],n;t&&(n=t[e.capture?b:x]);let r=n&&e.target[n];if(r){for(let t=0;toe.zone.cancelTask(oe);t.call(_,`abort`,e,{once:!0}),oe.removeAbortListener=()=>_.removeEventListener(`abort`,e)}if(y.target=null,O&&(O.taskData=null),ee&&(y.options.once=!0),typeof oe.options!=`boolean`&&(oe.options=g),oe.target=l,oe.capture=S,oe.eventName=u,m&&(oe.originalDelegate=p),c?te.unshift(oe):te.push(oe),s)return l}};return _[i]=pe(ee,u,se,ce,g),E&&(_.prependListener=pe(E,`.prependListener:`,O,ce,g,!0)),_[o]=function(){let t=this||e,r=arguments[0];n&&n.transferEventName&&(r=n.transferEventName(r));let i=arguments[2],a=i?typeof i==`boolean`||i.capture:!1,o=arguments[1];if(!o)return C.apply(this,arguments);if(d&&!d(C,o,t,arguments))return;let s=xe[r],c;s&&(c=s[a?b:x]);let l=c&&t[c];if(l)for(let e=0;efunction(t,n){t[we]=!0,e&&e.apply(t,n)})}function Ae(e,t){t.patchMethod(e,`queueMicrotask`,e=>function(e,t){Zone.current.scheduleMicroTask(`queueMicrotask`,t[0])})}var je=w(`zoneTask`);function Me(e,t,n,r){let i=null,a=null;t+=r,n+=r;let o={};function s(t){let n=t.data;n.args[0]=function(){return t.invoke.apply(this,arguments)};let r=i.apply(e,n.args);return ye(r)?n.handleId=r:(n.handle=r,n.isRefreshable=ve(r?.refresh)),t}function c(t){let{handle:n,handleId:r}=t.data;return a.call(e,n??r)}i=he(e,t,n=>function(i,a){if(ve(a[0])){let e={isRefreshable:!1,isPeriodic:r===`Interval`,delay:r===`Timeout`||r===`Interval`?a[1]||0:void 0,args:a},n=a[0];a[0]=function(){try{return n.apply(this,arguments)}finally{let{handle:t,handleId:n,isPeriodic:r,isRefreshable:i}=e;!r&&!i&&(n?delete o[n]:t&&(t[je]=null))}};let i=C(t,a[0],e,s,c);if(!i)return i;let{handleId:l,handle:u,isRefreshable:d,isPeriodic:f}=i.data;if(l)o[l]=i;else if(u&&(u[je]=i,d&&!f)){let e=u.refresh;u.refresh=function(){let{zone:t,state:n}=i;return n===`notScheduled`?(i._state=`scheduled`,t._updateTaskCount(i,1)):n===`running`&&(i._state=`scheduling`),e.call(this)}}return u??l??i}return n.apply(e,a)}),a=he(e,n,t=>function(n,r){let i=r[0],a;ye(i)?(a=o[i],delete o[i]):(a=i?.[je],a?i[je]=null:a=i),a?.type?a.cancelFn&&a.zone.cancelTask(a):t.apply(e,r)})}function Ne(e,t){let{isBrowser:n,isMix:r}=t.getGlobalObjects();(n||r)&&e.customElements&&`customElements`in e&&t.patchCallbacks(t,e.customElements,`customElements`,`define`,[`connectedCallback`,`disconnectedCallback`,`adoptedCallback`,`attributeChangedCallback`,`formAssociatedCallback`,`formDisabledCallback`,`formResetCallback`,`formStateRestoreCallback`])}function Pe(e,t){if(Zone[t.symbol(`patchEventTarget`)])return;let{eventNames:n,zoneSymbolEventNames:r,TRUE_STR:i,FALSE_STR:a,ZONE_SYMBOL_PREFIX:o}=t.getGlobalObjects();for(let e=0;et.target===e);if(r.length===0)return t;let i=r[0].ignoreProperties;return t.filter(e=>i.indexOf(e)===-1)}function Le(e,t,n,r){e&&fe(e,Ie(e,t,n),r)}function Re(e){return Object.getOwnPropertyNames(e).filter(e=>e.startsWith(`on`)&&e.length>2).map(e=>e.substring(2))}function ze(e,t){if(ae&&!se||Zone[e.symbol(`patchEvents`)])return;let n=t.__Zone_ignore_on_properties,r=[];if(oe){let e=window;r=r.concat([`Document`,`SVGElement`,`Element`,`HTMLElement`,`HTMLBodyElement`,`HTMLMediaElement`,`HTMLFrameSetElement`,`HTMLFrameElement`,`HTMLIFrameElement`,`HTMLMarqueeElement`,`Worker`]),Le(e,Re(e),n,p(e))}r=r.concat([`XMLHttpRequest`,`XMLHttpRequestEventTarget`,`IDBIndex`,`IDBRequest`,`IDBOpenDBRequest`,`IDBDatabase`,`IDBTransaction`,`IDBCursor`,`WebSocket`]);for(let e=0;e{let t=`clear`;Me(e,`set`,t,`Timeout`),Me(e,`set`,t,`Interval`),Me(e,`set`,t,`Immediate`)}),e.__load_patch(`requestAnimationFrame`,e=>{Me(e,`request`,`cancel`,`AnimationFrame`),Me(e,`mozRequest`,`mozCancel`,`AnimationFrame`),Me(e,`webkitRequest`,`webkitCancel`,`AnimationFrame`)}),e.__load_patch(`blocking`,(e,t)=>{let n=[`alert`,`prompt`,`confirm`];for(let r=0;rfunction(r,a){return t.current.run(n,e,a,i)})}}),e.__load_patch(`EventTarget`,(e,t,n)=>{Fe(e,n),Pe(e,n);let r=e.XMLHttpRequestEventTarget;r&&r.prototype&&n.patchEventTarget(e,n,[r.prototype])}),e.__load_patch(`MutationObserver`,(e,t,n)=>{me(`MutationObserver`),me(`WebKitMutationObserver`)}),e.__load_patch(`IntersectionObserver`,(e,t,n)=>{me(`IntersectionObserver`)}),e.__load_patch(`FileReader`,(e,t,n)=>{me(`FileReader`)}),e.__load_patch(`on_property`,(e,t,n)=>{ze(n,e)}),e.__load_patch(`customElements`,(e,t,n)=>{Ne(e,n)}),e.__load_patch(`XHR`,(e,t)=>{c(e);let n=w(`xhrTask`),r=w(`xhrSync`),i=w(`xhrListener`),a=w(`xhrScheduled`),o=w(`xhrURL`),s=w(`xhrErrorBeforeScheduled`);function c(e){let c=e.XMLHttpRequest;if(!c)return;let l=c.prototype;function u(e){return e[n]}let d=l[v],f=l[y];if(!d){let t=e.XMLHttpRequestEventTarget;if(t){let e=t.prototype;d=e[v],f=e[y]}}let p=`readystatechange`,m=`scheduled`;function h(e){let r=e.data,o=r.target;o[a]=!1,o[s]=!1;let c=o[i];d||(d=o[v],f=o[y]),c&&f.call(o,p,c);let l=o[i]=()=>{if(o.readyState===o.DONE){if(!r.aborted&&o[a]&&e.state===m){let n=o[t.__symbol__(`loadfalse`)];if(o.status!==0&&n&&n.length>0){let i=e.invoke;e.invoke=function(){let n=o[t.__symbol__(`loadfalse`)];for(let t=0;tfunction(e,t){return e[r]=t[2]==0,e[o]=t[1],b.apply(e,t)}),x=w(`fetchTaskAborting`),S=w(`fetchTaskScheduling`),ee=he(l,`send`,()=>function(e,n){if(t.current[S]===!0||e[r])return ee.apply(e,n);{let t={target:e,url:e[o],isPeriodic:!1,args:n,aborted:!1},r=C(`XMLHttpRequest.send`,g,t,h,_);e&&e[s]===!0&&!t.aborted&&r.state===m&&r.invoke()}}),T=he(l,`abort`,()=>function(e,n){let r=u(e);if(r&&typeof r.type==`string`){if(r.cancelFn==null||r.data&&r.data.aborted)return;r.zone.cancelTask(r)}else if(t.current[x]===!0)return T.apply(e,n)})}}),e.__load_patch(`geolocation`,e=>{e.navigator&&e.navigator.geolocation&&re(e.navigator.geolocation,[`getCurrentPosition`,`watchPosition`])}),e.__load_patch(`PromiseRejectionEvent`,(e,t)=>{function n(t){return function(n){Oe(e,t).forEach(r=>{let i=e.PromiseRejectionEvent;if(i){let e=new i(t,{promise:n.promise,reason:n.rejection});r.invoke(e)}})}}e.PromiseRejectionEvent&&(t[w(`unhandledPromiseRejectionHandler`)]=n(`unhandledrejection`),t[w(`rejectionHandledHandler`)]=n(`rejectionhandled`))}),e.__load_patch(`queueMicrotask`,(e,t,n)=>{Ae(e,n)})}function Ve(e){e.__load_patch(`ZoneAwarePromise`,(e,t,n)=>{let r=Object.getOwnPropertyDescriptor,i=Object.defineProperty;function a(e){return e&&e.toString===Object.prototype.toString?(e.constructor&&e.constructor.name||``)+`: `+JSON.stringify(e):e?e.toString():Object.prototype.toString.call(e)}let o=n.symbol,s=[],c=e[o(`DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION`)]!==!1,l=o(`Promise`),u=o(`then`);n.onUnhandledError=e=>{if(n.showUncaughtError()){let t=e&&e.rejection;t&&e.zone&&e.task?console.error(`Unhandled Promise rejection:`,t instanceof Error?t.message:t,`; Zone:`,e.zone.name,`; Task:`,e.task&&e.task.source,`; Value:`,t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=()=>{for(;s.length;){let e=s.shift();try{e.zone.runGuarded(()=>{throw e.throwOriginal?e.rejection:e})}catch(e){f(e)}}};let d=o(`unhandledPromiseRejectionHandler`);function f(e){n.onUnhandledError(e);try{let n=t[d];typeof n==`function`&&n.call(this,e)}catch{}}function p(e){return e&&typeof e.then==`function`}function m(e){return e}function h(e){return D.reject(e)}let g=o(`state`),_=o(`value`),v=o(`finally`),y=o(`parentPromiseValue`),b=o(`parentPromiseState`);function x(e,t){return n=>{try{C(e,t,n)}catch(t){C(e,!1,t)}}}let S=function(){let e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}},ee=o(`currentTaskTrace`);function C(e,r,o){let l=S();if(e===o)throw TypeError(`Promise resolved with itself`);if(e[g]===null){let u=null;try{(typeof o==`object`||typeof o==`function`)&&(u=o&&o.then)}catch(t){return l(()=>{C(e,!1,t)})(),e}if(r!==!1&&o instanceof D&&Object.hasOwn(o,g)&&Object.hasOwn(o,_)&&o[g]!==null)T(o),C(e,o[g],o[_]);else if(r!==!1&&typeof u==`function`)try{u.call(o,l(x(e,r)),l(x(e,!1)))}catch(t){l(()=>{C(e,!1,t)})()}else{e[g]=r;let l=e[_];if(e[_]=o,e[v]===v&&r===!0&&(e[g]=e[b],e[_]=e[y]),r===!1&&o instanceof Error){let e=t.currentTask&&t.currentTask.data&&t.currentTask.data.__creationTrace__;e&&i(o,ee,{configurable:!0,enumerable:!1,writable:!0,value:e})}for(let t=0;t{try{let r=e[_],i=!!n&&v===n[v];i&&(n[y]=r,n[b]=a),C(n,!0,t.run(o,void 0,i&&o!==h&&o!==m?[]:[r]))}catch(e){C(n,!1,e)}},n)}let E=function(){},ne=e.AggregateError;class D{static toString(){return`function ZoneAwarePromise() { [native code] }`}static resolve(e){return e instanceof D?e:C(new this(null),!0,e)}static reject(e){return C(new this(null),!1,e)}static withResolvers(){let e={};return e.promise=new D((t,n)=>{e.resolve=t,e.reject=n}),e}static any(e){if(!e||typeof e[Symbol.iterator]!=`function`)return Promise.reject(new ne([],`All promises were rejected`));let t=[],n=0;try{for(let r of e)n++,t.push(D.resolve(r))}catch{return Promise.reject(new ne([],`All promises were rejected`))}if(n===0)return Promise.reject(new ne([],`All promises were rejected`));let r=!1,i=[];return new D((e,a)=>{for(let o=0;o{r||(r=!0,e(t))},e=>{i.push(e),n--,n===0&&(r=!0,a(new ne(i,`All promises were rejected`)))})})}static race(e){let t,n,r=new this((e,r)=>{t=e,n=r});function i(e){t(e)}function a(e){n(e)}for(let t of e)p(t)||(t=this.resolve(t)),t.then(i,a);return r}static all(e){return D.allWithCallback(e)}static allSettled(e){return(this&&this.prototype instanceof D?this:D).allWithCallback(e,{thenCallback:e=>({status:`fulfilled`,value:e}),errorCallback:e=>({status:`rejected`,reason:e})})}static allWithCallback(e,t){let n,r,i=new this((e,t)=>{n=e,r=t}),a=2,o=0,s=[];for(let i of e){p(i)||(i=this.resolve(i));let e=o;try{i.then(r=>{s[e]=t?t.thenCallback(r):r,a--,a===0&&n(s)},i=>{t?(s[e]=t.errorCallback(i),a--,a===0&&n(s)):r(i)})}catch(e){r(e)}a++,o++}return a-=2,a===0&&n(s),i}constructor(e){let t=this;if(!(t instanceof D))throw Error(`Must be an instanceof Promise.`);t[g]=null,t[_]=[];try{let n=S();e&&e(n(x(t,!0)),n(x(t,!1)))}catch(e){C(t,!1,e)}}get[Symbol.toStringTag](){return`Promise`}get[Symbol.species](){return D}then(e,n){let r=this.constructor?.[Symbol.species];(!r||typeof r!=`function`)&&(r=this.constructor||D);let i=new r(E),a=t.current;return this[g]==null?this[_].push(a,i,e,n):te(this,a,i,e,n),i}catch(e){return this.then(null,e)}finally(e){let n=this.constructor?.[Symbol.species];(!n||typeof n!=`function`)&&(n=D);let r=new n(E);r[v]=v;let i=t.current;return this[g]==null?this[_].push(i,r,e,e):te(this,i,r,e,e),r}}D.resolve=D.resolve,D.reject=D.reject,D.race=D.race,D.all=D.all;let re=e[l]=e.Promise;e.Promise=D;let ie=o(`thenPatched`);function O(e){let t=e.prototype,n=r(t,`then`);if(n&&(n.writable===!1||!n.configurable))return;let i=t.then;t[u]=i,e.prototype.then=function(e,t){return new D((e,t)=>{i.call(this,e,t)}).then(e,t)},e[ie]=!0}n.patchThen=O;function ae(e){return function(t,n){let r=e.apply(t,n);if(r instanceof D)return r;let i=r.constructor;return i[ie]||O(i),r}}if(re){O(re);let t=re.try;t&&typeof t==`function`&&(D.try=t),he(e,`fetch`,e=>ae(e))}return Promise[t.__symbol__(`uncaughtPromiseErrors`)]=s,D})}function He(e){e.__load_patch(`toString`,e=>{let t=Function.prototype.toString,n=w(`OriginalDelegate`),r=w(`Promise`),i=w(`Error`),a=function(){if(typeof this==`function`){let a=this[n];if(a)return typeof a==`function`?t.call(a):Object.prototype.toString.call(a);if(this===Promise){let n=e[r];if(n)return t.call(n)}if(this===Error){let n=e[i];if(n)return t.call(n)}}return t.call(this)};a[n]=t,Function.prototype.toString=a;let o=Object.prototype.toString;Object.prototype.toString=function(){return typeof Promise==`function`&&this instanceof Promise?`[object Promise]`:o.call(this)}})}function Ue(e,t,n,r,i){let a=Zone.__symbol__(r);if(t[a])return;let o=t[a]=t[r];t[r]=function(a,s,c){return s&&s.prototype&&i.forEach(function(t){let i=`${n}.${r}::`+t,a=s.prototype;try{if(Object.hasOwn(a,t)){let n=e.ObjectGetOwnPropertyDescriptor(a,t);n&&n.value?(n.value=e.wrapWithCurrentZone(n.value,i),e._redefineProperty(s.prototype,t,n)):a[t]&&(a[t]=e.wrapWithCurrentZone(a[t],i))}else a[t]&&(a[t]=e.wrapWithCurrentZone(a[t],i))}catch{}}),o.call(t,a,s,c)},e.attachOriginToPatched(t[r],o)}function We(e){e.__load_patch(`util`,(e,t,n)=>{let r=Re(e);n.patchOnProperties=fe,n.patchMethod=he,n.bindArguments=D,n.patchMacroTask=ge;let i=t.__symbol__(`BLACK_LISTED_EVENTS`),a=t.__symbol__(`UNPATCHED_EVENTS`);e[a]&&(e[i]=e[a]),e[i]&&(t[i]=t[a]=e[i]),n.patchEventPrototype=ke,n.patchEventTarget=De,n.ObjectDefineProperty=f,n.ObjectGetOwnPropertyDescriptor=d,n.ObjectCreate=m,n.ArraySlice=h,n.patchClass=me,n.wrapWithCurrentZone=ee,n.filterProperties=Ie,n.attachOriginToPatched=_e,n._redefineProperty=Object.defineProperty,n.patchCallbacks=Ue,n.getGlobalObjects=()=>({globalSources:Se,zoneSymbolEventNames:xe,eventNames:r,isBrowser:oe,isMix:se,isNode:ae,TRUE_STR:b,FALSE_STR:x,ZONE_SYMBOL_PREFIX:S,ADD_EVENT_LISTENER_STR:g,REMOVE_EVENT_LISTENER_STR:_})})}function Ge(e){Ve(e),He(e),We(e)}var Ke=u();Ge(Ke),Be(Ke);var qe=(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})(qe||{}),Je=(function(e){return e[e.None=0]=`None`,e[e.Const=1]=`Const`,e})(Je||{}),Ye=class{modifiers;constructor(e=Je.None){this.modifiers=e}hasModifier(e){return(this.modifiers&e)!==0}},Xe=(function(e){return e[e.Dynamic=0]=`Dynamic`,e[e.Bool=1]=`Bool`,e[e.String=2]=`String`,e[e.Int=3]=`Int`,e[e.Number=4]=`Number`,e[e.Function=5]=`Function`,e[e.Inferred=6]=`Inferred`,e[e.None=7]=`None`,e})(Xe||{}),Ze=class extends Ye{name;constructor(e,t){super(t),this.name=e}visitType(e,t){return e.visitBuiltinType(this,t)}};Xe.Dynamic;var Qe=new Ze(Xe.Inferred);Xe.Bool,Xe.Int,Xe.Number,Xe.String,Xe.Function,Xe.None;var k=(function(e){return e[e.Equals=0]=`Equals`,e[e.NotEquals=1]=`NotEquals`,e[e.Assign=2]=`Assign`,e[e.Identical=3]=`Identical`,e[e.NotIdentical=4]=`NotIdentical`,e[e.Minus=5]=`Minus`,e[e.Plus=6]=`Plus`,e[e.Divide=7]=`Divide`,e[e.Multiply=8]=`Multiply`,e[e.Modulo=9]=`Modulo`,e[e.And=10]=`And`,e[e.Or=11]=`Or`,e[e.BitwiseOr=12]=`BitwiseOr`,e[e.BitwiseAnd=13]=`BitwiseAnd`,e[e.Lower=14]=`Lower`,e[e.LowerEquals=15]=`LowerEquals`,e[e.Bigger=16]=`Bigger`,e[e.BiggerEquals=17]=`BiggerEquals`,e[e.NullishCoalesce=18]=`NullishCoalesce`,e[e.Exponentiation=19]=`Exponentiation`,e[e.In=20]=`In`,e[e.InstanceOf=21]=`InstanceOf`,e[e.AdditionAssignment=22]=`AdditionAssignment`,e[e.SubtractionAssignment=23]=`SubtractionAssignment`,e[e.MultiplicationAssignment=24]=`MultiplicationAssignment`,e[e.DivisionAssignment=25]=`DivisionAssignment`,e[e.RemainderAssignment=26]=`RemainderAssignment`,e[e.ExponentiationAssignment=27]=`ExponentiationAssignment`,e[e.AndAssignment=28]=`AndAssignment`,e[e.OrAssignment=29]=`OrAssignment`,e[e.NullishCoalesceAssignment=30]=`NullishCoalesceAssignment`,e})(k||{});function $e(e,t){return e==null||t==null?e==t:e.isEquivalent(t)}function et(e,t,n){let r=e.length;if(r!==t.length)return!1;for(let i=0;ie.isEquivalent(t))}var nt=class{leadingComments;type;sourceSpan;constructor(e,t,n){this.leadingComments=n,this.type=e||null,this.sourceSpan=t||null}prop(e,t){return new ft(this,e,null,t)}key(e,t,n){return new pt(this,e,t,n)}callFn(e,t,n,r){return new at(this,e,null,t,n,r)}instantiate(e,t,n,r){return new ot(this,e,t,n)}conditional(e,t=null,n,r){return new ut(this,e,t,null,n)}equals(e,t){return new dt(k.Equals,this,e,null,t)}notEquals(e,t){return new dt(k.NotEquals,this,e,null,t)}identical(e,t){return new dt(k.Identical,this,e,null,t)}notIdentical(e,t){return new dt(k.NotIdentical,this,e,null,t)}minus(e,t){return new dt(k.Minus,this,e,null,t)}plus(e,t){return new dt(k.Plus,this,e,null,t)}divide(e,t){return new dt(k.Divide,this,e,null,t)}multiply(e,t){return new dt(k.Multiply,this,e,null,t)}modulo(e,t){return new dt(k.Modulo,this,e,null,t)}power(e,t){return new dt(k.Exponentiation,this,e,null,t)}and(e,t){return new dt(k.And,this,e,null,t)}bitwiseOr(e,t){return new dt(k.BitwiseOr,this,e,null,t)}bitwiseAnd(e,t){return new dt(k.BitwiseAnd,this,e,null,t)}or(e,t){return new dt(k.Or,this,e,null,t)}lower(e,t){return new dt(k.Lower,this,e,null,t)}lowerEquals(e,t){return new dt(k.LowerEquals,this,e,null,t)}bigger(e,t){return new dt(k.Bigger,this,e,null,t)}biggerEquals(e,t){return new dt(k.BiggerEquals,this,e,null,t)}isBlank(e){return this.equals(vt,e)}nullishCoalesce(e,t){return new dt(k.NullishCoalesce,this,e,null,t)}toStmt(e){return new xt(this,null,e)}},rt=class e extends nt{name;constructor(e,t,n,r){super(t,n,r),this.name=e}isEquivalent(t){return t instanceof e&&this.name===t.name}isConstant(){return!1}visitExpression(e,t){return e.visitReadVarExpr(this,t)}clone(){return new e(this.name,this.type,this.sourceSpan)}set(e){return new dt(k.Assign,this,e,null,this.sourceSpan)}},it=class e extends nt{expr;constructor(e,t,n,r){super(t,n,r),this.expr=e}visitExpression(e,t){return e.visitTypeofExpr(this,t)}isEquivalent(t){return t instanceof e&&t.expr.isEquivalent(this.expr)}isConstant(){return this.expr.isConstant()}clone(){return new e(this.expr.clone())}},at=class e extends nt{fn;args;pure;isOptional;constructor(e,t,n,r,i=!1,a,o=!1){super(n,r,a),this.fn=e,this.args=t,this.pure=i,this.isOptional=o}get receiver(){return this.fn}isEquivalent(t){return t instanceof e&&this.fn.isEquivalent(t.fn)&&tt(this.args,t.args)&&this.pure===t.pure}isConstant(){return!1}visitExpression(e,t){return e.visitInvokeFunctionExpr(this,t)}clone(){return new e(this.fn.clone(),this.args.map(e=>e.clone()),this.type,this.sourceSpan,this.pure,[],this.isOptional)}},ot=class e extends nt{classExpr;args;constructor(e,t,n,r,i){super(n,r,i),this.classExpr=e,this.args=t}isEquivalent(t){return t instanceof e&&this.classExpr.isEquivalent(t.classExpr)&&tt(this.args,t.args)}isConstant(){return!1}visitExpression(e,t){return e.visitInstantiateExpr(this,t)}clone(){return new e(this.classExpr.clone(),this.args.map(e=>e.clone()),this.type,this.sourceSpan)}},st=class e extends nt{body;flags;constructor(e,t,n,r){super(null,n,r),this.body=e,this.flags=t}isEquivalent(t){return t instanceof e&&this.body===t.body&&this.flags===t.flags}isConstant(){return!0}visitExpression(e,t){return e.visitRegularExpressionLiteral(this,t)}clone(){return new e(this.body,this.flags,this.sourceSpan)}},ct=class e extends nt{value;constructor(e,t,n,r){super(t,n,r),this.value=e}isEquivalent(t){return t instanceof e&&this.value===t.value}isConstant(){return!0}visitExpression(e,t){return e.visitLiteralExpr(this,t)}clone(){return new e(this.value,this.type,this.sourceSpan)}},lt=class e extends nt{value;typeParams;constructor(e,t,n=null,r,i){super(t,r,i),this.value=e,this.typeParams=n}isEquivalent(t){return t instanceof e&&this.value.name===t.value.name&&this.value.moduleName===t.value.moduleName}isConstant(){return!1}visitExpression(e,t){return e.visitExternalExpr(this,t)}clone(){return new e(this.value,this.type,this.typeParams,this.sourceSpan)}},ut=class e extends nt{condition;falseCase;trueCase;constructor(e,t,n=null,r,i,a){super(r||t.type,i,a),this.condition=e,this.falseCase=n,this.trueCase=t}isEquivalent(t){return t instanceof e&&this.condition.isEquivalent(t.condition)&&this.trueCase.isEquivalent(t.trueCase)&&$e(this.falseCase,t.falseCase)}isConstant(){return!1}visitExpression(e,t){return e.visitConditionalExpr(this,t)}clone(){return new e(this.condition.clone(),this.trueCase.clone(),this.falseCase?.clone(),this.type,this.sourceSpan)}},dt=class e extends nt{operator;rhs;lhs;constructor(e,t,n,r,i,a){super(r||t.type,i,a),this.operator=e,this.rhs=n,this.lhs=t}isEquivalent(t){return t instanceof e&&this.operator===t.operator&&this.lhs.isEquivalent(t.lhs)&&this.rhs.isEquivalent(t.rhs)}isConstant(){return!1}visitExpression(e,t){return e.visitBinaryOperatorExpr(this,t)}clone(){return new e(this.operator,this.lhs.clone(),this.rhs.clone(),this.type,this.sourceSpan)}isAssignment(){let e=this.operator;return e===k.Assign||e===k.AdditionAssignment||e===k.SubtractionAssignment||e===k.MultiplicationAssignment||e===k.DivisionAssignment||e===k.RemainderAssignment||e===k.ExponentiationAssignment||e===k.AndAssignment||e===k.OrAssignment||e===k.NullishCoalesceAssignment}},ft=class e extends nt{receiver;name;isOptional;constructor(e,t,n,r,i,a=!1){super(n,r,i),this.receiver=e,this.name=t,this.isOptional=a}get index(){return this.name}isEquivalent(t){return t instanceof e&&this.receiver.isEquivalent(t.receiver)&&this.name===t.name&&this.isOptional===t.isOptional}isConstant(){return!1}visitExpression(e,t){return e.visitReadPropExpr(this,t)}set(e){return new dt(k.Assign,this.receiver.prop(this.name),e,null,this.sourceSpan)}clone(){return new e(this.receiver.clone(),this.name,this.type,this.sourceSpan,[],this.isOptional)}},pt=class e extends nt{receiver;index;isOptional;constructor(e,t,n,r,i,a=!1){super(n,r,i),this.receiver=e,this.index=t,this.isOptional=a}isEquivalent(t){return t instanceof e&&this.receiver.isEquivalent(t.receiver)&&this.index.isEquivalent(t.index)&&this.isOptional===t.isOptional}isConstant(){return!1}visitExpression(e,t){return e.visitReadKeyExpr(this,t)}set(e){return new dt(k.Assign,this.receiver.key(this.index),e,null,this.sourceSpan)}clone(){return new e(this.receiver.clone(),this.index.clone(),this.type,this.sourceSpan,[],this.isOptional)}},mt=class e extends nt{entries;constructor(e,t,n,r){super(t,n,r),this.entries=e}isConstant(){return this.entries.every(e=>e.isConstant())}isEquivalent(t){return t instanceof e&&tt(this.entries,t.entries)}visitExpression(e,t){return e.visitLiteralArrayExpr(this,t)}clone(){return new e(this.entries.map(e=>e.clone()),this.type,this.sourceSpan)}},ht=class e{expression;constructor(e){this.expression=e}isEquivalent(t){return t instanceof e&&this.expression.isEquivalent(t.expression)}clone(){return new e(this.expression.clone())}isConstant(){return this.expression.isConstant()}},gt=class e extends nt{entries;valueType=null;constructor(e,t,n,r){super(t,n,r),this.entries=e,t&&(this.valueType=t.valueType)}isEquivalent(t){return t instanceof e&&tt(this.entries,t.entries)}isConstant(){return this.entries.every(e=>e.isConstant())}visitExpression(e,t){return e.visitLiteralMapExpr(this,t)}clone(){let t=this.entries.map(e=>e.clone());return new e(t,this.type,this.sourceSpan)}},_t=class e extends nt{expression;constructor(e,t,n){super(null,t,n),this.expression=e}isEquivalent(t){return t instanceof e&&this.expression.isEquivalent(t.expression)}isConstant(){return this.expression.isConstant()}visitExpression(e,t){return e.visitSpreadElementExpr(this,t)}clone(){return new e(this.expression.clone(),this.sourceSpan)}},vt=new ct(null,Qe,null),yt=(function(e){return e[e.None=0]=`None`,e[e.Final=1]=`Final`,e[e.Private=2]=`Private`,e[e.Exported=4]=`Exported`,e[e.Static=8]=`Static`,e})(yt||{}),bt=class{modifiers;sourceSpan;leadingComments;constructor(e=yt.None,t=null,n){this.modifiers=e,this.sourceSpan=t,this.leadingComments=n}hasModifier(e){return(this.modifiers&e)!==0}addLeadingComment(e){this.leadingComments=this.leadingComments??[],this.leadingComments.push(e)}},xt=class e extends bt{expr;constructor(e,t,n){super(yt.None,t,n),this.expr=e}isEquivalent(t){return t instanceof e&&this.expr.isEquivalent(t.expr)}visitStatement(e,t){return e.visitExpressionStmt(this,t)}};(class e{static INSTANCE=new e;keyOf(e){if(e instanceof ct&&typeof e.value==`string`)return`"${e.value}"`;if(e instanceof ct)return String(e.value);if(e instanceof st)return`/${e.body}/${e.flags??``}`;if(e instanceof mt){let t=[];for(let n of e.entries)t.push(this.keyOf(n));return`[${t.join(`,`)}]`}if(e instanceof gt){let t=[];for(let n of e.entries)if(n instanceof ht)t.push(`...`+this.keyOf(n.expression));else{let e=n.key;n.quoted&&(e=`"${e}"`),t.push(e+`:`+this.keyOf(n.value))}return`{${t.join(`,`)}}`}if(e instanceof lt)return`import("${e.value.moduleName}", ${e.value.name})`;if(e instanceof rt)return`read(${e.name})`;if(e instanceof it)return`typeof(${this.keyOf(e.expr)})`;if(e instanceof _t)return`...${this.keyOf(e.expression)}`;throw Error(`${this.constructor.name} does not handle expressions of type ${e.constructor.name}`)}});var A=`@angular/core`,j=(()=>{class e{static core={name:null,moduleName:A};static namespaceHTML={name:`ɵɵnamespaceHTML`,moduleName:A};static namespaceMathML={name:`ɵɵnamespaceMathML`,moduleName:A};static namespaceSVG={name:`ɵɵnamespaceSVG`,moduleName:A};static element={name:`ɵɵelement`,moduleName:A};static elementStart={name:`ɵɵelementStart`,moduleName:A};static elementEnd={name:`ɵɵelementEnd`,moduleName:A};static foreignComponent={name:`ɵɵforeignComponent`,moduleName:A};static foreignContent={name:`ɵɵforeignContent`,moduleName:A};static foreignContentFn={name:`ɵɵforeignContentFn`,moduleName:A};static domElement={name:`ɵɵdomElement`,moduleName:A};static domElementStart={name:`ɵɵdomElementStart`,moduleName:A};static domElementEnd={name:`ɵɵdomElementEnd`,moduleName:A};static domElementContainer={name:`ɵɵdomElementContainer`,moduleName:A};static domElementContainerStart={name:`ɵɵdomElementContainerStart`,moduleName:A};static domElementContainerEnd={name:`ɵɵdomElementContainerEnd`,moduleName:A};static domTemplate={name:`ɵɵdomTemplate`,moduleName:A};static domListener={name:`ɵɵdomListener`,moduleName:A};static advance={name:`ɵɵadvance`,moduleName:A};static syntheticHostProperty={name:`ɵɵsyntheticHostProperty`,moduleName:A};static syntheticHostListener={name:`ɵɵsyntheticHostListener`,moduleName:A};static attribute={name:`ɵɵattribute`,moduleName:A};static classProp={name:`ɵɵclassProp`,moduleName:A};static elementContainerStart={name:`ɵɵelementContainerStart`,moduleName:A};static elementContainerEnd={name:`ɵɵelementContainerEnd`,moduleName:A};static elementContainer={name:`ɵɵelementContainer`,moduleName:A};static styleMap={name:`ɵɵstyleMap`,moduleName:A};static classMap={name:`ɵɵclassMap`,moduleName:A};static styleProp={name:`ɵɵstyleProp`,moduleName:A};static interpolate={name:`ɵɵinterpolate`,moduleName:A};static interpolate1={name:`ɵɵinterpolate1`,moduleName:A};static interpolate2={name:`ɵɵinterpolate2`,moduleName:A};static interpolate3={name:`ɵɵinterpolate3`,moduleName:A};static interpolate4={name:`ɵɵinterpolate4`,moduleName:A};static interpolate5={name:`ɵɵinterpolate5`,moduleName:A};static interpolate6={name:`ɵɵinterpolate6`,moduleName:A};static interpolate7={name:`ɵɵinterpolate7`,moduleName:A};static interpolate8={name:`ɵɵinterpolate8`,moduleName:A};static interpolateV={name:`ɵɵinterpolateV`,moduleName:A};static nextContext={name:`ɵɵnextContext`,moduleName:A};static resetView={name:`ɵɵresetView`,moduleName:A};static templateCreate={name:`ɵɵtemplate`,moduleName:A};static defer={name:`ɵɵdefer`,moduleName:A};static deferWhen={name:`ɵɵdeferWhen`,moduleName:A};static deferOnIdle={name:`ɵɵdeferOnIdle`,moduleName:A};static deferOnImmediate={name:`ɵɵdeferOnImmediate`,moduleName:A};static deferOnTimer={name:`ɵɵdeferOnTimer`,moduleName:A};static deferOnHover={name:`ɵɵdeferOnHover`,moduleName:A};static deferOnInteraction={name:`ɵɵdeferOnInteraction`,moduleName:A};static deferOnViewport={name:`ɵɵdeferOnViewport`,moduleName:A};static deferPrefetchWhen={name:`ɵɵdeferPrefetchWhen`,moduleName:A};static deferPrefetchOnIdle={name:`ɵɵdeferPrefetchOnIdle`,moduleName:A};static deferPrefetchOnImmediate={name:`ɵɵdeferPrefetchOnImmediate`,moduleName:A};static deferPrefetchOnTimer={name:`ɵɵdeferPrefetchOnTimer`,moduleName:A};static deferPrefetchOnHover={name:`ɵɵdeferPrefetchOnHover`,moduleName:A};static deferPrefetchOnInteraction={name:`ɵɵdeferPrefetchOnInteraction`,moduleName:A};static deferPrefetchOnViewport={name:`ɵɵdeferPrefetchOnViewport`,moduleName:A};static deferHydrateWhen={name:`ɵɵdeferHydrateWhen`,moduleName:A};static deferHydrateNever={name:`ɵɵdeferHydrateNever`,moduleName:A};static deferHydrateOnIdle={name:`ɵɵdeferHydrateOnIdle`,moduleName:A};static deferHydrateOnImmediate={name:`ɵɵdeferHydrateOnImmediate`,moduleName:A};static deferHydrateOnTimer={name:`ɵɵdeferHydrateOnTimer`,moduleName:A};static deferHydrateOnHover={name:`ɵɵdeferHydrateOnHover`,moduleName:A};static deferHydrateOnInteraction={name:`ɵɵdeferHydrateOnInteraction`,moduleName:A};static deferHydrateOnViewport={name:`ɵɵdeferHydrateOnViewport`,moduleName:A};static deferEnableTimerScheduling={name:`ɵɵdeferEnableTimerScheduling`,moduleName:A};static enableIncrementalHydrationRuntime={name:`ɵɵenableIncrementalHydrationRuntime`,moduleName:A};static conditionalCreate={name:`ɵɵconditionalCreate`,moduleName:A};static conditionalBranchCreate={name:`ɵɵconditionalBranchCreate`,moduleName:A};static conditional={name:`ɵɵconditional`,moduleName:A};static repeater={name:`ɵɵrepeater`,moduleName:A};static repeaterCreate={name:`ɵɵrepeaterCreate`,moduleName:A};static repeaterTrackByIndex={name:`ɵɵrepeaterTrackByIndex`,moduleName:A};static repeaterTrackByIdentity={name:`ɵɵrepeaterTrackByIdentity`,moduleName:A};static componentInstance={name:`ɵɵcomponentInstance`,moduleName:A};static text={name:`ɵɵtext`,moduleName:A};static enableBindings={name:`ɵɵenableBindings`,moduleName:A};static disableBindings={name:`ɵɵdisableBindings`,moduleName:A};static getCurrentView={name:`ɵɵgetCurrentView`,moduleName:A};static textInterpolate={name:`ɵɵtextInterpolate`,moduleName:A};static textInterpolate1={name:`ɵɵtextInterpolate1`,moduleName:A};static textInterpolate2={name:`ɵɵtextInterpolate2`,moduleName:A};static textInterpolate3={name:`ɵɵtextInterpolate3`,moduleName:A};static textInterpolate4={name:`ɵɵtextInterpolate4`,moduleName:A};static textInterpolate5={name:`ɵɵtextInterpolate5`,moduleName:A};static textInterpolate6={name:`ɵɵtextInterpolate6`,moduleName:A};static textInterpolate7={name:`ɵɵtextInterpolate7`,moduleName:A};static textInterpolate8={name:`ɵɵtextInterpolate8`,moduleName:A};static textInterpolateV={name:`ɵɵtextInterpolateV`,moduleName:A};static restoreView={name:`ɵɵrestoreView`,moduleName:A};static pureFunction0={name:`ɵɵpureFunction0`,moduleName:A};static pureFunction1={name:`ɵɵpureFunction1`,moduleName:A};static pureFunction2={name:`ɵɵpureFunction2`,moduleName:A};static pureFunction3={name:`ɵɵpureFunction3`,moduleName:A};static pureFunction4={name:`ɵɵpureFunction4`,moduleName:A};static pureFunction5={name:`ɵɵpureFunction5`,moduleName:A};static pureFunction6={name:`ɵɵpureFunction6`,moduleName:A};static pureFunction7={name:`ɵɵpureFunction7`,moduleName:A};static pureFunction8={name:`ɵɵpureFunction8`,moduleName:A};static pureFunctionV={name:`ɵɵpureFunctionV`,moduleName:A};static pipeBind1={name:`ɵɵpipeBind1`,moduleName:A};static pipeBind2={name:`ɵɵpipeBind2`,moduleName:A};static pipeBind3={name:`ɵɵpipeBind3`,moduleName:A};static pipeBind4={name:`ɵɵpipeBind4`,moduleName:A};static pipeBindV={name:`ɵɵpipeBindV`,moduleName:A};static domProperty={name:`ɵɵdomProperty`,moduleName:A};static ariaProperty={name:`ɵɵariaProperty`,moduleName:A};static property={name:`ɵɵproperty`,moduleName:A};static control={name:`ɵɵcontrol`,moduleName:A};static controlCreate={name:`ɵɵcontrolCreate`,moduleName:A};static animationEnterListener={name:`ɵɵanimateEnterListener`,moduleName:A};static animationLeaveListener={name:`ɵɵanimateLeaveListener`,moduleName:A};static animationEnter={name:`ɵɵanimateEnter`,moduleName:A};static animationLeave={name:`ɵɵanimateLeave`,moduleName:A};static i18n={name:`ɵɵi18n`,moduleName:A};static i18nAttributes={name:`ɵɵi18nAttributes`,moduleName:A};static i18nExp={name:`ɵɵi18nExp`,moduleName:A};static i18nStart={name:`ɵɵi18nStart`,moduleName:A};static i18nEnd={name:`ɵɵi18nEnd`,moduleName:A};static i18nApply={name:`ɵɵi18nApply`,moduleName:A};static i18nPostprocess={name:`ɵɵi18nPostprocess`,moduleName:A};static pipe={name:`ɵɵpipe`,moduleName:A};static projection={name:`ɵɵprojection`,moduleName:A};static projectionDef={name:`ɵɵprojectionDef`,moduleName:A};static reference={name:`ɵɵreference`,moduleName:A};static inject={name:`ɵɵinject`,moduleName:A};static injectAttribute={name:`ɵɵinjectAttribute`,moduleName:A};static directiveInject={name:`ɵɵdirectiveInject`,moduleName:A};static invalidFactory={name:`ɵɵinvalidFactory`,moduleName:A};static invalidFactoryDep={name:`ɵɵinvalidFactoryDep`,moduleName:A};static templateRefExtractor={name:`ɵɵtemplateRefExtractor`,moduleName:A};static forwardRef={name:`forwardRef`,moduleName:A};static resolveForwardRef={name:`resolveForwardRef`,moduleName:A};static replaceMetadata={name:`ɵɵreplaceMetadata`,moduleName:A};static getReplaceMetadataURL={name:`ɵɵgetReplaceMetadataURL`,moduleName:A};static ɵɵdefineInjectable={name:`ɵɵdefineInjectable`,moduleName:A};static declareInjectable={name:`ɵɵngDeclareInjectable`,moduleName:A};static InjectableDeclaration={name:`ɵɵInjectableDeclaration`,moduleName:A};static defineService={name:`ɵɵdefineService`,moduleName:A};static declareService={name:`ɵɵngDeclareService`,moduleName:A};static resolveWindow={name:`ɵɵresolveWindow`,moduleName:A};static resolveDocument={name:`ɵɵresolveDocument`,moduleName:A};static resolveBody={name:`ɵɵresolveBody`,moduleName:A};static getComponentDepsFactory={name:`ɵɵgetComponentDepsFactory`,moduleName:A};static defineComponent={name:`ɵɵdefineComponent`,moduleName:A};static declareComponent={name:`ɵɵngDeclareComponent`,moduleName:A};static setComponentScope={name:`ɵɵsetComponentScope`,moduleName:A};static ChangeDetectionStrategy={name:`ChangeDetectionStrategy`,moduleName:A};static ViewEncapsulation={name:`ViewEncapsulation`,moduleName:A};static ComponentDeclaration={name:`ɵɵComponentDeclaration`,moduleName:A};static FactoryDeclaration={name:`ɵɵFactoryDeclaration`,moduleName:A};static declareFactory={name:`ɵɵngDeclareFactory`,moduleName:A};static FactoryTarget={name:`ɵɵFactoryTarget`,moduleName:A};static defineDirective={name:`ɵɵdefineDirective`,moduleName:A};static declareDirective={name:`ɵɵngDeclareDirective`,moduleName:A};static DirectiveDeclaration={name:`ɵɵDirectiveDeclaration`,moduleName:A};static InjectorDef={name:`ɵɵInjectorDef`,moduleName:A};static InjectorDeclaration={name:`ɵɵInjectorDeclaration`,moduleName:A};static defineInjector={name:`ɵɵdefineInjector`,moduleName:A};static declareInjector={name:`ɵɵngDeclareInjector`,moduleName:A};static NgModuleDeclaration={name:`ɵɵNgModuleDeclaration`,moduleName:A};static ModuleWithProviders={name:`ModuleWithProviders`,moduleName:A};static defineNgModule={name:`ɵɵdefineNgModule`,moduleName:A};static declareNgModule={name:`ɵɵngDeclareNgModule`,moduleName:A};static setNgModuleScope={name:`ɵɵsetNgModuleScope`,moduleName:A};static registerNgModuleType={name:`ɵɵregisterNgModuleType`,moduleName:A};static PipeDeclaration={name:`ɵɵPipeDeclaration`,moduleName:A};static definePipe={name:`ɵɵdefinePipe`,moduleName:A};static declarePipe={name:`ɵɵngDeclarePipe`,moduleName:A};static declareClassMetadata={name:`ɵɵngDeclareClassMetadata`,moduleName:A};static declareClassMetadataAsync={name:`ɵɵngDeclareClassMetadataAsync`,moduleName:A};static setClassMetadata={name:`ɵsetClassMetadata`,moduleName:A};static setClassMetadataAsync={name:`ɵsetClassMetadataAsync`,moduleName:A};static setClassDebugInfo={name:`ɵsetClassDebugInfo`,moduleName:A};static queryRefresh={name:`ɵɵqueryRefresh`,moduleName:A};static viewQuery={name:`ɵɵviewQuery`,moduleName:A};static loadQuery={name:`ɵɵloadQuery`,moduleName:A};static contentQuery={name:`ɵɵcontentQuery`,moduleName:A};static viewQuerySignal={name:`ɵɵviewQuerySignal`,moduleName:A};static contentQuerySignal={name:`ɵɵcontentQuerySignal`,moduleName:A};static queryAdvance={name:`ɵɵqueryAdvance`,moduleName:A};static twoWayProperty={name:`ɵɵtwoWayProperty`,moduleName:A};static twoWayBindingSet={name:`ɵɵtwoWayBindingSet`,moduleName:A};static twoWayListener={name:`ɵɵtwoWayListener`,moduleName:A};static declareLet={name:`ɵɵdeclareLet`,moduleName:A};static storeLet={name:`ɵɵstoreLet`,moduleName:A};static readContextLet={name:`ɵɵreadContextLet`,moduleName:A};static arrowFunction={name:`ɵɵarrowFunction`,moduleName:A};static attachSourceLocations={name:`ɵɵattachSourceLocations`,moduleName:A};static NgOnChangesFeature={name:`ɵɵNgOnChangesFeature`,moduleName:A};static ControlFeature={name:`ɵɵControlFeature`,moduleName:A};static InheritDefinitionFeature={name:`ɵɵInheritDefinitionFeature`,moduleName:A};static ProvidersFeature={name:`ɵɵProvidersFeature`,moduleName:A};static HostDirectivesFeature={name:`ɵɵHostDirectivesFeature`,moduleName:A};static ExternalStylesFeature={name:`ɵɵExternalStylesFeature`,moduleName:A};static listener={name:`ɵɵlistener`,moduleName:A};static getInheritedFactory={name:`ɵɵgetInheritedFactory`,moduleName:A};static sanitizeHtml={name:`ɵɵsanitizeHtml`,moduleName:A};static sanitizeStyle={name:`ɵɵsanitizeStyle`,moduleName:A};static validateAttribute={name:`ɵɵvalidateAttribute`,moduleName:A};static sanitizeResourceUrl={name:`ɵɵsanitizeResourceUrl`,moduleName:A};static sanitizeScript={name:`ɵɵsanitizeScript`,moduleName:A};static sanitizeUrl={name:`ɵɵsanitizeUrl`,moduleName:A};static sanitizeUrlOrResourceUrl={name:`ɵɵsanitizeUrlOrResourceUrl`,moduleName:A};static trustConstantHtml={name:`ɵɵtrustConstantHtml`,moduleName:A};static trustConstantResourceUrl={name:`ɵɵtrustConstantResourceUrl`,moduleName:A};static inputDecorator={name:`Input`,moduleName:A};static outputDecorator={name:`Output`,moduleName:A};static viewChildDecorator={name:`ViewChild`,moduleName:A};static viewChildrenDecorator={name:`ViewChildren`,moduleName:A};static contentChildDecorator={name:`ContentChild`,moduleName:A};static contentChildrenDecorator={name:`ContentChildren`,moduleName:A};static InputSignalBrandWriteType={name:`ɵINPUT_SIGNAL_BRAND_WRITE_TYPE`,moduleName:A};static UnwrapDirectiveSignalInputs={name:`ɵUnwrapDirectiveSignalInputs`,moduleName:A};static unwrapWritableSignal={name:`ɵunwrapWritableSignal`,moduleName:A};static assertType={name:`ɵassertType`,moduleName:A}}return e})();k.And,k.Bigger,k.BiggerEquals,k.BitwiseOr,k.BitwiseAnd,k.Divide,k.Assign,k.Equals,k.Identical,k.Lower,k.LowerEquals,k.Minus,k.Modulo,k.Exponentiation,k.Multiply,k.NotEquals,k.NotIdentical,k.NullishCoalesce,k.Or,k.Plus,k.In,k.InstanceOf,k.AdditionAssignment,k.SubtractionAssignment,k.MultiplicationAssignment,k.DivisionAssignment,k.RemainderAssignment,k.ExponentiationAssignment,k.AndAssignment,k.OrAssignment,k.NullishCoalesceAssignment;var St=class{span;sourceSpan;constructor(e,t){this.span=e,this.sourceSpan=t}toString(){return`AST`}},Ct=class extends St{receiver;args;argumentSpan;constructor(e,t,n,r,i){super(e,t),this.receiver=n,this.args=r,this.argumentSpan=i}visit(e,t=null){return e.visitCall(this,t)}},wt=(function(e){return e[e.Property=0]=`Property`,e[e.Attribute=1]=`Attribute`,e[e.Class=2]=`Class`,e[e.Style=3]=`Style`,e[e.LegacyAnimation=4]=`LegacyAnimation`,e[e.TwoWay=5]=`TwoWay`,e[e.Animation=6]=`Animation`,e})(wt||{}),Tt=`(:(where|is)\\()?`,Et=`-shadowcsshost`,Dt=`-shadowcsscontext`,Ot=`[^)(]*`,kt=String.raw`(?:\(${Ot}\)|${Ot})+?`,At=String.raw`(?:\(${kt}\)|${Ot})+?`,jt=String.raw`(?:\((${At})\))`;String.raw`(:nth-[-\w]+)`+jt,Et+jt+``,`${Tt}`,Dt+jt+``;var M=(function(e){return e[e.ListEnd=0]=`ListEnd`,e[e.Statement=1]=`Statement`,e[e.Variable=2]=`Variable`,e[e.ElementStart=3]=`ElementStart`,e[e.Element=4]=`Element`,e[e.ForeignComponent=5]=`ForeignComponent`,e[e.Template=6]=`Template`,e[e.ElementEnd=7]=`ElementEnd`,e[e.ContainerStart=8]=`ContainerStart`,e[e.Container=9]=`Container`,e[e.ContainerEnd=10]=`ContainerEnd`,e[e.DisableBindings=11]=`DisableBindings`,e[e.ConditionalCreate=12]=`ConditionalCreate`,e[e.ConditionalBranchCreate=13]=`ConditionalBranchCreate`,e[e.Conditional=14]=`Conditional`,e[e.EnableBindings=15]=`EnableBindings`,e[e.Text=16]=`Text`,e[e.Listener=17]=`Listener`,e[e.InterpolateText=18]=`InterpolateText`,e[e.Binding=19]=`Binding`,e[e.Property=20]=`Property`,e[e.StyleProp=21]=`StyleProp`,e[e.ClassProp=22]=`ClassProp`,e[e.StyleMap=23]=`StyleMap`,e[e.ClassMap=24]=`ClassMap`,e[e.Advance=25]=`Advance`,e[e.Pipe=26]=`Pipe`,e[e.Attribute=27]=`Attribute`,e[e.ExtractedAttribute=28]=`ExtractedAttribute`,e[e.Defer=29]=`Defer`,e[e.DeferOn=30]=`DeferOn`,e[e.DeferWhen=31]=`DeferWhen`,e[e.I18nMessage=32]=`I18nMessage`,e[e.DomProperty=33]=`DomProperty`,e[e.Namespace=34]=`Namespace`,e[e.ProjectionDef=35]=`ProjectionDef`,e[e.EnableIncrementalHydrationRuntime=36]=`EnableIncrementalHydrationRuntime`,e[e.Projection=37]=`Projection`,e[e.Content=38]=`Content`,e[e.RepeaterCreate=39]=`RepeaterCreate`,e[e.Repeater=40]=`Repeater`,e[e.TwoWayProperty=41]=`TwoWayProperty`,e[e.TwoWayListener=42]=`TwoWayListener`,e[e.DeclareLet=43]=`DeclareLet`,e[e.StoreLet=44]=`StoreLet`,e[e.I18nStart=45]=`I18nStart`,e[e.I18n=46]=`I18n`,e[e.I18nEnd=47]=`I18nEnd`,e[e.I18nExpression=48]=`I18nExpression`,e[e.I18nApply=49]=`I18nApply`,e[e.IcuStart=50]=`IcuStart`,e[e.IcuEnd=51]=`IcuEnd`,e[e.IcuPlaceholder=52]=`IcuPlaceholder`,e[e.I18nContext=53]=`I18nContext`,e[e.I18nAttributes=54]=`I18nAttributes`,e[e.SourceLocation=55]=`SourceLocation`,e[e.Animation=56]=`Animation`,e[e.AnimationString=57]=`AnimationString`,e[e.AnimationBinding=58]=`AnimationBinding`,e[e.AnimationListener=59]=`AnimationListener`,e[e.Control=60]=`Control`,e[e.ControlCreate=61]=`ControlCreate`,e})(M||{}),Mt=(function(e){return e[e.LexicalRead=0]=`LexicalRead`,e[e.Context=1]=`Context`,e[e.TrackContext=2]=`TrackContext`,e[e.ReadVariable=3]=`ReadVariable`,e[e.NextContext=4]=`NextContext`,e[e.Reference=5]=`Reference`,e[e.StoreLet=6]=`StoreLet`,e[e.ContextLetReference=7]=`ContextLetReference`,e[e.GetCurrentView=8]=`GetCurrentView`,e[e.RestoreView=9]=`RestoreView`,e[e.ResetView=10]=`ResetView`,e[e.PureFunctionExpr=11]=`PureFunctionExpr`,e[e.PureFunctionParameterExpr=12]=`PureFunctionParameterExpr`,e[e.PipeBinding=13]=`PipeBinding`,e[e.PipeBindingVariadic=14]=`PipeBindingVariadic`,e[e.SafePropertyRead=15]=`SafePropertyRead`,e[e.SafeKeyedRead=16]=`SafeKeyedRead`,e[e.SafeNavigationMigration=17]=`SafeNavigationMigration`,e[e.SafeTernaryExpr=18]=`SafeTernaryExpr`,e[e.EmptyExpr=19]=`EmptyExpr`,e[e.AssignTemporaryExpr=20]=`AssignTemporaryExpr`,e[e.ReadTemporaryExpr=21]=`ReadTemporaryExpr`,e[e.SlotLiteralExpr=22]=`SlotLiteralExpr`,e[e.ConditionalCase=23]=`ConditionalCase`,e[e.ConstCollected=24]=`ConstCollected`,e[e.TwoWayBindingSet=25]=`TwoWayBindingSet`,e[e.ForeignContent=26]=`ForeignContent`,e[e.ArrowFunction=27]=`ArrowFunction`,e})(Mt||{}),Nt=(function(e){return e[e.None=0]=`None`,e[e.AlwaysInline=1]=`AlwaysInline`,e})(Nt||{}),Pt=(function(e){return e[e.Context=0]=`Context`,e[e.Identifier=1]=`Identifier`,e[e.SavedView=2]=`SavedView`,e[e.Alias=3]=`Alias`,e})(Pt||{}),Ft=(function(e){return e[e.Attribute=0]=`Attribute`,e[e.ClassName=1]=`ClassName`,e[e.StyleProperty=2]=`StyleProperty`,e[e.Property=3]=`Property`,e[e.Template=4]=`Template`,e[e.I18n=5]=`I18n`,e[e.LegacyAnimation=6]=`LegacyAnimation`,e[e.TwoWayProperty=7]=`TwoWayProperty`,e[e.Animation=8]=`Animation`,e})(Ft||{}),It=(function(e){return e[e.Creation=0]=`Creation`,e[e.Postproccessing=1]=`Postproccessing`,e})(It||{}),Lt=(function(e){return e[e.I18nText=0]=`I18nText`,e[e.I18nAttribute=1]=`I18nAttribute`,e})(Lt||{}),Rt=(function(e){return e[e.None=0]=`None`,e[e.ElementTag=1]=`ElementTag`,e[e.TemplateTag=2]=`TemplateTag`,e[e.OpenTag=4]=`OpenTag`,e[e.CloseTag=8]=`CloseTag`,e[e.ExpressionIndex=16]=`ExpressionIndex`,e})(Rt||{}),zt=(function(e){return e[e.HTML=0]=`HTML`,e[e.SVG=1]=`SVG`,e[e.Math=2]=`Math`,e})(zt||{}),Bt=(function(e){return e[e.Idle=0]=`Idle`,e[e.Immediate=1]=`Immediate`,e[e.Timer=2]=`Timer`,e[e.Hover=3]=`Hover`,e[e.Interaction=4]=`Interaction`,e[e.Viewport=5]=`Viewport`,e[e.Never=6]=`Never`,e})(Bt||{}),Vt=(function(e){return e[e.RootI18n=0]=`RootI18n`,e[e.Icu=1]=`Icu`,e[e.Attr=2]=`Attr`,e})(Vt||{}),Ht=(function(e){return e[e.NgTemplate=0]=`NgTemplate`,e[e.Structural=1]=`Structural`,e[e.Block=2]=`Block`,e})(Ht||{}),Ut=(function(e){return e[e.None=0]=`None`,e[e.InChildOperation=1]=`InChildOperation`,e[e.InArrowFunctionOperation=2]=`InArrowFunctionOperation`,e[e.InSafeNavigationMigration=4]=`InSafeNavigationMigration`,e})(Ut||{});M.Element,M.ElementStart,M.Container,M.ContainerStart,M.Template,M.RepeaterCreate,M.ConditionalCreate,M.ConditionalBranchCreate;var N=(function(e){return e[e.Tmpl=0]=`Tmpl`,e[e.Host=1]=`Host`,e[e.Both=2]=`Both`,e})(N||{}),Wt=(function(e){return e[e.Full=0]=`Full`,e[e.DomOnly=1]=`DomOnly`,e})(Wt||{});j.ariaProperty,j.ariaProperty,j.attribute,j.attribute,j.classProp,j.classProp,j.element,j.element,j.elementContainer,j.elementContainer,j.elementContainerEnd,j.elementContainerEnd,j.elementContainerStart,j.elementContainerStart,j.elementEnd,j.elementEnd,j.elementStart,j.elementStart,j.domProperty,j.domProperty,j.i18nExp,j.i18nExp,j.listener,j.listener,j.listener,j.listener,j.property,j.property,j.styleProp,j.styleProp,j.syntheticHostListener,j.syntheticHostListener,j.syntheticHostProperty,j.syntheticHostProperty,j.templateCreate,j.templateCreate,j.twoWayProperty,j.twoWayProperty,j.twoWayListener,j.twoWayListener,j.declareLet,j.declareLet,j.conditionalCreate,j.conditionalBranchCreate,j.conditionalBranchCreate,j.conditionalBranchCreate,j.domElement,j.domElement,j.domElementStart,j.domElementStart,j.domElementEnd,j.domElementEnd,j.domElementContainer,j.domElementContainer,j.domElementContainerStart,j.domElementContainerStart,j.domElementContainerEnd,j.domElementContainerEnd,j.domListener,j.domListener,j.domTemplate,j.domTemplate,j.animationEnter,j.animationEnter,j.animationLeave,j.animationLeave,j.animationEnterListener,j.animationEnterListener,j.animationLeaveListener,j.animationLeaveListener,k.And,k.Bigger,k.BiggerEquals,k.BitwiseOr,k.BitwiseAnd,k.Divide,k.Assign,k.Equals,k.Identical,k.Lower,k.LowerEquals,k.Minus,k.Modulo,k.Exponentiation,k.Multiply,k.NotEquals,k.NotIdentical,k.NullishCoalesce,k.Or,k.Plus,k.In,k.InstanceOf,k.AdditionAssignment,k.SubtractionAssignment,k.MultiplicationAssignment,k.DivisionAssignment,k.RemainderAssignment,k.ExponentiationAssignment,k.AndAssignment,k.OrAssignment,k.NullishCoalesceAssignment,M.Property,M.Property,M.Property,M.Attribute,M.Attribute,M.Property,M.TwoWayProperty,M.Container,M.ContainerStart,M.ContainerEnd,M.Element,M.ElementStart,M.ElementEnd,M.Template,M.ElementEnd,M.ElementStart,M.Element,M.ContainerEnd,M.ContainerStart,M.Container,M.I18nEnd,M.I18nStart,M.I18n,M.Pipe;var Gt=` \f +\r \v ᠎ - \u2028\u2029   `;`${Gt}`,`${Gt}`;var Kt=(function(e){return e[e.Character=0]=`Character`,e[e.Identifier=1]=`Identifier`,e[e.PrivateIdentifier=2]=`PrivateIdentifier`,e[e.Keyword=3]=`Keyword`,e[e.String=4]=`String`,e[e.Operator=5]=`Operator`,e[e.Number=6]=`Number`,e[e.RegExpBody=7]=`RegExpBody`,e[e.RegExpFlags=8]=`RegExpFlags`,e[e.Error=9]=`Error`,e})(Kt||{}),qt=(function(e){return e[e.Plain=0]=`Plain`,e[e.TemplateLiteralPart=1]=`TemplateLiteralPart`,e[e.TemplateLiteralEnd=2]=`TemplateLiteralEnd`,e})(qt||{});Kt.Character,M.StyleMap,M.ClassMap,M.StyleProp,M.ClassProp,M.Attribute,M.Property,M.Attribute,M.Control,M.DomProperty,M.DomProperty,M.Attribute,M.StyleMap,M.ClassMap,M.StyleProp,M.ClassProp,M.Listener,M.TwoWayListener,M.AnimationListener,M.StyleMap,M.ClassMap,M.StyleProp,M.ClassProp,M.Property,M.TwoWayProperty,M.DomProperty,M.Attribute,M.Animation,M.Control,Bt.Idle,j.deferOnIdle,j.deferPrefetchOnIdle,j.deferHydrateOnIdle,Bt.Immediate,j.deferOnImmediate,j.deferPrefetchOnImmediate,j.deferHydrateOnImmediate,Bt.Timer,j.deferOnTimer,j.deferPrefetchOnTimer,j.deferHydrateOnTimer,Bt.Hover,j.deferOnHover,j.deferPrefetchOnHover,j.deferHydrateOnHover,Bt.Interaction,j.deferOnInteraction,j.deferPrefetchOnInteraction,j.deferHydrateOnInteraction,Bt.Viewport,j.deferOnViewport,j.deferPrefetchOnViewport,j.deferHydrateOnViewport,Bt.Never,j.deferHydrateNever,j.deferHydrateNever,j.deferHydrateNever,j.pipeBind1,j.pipeBind2,j.pipeBind3,j.pipeBind4,j.textInterpolate,j.textInterpolate1,j.textInterpolate2,j.textInterpolate3,j.textInterpolate4,j.textInterpolate5,j.textInterpolate6,j.textInterpolate7,j.textInterpolate8,j.textInterpolateV,j.interpolate,j.interpolate1,j.interpolate2,j.interpolate3,j.interpolate4,j.interpolate5,j.interpolate6,j.interpolate7,j.interpolate8,j.interpolateV,j.pureFunction0,j.pureFunction1,j.pureFunction2,j.pureFunction3,j.pureFunction4,j.pureFunction5,j.pureFunction6,j.pureFunction7,j.pureFunction8,j.pureFunctionV,j.resolveWindow,j.resolveDocument,j.resolveBody,qe.HTML,j.sanitizeHtml,qe.RESOURCE_URL,j.sanitizeResourceUrl,qe.SCRIPT,j.sanitizeScript,qe.STYLE,j.sanitizeStyle,qe.URL,j.sanitizeUrl,qe.ATTRIBUTE_NO_BINDING,j.validateAttribute,qe.HTML,j.trustConstantHtml,qe.RESOURCE_URL,j.trustConstantResourceUrl;var Jt=(function(e){return e[e.None=0]=`None`,e[e.ViewContextRead=1]=`ViewContextRead`,e[e.ViewContextWrite=2]=`ViewContextWrite`,e[e.SideEffectful=4]=`SideEffectful`,e})(Jt||{});N.Tmpl,N.Tmpl,N.Both,N.Host,N.Tmpl,N.Tmpl,N.Tmpl,N.Both,N.Both,N.Both,N.Tmpl,N.Both,N.Both,N.Tmpl,N.Both,N.Tmpl,N.Both,N.Both,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Both,N.Both,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Both,N.Both,N.Both,N.Tmpl,N.Tmpl,N.Both,N.Tmpl,N.Tmpl,N.Tmpl,N.Both,N.Both,N.Tmpl,N.Both,N.Both,N.Both,N.Both,N.Both,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Both,N.Tmpl,N.Both,N.Tmpl,N.Both,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Both,N.Both,N.Both,wt.Property,Ft.Property,wt.TwoWay,Ft.TwoWayProperty,wt.Attribute,Ft.Attribute,wt.Class,Ft.ClassName,wt.Style,Ft.StyleProperty,wt.LegacyAnimation,Ft.LegacyAnimation,wt.Animation,Ft.Animation;var Yt=`%COMP%`;`${Yt}`,`${Yt}`,class e{static SINGLETON=new e;static veWillInferAnyFor(t){let n=e.SINGLETON;return t instanceof Ct?t.visit(n):t.receiver.visit(n)}visitUnary(e){return e.expr.visit(this)}visitBinary(e){return e.left.visit(this)||e.right.visit(this)}visitChain(){return!1}visitConditional(e){return e.condition.visit(this)||e.trueExp.visit(this)||e.falseExp.visit(this)}visitCall(){return!0}visitSafeCall(){return!1}visitImplicitReceiver(){return!1}visitThisReceiver(){return!1}visitInterpolation(e){return e.expressions.some(e=>e.visit(this))}visitKeyedRead(){return!1}visitLiteralArray(){return!0}visitLiteralMap(){return!0}visitLiteralPrimitive(){return!1}visitPipe(){return!0}visitPrefixNot(e){return e.expression.visit(this)}visitTypeofExpression(e){return e.expression.visit(this)}visitVoidExpression(e){return e.expression.visit(this)}visitNonNullAssert(e){return e.expression.visit(this)}visitPropertyRead(){return!1}visitSafePropertyRead(){return!1}visitSafeKeyedRead(){return!1}visitTemplateLiteral(){return!1}visitTemplateLiteralElement(){return!1}visitTaggedTemplateLiteral(){return!1}visitParenthesizedExpression(e){return e.expression.visit(this)}visitRegularExpressionLiteral(){return!1}visitSpreadElement(e){return e.expression.visit(this)}visitArrowFunction(e,t){return!1}};var Xt=null,Zt=!1,Qt=1,$t=null,en=Symbol(`SIGNAL`);function P(e){let t=Xt;return Xt=e,t}function tn(){return Xt}var nn={version:0,lastCleanEpoch:0,dirty:!1,producers:void 0,producersTail:void 0,consumers:void 0,consumersTail:void 0,recomputing:!1,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,kind:`unknown`,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function rn(e){if(Zt)throw Error(``);if(Xt===null)return;Xt.consumerOnSignalRead(e);let t=Xt.producersTail;if(t!==void 0&&t.producer===e)return;let n,r=Xt.recomputing;if(r&&(n=t===void 0?Xt.producers:t.nextProducer,n!==void 0&&n.producer===e)){Xt.producersTail=n,n.lastReadVersion=e.version,n.knownValidAtEpoch=Qt;return}let i=e.consumersTail;if(i!==void 0&&i.consumer===Xt&&(!r||i.knownValidAtEpoch===Qt))return;let a=yn(Xt),o={producer:e,consumer:Xt,nextProducer:n,prevConsumer:void 0,knownValidAtEpoch:Qt,lastReadVersion:e.version,nextConsumer:void 0};Xt.producersTail=o,t===void 0?Xt.producers=o:t.nextProducer=o,a&&_n(e,o)}function an(){Qt++}function on(e){if((!yn(e)||e.dirty)&&(e.dirty||e.lastCleanEpoch!==Qt)){if(!e.producerMustRecompute(e)&&!hn(e)){un(e);return}e.producerRecomputeValue(e),un(e)}}function sn(e){if(e.consumers===void 0)return;let t=Zt;Zt=!0;try{for(let t=e.consumers;t!==void 0;t=t.nextConsumer){let e=t.consumer;e.dirty||ln(e)}}finally{Zt=t}}function cn(){return Xt?.consumerAllowSignalWrites!==!1}function ln(e){e.dirty=!0,sn(e),e.consumerMarkedDirty?.(e)}function un(e){e.dirty=!1,e.lastCleanEpoch=Qt}function dn(e){return e&&fn(e),P(e)}function fn(e){if(e.producersTail?.knownValidAtEpoch===Qt){let t=e.producers;for(;t!==void 0;)t.knownValidAtEpoch=null,t=t.nextProducer}e.producersTail=void 0,e.recomputing=!0}function pn(e,t){P(t),e&&mn(e)}function mn(e){e.recomputing=!1;let t=e.producersTail,n=t===void 0?e.producers:t.nextProducer;if(n!==void 0){if(yn(e))do n=vn(n);while(n!==void 0);t===void 0?e.producers=void 0:t.nextProducer=void 0}}function hn(e){for(let t=e.producers;t!==void 0;t=t.nextProducer){let e=t.producer,n=t.lastReadVersion;if(n!==e.version||(on(e),n!==e.version))return!0}return!1}function gn(e){if(yn(e)){let t=e.producers;for(;t!==void 0;)t=vn(t)}e.producers=void 0,e.producersTail=void 0,e.consumers=void 0,e.consumersTail=void 0}function _n(e,t){let n=e.consumersTail,r=yn(e);if(n===void 0?(t.nextConsumer=void 0,e.consumers=t):(t.nextConsumer=n.nextConsumer,n.nextConsumer=t),t.prevConsumer=n,e.consumersTail=t,!r)for(let t=e.producers;t!==void 0;t=t.nextProducer)_n(t.producer,t)}function vn(e){let t=e.producer,n=e.nextProducer,r=e.nextConsumer,i=e.prevConsumer;if(e.nextConsumer=void 0,e.prevConsumer=void 0,r===void 0?t.consumersTail=i:r.prevConsumer=i,i!==void 0)i.nextConsumer=r;else if(t.consumers=r,!yn(t)){let e=t.producers;for(;e!==void 0;)e=vn(e)}return n}function yn(e){return e.consumerIsAlwaysLive||e.consumers!==void 0}function bn(e){$t?.(e)}function xn(e,t){return Object.is(e,t)}function Sn(e,t){let n=Object.create(En);n.computation=e,t!==void 0&&(n.equal=t);let r=()=>{if(on(n),rn(n),n.value===Tn)throw n.error;return n.value};return r[en]=n,bn(n),r}var Cn=Symbol(`UNSET`),wn=Symbol(`COMPUTING`),Tn=Symbol(`ERRORED`),En={...nn,value:Cn,dirty:!0,error:null,equal:xn,kind:`computed`,producerMustRecompute(e){return e.value===Cn||e.value===wn},producerRecomputeValue(e){if(e.value===wn)throw Error(``);let t=e.value;e.value=wn;let n=dn(e),r,i=!1;try{r=e.computation(),P(null),i=t!==Cn&&t!==Tn&&r!==Tn&&e.equal(t,r)}catch(t){r=Tn,e.error=t}finally{pn(e,n)}if(i){e.value=t;return}e.value=r,e.version++}};function Dn(){throw Error()}var On=Dn;function kn(e){On(e)}function An(e){On=e}var jn=null;function Mn(e,t){let n=Object.create(In);n.value=e,t!==void 0&&(n.equal=t);let r=()=>Nn(n);return r[en]=n,bn(n),[r,e=>Pn(n,e),e=>Fn(n,e)]}function Nn(e){return rn(e),e.value}function Pn(e,t){cn()||kn(e),e.equal(e.value,t)||(e.value=t,Ln(e))}function Fn(e,t){cn()||kn(e),Pn(e,t(e.value))}var In={...nn,equal:xn,value:void 0,kind:`signal`};function Ln(e){e.version++,an(),sn(e),jn?.(e)}var Rn={...nn,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,kind:`effect`};function zn(e){if(e.dirty=!1,e.version>0&&!hn(e))return;e.version++;let t=dn(e);try{e.cleanup(),e.fn()}finally{pn(e,t)}}var Bn=void 0;function Vn(){return Bn}function Hn(e){let t=Bn;return Bn=e,t}var Un=Symbol(`NotFound`);function Wn(e){return e===Un||e?.name===`ɵNotFound`}var Gn=function(e,t){return Gn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},Gn(e,t)};function Kn(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Class extends value `+String(t)+` is not a constructor or null`);Gn(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function qn(e){var t=typeof Symbol==`function`&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length==`number`)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?`Object is not iterable.`:`Symbol.iterator is not defined.`)}function Jn(e,t){var n=typeof Symbol==`function`&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-->0)&&!(i=r.next()).done;)a.push(i.value)}catch(e){o={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a}function Yn(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(t){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,t)},t.prototype._subscribe=function(e){return this._throwIfClosed(),this._checkFinalizedStatuses(e),this._innerSubscribe(e)},t.prototype._innerSubscribe=function(e){var t=this,n=this,r=n.hasError,i=n.isStopped,a=n.observers;return r||i?tr:(this.currentObservers=null,a.push(e),new er(function(){t.currentObservers=null,$n(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 Dr;return e.source=this,e},t.create=function(e,t){return new Lr(e,t)},t}(Dr),Lr=function(e){Kn(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)??tr},t}(Ir),Rr=function(e){Kn(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}(Ir);function zr(e,t){return Mr(function(n,r){var i=0;n.subscribe(Nr(r,function(n){r.next(e.call(t,n,i++))}))})}var Br=`https://angular.dev/best-practices/security#preventing-cross-site-scripting-xss`,F=class extends Error{code;constructor(e,t){super(Hr(e,t)),this.code=e}};function Vr(e){return`NG0${Math.abs(e)}`}function Hr(e,t){return`${Vr(e)}${t?`: `+t:``}`}function I(e){for(let t in e)if(e[t]===I)return t;throw Error(``)}function Ur(e){if(typeof e==`string`)return e;if(Array.isArray(e))return`[${e.map(Ur).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 Wr(e,t){return e?t?`${e} ${t}`:e:t||``}var Gr=I({__forward_ref__:I});function Kr(e){return e.__forward_ref__=Kr,e}function qr(e){return Jr(e)?e():e}function Jr(e){return typeof e==`function`&&Object.hasOwn(e,Gr)&&e.__forward_ref__===Kr}function Yr(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Xr(e){return Zr(e,ei)}function Zr(e,t){return Object.hasOwn(e,t)&&e[t]||null}function Qr(e){return(e?.[ei]??null)||null}function $r(e){return e&&Object.hasOwn(e,ti)?e[ti]:null}var ei=I({ɵprov:I}),ti=I({ɵinj:I}),L=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=Yr({token:this,providedIn:t.providedIn||`root`,factory:t.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function ni(e){return e&&!!e.ɵproviders}var ri=I({ɵcmp:I}),ii=I({ɵdir:I}),ai=I({ɵpipe:I}),oi=I({ɵfac:I}),si=I({__NG_ELEMENT_ID__:I}),ci=I({__NG_ENV_ID__:I});function li(e){return fi(e,`@Component`),e[ri]||null}function ui(e){return fi(e,`@Directive`),e[ii]||null}function di(e){return fi(e,`@Pipe`),e[ai]||null}function fi(e,t){if(e==null)throw new F(-919,!1)}function pi(e){return typeof e==`string`?e:e==null?``:String(e)}var mi=I({ngErrorCode:I}),hi=I({ngErrorMessage:I}),gi=I({ngTokenPath:I});function _i(e,t){return yi(``,-200,t)}function vi(e,t){throw new F(-201,!1)}function yi(e,t,n){let r=new F(t,e);return r[mi]=t,r[hi]=e,n&&(r[gi]=n),r}function bi(e){return e[mi]}var xi;function Si(){return xi}function Ci(e){let t=xi;return xi=e,t}function wi(e,t,n){let r=Xr(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;vi(e,``)}var Ti={},Ei=`__NG_DI_FLAG__`,Di=class{injector;constructor(e){this.injector=e}retrieve(e,t){let n=ki(t)||0;try{return this.injector.get(e,n&8?null:Ti,n)}catch(e){if(Wn(e))return e;throw e}}};function Oi(e,t=0){let n=Vn();if(n===void 0)throw new F(-203,!1);if(n===null)return wi(e,void 0,t);{let r=Ai(t),i=n.retrieve(e,r);if(Wn(i)){if(r.optional)return null;throw i}return i}}function R(e,t=0){return(Si()||Oi)(qr(e),t)}function z(e,t){return R(e,ki(t))}function ki(e){return e===void 0||typeof e==`number`?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Ai(e){return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)}}function ji(e){let t=[];for(let n=0;nArray.isArray(e)?Pi(e,t):t(e))}function Fi(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function Ii(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function Li(e,t,n,r){let i=e.length;if(i==t)e.push(n,r);else if(i===1)e.push(r,e[0]),e[0]=n;else{for(i--,e.push(e[i-1],e[i]);i>t;){let t=i-2;e[i]=e[t],i--}e[t]=n,e[t+1]=r}}function Ri(e,t,n){let r=Bi(e,t);return r>=0?e[r|1]=n:(r=~r,Li(e,r,t,n)),r}function zi(e,t){let n=Bi(e,t);if(n>=0)return e[n|1]}function Bi(e,t){return Vi(e,t,1)}function Vi(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 Pi(t,e=>{let t=e;Zi(t,a,[],r)&&(i||=[],i.push(t))}),i!==void 0&&Xi(i,a),n}function Xi(e,t){for(let n=0;n{t(e,r)})}}function Zi(e,t,n,r){if(e=qr(e),!e)return!1;let i=null,a=$r(e),o=!a&&li(e);if(!a&&!o){let t=e.ngModule;if(a=$r(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)Zi(i,t,n,r)}}else if(a){if(a.imports!=null&&!s){r.add(i);let e;try{Pi(a.imports,i=>{Zi(i,t,n,r)&&(e||=[],e.push(i))})}finally{}e!==void 0&&Xi(e,t)}if(!s){let e=Ni(i)||(()=>new i);t({provide:i,useFactory:e,deps:Ui},i),t({provide:Ki,useValue:i,multi:!0},i),t({provide:Wi,useValue:()=>R(i),multi:!0},i)}let o=a.providers;if(o!=null&&!s){let n=e;Qi(o,e=>{t(e,n)})}}else return!1;return i!==e&&e.providers!==void 0}function Qi(e,t){for(let n of e)ni(n)&&(n=n.ɵproviders),Array.isArray(n)?Qi(n,t):t(n)}var $i=I({provide:String,useValue:I});function ea(e){return typeof e==`object`&&!!e&&$i in e}function ta(e){return!!(e&&e.useExisting)}function na(e){return!!(e&&e.useFactory)}function ra(e){return typeof e==`function`}var ia=new L(``),aa={},oa={},sa=void 0;function ca(){return sa===void 0&&(sa=new qi),sa}var la=class{},ua=class extends la{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,ba(e,e=>this.processProvider(e)),this.records.set(Gi,ga(void 0,this)),r.has(`environment`)&&this.records.set(la,ga(void 0,this));let i=this.records.get(ia);i!=null&&typeof i.value==`string`&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(Ki,Ui,{self:!0}))}retrieve(e,t){let n=ki(t)||0;try{return this.get(e,Ti,n)}catch(e){if(Wn(e))return e;throw e}}destroy(){ha(this),this._destroyed=!0;let e=P(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(),P(e)}}onDestroy(e){return ha(this),this._onDestroyHooks.push(e),()=>this.removeOnDestroy(e)}runInContext(e){ha(this);let t=Hn(this),n=Ci(void 0);try{return e()}finally{Hn(t),Ci(n)}}get(e,t=Ti,n){if(ha(this),Object.hasOwn(e,ci))return e[ci](this);let r=ki(n),i=Hn(this),a=Ci(void 0);try{if(!(r&4)){let t=this.records.get(e);if(t===void 0){let n=ya(e)&&Xr(e);t=n&&this.injectableDefInScope(n)?ga(da(e),aa):null,this.records.set(e,t)}if(t!=null)return this.hydrate(e,t,r)}let n=r&2?ca():this.parent;return t=r&8&&t===Ti?null:t,n.get(e,t)}catch(e){let t=bi(e);throw t===-200||t===-201?new F(t,null):e}finally{Ci(a),Hn(i)}}resolveInjectorInitializers(){let e=P(null),t=Hn(this),n=Ci(void 0);try{let e=this.get(Wi,Ui,{self:!0});for(let t of e)t()}finally{Hn(t),Ci(n),P(e)}}toString(){return`R3Injector[...]`}processProvider(e){e=qr(e);let t=ra(e)?e:qr(e&&e.provide),n=pa(e);if(!ra(e)&&e.multi===!0){let n=this.records.get(t);n||(n=ga(void 0,aa,!0),n.factory=()=>ji(n.multi),this.records.set(t,n)),t=e,n.multi.push(e)}this.records.set(t,n)}hydrate(e,t,n){let r=P(null);try{if(t.value===oa)throw _i(``);return t.value===aa&&(t.value=oa,t.value=t.factory(void 0,n)),typeof t.value==`object`&&t.value&&va(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}finally{P(r)}}injectableDefInScope(e){if(!e.providedIn)return!1;let t=qr(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 da(e){let t=Xr(e),n=t===null?Ni(e):t.factory;if(n!==null)return n;if(e instanceof L)throw new F(-204,!1);if(e instanceof Function)return fa(e);throw new F(-204,!1)}function fa(e){if(e.length>0)throw new F(-204,!1);let t=Qr(e);return t===null?()=>new e:()=>t.factory(e)}function pa(e){return ea(e)?ga(void 0,e.useValue):ga(ma(e),aa)}function ma(e,t,n){let r;if(ra(e)){let t=qr(e);return Ni(t)||da(t)}if(ea(e))r=()=>qr(e.useValue);else if(na(e))r=()=>e.useFactory(...ji(e.deps||[]));else if(ta(e))r=(t,n)=>R(qr(e.useExisting),n!==void 0&&n&8?8:void 0);else{let t=qr(e&&(e.useClass||e.provide));if(_a(e))r=()=>new t(...ji(e.deps));else return Ni(t)||da(t)}return r}function ha(e){if(e.destroyed)throw new F(-205,!1)}function ga(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function _a(e){return!!e.deps}function va(e){return typeof e==`object`&&!!e&&typeof e.ngOnDestroy==`function`}function ya(e){return typeof e==`function`||typeof e==`object`&&e.ngMetadataName===`InjectionToken`}function ba(e,t){for(let n of e)Array.isArray(n)?ba(n,t):n&&ni(n)?ba(n.ɵproviders,t):t(n)}function xa(e,t){let n;e instanceof ua?(ha(e),n=e):n=new Di(e);let r=Hn(n),i=Ci(void 0);try{return t()}finally{Hn(r),Ci(i)}}function Sa(){return Si()!==void 0||Vn()!=null}var Ca=1;function wa(e){return Array.isArray(e)&&typeof e[Ca]==`object`}function Ta(e){return Array.isArray(e)&&e[Ca]===!0}function Ea(e){return!!(e.flags&4)}function Da(e){return e.componentOffset>-1}function Oa(e){return(e.flags&1)==1}function ka(e){return!!e.template}function Aa(e){return!!(e[2]&512)}function ja(e){return(e[2]&256)==256}var Ma=`math`;function Na(e){for(;Array.isArray(e);)e=e[0];return e}function Pa(e,t){return Na(t[e])}function Fa(e,t){return Na(t[e.index])}function Ia(e,t){return e.data[t]}function La(e,t){return e[t]}function Ra(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}function za(e,t){let n=t[e];return wa(n)?n:n[0]}function Ba(e){return(e[2]&128)==128}function Va(e,t){return t==null?null:e[t]}function Ha(e){e[17]=0}function Ua(e){e[2]&1024||(e[2]|=1024,Ba(e)&&qa(e))}function Wa(e,t){for(;e>0;)t=t[14],e--;return t}function Ga(e){return!!(e[2]&9216||e[24]?.dirty)}function Ka(e){e[10].changeDetectionScheduler?.notify(8),e[2]&64&&(e[2]|=1024),Ga(e)&&qa(e)}function qa(e){e[10].changeDetectionScheduler?.notify(0);let t=Xa(e);for(;t!==null&&!(t[2]&8192||(t[2]|=8192,!Ba(t)));)t=Xa(t)}function Ja(e,t){if(ja(e))throw new F(911,!1);e[21]===null&&(e[21]=[]),e[21].push(t)}function Ya(e,t){if(e[21]===null)return;let n=e[21].indexOf(t);n!==-1&&e[21].splice(n,1)}function Xa(e){let t=e[3];return Ta(t)?t[3]:t}function Za(e){return e[7]??=[]}function Qa(e){return e.cleanup??=[]}var B={lFrame:Po(null),bindingsEnabled:!0,skipHydrationRootTNode:null},$a=!1;function eo(){return B.lFrame.elementDepthCount}function to(){B.lFrame.elementDepthCount++}function no(){B.lFrame.elementDepthCount--}function ro(){return B.bindingsEnabled}function io(){return B.skipHydrationRootTNode!==null}function ao(e){return B.skipHydrationRootTNode===e}function oo(){B.skipHydrationRootTNode=null}function V(){return B.lFrame.lView}function so(){return B.lFrame.tView}function co(e){return B.lFrame.contextLView=e,e[8]}function lo(e){return B.lFrame.contextLView=null,e}function uo(){let e=fo();for(;e!==null&&e.type===64;)e=e.parent;return e}function fo(){return B.lFrame.currentTNode}function po(){let e=B.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}function mo(e,t){let n=B.lFrame;n.currentTNode=e,n.isParent=t}function ho(){return B.lFrame.isParent}function go(){B.lFrame.isParent=!1}function _o(){return $a}function vo(e){let t=$a;return $a=e,t}function yo(){let e=B.lFrame,t=e.bindingRootIndex;return t===-1&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function bo(){return B.lFrame.bindingIndex}function xo(e){return B.lFrame.bindingIndex=e}function So(){return B.lFrame.bindingIndex++}function Co(e){let t=B.lFrame,n=t.bindingIndex;return t.bindingIndex+=e,n}function wo(){return B.lFrame.inI18n}function To(e,t){let n=B.lFrame;n.bindingIndex=n.bindingRootIndex=e,Do(t)}function Eo(){return B.lFrame.currentDirectiveIndex}function Do(e){B.lFrame.currentDirectiveIndex=e}function Oo(e){let t=B.lFrame.currentDirectiveIndex;return t===-1?null:e[t]}function ko(e){B.lFrame.currentQueryIndex=e}function Ao(e){let t=e[1];return t.type===2?t.declTNode:t.type===1?e[5]:null}function jo(e,t,n){if(n&4){let r=t,i=e;for(;r=r.parent,r===null&&!(n&1)&&(r=Ao(i),!(r===null||(i=i[14],r.type&10))););if(r===null)return!1;t=r,e=i}let r=B.lFrame=No();return r.currentTNode=t,r.lView=e,!0}function Mo(e){let t=No(),n=e[1];B.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function No(){let e=B.lFrame,t=e===null?null:e.child;return t===null?Po(e):t}function Po(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 Fo(){let e=B.lFrame;return B.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var Io=Fo;function Lo(){let e=Fo();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 Ro(e){return(B.lFrame.contextLView=Wa(e,B.lFrame.contextLView))[8]}function zo(){return B.lFrame.selectedIndex}function Bo(e){B.lFrame.selectedIndex=e}function Vo(){let e=B.lFrame;return Ia(e.tView,e.selectedIndex)}function Ho(){B.lFrame.currentNamespace=`svg`}function Uo(){Wo()}function Wo(){B.lFrame.currentNamespace=null}function Go(){return B.lFrame.currentNamespace}var Ko=!0;function qo(){return Ko}function Jo(e){Ko=e}function Yo(e,t=null,n=null,r){let i=Xo(e,t,n,r);return i.resolveInjectorInitializers(),i}function Xo(e,t=null,n=null,r,i=new Set){return new ua([n||Ui,Ji(e)],t||ca(),null,i)}var Zo=class e{static THROW_IF_NOT_FOUND=Ti;static NULL=new qi;static create(e,t){if(Array.isArray(e))return Yo({name:``},t,e,``);{let t=e.name??``;return Yo({name:t},e.parent,e.providers,t)}}static ɵprov=Yr({token:e,providedIn:`any`,factory:()=>R(Gi)});static __NG_ELEMENT_ID__=-1},Qo=new L(``),$o=class{static __NG_ELEMENT_ID__=ts;static __NG_ENV_ID__=e=>e},es=class extends $o{_lView;constructor(e){super(),this._lView=e}get destroyed(){return ja(this._lView)}onDestroy(e){let t=this._lView;return Ja(t,e),()=>Ya(t,e)}};function ts(){return new es(V())}var ns=new L(``),rs=(()=>{class e{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new Rr(!1);debugTaskTracker=z(ns,{optional:!0});get hasPendingTasks(){return!this.destroyed&&this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new Dr(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=Yr({token:e,providedIn:`root`,factory:()=>new e})}return e})(),is=class extends Ir{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(e=!1){super(),this.__isAsync=e,Sa()&&(this.destroyRef=z($o,{optional:!0})??void 0,this.pendingTasks=z(rs,{optional:!0})??void 0)}emit(e){let t=P(null);try{super.next(e)}finally{P(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 er&&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 os(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 ss(e){return queueMicrotask(()=>e()),()=>{e=as}}var cs=`isAngularZone`,ls=`isAngularZone_ID`,us=0,ds=class e{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new is(!1);onMicrotaskEmpty=new is(!1);onStable=new is(!1);onError=new is(!1);constructor(e){let{enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1,scheduleInRootZone:i=!1}=e;if(typeof Zone>`u`)throw new F(908,!1);Zone.assertZonePatched();let a=this;a._nesting=0,a._outer=a._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(a._inner=a._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(a._inner=a._inner.fork(Zone.longStackTraceZoneSpec)),a.shouldCoalesceEventChangeDetection=!r&&n,a.shouldCoalesceRunChangeDetection=r,a.callbackScheduled=!1,a.scheduleInRootZone=i,hs(a)}static isInAngularZone(){return typeof Zone<`u`&&Zone.current.get(cs)===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new F(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new F(909,!1)}run(e,t,n){return this._inner.run(e,t,n)}runTask(e,t,n,r){let i=this._inner,a=i.scheduleEventTask(`NgZoneEvent: `+r,e,fs,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)}},fs={};function ps(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 ms(e){if(e.isCheckStableRunning||e.callbackScheduled)return;e.callbackScheduled=!0;function t(){os(()=>{e.callbackScheduled=!1,gs(e),e.isCheckStableRunning=!0,ps(e),e.isCheckStableRunning=!1})}e.scheduleInRootZone?Zone.root.run(()=>{t()}):e._outer.run(()=>{t()}),gs(e)}function hs(e){let t=()=>{ms(e)},n=us++;e._inner=e._inner.fork({name:`angular`,properties:{[cs]:!0,[ls]:n,[ls+n]:!0},onInvokeTask:(n,r,i,a,o,s)=>{if(bs(s))return n.invokeTask(i,a,o,s);try{return _s(e),n.invokeTask(i,a,o,s)}finally{(e.shouldCoalesceEventChangeDetection&&a.type===`eventTask`||e.shouldCoalesceRunChangeDetection)&&t(),vs(e)}},onInvoke:(n,r,i,a,o,s,c)=>{try{return _s(e),n.invoke(i,a,o,s,c)}finally{e.shouldCoalesceRunChangeDetection&&!e.callbackScheduled&&!xs(s)&&t(),vs(e)}},onHasTask:(t,n,r,i)=>{t.hasTask(r,i),n===r&&(i.change==`microTask`?(e._hasPendingMicrotasks=i.microTask,gs(e),ps(e)):i.change==`macroTask`&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:(t,n,r,i)=>(t.handleError(r,i),e.runOutsideAngular(()=>e.onError.emit(i)),!1)})}function gs(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.callbackScheduled===!0)}function _s(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function vs(e){e._nesting--,ps(e)}var ys=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new is;onMicrotaskEmpty=new is;onStable=new is;onError=new is;run(e,t,n){return e.apply(t,n)}runGuarded(e,t,n){return e.apply(t,n)}runOutsideAngular(e){return e()}runTask(e,t,n,r){return e.apply(t,n)}};function bs(e){return Ss(e,`__ignore_ng_zone__`)}function xs(e){return Ss(e,`__scheduler_tick__`)}function Ss(e,t){return!Array.isArray(e)||e.length!==1?!1:e[0]?.data?.[t]===!0}var Cs=class{_console=console;handleError(e){this._console.error(`ERROR`,e)}},ws=new L(``,{factory:()=>{let e=z(ds),t=z(la),n;return r=>{e.runOutsideAngular(()=>{t.destroyed&&!n?setTimeout(()=>{throw r}):(n??=t.get(Cs),n.handleError(r))})}}}),Ts={provide:Wi,useValue:()=>{z(Cs,{optional:!0})},multi:!0};function H(e,t){let[n,r,i]=Mn(e,t?.equal),a=n;return a[en],a.set=r,a.update=i,a.asReadonly=Es.bind(a),a}function Es(){let e=this[en];if(e.readonlyFn===void 0){let t=()=>this();t[en]=e,e.readonlyFn=t}return e.readonlyFn}var Ds=new L(``,{factory:()=>Os}),Os=`ng`,ks=new L(``),As=new L(``,{providedIn:`platform`,factory:()=>`unknown`}),js=new L(``,{factory:()=>z(Qo).body?.querySelector(`[ngCspNonce]`)?.getAttribute(`ngCspNonce`)||null}),Ms=(()=>{class e{view;node;constructor(e,t){this.view=e,this.node=t}static __NG_ELEMENT_ID__=Ns}return e})();function Ns(){return new Ms(V(),uo())}var Ps=class{},Fs=new L(``,{factory:()=>!0}),Is=new L(``),Ls=(()=>{class e{static ɵprov=Yr({token:e,providedIn:`root`,factory:()=>new Rs})}return e})(),Rs=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}},zs=class{[en];constructor(e){this[en]=e}destroy(){this[en].destroy()}};function Bs(e,t){let n=t?.injector??z(Zo),r=t?.manualCleanup===!0?null:n.get($o),i,a=n.get(Ms,null,{optional:!0}),o=n.get(Ps);return a===null?i=Gs(e,n.get(Ls),o):(i=Ws(a.view,o,e),r instanceof es&&r._lView===a.view&&(r=null)),i.injector=n,r!==null&&(i.onDestroyFns=[r.onDestroy(()=>i.destroy())]),new zs(i)}var Vs={...Rn,cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let e=vo(!1);try{zn(this)}finally{vo(e)}},cleanup(){if(!this.cleanupFns?.length)return;let e=P(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],P(e)}}},Hs={...Vs,consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){if(gn(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.scheduler.remove(this)}},Us={...Vs,consumerMarkedDirty(){this.view[2]|=8192,qa(this.view),this.notifier.notify(13)},destroy(){if(gn(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.view[23]?.delete(this)}};function Ws(e,t,n){let r=Object.create(Us);return r.view=e,r.zone=typeof Zone<`u`?Zone.current:null,r.notifier=t,r.fn=Ks(r,n),e[23]??=new Set,e[23].add(r),r.consumerMarkedDirty(r),r}function Gs(e,t,n){let r=Object.create(Hs);return r.fn=Ks(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 Ks(e,t){return()=>{t(t=>(e.cleanupFns??=[]).push(t))}}var qs=(()=>{class e{internalPendingTasks=z(rs);scheduler=z(Ps);errorHandler=z(ws);add(){let e=this.internalPendingTasks.add();return()=>{this.internalPendingTasks.has(e)&&(this.scheduler.notify(11),this.internalPendingTasks.remove(e))}}run(e){let t=this.add();try{e().catch(this.errorHandler).finally(t)}catch(e){this.errorHandler(e),t()}}static ɵprov=Yr({token:e,providedIn:`root`,factory:()=>new e})}return e})(),Js=Symbol(`InputSignalNode#UNSET`),Ys={...In,transformFn:void 0,applyValueToInputSignal(e,t){Pn(e,t)}};function Xs(e){return{toString:e}.toString()}var U=(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})(U||{});function Zs(e,t,n,r){t===null?e[n]=r:t.applyValueToInputSignal(t,r)}var Qs=null;function $s(){return Qs}var ec=[],W=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,sc(o,a)):sc(o,a)}var lc=-1,uc=class{factory;name;injectImpl;resolving=!1;canSeeViewProviders;multi;componentProviders;index;providerFactory;constructor(e,t,n,r){this.factory=e,this.name=r,this.canSeeViewProviders=t,this.injectImpl=n}};function dc(e){return!!(e.flags&8)}function fc(e){return!!(e.flags&16)}function pc(e,t,n){let r=0;for(;rt){o=a-1;break}}}for(;a>16}function xc(e,t){let n=bc(e),r=t;for(;n>0;)r=r[14],n--;return r}var Sc=!0;function Cc(e){let t=Sc;return Sc=e,t}var wc=255,Tc=5,Ec=0,Dc={};function Oc(e,t,n){let r;typeof n==`string`?r=n.charCodeAt(0)||0:Object.hasOwn(n,si)&&(r=n[si]),r??=n[si]=Ec++;let i=r&wc,a=1<>Tc)]|=a}function kc(e,t){let n=jc(e,t);if(n!==-1)return n;let r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,Ac(r.data,e),Ac(t,null),Ac(r.blueprint,null));let i=Mc(e,t),a=e.injectorIndex;if(vc(i)){let e=yc(i),n=xc(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 Ac(e,t){e.push(0,0,0,0,0,0,0,0,t)}function jc(e,t){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||t[e.injectorIndex+8]===null?-1:e.injectorIndex}function Mc(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=qc(i),r===null)return lc;if(n++,i=i[14],r.injectorIndex!==-1)return r.injectorIndex|n<<16}return lc}function Nc(e,t,n){Oc(e,t,n)}function Pc(e,t,n){if(n&8||e!==void 0)return e;vi(t,`NodeInjector`)}function Fc(e,t,n,r){if(n&8&&r===void 0&&(r=null),!(n&3)){let i=e[9],a=Ci(void 0);try{return i?i.get(t,r,n&8):wi(t,r,n&8)}finally{Ci(a)}}return Pc(r,t,n)}function Ic(e,t,n,r=0,i){if(e!==null){if(t[2]&2048&&!(r&2)){let i=Kc(e,t,n,r,Dc);if(i!==Dc)return i}let i=Lc(e,t,n,r,Dc);if(i!==Dc)return i}return Fc(t,n,r,i)}function Lc(e,t,n,r,i){let a=Vc(n);if(typeof a==`function`){if(!jo(t,e,r))return r&1?Pc(i,n,r):Fc(t,n,r,i);try{let e;if(e=a(r),e==null&&!(r&8))vi(n);else return e}finally{Io()}}else if(typeof a==`number`){let i=null,o=jc(e,t),s=lc,c=r&1?t[15][5]:null;for((o===-1||r&4)&&(s=o===-1?Mc(e,t):t[o+8],s===lc||!Uc(r,!1)?o=-1:(i=t[1],o=yc(s),t=xc(s,t)));o!==-1;){let e=t[1];if(Hc(a,o,e.data)){let e=Rc(o,t,n,i,r,c);if(e!==Dc)return e}s=t[o+8],s!==lc&&Uc(r,t[1].data[o+8]===c)&&Hc(a,o,t)?(i=e,o=yc(s),t=xc(s,t)):o=-1}}return i}function Rc(e,t,n,r,i,a){let o=t[1],s=o.data[e+8],c=zc(s,o,n,r==null?Da(s)&&Sc:r!=o&&!!(s.type&3),i&1&&a===s);return c===null?Dc:Bc(t,o,c,s,i)}function zc(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&&ka(e)&&e.type===n)return c}return null}function Bc(e,t,n,r,i){let a=e[n],o=t.data;if(a instanceof uc){let s=a;if(s.resolving)throw _i(``);let c=Cc(s.canSeeViewProviders);s.resolving=!0,o[n].type||o[n];let l=s.injectImpl?Ci(s.injectImpl):null;jo(e,r,0);try{a=e[n]=s.factory(void 0,i,o,e,r),t.firstCreatePass&&n>=r.directiveStart&&tc(n,o[n],t)}finally{l!==null&&Ci(l),Cc(c),s.resolving=!1,Io()}}return a}function Vc(e){if(typeof e==`string`)return e.charCodeAt(0)||0;let t=Object.hasOwn(e,si)?e[si]:void 0;return typeof t==`number`?t>=0?t&wc:Gc:t}function Hc(e,t,n){let r=1<>Tc)]&r)}function Uc(e,t){return!(e&2)&&!(e&1&&t)}var Wc=class{_tNode;_lView;constructor(e,t){this._tNode=e,this._lView=t}get(e,t,n){return Ic(this._tNode,this._lView,e,ki(n),t)}};function Gc(){return new Wc(uo(),V())}function Kc(e,t,n,r,i){let a=e,o=t;for(;a!==null&&o!==null&&o[2]&2048&&!Aa(o);){let e=Lc(a,o,n,r|2,Dc);if(e!==Dc)return e;r&=-5;let t=a.parent;if(!t){let e=o[20];if(e){let t=e.get(n,Dc,r);if(t!==Dc)return t}t=qc(o),o=o[14]}a=t}return i}function qc(e){let t=e[1],n=t.type;return n===2?t.declTNode:n===1?e[5]:null}var Jc=()=>(typeof requestIdleCallback<`u`?requestIdleCallback:e=>setTimeout(e)).bind(globalThis),Yc=()=>(typeof requestIdleCallback<`u`?cancelIdleCallback:clearTimeout).bind(globalThis),Xc=new L(``,{factory:()=>new Zc}),Zc=class{requestIdleCallback=Jc();cancelIdleCallback=Yc();requestOnIdle(e,t){return this.requestIdleCallback(e,t)}cancelOnIdle(e){return this.cancelIdleCallback(e)}};function Qc(e){return{token:e.token,providedIn:e.autoProvided===!1?null:`root`,factory:e.factory,value:void 0}}function $c(){return el(uo(),V())}function el(e,t){return new tl(Fa(e,t))}var tl=(()=>{class e{nativeElement;constructor(e){this.nativeElement=e}static __NG_ELEMENT_ID__=$c}return e})();function nl(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||{}),il=new Map,al=0;function ol(){return al++}function sl(e){il.set(e[19],e)}function cl(e){il.delete(e[19])}var ll=`__ngContext__`;function ul(e,t){wa(t)?(e[ll]=t[19],sl(t)):e[ll]=t}function dl(e){return pl(e[12])}function fl(e){return pl(e[4])}function pl(e){for(;e!==null&&!Ta(e);)e=e[4];return e}var ml=void 0;function hl(e){ml=e}function gl(){if(ml!==void 0)return ml;if(typeof document<`u`)return document;throw new F(210,!1)}var _l=!1,vl=new L(``,{factory:()=>_l}),yl=new L(``),bl=new WeakMap;function xl(e,t){if(typeof e!=`object`||!e)return;let n=bl.get(e);n||(n=new WeakSet,bl.set(e,n)),n.add(t)}var Sl=new L(``);function Cl(e){return(e.flags&32)==32}var wl=()=>null;function Tl(e,t,n=!1){return wl(e,t,n)}function El(e){return e.get(yl,!1,{optional:!0})}function Dl(e,t){let n=e.contentQueries;if(n!==null){let r=P(null);try{for(let r=0;r|^->||--!>|)/g,Fl=`​$1​`;function Il(e){return e.replace(Nl,e=>e.replace(Pl,Fl))}function Ll(e,t){return e.createText(t)}function Rl(e,t,n){e.setValue(t,n)}function zl(e,t){return e.createComment(Il(t))}function Bl(e,t,n){return e.createElement(t,n)}function Vl(e,t,n,r,i){e.insertBefore(t,n,r,i)}function Hl(e,t,n){e.appendChild(t,n)}function Ul(e,t,n,r,i){r===null?Hl(e,t,n):Vl(e,t,n,r,i)}function Wl(e,t,n,r){e.removeChild(null,t,n,r)}function Gl(e,t,n){e.setAttribute(t,`style`,n)}function Kl(e,t,n){n===``?e.removeAttribute(t,`class`):e.setAttribute(t,`class`,n)}function ql(e,t,n){let{mergedAttrs:r,classes:i,styles:a}=n;r!==null&&pc(e,t,r),i!==null&&Kl(e,t,i),a!==null&&Gl(e,t,a)}function Jl(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 Yl=`ng-template`;function Xl(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(eu(r))return!1;o=!0}}}}}return eu(r)||o}function eu(e){return!(e&1)}function tu(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!==``&&!eu(o)&&(t+=au(a,i),i=``),r=o,a||=!eu(r);n++}return i!==``&&(t+=au(a,i)),t}function su(e){return e.map(ou).join(`,`)}function cu(e){let t=[],n=[],r=1,i=2;for(;r=0;e--){let{el:n,declarationView:s}=r[e],c=n.parentNode;n===t?(r.splice(e,1),gu.add(n),n.dispatchEvent(new CustomEvent(`animationend`,{detail:{cancel:!0}}))):(a&&n===a||c&&i&&c!==i&&(o===null||s===null||o===s))&&(r.splice(e,1),n.dispatchEvent(new CustomEvent(`animationend`,{detail:{cancel:!0}})),n.parentNode?.removeChild(n))}}function vu(e,t,n){let r=hu(n),i=mu.get(e);i?i.some(e=>e.el===t)||i.push({el:t,declarationView:r}):mu.set(e,[{el:t,declarationView:r}])}var yu=(function(e){return e[e.CHANGE_DETECTION=0]=`CHANGE_DETECTION`,e[e.AFTER_NEXT_RENDER=1]=`AFTER_NEXT_RENDER`,e})(yu||{}),bu=new L(``),xu=new Set;function Su(e){xu.has(e)||(xu.add(e),performance?.mark?.(`mark_feature_usage`,{detail:{feature:e}}))}var Cu=(()=>{class e{impl=null;execute(){this.impl?.execute()}static ɵprov=Yr({token:e,providedIn:`root`,factory:()=>new e})}return e})(),wu=new L(``,{factory:()=>{let e=z(la),t=new Set;return e.onDestroy(()=>t.clear()),{queue:t,isScheduled:!1,scheduler:null,injector:e}}});function Tu(e,t,n){let r=e.get(wu);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 Eu(e,t){let n=e.get(wu);if(Array.isArray(t))for(let e of t)n.queue.delete(e);else n.queue.delete(t)}function Du(e,t){let n=e.get(wu);if(t.detachedLeaveAnimationFns){for(let e of t.detachedLeaveAnimationFns)n.queue.delete(e);t.detachedLeaveAnimationFns=void 0}}function Ou(e,t){for(let[n,r]of t)Tu(e,r.animateFns)}function ku(e,t,n,r){let i=e?.[26]?.enter;t!==null&&i&&i.has(n.index)&&Ou(r,i)}function Au(e,t,n,r){try{n.get(Gi)}catch{return r(!1)}let i=e?.[26];i?.enter?.has(t.index)&&Eu(n,i.enter.get(t.index).animateFns);let a=ju(e,t,i);if(a.size===0){let n=!1;if(e){let r=[];Nu(e,t,r),n=r.length>0}if(!n)return r(!1)}e&&pu.add(e[19]),Tu(n,()=>Mu(e,t,i||void 0,a,r),i||void 0)}function ju(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 Mu(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&&Nu(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),Fu(e,t.running,i)}else Promise.allSettled(a).then(()=>{e&&pu.delete(e[19]),i(!0)})}else e&&pu.delete(e[19]),i(!1)}function Nu(e,t,n){if(t.type&12){let r=e[t.index];if(Ta(r))for(let e=10;e{e[26]?.running===t&&(e[26].running=void 0,pu.delete(e[19])),n(!0)})}function Iu(e,t,n,r,i,a,o,s){if(i!=null){let c,l=!1;Ta(i)?c=i:wa(i)&&(l=!0,i=i[0]);let u=Na(i);e===0&&r!==null?(ku(s,r,a,n),o==null?Hl(t,r,u):Vl(t,r,u,o||null,!0)):e===1&&r!==null?(ku(s,r,a,n),Vl(t,r,u,o||null,!0),_u(a,u,s)):e===2?(s?.[26]?.leave?.has(a.index)&&vu(a,u,s),gu.delete(u),Au(s,a,n,e=>{if(gu.has(u)){gu.delete(u);return}Wl(t,u,l,e)})):e===3&&(gu.delete(u),Au(s,a,n,()=>{t.destroyNode(u)})),c!=null&&ad(t,e,n,c,a,r,o)}}function Lu(e,t){zu(e,t),t[0]=null,t[5]=null}function Ru(e,t,n,r,i,a){r[0]=i,r[5]=t,nd(e,r,n,1,i,a)}function zu(e,t){t[10].changeDetectionScheduler?.notify(9),nd(e,t,t[11],2,null,null)}function Bu(e){let t=e[12];if(!t)return Uu(e[1],e);for(;t;){let n=null;if(wa(t))n=t[12];else{let e=t[10];e&&(n=e)}if(!n){for(;t&&!t[4]&&t!==e;)wa(t)&&Uu(t[1],t),t=t[3];t===null&&(t=e),wa(t)&&Uu(t[1],t),n=t&&t[4]}t=n}}function Vu(e,t){let n=e[9],r=n.indexOf(t);n.splice(r,1)}function Hu(e,t){if(ja(t))return;let n=t[11];n.destroyNode&&nd(e,t,n,3,null,null),Bu(t)}function Uu(e,t){if(ja(t))return;let n=P(null);try{t[2]&=-129,t[2]|=256,t[24]&&gn(t[24]),Gu(e,t),Wu(e,t),t[1].type===1&&t[11].destroy();let n=t[16];if(n!==null&&Ta(t[3])){n!==t[3]&&Vu(n,t);let r=t[18];r!==null&&r.detachView(e)}cl(t)}finally{P(n)}}function Wu(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&&hd(e,t,27,!1),W(o?U.TemplateUpdateStart:U.TemplateCreateStart,i,n),n(r,i)}finally{Bo(a),W(o?U.TemplateUpdateEnd:U.TemplateCreateEnd,i,n)}}function yd(e,t,n){Ed(e,t,n),(n.flags&64)==64&&Dd(e,t,n)}function bd(e,t,n=Fa){let r=t.localNames;if(r!==null){let i=t.index+1;for(let a=0;a{qa(e.lView)},consumerOnSignalRead(){this.lView[24]=this}};function Yd(e){let t=e[24]??Object.create(Xd);return t.lView=e,t}var Xd={...nn,consumerIsAlwaysLive:!0,kind:`template`,consumerMarkedDirty:e=>{let t=Xa(e.lView);for(;t&&!Zd(t[1]);)t=Xa(t);t&&Ua(t)},consumerOnSignalRead(){this.lView[24]=this}};function Zd(e){return e.type!==2}function Qd(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 $d=100;function ef(e,t=0){let n=e[10].rendererFactory;n.begin?.();try{tf(e,t)}finally{n.end?.()}}function tf(e,t){let n=_o();try{vo(!0),cf(e,t);let n=0;for(;Ga(e);){if(n===$d)throw new F(103,!1);n++,cf(e,1)}}finally{vo(n)}}function nf(e,t,n,r){if(ja(t))return;let i=t[2];Mo(t);let a=!0,o=null,s=null;Zd(e)?(s=Gd(t),o=dn(s)):tn()===null?(a=!1,s=Yd(t),o=dn(s)):t[24]&&=(gn(t[24]),null);try{Ha(t),xo(e.bindingStartIndex),n!==null&&vd(e,t,n,2,r);let a=(i&3)==3;if(a){let n=e.preOrderCheckHooks;n!==null&&rc(t,n,null)}else{let n=e.preOrderHooks;n!==null&&ic(t,n,0,null),ac(t,0)}if(af(t),Qd(t),rf(t,0),e.contentQueries!==null&&Dl(e,t),a){let n=e.contentCheckHooks;n!==null&&rc(t,n)}else{let n=e.contentHooks;n!==null&&ic(t,n,1),ac(t,1)}uf(e,t);let o=e.components;o!==null&&lf(t,o,0);let s=e.viewQuery;if(s!==null&&Ol(2,s,r),a){let n=e.viewCheckHooks;n!==null&&rc(t,n)}else{let n=e.viewHooks;n!==null&&ic(t,n,2),ac(t,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),t[22]){for(let e of t[22])e();t[22]=null}Ud(t),t[2]&=-73}catch(e){throw qa(t),e}finally{s!==null&&(pn(s,o),a&&qd(s)),Lo()}}function rf(e,t){for(let n=dl(e);n!==null;n=fl(n))for(let e=10;e0&&(e[n-1][4]=r[4]);let a=Ii(e,10+t);Lu(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 _f(e,t,n,r){let i=10+r,a=n.length;r>0&&(n[i-1][4]=t),r-1&&(gf(e,n),Ii(t,n))}this._attachedToViewContainer=!1}Hu(this._lView[1],this._lView)}onDestroy(e){Ja(this._lView,e)}markForCheck(){df(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[2]&=-129}reattach(){Ka(this._lView),this._lView[2]|=128}detectChanges(){this._lView[2]|=1024,ef(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new F(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let e=Aa(this._lView),t=this._lView[16];t!==null&&!e&&Vu(t,this._lView),zu(this._lView[1],this._lView)}attachToAppRef(e){if(this._attachedToViewContainer)throw new F(902,!1);this._appRef=e;let t=Aa(this._lView),n=this._lView[16];n!==null&&!t&&vf(n,this._lView),Ka(this._lView)}};function bf(e,t,n,r,i){let a=e.data[t];if(a===null)a=xf(e,t,n,r,i),wo()&&(a.flags|=32);else if(a.type&64){a.type=n,a.value=r,a.attrs=i;let e=po();a.injectorIndex=e===null?-1:e.injectorIndex}return mo(a,!0),a}function xf(e,t,n,r,i){let a=fo(),o=ho(),s=o?a:a&&a.parent,c=e.data[t]=Cf(e,s,n,t,r,i);return Sf(e,c,a,o),c}function Sf(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 Cf(e,t,n,r,i,a){let o=t?t.injectorIndex:-1,s=0;return io()&&(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:Go(),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 wf(e){let t=e[6]??[],n=e[3][11],r=[];for(let e of t)e.data.di===void 0?Tf(e,n):r.push(e);e[6]=r}function Tf(e,t){let n=0,r=e.firstChild;if(r){let i=e.data.r;for(;nnull,Df=()=>null;function Of(e,t){return Ef(e,t)}function kf(e,t,n){return Df(e,t,n)}var Af=class{},jf=class{},Mf=(()=>{class e{static ɵprov=Yr({token:e,providedIn:`root`,factory:()=>null})}return e})();function Nf(e){return e.debugInfo?.className||e.type.name||null}var Pf={},Ff=class{injector;parentInjector;constructor(e,t){this.injector=e,this.parentInjector=t}get(e,t,n){let r=this.injector.get(e,Pf,n);return r!==Pf||t===Pf?r:this.parentInjector.get(e,t,n)}};function If(e,t,n){return e[t]=n}function Lf(e,t,n){if(n===lu)return!1;let r=e[t];return!Object.is(r,n)&&(e[t]=n,!0)}function Rf(e,t,n,r){let i=Lf(e,t,n);return Lf(e,t+1,r)||i}function zf(e,t,n,r,i){let a=Rf(e,t,n,r);return Lf(e,t+2,i)||a}function Bf(e,t,n){return function r(i){let a=r.__ngNativeEl__;a!==void 0&&xl(i,a),df(Da(e)?za(e.index,t):t,5);let o=t[8],s=Vf(t,o,n,i),c=r.__ngNextListenerFn__;for(;c;)s=Vf(t,o,c,i)&&s,c=c.__ngNextListenerFn__;return s}}function Vf(e,t,n,r){let i=P(null);try{return W(U.OutputStart,t,n),n(r)!==!1}catch(t){return Nd(e,t),!1}finally{W(U.OutputEnd,t,n),P(i)}}function Hf(e,t,n,r,i,a,o,s){let c=Oa(e),l=!1,u=null;if(!r&&c&&(u=Wf(t,n,a,e.index)),u!==null){let e=u.__ngLastListenerFn__||u;e.__ngNextListenerFn__=o,u.__ngLastListenerFn__=o,l=!0}else{let o=Fa(e,n),c=r?r(o):o;r||(s.__ngNativeEl__=o);let l=i.listen(c,a,s);Uf(a)||Gf(r?t=>r(Na(t[e.index])):e.index,t,n,a,s,l,!1)}return l}function Uf(e){return e.startsWith(`animation`)||e.startsWith(`transition`)}function Wf(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 Gf(e,t,n,r,i,a,o){let s=t.firstCreatePass?Qa(t):null,c=Za(n),l=c.length;c.push(i,a),s&&s.push(r,e,l,(l+1)*(o?-1:1))}function Kf(e,t,n,r,i,a){let o=t[n],s=t[1],c=o[s.data[n].outputs[r]].subscribe(a);Gf(e.index,s,t,i,a,c,!0)}var qf=Symbol(`BINDING`),Jf=new L(``);function Yf(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 lp(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&gd.SignalBased)!==0};return i&&(a.transform=i),a})}function _p(e){return Object.keys(e).map(t=>({propName:e[t],templateName:t}))}function vp(e,t,n){let r=t instanceof la?t:t?.injector;return r&&e.getStandaloneInjector!==null&&(r=e.getStandaloneInjector(r)||r),r?new Ff(n,r):n}function yp(e){let t=e.get(jf,null);if(t===null)throw new F(407,!1);return{rendererFactory:t,sanitizer:e.get(Mf,null),changeDetectionScheduler:e.get(Ps,null),ngReflect:!1,tracingService:e.get(bu,null,{optional:!0})}}function bp(e,t,n){let r=Sp(e);return Bl(t,r,r===`svg`?`svg`:r===`math`?Ma:n)}function xp(e){if((e&&`localName`in e&&typeof e.localName==`string`?e.localName:e?.tagName)?.toLowerCase()===`script`)throw new F(905,!1)}function Sp(e){return(e.selectors[0][0]||`div`).toLowerCase()}var Cp=class{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=gp(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=_p(this.componentDef.outputs),this.cachedOutputs}constructor(e,t){this.componentDef=e,this.ngModule=t,this.componentType=e.type,this.selector=su(e.selectors),this.ngContentSelectors=e.ngContentSelectors??[],this.isBoundToModule=!!t}create(e,t,n,r,i,a,o){W(U.DynamicComponentStart);let s=P(null);try{let s=this.componentDef,c=vp(s,r||this.ngModule,e),l=yp(c),u=l.tracingService;return u&&u.componentCreate?u.componentCreate(Nf(s),()=>this.createComponentRef(l,c,t,n,i,a,o)):this.createComponentRef(l,c,t,n,i,a,o)}finally{P(s)}}createComponentRef(e,t,n,r,i,a,o){let s=this.componentDef,c=wp(r,s,a,i),l=e.rendererFactory.createRenderer(null,s),u=r?xd(l,r,s.encapsulation,t):bp(s,l,o??null);xp(u);let d=t.get(Jf,null),f=Tp(u,()=>t.get(Qo,null)??gl());d&&d.addHost(f);let p=a?.some(Dp)||i?.some(e=>typeof e!=`function`&&e.bindings.some(Dp)),m=ud(null,c,null,512|fd(s),null,null,e,l,t,null,Tl(u,t,!0));d&&mp&&f instanceof ShadowRoot&&Ja(m,()=>{d.removeHost(f)}),m[27]=u,Mo(m);let h=null;try{let e=dp(27,m,2,`#host`,()=>c.directiveRegistry,!0,0);ql(l,u,e),ul(u,m),yd(c,m,e),kl(c,e,m),fp(c,e),n!==void 0&&kp(e,this.ngContentSelectors,n),h=za(e.index,m),m[8]=h[8],Ld(c,m,null)}catch(e){throw h!==null&&cl(h),cl(m),e}finally{W(U.DynamicComponentEnd),Lo()}return new Op(this.componentType,m,!!p)}};function wp(e,t,n,r){let i=e?[`ng-version`,`22.1.7`]:cu(t.selectors[0]),a=null,o=null,s=0;if(n)for(let e of n)s+=e[qf].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 Dp(e){let t=e[qf].kind;return t===`input`||t===`twoWay`}var Op=class extends Af{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(e,t,n){super(),this._rootLView=t,this._hasInputBindings=n,this._tNode=Ia(t[1],27),this.location=el(this._tNode,t),this.instance=za(this._tNode.index,t)[8],this.hostView=this.changeDetectorRef=new yf(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;Pd(n,r[1],r,e,t),this.previousInputValues.set(e,t),df(za(n.index,r),1)}get injector(){return new Wc(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(e){this.hostView.onDestroy(e)}};function kp(e,t,n){let r=e.projection=[];for(let e=0;e!1;function jp(e,t,n){return Ap(e,t,n)}function Mp(e){return!!e&&typeof e.then==`function`}function Np(e){return!!e&&typeof e.subscribe==`function`}var Pp=class{},Fp=class extends Pp{injector;instance=null;constructor(e){super();let t=new ua([...e.providers,{provide:Pp,useValue:this}],e.parent||ca(),e.debugName,new Set([`environment`]));this.injector=t,e.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(e){this.injector.onDestroy(e)}};function Ip(e,t,n=null){return new Fp({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}var Lp=(()=>{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=Yi(!1,e.type),n=t.length>0?Ip([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=Yr({token:e,providedIn:`environment`,factory:()=>new e(R(la))})}return e})();function Rp(e){return Xs(()=>{let t=Up(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(Lp).getOrCreateStandaloneInjector(n):null,getExternalStyles:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||Al.Emulated,styles:e.styles||Ui,_:null,schemas:e.schemas||null,tView:null,id:``};t.standalone&&Su(`NgStandalone`),Wp(n);let r=e.dependencies;return n.directiveDefs=Gp(r,zp),n.pipeDefs=Gp(r,di),n.id=Kp(n),n})}function zp(e){return li(e)||ui(e)}function Bp(e,t){if(e==null)return Hi;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=gd.None,c=null),n[a]=[r,s,c],t[a]=o}return n}function Vp(e){if(e==null)return Hi;let t={};for(let n in e)Object.hasOwn(e,n)&&(t[e[n]]=n);return t}function Hp(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 Up(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||Hi,exportAs:e.exportAs||null,standalone:e.standalone??!0,signals:e.signals===!0,selectors:e.selectors||Ui,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,controlDef:null,signalFormsInputPresence:null,inputs:Bp(e.inputs,t),outputs:Vp(e.outputs),debugInfo:null}}function Wp(e){e.features?.forEach(t=>t(e))}function Gp(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 Kp(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 qp=new L(``),Jp=(()=>{class e{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((e,t)=>{this.resolve=e,this.reject=t});appInits=z(qp,{optional:!0})??[];injector=z(Zo);constructor(){}runInitializers(){if(this.initialized)return;let e=[];for(let t of this.appInits){let n=xa(this.injector,t);if(Mp(n))e.push(n);else if(Np(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=Qc({token:e,factory:e.ɵfac})}return e})();function Yp(e,t,n,r,i,a,o,s){if(n.firstCreatePass){e.mergedAttrs=gc(e.mergedAttrs,e.attrs);let t=e.tView=sd(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),mo(e,!1);let c=Qp(n,t,e,r);qo()&&Zu(n,t,c,e),ul(c,t);let l=ff(c,t,c,e);t[r+27]=l,md(t,l),jp(l,e,t)}function Xp(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;if(t.firstCreatePass){if(f=bf(t,d,4,o||null,s||null),l!=null){let e=Va(t.consts,l);f.localNames=[];for(let t=0;t{class e{cachedInjectors=new Map;getOrCreateInjector(e,t,n,r){if(!this.cachedInjectors.has(e)){let i=n.length>0?Ip(n,t,r):null;this.cachedInjectors.set(e,i)}return this.cachedInjectors.get(e)}ngOnDestroy(){try{for(let e of this.cachedInjectors.values())e!==null&&e.destroy()}finally{this.cachedInjectors.clear()}}static ɵprov=Yr({token:e,providedIn:`environment`,factory:()=>new e})}return e})(),Om=new L(``);function km(e,t,n){return e.get(Dm).getOrCreateInjector(t,e,n,``)}function Am(e,t,n){if(e instanceof Ff){let r=e.injector,i=e.parentInjector;return new Ff(r,km(i,t,n))}let r=e.get(la);return r===e?km(e,t,n):new Ff(e,km(r,t,n))}function jm(e,t,n,r=!1){let i=n[3],a=i[1];if(ja(i))return;let o=vm(i,t),s=o[1],c=o[lm];if(!(c!==null&&ee.data.s===t[1])??-1;return{dehydratedView:n>-1?e[6][n]:null,dehydratedViewIx:n}}function Nm(e,t,n,r,i){W(U.DeferBlockStateStart);let a=Sm(e,i,r);if(a!==null){t[1]=e;let o=i[1],s=Ia(o,a+27);hf(n,0);let c;if(e===rm.Complete){let e=bm(o,r),t=e.providers;t&&t.length>0&&(c=Am(i[9],e,t))}let{dehydratedView:l,dehydratedViewIx:u}=Mm(n,t),d=zd(i,s,null,{injector:c,dehydratedView:l});if(mf(n,d,0,Bd(s,l)),Ua(d),u>-1&&n[6]?.splice(u,1),(e===rm.Complete||e===rm.Error)&&Array.isArray(t[um])){for(let e of t[um])e();t[um]=null}}W(U.DeferBlockStateEnd)}function Pm(e,t){return e{e.loadingState===em.COMPLETE?jm(rm.Complete,t,n):e.loadingState===em.FAILED&&jm(rm.Error,t,n)})}var Lm=null;function Rm(e,t){return t[9].get(Om,null,{optional:!0})?.behavior!==fm.Manual}var zm=new L(``),Bm=new L(``);function Vm(){An(()=>{throw new F(600,``)})}var Hm=10,Um=(()=>{class e{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=z(ws);afterRenderManager=z(Cu);zonelessEnabled=z(Fs);rootEffectScheduler=z(Ls);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new Ir;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=z(rs);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(zr(e=>!e))}constructor(){z(bu,{optional:!0})}whenStable(){let e;return new Promise(t=>{e=this.isStable.subscribe({next:e=>{e&&t()}})}).finally(()=>{e.unsubscribe()})}_injector=z(la);_rendererFactory=null;get injector(){return this._injector}bootstrap(e,t){return this.bootstrapImpl(e,t)}bootstrapImpl(e,t,n=Zo.NULL){return this._injector.get(ds).run(()=>{if(W(U.BootstrapComponentStart),!this._injector.get(Jp).done)throw new F(405,``);let r=li(e),i=this._injector.get(Pp),a=new Cp(r,i);this.componentTypes.push(e);let{hostElement:o,directives:s,bindings:c}=Wm(t),l=o||a.selector,u=a.create(n,[],l,i.injector,s,c),d=u.location.nativeElement,f=u.injector.get(zm,null);return f?.registerApplication(d),u.onDestroy(()=>{this.detachView(u.hostView),Gm(this.components,u),f?.unregisterApplication(d)}),this._loadComponent(u),W(U.BootstrapComponentEnd,u),u})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){W(U.ChangeDetectionStart),this.tracingSnapshot===null?this.tickImpl():this.tracingSnapshot.run(yu.CHANGE_DETECTION,this.tickImpl)}tickImpl=()=>{if(this._runningTick)throw W(U.ChangeDetectionEnd),new F(101,!1);let e=P(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,P(e),this.afterTick.next(),W(U.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(jf,null,{optional:!0}));let e=0;for(;this.dirtyFlags!==0&&e++Ga(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;Gm(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(Bm,[]).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),()=>Gm(this._destroyListeners,e)}destroy(){if(this._destroyed)throw new F(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=Qc({token:e,factory:e.ɵfac})}return e})();function Wm(e){return e===void 0||typeof e==`string`||e instanceof Element?{hostElement:e}:e}function Gm(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function Km(e,t,n){let r=t.get(Jm);return r.add(e,n),()=>r.remove(e)}function qm(e){return(t,n)=>Km(t,n,e)}var Jm=(()=>{class e{buckets=new Map;callbackBucket=new Map;applicationRef=z(Um);ngZone=z(ds);idleService=z(Xc);add(e,t){let n=Ym(t);this.callbackBucket.set(e,n);let r=this.buckets.get(n);r??(r={idleId:null,queue:new Set},this.buckets.set(n,r)),r.queue.add(e),this.scheduleBucket(r,t)}remove(e){let t=this.callbackBucket.get(e);if(t===void 0)return;this.callbackBucket.delete(e);let n=this.buckets.get(t);n&&(n.queue.delete(e),n.queue.size===0&&(this.cancelBucket(n),this.buckets.delete(t)))}scheduleBucket(e,t){if(e.idleId!==null)return;let n=Ym(t),r=r=>{for(let t of e.queue)if(t(),this.applicationRef._tick(),e.queue.delete(t),this.callbackBucket.delete(t),r&&r.timeRemaining()===0&&!r.didTimeout)break;e.idleId=null,e.queue.size>0?this.scheduleBucket(e,t):this.buckets.delete(n)};e.idleId=this.idleService.requestOnIdle(e=>this.ngZone.run(()=>r(e)),t)}cancelBucket(e){e.idleId!==null&&(this.idleService.cancelOnIdle(e.idleId),e.idleId=null)}ngOnDestroy(){for(let e of this.buckets.values())this.cancelBucket(e);this.buckets.clear(),this.callbackBucket.clear()}static ɵprov=Yr({token:e,providedIn:`root`,factory:()=>new e})}return e})();function Ym(e){return!e||e.timeout==null?``:`${e.timeout}`}function Xm(e){let t=V(),n=uo();if(Fm(t,n),!Rm(0,t))return;let r=t[9];pm(0,vm(t,n),e(()=>Qm(0,t,n),r))}function Zm(e,t,n){let r=t[9],i=t[1];if(e.loadingState!==em.NOT_STARTED)return e.loadingPromise??Promise.resolve();let a=vm(t,n),o=Em(i,e);e.loadingState=em.IN_PROGRESS,mm(1,a);let s=e.dependencyResolverFn,c=r.get(qs).add();return s?(e.loadingPromise=Promise.allSettled(s()).then(n=>{let r=!1,i=[],a=[];for(let e=0;e0&&(t.directiveRegistry=Tm(t.directiveRegistry,i),e.providers=Yi(!1,...i.map(e=>e.type))),a.length>0&&(t.pipeRegistry=Tm(t.pipeRegistry,a))}}),e.loadingPromise.finally(()=>{e.loadingPromise=null,c()})):(e.loadingPromise=Promise.resolve().then(()=>{e.loadingPromise=null,e.loadingState=em.COMPLETE,c()}),e.loadingPromise)}function Qm(e,t,n){let r=t[1],i=t[n.index];if(!Rm(e,t))return;let a=vm(t,n),o=bm(r,n);switch(hm(a),o.loadingState){case em.NOT_STARTED:jm(rm.Loading,n,i),Zm(o,t,n),o.loadingState===em.IN_PROGRESS&&Im(o,n,i);break;case em.IN_PROGRESS:jm(rm.Loading,n,i),Im(o,n,i);break;case em.COMPLETE:jm(rm.Complete,n,i);break;case em.FAILED:jm(rm.Error,n,i)}}function $m(e,t,n){return e===0?th(t,n):e!==2||!th(t,n)}function eh(e){return e!=null&&(e&1)==1}function th(e,t){let n=e[9],r=bm(e[1],t),i=El(n),a=eh(r.flags),o=vm(e,t)[cm]!==null;return!(a&&o&&i)}function nh(e,t,n,r,i,a,o,s,c,l){let u=V(),d=so(),f=e+27,p=Xp(u,d,e,null,0,0),m=u[9],h=El(m);if(d.firstCreatePass){Su(`NgDefer`);let e={primaryTmplIndex:t,loadingTmplIndex:r??null,placeholderTmplIndex:i??null,errorTmplIndex:a??null,placeholderBlockConfig:null,loadingBlockConfig:null,dependencyResolverFn:n??null,loadingState:em.NOT_STARTED,loadingPromise:null,providers:null,hydrateTriggers:null,debug:null,flags:l??0};c?.(d,e,s,o),xm(d,f,e)}let g=u[f];jp(g,p,u);let _=null,v=null;if(g[6]?.length>0){let e=g[6][0].data;v=e.di??null,_=e.s}let y=[null,im.Initial,null,null,null,null,v,_,null,null];ym(u,f,y);let b=null;v!==null&&h&&(b=m.get(Sl),b.add(v,{lView:u,tNode:p,lContainer:g}));let x=()=>{hm(y),v!==null&&b?.cleanup([v])};pm(0,y,()=>Ya(u,x)),Ja(u,x)}function rh(e){$m(0,V(),uo())&&Xm(qm({timeout:e}))}var ih=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 ah(e,t,n,r,i){return e===n&&Object.is(t,r)?1:Object.is(i(e,t),i(n,r))?-1:0}function oh(e,t,n,r){let i,a,o=0,s=e.length-1;if(Array.isArray(t)){P(r);let c=t.length-1;for(P(null);o<=s&&o<=c;){let r=e.at(o),l=t[o],u=ah(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=ah(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 uh,a??=lh(e,o,s,n),sh(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;)ch(e,i,n,o,t[o]),o++}else if(t!=null){P(r);let c=t[Symbol.iterator]();P(null);let l=c.next();for(;!l.done&&o<=s;){let t=e.at(o),r=l.value,u=ah(o,t,o,r,n);if(u!==0)u<0&&e.updateValue(o,r),o++,l=c.next();else{i??=new uh,a??=lh(e,o,s,n);let u=n(o,r);if(sh(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;)ch(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 sh(e,t,n,r){return t!==void 0&&t.has(r)?(e.attach(n,t.get(r)),t.delete(r),!0):!1}function ch(e,t,n,r,i){if(sh(e,t,r,n(r,i)))e.updateValue(r,i);else{let t=e.create(r,i);e.attach(r,t)}}function lh(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 uh=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 K(e,t,n,r,i,a,o,s){Su(`NgControlFlow`);let c=V(),l=so();return Xp(c,l,e,t,n,r,i,Va(l.consts,a),256,o,s),dh}function dh(e,t,n,r,i,a,o,s){Su(`NgControlFlow`);let c=V(),l=so();return Xp(c,l,e,t,n,r,i,Va(l.consts,a),512,o,s),dh}function q(e,t){Su(`NgControlFlow`);let n=V(),r=So(),i=n[r]===lu?-1:n[r],a=i===-1?void 0:vh(n,27+i);if(Lf(n,r,e)){let r=P(null);try{if(a!==void 0&&hf(a,0),e!==-1){let r=27+e,i=vh(n,r),a=Ch(n[1],r),o=kf(i,a,n);mf(i,zd(n,a,t,{dehydratedView:o}),0,Bd(a,o))}}finally{P(r)}}else if(a!==void 0){let e=pf(a,0);e!==void 0&&(e[8]=t)}}var fh=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 ph(e){return e}var mh=class{hasEmptyBlock;trackByFn;liveCollection;constructor(e,t,n){this.hasEmptyBlock=e,this.trackByFn=t,this.liveCollection=n}};function hh(e,t,n,r,i,a,o,s,c,l,u,d,f){Su(`NgControlFlow`);let p=V(),m=so(),h=c!==void 0,g=V(),_=new mh(h,s?o.bind(g[15][8]):o);g[27+e]=_,Xp(p,m,e+1,t,n,r,i,Va(m.consts,a),256),h&&Xp(p,m,e+2,c,l,u,d,Va(m.consts,f),512)}var gh=class extends ih{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,mf(this.lContainer,t,e,Bd(this.templateTNode,n)),yh(this.lContainer,e)}detach(e){return this.needsIndexUpdate||=e!==this.length-1,bh(this.lContainer,e),xh(this.lContainer,e)}create(e,t){let n=Of(this.lContainer,this.templateTNode.tView.ssrId);return zd(this.hostLView,this.templateTNode,new fh(this.lContainer,t,e),{dehydratedView:n})}destroy(e){Hu(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];Du(e,r),pu.delete(n[19]),r.detachedLeaveAnimationFns=void 0}}function bh(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 xh(e,t){return gf(e,t)}function Sh(e,t){return pf(e,t)}function Ch(e,t){return Ia(e,t)}function wh(e,t,n){let r=V();return Lf(r,So(),t)&&(so(),Cd(Vo(),r,e,t,r[11],n)),wh}function Th(e,t,n,r,i){Pd(t,e,n,i?`class`:`style`,r)}function Eh(e,t,n,r){let i=V(),a=i[1],o=e+27,s=a.firstCreatePass?dp(o,i,2,t,kd,ro(),n,r):a.data[o];if(Da(s)){let n=i[10].tracingService;if(n&&n.componentCreate){let o=a.data[s.directiveStart+s.componentOffset];return n.componentCreate(Nf(o),()=>(Dh(e,t,i,s,r),Eh))}}return Dh(e,t,i,s,r),Eh}function Dh(e,t,n,r,i){if(jd(r,n,e,t,jh),Oa(r)){let e=n[1];yd(e,n,r),kl(e,r,n)}i!=null&&bd(n,r)}function Oh(){let e=so(),t=Md(uo());return e.firstCreatePass&&fp(e,t),ao(t)&&oo(),no(),t.classesWithoutHost!=null&&dc(t)&&Th(e,t,V(),t.classesWithoutHost,!0),t.stylesWithoutHost!=null&&fc(t)&&Th(e,t,V(),t.stylesWithoutHost,!1),Oh}function kh(e,t,n,r){return Eh(e,t,n,r),Oh(),kh}function J(e,t,n,r){let i=V(),a=i[1],o=e+27,s=a.firstCreatePass?pp(o,a,2,t,n,r):a.data[o];return jd(s,i,e,t,jh),r!=null&&bd(i,s),J}function Y(){return ao(Md(uo()))&&oo(),no(),Y}function Ah(e,t,n,r){return J(e,t,n,r),Y(),Ah}var jh=(e,t,n,r,i)=>(Jo(!0),Bl(t[11],r,Go()));function Mh(){let e=so(),t=Md(uo());return e.firstCreatePass&&fp(e,t),Mh}function Nh(e,t,n){let r=V(),i=r[1],a=e+27,o=i.firstCreatePass?pp(a,i,8,`ng-container`,t,n):i.data[a];return jd(o,r,e,`ng-container`,Ih),n!=null&&bd(r,o),Nh}function Ph(){return Md(uo()),Mh}function Fh(e,t,n){return Nh(e,t,n),Ph(),Fh}var Ih=(e,t,n,r,i)=>(Jo(!0),zl(t[11],``));function Lh(){return V()}function Rh(e,t,n){let r=V();return Lf(r,So(),t)&&(so(),wd(Vo(),r,e,t,r[11],n)),Rh}var zh=`en-US`;function Bh(e){typeof e==`string`&&e.toLowerCase().replace(/_/g,`-`)}function Vh(e,t,n){let r=V(),i=so(),a=uo();return Uh(i,r,r[11],a,e,t,n),Vh}function Hh(e,t,n){let r=V(),i=so(),a=uo();return(a.type&3||n)&&Hf(a,i,r,n,r[11],e,t,Bf(a,r,t)),Hh}function Uh(e,t,n,r,i,a,o){let s=!0,c=null;if((r.type&3||o)&&(c??=Bf(r,t,a),Hf(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 Kh(e){return(e&2)==2}function qh(e,t){return e&131071|t<<17}function Jh(e){return e|2}function Yh(e){return(e&131068)>>2}function Xh(e,t){return e&-131069|t<<2}function Zh(e){return(e&1)==1}function Qh(e){return e|1}function $h(e,t,n,r,i,a){let o=a?t.classBindings:t.styleBindings,s=Gh(o),c=Yh(o);e[r]=n;let l=!1,u;if(Array.isArray(n)){let e=n;u=e[1],(u===null||Bi(e,u)>0)&&(l=!0)}else u=n;if(i){if(c!==0){let t=Gh(e[s+1]);e[r+1]=Wh(t,s),t!==0&&(e[t+1]=Xh(e[t+1],r)),e[s+1]=qh(e[s+1],r)}else e[r+1]=Wh(s,0),s!==0&&(e[s+1]=Xh(e[s+1],r)),s=r}else e[r+1]=Wh(c,0),s===0?s=r:e[c+1]=Xh(e[c+1],r),c=r;l&&(e[r+1]=Jh(e[r+1])),tg(e,u,r,!0),tg(e,u,r,!1),eg(t,u,e,r,a),o=Wh(s,c),a?t.classBindings=o:t.styleBindings=o}function eg(e,t,n,r,i){let a=i?e.residualClasses:e.residualStyles;a!=null&&typeof t==`string`&&Bi(a,t)>=0&&(n[r+1]=Qh(n[r+1]))}function tg(e,t,n,r){let i=e[n+1],a=t===null,o=r?Gh(i):Yh(i),s=!1;for(;o!==0&&(s===!1||a);){let n=e[o],i=e[o+1];ng(n,t)&&(s=!0,e[o+1]=r?Qh(i):Jh(i)),o=r?Gh(i):Yh(i)}s&&(e[n+1]=r?Jh(i):Qh(i))}function ng(e,t){return e===null||t==null||(Array.isArray(e)?e[1]:e)===t?!0:Array.isArray(e)&&typeof t==`string`?Bi(e,t)>=0:!1}function rg(e,t,n){return ag(e,t,n,!1),rg}function ig(e,t){return ag(e,t,null,!0),ig}function ag(e,t,n,r){let i=V(),a=so(),o=Co(2);if(a.firstUpdatePass&&sg(a,e,o,r),t!==lu&&Lf(i,o,t)){let s=a.data[zo()];mg(a,s,i,i[11],e,i[o+1]=_g(t,n),r,o)}}function og(e,t){return t>=e.expandoStartIndex}function sg(e,t,n,r){let i=e.data;if(i[n+1]===null){let a=i[zo()],o=og(e,n);vg(a,r)&&t===null&&!o&&(t=!1),t=cg(i,a,t,r),$h(i,a,t,n,o,r)}}function cg(e,t,n,r){let i=Oo(e),a=r?t.residualClasses:t.residualStyles;if(i===null)(r?t.classBindings:t.styleBindings)===0&&(n=fg(null,e,t,n,r),n=pg(n,t.attrs,r),a=null);else{let o=t.directiveStylingLast;if(o===-1||e[o]!==i){if(n=fg(i,e,t,n,r),a===null){let n=lg(e,t,r);n!==void 0&&Array.isArray(n)&&(n=fg(null,e,t,n[1],r),n=pg(n,t.attrs,r),ug(e,t,r,n))}else a=dg(e,t,r)}}return a!==void 0&&(r?t.residualClasses=a:t.residualStyles=a),n}function lg(e,t,n){let r=n?t.classBindings:t.styleBindings;if(Yh(r)!==0)return e[Gh(r)]}function ug(e,t,n,r){let i=n?t.classBindings:t.styleBindings;e[Gh(i)]=r}function dg(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===lu&&(u=l?Ui:void 0);let d=l?zi(u,r):c===r?u:void 0;if(a&&!gg(d)&&(d=zi(t,r)),gg(d)&&(s=d,o))return s;let f=e[i+1];i=o?Gh(f):Yh(f)}if(t!==null){let e=a?t.residualClasses:t.residualStyles;e!=null&&(s=zi(e,r))}return s}function gg(e){return e!==void 0}function _g(e,t){return e==null||e===``||(typeof t==`string`?e=Ml(e)+t:typeof e==`object`&&(e=Ur(Ml(e)))),e}function vg(e,t){return!!(e.flags&(t?8:16))}function Z(e,t=``){let n=V(),r=so(),i=e+27,a=r.firstCreatePass?bf(r,i,1,t,null):r.data[i],o=yg(r,n,a,t);n[i]=o,qo()&&Zu(r,n,o,a),mo(a,!1)}var yg=(e,t,n,r)=>(Jo(!0),Ll(t[11],r));function bg(e,t,n,r=``){return Lf(e,So(),n)?t+pi(n)+r:lu}function xg(e,t,n,r,i,a=``){let o=Rf(e,bo(),n,i);return Co(2),o?t+pi(n)+r+pi(i)+a:lu}function Sg(e,t,n,r,i,a,o,s=``){let c=zf(e,bo(),n,i,o);return Co(3),c?t+pi(n)+r+pi(i)+a+pi(o)+s:lu}function Q(e){return $(``,e),Q}function $(e,t,n){let r=V(),i=bg(r,e,t,n);return i!==lu&&Tg(r,zo(),i),$}function Cg(e,t,n,r,i){let a=V(),o=xg(a,e,t,n,r,i);return o!==lu&&Tg(a,zo(),o),Cg}function wg(e,t,n,r,i,a,o){let s=V(),c=Sg(s,e,t,n,r,i,a,o);return c!==lu&&Tg(s,zo(),c),wg}function Tg(e,t,n){let r=Pa(t,e);Rl(e[11],r,n)}function Eg(e,t){let n=e[t];return n===lu?void 0:n}function Dg(e,t,n,r,i,a){let o=t+n;return Lf(e,o,i)?If(e,o+1,a?r.call(a,i):r(i)):Eg(e,o+1)}function Og(e,t){let n=so(),r,i=e+27;n.firstCreatePass?(r=kg(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=Ni(r.type,!0)),o=Ci(Xf);try{let e=Cc(!1),t=a();return Cc(e),Ra(n,V(),i,t),t}finally{Ci(o)}}function kg(e,t){if(t)for(let n=t.length-1;n>=0;n--){let r=t[n];if(e===r.name)return r}}function Ag(e,t,n){let r=e+27,i=V(),a=La(i,r);return jg(i,r)?Dg(i,yo(),t,a.transform,n,a):a.transform(n)}function jg(e,t){return e[1].data[t].pure}var Mg=(()=>{class e{applicationErrorHandler=z(ws);appRef=z(Um);taskService=z(rs);ngZone=z(ds);zonelessEnabled=z(Fs);tracing=z(bu,{optional:!0});zoneIsDefined=typeof Zone<`u`&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new er;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(ls):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(z(Is,{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?ss:os;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=Qc({token:e,factory:e.ɵfac})}return e})();function Ng(){return[{provide:Ps,useExisting:Mg},{provide:ds,useClass:ys},{provide:Fs,useValue:!0}]}function Pg(){return typeof $localize<`u`&&$localize.locale||`en-US`}var Fg=new L(``,{factory:()=>z(Fg,{optional:!0,skipSelf:!0})||Pg()}),Ig=class{destroyed=!1;listeners=null;errorHandler=z(Cs,{optional:!0});isEmitting=!1;hasNullListeners=!1;destroyRef=z($o);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(e){if(this.destroyed)throw new F(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(Hr(953,!1));return}if(this.listeners===null)return;this.isEmitting=!0;let t=P(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&&Lg(this.listeners)),P(t),this.isEmitting=!1}}};function Lg(e){let t=e.length-1;for(;t>-1;)e[t]===null&&e.splice(t,1),t--}function Rg(e,t){return Sn(e,t?.equal)}(class e extends Error{_brand;constructor(e){super(e)}static IDLE=new e(`IDLE`);static LOADING=new e(`LOADING`)});function zg(e,t){let n=Object.create(Ys);n.value=e,n.transformFn=t?.transform;function r(){if(rn(n),n.value===Js)throw new F(-950,null);return n.value}return r[en]=n,r}function Bg(e){return new Ig}function Vg(e,t){return zg(e,t)}function Hg(e){return zg(Js,e)}var Ug=(Vg.required=Hg,Vg),Wg=new L(``),Gg=new L(``);function Kg(e){return!e.moduleRef}function qg(e){let t=Kg(e)?e.r3Injector:e.moduleRef.injector,n=t.get(ds);return n.run(()=>{Kg(e)?e.r3Injector.resolveInjectorInitializers():e.moduleRef.resolveInjectorInitializers();let r=t.get(ws),i;if(n.runOutsideAngular(()=>{i=n.onError.subscribe({next:r})}),Kg(e)){let n=()=>t.destroy(),r=e.platformInjector.get(Wg);r.add(n),t.onDestroy(()=>{i.unsubscribe(),r.delete(n)})}else{let t=()=>e.moduleRef.destroy(),n=e.platformInjector.get(Wg);n.add(t),e.moduleRef.onDestroy(()=>{Gm(e.allPlatformModules,e.moduleRef),i.unsubscribe(),n.delete(t)})}return Yg(r,n,()=>{let n=t.get(rs),r=n.add(),i=t.get(Jp);return i.runInitializers(),i.donePromise.then(()=>{if(Bh(t.get(Fg,zh)||`en-US`),!t.get(Gg,!0))return Kg(e)?t.get(Um):(e.allPlatformModules.push(e.moduleRef),e.moduleRef);if(Kg(e)){let n=t.get(Um);return e.rootComponent!==void 0&&n.bootstrap(e.rootComponent),n}return Jg?.(e.moduleRef,e.allPlatformModules),e.moduleRef}).finally(()=>void n.remove(r))})})}var Jg;function Yg(e,t,n){try{let r=n();return Mp(r)?r.catch(n=>{throw t.runOutsideAngular(()=>e(n)),n}):r}catch(n){throw t.runOutsideAngular(()=>e(n)),n}}var Xg=null;function Zg(e=[],t){return Zo.create({name:t,providers:[{provide:ia,useValue:`platform`},{provide:Wg,useValue:new Set([()=>Xg=null])},...e]})}function Qg(e=[]){if(Xg)return Xg;let t=Zg(e);return Xg=t,Vm(),$g(t),t}function $g(e){let t=e.get(ks,null);xa(e,()=>{t?.forEach(e=>e())})}function e_(e){let{rootComponent:t,appProviders:n,platformProviders:r,platformRef:i}=e;W(U.BootstrapApplicationStart);try{let e=i?.injector??Qg(r);return qg({r3Injector:new Fp({providers:[Ng(),Ts,...n||[]],parent:e,debugName:``,runEnvironmentInitializers:!1}).injector,platformInjector:e,rootComponent:t})}catch(e){return Promise.reject(e)}finally{W(U.BootstrapApplicationEnd)}}var t_=null;function n_(){return t_}function r_(e){t_??=e}var i_=class{},a_=(()=>{class e{transform(e){return JSON.stringify(e,null,2)}static ɵfac=function(t){return new(t||e)};static ɵpipe=Hp({name:`json`,type:e,pure:!1})}return e})();function o_(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 s_=`browser`,c_=class{_doc;constructor(e){this._doc=e}manager},l_=(()=>{class e extends c_{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)(R(Qo))};static ɵprov=Yr({token:e,factory:e.ɵfac})}return e})(),u_=new L(``),d_=(()=>{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 l_));this._plugins=n.slice().reverse();let r=e.find(e=>e instanceof l_);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 F(-5101,!1);return this._eventNameToPlugin.set(e,t),t}static ɵfac=function(t){return new(t||e)(R(u_),R(ds))};static ɵprov=Yr({token:e,factory:e.ɵfac})}return e})(),f_=`ng-app-id`;function p_(e){for(let t of e)t.remove()}function m_(e,t){let n=t.createElement(`style`);return n.textContent=e,n}function h_(e,t,n,r){let i=e.head?.querySelectorAll(`style[${f_}="${t}"],link[${f_}="${t}"]`);if(!i||i.length===0)return!1;for(let e of i)e.removeAttribute(f_),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 g_(e,t){let n=t.createElement(`link`);return n.setAttribute(`rel`,`stylesheet`),n.setAttribute(`href`,e),n}var __=(()=>{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,h_(e,t,this.inline,this.external)&&this.hosts.add(e.head)}addStyles(e,t){for(let t of e)this.addUsage(t,this.inline,m_);t?.forEach(e=>this.addUsage(e,this.external,g_))}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&&(p_(n.elements),t.delete(e)))}ngOnDestroy(){for(let[,{elements:e}]of[...this.inline,...this.external])p_(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,m_(t,this.doc)));for(let[t,{elements:n}]of this.external)n.push(this.addElement(e,g_(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)(R(Qo),R(Ds),R(js,8),R(As))};static ɵprov=Yr({token:e,factory:e.ɵfac})}return e})(),v_={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`},y_=/%COMP%/g,b_=`%COMP%`,x_=`_nghost-${b_}`,S_=`_ngcontent-${b_}`,C_=!0,w_=new L(``,{factory:()=>C_}),T_=new L(``);function E_(e){return S_.replace(y_,e)}function D_(e){return x_.replace(y_,e)}function O_(e,t){return t.map(t=>t.replace(y_,e))}var k_=(()=>{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 A_(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 P_?n.applyToHost(e):n instanceof N_&&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 Al.Emulated:r=new P_(o,s,t,this.appId,c,i,a,l,this.cssVarNamespace);break;case Al.ShadowDom:return new M_(o,e,t,i,a,this.nonce,l,this.cssVarNamespace,s);case Al.ExperimentalIsolatedShadowDom:return new M_(o,e,t,i,a,this.nonce,l,this.cssVarNamespace);default:r=new N_(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)(R(d_),R(Jf),R(Ds),R(w_),R(Qo),R(ds),R(js),R(bu,8),R(T_,8))};static ɵprov=Yr({token:e,factory:e.ɵfac})}return e})(),A_=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(v_[t]||t,e):this.doc.createElement(e)}createComment(e){return this.doc.createComment(e)}createText(e){return this.doc.createTextNode(e)}appendChild(e,t){(j_(e)?e.content:e).appendChild(t)}insertBefore(e,t,n){if(e){let r=j_(e)?e.content:e;if(n!=null&&n.parentNode!==r)throw new F(-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 F(-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=v_[r];i?e.setAttributeNS(i,t,n):e.setAttribute(t,n)}else e.setAttribute(t,n)}removeAttribute(e,t,n){if(n){let r=v_[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&(uu.DashCase|uu.Important)?e.style.setProperty(t,n,r&uu.Important?`important`:``):e.style[t]=n}removeStyle(e,t,n){let r=t.startsWith(`--`);r&&(t=t.replace(`%NS%`,this.cssVarNamespace)),r||n&uu.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=n_().getGlobalEventTarget(this.doc,e),!e))throw new F(-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 j_(e){return e.tagName===`TEMPLATE`&&e.content!==void 0}var M_=class extends A_{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=O_(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=g_(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)}},N_=class extends A_{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?O_(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&&pu.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},P_=class extends N_{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=E_(l),this.hostAttr=D_(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}},F_=class e extends i_{supportsDOMEvents=!0;static makeCurrent(){r_(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=L_();return t==null?null:R_(t)}resetBaseElement(){I_=null}getUserAgent(){return window.navigator.userAgent}getCookie(e){return o_(document.cookie,e)}},I_=null;function L_(){return I_||=document.head.querySelector(`base`),I_?I_.getAttribute(`href`):null}function R_(e){return new URL(e,document.baseURI).pathname}var z_=[`alt`,`control`,`meta`,`shift`],B_={"\b":`Backspace`," ":`Tab`,"":`Delete`,"\x1B":`Escape`,Del:`Delete`,Esc:`Escape`,Left:`ArrowLeft`,Right:`ArrowRight`,Up:`ArrowUp`,Down:`ArrowDown`,Menu:`ContextMenu`,Scroll:`ScrollLock`,Win:`OS`},V_={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},H_=(()=>{class e extends c_{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(()=>n_().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.`),z_.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=B_[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`),z_.forEach(t=>{if(t!==n){let n=V_[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)(R(Qo))};static ɵprov=Yr({token:e,factory:e.ɵfac})}return e})();async function U_(e,t,n){return e_({rootComponent:e,...W_(t,n)})}function W_(e,t){return{platformRef:t?.platformRef,appProviders:[...Y_,...e?.providers??[]],platformProviders:J_}}function G_(){F_.makeCurrent()}function K_(){return new Cs}function q_(){return hl(document),document}var J_=[{provide:As,useValue:s_},{provide:ks,useValue:G_,multi:!0},{provide:Qo,useFactory:q_}],Y_=[{provide:ia,useValue:`root`},{provide:Cs,useFactory:K_},{provide:u_,useClass:l_,multi:!0},{provide:u_,useClass:H_,multi:!0},k_,{provide:Jf,useClass:__},{provide:__,useExisting:Jf},d_,{provide:jf,useExisting:k_},[]];function X_(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 ev({code:i,why:Q_(a.why,e),fix:Q_(a.fix,e),docs:o,cause:e.cause,sources:e.sources},s);for(let e of t)e(r,n);return r};n[i]=s}return n}function rv(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 lv=Math.random.bind(Math),uv=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function dv(e=21){let t=``,n=e;for(;n--;)t+=uv[lv()*64|0];return t}var fv=6e4,pv=e=>e,mv=pv,{clearTimeout:hv,setTimeout:gv}=globalThis;function _v(e,t){let{post:n,on:r,off:i=()=>{},eventNames:a=[],serialize:o=pv,deserialize:s=mv,resolver:c,bind:l=`rpc`,timeout:u=fv,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}=cv(),_=dv();s.i=_;let v;async function y(n=s){return u>=0&&(v=gv(()=>{try{if(t.onTimeoutError?.call(h,e,r)!==!0)throw Error(`[birpc] timeout on calling "${e}"`)}catch(e){g(e)}p.delete(_)},u),typeof v==`object`&&(v=v.unref?.())),p.set(_,{resolve:d,reject:g,timeoutId:v,method:e}),await c(n),l}try{t.onRequest?await t.onRequest.call(h,s,y,d):await y()}catch(e){if(t.onGeneralError?.call(h,e)!==!0)throw e;return}finally{hv(v),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:y,get $closed(){return f},get $meta(){return t.meta},$close:v,$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 v(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(b)}function y(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 b(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&&(hv(r.timeoutId),n?r.reject(n):r.resolve(t)),p.delete(e)}}return m=r(b),h}function vv(e,t){return t.safety?t.safety:e===`static`||e===`query`||e==null?`read`:`action`}var yv=Object.freeze({type:`object`,additionalProperties:!0});function bv(e){let t=e[`~standard`];if(t.jsonSchema)try{return t.jsonSchema.input({target:`draft-2020-12`})}catch{return yv}return yv}function xv(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 Cv(e,t){return Sv(e,t)??[e]}function wv(e){return typeof e==`string`?`'${e}'`:new Ov().serialize(e)}var Tv=` _-,;:!?.'"()[]{}@*/\\&#%\`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz`,Ev=(function(){let e=new Uint8Array(128);for(let t=0;t<69;t++)e[Tv.charCodeAt(t)]=t+1;for(let t=65;t<=90;t++)e[t]=e[t+32];return e})();function Dv(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})(),kv=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],Av=[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],jv=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`,Mv=[],Nv=class{_data=new Pv;_hash=new Pv([...kv]);_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)Mv[n]=e[t+n]|0;else{let e=Mv[n-15],t=(e<<25|e>>>7)^(e<<14|e>>>18)^e>>>3,r=Mv[n-2],i=(r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10;Mv[n]=t+Mv[n-7]+i+Mv[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+Av[n]+Mv[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=Pv.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 Fv(e){return new Nv().finalize(e).toBase64()}function Iv(e){return Fv(wv(e))}function Lv(e){return Iv(e)}function Rv(){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 zv=/^[\w+.-]{2,}:\/\//;function Bv(e){return e.endsWith(`/`)?e:`${e}/`}function Vv(e){return(e.endsWith(`/`)?e.slice(0,-1):e)||`/`}function Hv(e,...t){let n=e;for(let e of t)e&&e!==`/`&&(n=n?Bv(n)+e.replace(/^\.?\//,``):e);return n}function Uv(e,t){if(!t||t===`/`||zv.test(e))return e;let n=Vv(t);return e.startsWith(n)?e:Hv(n,e)}function Wv(e,t){let n=e.match(zv);return t+(n?e.slice(n[0].length):e)}var Gv=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function Kv(e=21){let t=``,n=e;for(;n--;)t+=Gv[Math.random()*64|0];return t}var qv=Symbol.for(`immer-nothing`),Jv=Symbol.for(`immer-draftable`),Yv=Symbol.for(`immer-state`),Xv=[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 Zv(e,...t){{let n=Xv[e],r=xy(n)?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}}var Qv=Object,$v=Qv.getPrototypeOf,ey=`constructor`,ty=`prototype`,ny=`configurable`,ry=`enumerable`,iy=`writable`,ay=`value`,oy=e=>!!e&&!!e[Yv];function sy(e){return e?uy(e)||_y(e)||!!e[Jv]||!!e[ey]?.[Jv]||vy(e)||yy(e):!1}var cy=Qv[ty][ey].toString(),ly=new WeakMap;function uy(e){if(!e||!by(e))return!1;let t=$v(e);if(t===null||t===Qv[ty])return!0;let n=Qv.hasOwnProperty.call(t,ey)&&t[ey];if(n===Object)return!0;if(!xy(n))return!1;let r=ly.get(n);return r===void 0&&(r=Function.toString.call(n),ly.set(n,r)),r===cy}function dy(e,t,n=!0){fy(e)===0?(n?Reflect.ownKeys(e):Qv.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function fy(e){let t=e[Yv];return t?t.type_:_y(e)?1:vy(e)?2:yy(e)?3:0}var py=(e,t,n=fy(e))=>n===2?e.has(t):Qv[ty].hasOwnProperty.call(e,t),my=(e,t,n=fy(e))=>n===2?e.get(t):e[t],hy=(e,t,n,r=fy(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function gy(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var _y=Array.isArray,vy=e=>e instanceof Map,yy=e=>e instanceof Set,by=e=>typeof e==`object`,xy=e=>typeof e==`function`,Sy=e=>typeof e==`boolean`;function Cy(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var wy=e=>by(e)?e?.[Yv]:null,Ty=e=>e.copy_||e.base_,Ey=e=>e.modified_?e.copy_:e.base_;function Dy(e,t){if(vy(e))return new Map(e);if(yy(e))return new Set(e);if(_y(e))return Array[ty].slice.call(e);let n=uy(e);if(t===!0||t===`class_only`&&!n){let t=Qv.getOwnPropertyDescriptors(e);delete t[Yv];let n=Reflect.ownKeys(t);for(let r=0;r1&&Qv.defineProperties(e,{set:Ay,add:Ay,clear:Ay,delete:Ay}),Qv.freeze(e),t&&dy(e,(e,t)=>{Oy(t,!0)},!1),e)}function ky(){Zv(2)}var Ay={[ay]:ky};function jy(e){return e===null||!by(e)||Qv.isFrozen(e)}var My=`MapSet`,Ny=`Patches`,Py=`ArrayMethods`,Fy={};function Iy(e){let t=Fy[e];return t||Zv(0,e),t}var Ly=e=>!!Fy[e];function Ry(e,t){Fy[e]||(Fy[e]=t)}var zy,By=()=>zy,Vy=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:Ly(My)?Iy(My):void 0,arrayMethodsPlugin_:Ly(Py)?Iy(Py):void 0});function Hy(e,t){t&&(e.patchPlugin_=Iy(Ny),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Uy(e){Wy(e),e.drafts_.forEach(Ky),e.drafts_=null}function Wy(e){e===zy&&(zy=e.parent_)}var Gy=e=>zy=Vy(zy,e);function Ky(e){let t=e[Yv];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function qy(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[Yv].modified_&&(Uy(t),Zv(4)),sy(e)&&(e=Jy(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[Yv].base_,e,t)}else e=Jy(t,n);return Yy(t,e,!0),Uy(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===qv?void 0:e}function Jy(e,t){if(jy(t))return t;let n=t[Yv];if(!n)return rb(t,e.handledSet_,e);if(!Zy(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);tb(n,e)}return n.copy_}function Yy(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Oy(t,n)}function Xy(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var Zy=(e,t)=>e.scope_===t,Qy=[];function $y(e,t,n,r){let i=Ty(e),a=e.type_;if(r!==void 0&&my(i,r,a)===t){hy(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;dy(i,(e,n)=>{if(oy(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??Qy;for(let e of o)hy(i,e,n,a)}function eb(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!Zy(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=Ey(i);$y(e,i.draft_??i,a,n),tb(i,r)})}function tb(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)}Xy(e)}}function nb(e,t,n){let{scope_:r}=e;if(oy(n)){let i=n[Yv];Zy(i,r)&&i.callbacks_.push(function(){fb(e),$y(e,n,Ey(i),t)})}else sy(n)&&e.callbacks_.push(function(){let i=Ty(e);e.type_===3?i.has(n)&&rb(n,r.handledSet_,r):my(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&rb(my(e.copy_,t,e.type_),r.handledSet_,r)})}function rb(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||oy(e)||t.has(e)||!sy(e)||jy(e)?e:(t.add(e),dy(e,(r,i)=>{if(oy(i)){let t=i[Yv];Zy(t,n)&&(hy(e,r,Ey(t),e.type_),Xy(t))}else sy(i)&&rb(i,t,n)}),e)}function ib(e,t){let n=_y(e),r={type_:+!!n,scope_:t?t.scope_:By(),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=ab;n&&(i=[r],a=ob);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var ab={get(e,t){if(t===Yv)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=Ty(e);if(!py(i,t,e.type_))return lb(e,i,t);let a=i[t];if(e.finalized_||!sy(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&Cy(t))return a;if(a===sb(e.base_,t)||cb(e,t,a)){fb(e);let n=e.type_===1?+t:t,r=mb(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in Ty(e)},ownKeys(e){return Reflect.ownKeys(Ty(e))},set(e,t,n){let r=ub(Ty(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=sb(Ty(e),t),i=r?.[Yv];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.set(t,!1),!0;if(gy(n,r)&&(n!==void 0||py(e.base_,t,e.type_)))return!0;fb(e),db(e)}return e.copy_[t]===n&&(n!==void 0||py(e.copy_,t,e.type_))||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_.set(t,!0),nb(e,t,n),!0)},deleteProperty(e,t){return fb(e),sb(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),db(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=Ty(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[iy]:!0,[ny]:e.type_!==1||t!==`length`,[ry]:r[ry],[ay]:n[t]}},defineProperty(){Zv(11)},getPrototypeOf(e){return $v(e.base_)},setPrototypeOf(){Zv(12)}},ob={};for(let e in ab){let t=ab[e];ob[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}ob.deleteProperty=function(e,t){return isNaN(parseInt(t))&&Zv(13),ob.set.call(this,e,t,void 0)},ob.set=function(e,t,n){return t!==`length`&&isNaN(parseInt(t))&&Zv(14),ab.set.call(this,e[0],t,n,e[0])};function sb(e,t){let n=e[Yv];return(n?Ty(n):e)[t]}function cb(e,t,n){return e.type_!==1||!e.allIndicesReassigned_||e.assigned_?.get(t)||!sy(n)||n[Yv]?!1:e.baseRefs_.has(n)}function lb(e,t,n){let r=ub(t,n);return r?ay in r?r[ay]:r.get?.call(e.draft_):void 0}function ub(e,t){if(!(t in e))return;let n=$v(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=$v(n)}}function db(e){e.modified_||(e.modified_=!0,e.parent_&&db(e.parent_))}function fb(e){e.copy_||=(e.assigned_=new Map,Dy(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var pb=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(xy(e)&&!xy(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}xy(t)||Zv(6),n!==void 0&&!xy(n)&&Zv(7);let r;if(sy(e)){let i=Gy(this),a=mb(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?Uy(i):Wy(i)}return Hy(i,n),qy(r,i)}if(!e||!by(e)){if(r=t(e),r===void 0&&(r=e),r===qv&&(r=void 0),this.autoFreeze_&&Oy(r,!0),n){let t=[],i=[];Iy(Ny).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}Zv(1,e)},this.produceWithPatches=(e,t)=>{if(xy(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]},Sy(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),Sy(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),Sy(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){sy(e)||Zv(8),oy(e)&&(e=hb(e));let t=Gy(this),n=mb(t,e,void 0);return n[Yv].isManual_=!0,Wy(t),n}finishDraft(e,t){let n=e&&e[Yv];(!n||!n.isManual_)&&Zv(9);let{scope_:r}=n;return Hy(r,t),qy(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=Iy(Ny).applyPatches_;return oy(e)?r(e,t):this.produce(e,e=>r(e,t))}};function mb(e,t,n,r){let[i,a]=vy(t)?Iy(My).proxyMap_(t,n):yy(t)?Iy(My).proxySet_(t,n):ib(t,n);return(n?.scope_??By()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?eb(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 hb(e){return oy(e)||Zv(10,e),gb(e)}function gb(e){if(!sy(e)||jy(e))return e;let t=e[Yv],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Dy(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Dy(e,!0);return dy(n,(e,t)=>{hy(n,e,gb(t))},r),t&&(t.finalized_=!1),n}function _b(){Xv.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=wy(my(e,n.key_)),i=my(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||py(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=my(o,e,c),f=my(s,e,c),p=l?py(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===qv?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(yy(e))return new Set(Array.from(e).map(u));let t=Object.create($v(e));for(let n in e)t[n]=u(e[n]);return py(e,Jv)&&(t[Jv]=e[Jv]),t}function d(e){return oy(e)?u(e):e}Ry(Ny,{applyPatches_:l,generatePatches_:i,generateReplacementPatches_:c,getPath:e})}globalThis.Iterator?.from;var vb=new pb,yb=vb.produce,bb=vb.produceWithPatches.bind(vb),xb=vb.applyPatches.bind(vb),Sb=1e3;function Cb(e,t){if(e.add(t),e.size>Sb){let t=e.values().next().value;t!==void 0&&e.delete(t)}}function wb(e){let{enablePatches:t=!1}=e;t&&_b();let n=Rv(),r=e.initialValue,i=new Set;return{on:n.on,value:()=>r,patch:(e,t=Kv())=>{i.has(t)||(_b(),r=xb(r,e),Cb(i,t),n.emit(`updated`,r,void 0,t))},mutate:(e,a=Kv())=>{if(!i.has(a)){if(Cb(i,a),t){let[t,i]=bb(r,e);if(t===r)return;r=t,n.emit(`updated`,r,i,a)}else{let t=yb(r,e);if(t===r)return;r=t,n.emit(`updated`,r,void 0,a)}}},syncIds:i}}var Tb=typeof self==`object`?self:globalThis,Eb=new Set([`Error`,`EvalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`,`AggregateError`]),Db=new Set([`Boolean`,`Number`,`String`,`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float16Array`,`Float32Array`,`Float64Array`,`BigInt64Array`,`BigUint64Array`]);function Ob(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=Eb.has(e)?Tb[e]:void 0;return n(new(r??Tb.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`&&Db.has(a))return n(new Tb[a](o),i);throw TypeError(`unable to deserialize unsafe or unknown type: ${String(a)}`)};return r}function kb(e){return Ob(new Map,e)(0)}var Ab=``,{toString:jb}={},{keys:Mb}=Object;function Nb(e){let t=typeof e;if(t!==`object`||!e)return[0,t];let n=jb.call(e).slice(8,-1);switch(n){case`Array`:return[1,Ab];case`Object`:return[2,Ab];case`Date`:return[3,Ab];case`RegExp`:return[4,Ab];case`Map`:return[5,Ab];case`Set`:return[6,Ab];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]}function Pb([e,t]){return e===0&&(t===`function`||t===`symbol`)}function Fb(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]=Nb(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 Mb(r))(e||!Pb(Nb(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||!(Pb(Nb(n))||Pb(Nb(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!Pb(Nb(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a}function Ib(e,t={}){let n=[];return Fb(!(t.json||t.lossy),!!t.json,new Map,n)(e),n}var{parse:Lb,stringify:Rb}=JSON,zb={json:!0,lossy:!0};function Bb(e){return kb(Lb(e))}function Vb(e){return Rb(Ib(e,zb))}function Hb(e){return kb(e)}function Ub(e){return Vb(e)}function Wb(e){return Bb(e)}var Gb=256,Kb=class extends Error{name=`StreamClosedError`};function qb(e={}){let t=e.id??Kv(),n=Math.max(0,e.replayWindow??0),r=Rv(),i=new AbortController,a=[],o=!1,s=0;function c(e){if(o)throw new Kb(`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=Yb(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 Jb(e={}){let t=e.id??Kv(),n=Math.max(1,e.highWaterMark??Gb),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 Yb(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 Xb=128;function Zb(e){return e.replace(/[^\w-]+/g,`_`).slice(0,Xb)}var Qb=`modulepreload`,$b=function(e,t){return new URL(e,t).href},ex={},tx=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=$b(t,n),t=s(t),t in ex)return;ex[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`:Qb,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)})},nx=`__connection.json`,rx=`__DEVFRAME_CONNECTION__`,ix=`x-birpc-session`,ax=`__rpc-dump/index.json`,ox=`devframe:services`,sx=`devframe_otp`,cx=`devframe_auth_token`;iv.postMessage.remoteAssetsError;var lx=class{cacheMap=new Map;options;keySerializer;constructor(e){this.options=e,this.keySerializer=e.keySerializer||(e=>Lv(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()}},ux=sv({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 dx(e){if(e.agent&&e.jsonSerializable===!1)throw ux.DF0019({name:e.name});e.agent&&!e.jsonSerializable&&(e.jsonSerializable=!0)}async function fx(e,t){let n=e[`~standard`].validate(t);return n instanceof Promise?await n:n}function px(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 mx(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 _x(e,t){let n=e.handler;if(!n){let r=await gx(e,t);if(!r.handler)throw ux.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 mx(e.name,r,t),o=await a(...n);return await hx(e.name,i,o)}}var vx=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 _x(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 ux.DF0021({name:e.name});dx(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 ux.DF0022({name:e.name});dx(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 _x(this.definitions.get(e),this.context)}getSchema(e){let t=this.definitions.get(e);if(!t)throw ux.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 yx(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 xx(t,`undefined`,r,e);return n}return i!==null&&bx(i,r,e,t),n})}function bx(e,t,n,r){if(typeof e==`bigint`)throw xx(r,`BigInt`,t,n);if(typeof e!=`object`)return;if(e instanceof Map)throw xx(r,`Map`,t,n);if(e instanceof Set)throw xx(r,`Set`,t,n);if(e instanceof Date)throw xx(r,`Date`,t,n);if(Array.isArray(e))return;let i=Object.getPrototypeOf(e);if(i!==null&&i!==Object.prototype)throw xx(r,e.constructor?.name??`class instance`,t,n)}function xx(e,t,n,r){let i=Sx(n,r);return ux.DF0020({name:e||``,type:t,path:i})}function Sx(e,t){return Array.isArray(e)?`[${t}]`:t===``?``:t}var Cx=`__DEVFRAME_CONNECTION_META__`,wx=`__DEVFRAME_CONNECTION_AUTH_TOKEN__`;function Tx(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 Ex(){return Tx(rx)}function Dx(){return Tx(Cx)}function Ox(e){if(e)return e;try{let e=localStorage.getItem(wx);if(e)return e}catch{}return Tx(wx)}function kx(e){globalThis[rx]=e,globalThis[Cx]={...e.connectionMeta,baseUrl:e.metaBaseUrl},e.authToken&&Ax(e.authToken)}function Ax(e){try{localStorage.setItem(wx,e)}catch{}globalThis[wx]=e;let t=Ex();t&&(globalThis[rx]={...t,authToken:e})}function jx(e){let t=Uv(nx,e);try{return new URL(t,globalThis.location?.href).href}catch{return t}}function Mx(e,t){return t&&t!==e.authToken?{...e,authToken:t}:e}function Nx(){let e=Ex();if(e)return Mx(e,Ox()??e.authToken??e.connectionMeta.authToken);let t=Dx();if(t)return{connectionMeta:t,metaBaseUrl:t.baseUrl??jx(`./`),authToken:Ox(t.authToken)}}async function Px(e={}){if(e.connection){let t=Mx(e.connection,Ox(e.authToken??e.connection.authToken??e.connection.connectionMeta.authToken));return kx(t),t}let t=Array.isArray(e.baseURL)?e.baseURL:[e.baseURL??`./`];if(e.connectionMeta){let n={connectionMeta:e.connectionMeta,metaBaseUrl:jx(t[0]??`./`),authToken:Ox(e.authToken??e.connectionMeta.authToken)};return kx(n),n}let n=Nx();if(n){let t=Mx(n,Ox(e.authToken??n.authToken??n.connectionMeta.authToken));return kx(t),t}let r=[];for(let n of t){let t=Uv(nx,n),i=jx(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:Ox(e.authToken??r.authToken)};return kx(o),o}catch(e){r.push(e)}}throw Error(`Failed to get connection meta from ${t.join(`, `)}`,{cause:r})}var Fx=class extends Error{name=`DevframeConnectionError`;kind;constructor(e,t,n){super(t,n),this.kind=e}};function Ix(e=sx){try{let t=globalThis.location?.hash?.replace(/^#/,``)??``;return new URLSearchParams(t).get(e)||void 0}catch{return}}function Lx(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 Rx(e=sx){let t=Ix(e);return t&&Lx(e),t}async function zx(e,t={}){let n=Rx(t.param??`devframe_otp`);return n?e.isTrusted?!0:e.requestTrustWithCode(n):!1}function Bx(e){let t={},n=new WeakMap,r,i=()=>(r??=e.sharedState.get(ox,{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 Vx(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:iv.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:iv.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=wb({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(iv.client.isTrustedUpdated,e=>{e&&!n&&(n=!0,d())})}})}}}var Hx=new Map;function Ux(e=Hx){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?yx(n,r??``):`s:${Ub(n)}`},deserialize:e=>{let n=e.startsWith(`s:`)?Wb(e.slice(2)):JSON.parse(e);return n.t===`q`&&n.i&&n.m&&t.set(n.i,n.m),n}}}function Wx(){}function Gx(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 Kx(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 qx(e){let{onConnected:t=Wx,onError:n=Wx,onDisconnected:r=Wx,definitions:i,fetch:a=globalThis.fetch.bind(globalThis)}=e,o=e.url;e.authToken&&(o=`${o}${o.includes(`?`)?`&`:`?`}${cx}=${encodeURIComponent(e.authToken)}`);let s=Ux(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 v(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=Gx(r);if(!e)break;r=e.rest;let{event:t,data:n}=Kx(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 v(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`,[ix]: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 Jx(e,t){let{channel:n,rpcOptions:r={}}=t;return _v(e,{...n,timeout:-1,...r,proxify:!1})}function Yx(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(iv.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 Fx(`connection`,`[devframe] Not connected to the devframe server`,{cause:u??void 0}):l===`unauthorized`?new Fx(`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(iv.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 Fx(`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(iv.client.error,n,t),r(n)})})}let _=new Map;for(let e of r.jsonSerializableMethods??[])_.set(e,{jsonSerializable:!0});let v=e.createChannel({definitions:_,onError(e){f(`error`,e),i.emit(iv.client.connectionError,e),m(new Fx(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){l!==`error`&&f(`disconnected`),m(new Fx(`connection`,`[devframe] Disconnected from the devframe server`,{cause:u??void 0}))}}),y=Jx(a.functions,{channel:v,rpcOptions:o});a.register({name:iv.broadcast.authRevoked,type:`event`,handler:()=>{c=!1;let e=new Fx(`auth`,`[devframe] The devframe server revoked this client's trust`);f(`unauthorized`,e),i.emit(iv.client.connectionError,e),m(e),i.emit(iv.client.isTrustedUpdated,!1)}});let b=n;async function x(e){b=e;let t=await y.$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 Fx(`auth`,`[devframe] The devframe server refused this client's credentials`);f(`unauthorized`,e),i.emit(iv.client.connectionError,e)}return i.emit(iv.client.isTrustedUpdated,c),t.isTrusted}async function S(e){let t=(await y.$call(`anonymous:devframe:auth:exchange`,{code:e,ua:navigator.userAgent,origin:location.origin}))?.authToken??null;return t&&(b=t,c=!0,d.resolve(!0),f(`connected`),i.emit(iv.client.isTrustedUpdated,!0)),t}async function ee(e={}){await y.$call(`anonymous:devframe:auth:request-code`,{ua:navigator.userAgent,origin:location.origin,...e.reissue?{reissue:!0}:{}})}async function C(){return c?!0:x(b??``)}async function w(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:C,requestTrustWithToken:x,requestTrustWithCode:S,requestAuthCode:ee,ensureTrusted:w,call:(...e)=>{let t=String(e[0]),n=h();return n?(i.emit(iv.client.error,n,t),Promise.reject(n)):g(y.$call(...e),t)},callEvent:(...e)=>{let t=h();if(t){i.emit(iv.client.error,t,String(e[0]));return}return y.$callEvent(...e)},callOptional:(...e)=>{let t=String(e[0]),n=h();return n?(i.emit(iv.client.error,n,t),Promise.reject(n)):g(y.$callOptional(...e),t)},close:()=>{v.close()}}}function Xx(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 Zx(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=Xx(n.sse,r??`./`,location);return Yx({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>qx({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 Qx(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:$x(r)?Qx(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function $x(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function eS(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function tS(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function nS(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function rS(e){if(e.error)throw Qx(e.error);return e.output}function iS(e){return e.some(e=>e!=null)}function aS(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function oS(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?Hb(e):e}function a(e,t){return i(aS(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 nS(r)?rS(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(eS(r)){if(iS(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(tS(r)){let e=Lv(n),i=r.records[e];if(i)return rS(await s(i,r.serialization));if(r.fallback)return rS(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!iS(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 sS(e){let t=oS(await e.fetchJsonFromBases(ax),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 cS=``;function lS(e,t){return`${e}${cS}${t}`}function uS(e){let t=new Map,n=new Map;e.client.register({name:iv.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(lS(e,n))?._push(r,i)}}),e.client.register({name:iv.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=lS(e,n),a=t.get(i);a&&(a._end(r),t.delete(i))}}),e.client.register({name:iv.broadcast.streamingUploadCancel,type:`event`,handler(e,t){let r=lS(e,t),i=n.get(r);i&&(i.abort(`server cancelled upload`),n.delete(r))}}),e.events.on(iv.client.isTrustedUpdated,n=>{if(n)for(let[n,r]of t){if(r.cancelled||r.done)continue;let t=n.indexOf(cS);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=lS(n,r),o=t.get(a);if(o)return o;let s=Jb({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(iv.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=lS(t,r),a=n.get(i);if(a)return a;let o=qb({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 dS(){}var fS=new Map;function pS(e){let t=e.url;e.authToken&&(t=`${t}?${cx}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=dS,onError:i=dS,onDisconnected:a=dS,definitions:o=fS}=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=Ux(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 mS(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 Wv(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function hS(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=mS(n.websocket,r??`./`,location);return Yx({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>pS({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 gS(e){return e.includes(`:`)}function _S(e,t){return gS(t)?t:`${e}:${t}`}function vS(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 yS(e,t,n){let r=`devframe:settings:${n}:${t}`,i;function a(){return i||=e.sharedState.get(r,{initialValue:{}}),i}return vS(a)}function bS(e,t){return{global:yS(e,t,`global`),project:yS(e,t,`project`)}}function xS(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(gS(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(_S(t,n),...r)),callEvent:((n,...r)=>e.callEvent(_S(t,n),...r)),callOptional:((n,...r)=>e.callOptional(_S(t,n),...r)),sharedState:((n,r)=>e.sharedState.get(_S(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe(_S(t,n),r,i),upload:(n,r)=>e.streaming.upload(_S(t,n),r)}},settings:bS(e,t),scope:e.scope}}function SS(){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 CS(e,t={}){let n=t.modelContext??SS();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=Zb(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=vv(t.type,n),u=r.registerTool({name:o,description:n.description,inputSchema:xv(t.args),annotations:{title:n.title??t.name,readOnlyHint:l===`read`,destructiveHint:l===`destructive`},execute:n=>wS(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 wS(e,t,n){try{let r=Cv(n,e.args?.length);return{content:[{type:`text`,text:TS(await(await _x(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:ES(e)}]}}}function TS(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function ES(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 DS(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 OS(e={}){let{baseURL:t=`./`,rpcOptions:n={},cacheOptions:r=!1}=e,i=Rv(),a=Array.isArray(t)?t:[t],o=await Px(e),{connectionMeta:s,metaBaseUrl:c,authToken:l}=o,u=a[0]??`./`;try{u=new URL(`.`,c).href}catch{}let d=new lx({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),f={rpc:void 0},p=new vx(f),m=e.webmcp===!1?void 0:CS(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(Uv(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 v={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)}}},y=DS(e.transport??`auto`,s),b=y===`static`?await sS({fetchJsonFromBases:_}):y===`sse`?Zx({...v,sseOptions:e.sseOptions}):hS({...v,wsOptions:e.wsOptions}),x;try{x=new BroadcastChannel(`devframe-auth`)}catch{}let S,ee=!1;function C(e){return((...t)=>ee||!S?e(...t):S.then(()=>e(...t)))}function w(){g=!0;try{h?.(),m?.()}finally{try{x?.close()}finally{b.close?.()}}}let T={events:i,get isTrusted(){return b.isTrusted},get status(){return b.status},get connectionError(){return b.connectionError},get transport(){return b.transport??y},get connection(){return o},connectionMeta:s,ensureTrusted:b.ensureTrusted,requestTrust:b.requestTrust,requestTrustWithToken:async e=>(Ax(e),o={...o,authToken:e},b.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await b.requestTrustWithCode(e);if(!t)return!1;Ax(t),o={...o,authToken:t};try{x?.postMessage({type:`auth-update`,authToken:t})}catch{}return!0},requestAuthCode:e=>b.requestAuthCode(e),call:C(b.call),callEvent:C(b.callEvent),callOptional:C(b.callOptional),client:p,sharedState:void 0,services:void 0,streaming:void 0,cacheManager:d,scope:void 0,close:w};T.sharedState=Vx(T),T.streaming=uS(T),T.services=Bx(T);let te=new Map;T.scope=(e=>{if(!e)return T;let t=te.get(e);return t||(t=xS(T,e),te.set(e,t)),t}),f.rpc=T;function E(){try{return typeof window<`u`&&window.self===window.top}catch{return!1}}async function ne(){if(e.simpleAuth!==!1&&E()&&typeof globalThis.prompt==`function`)for(await T.requestAuthCode().catch(()=>{});!T.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 T.requestTrustWithCode(t))return}}async function D(){let t=await b.requestTrust(),n=e.otpParam??`devframe_otp`,r=n?await zx(T,{param:n}):!1;t||r||T.isTrusted||await ne()}return S=D().then(()=>{ee=!0},()=>{ee=!0}),s.mcp&&tx(async()=>{let{setupBrowserAgentRpcBridge:e}=await import(`./browser-agent-rpc-BXhoSh1z-DT7_jkxB.js`);return{setupBrowserAgentRpcBridge:e}},[],import.meta.url).then(({setupBrowserAgentRpcBridge:e})=>{g||(h=e(T))}).catch(()=>{}),x&&(x.onmessage=e=>{e.data?.type===`auth-update`&&e.data.authToken&&T.requestTrustWithToken(e.data.authToken)}),T}var kS=OS,AS=class e{rpc=Ug(null);navigate=Bg();meta=H(null);componentCount=H(0);routeCount=H(0);signalCount=H(0);providerCount=H(0);storeCount=H(0);constructor(){Bs(()=>{let e=this.rpc();if(!e)return;let t=e.scope(`ng-devtools`);t.rpc.call(`build-meta`).then(e=>this.meta.set(e)).catch(()=>{}),t.rpc.call(`get-components`).then(e=>this.componentCount.set(e.length)).catch(()=>{}),t.rpc.call(`get-routes`).then(e=>this.routeCount.set(e.length)).catch(()=>{}),t.rpc.call(`get-signals`).then(e=>this.signalCount.set(e.length)).catch(()=>{}),t.rpc.call(`get-providers`).then(e=>this.providerCount.set(e.length)).catch(()=>{}),t.rpc.call(`get-ngrx-store`).then(e=>this.storeCount.set(e.length)).catch(()=>{})})}static ɵfac=function(t){return new(t||e)};static ɵcmp=Rp({type:e,selectors:[[`app-dashboard`]],inputs:{rpc:[1,`rpc`]},outputs:{navigate:`navigate`},decls:56,vars:9,consts:[[1,`grid`],[1,`card`],[1,`card`,`clickable`,3,`click`],[1,`big`],[1,`sub`]],template:function(e,t){e&1&&(J(0,`div`,0)(1,`div`,1)(2,`h3`),Z(3,`Project`),Y(),J(4,`dl`)(5,`dt`),Z(6,`Name`),Y(),J(7,`dd`),Z(8),Y(),J(9,`dt`),Z(10,`Angular`),Y(),J(11,`dd`),Z(12),Y(),J(13,`dt`),Z(14,`TypeScript`),Y(),J(15,`dd`),Z(16),Y(),J(17,`dt`),Z(18,`SSR`),Y(),J(19,`dd`),Z(20),Y()()(),J(21,`div`,2),Hh(`click`,function(){return t.navigate.emit(`components`)}),J(22,`h3`),Z(23,`Components`),Y(),J(24,`p`,3),Z(25),Y(),J(26,`p`,4),Z(27,`discovered in source`),Y()(),J(28,`div`,2),Hh(`click`,function(){return t.navigate.emit(`routes`)}),J(29,`h3`),Z(30,`Routes`),Y(),J(31,`p`,3),Z(32),Y(),J(33,`p`,4),Z(34,`registered paths`),Y()(),J(35,`div`,2),Hh(`click`,function(){return t.navigate.emit(`signals`)}),J(36,`h3`),Z(37,`Signals`),Y(),J(38,`p`,3),Z(39),Y(),J(40,`p`,4),Z(41,`reactive primitives`),Y()(),J(42,`div`,2),Hh(`click`,function(){return t.navigate.emit(`injectors`)}),J(43,`h3`),Z(44,`Injectors`),Y(),J(45,`p`,3),Z(46),Y(),J(47,`p`,4),Z(48,`DI providers`),Y()(),J(49,`div`,2),Hh(`click`,function(){return t.navigate.emit(`store`)}),J(50,`h3`),Z(51,`NgRx Store`),Y(),J(52,`p`,3),Z(53),Y(),J(54,`p`,4),Z(55,`store entries`),Y()()()),e&2&&(G(8),Q(t.meta()?.projectName??`…`),G(4),Q(t.meta()?.angularVersion??`…`),G(4),Q(t.meta()?.typescript??`…`),G(4),Q(t.meta()?.ssr?`Yes`:`No`),G(5),Q(t.componentCount()),G(7),Q(t.routeCount()),G(7),Q(t.signalCount()),G(7),Q(t.providerCount()),G(7),Q(t.storeCount()))},styles:[`.grid[_ngcontent-%COMP%] { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); + gap: 16px; + } + .card[_ngcontent-%COMP%] { + background: #18181b; + border: 1px solid #27272a; + border-radius: 10px; + padding: 20px; + } + .card.clickable[_ngcontent-%COMP%] { + cursor: pointer; + transition: border-color 0.15s; + } + .card.clickable[_ngcontent-%COMP%]:hover { + border-color: var(--%NS%accent); + } + h3[_ngcontent-%COMP%] { + font-size: 13px; + text-transform: uppercase; + color: #71717a; + margin-bottom: 12px; + letter-spacing: 0.05em; + } + dl[_ngcontent-%COMP%] { + display: grid; + grid-template-columns: auto 1fr; + gap: 6px 12px; + font-size: 14px; + } + dt[_ngcontent-%COMP%] { + color: #a1a1aa; + } + dd[_ngcontent-%COMP%] { + color: #e4e4e7; + font-weight: 500; + } + .big[_ngcontent-%COMP%] { + font-size: 36px; + font-weight: 700; + color: var(--%NS%accent); + } + .sub[_ngcontent-%COMP%] { + font-size: 13px; + color: #71717a; + margin-top: 4px; + }`]})},jS=(e,t)=>t.selector,MS=(e,t)=>t.token+t.line;function NS(e,t){e&1&&(J(0,`p`,3),Z(1,`Scanning components…`),Y())}function PS(e,t){e&1&&(J(0,`p`,3),Z(1,`No components found.`),Y())}function FS(e,t){if(e&1&&(J(0,`div`,10)(1,`span`,11),Z(2,`Inputs:`),Y(),Z(3),Y()),e&2){let e=X().$implicit;G(3),$(` `,e.inputs.join(`, `),` `)}}function IS(e,t){if(e&1&&(J(0,`div`,10)(1,`span`,11),Z(2,`Outputs:`),Y(),Z(3),Y()),e&2){let e=X().$implicit;G(3),$(` `,e.outputs.join(`, `),` `)}}function LS(e,t){if(e&1){let e=Lh();J(0,`li`,7),Hh(`click`,function(){let t=co(e).$implicit;return lo(X(2).select(t))}),J(1,`div`,8),Z(2),Y(),J(3,`div`,9),Z(4),Y(),K(5,FS,4,1,`div`,10),K(6,IS,4,1,`div`,10),Y()}if(e&2){let e=t.$implicit;G(2),$(`<`,e.selector,`>`),G(2),Q(e.file),G(),q(e.inputs.length?5:-1),G(),q(e.outputs.length?6:-1)}}function RS(e,t){if(e&1&&(J(0,`ul`,4),hh(1,LS,7,4,`li`,6,jS),Y()),e&2){let e=X();G(),_h(e.filtered())}}function zS(e,t){if(e&1&&(J(0,`dt`),Z(1,`Inputs`),Y(),J(2,`dd`),Z(3),Y()),e&2){let e=X(2);G(3),Q(e.selected().inputs.join(`, `))}}function BS(e,t){if(e&1&&(J(0,`dt`),Z(1,`Outputs`),Y(),J(2,`dd`),Z(3),Y()),e&2){let e=X(2);G(3),Q(e.selected().outputs.join(`, `))}}function VS(e,t){if(e&1&&(J(0,`span`,17),Z(1),Y()),e&2){let e=X().$implicit;G(),$(`→ `,e.source)}}function HS(e,t){if(e&1&&(J(0,`li`,14)(1,`span`,15),Z(2),Y(),J(3,`span`,16),Z(4),Y(),K(5,VS,2,1,`span`,17),Y()),e&2){let e=t.$implicit;G(2),Q(e.token),G(2),Q(e.type),G(),q(e.source&&e.source!==`class`&&e.source!==`providers array`?5:-1)}}function US(e,t){if(e&1&&(J(0,`h4`),Z(1,`Injected Providers`),Y(),J(2,`ul`,13),hh(3,HS,6,3,`li`,14,MS),Y()),e&2){let e=X(2);G(3),_h(e.selectedProviders())}}function WS(e,t){e&1&&(J(0,`p`,12),Z(1,`No injected providers detected.`),Y())}function GS(e,t){if(e&1&&(J(0,`aside`,5)(1,`h3`),Z(2),Y(),J(3,`dl`)(4,`dt`),Z(5,`File`),Y(),J(6,`dd`),Z(7),Y(),K(8,zS,4,1),K(9,BS,4,1),J(10,`dt`),Z(11,`Standalone`),Y(),J(12,`dd`),Z(13),Y()(),K(14,US,5,0)(15,WS,2,0,`p`,12),Y()),e&2){let e=X();G(2),$(`<`,e.selected().selector,`>`),G(5),Q(e.selected().file),G(),q(e.selected().inputs.length?8:-1),G(),q(e.selected().outputs.length?9:-1),G(4),Q(e.selected().isStandalone?`Yes`:`No`),G(),q(e.selectedProviders().length?14:15)}}var KS=class e{rpc=Ug(null);components=H([]);allProviders=H([]);filter=H(``);loading=H(!1);selected=H(null);selectedProviders=H([]);filtered=H([]);constructor(){Bs(()=>{let e=this.filter().toLowerCase(),t=this.components();this.filtered.set(e?t.filter(t=>t.selector.includes(e)||t.file.includes(e)):t)}),Bs(()=>{this.rpc()&&this.refresh()})}async refresh(){let e=this.rpc();if(e){this.loading.set(!0);try{let t=e.scope(`ng-devtools`),[n,r]=await Promise.all([t.rpc.call(`get-components`),t.rpc.call(`get-providers`)]);this.components.set(n),this.allProviders.set(r);let i=this.selected();i&&this.selectedProviders.set(r.filter(e=>e.file===i.file))}finally{this.loading.set(!1)}}}select(e){this.selected.set(e),this.selectedProviders.set(this.allProviders().filter(t=>t.file===e.file));let t=this.rpc();t&&t.scope(`ng-devtools`).rpc.callEvent(`select-component`,e.selector)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Rp({type:e,selectors:[[`app-component-tree`]],inputs:{rpc:[1,`rpc`]},decls:8,vars:3,consts:[[1,`toolbar`],[`type`,`text`,`placeholder`,`Filter components…`,3,`input`,`value`],[3,`click`],[1,`muted`],[`role`,`list`,1,`component-list`],[1,`detail`],[1,`component-item`],[1,`component-item`,3,`click`],[1,`selector`],[1,`file`],[1,`io`],[1,`label`],[1,`no-providers`],[`role`,`list`,1,`provider-list`],[1,`provider-item`],[1,`provider-token`],[1,`provider-type`],[1,`provider-source`]],template:function(e,t){e&1&&(J(0,`div`,0)(1,`input`,1),Hh(`input`,function(e){return t.filter.set(e.target.value)}),Y(),J(2,`button`,2),Hh(`click`,function(){return t.refresh()}),Z(3,`Refresh`),Y()(),K(4,NS,2,0,`p`,3)(5,PS,2,0,`p`,3)(6,RS,3,0,`ul`,4),K(7,GS,16,6,`aside`,5)),e&2&&(G(),Rh(`value`,t.filter()),G(3),q(t.loading()?4:t.filtered().length===0?5:6),G(3),q(t.selected()?7:-1))},styles:[`.toolbar[_ngcontent-%COMP%] { + display: flex; + gap: 8px; + margin-bottom: 16px; + } + input[_ngcontent-%COMP%] { + flex: 1; + padding: 8px 12px; + background: #18181b; + border: 1px solid #27272a; + border-radius: 6px; + color: #e4e4e7; + font-size: 14px; + outline: none; + } + input[_ngcontent-%COMP%]:focus { + border-color: var(--%NS%accent); + } + button[_ngcontent-%COMP%] { + padding: 8px 16px; + background: #3f3f46; + border: none; + border-radius: 6px; + color: #e4e4e7; + cursor: pointer; + font-size: 13px; + } + button[_ngcontent-%COMP%]:hover { + background: #52525b; + } + .muted[_ngcontent-%COMP%] { + color: #71717a; + font-size: 14px; + } + .component-list[_ngcontent-%COMP%] { + list-style: none; + padding: 0; + display: flex; + flex-direction: column; + gap: 8px; + } + .component-item[_ngcontent-%COMP%] { + background: #18181b; + border: 1px solid #27272a; + border-radius: 8px; + padding: 12px 16px; + cursor: pointer; + transition: border-color 0.15s; + } + .component-item[_ngcontent-%COMP%]:hover { + border-color: var(--%NS%accent); + } + .selector[_ngcontent-%COMP%] { + font-family: monospace; + font-size: 15px; + color: var(--%NS%accent); + font-weight: 600; + } + .file[_ngcontent-%COMP%] { + font-size: 12px; + color: #71717a; + margin-top: 2px; + } + .io[_ngcontent-%COMP%] { + font-size: 13px; + color: #a1a1aa; + margin-top: 4px; + } + .io[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] { + color: #71717a; + } + .detail[_ngcontent-%COMP%] { + margin-top: 16px; + padding: 16px; + background: #18181b; + border: 1px solid #27272a; + border-radius: 8px; + } + .detail[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] { + font-family: monospace; + color: var(--%NS%accent); + margin-bottom: 12px; + } + dl[_ngcontent-%COMP%] { + display: grid; + grid-template-columns: auto 1fr; + gap: 4px 12px; + font-size: 13px; + margin-bottom: 16px; + } + dt[_ngcontent-%COMP%] { + color: #71717a; + } + dd[_ngcontent-%COMP%] { + color: #e4e4e7; + } + h4[_ngcontent-%COMP%] { + font-size: 12px; + text-transform: uppercase; + letter-spacing: 0.05em; + color: #71717a; + margin-bottom: 8px; + } + .provider-list[_ngcontent-%COMP%] { + list-style: none; + padding: 0; + display: flex; + flex-direction: column; + gap: 6px; + } + .provider-item[_ngcontent-%COMP%] { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 10px; + background: #09090b; + border: 1px solid #27272a; + border-radius: 6px; + font-size: 13px; + } + .provider-token[_ngcontent-%COMP%] { + font-family: monospace; + color: #e4e4e7; + font-weight: 600; + } + .provider-type[_ngcontent-%COMP%] { + font-size: 11px; + padding: 1px 6px; + border-radius: 4px; + background: #3f3f46; + color: #a1a1aa; + } + .provider-source[_ngcontent-%COMP%] { + font-size: 12px; + color: #71717a; + } + .no-providers[_ngcontent-%COMP%] { + font-size: 13px; + color: #52525b; + }`]})},qS=(e,t)=>t.path+t.file;function JS(e,t){e&1&&(J(0,`p`,3),Z(1,`Scanning routes…`),Y())}function YS(e,t){e&1&&(J(0,`p`,3),Z(1,`No routes found.`),Y())}function XS(e,t){if(e&1&&(J(0,`tr`)(1,`td`,5),Z(2),Y(),J(3,`td`),Z(4),Y(),J(5,`td`,6),Z(6),Y(),J(7,`td`),Z(8),Y()()),e&2){let e=t.$implicit;G(2),$(`/`,e.path),G(2),Q(e.component??`—`),G(2),Q(e.file),G(2),Q(e.hasChildren?`Yes`:`—`)}}function ZS(e,t){if(e&1&&(J(0,`table`,4)(1,`thead`)(2,`tr`)(3,`th`),Z(4,`Path`),Y(),J(5,`th`),Z(6,`Component`),Y(),J(7,`th`),Z(8,`File`),Y(),J(9,`th`),Z(10,`Children`),Y()()(),J(11,`tbody`),hh(12,XS,9,4,`tr`,null,qS),Y()()),e&2){let e=X();G(12),_h(e.filtered())}}var QS=class e{rpc=Ug(null);routes=H([]);filter=H(``);loading=H(!1);filtered=H([]);constructor(){Bs(()=>{let e=this.filter().toLowerCase(),t=this.routes();this.filtered.set(e?t.filter(t=>t.path.includes(e)||t.file.includes(e)):t)}),Bs(()=>{this.rpc()&&this.refresh()})}async refresh(){let e=this.rpc();if(e){this.loading.set(!0);try{let t=await e.scope(`ng-devtools`).rpc.call(`get-routes`);this.routes.set(t)}finally{this.loading.set(!1)}}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Rp({type:e,selectors:[[`app-route-inspector`]],inputs:{rpc:[1,`rpc`]},decls:7,vars:2,consts:[[1,`toolbar`],[`type`,`text`,`placeholder`,`Filter routes…`,3,`input`,`value`],[3,`click`],[1,`muted`],[`role`,`table`],[1,`path`],[1,`file`]],template:function(e,t){e&1&&(J(0,`div`,0)(1,`input`,1),Hh(`input`,function(e){return t.filter.set(e.target.value)}),Y(),J(2,`button`,2),Hh(`click`,function(){return t.refresh()}),Z(3,`Refresh`),Y()(),K(4,JS,2,0,`p`,3)(5,YS,2,0,`p`,3)(6,ZS,14,0,`table`,4)),e&2&&(G(),Rh(`value`,t.filter()),G(3),q(t.loading()?4:t.filtered().length===0?5:6))},styles:[`.toolbar[_ngcontent-%COMP%] { + display: flex; + gap: 8px; + margin-bottom: 16px; + } + input[_ngcontent-%COMP%] { + flex: 1; + padding: 8px 12px; + background: #18181b; + border: 1px solid #27272a; + border-radius: 6px; + color: #e4e4e7; + font-size: 14px; + outline: none; + } + input[_ngcontent-%COMP%]:focus { + border-color: var(--%NS%accent); + } + button[_ngcontent-%COMP%] { + padding: 8px 16px; + background: #3f3f46; + border: none; + border-radius: 6px; + color: #e4e4e7; + cursor: pointer; + font-size: 13px; + } + button[_ngcontent-%COMP%]:hover { + background: #52525b; + } + .muted[_ngcontent-%COMP%] { + color: #71717a; + font-size: 14px; + } + table[_ngcontent-%COMP%] { + width: 100%; + border-collapse: collapse; + font-size: 14px; + } + thead[_ngcontent-%COMP%] { + position: sticky; + top: 0; + } + th[_ngcontent-%COMP%] { + text-align: left; + padding: 8px 12px; + background: #18181b; + color: #71717a; + font-size: 12px; + text-transform: uppercase; + letter-spacing: 0.05em; + border-bottom: 1px solid #27272a; + } + td[_ngcontent-%COMP%] { + padding: 10px 12px; + border-bottom: 1px solid #1e1e22; + } + tr[_ngcontent-%COMP%]:hover td[_ngcontent-%COMP%] { + background: #18181b; + } + .path[_ngcontent-%COMP%] { + font-family: monospace; + color: var(--%NS%accent); + font-weight: 500; + } + .file[_ngcontent-%COMP%] { + font-size: 12px; + color: #71717a; + }`]})},$S=(e,t)=>t.name+t.file+t.line,eC=(e,t)=>t.kind,tC=(e,t)=>t.id;function nC(e,t){e&1&&(J(0,`div`,3)(1,`p`,4),Z(2,`No signals found.`),Y(),J(3,`p`,5),Z(4,` No signal(), computed(), effect() calls found in source. Runtime graph requires Angular 19+ with the overlay connected. `),Y()())}function rC(e,t){if(e&1&&Z(0),e&2){let e=X().$implicit;$(` · in <`,e.component,`> `)}}function iC(e,t){if(e&1&&(J(0,`div`,8)(1,`div`,9)(2,`span`,10),Z(3),Y(),J(4,`span`,11),Z(5),Y()(),J(6,`div`,12),Z(7),K(8,rC,1,1),Y()()),e&2){let e=t.$implicit,n=X(2);G(2),rg(`background`,n.kindColor(e.kind)),G(),Q(e.kind),G(2),Q(e.name),G(2),Cg(` `,e.file,`:`,e.line,` `),G(),q(e.component?8:-1)}}function aC(e,t){if(e&1&&(J(0,`p`,6),Z(1,`Signals from source scan (static analysis):`),Y(),J(2,`div`,7),hh(3,iC,9,7,`div`,8,$S),Y()),e&2){let e=X();G(3),_h(e.filteredSourceSignals())}}function oC(e,t){if(e&1&&(J(0,`span`,14),Ah(1,`span`,17),Z(2),Y()),e&2){let e=t.$implicit;G(),rg(`background`,e.color),G(),$(` `,e.kind,` `)}}function sC(e,t){e&1&&(J(0,`span`,19),Z(1,`watching`),Y())}function cC(e,t){if(e&1&&(J(0,`div`,20),Z(1),Og(2,`json`),Y()),e&2){let e=X().$implicit;G(),Q(Ag(2,1,e.value))}}function lC(e,t){if(e&1&&Z(0),e&2){let e=X().$implicit;$(` · Deps: `,X(2).getDependencies(e).length,` `)}}function uC(e,t){if(e&1&&Z(0),e&2){let e=X().$implicit;$(` · Consumers: `,X(2).getConsumers(e).length,` `)}}function dC(e,t){if(e&1){let e=Lh();J(0,`div`,18),Hh(`click`,function(){let t=co(e).$implicit;return lo(X(2).selectNode(t))}),J(1,`div`,9)(2,`span`,10),Z(3),Y(),J(4,`span`,11),Z(5),Y(),K(6,sC,2,0,`span`,19),Y(),K(7,cC,3,3,`div`,20),J(8,`div`,12),Z(9),K(10,lC,1,1),K(11,uC,1,1),Y()()}if(e&2){let e=t.$implicit,n=X(2);ig(`selected`,n.selectedNode()?.id===e.id),G(2),rg(`background`,n.kindColor(e.kind)),G(),Q(e.kind),G(2),Q(e.label??`(unnamed)`),G(),q(e.watched?6:-1),G(),q(e.value===void 0?-1:7),G(2),$(` Epoch: `,e.epoch,` `),G(),q(n.getDependencies(e).length?10:-1),G(),q(n.getConsumers(e).length?11:-1)}}function fC(e,t){if(e&1&&(J(0,`dt`),Z(1,`Value`),Y(),J(2,`dd`)(3,`pre`),Z(4),Og(5,`json`),Y()()),e&2){let e=X(3);G(4),Q(Ag(5,1,e.selectedNode().value))}}function pC(e,t){if(e&1&&(J(0,`li`)(1,`span`,21),Z(2),Y(),Z(3),Y()),e&2){let e=t.$implicit,n=X(4);G(),rg(`background`,n.kindColor(e.kind)),G(),Q(e.kind),G(),$(` `,e.label??e.id,` `)}}function mC(e,t){if(e&1&&(J(0,`h4`),Z(1,`Dependencies (producers)`),Y(),J(2,`ul`),hh(3,pC,4,4,`li`,null,tC),Y()),e&2){let e=X(3);G(3),_h(e.getDependencies(e.selectedNode()))}}function hC(e,t){if(e&1&&(J(0,`li`)(1,`span`,21),Z(2),Y(),Z(3),Y()),e&2){let e=t.$implicit,n=X(4);G(),rg(`background`,n.kindColor(e.kind)),G(),Q(e.kind),G(),$(` `,e.label??e.id,` `)}}function gC(e,t){if(e&1&&(J(0,`h4`),Z(1,`Consumers`),Y(),J(2,`ul`),hh(3,hC,4,4,`li`,null,tC),Y()),e&2){let e=X(3);G(3),_h(e.getConsumers(e.selectedNode()))}}function _C(e,t){if(e&1&&(J(0,`aside`,16)(1,`h3`),Z(2),Y(),J(3,`dl`)(4,`dt`),Z(5,`Kind`),Y(),J(6,`dd`),Z(7),Y(),J(8,`dt`),Z(9,`Epoch`),Y(),J(10,`dd`),Z(11),Y(),K(12,fC,6,3),Y(),K(13,mC,5,0),K(14,gC,5,0),Y()),e&2){let e=X(2);G(2),Q(e.selectedNode().label??e.selectedNode().id),G(5),Q(e.selectedNode().kind),G(4),Q(e.selectedNode().epoch),G(),q(e.selectedNode().value===void 0?-1:12),G(),q(e.getDependencies(e.selectedNode()).length?13:-1),G(),q(e.getConsumers(e.selectedNode()).length?14:-1)}}function vC(e,t){if(e&1&&(J(0,`div`,13),hh(1,oC,3,3,`span`,14,eC),Y(),J(3,`div`,7),hh(4,dC,12,11,`div`,15,tC),Y(),K(6,_C,15,6,`aside`,16)),e&2){let e=X();G(),_h(e.kindLegend),G(3),_h(e.filteredNodes()),G(2),q(e.selectedNode()?6:-1)}}var yC={signal:`#a78bfa`,computed:`#60a5fa`,linkedSignal:`#34d399`,effect:`#fb923c`,template:`#94a3b8`,afterRenderEffectPhase:`#f472b6`,childSignalProp:`#c084fc`,"input (signal)":`#f59e0b`,"input.required (signal)":`#f59e0b`,"output (signal)":`#ec4899`,"model (signal)":`#14b8a6`,"model.required (signal)":`#14b8a6`,"viewChild (signal)":`#8b5cf6`,"viewChild.required (signal)":`#8b5cf6`,"viewChildren (signal)":`#8b5cf6`,"contentChild (signal)":`#6366f1`,"contentChild.required (signal)":`#6366f1`,"contentChildren (signal)":`#6366f1`,resource:`#06b6d4`,unknown:`#71717a`},bC=class e{rpc=Ug(null);graph=H(null);sourceSignals=H([]);filter=H(``);selectedNode=H(null);kindLegend=Object.entries(yC).map(([e,t])=>({kind:e,color:t}));filteredNodes=Rg(()=>{let e=this.graph();if(!e)return[];let t=this.filter().toLowerCase();return t?e.nodes.filter(e=>(e.label??``).toLowerCase().includes(t)||e.kind.includes(t)):e.nodes});filteredSourceSignals=Rg(()=>{let e=this.filter().toLowerCase(),t=this.sourceSignals();return e?t.filter(t=>t.name.toLowerCase().includes(e)||t.kind.includes(e)||t.file.includes(e)):t});constructor(){Bs(()=>{let e=this.rpc();e&&(this.loadSignalGraph(e),this.loadSourceSignals(e))})}async loadSignalGraph(e){let t=await e.scope(`ng-devtools`).rpc.sharedState(`signal-graph`),n=t.value();n?.graph&&this.graph.set(n.graph),t.on(`updated`,e=>{e?.graph&&this.graph.set(e.graph)})}async loadSourceSignals(e){let t=e.scope(`ng-devtools`);try{let e=await t.rpc.call(`get-signals`);this.sourceSignals.set(e)}catch{}}selectNode(e){this.selectedNode.set(this.selectedNode()?.id===e.id?null:e)}kindColor(e){return yC[e]??yC.unknown}getDependencies(e){let t=this.graph();if(!t)return[];let n=t.nodes.findIndex(t=>t.id===e.id);return t.edges.filter(e=>e.consumer===n).map(e=>t.nodes[e.producer]).filter(Boolean)}getConsumers(e){let t=this.graph();if(!t)return[];let n=t.nodes.findIndex(t=>t.id===e.id);return t.edges.filter(e=>e.producer===n).map(e=>t.nodes[e.consumer]).filter(Boolean)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Rp({type:e,selectors:[[`app-signal-inspector`]],inputs:{rpc:[1,`rpc`]},decls:7,vars:5,consts:[[1,`toolbar`],[`type`,`text`,`placeholder`,`Filter by name or kind…`,3,`input`,`value`],[1,`label`],[1,`empty`],[1,`muted`],[1,`hint`],[1,`source-label`],[1,`nodes`],[1,`node-card`],[1,`node-header`],[1,`kind-badge`],[1,`node-label`],[1,`node-meta`],[1,`legend`],[1,`legend-item`],[1,`node-card`,3,`selected`],[1,`detail-panel`],[1,`dot`],[1,`node-card`,3,`click`],[1,`watched-badge`],[1,`node-value`],[1,`kind-badge`,`sm`]],template:function(e,t){e&1&&(J(0,`div`,0)(1,`input`,1),Hh(`input`,function(e){return t.filter.set(e.target.value)}),Y(),J(2,`span`,2),Z(3),Y()(),K(4,nC,5,0,`div`,3),K(5,aC,5,0),K(6,vC,7,1)),e&2&&(G(),Rh(`value`,t.filter()),G(2),$(`Component: `,t.graph()?.componentSelector??`—`),G(),q(!t.graph()&&t.sourceSignals().length===0?4:-1),G(),q(!t.graph()&&t.sourceSignals().length>0?5:-1),G(),q(t.graph()?6:-1))},dependencies:[a_],styles:[`.toolbar[_ngcontent-%COMP%] { + display: flex; + gap: 12px; + align-items: center; + margin-bottom: 16px; + } + input[_ngcontent-%COMP%] { + flex: 1; + padding: 8px 12px; + background: #18181b; + border: 1px solid #27272a; + border-radius: 6px; + color: #e4e4e7; + font-size: 14px; + outline: none; + } + input[_ngcontent-%COMP%]:focus { + border-color: var(--%NS%accent); + } + .label[_ngcontent-%COMP%] { + font-size: 13px; + color: #71717a; + white-space: nowrap; + } + .empty[_ngcontent-%COMP%] { + text-align: center; + padding: 48px 16px; + } + .muted[_ngcontent-%COMP%] { + color: #71717a; + font-size: 14px; + } + .hint[_ngcontent-%COMP%] { + color: #52525b; + font-size: 12px; + margin-top: 8px; + } + .source-label[_ngcontent-%COMP%] { + font-size: 13px; + color: #71717a; + margin-bottom: 12px; + } + .legend[_ngcontent-%COMP%] { + display: flex; + gap: 12px; + flex-wrap: wrap; + margin-bottom: 16px; + } + .legend-item[_ngcontent-%COMP%] { + display: flex; + align-items: center; + gap: 4px; + font-size: 12px; + color: #a1a1aa; + } + .dot[_ngcontent-%COMP%] { + width: 8px; + height: 8px; + border-radius: 50%; + } + .nodes[_ngcontent-%COMP%] { + display: flex; + flex-direction: column; + gap: 8px; + } + .node-card[_ngcontent-%COMP%] { + background: #18181b; + border: 1px solid #27272a; + border-radius: 8px; + padding: 12px 16px; + cursor: pointer; + transition: border-color 0.15s; + } + .node-card[_ngcontent-%COMP%]:hover { + border-color: #3f3f46; + } + .node-card.selected[_ngcontent-%COMP%] { + border-color: var(--%NS%accent); + } + .node-header[_ngcontent-%COMP%] { + display: flex; + align-items: center; + gap: 8px; + } + .kind-badge[_ngcontent-%COMP%] { + font-size: 11px; + padding: 2px 8px; + border-radius: 4px; + color: #fff; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.05em; + } + .kind-badge.sm[_ngcontent-%COMP%] { + font-size: 10px; + padding: 1px 5px; + } + .node-label[_ngcontent-%COMP%] { + font-family: monospace; + font-size: 14px; + color: #e4e4e7; + } + .watched-badge[_ngcontent-%COMP%] { + font-size: 10px; + padding: 1px 6px; + border-radius: 4px; + background: #14532d; + color: #4ade80; + } + .node-value[_ngcontent-%COMP%] { + font-family: monospace; + font-size: 12px; + color: #a1a1aa; + margin-top: 4px; + max-height: 40px; + overflow: hidden; + } + .node-meta[_ngcontent-%COMP%] { + font-size: 11px; + color: #52525b; + margin-top: 4px; + } + .detail-panel[_ngcontent-%COMP%] { + margin-top: 16px; + padding: 16px; + background: #18181b; + border: 1px solid #27272a; + border-radius: 8px; + } + .detail-panel[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] { + font-family: monospace; + color: var(--%NS%accent); + margin-bottom: 12px; + } + .detail-panel[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] { + font-size: 12px; + color: #71717a; + margin: 12px 0 4px; + text-transform: uppercase; + letter-spacing: 0.05em; + } + dl[_ngcontent-%COMP%] { + display: grid; + grid-template-columns: auto 1fr; + gap: 4px 12px; + font-size: 13px; + } + dt[_ngcontent-%COMP%] { + color: #71717a; + } + dd[_ngcontent-%COMP%] { + color: #e4e4e7; + } + pre[_ngcontent-%COMP%] { + font-size: 12px; + white-space: pre-wrap; + margin: 0; + } + ul[_ngcontent-%COMP%] { + list-style: none; + padding: 0; + font-size: 13px; + } + li[_ngcontent-%COMP%] { + padding: 2px 0; + color: #a1a1aa; + display: flex; + align-items: center; + gap: 6px; + }`]})},xC=(e,t)=>t.type,SC=(e,t)=>t.token+t.file+t.line,CC=(e,t)=>t.injector.id,wC=(e,t)=>t.node.injector.id,TC=(e,t)=>t.token;function EC(e,t){e&1&&(J(0,`div`,4)(1,`p`,5),Z(2,`No DI data found.`),Y(),J(3,`p`,6),Z(4,` No providers, injectables, or inject() calls found. Runtime tree requires Angular 17+ with the overlay connected. `),Y()())}function DC(e,t){if(e&1&&(J(0,`span`,14),Z(1),Y()),e&2){let e=X().$implicit;G(),$(`providedIn: `,e.providedIn)}}function OC(e,t){if(e&1&&Z(0),e&2){let e=X().$implicit;$(` · as `,e.source,` `)}}function kC(e,t){if(e&1&&(J(0,`div`,11)(1,`div`,12)(2,`span`,13),Z(3),Y(),K(4,DC,2,1,`span`,14),Y(),J(5,`div`,15),Z(6),K(7,OC,1,1),Y()()),e&2){let e=t.$implicit;G(3),Q(e.token),G(),q(e.providedIn?4:-1),G(2),Cg(` `,e.file,`:`,e.line,` `),G(),q(e.source!==`class`&&e.source!==`providers array`?7:-1)}}function AC(e,t){if(e&1&&(J(0,`div`,9)(1,`h3`),Z(2),Y(),J(3,`div`,10),hh(4,kC,8,5,`div`,11,SC),Y()()),e&2){let e=t.$implicit;G(2),Cg(``,e.label,` (`,e.items.length,`)`),G(2),_h(e.items)}}function jC(e,t){if(e&1&&(J(0,`p`,7),Z(1,`DI from source scan (static analysis):`),Y(),J(2,`div`,8),hh(3,AC,6,2,`div`,9,xC),Y()),e&2){let e=X();G(3),_h(e.groupedProviders())}}function MC(e,t){e&1&&Fh(0)}function NC(e,t){if(e&1&&(J(0,`span`,24),Z(1),Y()),e&2){let e=X().$implicit;G(),$(``,e.node.injector.providerCount,` providers`)}}function PC(e,t){if(e&1){let e=Lh();J(0,`div`,21),Hh(`click`,function(){let t=co(e).$implicit;return lo(X(4).select(t.node))}),J(1,`span`,22),Z(2),Y(),J(3,`span`,23),Z(4),Y(),K(5,NC,2,1,`span`,24),Y()}if(e&2){let e=t.$implicit,n=X(4);rg(`padding-left`,e.depth*24+12,`px`),ig(`selected`,n.selectedId()===e.node.injector.id),G(),rg(`background`,n.typeColor(e.node.injector.type)),G(),$(` `,e.node.injector.type,` `),G(2),Q(e.node.injector.name),G(),q(e.node.injector.providerCount>0?5:-1)}}function FC(e,t){if(e&1&&(J(0,`div`,19),hh(1,PC,6,9,`div`,20,wC),Y()),e&2){let e=X().$implicit,t=X(2);G(),_h(t.flattenTree(e))}}function IC(e,t){e&1&&(Zp(0,MC,1,0,`ng-container`,18)(1,FC,3,0),nh(2,1),rh()),e&2&&Rh(`ngTemplateOutlet`,void 0)}function LC(e,t){e&1&&(J(0,`p`,5),Z(1,`No providers configured on this injector.`),Y())}function RC(e,t){if(e&1&&(J(0,`tr`)(1,`td`,13),Z(2),Y(),J(3,`td`),Z(4),Y(),J(5,`td`),Z(6),Y()()),e&2){let e=t.$implicit;G(2),Q(e.token),G(2),Q(e.type),G(2),Q(e.isViewProvider?`Yes`:`—`)}}function zC(e,t){if(e&1&&(J(0,`table`,26)(1,`thead`)(2,`tr`)(3,`th`),Z(4,`Token`),Y(),J(5,`th`),Z(6,`Type`),Y(),J(7,`th`),Z(8,`View`),Y()()(),J(9,`tbody`),hh(10,RC,7,3,`tr`,null,TC),Y()()),e&2){let e=X(3);G(10),_h(e.selectedInjector().providers)}}function BC(e,t){if(e&1&&(J(0,`aside`,17)(1,`div`,25)(2,`span`,22),Z(3),Y(),J(4,`h3`),Z(5),Y()(),K(6,LC,2,0,`p`,5)(7,zC,12,0,`table`,26),Y()),e&2){let e=X(2);G(2),rg(`background`,e.typeColor(e.selectedInjector().injector.type)),G(),$(` `,e.selectedInjector().injector.type,` `),G(2),Q(e.selectedInjector().injector.name),G(),q(e.selectedInjector().providers.length===0?6:7)}}function VC(e,t){if(e&1&&(J(0,`div`,16),hh(1,IC,4,1,null,null,CC),Y(),K(3,BC,8,5,`aside`,17)),e&2){let e=X();G(),_h(e.filteredRoots()),G(2),q(e.selectedInjector()?3:-1)}}var HC={element:`#60a5fa`,environment:`#34d399`,null:`#71717a`},UC=class e{rpc=Ug(null);roots=H([]);sourceProviders=H([]);filter=H(``);hideEmpty=H(!1);selectedId=H(null);selectedInjector=Rg(()=>{let e=this.selectedId();return e?this.findNode(this.roots(),e):null});filteredRoots=Rg(()=>{let e=this.roots();this.hideEmpty()&&(e=this.filterEmpty(e));let t=this.filter().toLowerCase();return t&&(e=this.filterByQuery(e,t)),e});groupedProviders=Rg(()=>{let e=this.sourceProviders(),t=this.filter().toLowerCase(),n=t?e.filter(e=>e.token.toLowerCase().includes(t)||e.file.includes(t)):e,r=[{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 n){let t=r.find(t=>t.type===e.type);t&&t.items.push(e)}return r.filter(e=>e.items.length>0)});constructor(){Bs(()=>{let e=this.rpc();e&&(this.loadInjectorTree(e),this.loadSourceProviders(e))})}async loadInjectorTree(e){let t=await e.scope(`ng-devtools`).rpc.sharedState(`injector-tree`),n=t.value();n?.roots?.length&&this.roots.set(n.roots),t.on(`updated`,e=>{e?.roots&&this.roots.set(e.roots)})}async loadSourceProviders(e){let t=e.scope(`ng-devtools`);try{let e=await t.rpc.call(`get-providers`);this.sourceProviders.set(e)}catch{}}select(e){this.selectedId.set(this.selectedId()===e.injector.id?null:e.injector.id)}typeColor(e){return HC[e]??HC.null}flattenTree(e){let t=[],n=(e,r)=>{t.push({node:e,depth:r});for(let t of e.children)n(t,r+1)};return n(e,0),t}findNode(e,t){for(let n of e){if(n.injector.id===t)return n;let e=this.findNode(n.children,t);if(e)return e}return null}filterEmpty(e){return e.map(e=>({...e,children:this.filterEmpty(e.children)})).filter(e=>e.injector.providerCount>0||e.children.length>0)}filterByQuery(e,t){return e.map(e=>({...e,children:this.filterByQuery(e.children,t)})).filter(e=>e.injector.name.toLowerCase().includes(t)||e.providers.some(e=>e.token.toLowerCase().includes(t))||e.children.length>0)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Rp({type:e,selectors:[[`app-di-inspector`]],inputs:{rpc:[1,`rpc`]},decls:8,vars:5,consts:[[1,`toolbar`],[`type`,`text`,`placeholder`,`Filter by injector name or token…`,3,`input`,`value`],[1,`checkbox`],[`type`,`checkbox`,3,`change`,`checked`],[1,`empty`],[1,`muted`],[1,`hint`],[1,`source-label`],[1,`source-providers`],[1,`provider-group`],[1,`provider-list`],[1,`provider-card`],[1,`provider-header`],[1,`token`],[1,`provided-in`],[1,`provider-meta`],[1,`tree-container`],[1,`detail-panel`],[4,`ngTemplateOutlet`],[1,`injector-tree`],[1,`injector-row`,3,`selected`,`paddingLeft`],[1,`injector-row`,3,`click`],[1,`type-badge`],[1,`name`],[1,`provider-count`],[1,`detail-header`],[`role`,`table`]],template:function(e,t){e&1&&(J(0,`div`,0)(1,`input`,1),Hh(`input`,function(e){return t.filter.set(e.target.value)}),Y(),J(2,`label`,2)(3,`input`,3),Hh(`change`,function(){return t.hideEmpty.set(!t.hideEmpty())}),Y(),Z(4,` Hide empty injectors `),Y()(),K(5,EC,5,0,`div`,4),K(6,jC,5,0),K(7,VC,4,1)),e&2&&(G(),Rh(`value`,t.filter()),G(2),Rh(`checked`,t.hideEmpty()),G(2),q(t.roots().length===0&&t.sourceProviders().length===0?5:-1),G(),q(t.roots().length===0&&t.sourceProviders().length>0?6:-1),G(),q(t.roots().length>0?7:-1))},styles:[`.toolbar[_ngcontent-%COMP%] { + display: flex; + gap: 12px; + align-items: center; + margin-bottom: 16px; + } + input[type='text'][_ngcontent-%COMP%] { + flex: 1; + padding: 8px 12px; + background: #18181b; + border: 1px solid #27272a; + border-radius: 6px; + color: #e4e4e7; + font-size: 14px; + outline: none; + } + input[type='text'][_ngcontent-%COMP%]:focus { + border-color: var(--%NS%accent); + } + .checkbox[_ngcontent-%COMP%] { + display: flex; + align-items: center; + gap: 6px; + font-size: 13px; + color: #a1a1aa; + white-space: nowrap; + cursor: pointer; + } + .empty[_ngcontent-%COMP%] { + text-align: center; + padding: 48px 16px; + } + .muted[_ngcontent-%COMP%] { + color: #71717a; + font-size: 14px; + } + .hint[_ngcontent-%COMP%] { + color: #52525b; + font-size: 12px; + margin-top: 8px; + } + .tree-container[_ngcontent-%COMP%] { + display: flex; + flex-direction: column; + } + .injector-row[_ngcontent-%COMP%] { + display: flex; + align-items: center; + gap: 8px; + padding: 8px 12px; + cursor: pointer; + border-bottom: 1px solid #1e1e22; + transition: background 0.1s; + } + .injector-row[_ngcontent-%COMP%]:hover { + background: #18181b; + } + .injector-row.selected[_ngcontent-%COMP%] { + background: color-mix(in srgb, var(--%NS%accent) 22%, transparent); + border-color: var(--%NS%accent); + } + .type-badge[_ngcontent-%COMP%] { + font-size: 10px; + padding: 2px 6px; + border-radius: 4px; + color: #fff; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.05em; + } + .name[_ngcontent-%COMP%] { + font-family: monospace; + font-size: 13px; + color: #e4e4e7; + } + .provider-count[_ngcontent-%COMP%] { + font-size: 11px; + color: #71717a; + margin-left: auto; + } + .detail-panel[_ngcontent-%COMP%] { + margin-top: 16px; + padding: 16px; + background: #18181b; + border: 1px solid #27272a; + border-radius: 8px; + } + .detail-header[_ngcontent-%COMP%] { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 12px; + } + .detail-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] { + font-family: monospace; + color: #e4e4e7; + margin: 0; + } + table[_ngcontent-%COMP%] { + width: 100%; + border-collapse: collapse; + font-size: 13px; + } + th[_ngcontent-%COMP%] { + text-align: left; + padding: 6px 10px; + background: #0f0f11; + color: #71717a; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 0.05em; + border-bottom: 1px solid #27272a; + } + td[_ngcontent-%COMP%] { + padding: 8px 10px; + border-bottom: 1px solid #1e1e22; + } + .token[_ngcontent-%COMP%] { + font-family: monospace; + color: var(--%NS%accent); + } + .source-label[_ngcontent-%COMP%] { + font-size: 13px; + color: #71717a; + margin-bottom: 12px; + } + .source-providers[_ngcontent-%COMP%] { + display: flex; + flex-direction: column; + gap: 20px; + } + .provider-group[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] { + font-size: 13px; + color: #71717a; + text-transform: uppercase; + letter-spacing: 0.05em; + margin-bottom: 8px; + } + .provider-list[_ngcontent-%COMP%] { + display: flex; + flex-direction: column; + gap: 6px; + } + .provider-card[_ngcontent-%COMP%] { + background: #18181b; + border: 1px solid #27272a; + border-radius: 8px; + padding: 10px 14px; + } + .provider-header[_ngcontent-%COMP%] { + display: flex; + align-items: center; + gap: 8px; + } + .provider-header[_ngcontent-%COMP%] .token[_ngcontent-%COMP%] { + font-size: 14px; + font-weight: 500; + } + .provided-in[_ngcontent-%COMP%] { + font-size: 11px; + padding: 1px 6px; + border-radius: 4px; + background: #14532d; + color: #4ade80; + } + .provider-meta[_ngcontent-%COMP%] { + font-size: 11px; + color: #52525b; + margin-top: 4px; + }`]})},WC=(e,t)=>t.kind,GC=(e,t)=>t.name+t.file+t.line;function KC(e,t){e&1&&Ah(0,`span`,4)}function qC(e,t){e&1&&(J(0,`div`,5)(1,`p`,6),Z(2,`No NgRx store patterns found.`),Y(),J(3,`p`,7),Z(4,` No createAction, createReducer, createEffect, createSelector, or createFeature calls found in source. Make sure your app uses @ngrx/store. `),Y()())}function JC(e,t){if(e&1&&(J(0,`span`,9),Ah(1,`span`,14),Z(2),Y()),e&2){let e=t.$implicit;G(),rg(`background`,e.color),G(),$(` `,e.kind,` `)}}function YC(e,t){if(e&1&&(J(0,`span`,15),Z(1),Y()),e&2){let e=t.$implicit;rg(`border-color`,X(3).kindColor(e.kind)),G(),wg(` `,e.count,` `,e.kind,``,e.count===1?``:`s`,` `)}}function XC(e,t){if(e&1&&Z(0),e&2){let e=X().$implicit;$(` · `,e.detail,` `)}}function ZC(e,t){if(e&1&&(J(0,`div`,13)(1,`div`,16)(2,`span`,17),Z(3),Y(),J(4,`span`,18),Z(5),Y()(),J(6,`div`,19),Z(7),K(8,XC,1,1),Y()()),e&2){let e=t.$implicit,n=X(3);G(2),rg(`background`,n.kindColor(e.kind)),G(),$(` `,e.kind,` `),G(2),Q(e.name),G(2),Cg(` `,e.file,`:`,e.line,` `),G(),q(e.detail?8:-1)}}function QC(e,t){if(e&1&&(J(0,`div`,8),hh(1,JC,3,3,`span`,9,WC),Y(),J(3,`div`,10),hh(4,YC,2,5,`span`,11,WC),Y(),J(6,`div`,12),hh(7,ZC,9,7,`div`,13,GC),Y()),e&2){let e=X(2);G(),_h(e.kindLegend),G(3),_h(e.groupedEntries()),G(3),_h(e.filteredEntries())}}function $C(e,t){e&1&&K(0,qC,5,0,`div`,5)(1,QC,9,0),e&2&&q(X().sourceEntries().length===0?0:1)}function ew(e,t){e&1&&(J(0,`div`,5)(1,`p`,6),Z(2,`No NgRx store connection detected.`),Y(),J(3,`p`,7),Z(4,` Runtime inspection requires @ngrx/store-devtools to be configured in your app. The store devtools use the Redux DevTools protocol to expose state. `),Y()())}function tw(e,t){if(e&1){let e=Lh();J(0,`div`,28),Hh(`click`,function(){let t=co(e).$implicit;return lo(X(3).selectedAction.set(t))}),J(1,`div`,29),Z(2),Y(),J(3,`div`,30),Z(4),Y()()}if(e&2){let e=t.$implicit,n=X(3);ig(`selected`,n.selectedAction()===e),G(2),Q(e.type),G(2),Q(n.formatTime(e.timestamp))}}function nw(e,t){e&1&&(J(0,`p`,6),Z(1,`No actions dispatched yet.`),Y())}function rw(e,t){if(e&1&&(J(0,`dt`),Z(1,`Payload`),Y(),J(2,`dd`)(3,`pre`),Z(4),Og(5,`json`),Y()()),e&2){let e=X(4);G(4),Q(Ag(5,1,e.selectedAction().payload))}}function iw(e,t){if(e&1&&(J(0,`aside`,27)(1,`h3`),Z(2),Y(),J(3,`dl`)(4,`dt`),Z(5,`Type`),Y(),J(6,`dd`),Z(7),Y(),J(8,`dt`),Z(9,`Time`),Y(),J(10,`dd`),Z(11),Y(),K(12,rw,6,3),Y()()),e&2){let e=X(3);G(2),Q(e.selectedAction().type),G(5),Q(e.selectedAction().type),G(4),Q(e.formatTime(e.selectedAction().timestamp)),G(),q(e.selectedAction().payload===void 0?-1:12)}}function aw(e,t){if(e&1&&(J(0,`div`,20)(1,`section`,21)(2,`h3`),Z(3,`Current State`),Y(),J(4,`pre`,22),Z(5),Og(6,`json`),Y()(),J(7,`section`,23)(8,`h3`),Z(9,` Recent Actions `),J(10,`span`,24),Z(11),Y()(),J(12,`div`,25),hh(13,tw,5,4,`div`,26,ph,!1,nw,2,0,`p`,6),Y()()(),K(16,iw,13,4,`aside`,27)),e&2){let e=X(2);G(5),Q(Ag(6,4,e.runtimeState()?.state)),G(6),Q(e.filteredActions().length),G(2),_h(e.filteredActions()),G(3),q(e.selectedAction()?16:-1)}}function ow(e,t){e&1&&K(0,ew,5,0,`div`,5)(1,aw,17,6),e&2&&q(+!!X().runtimeState()?.connected)}var sw={action:`#f59e0b`,reducer:`#a78bfa`,effect:`#fb923c`,selector:`#60a5fa`,feature:`#34d399`,"store-setup":`#94a3b8`,"signal-store":`#e879f9`,"signal-state":`#22d3ee`,"signal-method":`#fb7185`},cw=class e{rpc=Ug(null);filter=H(``);mode=H(`source`);sourceEntries=H([]);runtimeState=H(null);selectedAction=H(null);kindLegend=Object.entries(sw).map(([e,t])=>({kind:e,color:t}));filteredEntries=Rg(()=>{let e=this.filter().toLowerCase();return this.sourceEntries().filter(t=>t.name.toLowerCase().includes(e)||t.kind.toLowerCase().includes(e))});groupedEntries=Rg(()=>{let e=this.sourceEntries(),t=new Map;for(let n of e)t.set(n.kind,(t.get(n.kind)??0)+1);return[...t.entries()].map(([e,t])=>({kind:e,count:t}))});filteredActions=Rg(()=>{let e=this.filter().toLowerCase(),t=[...this.runtimeState()?.actions??[]].reverse();return e?t.filter(t=>t.type.toLowerCase().includes(e)):t});constructor(){Bs(()=>{let e=this.rpc();if(!e)return;let t=e.scope(`ng-devtools`);t.rpc.call(`get-ngrx-store`).then(e=>{this.sourceEntries.set(e),e.length===0&&this.mode.set(`runtime`)}).catch(()=>this.sourceEntries.set([])),t.rpc.sharedState(`ngrx-store`).then(e=>{e?.subscribe&&e.subscribe(e=>this.runtimeState.set(e))})})}kindColor(e){return sw[e]??`#71717a`}formatTime(e){return new Date(e).toLocaleTimeString()}static ɵfac=function(t){return new(t||e)};static ɵcmp=Rp({type:e,selectors:[[`app-store-inspector`]],inputs:{rpc:[1,`rpc`]},decls:10,vars:8,consts:[[1,`toolbar`],[`type`,`text`,`placeholder`,`Filter by name or kind…`,3,`input`,`value`],[1,`toggle-group`],[3,`click`],[1,`live-dot`],[1,`empty`],[1,`muted`],[1,`hint`],[1,`legend`],[1,`legend-item`],[1,`summary`],[1,`summary-badge`,3,`border-color`],[1,`nodes`],[1,`node-card`],[1,`dot`],[1,`summary-badge`],[1,`node-header`],[1,`kind-badge`],[1,`node-label`],[1,`node-meta`],[1,`runtime-layout`],[1,`state-panel`],[1,`state-tree`],[1,`actions-panel`],[1,`action-count`],[1,`action-list`],[1,`action-card`,3,`selected`],[1,`detail-panel`],[1,`action-card`,3,`click`],[1,`action-type`],[1,`action-time`]],template:function(e,t){e&1&&(J(0,`div`,0)(1,`input`,1),Hh(`input`,function(e){return t.filter.set(e.target.value)}),Y(),J(2,`div`,2)(3,`button`,3),Hh(`click`,function(){return t.mode.set(`source`)}),Z(4,`Source`),Y(),J(5,`button`,3),Hh(`click`,function(){return t.mode.set(`runtime`)}),Z(6,` Runtime `),K(7,KC,1,0,`span`,4),Y()()(),K(8,$C,2,1),K(9,ow,2,1)),e&2&&(G(),Rh(`value`,t.filter()),G(2),ig(`active`,t.mode()===`source`),G(2),ig(`active`,t.mode()===`runtime`),G(2),q(t.runtimeState()?.connected?7:-1),G(),q(t.mode()===`source`?8:-1),G(),q(t.mode()===`runtime`?9:-1))},dependencies:[a_],styles:[`.toolbar[_ngcontent-%COMP%] { + display: flex; + gap: 12px; + align-items: center; + margin-bottom: 16px; + } + input[_ngcontent-%COMP%] { + flex: 1; + padding: 8px 12px; + background: #18181b; + border: 1px solid #27272a; + border-radius: 6px; + color: #e4e4e7; + font-size: 14px; + outline: none; + } + input[_ngcontent-%COMP%]:focus { + border-color: var(--%NS%accent); + } + .toggle-group[_ngcontent-%COMP%] { + display: flex; + border: 1px solid #27272a; + border-radius: 6px; + overflow: hidden; + } + .toggle-group[_ngcontent-%COMP%] button[_ngcontent-%COMP%] { + padding: 6px 14px; + border: none; + background: transparent; + color: #a1a1aa; + cursor: pointer; + font-size: 13px; + display: flex; + align-items: center; + gap: 6px; + } + .toggle-group[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%] { + background: #3f3f46; + color: #fff; + } + .live-dot[_ngcontent-%COMP%] { + width: 6px; + height: 6px; + border-radius: 50%; + background: #4ade80; + animation: _ngcontent-%COMP%_pulse 2s infinite; + } + @keyframes _ngcontent-%COMP%_pulse { + 0%, + 100% { + opacity: 1; + } + 50% { + opacity: 0.4; + } + } + .empty[_ngcontent-%COMP%] { + text-align: center; + padding: 48px 16px; + } + .muted[_ngcontent-%COMP%] { + color: #71717a; + font-size: 14px; + } + .hint[_ngcontent-%COMP%] { + color: #52525b; + font-size: 12px; + margin-top: 8px; + } + .legend[_ngcontent-%COMP%] { + display: flex; + gap: 12px; + flex-wrap: wrap; + margin-bottom: 12px; + } + .legend-item[_ngcontent-%COMP%] { + display: flex; + align-items: center; + gap: 4px; + font-size: 12px; + color: #a1a1aa; + } + .dot[_ngcontent-%COMP%] { + width: 8px; + height: 8px; + border-radius: 50%; + } + .summary[_ngcontent-%COMP%] { + display: flex; + gap: 8px; + flex-wrap: wrap; + margin-bottom: 16px; + } + .summary-badge[_ngcontent-%COMP%] { + font-size: 12px; + padding: 3px 10px; + border-radius: 99px; + border: 1px solid; + color: #e4e4e7; + } + .nodes[_ngcontent-%COMP%] { + display: flex; + flex-direction: column; + gap: 8px; + } + .node-card[_ngcontent-%COMP%] { + background: #18181b; + border: 1px solid #27272a; + border-radius: 8px; + padding: 12px 16px; + transition: border-color 0.15s; + } + .node-card[_ngcontent-%COMP%]:hover { + border-color: #3f3f46; + } + .node-header[_ngcontent-%COMP%] { + display: flex; + align-items: center; + gap: 8px; + } + .kind-badge[_ngcontent-%COMP%] { + font-size: 11px; + padding: 2px 8px; + border-radius: 4px; + color: #fff; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.05em; + } + .node-label[_ngcontent-%COMP%] { + font-family: monospace; + font-size: 14px; + color: #e4e4e7; + } + .node-meta[_ngcontent-%COMP%] { + font-size: 12px; + color: #71717a; + margin-top: 4px; + } + .runtime-layout[_ngcontent-%COMP%] { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 16px; + } + .state-panel[_ngcontent-%COMP%], + .actions-panel[_ngcontent-%COMP%] { + background: #18181b; + border: 1px solid #27272a; + border-radius: 10px; + padding: 16px; + } + h3[_ngcontent-%COMP%] { + font-size: 13px; + text-transform: uppercase; + color: #71717a; + margin-bottom: 12px; + letter-spacing: 0.05em; + display: flex; + align-items: center; + gap: 8px; + } + .action-count[_ngcontent-%COMP%] { + font-size: 11px; + padding: 1px 6px; + border-radius: 99px; + background: #3f3f46; + color: #a1a1aa; + } + .state-tree[_ngcontent-%COMP%] { + font-family: monospace; + font-size: 12px; + color: #a1a1aa; + white-space: pre-wrap; + word-break: break-all; + max-height: 500px; + overflow: auto; + } + .action-list[_ngcontent-%COMP%] { + display: flex; + flex-direction: column; + gap: 6px; + max-height: 500px; + overflow: auto; + } + .action-card[_ngcontent-%COMP%] { + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px 12px; + background: #09090b; + border: 1px solid #27272a; + border-radius: 6px; + cursor: pointer; + transition: border-color 0.15s; + } + .action-card[_ngcontent-%COMP%]:hover { + border-color: #3f3f46; + } + .action-card.selected[_ngcontent-%COMP%] { + border-color: var(--%NS%accent); + } + .action-type[_ngcontent-%COMP%] { + font-family: monospace; + font-size: 13px; + color: #e4e4e7; + } + .action-time[_ngcontent-%COMP%] { + font-size: 11px; + color: #71717a; + } + .detail-panel[_ngcontent-%COMP%] { + margin-top: 16px; + background: #18181b; + border: 1px solid var(--%NS%accent); + border-radius: 10px; + padding: 16px; + } + dl[_ngcontent-%COMP%] { + display: grid; + grid-template-columns: auto 1fr; + gap: 6px 12px; + font-size: 14px; + } + dt[_ngcontent-%COMP%] { + color: #a1a1aa; + } + dd[_ngcontent-%COMP%] { + color: #e4e4e7; + } + pre[_ngcontent-%COMP%] { + font-family: monospace; + font-size: 12px; + white-space: pre-wrap; + word-break: break-all; + }`]})},lw=(e,t)=>t.id;function uw(e,t){if(e&1){let e=Lh();Eh(0,`button`,13),Vh(`click`,function(){let t=co(e).$implicit;return lo(X().switchTab(t.id))}),Z(1),Oh()}if(e&2){let e=t.$implicit;ig(`active`,X().tab()===e.id),G(),Q(e.label)}}function dw(e,t){if(e&1){let e=Lh();Eh(0,`app-dashboard`,14),Vh(`navigate`,function(t){return co(e),lo(X().switchTab(t))}),Oh()}e&2&&wh(`rpc`,X().rpc())}function fw(e,t){e&1&&kh(0,`app-component-tree`,12),e&2&&wh(`rpc`,X().rpc())}function pw(e,t){e&1&&kh(0,`app-route-inspector`,12),e&2&&wh(`rpc`,X().rpc())}function mw(e,t){e&1&&kh(0,`app-signal-inspector`,12),e&2&&wh(`rpc`,X().rpc())}function hw(e,t){e&1&&kh(0,`app-di-inspector`,12),e&2&&wh(`rpc`,X().rpc())}function gw(e,t){e&1&&kh(0,`app-store-inspector`,12),e&2&&wh(`rpc`,X().rpc())}var _w=class e{tabs=[{id:`dashboard`,label:`Dashboard`},{id:`components`,label:`Components`},{id:`routes`,label:`Routes`},{id:`signals`,label:`Signals`},{id:`injectors`,label:`Injectors`},{id:`store`,label:`Store`}];tab=H(`dashboard`);rpc=H(null);connected=H(!1);ngOnInit(){let e=new URLSearchParams(location.hash.replace(/^#/,``)).get(`tab`);e&&this.tabs.some(t=>t.id===e)&&this.tab.set(e);let t=yw();kS(t?{baseURL:t}:{}).then(e=>{this.rpc.set(e),this.connected.set(!0),e.events.on(`connection:status`,e=>{this.connected.set(e===`connected`)})})}ngOnDestroy(){}switchTab(e){this.tab.set(e),history.replaceState(history.state,``,`#tab=${e}`)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Rp({type:e,selectors:[[`app-root`]],decls:26,vars:4,consts:[[1,`brand`],[`width`,`20`,`height`,`22`,`viewBox`,`0 0 223 236`,`fill`,`url(#ng-logo)`,`aria-hidden`,`true`],[`id`,`ng-logo`,`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`],[`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`],[3,`active`],[1,`status`],[3,`rpc`],[3,`click`],[3,`navigate`,`rpc`]],template:function(e,t){if(e&1&&(Eh(0,`header`)(1,`div`,0),Ho(),Eh(2,`svg`,1)(3,`defs`)(4,`linearGradient`,2),kh(5,`stop`,3)(6,`stop`,4)(7,`stop`,5)(8,`stop`,6)(9,`stop`,7)(10,`stop`,8),Oh()(),kh(11,`path`,9),Oh(),Uo(),Eh(12,`span`),Z(13,`Angular DevTools`),Oh()(),Eh(14,`nav`),hh(15,uw,2,3,`button`,10,lw),Oh(),Eh(17,`span`,11),Z(18),Oh()(),Eh(19,`main`),K(20,dw,1,1,`app-dashboard`,12)(21,fw,1,1,`app-component-tree`,12)(22,pw,1,1,`app-route-inspector`,12)(23,mw,1,1,`app-signal-inspector`,12)(24,hw,1,1,`app-di-inspector`,12)(25,gw,1,1,`app-store-inspector`,12),Oh()),e&2){let e;G(15),_h(t.tabs),G(2),ig(`connected`,t.connected()),G(),$(` `,t.connected()?`Connected`:`Connecting…`,` `),G(2),q((e=t.tab())===`dashboard`?20:e===`components`?21:e===`routes`?22:e===`signals`?23:e===`injectors`?24:e===`store`?25:-1)}},dependencies:[AS,KS,QS,bC,UC,cw],styles:[`[_nghost-%COMP%] { + display: flex; + flex-direction: column; + height: 100vh; + } + header[_ngcontent-%COMP%] { + display: flex; + align-items: center; + gap: 16px; + padding: 8px 16px; + background: #18181b; + border-bottom: 1px solid #27272a; + } + .brand[_ngcontent-%COMP%] { + display: flex; + align-items: center; + gap: 8px; + font-weight: 600; + color: var(--%NS%accent); + } + .brand[_ngcontent-%COMP%] span[_ngcontent-%COMP%] { + color: var(--%NS%accent); + white-space: nowrap; + } + nav[_ngcontent-%COMP%] { + display: flex; + gap: 4px; + flex: 1; + } + nav[_ngcontent-%COMP%] button[_ngcontent-%COMP%] { + padding: 6px 14px; + border: none; + border-radius: 6px; + background: transparent; + color: #a1a1aa; + cursor: pointer; + font-size: 13px; + transition: all 0.15s; + } + nav[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover { + background: #27272a; + color: #e4e4e7; + } + nav[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%] { + background: #3f3f46; + color: #fff; + } + .status[_ngcontent-%COMP%] { + font-size: 12px; + padding: 3px 10px; + border-radius: 99px; + background: #44403c; + color: #a8a29e; + } + .status.connected[_ngcontent-%COMP%] { + background: #14532d; + color: #4ade80; + } + main[_ngcontent-%COMP%] { + flex: 1; + overflow: auto; + padding: 16px; + }`]})};function vw(e){try{return new URL(e,location.href).origin===location.origin}catch{return!1}}function yw(){let e=new URLSearchParams(location.search).get(`baseURL`);if(e&&vw(e))return e;if(!location.pathname.includes(`__ng-devtools`))return`/__ng-devtools/`}U_(_w).catch(console.error);export{Kv as t}; \ No newline at end of file diff --git a/packages/ng-devtools/dist/public/index.html b/packages/ng-devtools/dist/public/index.html new file mode 100644 index 0000000..b81f0b6 --- /dev/null +++ b/packages/ng-devtools/dist/public/index.html @@ -0,0 +1,13 @@ + + + + + + Angular DevTools + + + + + + + From 8ca5ff8b20059e07a3cf28d66d1e672a05536189 Mon Sep 17 00:00:00 2001 From: Kam Date: Thu, 24 Sep 2026 22:18:42 +0300 Subject: [PATCH 2/3] docs: describe where the Angular detector runs --- README.md | 7 ++++++- docs/privacy-policy.html | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 96443e5..44e7cc6 100644 --- a/README.md +++ b/README.md @@ -241,7 +241,12 @@ extension/ "description": "Inspect Angular components, signals, DI, and routes.", "devtools_page": "devtools.html", "permissions": ["scripting"], - "host_permissions": ["http://localhost/*", "http://127.0.0.1/*"], + "host_permissions": [ + "http://localhost/*", + "https://localhost/*", + "http://127.0.0.1/*", + "https://127.0.0.1/*" + ], "icons": { "128": "icon-128.png" } diff --git a/docs/privacy-policy.html b/docs/privacy-policy.html index da560a1..daffa8e 100644 --- a/docs/privacy-policy.html +++ b/docs/privacy-policy.html @@ -32,16 +32,16 @@

Data Collection

What the Extension Accesses

-

The Extension accesses the following information only on the page you are actively inspecting via Chrome DevTools:

+

The Extension accesses the following information from pages where its content scripts run and from the page you are actively inspecting via Chrome DevTools:

    -
  • Angular framework detection — checks for the ng-version HTML attribute and the window.ng global to determine if the page uses Angular
  • +
  • Angular framework detection — on every page, checks for the ng-version HTML attribute and the window.ng global to determine if the page uses Angular
  • Angular debug APIs — reads component trees, signal graphs, dependency injection hierarchies, and route configurations using Angular's built-in debug utilities (available only in development builds)
  • Localhost communication — communicates with a devframe server running on localhost on the developer's own machine for live inspection data

All data processing happens entirely within your browser and your local machine. No information ever leaves your device.

Host Permissions

-

The Extension requests host permissions only for localhost and 127.0.0.1, to reach the devframe server on the developer's own machine. It also runs a lightweight content script on pages to detect Angular. The content script only checks for the presence of Angular and does not read or modify page content.

+

The Extension requests host permissions only for localhost and 127.0.0.1, to reach the devframe server on the developer's own machine. The detect-angular.js content script runs on every page, including when DevTools is closed. It reads only the ng-version attribute and whether window.ng exists, to detect Angular. It does not modify page content.

Data Storage

The Extension does not persist any data between sessions. All inspection data exists only in memory while the DevTools panel is open and is discarded when the panel is closed.

From f61de09e64b03f5f6523765da9f9621fa633bb30 Mon Sep 17 00:00:00 2001 From: Kam Date: Fri, 25 Sep 2026 18:33:03 +0000 Subject: [PATCH 3/3] chore: drop the packaged build output from the branch The nine files under packages/ng-devtools/dist are build artifacts that went in by accident; /dist in .gitignore only covers the repository root. The change here is the extension permissions and the docs. --- packages/ng-devtools/dist/devframe.d.mts | 4 - packages/ng-devtools/dist/devframe.mjs | 1228 ----------------- packages/ng-devtools/dist/overlay.d.mts | 19 - packages/ng-devtools/dist/overlay.mjs | 353 ----- packages/ng-devtools/dist/popup.d.mts | 6 - packages/ng-devtools/dist/popup.mjs | 444 ------ .../browser-agent-rpc-BXhoSh1z-DT7_jkxB.js | 1 - .../dist/public/assets/index-BUkjK2_k.js | 896 ------------ packages/ng-devtools/dist/public/index.html | 13 - 9 files changed, 2964 deletions(-) delete mode 100644 packages/ng-devtools/dist/devframe.d.mts delete mode 100644 packages/ng-devtools/dist/devframe.mjs delete mode 100644 packages/ng-devtools/dist/overlay.d.mts delete mode 100644 packages/ng-devtools/dist/overlay.mjs delete mode 100644 packages/ng-devtools/dist/popup.d.mts delete mode 100644 packages/ng-devtools/dist/popup.mjs delete mode 100644 packages/ng-devtools/dist/public/assets/browser-agent-rpc-BXhoSh1z-DT7_jkxB.js delete mode 100644 packages/ng-devtools/dist/public/assets/index-BUkjK2_k.js delete mode 100644 packages/ng-devtools/dist/public/index.html diff --git a/packages/ng-devtools/dist/devframe.d.mts b/packages/ng-devtools/dist/devframe.d.mts deleted file mode 100644 index d1602c8..0000000 --- a/packages/ng-devtools/dist/devframe.d.mts +++ /dev/null @@ -1,4 +0,0 @@ -//#region src/devframe.d.ts -declare const ngDevtools: import("devframe").DevframeDefinition; -//#endregion -export { ngDevtools as default }; \ No newline at end of file diff --git a/packages/ng-devtools/dist/devframe.mjs b/packages/ng-devtools/dist/devframe.mjs deleted file mode 100644 index 28a8b9c..0000000 --- a/packages/ng-devtools/dist/devframe.mjs +++ /dev/null @@ -1,1228 +0,0 @@ -import { defineDevframe, defineRpcFunction } from "devframe"; -import * as v from "valibot"; -import { toStandardJsonSchema } from "@valibot/to-json-schema"; -import { existsSync, lstatSync, readFileSync, readdirSync, realpathSync, statSync } from "node:fs"; -import { isAbsolute, join, relative, resolve, sep } from "node:path"; -//#region src/rpc/agent-schema.ts -/** -* Attach a [Standard JSON Schema](https://standardschema.dev/) converter to a -* valibot schema. -* -* Devframe stays validator neutral: it describes an RPC `returns` schema with -* the validator's own converter, and valibot does not ship one by default. -* Without it devframe falls back to a permissive object schema and advertises -* that as the MCP `outputSchema`, so a tool returning an array fails every -* `tools/call` against the schema the server itself published. -* -* With the converter attached, an object return is described accurately, and -* an array return advertises no output schema at all, since MCP only allows an -* object there. Either way the response matches what was advertised. -*/ -function describable(schema) { - const described = { - ...schema, - ...toStandardJsonSchema(schema) - }; - described["~standard"].jsonSchema.input({ target: "draft-2020-12" }); - return described; -} -//#endregion -//#region src/rpc/source-scan.ts -/** -* Index of the `/` that closes the regular expression starting at `start`, or -* `start` itself when this is a division rather than a literal. -*/ -function skipRegex(source, start) { - let inClass = false; - for (let i = start + 1; i < source.length; i++) { - const ch = source[i]; - if (ch === "\\") i++; - else if (ch === "\n") return start; - else if (ch === "[") inClass = true; - else if (ch === "]") inClass = false; - else if (ch === "/" && !inClass) return i; - } - return start; -} -/** Whether the `/` at `at` opens a regular expression rather than dividing. */ -function startsRegex(source, at) { - for (let i = at - 1; i >= 0; i--) { - const ch = source[i]; - if (ch === " " || ch === " " || ch === "\n" || ch === "\r") continue; - return !/[\w$)\]]/.test(ch) || /(?:^|[^\w$.])(?:return|typeof|case|in|of|do|else)$/.test(source.slice(Math.max(0, i - 6), i + 1)); - } - return true; -} -/** -* Index of the quote that closes the string starting at `start`, or `start` -* itself when there is none. -* -* Only a template literal may span lines, so a `'` or `"` left open at the end -* of its line is not a string at all. It is usually a quote inside a regular -* expression, as in `/['"]/`, and treating it as a string would blank out the -* rest of the file. -*/ -function skipString(source, start) { - const quote = source[start]; - for (let i = start + 1; i < source.length; i++) { - const ch = source[i]; - if (ch === "\\") i++; - else if (ch === quote) return i; - else if (ch === "\n" && quote !== "`") return start; - } - return start; -} -/** -* Replace comments with whitespace, keeping every newline so line numbers and -* offsets still match the original file. -*/ -function stripComments(source) { - let out = ""; - for (let i = 0; i < source.length; i++) { - const ch = source[i]; - if (source.startsWith("//", i)) { - const end = source.indexOf("\n", i); - const stop = end === -1 ? source.length : end; - out += blank(source.slice(i, stop)); - i = stop - 1; - } else if (source.startsWith("/*", i)) { - const end = source.indexOf("*/", i + 2); - if (end === -1) { - out += ch; - continue; - } - out += blank(source.slice(i, end + 2)); - i = end + 1; - } else if (ch === "/" && startsRegex(source, i)) { - const end = skipRegex(source, i); - out += source.slice(i, end + 1); - i = end; - } else if (ch === "\"" || ch === "'" || ch === "`") { - const end = skipString(source, i); - if (end === i) { - out += ch; - continue; - } - out += source.slice(i, end + 1); - i = end; - } else out += ch; - } - return out; -} -/** -* Replace the contents of regular expression literals with spaces, keeping the -* delimiters and the length. A pattern is not code, so a call spelled out -* inside one, as in `/signalStore\(\)/`, must not be reported as a real -* declaration. Run it after `maskStrings`, so a `/` inside a string is gone. -*/ -function maskRegexes(source) { - let out = ""; - for (let i = 0; i < source.length; i++) { - const ch = source[i]; - if (ch !== "/" || !startsRegex(source, i)) { - out += ch; - continue; - } - const end = skipRegex(source, i); - if (end === i) { - out += ch; - continue; - } - out += ch + blank(source.slice(i + 1, end)) + source[end]; - i = end; - } - return out; -} -/** -* Replace the contents of string and template literals with spaces, keeping -* the quotes, the length and every newline. Use it before matching patterns -* that would otherwise fire on code quoted inside a template. -*/ -function maskStrings(source) { - let out = ""; - for (let i = 0; i < source.length; i++) { - const ch = source[i]; - if (ch === "/" && startsRegex(source, i)) { - const end = skipRegex(source, i); - out += source.slice(i, end + 1); - i = end; - } else if (ch === "\"" || ch === "'" || ch === "`") { - const end = skipString(source, i); - if (end === i) { - out += ch; - continue; - } - out += ch + blank(source.slice(i + 1, end)) + (end < source.length ? source[end] : ""); - i = end; - } else out += ch; - } - return out; -} -/** -* A reusable line lookup for one file. Scanning for newlines on every match is -* quadratic over a file; this walks it once and then binary searches. -*/ -function lineCounter(source) { - const starts = [0]; - for (let i = 0; i < source.length; i++) if (source[i] === "\n") starts.push(i + 1); - return (index) => { - let low = 0; - let high = starts.length - 1; - while (low < high) { - const mid = low + high + 1 >> 1; - if (starts[mid] <= index) low = mid; - else high = mid - 1; - } - return low + 1; - }; -} -/** Same length as `text`, with every character but the newlines blanked out. */ -function blank(text) { - return text.replace(/[^\n]/g, " "); -} -/** A class body, with the selector of the decorator that precedes it. */ -/** -* A single line type annotation between a member name and its `=`. A top level -* comma ends it, so `constructor(label: string, count = signal(0))` declares -* `count` rather than swallowing the parameter list into `label`'s annotation. -* Commas inside a generic argument list are still part of the annotation. -*/ -const ANNOTATION = String.raw`(?::(?:[^=;\n,<]|=>|<[^;\n]*?>){0,120})?`; -const DECORATOR = /@(Component|Directive)\s*\(/g; -/** -* The span of every class in the file, each with the selector of the -* `@Component` or `@Directive` decorating it. -*/ -function classScopes(code, source) { - const scopes = []; - const declaration = /\bclass\s+\w+/g; - let previousEnd = 0; - let match; - while ((match = declaration.exec(code)) !== null) { - const bodyStart = classBodyStart(code, match.index + match[0].length); - if (bodyStart === -1) break; - const end = matchDelimiter(code, bodyStart, "{", "}"); - scopes.push({ - start: match.index, - end, - ...decoratorOf(code.slice(previousEnd, match.index), source.slice(previousEnd, match.index)) - }); - previousEnd = end; - declaration.lastIndex = end; - } - return scopes; -} -/** -* The first `{` that opens the class body, skipping the braces a generic -* parameter list can hold, as in `class Panel {`. -*/ -function classBodyStart(code, from) { - let angle = 0; - for (let i = from; i < code.length; i++) { - const ch = code[i]; - if (ch === "/" && startsRegex(code, i)) i = skipRegex(code, i); - else if (ch === "\"" || ch === "'" || ch === "`") i = skipString(code, i); - else if (ch === "<") angle++; - else if (ch === ">" && angle > 0) angle--; - else if (ch === "{" && angle === 0) return i; - } - return -1; -} -/** -* The selector of the last `@Component`/`@Directive` decorator in `code`, read -* out of `source` at the same offsets. Both the decorator and the `selector` -* key are found in the masked copy, so neither a decorator nor a `selector:` -* written inside a template can be picked up, and only the value is read from -* the unmasked copy, where it survives. -*/ -/** -* The `@Component` or `@Directive` that precedes a class, read once. Matching -* the decorator name with a word boundary keeps `@ComponentMeta()` from being -* taken for `@Component`, and returning its arguments here means no caller has -* to look the decorator up a second time and disagree about which one it is. -*/ -function decoratorOf(code, source) { - let open = -1; - let kind; - for (const match of code.matchAll(DECORATOR)) { - open = match.index + match[0].length - 1; - kind = match[1] === "Directive" ? "directive" : "component"; - } - if (open === -1) return {}; - const close = matchDelimiter(code, open, "(", ")"); - const args = code.slice(open, close); - const decoratorArgs = code.slice(open, close + 1); - const key = /\bselector\s*:\s*['"`]/.exec(args); - if (!key) return { - kind, - decoratorArgs - }; - const quote = open + key.index + key[0].length - 1; - return { - component: source.slice(quote + 1, skipString(source, quote)), - kind, - decoratorArgs - }; -} -/** Index of the delimiter that closes the one at `open`. */ -function matchDelimiter(source, open, start, end) { - let depth = 0; - for (let i = open; i < source.length; i++) { - const ch = source[i]; - if (ch === "\"" || ch === "'" || ch === "`") i = skipString(source, i); - else if (ch === "/" && i > open && startsRegex(source, i)) i = skipRegex(source, i); - else if (ch === start) depth++; - else if (ch === end && --depth === 0) return i; - } - return source.length; -} -/** -* The directories to scan for source files: every `sourceRoot` in -* `angular.json`, so a workspace with more than one project is covered, and -* `src` for a project without one. Falls back to the working directory. -*/ -function sourceRoots(cwd) { - const roots = []; - try { - const projects = JSON.parse(parseJsonc(readFileSync(join(cwd, "angular.json"), "utf-8")))?.projects; - for (const project of Object.values(projects ?? {})) { - if (!project || typeof project !== "object") continue; - const entry = project; - const root = entry["sourceRoot"] ?? join(String(entry["root"] ?? ""), "src"); - if (typeof root === "string" && root) roots.push(resolve(cwd, root)); - } - } catch {} - const declared = new Set(roots); - roots.push(join(cwd, "src")); - const root = realPath(cwd); - const seen = /* @__PURE__ */ new Set(); - const realOf = /* @__PURE__ */ new Map(); - const usable = [...new Set(roots)].filter((dir) => { - const real = realPath(dir); - if (seen.has(real)) return false; - const inside = relative(root, real); - if (!inside || escapes(inside) || isAbsolute(inside)) return false; - const refused = declared.has(dir) ? DEPENDENCY_DIRS : IGNORED_DIRS; - if (inside.split(/[\\/]/).some((part) => refused.has(part.toLowerCase()))) return false; - try { - if (!statSync(real).isDirectory()) return false; - } catch { - return false; - } - seen.add(real); - realOf.set(dir, real); - return true; - }); - const kept = []; - let cover; - const order = usable.map((dir) => ({ - dir, - real: realOf.get(dir) ?? dir - })).sort((a, b) => a.real + sep < b.real + sep ? -1 : a.real === b.real ? 0 : 1); - for (const { dir, real } of order) { - if (cover !== void 0 && !escapes(relative(cover, real))) { - if (!relative(cover, real).split(/[\\/]/).some((part) => IGNORED_DIRS.has(part.toLowerCase()))) continue; - kept.push(dir); - continue; - } - kept.push(dir); - cover = real; - } - return kept; -} -/** Directories holding third-party code, never scanned even when declared. */ -const DEPENDENCY_DIRS = /* @__PURE__ */ new Set([ - "node_modules", - ".git", - ".yarn" -]); -/** Directories that never hold project source. */ -const IGNORED_DIRS = /* @__PURE__ */ new Set([ - "node_modules", - "dist", - "build", - "out-tsc", - "coverage", - "tmp", - ".angular", - ".git", - ".nx", - ".cache", - ".turbo", - ".yarn" -]); -/** -* JSONC as plain JSON: comments gone and trailing commas dropped. The commas -* are located in a masked copy, so a `,}` inside a path stays untouched. -*/ -function parseJsonc(source) { - const text = stripComments(source); - const masked = maskStrings(text); - const trailing = /,(\s*[}\]])/g; - let out = ""; - let last = 0; - let match; - while ((match = trailing.exec(masked)) !== null) { - out += text.slice(last, match.index); - last = match.index + 1; - } - return out + text.slice(last); -} -/** -* Whether a relative path leaves its base. A plain `startsWith('..')` also -* matches a child named `..foo`, which does not. -*/ -function escapes(rel) { - return rel === ".." || rel.startsWith(".." + sep); -} -/** The path with symlinks resolved, or the path itself when it does not exist. */ -function realPath(path) { - try { - return realpathSync(path); - } catch { - return path; - } -} -//#endregion -//#region src/rpc/get-routes.ts -const RouteSchema = v.object({ - path: v.string(), - component: v.optional(v.string()), - hasChildren: v.boolean(), - file: v.string() -}); -const getRoutes = defineRpcFunction({ - name: "get-routes", - type: "query", - jsonSerializable: true, - args: [], - returns: describable(v.array(RouteSchema)), - agent: { - description: "List Angular routes extracted from route configuration files in the workspace. Call before suggesting navigation changes or analyzing the app structure.", - title: "List Angular routes" - }, - setup: (ctx) => ({ handler: async () => extractRoutes(ctx.cwd) }) -}); -function extractRoutes(cwd) { - const routes = []; - for (const root of sourceRoots(cwd)) findRouteFiles(root, cwd, routes); - return routes; -} -function findRouteFiles(dir, cwd, routes) { - let entries; - try { - entries = readdirSync(dir); - } catch { - return; - } - for (const entry of entries) { - const full = join(dir, entry); - try { - const stats = lstatSync(full); - if (stats.isSymbolicLink()) continue; - if (stats.isDirectory()) { - if (!IGNORED_DIRS.has(entry.toLowerCase())) findRouteFiles(full, cwd, routes); - continue; - } - } catch { - continue; - } - if (!entry.match(/\.routes\.ts$|routing\.module\.ts$/)) continue; - try { - const content = readFileSync(full, "utf-8"); - const relPath = relative(cwd, full); - for (const body of objectLiterals(stripComments(content))) { - const props = topLevelProps(body); - const path = props.get("path")?.match(/^['"`]([^'"`]*)['"`]$/)?.[1]; - if (path === void 0) continue; - routes.push({ - path, - component: routeComponent(props), - hasChildren: props.has("children") || props.has("loadChildren"), - file: relPath - }); - } - } catch {} - } -} -function routeComponent(props) { - const eager = props.get("component")?.match(/^(\w+)/)?.[1]; - if (eager) return eager; - return props.get("loadComponent")?.match(/\.then\(\s*\(?\s*(\w+)\s*\)?\s*=>\s*\1\.(\w+)/)?.[2]; -} -const ROUTE_ARRAY = /(?:\bchildren\s*:|\b(?:provideRouter|forRoot|forChild)\s*\()\s*$/; -function objectLiterals(source) { - const spans = []; - const open = []; - for (let i = 0; i < source.length; i++) { - const ch = source[i]; - if (ch === "/" && startsRegex(source, i)) i = skipRegex(source, i); - else if (ch === "\"" || ch === "'" || ch === "`") i = skipString(source, i); - else if ("([{".includes(ch)) { - const parent = open.at(-1); - open.push({ - ch, - at: i, - routeArray: ch === "[" && (!parent || ROUTE_ARRAY.test(source.slice(Math.max(0, i - 64), i))), - routeObject: ch === "{" && parent?.ch === "[" && parent.routeArray - }); - } else if (")]}".includes(ch)) { - const closed = open.pop(); - if (ch === "}" && closed?.routeObject) spans.push([closed.at, i]); - } - } - return spans.sort((a, b) => a[0] - b[0]).map(([start, end]) => source.slice(start + 1, end)); -} -function topLevelProps(body) { - const props = /* @__PURE__ */ new Map(); - const add = (text) => { - const prop = text.match(/^\s*(\w+)\s*:\s*([\s\S]*?)\s*$/); - if (prop) props.set(prop[1], prop[2]); - }; - let depth = 0; - let start = 0; - for (let i = 0; i < body.length; i++) { - const ch = body[i]; - if (ch === "/" && startsRegex(body, i)) i = skipRegex(body, i); - else if (ch === "\"" || ch === "'" || ch === "`") i = skipString(body, i); - else if ("([{".includes(ch)) depth++; - else if (")]}".includes(ch)) depth--; - else if (ch === "," && depth === 0) { - add(body.slice(start, i)); - start = i + 1; - } - } - add(body.slice(start)); - return props; -} -//#endregion -//#region src/rpc/get-components.ts -const ComponentSchema = v.object({ - selector: v.string(), - kind: v.string(), - file: v.string(), - inputs: v.array(v.string()), - outputs: v.array(v.string()), - isStandalone: v.boolean() -}); -const getComponents = defineRpcFunction({ - name: "get-components", - type: "query", - jsonSerializable: true, - args: [], - returns: describable(v.array(ComponentSchema)), - agent: { - description: "Discover Angular components and directives by scanning source files for @Component and @Directive decorators. Returns each selector with its kind, inputs, outputs, and file path. Call this to understand the component architecture.", - title: "List Angular components" - }, - setup: (ctx) => ({ handler: async () => scanComponents(ctx.cwd) }) -}); -function scanComponents(cwd) { - const components = []; - for (const root of sourceRoots(cwd)) walk$3(root, cwd, components); - return components; -} -function walk$3(dir, cwd, out) { - let entries; - try { - entries = readdirSync(dir); - } catch { - return; - } - for (const entry of entries) { - const full = join(dir, entry); - try { - const stats = lstatSync(full); - if (stats.isSymbolicLink()) continue; - if (stats.isDirectory()) { - if (!IGNORED_DIRS.has(entry.toLowerCase())) walk$3(full, cwd, out); - continue; - } - } catch { - continue; - } - if (!entry.endsWith(".ts") || entry.endsWith(".spec.ts")) continue; - try { - out.push(...componentsIn(readFileSync(full, "utf-8"), relative(cwd, full))); - } catch {} - } -} -function componentsIn(content, relPath) { - const source = stripComments(content); - const code = maskStrings(source); - const components = []; - classScopes(code, source).forEach((scope) => { - if (!scope.component) return; - const body = code.slice(scope.start, scope.end); - components.push({ - selector: scope.component, - kind: scope.kind ?? "component", - file: relPath, - inputs: [...names(body, INPUT), ...names(body, INPUT_DECORATOR)], - outputs: [...names(body, OUTPUT), ...names(body, OUTPUT_DECORATOR)], - isStandalone: !/\bstandalone\s*:\s*false\b/.test(scope.decoratorArgs ?? "") - }); - }); - return components; -} -function names(body, pattern) { - pattern.lastIndex = 0; - return [...body.matchAll(pattern)].map((match) => match[1]); -} -const INPUT = new RegExp(String.raw`(? ({ handler: async () => { - const pkg = readJson(join(ctx.cwd, "package.json")); - const angularJson = readJson(join(ctx.cwd, "angular.json")); - const deps = { - ...pkg["dependencies"], - ...pkg["devDependencies"] - }; - const angularVersion = (deps["@angular/core"] ?? "unknown").replace(/^\^|~/, ""); - const typescript = (deps["typescript"] ?? "unknown").replace(/^\^|~/, ""); - const defaultProject = angularJson?.["defaultProject"] ?? Object.keys(angularJson?.["projects"] ?? {})[0] ?? pkg["name"] ?? "unknown"; - const projectConfig = angularJson?.["projects"]?.[defaultProject]; - return { - angularVersion, - projectName: defaultProject, - typescript, - ssr: !!(projectConfig?.architect?.build?.options?.ssr || projectConfig?.architect?.build?.options?.server), - builtAt: Date.now() - }; - } }) -}); -function readJson(path) { - try { - if (!existsSync(path)) return {}; - return JSON.parse(readFileSync(path, "utf-8")); - } catch { - return {}; - } -} -//#endregion -//#region src/rpc/get-signals.ts -const SignalEntrySchema = v.object({ - name: v.string(), - kind: v.string(), - file: v.string(), - line: v.number(), - component: v.optional(v.string()) -}); -const getSignals = defineRpcFunction({ - name: "get-signals", - type: "query", - jsonSerializable: true, - args: [], - returns: describable(v.array(SignalEntrySchema)), - agent: { - description: "Scan source files for signal(), computed(), linkedSignal(), and effect() declarations. Returns name, kind, file, and line number. Call this to understand the reactive architecture before suggesting changes.", - title: "List Angular signals from source" - }, - setup: (ctx) => ({ handler: async () => scanSignals(ctx.cwd) }) -}); -const KINDS = { - signal: "signal", - computed: "computed", - linkedSignal: "linkedSignal", - effect: "effect", - resource: "resource", - input: "input (signal)", - output: "output (signal)", - model: "model (signal)", - viewChild: "viewChild (signal)", - viewChildren: "viewChildren (signal)", - contentChild: "contentChild (signal)", - contentChildren: "contentChildren (signal)" -}; -const SIGNAL_CALL = new RegExp(String.raw`(? at >= scope.start && at < scope.end)?.component - }); - } - return entries; -} -//#endregion -//#region src/rpc/get-providers.ts -const ProviderEntrySchema = v.object({ - token: v.string(), - source: v.string(), - file: v.string(), - line: v.number(), - providedIn: v.optional(v.string()), - type: v.string() -}); -const getProviders = defineRpcFunction({ - name: "get-providers", - type: "query", - jsonSerializable: true, - args: [], - returns: describable(v.array(ProviderEntrySchema)), - agent: { - description: "Scan source files for DI providers: @Injectable services, inject() calls, and providers arrays. Returns token, file, and where it is provided. Call this to understand the DI architecture.", - title: "List Angular DI providers from source" - }, - setup: (ctx) => ({ handler: async () => scanProviders(ctx.cwd) }) -}); -const DECORATOR_KEYWORDS = /* @__PURE__ */ new Set([ - "Component", - "NgModule", - "Injectable", - "Directive", - "Pipe", - "Service", - "Input", - "Output", - "Inject", - "Optional", - "Self", - "SkipSelf", - "Host" -]); -const PROVIDE_FN_TO_TOKEN = { - provideHttpClient: "HttpClient", - provideRouter: "Router", - provideAnimations: "AnimationDriver", - provideAnimationsAsync: "AnimationDriver", - provideClientHydration: "ClientHydration", - provideZoneChangeDetection: "NgZone", - provideZonelessChangeDetection: "ChangeDetection (zoneless)", - provideExperimentalZonelessChangeDetection: "ChangeDetection (zoneless)", - provideBrowserGlobalErrorListeners: "ErrorHandler", - provideServiceWorker: "ServiceWorker", - provideCheckNoChangesConfig: "CheckNoChanges", - provideExperimentalCheckNoChanges: "CheckNoChanges", - providePlatformInitializer: "PlatformInitializer", - provideAppInitializer: "AppInitializer", - provideEnvironmentInitializer: "EnvironmentInitializer" -}; -function scanProviders(cwd) { - const entries = []; - for (const root of sourceRoots(cwd)) walk$1(root, cwd, entries); - return entries; -} -function walk$1(dir, cwd, out) { - let items; - try { - items = readdirSync(dir); - } catch { - return; - } - for (const item of items) { - const full = join(dir, item); - try { - const stats = lstatSync(full); - if (stats.isSymbolicLink()) continue; - if (stats.isDirectory()) { - if (!IGNORED_DIRS.has(item.toLowerCase())) walk$1(full, cwd, out); - continue; - } - } catch { - continue; - } - if (!item.endsWith(".ts") || item.endsWith(".spec.ts") || item.endsWith(".d.ts")) continue; - try { - const source = stripComments(readFileSync(full, "utf-8")); - const code = maskRegexes(maskStrings(source)); - const relPath = relative(cwd, full); - const lineAt = lineCounter(code); - for (const decorator of code.matchAll(/@(Injectable|Service)\b/g)) { - const at = decorator.index; - let after = at + decorator[0].length; - let args = ""; - const parenAt = code.indexOf("(", after); - if (parenAt !== -1 && code.slice(after, parenAt).trim() === "") { - const close = matchDelimiter(code, parenAt, "(", ")"); - args = source.slice(parenAt, close + 1); - after = close + 1; - } - DECLARATION.lastIndex = skipDecorators(code, after); - const declaration = DECLARATION.exec(code); - if (!declaration) continue; - const isService = decorator[1] === "Service"; - out.push({ - token: declaration[1], - source: "class", - file: relPath, - line: lineAt(at), - providedIn: /providedIn\s*:\s*(?:['"`](\w+)['"`]|([A-Za-z_$][\w$]*))/.exec(args)?.slice(1).find(Boolean) ?? (isService ? "root" : void 0), - type: "injectable" - }); - } - for (const match of code.matchAll(/(?]*>)?\s*\(\s*(\w+)/g)) out.push({ - token: match[2], - source: match[1], - file: relPath, - line: lineAt(match.index), - type: "injection" - }); - for (const match of code.matchAll(/@Inject\(\s*(\w+)\s*\)\s*(?:private|protected|public|readonly|\s)*(\w+)/g)) out.push({ - token: match[1], - source: match[2], - file: relPath, - line: lineAt(match.index), - type: "injection" - }); - for (const match of code.matchAll(/\b(provide\w+)\s*\(/g)) { - const fnName = match[1]; - const token = PROVIDE_FN_TO_TOKEN[fnName]; - if (token) out.push({ - token, - source: fnName + "()", - file: relPath, - line: lineAt(match.index), - providedIn: "root", - type: "root-provider" - }); - } - for (const providersMatch of code.matchAll(/providers\s*:\s*\[/g)) { - const openAt = providersMatch.index + providersMatch[0].lastIndexOf("["); - const blockStart = openAt + 1; - const block = code.slice(blockStart, matchDelimiter(code, openAt, "[", "]")); - for (const tokenMatch of block.matchAll(/\b([A-Z]\w+)\b/g)) { - const token = tokenMatch[1]; - if (DECORATOR_KEYWORDS.has(token)) continue; - out.push({ - token, - source: "providers array", - file: relPath, - line: lineAt(blockStart + tokenMatch.index), - type: "provider" - }); - } - } - } catch {} - } -} -/** -* Past any further decorators on the same declaration. TypeScript allows more -* than one, and the sticky `DECLARATION` match would otherwise stop at the -* first of them and miss the class. -*/ -function skipDecorators(code, from) { - let at = from; - for (;;) { - const next = /\S/.exec(code.slice(at)); - if (!next || code[at + next.index] !== "@") return at; - const nameEnd = at + next.index + 1 + (/^[\w$]*/.exec(code.slice(at + next.index + 1))?.[0].length ?? 0); - const paren = /\S/.exec(code.slice(nameEnd)); - if (paren && code[nameEnd + paren.index] === "(") at = matchDelimiter(code, nameEnd + paren.index, "(", ")") + 1; - else at = nameEnd; - } -} -/** Sticky, so the class after a decorator is found however far it sits. */ -const DECLARATION = /\s*(?:export\s+)?(?:default\s+)?(?:abstract\s+)?class\s+(\w+)/y; -//#endregion -//#region src/rpc/get-ngrx-store.ts -const NgrxStoreEntrySchema = v.object({ - name: v.string(), - kind: v.picklist([ - "action", - "reducer", - "effect", - "selector", - "feature", - "store-setup", - "signal-store", - "signal-state", - "signal-method" - ]), - file: v.string(), - line: v.number(), - detail: v.optional(v.string()) -}); -const getNgrxStore = defineRpcFunction({ - name: "get-ngrx-store", - type: "query", - jsonSerializable: true, - args: [], - returns: describable(v.array(NgrxStoreEntrySchema)), - agent: { - description: "Scan source files for NgRx store patterns: actions, reducers, effects, selectors, features, and store setup. Returns name, kind, file, and line number. Call this to understand the NgRx state management architecture.", - title: "List NgRx store entries from source" - }, - setup: (ctx) => ({ handler: async () => scanNgrxStore(ctx.cwd) }) -}); -const NGRX_PATTERNS = [ - { - pattern: /export\s+const\s+(\w+)\s*=\s*createAction\s*\(/g, - kind: "action" - }, - { - pattern: /(\w+)\s*=\s*createActionGroup\s*\(/g, - kind: "action" - }, - { - pattern: /export\s+const\s+(\w+)\s*=\s*createReducer\s*\(/g, - kind: "reducer" - }, - { - pattern: /([\w$]+)\s*=\s*createEffect\s*\(/g, - kind: "effect" - }, - { - pattern: /export\s+const\s+(\w+)\s*=\s*createSelector\s*\(/g, - kind: "selector" - }, - { - pattern: /export\s+const\s+(\w+)\s*=\s*createFeatureSelector\s*[<(]/g, - kind: "selector" - }, - { - pattern: /export\s+const\s+(\w+)\s*=\s*createFeature\s*\(/g, - kind: "feature" - }, - { - pattern: /(provideStore)\s*\(/g, - kind: "store-setup" - }, - { - pattern: /(provideState)\s*\(/g, - kind: "store-setup" - }, - { - pattern: /(provideEffects)\s*\(/g, - kind: "store-setup" - }, - { - pattern: /StoreModule\.(forRoot|forFeature)\s*\(/g, - kind: "store-setup" - }, - { - pattern: /EffectsModule\.(forRoot|forFeature)\s*\(/g, - kind: "store-setup" - }, - { - pattern: /(?:export\s+)?const\s+(\w+)\s*=\s*signalStore\s*\(/g, - kind: "signal-store" - }, - { - pattern: /(?:export\s+)?const\s+(\w+)\s*=\s*signalState\s*[<(]/g, - kind: "signal-state" - }, - { - pattern: /export\s+const\s+(\w+)\s*=\s*signalMethod\s*[<(]/g, - kind: "signal-method" - }, - { - pattern: /(\w+)\s*:\s*signalMethod\s*[<(]/g, - kind: "signal-method" - } -]; -function scanNgrxStore(cwd) { - const entries = []; - for (const root of sourceRoots(cwd)) walk(root, cwd, entries); - const seen = /* @__PURE__ */ new Set(); - return entries.filter((e) => { - const key = `${e.name}:${e.file}:${e.line}`; - if (seen.has(key)) return false; - seen.add(key); - return true; - }); -} -function walk(dir, cwd, out) { - let items; - try { - items = readdirSync(dir); - } catch { - return; - } - for (const item of items) { - const full = join(dir, item); - try { - const stats = lstatSync(full); - if (stats.isSymbolicLink()) continue; - if (stats.isDirectory()) { - if (!IGNORED_DIRS.has(item.toLowerCase())) walk(full, cwd, out); - continue; - } - } catch { - continue; - } - if (!item.endsWith(".ts") || item.endsWith(".spec.ts") || item.endsWith(".d.ts")) continue; - try { - const raw = readFileSync(full, "utf-8"); - if (!raw.includes("@ngrx/") && !raw.includes("createAction") && !raw.includes("createReducer") && !raw.includes("createEffect") && !raw.includes("createSelector") && !raw.includes("createFeature") && !raw.includes("signalStore") && !raw.includes("signalState")) continue; - const content = maskRegexes(maskStrings(stripComments(raw))); - const lineAt = lineCounter(content); - const relPath = relative(cwd, full); - for (const { pattern, kind } of NGRX_PATTERNS) { - pattern.lastIndex = 0; - let match; - while ((match = pattern.exec(content)) !== null) { - const lineNum = lineAt(match.index); - const name = match[1]; - const displayName = kind === "store-setup" && (match[0].includes("StoreModule") || match[0].includes("EffectsModule")) ? match[0].replace(/\s*\($/, "") : name; - out.push({ - name: displayName, - kind, - file: relPath, - line: lineNum - }); - } - } - } catch {} - } -} -//#endregion -//#region package.json -var name = "@santoshyadavdev/ng-devtools"; -var version = "0.0.1"; -//#endregion -//#region src/devframe.ts -const clientAssets = { - package: name, - version, - path: "dist/public" -}; -const ngDevtools = defineDevframe({ - id: "ng-devtools", - name: "Angular DevTools", - version, - packageName: name, - description: "Inspect Angular component trees, signals, and routes at dev and build time.", - homepage: "https://github.com/santoshyadavdev/angular-devtools", - icon: "ph:angular-logo-duotone", - importMetaUrl: import.meta.url, - clientAssets, - async setup(ctx) { - const my = ctx.scope("ng-devtools"); - my.rpc.register(getRoutes); - my.rpc.register(getComponents); - my.rpc.register(getSignals); - my.rpc.register(getProviders); - my.rpc.register(getNgrxStore); - my.rpc.register(getBuildMeta); - const componentTree = await my.rpc.sharedState("component-tree", { initialValue: { - nodes: [], - selectedId: null, - highlightedId: null - } }); - await my.rpc.sharedState("routes", { initialValue: { - routes: [], - activeRoute: null - } }); - const signalGraphState = await my.rpc.sharedState("signal-graph", { initialValue: { - graph: null, - selectedNodeId: null - } }); - const injectorTreeState = await my.rpc.sharedState("injector-tree", { initialValue: { - roots: [], - selectedInjectorId: null - } }); - const ngrxStoreState = await my.rpc.sharedState("ngrx-store", { initialValue: { - state: null, - actions: [], - connected: false - } }); - my.rpc.register({ - name: "push-component-tree", - type: "action", - jsonSerializable: true, - handler: (nodes) => { - componentTree.mutate((draft) => { - draft.nodes = nodes; - }); - } - }); - my.rpc.register({ - name: "select-component", - type: "action", - jsonSerializable: true, - handler: (id) => { - componentTree.mutate((draft) => { - draft.selectedId = id; - }); - } - }); - my.rpc.register({ - name: "push-signal-graph", - type: "action", - jsonSerializable: true, - handler: (graph) => { - signalGraphState.mutate((draft) => { - draft.graph = graph; - }); - } - }); - my.rpc.register({ - name: "push-injector-tree", - type: "action", - jsonSerializable: true, - handler: (roots) => { - injectorTreeState.mutate((draft) => { - draft.roots = roots; - }); - } - }); - my.rpc.register({ - name: "push-ngrx-state", - type: "action", - jsonSerializable: true, - handler: (data) => { - ngrxStoreState.mutate((draft) => { - draft.state = data.state; - draft.actions = data.actions; - draft.connected = data.connected; - }); - } - }); - ctx.agent.registerResource({ - id: "ng-devtools:component-tree", - name: "Angular Component Tree", - description: "Component hierarchy last reported by a connected page, as JSON. Empty when no page is connected.", - mimeType: "application/json", - read: () => ({ text: JSON.stringify(componentTree.value(), null, 2) }) - }); - ctx.agent.registerResource({ - id: "ng-devtools:signal-graph", - name: "Angular Signal Graph", - description: "Live signal dependency graph: nodes (signal, computed, effect, linkedSignal) and edges (producer→consumer). Read this to understand reactive data flow.", - mimeType: "application/json", - read: () => ({ text: JSON.stringify(signalGraphState.value(), null, 2) }) - }); - ctx.agent.registerResource({ - id: "ng-devtools:injector-tree", - name: "Angular Injector Tree", - description: "DI injector hierarchy last reported by a connected page, with providers at each level. Empty when no page is connected.", - mimeType: "application/json", - read: () => ({ text: JSON.stringify(injectorTreeState.value(), null, 2) }) - }); - ctx.agent.registerResource({ - id: "ng-devtools:ngrx-store", - name: "NgRx Store State", - description: "NgRx store state and recent actions last reported by a connected page. Empty when no page is connected.", - mimeType: "application/json", - read: () => ({ text: JSON.stringify(ngrxStoreState.value(), null, 2) }) - }); - ctx.agent.registerTool({ - id: "ng-devtools:highlight", - description: "Highlight a component in the running Angular app by its selector.", - safety: "action", - inputSchema: { - type: "object", - properties: { selector: { - type: "string", - description: "CSS selector of the component to highlight, e.g. app-root." - } }, - required: ["selector"] - }, - handler: async (args) => { - if (!componentTree.value().nodes.length) return { markdown: `No component tree has been reported, so nothing was highlighted. This is what a page that has never connected reports, and also what a connected page reports when its components are not readable. Live data needs a page: connect through the MCP endpoint of the server that runs the app, with the app open in a browser. The stdio server has no page attached and only ever reports this.` }; - await ctx.rpc.invokeLocal("ng-devtools:select-component", args.selector); - my.rpc.broadcast({ - method: "highlight-in-page", - args: [args.selector], - optional: true - }); - return { markdown: `Sent a highlight request for \`${args.selector}\`. It only shows if the selector matches an element on the page.` }; - } - }); - ctx.agent.registerTool({ - id: "ng-devtools:inspect-signals", - description: "Get the signal graph the running page last reported: signal nodes (signal, computed, linkedSignal, effect) and their dependency edges. The page reports one graph, for its root component, so a selector that does not match it returns what is available instead.", - safety: "read", - inputSchema: { - type: "object", - properties: { selector: { - type: "string", - description: "CSS selector of the component to inspect, e.g. app-root." - } }, - required: ["selector"] - }, - handler: async (args) => { - const graph = signalGraphState.value().graph; - if (!graph) return { markdown: `No signal graph available. Live data needs a page: connect through the MCP endpoint of the server that runs the app, with the app open in a browser. The stdio server has no page attached and only ever reports this.` }; - const json = JSON.stringify(graph, null, 2); - if (graph.componentSelector && graph.componentSelector !== args.selector) return { markdown: `No signal graph for \`${args.selector}\`. The live graph covers \`${graph.componentSelector}\`:\n\n${json}` }; - return { markdown: json }; - } - }); - ctx.agent.registerTool({ - id: "ng-devtools:inspect-providers", - description: "Get the DI injector hierarchy the running page last reported, with the providers at each level. The page reports the whole tree rather than one component, so the selector only labels the answer.", - safety: "read", - inputSchema: { - type: "object", - properties: { selector: { - type: "string", - description: "Optional CSS selector, e.g. app-root. It only labels the answer: the page reports the whole tree either way." - } } - }, - handler: async (args) => { - const roots = injectorTreeState.value().roots; - if (!roots.length) return { markdown: `No injector data available. Live data needs a page: connect through the MCP endpoint of the server that runs the app, with the app open in a browser. The stdio server has no page attached and only ever reports this.` }; - return { markdown: `This is the injector tree for the whole page${args.selector ? `, not filtered to \`${args.selector}\`` : ""}:\n\n${JSON.stringify(roots, null, 2)}` }; - } - }); - } -}); -//#endregion -export { ngDevtools as default }; diff --git a/packages/ng-devtools/dist/overlay.d.mts b/packages/ng-devtools/dist/overlay.d.mts deleted file mode 100644 index be69aaa..0000000 --- a/packages/ng-devtools/dist/overlay.d.mts +++ /dev/null @@ -1,19 +0,0 @@ -//#region src/overlay.d.ts -export declare function initOverlay(options?: { - baseURL?: string | string[]; -}): Promise<() => void>; -export interface AngularDebugApi { - getComponent(el: Element): unknown; - getInjector?(el: Element): unknown; - ɵgetSignalGraph?(injector: unknown): unknown; -} -export declare function collectComponentTree(): ComponentTreeNode[]; -export interface ComponentTreeNode { - id: string; - selector: string; - tagName: string; - children: ComponentTreeNode[]; - inputs?: Record; -} -export declare function walkAngularTree(el: Element, out: ComponentTreeNode[], ng: AngularDebugApi): void; -//#endregion \ No newline at end of file diff --git a/packages/ng-devtools/dist/overlay.mjs b/packages/ng-devtools/dist/overlay.mjs deleted file mode 100644 index 0e8b9bf..0000000 --- a/packages/ng-devtools/dist/overlay.mjs +++ /dev/null @@ -1,353 +0,0 @@ -import { connectDevframe } from "devframe/client"; -//#region src/overlay.ts -let highlightEl = null; -async function initOverlay(options = {}) { - const my = (await connectDevframe({ baseURL: options.baseURL ?? ["./", "/__ng-devtools/"] })).scope("ng-devtools"); - async function pushTree() { - const tree = collectComponentTree(); - await my.rpc.call("push-component-tree", tree); - } - async function pushSignalGraph() { - const graph = collectSignalGraph(); - if (graph) await my.rpc.call("push-signal-graph", graph); - } - async function pushInjectorTree() { - const tree = collectInjectorTree(); - if (tree.length) await my.rpc.call("push-injector-tree", tree); - } - async function pushNgrxState() { - const data = collectNgrxState(); - if (data) await my.rpc.call("push-ngrx-state", data); - } - pushTree(); - pushSignalGraph(); - pushInjectorTree(); - pushNgrxState(); - const interval = setInterval(() => { - pushTree(); - pushSignalGraph(); - pushInjectorTree(); - pushNgrxState(); - }, 3e3); - my.rpc.register({ - name: "highlight-in-page", - type: "event", - jsonSerializable: true, - handler: (selector) => { - clearHighlight(); - let el = null; - try { - el = document.querySelector(selector); - } catch { - return; - } - if (el instanceof HTMLElement) showHighlight(el); - } - }); - return () => { - clearInterval(interval); - clearHighlight(); - }; -} -function findAngularElements() { - const versionEls = Array.from(document.querySelectorAll("[ng-version]")); - const hostEls = Array.from(document.querySelectorAll("*")).filter((el) => Array.from(el.attributes).some((a) => a.name.startsWith("_nghost"))); - return Array.from(/* @__PURE__ */ new Set([...versionEls, ...hostEls])); -} -function collectComponentTree() { - const nodes = []; - const allRoots = findAngularElements(); - const roots = allRoots.filter((root) => !allRoots.some((other) => other !== root && other.contains(root))); - const ng = window.ng; - if (ng?.getComponent) { - if (roots.length > 0) for (const root of roots) walkAngularTree(root, nodes, ng); - else if (typeof document !== "undefined" && document.body) walkAngularTree(document.body, nodes, ng); - } else if (typeof document !== "undefined" && document.body) walkDom(document.body, nodes); - return nodes; -} -function walkAngularTree(el, out, ng) { - const component = ng.getComponent(el); - if (component) { - const node = { - id: generateId(el), - selector: el.tagName.toLowerCase(), - tagName: el.tagName.toLowerCase(), - children: [], - inputs: tryGetInputs(component) - }; - for (const child of el.children) walkAngularTree(child, node.children, ng); - out.push(node); - } else for (const child of el.children) walkAngularTree(child, out, ng); -} -function walkDom(el, out) { - const tagName = el.tagName.toLowerCase(); - if (tagName.includes("-") || Array.from(el.attributes).some((a) => a.name.startsWith("_nghost"))) { - const node = { - id: generateId(el), - selector: tagName, - tagName, - children: [] - }; - for (const child of el.children) walkDom(child, node.children); - out.push(node); - } else for (const child of el.children) walkDom(child, out); -} -function isSignal(val) { - if (typeof val !== "function") return false; - if (val.name === "signalValueFn") return true; - return Object.getOwnPropertySymbols(val).some((s) => s.description === "SIGNAL" || s.toString().includes("SIGNAL")); -} -function tryGetInputs(component) { - if (!component || typeof component !== "object") return void 0; - try { - const inputs = {}; - const comp = component; - for (const key of Object.keys(comp)) { - const val = comp[key]; - if (isSignal(val)) try { - inputs[key] = serializeValue(val()); - } catch {} - else if (typeof val !== "function") inputs[key] = serializeValue(val); - } - return Object.keys(inputs).length > 0 ? inputs : void 0; - } catch { - return; - } -} -let idCounter = 0; -function generateId(el) { - const existing = el.getAttribute("data-ng-devtools-id"); - if (existing) return existing; - const id = `ngdt-${++idCounter}`; - el.setAttribute("data-ng-devtools-id", id); - return id; -} -function showHighlight(el) { - clearHighlight(); - const rect = el.getBoundingClientRect(); - highlightEl = document.createElement("div"); - Object.assign(highlightEl.style, { - position: "fixed", - top: `${rect.top}px`, - left: `${rect.left}px`, - width: `${rect.width}px`, - height: `${rect.height}px`, - background: "rgba(104, 182, 255, 0.25)", - border: "2px solid rgba(104, 182, 255, 0.8)", - borderRadius: "4px", - pointerEvents: "none", - zIndex: "2147483647", - transition: "all 0.15s ease" - }); - document.body.appendChild(highlightEl); - setTimeout(clearHighlight, 2e3); -} -function clearHighlight() { - highlightEl?.remove(); - highlightEl = null; -} -function getNg() { - return window.ng; -} -function collectSignalGraph() { - if (!getNg()?.ɵgetSignalGraph) return null; - const roots = document.querySelectorAll("[ng-version], [_nghost-ng-c]"); - for (const root of roots) { - const graph = getSignalGraphForElement(root); - if (graph) return graph; - } - return null; -} -function getSignalGraphForElement(el) { - const ng = getNg(); - if (!ng?.ɵgetSignalGraph || !ng?.getInjector) return null; - try { - const injector = ng.getInjector(el); - if (!injector) return null; - const raw = ng.ɵgetSignalGraph(injector); - if (!raw) return null; - return { - nodes: raw.nodes.map((n) => ({ - id: n.id, - kind: n.kind ?? "unknown", - label: n.label, - epoch: n.epoch ?? 0, - value: serializeValue(n.value), - watched: n.watched ?? false - })), - edges: raw.edges ?? [], - componentSelector: el.tagName.toLowerCase() - }; - } catch { - return null; - } -} -function serializeValue(val) { - if (val === void 0 || val === null) return val; - if (typeof val === "function") return `[Function: ${val.name || "anonymous"}]`; - if (typeof val === "symbol") return val.toString(); - if (typeof val === "bigint") return val.toString(); - if (typeof val === "object") try { - return JSON.parse(JSON.stringify(val)); - } catch { - return String(val); - } - return val; -} -function collectInjectorTree() { - const ng = getNg(); - if (!ng?.getInjector || !ng?.ɵgetInjectorMetadata) return []; - const roots = []; - const visited = /* @__PURE__ */ new WeakSet(); - const componentEls = document.querySelectorAll("[ng-version], [_nghost-ng-c]"); - for (const el of componentEls) try { - const injector = ng.getInjector(el); - if (!injector || visited.has(injector)) continue; - visited.add(injector); - const node = serializeInjectorNode(ng, injector, el, visited); - if (node) roots.push(node); - } catch {} - return roots; -} -function serializeInjectorNode(ng, injector, el, visited) { - try { - const metadata = ng.ɵgetInjectorMetadata?.(injector); - if (!metadata) return null; - const providers = getInjectorProvidersList(ng, injector); - const children = []; - for (const child of el.querySelectorAll(":scope > *")) try { - const childInjector = ng.getInjector(child); - if (!childInjector || visited.has(childInjector) || childInjector === injector) continue; - visited.add(childInjector); - const childNode = serializeInjectorNode(ng, childInjector, child, visited); - if (childNode) children.push(childNode); - } catch {} - return { - injector: { - id: `inj-${el.tagName.toLowerCase()}-${Math.random().toString(36).slice(2, 8)}`, - type: metadata.type ?? "unknown", - name: metadata.type === "element" ? el.tagName.toLowerCase() : metadata.source?.toString?.() ?? "Environment", - providerCount: providers.length - }, - providers, - children - }; - } catch { - return null; - } -} -function getInjectorProvidersList(ng, injector) { - if (!ng.ɵgetInjectorProviders) return []; - try { - return (ng.ɵgetInjectorProviders(injector) ?? []).map((p) => ({ - token: p.token?.name ?? p.token?.toString?.() ?? "unknown", - type: inferProviderType(p), - isViewProvider: p.isViewProvider ?? false - })); - } catch { - return []; - } -} -function inferProviderType(p) { - if (p.useClass) return "class"; - if (p.useValue !== void 0) return "value"; - if (p.useFactory) return "factory"; - if (p.useExisting) return "existing"; - return "class"; -} -const ngrxActionLog = []; -const MAX_ACTION_LOG = 50; -let reduxDevToolsSubscribed = false; -function collectNgrxState() { - const win = window; - if (!reduxDevToolsSubscribed) subscribeToReduxDevTools(); - const storeState = getNgrxStoreState(); - if (storeState !== void 0) return { - state: storeState, - actions: ngrxActionLog.slice(), - connected: true - }; - if (ngrxActionLog.length > 0) return { - state: win.__NGRX_DEVTOOLS_LAST_STATE__ ?? null, - actions: ngrxActionLog.slice(), - connected: true - }; - return null; -} -function getNgrxStoreState() { - const ng = getNg(); - if (!ng?.getInjector) return void 0; - const roots = document.querySelectorAll("[ng-version], [_nghost-ng-c]"); - for (const root of roots) try { - const injector = ng.getInjector(root); - if (!injector) continue; - const allProviders = ng.ɵgetInjectorProviders?.(injector) ?? []; - for (const p of allProviders) { - const token = p.token; - if (!token) continue; - if ((token.name ?? token.toString?.() ?? "") === "Store") try { - const store = injector.get(token); - if (!store || typeof store.subscribe !== "function") continue; - let snapshot; - store.subscribe((val) => { - snapshot = val; - }).unsubscribe(); - if (snapshot !== void 0) return safeSerialize(snapshot); - } catch {} - } - } catch {} -} -function subscribeToReduxDevTools() { - const win = window; - const ext = win.__REDUX_DEVTOOLS_EXTENSION__; - if (!ext) return; - reduxDevToolsSubscribed = true; - const originalConnect = ext.connect?.bind(ext); - if (originalConnect) ext.connect = function(...args) { - const connection = originalConnect(...args); - const originalSend = connection.send?.bind(connection); - if (originalSend) connection.send = function(action, state) { - captureAction(action); - win.__NGRX_DEVTOOLS_LAST_STATE__ = safeSerialize(state); - return originalSend(action, state); - }; - const originalInit = connection.init?.bind(connection); - if (originalInit) connection.init = function(state) { - win.__NGRX_DEVTOOLS_LAST_STATE__ = safeSerialize(state); - return originalInit(state); - }; - return connection; - }; - if (typeof ext.subscribe === "function") try { - ext.subscribe((message) => { - try { - if (message?.type === "ACTION" || message?.type === "DISPATCH") captureAction(message.payload); - if (message?.state) win.__NGRX_DEVTOOLS_LAST_STATE__ = safeSerialize(typeof message.state === "string" ? JSON.parse(message.state) : message.state); - } catch {} - }); - } catch {} -} -function captureAction(action) { - if (!action) return; - const entry = { - type: action.type ?? String(action), - payload: safeSerialize(action.payload ?? action), - timestamp: Date.now() - }; - ngrxActionLog.push(entry); - if (ngrxActionLog.length > MAX_ACTION_LOG) ngrxActionLog.splice(0, ngrxActionLog.length - MAX_ACTION_LOG); -} -function safeSerialize(val) { - if (val === void 0 || val === null) return val; - try { - return JSON.parse(JSON.stringify(val)); - } catch { - return String(val); - } -} -if (typeof document !== "undefined" && !(typeof process !== "undefined" && process.env?.["VITEST"])) { - initOverlay().catch(console.error); - import("./popup.mjs").then((m) => m.createDevtoolsPopup()).catch(console.error); -} -//#endregion -export { collectComponentTree, initOverlay, walkAngularTree }; diff --git a/packages/ng-devtools/dist/popup.d.mts b/packages/ng-devtools/dist/popup.d.mts deleted file mode 100644 index 1b39226..0000000 --- a/packages/ng-devtools/dist/popup.d.mts +++ /dev/null @@ -1,6 +0,0 @@ -//#region src/popup.d.ts -export declare function createDevtoolsPopup(): { - toggle: () => void; - destroy: () => void; -} | undefined; -//#endregion \ No newline at end of file diff --git a/packages/ng-devtools/dist/popup.mjs b/packages/ng-devtools/dist/popup.mjs deleted file mode 100644 index aed1a7b..0000000 --- a/packages/ng-devtools/dist/popup.mjs +++ /dev/null @@ -1,444 +0,0 @@ -//#region src/popup.ts -let popupRoot = null; -/** Kept so a later call returns the same handle rather than nothing. */ -let handle; -let isOpen = false; -const STORAGE_KEY = "ng-devtools-popup"; -const DEFAULT_STATE = { - x: 16, - y: 16, - width: 720, - height: 480, - docked: "float" -}; -function loadState() { - try { - const raw = localStorage.getItem(STORAGE_KEY); - const stored = raw ? JSON.parse(raw) : null; - if (!stored || typeof stored !== "object" || Array.isArray(stored)) return { ...DEFAULT_STATE }; - const saved = stored; - const point = saved.launcher; - return { - ...DEFAULT_STATE, - ...Number.isFinite(saved.x) ? { x: saved.x } : {}, - ...Number.isFinite(saved.y) ? { y: saved.y } : {}, - ...Number.isFinite(saved.width) ? { width: saved.width } : {}, - ...Number.isFinite(saved.height) ? { height: saved.height } : {}, - ...saved.docked === "float" || saved.docked === "bottom" || saved.docked === "right" ? { docked: saved.docked } : {}, - ...point && Number.isFinite(point.x) && Number.isFinite(point.y) ? { launcher: { - x: point.x, - y: point.y - } } : {} - }; - } catch { - return { ...DEFAULT_STATE }; - } -} -function saveState(state) { - try { - localStorage.setItem(STORAGE_KEY, JSON.stringify(state)); - } catch {} -} -function getBaseURL() { - for (const base of [ - "/__ng-devtools/", - "/__devframe/", - "/" - ]) { - try { - const xhr = new XMLHttpRequest(); - xhr.open("GET", base + "__devframe/__connection.json", false); - xhr.send(); - if (xhr.status === 200) return base; - } catch {} - try { - const xhr = new XMLHttpRequest(); - xhr.open("GET", base + "__connection.json", false); - xhr.send(); - if (xhr.status === 200) return base; - } catch {} - } - return "/__ng-devtools/"; -} -function createDevtoolsPopup() { - if (popupRoot) return handle; - const state = loadState(); - popupRoot = document.createElement("div"); - popupRoot.id = "ng-devtools-popup-root"; - const shadow = popupRoot.attachShadow({ mode: "open" }); - const fab = document.createElement("button"); - fab.setAttribute("aria-label", "Toggle Angular DevTools"); - fab.setAttribute("aria-expanded", "false"); - fab.title = "Angular DevTools"; - fab.innerHTML = ""; - const panel = document.createElement("div"); - panel.classList.add("panel"); - panel.setAttribute("role", "region"); - panel.setAttribute("aria-label", "Angular DevTools"); - const toolbar = document.createElement("div"); - toolbar.classList.add("toolbar"); - const title = document.createElement("span"); - title.classList.add("title"); - title.textContent = "Angular DevTools"; - const dockGroup = document.createElement("div"); - dockGroup.classList.add("dock-group"); - for (const mode of [ - "float", - "bottom", - "right" - ]) { - const btn = document.createElement("button"); - btn.type = "button"; - btn.textContent = mode === "float" ? "⊡" : mode === "bottom" ? "⬓" : "⬔"; - btn.title = `Dock ${mode}`; - btn.setAttribute("aria-label", `Dock ${mode}`); - btn.setAttribute("aria-pressed", String(state.docked === mode)); - btn.classList.add("dock-btn"); - if (state.docked === mode) btn.classList.add("active"); - btn.addEventListener("click", () => { - state.docked = mode; - applyDock(); - dockGroup.querySelectorAll(".dock-btn").forEach((b) => { - b.classList.remove("active"); - b.setAttribute("aria-pressed", "false"); - }); - btn.classList.add("active"); - btn.setAttribute("aria-pressed", "true"); - saveState(state); - }); - dockGroup.appendChild(btn); - } - const closeBtn = document.createElement("button"); - closeBtn.type = "button"; - closeBtn.classList.add("close-btn"); - closeBtn.innerHTML = "✕"; - closeBtn.title = "Close"; - closeBtn.setAttribute("aria-label", "Close Angular DevTools"); - closeBtn.addEventListener("click", togglePanel); - toolbar.append(title, dockGroup, closeBtn); - const iframe = document.createElement("iframe"); - iframe.classList.add("frame"); - iframe.title = "Angular DevTools"; - panel.append(toolbar, iframe); - const style = document.createElement("style"); - style.textContent = ` - :host { all: initial; } - .fab { - position: fixed; - z-index: 2147483646; - inset: auto 16px 16px auto; - width: 44px; - height: 44px; - border-radius: 50%; - border: none; - background: var(--ng-devtools-accent, #7c3aed); - color: var(--ng-devtools-accent-ink, #fff); - cursor: pointer; - touch-action: none; - display: flex; - align-items: center; - justify-content: center; - box-shadow: 0 2px 12px rgba(0,0,0,0.3); - transition: transform 0.15s, background 0.15s; - } - .fab:hover { background: var(--ng-devtools-accent-hover, #6d28d9); transform: scale(1.08); } - .fab.open { background: #3f3f46; } - .fab.dragging { - transition: none; - cursor: grabbing; - transform: scale(1.06); - } - /* The shadow root cannot inherit the page's focus styles. */ - .dock-btn:focus-visible, .close-btn:focus-visible { - outline: 2px solid #fff; - outline-offset: 2px; - } - /* The launcher sits on the host page, whose background is unknown, so the - ring is drawn in both directions to stay visible either way. */ - .fab:focus-visible { - outline: 2px solid #fff; - outline-offset: 2px; - box-shadow: 0 0 0 4px #111827; - } - .panel { - position: fixed; - z-index: 2147483647; - display: flex; - flex-direction: column; - opacity: 0; - visibility: hidden; - pointer-events: none; - transform: translateY(8px) scale(0.98); - transform-origin: bottom right; - transition: opacity 160ms ease, transform 160ms ease, visibility 0s linear 160ms; - background: #0f0f11; - border: 1px solid #27272a; - border-radius: 10px; - overflow: hidden; - box-shadow: 0 8px 32px rgba(0,0,0,0.5); - resize: both; - } - .panel.open { - opacity: 1; - visibility: visible; - pointer-events: auto; - transform: none; - transition: opacity 160ms ease, transform 160ms ease, visibility 0s; - } - @media (prefers-reduced-motion: reduce) { - .panel, .panel.open, .fab { transition: none; } - } - .panel.dock-float { - border-radius: 10px; - } - .panel.dock-bottom { - left: 0 !important; - right: 0 !important; - bottom: 0 !important; - top: auto !important; - width: 100% !important; - height: 40vh !important; - border-radius: 10px 10px 0 0; - resize: vertical; - } - .panel.dock-right { - top: 0 !important; - right: 0 !important; - bottom: 0 !important; - left: auto !important; - width: 40vw !important; - height: 100% !important; - border-radius: 10px 0 0 10px; - resize: horizontal; - } - .toolbar { - cursor: grab; - display: flex; - align-items: center; - gap: 8px; - padding: 6px 12px; - background: #18181b; - border-bottom: 1px solid #27272a; - user-select: none; - min-height: 36px; - } - .toolbar:active { cursor: grabbing; } - .title { - font-family: system-ui, sans-serif; - font-size: 13px; - font-weight: 600; - color: var(--ng-devtools-title, #a78bfa); - flex: 1; - } - .dock-group { - display: flex; - gap: 2px; - } - .dock-btn, .close-btn { - border: none; - background: transparent; - color: #8a8a94; - cursor: pointer; - font-size: 14px; - padding: 2px 6px; - border-radius: 4px; - line-height: 1; - } - .dock-btn:hover, .close-btn:hover { background: #27272a; color: #e4e4e7; } - .dock-btn.active { color: var(--ng-devtools-title, #a78bfa); } - .close-btn { font-size: 13px; } - .frame { - flex: 1; - border: none; - width: 100%; - height: 100%; - background: #0f0f11; - } - `; - fab.classList.add("fab"); - shadow.append(style, fab, panel); - document.body.appendChild(popupRoot); - let dragging = false; - let dragOffsetX = 0; - let dragOffsetY = 0; - toolbar.addEventListener("mousedown", (e) => { - if (state.docked !== "float") return; - dragging = true; - dragOffsetX = e.clientX - panel.offsetLeft; - dragOffsetY = e.clientY - panel.offsetTop; - e.preventDefault(); - }); - const onMouseMove = (e) => { - if (!dragging) return; - const maxX = Math.max(0, window.innerWidth - panel.offsetWidth); - const maxY = Math.max(0, window.innerHeight - panel.offsetHeight); - state.x = Math.min(Math.max(0, e.clientX - dragOffsetX), maxX); - state.y = Math.min(Math.max(0, e.clientY - dragOffsetY), maxY); - panel.style.left = state.x + "px"; - panel.style.top = state.y + "px"; - }; - const onMouseUp = () => { - if (dragging) { - dragging = false; - saveState(state); - } - }; - window.addEventListener("mousemove", onMouseMove); - window.addEventListener("mouseup", onMouseUp); - const onEscape = (event) => { - if (event.key === "Escape" && isOpen) togglePanel(); - }; - popupRoot.addEventListener("keydown", onEscape); - iframe.addEventListener("load", () => { - try { - iframe.contentDocument?.addEventListener("keydown", onEscape); - } catch {} - }); - function applyDock() { - panel.className = `panel${isOpen ? " open" : ""} dock-${state.docked}`; - if (state.docked === "float") { - panel.style.left = state.x + "px"; - panel.style.top = state.y + "px"; - panel.style.width = state.width + "px"; - panel.style.height = state.height + "px"; - } else { - panel.style.left = ""; - panel.style.top = ""; - panel.style.width = ""; - panel.style.height = ""; - } - } - function togglePanel() { - isOpen = !isOpen; - fab.classList.toggle("open", isOpen); - fab.setAttribute("aria-expanded", String(isOpen)); - panel.classList.toggle("open", isOpen); - applyDock(); - if (!isOpen && popupRoot?.contains(document.activeElement)) fab.focus(); - if (isOpen && !iframe.src) { - const base = getBaseURL(); - const origin = location.origin; - iframe.src = `${origin}${base}?baseURL=${encodeURIComponent(origin + base)}`; - } - } - const DRAG_THRESHOLD = 4; - const MARGIN = 8; - let fabPointer = null; - let launcherAt = null; - let suppressClick = false; - fab.addEventListener("pointerdown", (event) => { - if (fabPointer) return; - fabPointer = { - id: event.pointerId, - offsetX: event.clientX - fab.offsetLeft, - offsetY: event.clientY - fab.offsetTop, - moved: false - }; - try { - fab.setPointerCapture(event.pointerId); - } catch {} - }); - fab.addEventListener("pointermove", (event) => { - if (!fabPointer || event.pointerId !== fabPointer.id) return; - if (event.pointerType === "mouse" && event.buttons === 0) { - cancelFabDrag(); - return; - } - const x = event.clientX - fabPointer.offsetX; - const y = event.clientY - fabPointer.offsetY; - if (!fabPointer.moved) { - if (Math.hypot(x - fab.offsetLeft, y - fab.offsetTop) < DRAG_THRESHOLD) return; - fabPointer.moved = true; - fab.classList.add("dragging"); - } - placeLauncher(x, y); - }); - function cancelFabDrag() { - fabPointer = null; - fab.classList.remove("dragging"); - } - const endFabDrag = (event) => { - if (!fabPointer || event.pointerId !== fabPointer.id) return; - const moved = fabPointer.moved; - cancelFabDrag(); - if (!moved) return; - suppressClick = true; - requestAnimationFrame(() => { - suppressClick = false; - }); - if (launcherAt) state.launcher = launcherAt; - saveState(state); - }; - fab.addEventListener("pointerup", endFabDrag); - fab.addEventListener("pointercancel", cancelFabDrag); - fab.addEventListener("lostpointercapture", cancelFabDrag); - fab.addEventListener("click", () => { - if (suppressClick) { - suppressClick = false; - return; - } - togglePanel(); - }); - /** Positions the launcher, keeping it fully on screen. */ - function placeLauncher(x, y) { - const size = fab.offsetWidth; - const left = Math.round(Math.min(Math.max(x, MARGIN), window.innerWidth - size - MARGIN)); - const top = Math.round(Math.min(Math.max(y, MARGIN), window.innerHeight - size - MARGIN)); - fab.style.inset = `${top}px auto auto ${left}px`; - launcherAt = { - x: left, - y: top - }; - return launcherAt; - } - function applyLauncher() { - if (!state.launcher) return; - placeLauncher(state.launcher.x, state.launcher.y); - } - fab.addEventListener("keydown", (event) => { - const step = event.shiftKey ? 32 : 8; - const move = { - ArrowLeft: [-step, 0], - ArrowRight: [step, 0], - ArrowUp: [0, -step], - ArrowDown: [0, step] - }[event.key]; - if (!move) return; - event.preventDefault(); - state.launcher = placeLauncher(fab.offsetLeft + move[0], fab.offsetTop + move[1]); - saveState(state); - }); - fab.addEventListener("dblclick", () => { - delete state.launcher; - fab.style.inset = ""; - saveState(state); - }); - applyLauncher(); - window.addEventListener("resize", applyLauncher); - const resizeObserver = typeof ResizeObserver === "undefined" ? void 0 : new ResizeObserver(() => { - if (state.docked === "float" && isOpen) { - state.width = panel.offsetWidth; - state.height = panel.offsetHeight; - saveState(state); - } - }); - resizeObserver?.observe(panel); - applyDock(); - handle = { - toggle: togglePanel, - destroy: () => { - window.removeEventListener("mousemove", onMouseMove); - window.removeEventListener("mouseup", onMouseUp); - window.removeEventListener("resize", applyLauncher); - resizeObserver?.disconnect(); - popupRoot?.remove(); - popupRoot = null; - handle = void 0; - isOpen = false; - } - }; - return handle; -} -if (typeof document !== "undefined") createDevtoolsPopup(); -//#endregion -export { createDevtoolsPopup }; diff --git a/packages/ng-devtools/dist/public/assets/browser-agent-rpc-BXhoSh1z-DT7_jkxB.js b/packages/ng-devtools/dist/public/assets/browser-agent-rpc-BXhoSh1z-DT7_jkxB.js deleted file mode 100644 index 58416a7..0000000 --- a/packages/ng-devtools/dist/public/assets/browser-agent-rpc-BXhoSh1z-DT7_jkxB.js +++ /dev/null @@ -1 +0,0 @@ -import{t as e}from"./index-BUkjK2_k.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/packages/ng-devtools/dist/public/assets/index-BUkjK2_k.js b/packages/ng-devtools/dist/public/assets/index-BUkjK2_k.js deleted file mode 100644 index ba761c7..0000000 --- a/packages/ng-devtools/dist/public/assets/index-BUkjK2_k.js +++ /dev/null @@ -1,896 +0,0 @@ -(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=Object.defineProperty,t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable,i=(t,n,r)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r,a=(e,a)=>{for(var o in a||={})n.call(a,o)&&i(e,o,a[o]);if(t)for(var o of t(a))r.call(a,o)&&i(e,o,a[o]);return e},o=(e,t,n)=>(i(e,typeof t==`symbol`?t:t+``,n),n),s=globalThis;function c(e){let t=s.__Zone_symbol_prefix;return(typeof t==`string`?t:`__zone_symbol__`)+e}function l(){let e=s.performance;function t(t){e&&e.mark&&e.mark(t)}function n(t,n){e&&e.measure&&e.measure(t,n)}t(`Zone`);let r=class e{constructor(e,t){o(this,`_parent`),o(this,`_name`),o(this,`_properties`),o(this,`_zoneDelegate`),this._parent=e,this._name=t?t.name||`unnamed`:``,this._properties=t&&t.properties||{},this._zoneDelegate=new l(this,this._parent&&this._parent._zoneDelegate,t)}static assertZonePatched(){if(s.Promise!==re.ZoneAwarePromise)throw Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")}static get root(){let t=e.current;for(;t.parent;)t=t.parent;return t}static get current(){return O.zone}static get currentTask(){return ae}static __load_patch(r,i,a=!1){if(Object.hasOwn(re,r)){let e=s[c(`forceDuplicateZoneCheck`)]===!0;if(!a&&e)throw Error(`Already loaded patch: `+r)}else if(!s[`__Zone_disable_`+r]){let a=`Zone:`+r;t(a),re[r]=i(s,e,ie),n(a,a)}}get parent(){return this._parent}get name(){return this._name}get(e){let t=this.getZoneWith(e);if(t)return t._properties[e]}getZoneWith(e){let t=this;for(;t;){if(Object.hasOwn(t._properties,e))return t;t=t._parent}return null}fork(e){if(!e)throw Error(`ZoneSpec required!`);return this._zoneDelegate.fork(this,e)}wrap(e,t){if(typeof e!=`function`)throw Error(`Expecting function got: `+e);let n=this._zoneDelegate.intercept(this,e,t),r=this;return function(){return r.runGuarded(n,this,arguments,t)}}run(e,t,n,r){O={parent:O,zone:this};try{return this._zoneDelegate.invoke(this,e,t,n,r)}finally{O=O.parent}}runGuarded(e,t=null,n,r){O={parent:O,zone:this};try{try{return this._zoneDelegate.invoke(this,e,t,n,r)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{O=O.parent}}runTask(e,t,n){if(e.zone!=this)throw Error(`A task can only be run in the zone of creation! (Creation: `+(e.zone||x).name+`; Execution: `+this.name+`)`);let r=e,{type:i,data:{isPeriodic:a=!1,isRefreshable:o=!1}={}}=e;if(e.state===S&&(i===D||i===ne))return;let s=e.state!=w;s&&r._transitionTo(w,C);let c=ae;ae=r,O={parent:O,zone:this};try{i==ne&&e.data&&!a&&!o&&(e.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,r,t,n)}catch(e){if(this._zoneDelegate.handleError(this,e))throw e}}finally{let t=e.state;if(t!==S&&t!==te){if(i==D||a||o&&t===ee)s&&r._transitionTo(C,w,ee);else{let e=r._zoneDelegates;this._updateTaskCount(r,-1),s&&r._transitionTo(S,w,S),o&&(r._zoneDelegates=e)}}O=O.parent,ae=c}}scheduleTask(e){if(e.zone&&e.zone!==this){let t=this;for(;t;){if(t===e.zone)throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${e.zone.name}`);t=t.parent}}e._transitionTo(ee,S);let t=[];e._zoneDelegates=t,e._zone=this;try{e=this._zoneDelegate.scheduleTask(this,e)}catch(t){throw e._transitionTo(te,ee,S),this._zoneDelegate.handleError(this,t),t}return e._zoneDelegates===t&&this._updateTaskCount(e,1),e.state==ee&&e._transitionTo(C,ee),e}scheduleMicroTask(e,t,n,r){return this.scheduleTask(new u(E,e,t,n,r,void 0))}scheduleMacroTask(e,t,n,r,i){return this.scheduleTask(new u(ne,e,t,n,r,i))}scheduleEventTask(e,t,n,r,i){return this.scheduleTask(new u(D,e,t,n,r,i))}cancelTask(e){if(e.zone!=this)throw Error(`A task can only be cancelled in the zone of creation! (Creation: `+(e.zone||x).name+`; Execution: `+this.name+`)`);if(e.state===C||e.state===w){e._transitionTo(T,C,w);try{this._zoneDelegate.cancelTask(this,e)}catch(t){throw e._transitionTo(te,T),this._zoneDelegate.handleError(this,t),t}return this._updateTaskCount(e,-1),e._transitionTo(S,T),e.runCount=-1,e}}_updateTaskCount(e,t){let n=e._zoneDelegates;t==-1&&(e._zoneDelegates=null);for(let r=0;re.hasTask(n,r),onScheduleTask:(e,t,n,r)=>e.scheduleTask(n,r),onInvokeTask:(e,t,n,r,i,a)=>e.invokeTask(n,r,i,a),onCancelTask:(e,t,n,r)=>e.cancelTask(n,r)};class l{constructor(e,t,n){o(this,`_zone`),o(this,`_taskCounts`,{microTask:0,macroTask:0,eventTask:0}),o(this,`_forkDlgt`),o(this,`_forkZS`),o(this,`_forkCurrZone`),o(this,`_interceptDlgt`),o(this,`_interceptZS`),o(this,`_interceptCurrZone`),o(this,`_invokeDlgt`),o(this,`_invokeZS`),o(this,`_invokeCurrZone`),o(this,`_handleErrorDlgt`),o(this,`_handleErrorZS`),o(this,`_handleErrorCurrZone`),o(this,`_scheduleTaskDlgt`),o(this,`_scheduleTaskZS`),o(this,`_scheduleTaskCurrZone`),o(this,`_invokeTaskDlgt`),o(this,`_invokeTaskZS`),o(this,`_invokeTaskCurrZone`),o(this,`_cancelTaskDlgt`),o(this,`_cancelTaskZS`),o(this,`_cancelTaskCurrZone`),o(this,`_hasTaskDlgt`),o(this,`_hasTaskDlgtOwner`),o(this,`_hasTaskZS`),o(this,`_hasTaskCurrZone`),this._zone=e,this._forkZS=n&&(n&&n.onFork?n:t._forkZS),this._forkDlgt=n&&(n.onFork?t:t._forkDlgt),this._forkCurrZone=n&&(n.onFork?this._zone:t._forkCurrZone),this._interceptZS=n&&(n.onIntercept?n:t._interceptZS),this._interceptDlgt=n&&(n.onIntercept?t:t._interceptDlgt),this._interceptCurrZone=n&&(n.onIntercept?this._zone:t._interceptCurrZone),this._invokeZS=n&&(n.onInvoke?n:t._invokeZS),this._invokeDlgt=n&&(n.onInvoke?t:t._invokeDlgt),this._invokeCurrZone=n&&(n.onInvoke?this._zone:t._invokeCurrZone),this._handleErrorZS=n&&(n.onHandleError?n:t._handleErrorZS),this._handleErrorDlgt=n&&(n.onHandleError?t:t._handleErrorDlgt),this._handleErrorCurrZone=n&&(n.onHandleError?this._zone:t._handleErrorCurrZone),this._scheduleTaskZS=n&&(n.onScheduleTask?n:t._scheduleTaskZS),this._scheduleTaskDlgt=n&&(n.onScheduleTask?t:t._scheduleTaskDlgt),this._scheduleTaskCurrZone=n&&(n.onScheduleTask?this._zone:t._scheduleTaskCurrZone),this._invokeTaskZS=n&&(n.onInvokeTask?n:t._invokeTaskZS),this._invokeTaskDlgt=n&&(n.onInvokeTask?t:t._invokeTaskDlgt),this._invokeTaskCurrZone=n&&(n.onInvokeTask?this._zone:t._invokeTaskCurrZone),this._cancelTaskZS=n&&(n.onCancelTask?n:t._cancelTaskZS),this._cancelTaskDlgt=n&&(n.onCancelTask?t:t._cancelTaskDlgt),this._cancelTaskCurrZone=n&&(n.onCancelTask?this._zone:t._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;let r=n&&n.onHasTask,i=t&&t._hasTaskZS;(r||i)&&(this._hasTaskZS=r?n:a,this._hasTaskDlgt=t,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=this._zone,n.onScheduleTask||(this._scheduleTaskZS=a,this._scheduleTaskDlgt=t,this._scheduleTaskCurrZone=this._zone),n.onInvokeTask||(this._invokeTaskZS=a,this._invokeTaskDlgt=t,this._invokeTaskCurrZone=this._zone),n.onCancelTask||(this._cancelTaskZS=a,this._cancelTaskDlgt=t,this._cancelTaskCurrZone=this._zone))}get zone(){return this._zone}fork(e,t){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,e,t):new i(e,t)}intercept(e,t,n){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,e,t,n):t}invoke(e,t,n,r,i){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,e,t,n,r,i):t.apply(n,r)}handleError(e,t){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,e,t)}scheduleTask(e,t){let n=t;if(this._scheduleTaskZS)this._hasTaskZS&&n._zoneDelegates.push(this._hasTaskDlgtOwner),n=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,e,t),n||=t;else if(t.scheduleFn)t.scheduleFn(t);else if(t.type==E)y(t);else throw Error(`Task is missing scheduleFn.`);return n}invokeTask(e,t,n,r){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,e,t,n,r):t.callback.apply(n,r)}cancelTask(e,t){let n;if(this._cancelTaskZS)n=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,e,t);else{if(!t.cancelFn)throw Error(`Task is not cancelable`);n=t.cancelFn(t)}return n}hasTask(e,t){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,e,t)}catch(t){this.handleError(e,t)}}_updateTaskCount(e,t){let n=this._taskCounts,r=n[e],i=n[e]=r+t;if(i<0)throw Error(`More tasks executed then were scheduled.`);if(r==0||i==0){let t={microTask:n.microTask>0,macroTask:n.macroTask>0,eventTask:n.eventTask>0,change:e};this.hasTask(this._zone,t)}}}class u{constructor(e,t,n,r,i,a){if(o(this,`type`),o(this,`source`),o(this,`invoke`),o(this,`callback`),o(this,`data`),o(this,`scheduleFn`),o(this,`cancelFn`),o(this,`_zone`,null),o(this,`runCount`,0),o(this,`_zoneDelegates`,null),o(this,`_state`,`notScheduled`),this.type=e,this.source=t,this.data=r,this.scheduleFn=i,this.cancelFn=a,!n)throw Error(`callback is not defined`);this.callback=n;let c=this;this.invoke=e===D&&r&&r.useG?u.invokeTask:function(){return u.invokeTask.call(s,c,this,arguments)}}static invokeTask(e,t,n){e||=this,oe++;try{return e.runCount++,e.zone.runTask(e,t,n)}finally{try{oe===1&&!s[m]&&b()}finally{oe--}}}get zone(){return this._zone}get state(){return this._state}cancelScheduleRequest(){this._transitionTo(S,ee)}_transitionTo(e,t,n){if(this._state===t||this._state===n)this._state=e,e==S&&(this._zoneDelegates=null);else throw Error(`${this.type} '${this.source}': can not transition to '${e}', expecting state '${t}'${n?` or '`+n+`'`:``}, was '${this._state}'.`)}toString(){return this.data&&this.data.handleId!==void 0?this.data.handleId.toString():Object.prototype.toString.call(this)}toJSON(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}}}let d=c(`setTimeout`),f=c(`Promise`),p=c(`then`),m=c(`enable_native_microtask_draining`),h=[],g=!1,_;function v(e){!_&&s[f]&&(_=s[f].resolve(0)),_?(_[p]??_.then).call(_,e):s[d](e,0)}function y(e){let t=s[m],n=t&&h.length===0&&!g,r=!t&&oe===0&&h.length===0;(n||r)&&v(b),e&&h.push(e)}function b(){if(!g){g=!0;try{for(;h.length;){let e=h;h=[];for(let t of e)try{t.zone.runTask(t,null,null)}catch(e){ie.onUnhandledError(e)}}}finally{if(s[m])g=!1,ie.microtaskDrainDone();else try{ie.microtaskDrainDone()}finally{g=!1}}}}let x={name:`NO ZONE`},S=`notScheduled`,ee=`scheduling`,C=`scheduled`,w=`running`,T=`canceling`,te=`unknown`,E=`microTask`,ne=`macroTask`,D=`eventTask`,re=Object.create(null),ie={symbol:c,currentZoneFrame:()=>O,onUnhandledError:se,microtaskDrainDone:se,scheduleMicroTask:y,showUncaughtError:()=>!i[c(`ignoreConsoleErrorUncaughtError`)],patchEventTarget:()=>[],patchOnProperties:se,patchMethod:()=>se,bindArguments:()=>[],patchThen:()=>se,patchMacroTask:()=>se,patchEventPrototype:()=>se,getGlobalObjects:()=>void 0,ObjectDefineProperty:()=>se,ObjectGetOwnPropertyDescriptor:()=>void 0,ObjectCreate:()=>void 0,ArraySlice:()=>[],patchClass:()=>se,wrapWithCurrentZone:()=>se,filterProperties:()=>[],attachOriginToPatched:()=>se,_redefineProperty:()=>se,patchCallbacks:()=>se,nativeScheduleMicroTask:v},O={parent:null,zone:new i(null,null)},ae=null,oe=0;function se(){}return n(`Zone`,`Zone`),i}function u(){let e=globalThis,t=e[c(`forceDuplicateZoneCheck`)]===!0;if(e.Zone&&(t||typeof e.Zone.__symbol__!=`function`))throw Error(`Zone already loaded.`);return e.Zone??=l(),e.Zone}var d=Object.getOwnPropertyDescriptor,f=Object.defineProperty,p=Object.getPrototypeOf,m=Object.create,h=Array.prototype.slice,g=`addEventListener`,_=`removeEventListener`,v=c(g),y=c(_),b=`true`,x=`false`,S=c(``);function ee(e,t){return Zone.current.wrap(e,t)}function C(e,t,n,r,i){return Zone.current.scheduleMacroTask(e,t,n,r,i)}var w=c,T=typeof window<`u`,te=T?window:void 0,E=T&&te||globalThis,ne=`removeAttribute`;function D(e,t){for(let n=e.length-1;n>=0;n--)typeof e[n]==`function`&&(e[n]=ee(e[n],t+`_`+n));return e}function re(e,t){let n=e.constructor.name;for(let r=0;r{let t=function(){return e.apply(this,D(arguments,n+`.`+i))};return _e(t,e),t})(a)}}}function ie(e){return e?e.writable===!1?!1:typeof e.get!=`function`||e.set!==void 0:!0}var O=typeof WorkerGlobalScope<`u`&&self instanceof WorkerGlobalScope,ae=!(`nw`in E)&&E.process!==void 0&&E.process.toString()===`[object process]`,oe=!ae&&!O&&!!(T&&te.HTMLElement),se=E.process!==void 0&&E.process.toString()===`[object process]`&&!O&&!!(T&&te.HTMLElement),ce=Object.create(null),le=w(`enable_beforeunload`),ue=function(e){if(e||=E.event,!e)return;let t=ce[e.type];t||=ce[e.type]=w(`ON_PROPERTY`+e.type);let n=this||e.target||E,r=n[t],i;if(oe&&n===te&&e.type===`error`){let t=e;i=r&&r.call(this,t.message,t.filename,t.lineno,t.colno,t.error),i===!0&&e.preventDefault()}else i=r&&r.apply(this,arguments),e.type===`beforeunload`&&E[le]&&typeof i==`string`?e.returnValue=i:i!=null&&!i&&e.preventDefault();return i};function de(e,t,n){let r=d(e,t);if(!r&&n&&d(n,t)&&(r={enumerable:!0,configurable:!0}),!r||!r.configurable)return;let i=w(`on`+t+`patched`);if(Object.hasOwn(e,i)&&e[i])return;delete r.writable,delete r.value;let a=r.get,o=r.set,s=t.slice(2),c=ce[s];c||=ce[s]=w(`ON_PROPERTY`+s),r.set=function(t){let n=this;!n&&e===E&&(n=E),n&&(typeof n[c]==`function`&&n.removeEventListener(s,ue),o?.call(n,null),n[c]=t,typeof t==`function`&&n.addEventListener(s,ue,!1))},r.get=function(){let n=this;if(!n&&e===E&&(n=E),!n)return null;let i=n[c];if(i)return i;if(a){let e=a.call(this);if(e)return r.set.call(this,e),typeof n[ne]==`function`&&n.removeAttribute(t),e}return null},f(e,t,r),e[i]=!0}function fe(e,t,n){if(t)for(let r=0;rfunction(t,r){let a=n(t,r);return a.cbIdx>=0&&typeof r[a.cbIdx]==`function`?C(a.name,r[a.cbIdx],a,i):e.apply(t,r)})}function _e(e,t){e[w(`OriginalDelegate`)]=t}function ve(e){return typeof e==`function`}function ye(e){return typeof e==`number`}var be={useG:!0},xe=Object.create(null),Se={},Ce=RegExp(`^`+S+`(\\w+)(true|false)$`),we=w(`propagationStopped`),Te=[`capture`,`once`,`passive`,`signal`];function Ee(e,t){let n=(t?t(e):e)+x,r=(t?t(e):e)+b,i=S+n,a=S+r;xe[e]={[x]:i,[b]:a}}function De(e,t,n,r){let i=r&&r.add||g,o=r&&r.rm||_,s=r&&r.listeners||`eventListeners`,c=r&&r.rmAll||`removeAllListeners`,l=w(i),u=`.`+i+`:`,d=function(e,t,n){if(e.isRemoved)return;let r=e.callback;typeof r==`object`&&r.handleEvent&&(e.callback=e=>r.handleEvent(e),e.originalDelegate=r);let i;try{e.invoke(e,t,[n])}catch(e){i=e}let a=e.options;if(a&&typeof a==`object`&&a.once){let r=e.originalDelegate?e.originalDelegate:e.callback;t[o].call(t,n.type,r,a)}return i};function f(n,r,i){if(r||=e.event,!r)return;let a=n||r.target||e,o=a[xe[r.type][i?b:x]];if(o){let e=[];if(o.length===1){let t=d(o[0],a,r);t&&e.push(t)}else{let t=o.slice();for(let n=0;n{throw r})}}}let m=function(e){return f(this,e,!1)},h=function(e){return f(this,e,!0)};function v(t,n){if(!t)return!1;let r=!0;n&&n.useG!==void 0&&(r=n.useG);let d=n&&n.vh,f=!0;n&&n.chkDup!==void 0&&(f=n.chkDup);let g=!1;n&&n.rt!==void 0&&(g=n.rt);let _=t;for(;_&&!Object.hasOwn(_,i);)_=p(_);if(!_&&t[i]&&(_=t),!_||_[l])return!1;let v=n&&n.eventNameToString,y={},ee=_[l]=_[i],C=_[w(o)]=_[o],T=_[w(s)]=_[s],te=_[w(c)]=_[c],E;n&&n.prepend&&(E=_[w(n.prepend)]=_[n.prepend]);function ne(e,t){return t?typeof e==`boolean`?{capture:e,passive:!0}:e?(typeof e==`object`&&e.passive!==!1&&(e.passive=!0),e):{passive:!0}:e}let D=function(e){if(!y.isExisting)return ee.call(y.target,y.eventName,y.capture?h:m,y.options)},re=function(e){if(!e.isRemoved){let t=xe[e.eventName],n;t&&(n=t[e.capture?b:x]);let r=n&&e.target[n];if(r){for(let t=0;toe.zone.cancelTask(oe);t.call(_,`abort`,e,{once:!0}),oe.removeAbortListener=()=>_.removeEventListener(`abort`,e)}if(y.target=null,O&&(O.taskData=null),ee&&(y.options.once=!0),typeof oe.options!=`boolean`&&(oe.options=g),oe.target=l,oe.capture=S,oe.eventName=u,m&&(oe.originalDelegate=p),c?te.unshift(oe):te.push(oe),s)return l}};return _[i]=pe(ee,u,se,ce,g),E&&(_.prependListener=pe(E,`.prependListener:`,O,ce,g,!0)),_[o]=function(){let t=this||e,r=arguments[0];n&&n.transferEventName&&(r=n.transferEventName(r));let i=arguments[2],a=i?typeof i==`boolean`||i.capture:!1,o=arguments[1];if(!o)return C.apply(this,arguments);if(d&&!d(C,o,t,arguments))return;let s=xe[r],c;s&&(c=s[a?b:x]);let l=c&&t[c];if(l)for(let e=0;efunction(t,n){t[we]=!0,e&&e.apply(t,n)})}function Ae(e,t){t.patchMethod(e,`queueMicrotask`,e=>function(e,t){Zone.current.scheduleMicroTask(`queueMicrotask`,t[0])})}var je=w(`zoneTask`);function Me(e,t,n,r){let i=null,a=null;t+=r,n+=r;let o={};function s(t){let n=t.data;n.args[0]=function(){return t.invoke.apply(this,arguments)};let r=i.apply(e,n.args);return ye(r)?n.handleId=r:(n.handle=r,n.isRefreshable=ve(r?.refresh)),t}function c(t){let{handle:n,handleId:r}=t.data;return a.call(e,n??r)}i=he(e,t,n=>function(i,a){if(ve(a[0])){let e={isRefreshable:!1,isPeriodic:r===`Interval`,delay:r===`Timeout`||r===`Interval`?a[1]||0:void 0,args:a},n=a[0];a[0]=function(){try{return n.apply(this,arguments)}finally{let{handle:t,handleId:n,isPeriodic:r,isRefreshable:i}=e;!r&&!i&&(n?delete o[n]:t&&(t[je]=null))}};let i=C(t,a[0],e,s,c);if(!i)return i;let{handleId:l,handle:u,isRefreshable:d,isPeriodic:f}=i.data;if(l)o[l]=i;else if(u&&(u[je]=i,d&&!f)){let e=u.refresh;u.refresh=function(){let{zone:t,state:n}=i;return n===`notScheduled`?(i._state=`scheduled`,t._updateTaskCount(i,1)):n===`running`&&(i._state=`scheduling`),e.call(this)}}return u??l??i}return n.apply(e,a)}),a=he(e,n,t=>function(n,r){let i=r[0],a;ye(i)?(a=o[i],delete o[i]):(a=i?.[je],a?i[je]=null:a=i),a?.type?a.cancelFn&&a.zone.cancelTask(a):t.apply(e,r)})}function Ne(e,t){let{isBrowser:n,isMix:r}=t.getGlobalObjects();(n||r)&&e.customElements&&`customElements`in e&&t.patchCallbacks(t,e.customElements,`customElements`,`define`,[`connectedCallback`,`disconnectedCallback`,`adoptedCallback`,`attributeChangedCallback`,`formAssociatedCallback`,`formDisabledCallback`,`formResetCallback`,`formStateRestoreCallback`])}function Pe(e,t){if(Zone[t.symbol(`patchEventTarget`)])return;let{eventNames:n,zoneSymbolEventNames:r,TRUE_STR:i,FALSE_STR:a,ZONE_SYMBOL_PREFIX:o}=t.getGlobalObjects();for(let e=0;et.target===e);if(r.length===0)return t;let i=r[0].ignoreProperties;return t.filter(e=>i.indexOf(e)===-1)}function Le(e,t,n,r){e&&fe(e,Ie(e,t,n),r)}function Re(e){return Object.getOwnPropertyNames(e).filter(e=>e.startsWith(`on`)&&e.length>2).map(e=>e.substring(2))}function ze(e,t){if(ae&&!se||Zone[e.symbol(`patchEvents`)])return;let n=t.__Zone_ignore_on_properties,r=[];if(oe){let e=window;r=r.concat([`Document`,`SVGElement`,`Element`,`HTMLElement`,`HTMLBodyElement`,`HTMLMediaElement`,`HTMLFrameSetElement`,`HTMLFrameElement`,`HTMLIFrameElement`,`HTMLMarqueeElement`,`Worker`]),Le(e,Re(e),n,p(e))}r=r.concat([`XMLHttpRequest`,`XMLHttpRequestEventTarget`,`IDBIndex`,`IDBRequest`,`IDBOpenDBRequest`,`IDBDatabase`,`IDBTransaction`,`IDBCursor`,`WebSocket`]);for(let e=0;e{let t=`clear`;Me(e,`set`,t,`Timeout`),Me(e,`set`,t,`Interval`),Me(e,`set`,t,`Immediate`)}),e.__load_patch(`requestAnimationFrame`,e=>{Me(e,`request`,`cancel`,`AnimationFrame`),Me(e,`mozRequest`,`mozCancel`,`AnimationFrame`),Me(e,`webkitRequest`,`webkitCancel`,`AnimationFrame`)}),e.__load_patch(`blocking`,(e,t)=>{let n=[`alert`,`prompt`,`confirm`];for(let r=0;rfunction(r,a){return t.current.run(n,e,a,i)})}}),e.__load_patch(`EventTarget`,(e,t,n)=>{Fe(e,n),Pe(e,n);let r=e.XMLHttpRequestEventTarget;r&&r.prototype&&n.patchEventTarget(e,n,[r.prototype])}),e.__load_patch(`MutationObserver`,(e,t,n)=>{me(`MutationObserver`),me(`WebKitMutationObserver`)}),e.__load_patch(`IntersectionObserver`,(e,t,n)=>{me(`IntersectionObserver`)}),e.__load_patch(`FileReader`,(e,t,n)=>{me(`FileReader`)}),e.__load_patch(`on_property`,(e,t,n)=>{ze(n,e)}),e.__load_patch(`customElements`,(e,t,n)=>{Ne(e,n)}),e.__load_patch(`XHR`,(e,t)=>{c(e);let n=w(`xhrTask`),r=w(`xhrSync`),i=w(`xhrListener`),a=w(`xhrScheduled`),o=w(`xhrURL`),s=w(`xhrErrorBeforeScheduled`);function c(e){let c=e.XMLHttpRequest;if(!c)return;let l=c.prototype;function u(e){return e[n]}let d=l[v],f=l[y];if(!d){let t=e.XMLHttpRequestEventTarget;if(t){let e=t.prototype;d=e[v],f=e[y]}}let p=`readystatechange`,m=`scheduled`;function h(e){let r=e.data,o=r.target;o[a]=!1,o[s]=!1;let c=o[i];d||(d=o[v],f=o[y]),c&&f.call(o,p,c);let l=o[i]=()=>{if(o.readyState===o.DONE){if(!r.aborted&&o[a]&&e.state===m){let n=o[t.__symbol__(`loadfalse`)];if(o.status!==0&&n&&n.length>0){let i=e.invoke;e.invoke=function(){let n=o[t.__symbol__(`loadfalse`)];for(let t=0;tfunction(e,t){return e[r]=t[2]==0,e[o]=t[1],b.apply(e,t)}),x=w(`fetchTaskAborting`),S=w(`fetchTaskScheduling`),ee=he(l,`send`,()=>function(e,n){if(t.current[S]===!0||e[r])return ee.apply(e,n);{let t={target:e,url:e[o],isPeriodic:!1,args:n,aborted:!1},r=C(`XMLHttpRequest.send`,g,t,h,_);e&&e[s]===!0&&!t.aborted&&r.state===m&&r.invoke()}}),T=he(l,`abort`,()=>function(e,n){let r=u(e);if(r&&typeof r.type==`string`){if(r.cancelFn==null||r.data&&r.data.aborted)return;r.zone.cancelTask(r)}else if(t.current[x]===!0)return T.apply(e,n)})}}),e.__load_patch(`geolocation`,e=>{e.navigator&&e.navigator.geolocation&&re(e.navigator.geolocation,[`getCurrentPosition`,`watchPosition`])}),e.__load_patch(`PromiseRejectionEvent`,(e,t)=>{function n(t){return function(n){Oe(e,t).forEach(r=>{let i=e.PromiseRejectionEvent;if(i){let e=new i(t,{promise:n.promise,reason:n.rejection});r.invoke(e)}})}}e.PromiseRejectionEvent&&(t[w(`unhandledPromiseRejectionHandler`)]=n(`unhandledrejection`),t[w(`rejectionHandledHandler`)]=n(`rejectionhandled`))}),e.__load_patch(`queueMicrotask`,(e,t,n)=>{Ae(e,n)})}function Ve(e){e.__load_patch(`ZoneAwarePromise`,(e,t,n)=>{let r=Object.getOwnPropertyDescriptor,i=Object.defineProperty;function a(e){return e&&e.toString===Object.prototype.toString?(e.constructor&&e.constructor.name||``)+`: `+JSON.stringify(e):e?e.toString():Object.prototype.toString.call(e)}let o=n.symbol,s=[],c=e[o(`DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION`)]!==!1,l=o(`Promise`),u=o(`then`);n.onUnhandledError=e=>{if(n.showUncaughtError()){let t=e&&e.rejection;t&&e.zone&&e.task?console.error(`Unhandled Promise rejection:`,t instanceof Error?t.message:t,`; Zone:`,e.zone.name,`; Task:`,e.task&&e.task.source,`; Value:`,t,t instanceof Error?t.stack:void 0):console.error(e)}},n.microtaskDrainDone=()=>{for(;s.length;){let e=s.shift();try{e.zone.runGuarded(()=>{throw e.throwOriginal?e.rejection:e})}catch(e){f(e)}}};let d=o(`unhandledPromiseRejectionHandler`);function f(e){n.onUnhandledError(e);try{let n=t[d];typeof n==`function`&&n.call(this,e)}catch{}}function p(e){return e&&typeof e.then==`function`}function m(e){return e}function h(e){return D.reject(e)}let g=o(`state`),_=o(`value`),v=o(`finally`),y=o(`parentPromiseValue`),b=o(`parentPromiseState`);function x(e,t){return n=>{try{C(e,t,n)}catch(t){C(e,!1,t)}}}let S=function(){let e=!1;return function(t){return function(){e||(e=!0,t.apply(null,arguments))}}},ee=o(`currentTaskTrace`);function C(e,r,o){let l=S();if(e===o)throw TypeError(`Promise resolved with itself`);if(e[g]===null){let u=null;try{(typeof o==`object`||typeof o==`function`)&&(u=o&&o.then)}catch(t){return l(()=>{C(e,!1,t)})(),e}if(r!==!1&&o instanceof D&&Object.hasOwn(o,g)&&Object.hasOwn(o,_)&&o[g]!==null)T(o),C(e,o[g],o[_]);else if(r!==!1&&typeof u==`function`)try{u.call(o,l(x(e,r)),l(x(e,!1)))}catch(t){l(()=>{C(e,!1,t)})()}else{e[g]=r;let l=e[_];if(e[_]=o,e[v]===v&&r===!0&&(e[g]=e[b],e[_]=e[y]),r===!1&&o instanceof Error){let e=t.currentTask&&t.currentTask.data&&t.currentTask.data.__creationTrace__;e&&i(o,ee,{configurable:!0,enumerable:!1,writable:!0,value:e})}for(let t=0;t{try{let r=e[_],i=!!n&&v===n[v];i&&(n[y]=r,n[b]=a),C(n,!0,t.run(o,void 0,i&&o!==h&&o!==m?[]:[r]))}catch(e){C(n,!1,e)}},n)}let E=function(){},ne=e.AggregateError;class D{static toString(){return`function ZoneAwarePromise() { [native code] }`}static resolve(e){return e instanceof D?e:C(new this(null),!0,e)}static reject(e){return C(new this(null),!1,e)}static withResolvers(){let e={};return e.promise=new D((t,n)=>{e.resolve=t,e.reject=n}),e}static any(e){if(!e||typeof e[Symbol.iterator]!=`function`)return Promise.reject(new ne([],`All promises were rejected`));let t=[],n=0;try{for(let r of e)n++,t.push(D.resolve(r))}catch{return Promise.reject(new ne([],`All promises were rejected`))}if(n===0)return Promise.reject(new ne([],`All promises were rejected`));let r=!1,i=[];return new D((e,a)=>{for(let o=0;o{r||(r=!0,e(t))},e=>{i.push(e),n--,n===0&&(r=!0,a(new ne(i,`All promises were rejected`)))})})}static race(e){let t,n,r=new this((e,r)=>{t=e,n=r});function i(e){t(e)}function a(e){n(e)}for(let t of e)p(t)||(t=this.resolve(t)),t.then(i,a);return r}static all(e){return D.allWithCallback(e)}static allSettled(e){return(this&&this.prototype instanceof D?this:D).allWithCallback(e,{thenCallback:e=>({status:`fulfilled`,value:e}),errorCallback:e=>({status:`rejected`,reason:e})})}static allWithCallback(e,t){let n,r,i=new this((e,t)=>{n=e,r=t}),a=2,o=0,s=[];for(let i of e){p(i)||(i=this.resolve(i));let e=o;try{i.then(r=>{s[e]=t?t.thenCallback(r):r,a--,a===0&&n(s)},i=>{t?(s[e]=t.errorCallback(i),a--,a===0&&n(s)):r(i)})}catch(e){r(e)}a++,o++}return a-=2,a===0&&n(s),i}constructor(e){let t=this;if(!(t instanceof D))throw Error(`Must be an instanceof Promise.`);t[g]=null,t[_]=[];try{let n=S();e&&e(n(x(t,!0)),n(x(t,!1)))}catch(e){C(t,!1,e)}}get[Symbol.toStringTag](){return`Promise`}get[Symbol.species](){return D}then(e,n){let r=this.constructor?.[Symbol.species];(!r||typeof r!=`function`)&&(r=this.constructor||D);let i=new r(E),a=t.current;return this[g]==null?this[_].push(a,i,e,n):te(this,a,i,e,n),i}catch(e){return this.then(null,e)}finally(e){let n=this.constructor?.[Symbol.species];(!n||typeof n!=`function`)&&(n=D);let r=new n(E);r[v]=v;let i=t.current;return this[g]==null?this[_].push(i,r,e,e):te(this,i,r,e,e),r}}D.resolve=D.resolve,D.reject=D.reject,D.race=D.race,D.all=D.all;let re=e[l]=e.Promise;e.Promise=D;let ie=o(`thenPatched`);function O(e){let t=e.prototype,n=r(t,`then`);if(n&&(n.writable===!1||!n.configurable))return;let i=t.then;t[u]=i,e.prototype.then=function(e,t){return new D((e,t)=>{i.call(this,e,t)}).then(e,t)},e[ie]=!0}n.patchThen=O;function ae(e){return function(t,n){let r=e.apply(t,n);if(r instanceof D)return r;let i=r.constructor;return i[ie]||O(i),r}}if(re){O(re);let t=re.try;t&&typeof t==`function`&&(D.try=t),he(e,`fetch`,e=>ae(e))}return Promise[t.__symbol__(`uncaughtPromiseErrors`)]=s,D})}function He(e){e.__load_patch(`toString`,e=>{let t=Function.prototype.toString,n=w(`OriginalDelegate`),r=w(`Promise`),i=w(`Error`),a=function(){if(typeof this==`function`){let a=this[n];if(a)return typeof a==`function`?t.call(a):Object.prototype.toString.call(a);if(this===Promise){let n=e[r];if(n)return t.call(n)}if(this===Error){let n=e[i];if(n)return t.call(n)}}return t.call(this)};a[n]=t,Function.prototype.toString=a;let o=Object.prototype.toString;Object.prototype.toString=function(){return typeof Promise==`function`&&this instanceof Promise?`[object Promise]`:o.call(this)}})}function Ue(e,t,n,r,i){let a=Zone.__symbol__(r);if(t[a])return;let o=t[a]=t[r];t[r]=function(a,s,c){return s&&s.prototype&&i.forEach(function(t){let i=`${n}.${r}::`+t,a=s.prototype;try{if(Object.hasOwn(a,t)){let n=e.ObjectGetOwnPropertyDescriptor(a,t);n&&n.value?(n.value=e.wrapWithCurrentZone(n.value,i),e._redefineProperty(s.prototype,t,n)):a[t]&&(a[t]=e.wrapWithCurrentZone(a[t],i))}else a[t]&&(a[t]=e.wrapWithCurrentZone(a[t],i))}catch{}}),o.call(t,a,s,c)},e.attachOriginToPatched(t[r],o)}function We(e){e.__load_patch(`util`,(e,t,n)=>{let r=Re(e);n.patchOnProperties=fe,n.patchMethod=he,n.bindArguments=D,n.patchMacroTask=ge;let i=t.__symbol__(`BLACK_LISTED_EVENTS`),a=t.__symbol__(`UNPATCHED_EVENTS`);e[a]&&(e[i]=e[a]),e[i]&&(t[i]=t[a]=e[i]),n.patchEventPrototype=ke,n.patchEventTarget=De,n.ObjectDefineProperty=f,n.ObjectGetOwnPropertyDescriptor=d,n.ObjectCreate=m,n.ArraySlice=h,n.patchClass=me,n.wrapWithCurrentZone=ee,n.filterProperties=Ie,n.attachOriginToPatched=_e,n._redefineProperty=Object.defineProperty,n.patchCallbacks=Ue,n.getGlobalObjects=()=>({globalSources:Se,zoneSymbolEventNames:xe,eventNames:r,isBrowser:oe,isMix:se,isNode:ae,TRUE_STR:b,FALSE_STR:x,ZONE_SYMBOL_PREFIX:S,ADD_EVENT_LISTENER_STR:g,REMOVE_EVENT_LISTENER_STR:_})})}function Ge(e){Ve(e),He(e),We(e)}var Ke=u();Ge(Ke),Be(Ke);var qe=(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})(qe||{}),Je=(function(e){return e[e.None=0]=`None`,e[e.Const=1]=`Const`,e})(Je||{}),Ye=class{modifiers;constructor(e=Je.None){this.modifiers=e}hasModifier(e){return(this.modifiers&e)!==0}},Xe=(function(e){return e[e.Dynamic=0]=`Dynamic`,e[e.Bool=1]=`Bool`,e[e.String=2]=`String`,e[e.Int=3]=`Int`,e[e.Number=4]=`Number`,e[e.Function=5]=`Function`,e[e.Inferred=6]=`Inferred`,e[e.None=7]=`None`,e})(Xe||{}),Ze=class extends Ye{name;constructor(e,t){super(t),this.name=e}visitType(e,t){return e.visitBuiltinType(this,t)}};Xe.Dynamic;var Qe=new Ze(Xe.Inferred);Xe.Bool,Xe.Int,Xe.Number,Xe.String,Xe.Function,Xe.None;var k=(function(e){return e[e.Equals=0]=`Equals`,e[e.NotEquals=1]=`NotEquals`,e[e.Assign=2]=`Assign`,e[e.Identical=3]=`Identical`,e[e.NotIdentical=4]=`NotIdentical`,e[e.Minus=5]=`Minus`,e[e.Plus=6]=`Plus`,e[e.Divide=7]=`Divide`,e[e.Multiply=8]=`Multiply`,e[e.Modulo=9]=`Modulo`,e[e.And=10]=`And`,e[e.Or=11]=`Or`,e[e.BitwiseOr=12]=`BitwiseOr`,e[e.BitwiseAnd=13]=`BitwiseAnd`,e[e.Lower=14]=`Lower`,e[e.LowerEquals=15]=`LowerEquals`,e[e.Bigger=16]=`Bigger`,e[e.BiggerEquals=17]=`BiggerEquals`,e[e.NullishCoalesce=18]=`NullishCoalesce`,e[e.Exponentiation=19]=`Exponentiation`,e[e.In=20]=`In`,e[e.InstanceOf=21]=`InstanceOf`,e[e.AdditionAssignment=22]=`AdditionAssignment`,e[e.SubtractionAssignment=23]=`SubtractionAssignment`,e[e.MultiplicationAssignment=24]=`MultiplicationAssignment`,e[e.DivisionAssignment=25]=`DivisionAssignment`,e[e.RemainderAssignment=26]=`RemainderAssignment`,e[e.ExponentiationAssignment=27]=`ExponentiationAssignment`,e[e.AndAssignment=28]=`AndAssignment`,e[e.OrAssignment=29]=`OrAssignment`,e[e.NullishCoalesceAssignment=30]=`NullishCoalesceAssignment`,e})(k||{});function $e(e,t){return e==null||t==null?e==t:e.isEquivalent(t)}function et(e,t,n){let r=e.length;if(r!==t.length)return!1;for(let i=0;ie.isEquivalent(t))}var nt=class{leadingComments;type;sourceSpan;constructor(e,t,n){this.leadingComments=n,this.type=e||null,this.sourceSpan=t||null}prop(e,t){return new ft(this,e,null,t)}key(e,t,n){return new pt(this,e,t,n)}callFn(e,t,n,r){return new at(this,e,null,t,n,r)}instantiate(e,t,n,r){return new ot(this,e,t,n)}conditional(e,t=null,n,r){return new ut(this,e,t,null,n)}equals(e,t){return new dt(k.Equals,this,e,null,t)}notEquals(e,t){return new dt(k.NotEquals,this,e,null,t)}identical(e,t){return new dt(k.Identical,this,e,null,t)}notIdentical(e,t){return new dt(k.NotIdentical,this,e,null,t)}minus(e,t){return new dt(k.Minus,this,e,null,t)}plus(e,t){return new dt(k.Plus,this,e,null,t)}divide(e,t){return new dt(k.Divide,this,e,null,t)}multiply(e,t){return new dt(k.Multiply,this,e,null,t)}modulo(e,t){return new dt(k.Modulo,this,e,null,t)}power(e,t){return new dt(k.Exponentiation,this,e,null,t)}and(e,t){return new dt(k.And,this,e,null,t)}bitwiseOr(e,t){return new dt(k.BitwiseOr,this,e,null,t)}bitwiseAnd(e,t){return new dt(k.BitwiseAnd,this,e,null,t)}or(e,t){return new dt(k.Or,this,e,null,t)}lower(e,t){return new dt(k.Lower,this,e,null,t)}lowerEquals(e,t){return new dt(k.LowerEquals,this,e,null,t)}bigger(e,t){return new dt(k.Bigger,this,e,null,t)}biggerEquals(e,t){return new dt(k.BiggerEquals,this,e,null,t)}isBlank(e){return this.equals(vt,e)}nullishCoalesce(e,t){return new dt(k.NullishCoalesce,this,e,null,t)}toStmt(e){return new xt(this,null,e)}},rt=class e extends nt{name;constructor(e,t,n,r){super(t,n,r),this.name=e}isEquivalent(t){return t instanceof e&&this.name===t.name}isConstant(){return!1}visitExpression(e,t){return e.visitReadVarExpr(this,t)}clone(){return new e(this.name,this.type,this.sourceSpan)}set(e){return new dt(k.Assign,this,e,null,this.sourceSpan)}},it=class e extends nt{expr;constructor(e,t,n,r){super(t,n,r),this.expr=e}visitExpression(e,t){return e.visitTypeofExpr(this,t)}isEquivalent(t){return t instanceof e&&t.expr.isEquivalent(this.expr)}isConstant(){return this.expr.isConstant()}clone(){return new e(this.expr.clone())}},at=class e extends nt{fn;args;pure;isOptional;constructor(e,t,n,r,i=!1,a,o=!1){super(n,r,a),this.fn=e,this.args=t,this.pure=i,this.isOptional=o}get receiver(){return this.fn}isEquivalent(t){return t instanceof e&&this.fn.isEquivalent(t.fn)&&tt(this.args,t.args)&&this.pure===t.pure}isConstant(){return!1}visitExpression(e,t){return e.visitInvokeFunctionExpr(this,t)}clone(){return new e(this.fn.clone(),this.args.map(e=>e.clone()),this.type,this.sourceSpan,this.pure,[],this.isOptional)}},ot=class e extends nt{classExpr;args;constructor(e,t,n,r,i){super(n,r,i),this.classExpr=e,this.args=t}isEquivalent(t){return t instanceof e&&this.classExpr.isEquivalent(t.classExpr)&&tt(this.args,t.args)}isConstant(){return!1}visitExpression(e,t){return e.visitInstantiateExpr(this,t)}clone(){return new e(this.classExpr.clone(),this.args.map(e=>e.clone()),this.type,this.sourceSpan)}},st=class e extends nt{body;flags;constructor(e,t,n,r){super(null,n,r),this.body=e,this.flags=t}isEquivalent(t){return t instanceof e&&this.body===t.body&&this.flags===t.flags}isConstant(){return!0}visitExpression(e,t){return e.visitRegularExpressionLiteral(this,t)}clone(){return new e(this.body,this.flags,this.sourceSpan)}},ct=class e extends nt{value;constructor(e,t,n,r){super(t,n,r),this.value=e}isEquivalent(t){return t instanceof e&&this.value===t.value}isConstant(){return!0}visitExpression(e,t){return e.visitLiteralExpr(this,t)}clone(){return new e(this.value,this.type,this.sourceSpan)}},lt=class e extends nt{value;typeParams;constructor(e,t,n=null,r,i){super(t,r,i),this.value=e,this.typeParams=n}isEquivalent(t){return t instanceof e&&this.value.name===t.value.name&&this.value.moduleName===t.value.moduleName}isConstant(){return!1}visitExpression(e,t){return e.visitExternalExpr(this,t)}clone(){return new e(this.value,this.type,this.typeParams,this.sourceSpan)}},ut=class e extends nt{condition;falseCase;trueCase;constructor(e,t,n=null,r,i,a){super(r||t.type,i,a),this.condition=e,this.falseCase=n,this.trueCase=t}isEquivalent(t){return t instanceof e&&this.condition.isEquivalent(t.condition)&&this.trueCase.isEquivalent(t.trueCase)&&$e(this.falseCase,t.falseCase)}isConstant(){return!1}visitExpression(e,t){return e.visitConditionalExpr(this,t)}clone(){return new e(this.condition.clone(),this.trueCase.clone(),this.falseCase?.clone(),this.type,this.sourceSpan)}},dt=class e extends nt{operator;rhs;lhs;constructor(e,t,n,r,i,a){super(r||t.type,i,a),this.operator=e,this.rhs=n,this.lhs=t}isEquivalent(t){return t instanceof e&&this.operator===t.operator&&this.lhs.isEquivalent(t.lhs)&&this.rhs.isEquivalent(t.rhs)}isConstant(){return!1}visitExpression(e,t){return e.visitBinaryOperatorExpr(this,t)}clone(){return new e(this.operator,this.lhs.clone(),this.rhs.clone(),this.type,this.sourceSpan)}isAssignment(){let e=this.operator;return e===k.Assign||e===k.AdditionAssignment||e===k.SubtractionAssignment||e===k.MultiplicationAssignment||e===k.DivisionAssignment||e===k.RemainderAssignment||e===k.ExponentiationAssignment||e===k.AndAssignment||e===k.OrAssignment||e===k.NullishCoalesceAssignment}},ft=class e extends nt{receiver;name;isOptional;constructor(e,t,n,r,i,a=!1){super(n,r,i),this.receiver=e,this.name=t,this.isOptional=a}get index(){return this.name}isEquivalent(t){return t instanceof e&&this.receiver.isEquivalent(t.receiver)&&this.name===t.name&&this.isOptional===t.isOptional}isConstant(){return!1}visitExpression(e,t){return e.visitReadPropExpr(this,t)}set(e){return new dt(k.Assign,this.receiver.prop(this.name),e,null,this.sourceSpan)}clone(){return new e(this.receiver.clone(),this.name,this.type,this.sourceSpan,[],this.isOptional)}},pt=class e extends nt{receiver;index;isOptional;constructor(e,t,n,r,i,a=!1){super(n,r,i),this.receiver=e,this.index=t,this.isOptional=a}isEquivalent(t){return t instanceof e&&this.receiver.isEquivalent(t.receiver)&&this.index.isEquivalent(t.index)&&this.isOptional===t.isOptional}isConstant(){return!1}visitExpression(e,t){return e.visitReadKeyExpr(this,t)}set(e){return new dt(k.Assign,this.receiver.key(this.index),e,null,this.sourceSpan)}clone(){return new e(this.receiver.clone(),this.index.clone(),this.type,this.sourceSpan,[],this.isOptional)}},mt=class e extends nt{entries;constructor(e,t,n,r){super(t,n,r),this.entries=e}isConstant(){return this.entries.every(e=>e.isConstant())}isEquivalent(t){return t instanceof e&&tt(this.entries,t.entries)}visitExpression(e,t){return e.visitLiteralArrayExpr(this,t)}clone(){return new e(this.entries.map(e=>e.clone()),this.type,this.sourceSpan)}},ht=class e{expression;constructor(e){this.expression=e}isEquivalent(t){return t instanceof e&&this.expression.isEquivalent(t.expression)}clone(){return new e(this.expression.clone())}isConstant(){return this.expression.isConstant()}},gt=class e extends nt{entries;valueType=null;constructor(e,t,n,r){super(t,n,r),this.entries=e,t&&(this.valueType=t.valueType)}isEquivalent(t){return t instanceof e&&tt(this.entries,t.entries)}isConstant(){return this.entries.every(e=>e.isConstant())}visitExpression(e,t){return e.visitLiteralMapExpr(this,t)}clone(){let t=this.entries.map(e=>e.clone());return new e(t,this.type,this.sourceSpan)}},_t=class e extends nt{expression;constructor(e,t,n){super(null,t,n),this.expression=e}isEquivalent(t){return t instanceof e&&this.expression.isEquivalent(t.expression)}isConstant(){return this.expression.isConstant()}visitExpression(e,t){return e.visitSpreadElementExpr(this,t)}clone(){return new e(this.expression.clone(),this.sourceSpan)}},vt=new ct(null,Qe,null),yt=(function(e){return e[e.None=0]=`None`,e[e.Final=1]=`Final`,e[e.Private=2]=`Private`,e[e.Exported=4]=`Exported`,e[e.Static=8]=`Static`,e})(yt||{}),bt=class{modifiers;sourceSpan;leadingComments;constructor(e=yt.None,t=null,n){this.modifiers=e,this.sourceSpan=t,this.leadingComments=n}hasModifier(e){return(this.modifiers&e)!==0}addLeadingComment(e){this.leadingComments=this.leadingComments??[],this.leadingComments.push(e)}},xt=class e extends bt{expr;constructor(e,t,n){super(yt.None,t,n),this.expr=e}isEquivalent(t){return t instanceof e&&this.expr.isEquivalent(t.expr)}visitStatement(e,t){return e.visitExpressionStmt(this,t)}};(class e{static INSTANCE=new e;keyOf(e){if(e instanceof ct&&typeof e.value==`string`)return`"${e.value}"`;if(e instanceof ct)return String(e.value);if(e instanceof st)return`/${e.body}/${e.flags??``}`;if(e instanceof mt){let t=[];for(let n of e.entries)t.push(this.keyOf(n));return`[${t.join(`,`)}]`}if(e instanceof gt){let t=[];for(let n of e.entries)if(n instanceof ht)t.push(`...`+this.keyOf(n.expression));else{let e=n.key;n.quoted&&(e=`"${e}"`),t.push(e+`:`+this.keyOf(n.value))}return`{${t.join(`,`)}}`}if(e instanceof lt)return`import("${e.value.moduleName}", ${e.value.name})`;if(e instanceof rt)return`read(${e.name})`;if(e instanceof it)return`typeof(${this.keyOf(e.expr)})`;if(e instanceof _t)return`...${this.keyOf(e.expression)}`;throw Error(`${this.constructor.name} does not handle expressions of type ${e.constructor.name}`)}});var A=`@angular/core`,j=(()=>{class e{static core={name:null,moduleName:A};static namespaceHTML={name:`ɵɵnamespaceHTML`,moduleName:A};static namespaceMathML={name:`ɵɵnamespaceMathML`,moduleName:A};static namespaceSVG={name:`ɵɵnamespaceSVG`,moduleName:A};static element={name:`ɵɵelement`,moduleName:A};static elementStart={name:`ɵɵelementStart`,moduleName:A};static elementEnd={name:`ɵɵelementEnd`,moduleName:A};static foreignComponent={name:`ɵɵforeignComponent`,moduleName:A};static foreignContent={name:`ɵɵforeignContent`,moduleName:A};static foreignContentFn={name:`ɵɵforeignContentFn`,moduleName:A};static domElement={name:`ɵɵdomElement`,moduleName:A};static domElementStart={name:`ɵɵdomElementStart`,moduleName:A};static domElementEnd={name:`ɵɵdomElementEnd`,moduleName:A};static domElementContainer={name:`ɵɵdomElementContainer`,moduleName:A};static domElementContainerStart={name:`ɵɵdomElementContainerStart`,moduleName:A};static domElementContainerEnd={name:`ɵɵdomElementContainerEnd`,moduleName:A};static domTemplate={name:`ɵɵdomTemplate`,moduleName:A};static domListener={name:`ɵɵdomListener`,moduleName:A};static advance={name:`ɵɵadvance`,moduleName:A};static syntheticHostProperty={name:`ɵɵsyntheticHostProperty`,moduleName:A};static syntheticHostListener={name:`ɵɵsyntheticHostListener`,moduleName:A};static attribute={name:`ɵɵattribute`,moduleName:A};static classProp={name:`ɵɵclassProp`,moduleName:A};static elementContainerStart={name:`ɵɵelementContainerStart`,moduleName:A};static elementContainerEnd={name:`ɵɵelementContainerEnd`,moduleName:A};static elementContainer={name:`ɵɵelementContainer`,moduleName:A};static styleMap={name:`ɵɵstyleMap`,moduleName:A};static classMap={name:`ɵɵclassMap`,moduleName:A};static styleProp={name:`ɵɵstyleProp`,moduleName:A};static interpolate={name:`ɵɵinterpolate`,moduleName:A};static interpolate1={name:`ɵɵinterpolate1`,moduleName:A};static interpolate2={name:`ɵɵinterpolate2`,moduleName:A};static interpolate3={name:`ɵɵinterpolate3`,moduleName:A};static interpolate4={name:`ɵɵinterpolate4`,moduleName:A};static interpolate5={name:`ɵɵinterpolate5`,moduleName:A};static interpolate6={name:`ɵɵinterpolate6`,moduleName:A};static interpolate7={name:`ɵɵinterpolate7`,moduleName:A};static interpolate8={name:`ɵɵinterpolate8`,moduleName:A};static interpolateV={name:`ɵɵinterpolateV`,moduleName:A};static nextContext={name:`ɵɵnextContext`,moduleName:A};static resetView={name:`ɵɵresetView`,moduleName:A};static templateCreate={name:`ɵɵtemplate`,moduleName:A};static defer={name:`ɵɵdefer`,moduleName:A};static deferWhen={name:`ɵɵdeferWhen`,moduleName:A};static deferOnIdle={name:`ɵɵdeferOnIdle`,moduleName:A};static deferOnImmediate={name:`ɵɵdeferOnImmediate`,moduleName:A};static deferOnTimer={name:`ɵɵdeferOnTimer`,moduleName:A};static deferOnHover={name:`ɵɵdeferOnHover`,moduleName:A};static deferOnInteraction={name:`ɵɵdeferOnInteraction`,moduleName:A};static deferOnViewport={name:`ɵɵdeferOnViewport`,moduleName:A};static deferPrefetchWhen={name:`ɵɵdeferPrefetchWhen`,moduleName:A};static deferPrefetchOnIdle={name:`ɵɵdeferPrefetchOnIdle`,moduleName:A};static deferPrefetchOnImmediate={name:`ɵɵdeferPrefetchOnImmediate`,moduleName:A};static deferPrefetchOnTimer={name:`ɵɵdeferPrefetchOnTimer`,moduleName:A};static deferPrefetchOnHover={name:`ɵɵdeferPrefetchOnHover`,moduleName:A};static deferPrefetchOnInteraction={name:`ɵɵdeferPrefetchOnInteraction`,moduleName:A};static deferPrefetchOnViewport={name:`ɵɵdeferPrefetchOnViewport`,moduleName:A};static deferHydrateWhen={name:`ɵɵdeferHydrateWhen`,moduleName:A};static deferHydrateNever={name:`ɵɵdeferHydrateNever`,moduleName:A};static deferHydrateOnIdle={name:`ɵɵdeferHydrateOnIdle`,moduleName:A};static deferHydrateOnImmediate={name:`ɵɵdeferHydrateOnImmediate`,moduleName:A};static deferHydrateOnTimer={name:`ɵɵdeferHydrateOnTimer`,moduleName:A};static deferHydrateOnHover={name:`ɵɵdeferHydrateOnHover`,moduleName:A};static deferHydrateOnInteraction={name:`ɵɵdeferHydrateOnInteraction`,moduleName:A};static deferHydrateOnViewport={name:`ɵɵdeferHydrateOnViewport`,moduleName:A};static deferEnableTimerScheduling={name:`ɵɵdeferEnableTimerScheduling`,moduleName:A};static enableIncrementalHydrationRuntime={name:`ɵɵenableIncrementalHydrationRuntime`,moduleName:A};static conditionalCreate={name:`ɵɵconditionalCreate`,moduleName:A};static conditionalBranchCreate={name:`ɵɵconditionalBranchCreate`,moduleName:A};static conditional={name:`ɵɵconditional`,moduleName:A};static repeater={name:`ɵɵrepeater`,moduleName:A};static repeaterCreate={name:`ɵɵrepeaterCreate`,moduleName:A};static repeaterTrackByIndex={name:`ɵɵrepeaterTrackByIndex`,moduleName:A};static repeaterTrackByIdentity={name:`ɵɵrepeaterTrackByIdentity`,moduleName:A};static componentInstance={name:`ɵɵcomponentInstance`,moduleName:A};static text={name:`ɵɵtext`,moduleName:A};static enableBindings={name:`ɵɵenableBindings`,moduleName:A};static disableBindings={name:`ɵɵdisableBindings`,moduleName:A};static getCurrentView={name:`ɵɵgetCurrentView`,moduleName:A};static textInterpolate={name:`ɵɵtextInterpolate`,moduleName:A};static textInterpolate1={name:`ɵɵtextInterpolate1`,moduleName:A};static textInterpolate2={name:`ɵɵtextInterpolate2`,moduleName:A};static textInterpolate3={name:`ɵɵtextInterpolate3`,moduleName:A};static textInterpolate4={name:`ɵɵtextInterpolate4`,moduleName:A};static textInterpolate5={name:`ɵɵtextInterpolate5`,moduleName:A};static textInterpolate6={name:`ɵɵtextInterpolate6`,moduleName:A};static textInterpolate7={name:`ɵɵtextInterpolate7`,moduleName:A};static textInterpolate8={name:`ɵɵtextInterpolate8`,moduleName:A};static textInterpolateV={name:`ɵɵtextInterpolateV`,moduleName:A};static restoreView={name:`ɵɵrestoreView`,moduleName:A};static pureFunction0={name:`ɵɵpureFunction0`,moduleName:A};static pureFunction1={name:`ɵɵpureFunction1`,moduleName:A};static pureFunction2={name:`ɵɵpureFunction2`,moduleName:A};static pureFunction3={name:`ɵɵpureFunction3`,moduleName:A};static pureFunction4={name:`ɵɵpureFunction4`,moduleName:A};static pureFunction5={name:`ɵɵpureFunction5`,moduleName:A};static pureFunction6={name:`ɵɵpureFunction6`,moduleName:A};static pureFunction7={name:`ɵɵpureFunction7`,moduleName:A};static pureFunction8={name:`ɵɵpureFunction8`,moduleName:A};static pureFunctionV={name:`ɵɵpureFunctionV`,moduleName:A};static pipeBind1={name:`ɵɵpipeBind1`,moduleName:A};static pipeBind2={name:`ɵɵpipeBind2`,moduleName:A};static pipeBind3={name:`ɵɵpipeBind3`,moduleName:A};static pipeBind4={name:`ɵɵpipeBind4`,moduleName:A};static pipeBindV={name:`ɵɵpipeBindV`,moduleName:A};static domProperty={name:`ɵɵdomProperty`,moduleName:A};static ariaProperty={name:`ɵɵariaProperty`,moduleName:A};static property={name:`ɵɵproperty`,moduleName:A};static control={name:`ɵɵcontrol`,moduleName:A};static controlCreate={name:`ɵɵcontrolCreate`,moduleName:A};static animationEnterListener={name:`ɵɵanimateEnterListener`,moduleName:A};static animationLeaveListener={name:`ɵɵanimateLeaveListener`,moduleName:A};static animationEnter={name:`ɵɵanimateEnter`,moduleName:A};static animationLeave={name:`ɵɵanimateLeave`,moduleName:A};static i18n={name:`ɵɵi18n`,moduleName:A};static i18nAttributes={name:`ɵɵi18nAttributes`,moduleName:A};static i18nExp={name:`ɵɵi18nExp`,moduleName:A};static i18nStart={name:`ɵɵi18nStart`,moduleName:A};static i18nEnd={name:`ɵɵi18nEnd`,moduleName:A};static i18nApply={name:`ɵɵi18nApply`,moduleName:A};static i18nPostprocess={name:`ɵɵi18nPostprocess`,moduleName:A};static pipe={name:`ɵɵpipe`,moduleName:A};static projection={name:`ɵɵprojection`,moduleName:A};static projectionDef={name:`ɵɵprojectionDef`,moduleName:A};static reference={name:`ɵɵreference`,moduleName:A};static inject={name:`ɵɵinject`,moduleName:A};static injectAttribute={name:`ɵɵinjectAttribute`,moduleName:A};static directiveInject={name:`ɵɵdirectiveInject`,moduleName:A};static invalidFactory={name:`ɵɵinvalidFactory`,moduleName:A};static invalidFactoryDep={name:`ɵɵinvalidFactoryDep`,moduleName:A};static templateRefExtractor={name:`ɵɵtemplateRefExtractor`,moduleName:A};static forwardRef={name:`forwardRef`,moduleName:A};static resolveForwardRef={name:`resolveForwardRef`,moduleName:A};static replaceMetadata={name:`ɵɵreplaceMetadata`,moduleName:A};static getReplaceMetadataURL={name:`ɵɵgetReplaceMetadataURL`,moduleName:A};static ɵɵdefineInjectable={name:`ɵɵdefineInjectable`,moduleName:A};static declareInjectable={name:`ɵɵngDeclareInjectable`,moduleName:A};static InjectableDeclaration={name:`ɵɵInjectableDeclaration`,moduleName:A};static defineService={name:`ɵɵdefineService`,moduleName:A};static declareService={name:`ɵɵngDeclareService`,moduleName:A};static resolveWindow={name:`ɵɵresolveWindow`,moduleName:A};static resolveDocument={name:`ɵɵresolveDocument`,moduleName:A};static resolveBody={name:`ɵɵresolveBody`,moduleName:A};static getComponentDepsFactory={name:`ɵɵgetComponentDepsFactory`,moduleName:A};static defineComponent={name:`ɵɵdefineComponent`,moduleName:A};static declareComponent={name:`ɵɵngDeclareComponent`,moduleName:A};static setComponentScope={name:`ɵɵsetComponentScope`,moduleName:A};static ChangeDetectionStrategy={name:`ChangeDetectionStrategy`,moduleName:A};static ViewEncapsulation={name:`ViewEncapsulation`,moduleName:A};static ComponentDeclaration={name:`ɵɵComponentDeclaration`,moduleName:A};static FactoryDeclaration={name:`ɵɵFactoryDeclaration`,moduleName:A};static declareFactory={name:`ɵɵngDeclareFactory`,moduleName:A};static FactoryTarget={name:`ɵɵFactoryTarget`,moduleName:A};static defineDirective={name:`ɵɵdefineDirective`,moduleName:A};static declareDirective={name:`ɵɵngDeclareDirective`,moduleName:A};static DirectiveDeclaration={name:`ɵɵDirectiveDeclaration`,moduleName:A};static InjectorDef={name:`ɵɵInjectorDef`,moduleName:A};static InjectorDeclaration={name:`ɵɵInjectorDeclaration`,moduleName:A};static defineInjector={name:`ɵɵdefineInjector`,moduleName:A};static declareInjector={name:`ɵɵngDeclareInjector`,moduleName:A};static NgModuleDeclaration={name:`ɵɵNgModuleDeclaration`,moduleName:A};static ModuleWithProviders={name:`ModuleWithProviders`,moduleName:A};static defineNgModule={name:`ɵɵdefineNgModule`,moduleName:A};static declareNgModule={name:`ɵɵngDeclareNgModule`,moduleName:A};static setNgModuleScope={name:`ɵɵsetNgModuleScope`,moduleName:A};static registerNgModuleType={name:`ɵɵregisterNgModuleType`,moduleName:A};static PipeDeclaration={name:`ɵɵPipeDeclaration`,moduleName:A};static definePipe={name:`ɵɵdefinePipe`,moduleName:A};static declarePipe={name:`ɵɵngDeclarePipe`,moduleName:A};static declareClassMetadata={name:`ɵɵngDeclareClassMetadata`,moduleName:A};static declareClassMetadataAsync={name:`ɵɵngDeclareClassMetadataAsync`,moduleName:A};static setClassMetadata={name:`ɵsetClassMetadata`,moduleName:A};static setClassMetadataAsync={name:`ɵsetClassMetadataAsync`,moduleName:A};static setClassDebugInfo={name:`ɵsetClassDebugInfo`,moduleName:A};static queryRefresh={name:`ɵɵqueryRefresh`,moduleName:A};static viewQuery={name:`ɵɵviewQuery`,moduleName:A};static loadQuery={name:`ɵɵloadQuery`,moduleName:A};static contentQuery={name:`ɵɵcontentQuery`,moduleName:A};static viewQuerySignal={name:`ɵɵviewQuerySignal`,moduleName:A};static contentQuerySignal={name:`ɵɵcontentQuerySignal`,moduleName:A};static queryAdvance={name:`ɵɵqueryAdvance`,moduleName:A};static twoWayProperty={name:`ɵɵtwoWayProperty`,moduleName:A};static twoWayBindingSet={name:`ɵɵtwoWayBindingSet`,moduleName:A};static twoWayListener={name:`ɵɵtwoWayListener`,moduleName:A};static declareLet={name:`ɵɵdeclareLet`,moduleName:A};static storeLet={name:`ɵɵstoreLet`,moduleName:A};static readContextLet={name:`ɵɵreadContextLet`,moduleName:A};static arrowFunction={name:`ɵɵarrowFunction`,moduleName:A};static attachSourceLocations={name:`ɵɵattachSourceLocations`,moduleName:A};static NgOnChangesFeature={name:`ɵɵNgOnChangesFeature`,moduleName:A};static ControlFeature={name:`ɵɵControlFeature`,moduleName:A};static InheritDefinitionFeature={name:`ɵɵInheritDefinitionFeature`,moduleName:A};static ProvidersFeature={name:`ɵɵProvidersFeature`,moduleName:A};static HostDirectivesFeature={name:`ɵɵHostDirectivesFeature`,moduleName:A};static ExternalStylesFeature={name:`ɵɵExternalStylesFeature`,moduleName:A};static listener={name:`ɵɵlistener`,moduleName:A};static getInheritedFactory={name:`ɵɵgetInheritedFactory`,moduleName:A};static sanitizeHtml={name:`ɵɵsanitizeHtml`,moduleName:A};static sanitizeStyle={name:`ɵɵsanitizeStyle`,moduleName:A};static validateAttribute={name:`ɵɵvalidateAttribute`,moduleName:A};static sanitizeResourceUrl={name:`ɵɵsanitizeResourceUrl`,moduleName:A};static sanitizeScript={name:`ɵɵsanitizeScript`,moduleName:A};static sanitizeUrl={name:`ɵɵsanitizeUrl`,moduleName:A};static sanitizeUrlOrResourceUrl={name:`ɵɵsanitizeUrlOrResourceUrl`,moduleName:A};static trustConstantHtml={name:`ɵɵtrustConstantHtml`,moduleName:A};static trustConstantResourceUrl={name:`ɵɵtrustConstantResourceUrl`,moduleName:A};static inputDecorator={name:`Input`,moduleName:A};static outputDecorator={name:`Output`,moduleName:A};static viewChildDecorator={name:`ViewChild`,moduleName:A};static viewChildrenDecorator={name:`ViewChildren`,moduleName:A};static contentChildDecorator={name:`ContentChild`,moduleName:A};static contentChildrenDecorator={name:`ContentChildren`,moduleName:A};static InputSignalBrandWriteType={name:`ɵINPUT_SIGNAL_BRAND_WRITE_TYPE`,moduleName:A};static UnwrapDirectiveSignalInputs={name:`ɵUnwrapDirectiveSignalInputs`,moduleName:A};static unwrapWritableSignal={name:`ɵunwrapWritableSignal`,moduleName:A};static assertType={name:`ɵassertType`,moduleName:A}}return e})();k.And,k.Bigger,k.BiggerEquals,k.BitwiseOr,k.BitwiseAnd,k.Divide,k.Assign,k.Equals,k.Identical,k.Lower,k.LowerEquals,k.Minus,k.Modulo,k.Exponentiation,k.Multiply,k.NotEquals,k.NotIdentical,k.NullishCoalesce,k.Or,k.Plus,k.In,k.InstanceOf,k.AdditionAssignment,k.SubtractionAssignment,k.MultiplicationAssignment,k.DivisionAssignment,k.RemainderAssignment,k.ExponentiationAssignment,k.AndAssignment,k.OrAssignment,k.NullishCoalesceAssignment;var St=class{span;sourceSpan;constructor(e,t){this.span=e,this.sourceSpan=t}toString(){return`AST`}},Ct=class extends St{receiver;args;argumentSpan;constructor(e,t,n,r,i){super(e,t),this.receiver=n,this.args=r,this.argumentSpan=i}visit(e,t=null){return e.visitCall(this,t)}},wt=(function(e){return e[e.Property=0]=`Property`,e[e.Attribute=1]=`Attribute`,e[e.Class=2]=`Class`,e[e.Style=3]=`Style`,e[e.LegacyAnimation=4]=`LegacyAnimation`,e[e.TwoWay=5]=`TwoWay`,e[e.Animation=6]=`Animation`,e})(wt||{}),Tt=`(:(where|is)\\()?`,Et=`-shadowcsshost`,Dt=`-shadowcsscontext`,Ot=`[^)(]*`,kt=String.raw`(?:\(${Ot}\)|${Ot})+?`,At=String.raw`(?:\(${kt}\)|${Ot})+?`,jt=String.raw`(?:\((${At})\))`;String.raw`(:nth-[-\w]+)`+jt,Et+jt+``,`${Tt}`,Dt+jt+``;var M=(function(e){return e[e.ListEnd=0]=`ListEnd`,e[e.Statement=1]=`Statement`,e[e.Variable=2]=`Variable`,e[e.ElementStart=3]=`ElementStart`,e[e.Element=4]=`Element`,e[e.ForeignComponent=5]=`ForeignComponent`,e[e.Template=6]=`Template`,e[e.ElementEnd=7]=`ElementEnd`,e[e.ContainerStart=8]=`ContainerStart`,e[e.Container=9]=`Container`,e[e.ContainerEnd=10]=`ContainerEnd`,e[e.DisableBindings=11]=`DisableBindings`,e[e.ConditionalCreate=12]=`ConditionalCreate`,e[e.ConditionalBranchCreate=13]=`ConditionalBranchCreate`,e[e.Conditional=14]=`Conditional`,e[e.EnableBindings=15]=`EnableBindings`,e[e.Text=16]=`Text`,e[e.Listener=17]=`Listener`,e[e.InterpolateText=18]=`InterpolateText`,e[e.Binding=19]=`Binding`,e[e.Property=20]=`Property`,e[e.StyleProp=21]=`StyleProp`,e[e.ClassProp=22]=`ClassProp`,e[e.StyleMap=23]=`StyleMap`,e[e.ClassMap=24]=`ClassMap`,e[e.Advance=25]=`Advance`,e[e.Pipe=26]=`Pipe`,e[e.Attribute=27]=`Attribute`,e[e.ExtractedAttribute=28]=`ExtractedAttribute`,e[e.Defer=29]=`Defer`,e[e.DeferOn=30]=`DeferOn`,e[e.DeferWhen=31]=`DeferWhen`,e[e.I18nMessage=32]=`I18nMessage`,e[e.DomProperty=33]=`DomProperty`,e[e.Namespace=34]=`Namespace`,e[e.ProjectionDef=35]=`ProjectionDef`,e[e.EnableIncrementalHydrationRuntime=36]=`EnableIncrementalHydrationRuntime`,e[e.Projection=37]=`Projection`,e[e.Content=38]=`Content`,e[e.RepeaterCreate=39]=`RepeaterCreate`,e[e.Repeater=40]=`Repeater`,e[e.TwoWayProperty=41]=`TwoWayProperty`,e[e.TwoWayListener=42]=`TwoWayListener`,e[e.DeclareLet=43]=`DeclareLet`,e[e.StoreLet=44]=`StoreLet`,e[e.I18nStart=45]=`I18nStart`,e[e.I18n=46]=`I18n`,e[e.I18nEnd=47]=`I18nEnd`,e[e.I18nExpression=48]=`I18nExpression`,e[e.I18nApply=49]=`I18nApply`,e[e.IcuStart=50]=`IcuStart`,e[e.IcuEnd=51]=`IcuEnd`,e[e.IcuPlaceholder=52]=`IcuPlaceholder`,e[e.I18nContext=53]=`I18nContext`,e[e.I18nAttributes=54]=`I18nAttributes`,e[e.SourceLocation=55]=`SourceLocation`,e[e.Animation=56]=`Animation`,e[e.AnimationString=57]=`AnimationString`,e[e.AnimationBinding=58]=`AnimationBinding`,e[e.AnimationListener=59]=`AnimationListener`,e[e.Control=60]=`Control`,e[e.ControlCreate=61]=`ControlCreate`,e})(M||{}),Mt=(function(e){return e[e.LexicalRead=0]=`LexicalRead`,e[e.Context=1]=`Context`,e[e.TrackContext=2]=`TrackContext`,e[e.ReadVariable=3]=`ReadVariable`,e[e.NextContext=4]=`NextContext`,e[e.Reference=5]=`Reference`,e[e.StoreLet=6]=`StoreLet`,e[e.ContextLetReference=7]=`ContextLetReference`,e[e.GetCurrentView=8]=`GetCurrentView`,e[e.RestoreView=9]=`RestoreView`,e[e.ResetView=10]=`ResetView`,e[e.PureFunctionExpr=11]=`PureFunctionExpr`,e[e.PureFunctionParameterExpr=12]=`PureFunctionParameterExpr`,e[e.PipeBinding=13]=`PipeBinding`,e[e.PipeBindingVariadic=14]=`PipeBindingVariadic`,e[e.SafePropertyRead=15]=`SafePropertyRead`,e[e.SafeKeyedRead=16]=`SafeKeyedRead`,e[e.SafeNavigationMigration=17]=`SafeNavigationMigration`,e[e.SafeTernaryExpr=18]=`SafeTernaryExpr`,e[e.EmptyExpr=19]=`EmptyExpr`,e[e.AssignTemporaryExpr=20]=`AssignTemporaryExpr`,e[e.ReadTemporaryExpr=21]=`ReadTemporaryExpr`,e[e.SlotLiteralExpr=22]=`SlotLiteralExpr`,e[e.ConditionalCase=23]=`ConditionalCase`,e[e.ConstCollected=24]=`ConstCollected`,e[e.TwoWayBindingSet=25]=`TwoWayBindingSet`,e[e.ForeignContent=26]=`ForeignContent`,e[e.ArrowFunction=27]=`ArrowFunction`,e})(Mt||{}),Nt=(function(e){return e[e.None=0]=`None`,e[e.AlwaysInline=1]=`AlwaysInline`,e})(Nt||{}),Pt=(function(e){return e[e.Context=0]=`Context`,e[e.Identifier=1]=`Identifier`,e[e.SavedView=2]=`SavedView`,e[e.Alias=3]=`Alias`,e})(Pt||{}),Ft=(function(e){return e[e.Attribute=0]=`Attribute`,e[e.ClassName=1]=`ClassName`,e[e.StyleProperty=2]=`StyleProperty`,e[e.Property=3]=`Property`,e[e.Template=4]=`Template`,e[e.I18n=5]=`I18n`,e[e.LegacyAnimation=6]=`LegacyAnimation`,e[e.TwoWayProperty=7]=`TwoWayProperty`,e[e.Animation=8]=`Animation`,e})(Ft||{}),It=(function(e){return e[e.Creation=0]=`Creation`,e[e.Postproccessing=1]=`Postproccessing`,e})(It||{}),Lt=(function(e){return e[e.I18nText=0]=`I18nText`,e[e.I18nAttribute=1]=`I18nAttribute`,e})(Lt||{}),Rt=(function(e){return e[e.None=0]=`None`,e[e.ElementTag=1]=`ElementTag`,e[e.TemplateTag=2]=`TemplateTag`,e[e.OpenTag=4]=`OpenTag`,e[e.CloseTag=8]=`CloseTag`,e[e.ExpressionIndex=16]=`ExpressionIndex`,e})(Rt||{}),zt=(function(e){return e[e.HTML=0]=`HTML`,e[e.SVG=1]=`SVG`,e[e.Math=2]=`Math`,e})(zt||{}),Bt=(function(e){return e[e.Idle=0]=`Idle`,e[e.Immediate=1]=`Immediate`,e[e.Timer=2]=`Timer`,e[e.Hover=3]=`Hover`,e[e.Interaction=4]=`Interaction`,e[e.Viewport=5]=`Viewport`,e[e.Never=6]=`Never`,e})(Bt||{}),Vt=(function(e){return e[e.RootI18n=0]=`RootI18n`,e[e.Icu=1]=`Icu`,e[e.Attr=2]=`Attr`,e})(Vt||{}),Ht=(function(e){return e[e.NgTemplate=0]=`NgTemplate`,e[e.Structural=1]=`Structural`,e[e.Block=2]=`Block`,e})(Ht||{}),Ut=(function(e){return e[e.None=0]=`None`,e[e.InChildOperation=1]=`InChildOperation`,e[e.InArrowFunctionOperation=2]=`InArrowFunctionOperation`,e[e.InSafeNavigationMigration=4]=`InSafeNavigationMigration`,e})(Ut||{});M.Element,M.ElementStart,M.Container,M.ContainerStart,M.Template,M.RepeaterCreate,M.ConditionalCreate,M.ConditionalBranchCreate;var N=(function(e){return e[e.Tmpl=0]=`Tmpl`,e[e.Host=1]=`Host`,e[e.Both=2]=`Both`,e})(N||{}),Wt=(function(e){return e[e.Full=0]=`Full`,e[e.DomOnly=1]=`DomOnly`,e})(Wt||{});j.ariaProperty,j.ariaProperty,j.attribute,j.attribute,j.classProp,j.classProp,j.element,j.element,j.elementContainer,j.elementContainer,j.elementContainerEnd,j.elementContainerEnd,j.elementContainerStart,j.elementContainerStart,j.elementEnd,j.elementEnd,j.elementStart,j.elementStart,j.domProperty,j.domProperty,j.i18nExp,j.i18nExp,j.listener,j.listener,j.listener,j.listener,j.property,j.property,j.styleProp,j.styleProp,j.syntheticHostListener,j.syntheticHostListener,j.syntheticHostProperty,j.syntheticHostProperty,j.templateCreate,j.templateCreate,j.twoWayProperty,j.twoWayProperty,j.twoWayListener,j.twoWayListener,j.declareLet,j.declareLet,j.conditionalCreate,j.conditionalBranchCreate,j.conditionalBranchCreate,j.conditionalBranchCreate,j.domElement,j.domElement,j.domElementStart,j.domElementStart,j.domElementEnd,j.domElementEnd,j.domElementContainer,j.domElementContainer,j.domElementContainerStart,j.domElementContainerStart,j.domElementContainerEnd,j.domElementContainerEnd,j.domListener,j.domListener,j.domTemplate,j.domTemplate,j.animationEnter,j.animationEnter,j.animationLeave,j.animationLeave,j.animationEnterListener,j.animationEnterListener,j.animationLeaveListener,j.animationLeaveListener,k.And,k.Bigger,k.BiggerEquals,k.BitwiseOr,k.BitwiseAnd,k.Divide,k.Assign,k.Equals,k.Identical,k.Lower,k.LowerEquals,k.Minus,k.Modulo,k.Exponentiation,k.Multiply,k.NotEquals,k.NotIdentical,k.NullishCoalesce,k.Or,k.Plus,k.In,k.InstanceOf,k.AdditionAssignment,k.SubtractionAssignment,k.MultiplicationAssignment,k.DivisionAssignment,k.RemainderAssignment,k.ExponentiationAssignment,k.AndAssignment,k.OrAssignment,k.NullishCoalesceAssignment,M.Property,M.Property,M.Property,M.Attribute,M.Attribute,M.Property,M.TwoWayProperty,M.Container,M.ContainerStart,M.ContainerEnd,M.Element,M.ElementStart,M.ElementEnd,M.Template,M.ElementEnd,M.ElementStart,M.Element,M.ContainerEnd,M.ContainerStart,M.Container,M.I18nEnd,M.I18nStart,M.I18n,M.Pipe;var Gt=` \f -\r \v ᠎ - \u2028\u2029   `;`${Gt}`,`${Gt}`;var Kt=(function(e){return e[e.Character=0]=`Character`,e[e.Identifier=1]=`Identifier`,e[e.PrivateIdentifier=2]=`PrivateIdentifier`,e[e.Keyword=3]=`Keyword`,e[e.String=4]=`String`,e[e.Operator=5]=`Operator`,e[e.Number=6]=`Number`,e[e.RegExpBody=7]=`RegExpBody`,e[e.RegExpFlags=8]=`RegExpFlags`,e[e.Error=9]=`Error`,e})(Kt||{}),qt=(function(e){return e[e.Plain=0]=`Plain`,e[e.TemplateLiteralPart=1]=`TemplateLiteralPart`,e[e.TemplateLiteralEnd=2]=`TemplateLiteralEnd`,e})(qt||{});Kt.Character,M.StyleMap,M.ClassMap,M.StyleProp,M.ClassProp,M.Attribute,M.Property,M.Attribute,M.Control,M.DomProperty,M.DomProperty,M.Attribute,M.StyleMap,M.ClassMap,M.StyleProp,M.ClassProp,M.Listener,M.TwoWayListener,M.AnimationListener,M.StyleMap,M.ClassMap,M.StyleProp,M.ClassProp,M.Property,M.TwoWayProperty,M.DomProperty,M.Attribute,M.Animation,M.Control,Bt.Idle,j.deferOnIdle,j.deferPrefetchOnIdle,j.deferHydrateOnIdle,Bt.Immediate,j.deferOnImmediate,j.deferPrefetchOnImmediate,j.deferHydrateOnImmediate,Bt.Timer,j.deferOnTimer,j.deferPrefetchOnTimer,j.deferHydrateOnTimer,Bt.Hover,j.deferOnHover,j.deferPrefetchOnHover,j.deferHydrateOnHover,Bt.Interaction,j.deferOnInteraction,j.deferPrefetchOnInteraction,j.deferHydrateOnInteraction,Bt.Viewport,j.deferOnViewport,j.deferPrefetchOnViewport,j.deferHydrateOnViewport,Bt.Never,j.deferHydrateNever,j.deferHydrateNever,j.deferHydrateNever,j.pipeBind1,j.pipeBind2,j.pipeBind3,j.pipeBind4,j.textInterpolate,j.textInterpolate1,j.textInterpolate2,j.textInterpolate3,j.textInterpolate4,j.textInterpolate5,j.textInterpolate6,j.textInterpolate7,j.textInterpolate8,j.textInterpolateV,j.interpolate,j.interpolate1,j.interpolate2,j.interpolate3,j.interpolate4,j.interpolate5,j.interpolate6,j.interpolate7,j.interpolate8,j.interpolateV,j.pureFunction0,j.pureFunction1,j.pureFunction2,j.pureFunction3,j.pureFunction4,j.pureFunction5,j.pureFunction6,j.pureFunction7,j.pureFunction8,j.pureFunctionV,j.resolveWindow,j.resolveDocument,j.resolveBody,qe.HTML,j.sanitizeHtml,qe.RESOURCE_URL,j.sanitizeResourceUrl,qe.SCRIPT,j.sanitizeScript,qe.STYLE,j.sanitizeStyle,qe.URL,j.sanitizeUrl,qe.ATTRIBUTE_NO_BINDING,j.validateAttribute,qe.HTML,j.trustConstantHtml,qe.RESOURCE_URL,j.trustConstantResourceUrl;var Jt=(function(e){return e[e.None=0]=`None`,e[e.ViewContextRead=1]=`ViewContextRead`,e[e.ViewContextWrite=2]=`ViewContextWrite`,e[e.SideEffectful=4]=`SideEffectful`,e})(Jt||{});N.Tmpl,N.Tmpl,N.Both,N.Host,N.Tmpl,N.Tmpl,N.Tmpl,N.Both,N.Both,N.Both,N.Tmpl,N.Both,N.Both,N.Tmpl,N.Both,N.Tmpl,N.Both,N.Both,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Both,N.Both,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Both,N.Both,N.Both,N.Tmpl,N.Tmpl,N.Both,N.Tmpl,N.Tmpl,N.Tmpl,N.Both,N.Both,N.Tmpl,N.Both,N.Both,N.Both,N.Both,N.Both,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Both,N.Tmpl,N.Both,N.Tmpl,N.Both,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Tmpl,N.Both,N.Both,N.Both,wt.Property,Ft.Property,wt.TwoWay,Ft.TwoWayProperty,wt.Attribute,Ft.Attribute,wt.Class,Ft.ClassName,wt.Style,Ft.StyleProperty,wt.LegacyAnimation,Ft.LegacyAnimation,wt.Animation,Ft.Animation;var Yt=`%COMP%`;`${Yt}`,`${Yt}`,class e{static SINGLETON=new e;static veWillInferAnyFor(t){let n=e.SINGLETON;return t instanceof Ct?t.visit(n):t.receiver.visit(n)}visitUnary(e){return e.expr.visit(this)}visitBinary(e){return e.left.visit(this)||e.right.visit(this)}visitChain(){return!1}visitConditional(e){return e.condition.visit(this)||e.trueExp.visit(this)||e.falseExp.visit(this)}visitCall(){return!0}visitSafeCall(){return!1}visitImplicitReceiver(){return!1}visitThisReceiver(){return!1}visitInterpolation(e){return e.expressions.some(e=>e.visit(this))}visitKeyedRead(){return!1}visitLiteralArray(){return!0}visitLiteralMap(){return!0}visitLiteralPrimitive(){return!1}visitPipe(){return!0}visitPrefixNot(e){return e.expression.visit(this)}visitTypeofExpression(e){return e.expression.visit(this)}visitVoidExpression(e){return e.expression.visit(this)}visitNonNullAssert(e){return e.expression.visit(this)}visitPropertyRead(){return!1}visitSafePropertyRead(){return!1}visitSafeKeyedRead(){return!1}visitTemplateLiteral(){return!1}visitTemplateLiteralElement(){return!1}visitTaggedTemplateLiteral(){return!1}visitParenthesizedExpression(e){return e.expression.visit(this)}visitRegularExpressionLiteral(){return!1}visitSpreadElement(e){return e.expression.visit(this)}visitArrowFunction(e,t){return!1}};var Xt=null,Zt=!1,Qt=1,$t=null,en=Symbol(`SIGNAL`);function P(e){let t=Xt;return Xt=e,t}function tn(){return Xt}var nn={version:0,lastCleanEpoch:0,dirty:!1,producers:void 0,producersTail:void 0,consumers:void 0,consumersTail:void 0,recomputing:!1,consumerAllowSignalWrites:!1,consumerIsAlwaysLive:!1,kind:`unknown`,producerMustRecompute:()=>!1,producerRecomputeValue:()=>{},consumerMarkedDirty:()=>{},consumerOnSignalRead:()=>{}};function rn(e){if(Zt)throw Error(``);if(Xt===null)return;Xt.consumerOnSignalRead(e);let t=Xt.producersTail;if(t!==void 0&&t.producer===e)return;let n,r=Xt.recomputing;if(r&&(n=t===void 0?Xt.producers:t.nextProducer,n!==void 0&&n.producer===e)){Xt.producersTail=n,n.lastReadVersion=e.version,n.knownValidAtEpoch=Qt;return}let i=e.consumersTail;if(i!==void 0&&i.consumer===Xt&&(!r||i.knownValidAtEpoch===Qt))return;let a=yn(Xt),o={producer:e,consumer:Xt,nextProducer:n,prevConsumer:void 0,knownValidAtEpoch:Qt,lastReadVersion:e.version,nextConsumer:void 0};Xt.producersTail=o,t===void 0?Xt.producers=o:t.nextProducer=o,a&&_n(e,o)}function an(){Qt++}function on(e){if((!yn(e)||e.dirty)&&(e.dirty||e.lastCleanEpoch!==Qt)){if(!e.producerMustRecompute(e)&&!hn(e)){un(e);return}e.producerRecomputeValue(e),un(e)}}function sn(e){if(e.consumers===void 0)return;let t=Zt;Zt=!0;try{for(let t=e.consumers;t!==void 0;t=t.nextConsumer){let e=t.consumer;e.dirty||ln(e)}}finally{Zt=t}}function cn(){return Xt?.consumerAllowSignalWrites!==!1}function ln(e){e.dirty=!0,sn(e),e.consumerMarkedDirty?.(e)}function un(e){e.dirty=!1,e.lastCleanEpoch=Qt}function dn(e){return e&&fn(e),P(e)}function fn(e){if(e.producersTail?.knownValidAtEpoch===Qt){let t=e.producers;for(;t!==void 0;)t.knownValidAtEpoch=null,t=t.nextProducer}e.producersTail=void 0,e.recomputing=!0}function pn(e,t){P(t),e&&mn(e)}function mn(e){e.recomputing=!1;let t=e.producersTail,n=t===void 0?e.producers:t.nextProducer;if(n!==void 0){if(yn(e))do n=vn(n);while(n!==void 0);t===void 0?e.producers=void 0:t.nextProducer=void 0}}function hn(e){for(let t=e.producers;t!==void 0;t=t.nextProducer){let e=t.producer,n=t.lastReadVersion;if(n!==e.version||(on(e),n!==e.version))return!0}return!1}function gn(e){if(yn(e)){let t=e.producers;for(;t!==void 0;)t=vn(t)}e.producers=void 0,e.producersTail=void 0,e.consumers=void 0,e.consumersTail=void 0}function _n(e,t){let n=e.consumersTail,r=yn(e);if(n===void 0?(t.nextConsumer=void 0,e.consumers=t):(t.nextConsumer=n.nextConsumer,n.nextConsumer=t),t.prevConsumer=n,e.consumersTail=t,!r)for(let t=e.producers;t!==void 0;t=t.nextProducer)_n(t.producer,t)}function vn(e){let t=e.producer,n=e.nextProducer,r=e.nextConsumer,i=e.prevConsumer;if(e.nextConsumer=void 0,e.prevConsumer=void 0,r===void 0?t.consumersTail=i:r.prevConsumer=i,i!==void 0)i.nextConsumer=r;else if(t.consumers=r,!yn(t)){let e=t.producers;for(;e!==void 0;)e=vn(e)}return n}function yn(e){return e.consumerIsAlwaysLive||e.consumers!==void 0}function bn(e){$t?.(e)}function xn(e,t){return Object.is(e,t)}function Sn(e,t){let n=Object.create(En);n.computation=e,t!==void 0&&(n.equal=t);let r=()=>{if(on(n),rn(n),n.value===Tn)throw n.error;return n.value};return r[en]=n,bn(n),r}var Cn=Symbol(`UNSET`),wn=Symbol(`COMPUTING`),Tn=Symbol(`ERRORED`),En={...nn,value:Cn,dirty:!0,error:null,equal:xn,kind:`computed`,producerMustRecompute(e){return e.value===Cn||e.value===wn},producerRecomputeValue(e){if(e.value===wn)throw Error(``);let t=e.value;e.value=wn;let n=dn(e),r,i=!1;try{r=e.computation(),P(null),i=t!==Cn&&t!==Tn&&r!==Tn&&e.equal(t,r)}catch(t){r=Tn,e.error=t}finally{pn(e,n)}if(i){e.value=t;return}e.value=r,e.version++}};function Dn(){throw Error()}var On=Dn;function kn(e){On(e)}function An(e){On=e}var jn=null;function Mn(e,t){let n=Object.create(In);n.value=e,t!==void 0&&(n.equal=t);let r=()=>Nn(n);return r[en]=n,bn(n),[r,e=>Pn(n,e),e=>Fn(n,e)]}function Nn(e){return rn(e),e.value}function Pn(e,t){cn()||kn(e),e.equal(e.value,t)||(e.value=t,Ln(e))}function Fn(e,t){cn()||kn(e),Pn(e,t(e.value))}var In={...nn,equal:xn,value:void 0,kind:`signal`};function Ln(e){e.version++,an(),sn(e),jn?.(e)}var Rn={...nn,consumerIsAlwaysLive:!0,consumerAllowSignalWrites:!0,dirty:!0,kind:`effect`};function zn(e){if(e.dirty=!1,e.version>0&&!hn(e))return;e.version++;let t=dn(e);try{e.cleanup(),e.fn()}finally{pn(e,t)}}var Bn=void 0;function Vn(){return Bn}function Hn(e){let t=Bn;return Bn=e,t}var Un=Symbol(`NotFound`);function Wn(e){return e===Un||e?.name===`ɵNotFound`}var Gn=function(e,t){return Gn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},Gn(e,t)};function Kn(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Class extends value `+String(t)+` is not a constructor or null`);Gn(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function qn(e){var t=typeof Symbol==`function`&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length==`number`)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?`Object is not iterable.`:`Symbol.iterator is not defined.`)}function Jn(e,t){var n=typeof Symbol==`function`&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-->0)&&!(i=r.next()).done;)a.push(i.value)}catch(e){o={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a}function Yn(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(t){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,t)},t.prototype._subscribe=function(e){return this._throwIfClosed(),this._checkFinalizedStatuses(e),this._innerSubscribe(e)},t.prototype._innerSubscribe=function(e){var t=this,n=this,r=n.hasError,i=n.isStopped,a=n.observers;return r||i?tr:(this.currentObservers=null,a.push(e),new er(function(){t.currentObservers=null,$n(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 Dr;return e.source=this,e},t.create=function(e,t){return new Lr(e,t)},t}(Dr),Lr=function(e){Kn(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)??tr},t}(Ir),Rr=function(e){Kn(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}(Ir);function zr(e,t){return Mr(function(n,r){var i=0;n.subscribe(Nr(r,function(n){r.next(e.call(t,n,i++))}))})}var Br=`https://angular.dev/best-practices/security#preventing-cross-site-scripting-xss`,F=class extends Error{code;constructor(e,t){super(Hr(e,t)),this.code=e}};function Vr(e){return`NG0${Math.abs(e)}`}function Hr(e,t){return`${Vr(e)}${t?`: `+t:``}`}function I(e){for(let t in e)if(e[t]===I)return t;throw Error(``)}function Ur(e){if(typeof e==`string`)return e;if(Array.isArray(e))return`[${e.map(Ur).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 Wr(e,t){return e?t?`${e} ${t}`:e:t||``}var Gr=I({__forward_ref__:I});function Kr(e){return e.__forward_ref__=Kr,e}function qr(e){return Jr(e)?e():e}function Jr(e){return typeof e==`function`&&Object.hasOwn(e,Gr)&&e.__forward_ref__===Kr}function Yr(e){return{token:e.token,providedIn:e.providedIn||null,factory:e.factory,value:void 0}}function Xr(e){return Zr(e,ei)}function Zr(e,t){return Object.hasOwn(e,t)&&e[t]||null}function Qr(e){return(e?.[ei]??null)||null}function $r(e){return e&&Object.hasOwn(e,ti)?e[ti]:null}var ei=I({ɵprov:I}),ti=I({ɵinj:I}),L=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=Yr({token:this,providedIn:t.providedIn||`root`,factory:t.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}};function ni(e){return e&&!!e.ɵproviders}var ri=I({ɵcmp:I}),ii=I({ɵdir:I}),ai=I({ɵpipe:I}),oi=I({ɵfac:I}),si=I({__NG_ELEMENT_ID__:I}),ci=I({__NG_ENV_ID__:I});function li(e){return fi(e,`@Component`),e[ri]||null}function ui(e){return fi(e,`@Directive`),e[ii]||null}function di(e){return fi(e,`@Pipe`),e[ai]||null}function fi(e,t){if(e==null)throw new F(-919,!1)}function pi(e){return typeof e==`string`?e:e==null?``:String(e)}var mi=I({ngErrorCode:I}),hi=I({ngErrorMessage:I}),gi=I({ngTokenPath:I});function _i(e,t){return yi(``,-200,t)}function vi(e,t){throw new F(-201,!1)}function yi(e,t,n){let r=new F(t,e);return r[mi]=t,r[hi]=e,n&&(r[gi]=n),r}function bi(e){return e[mi]}var xi;function Si(){return xi}function Ci(e){let t=xi;return xi=e,t}function wi(e,t,n){let r=Xr(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;vi(e,``)}var Ti={},Ei=`__NG_DI_FLAG__`,Di=class{injector;constructor(e){this.injector=e}retrieve(e,t){let n=ki(t)||0;try{return this.injector.get(e,n&8?null:Ti,n)}catch(e){if(Wn(e))return e;throw e}}};function Oi(e,t=0){let n=Vn();if(n===void 0)throw new F(-203,!1);if(n===null)return wi(e,void 0,t);{let r=Ai(t),i=n.retrieve(e,r);if(Wn(i)){if(r.optional)return null;throw i}return i}}function R(e,t=0){return(Si()||Oi)(qr(e),t)}function z(e,t){return R(e,ki(t))}function ki(e){return e===void 0||typeof e==`number`?e:0|(e.optional&&8)|(e.host&&1)|(e.self&&2)|(e.skipSelf&&4)}function Ai(e){return{optional:!!(e&8),host:!!(e&1),self:!!(e&2),skipSelf:!!(e&4)}}function ji(e){let t=[];for(let n=0;nArray.isArray(e)?Pi(e,t):t(e))}function Fi(e,t,n){t>=e.length?e.push(n):e.splice(t,0,n)}function Ii(e,t){return t>=e.length-1?e.pop():e.splice(t,1)[0]}function Li(e,t,n,r){let i=e.length;if(i==t)e.push(n,r);else if(i===1)e.push(r,e[0]),e[0]=n;else{for(i--,e.push(e[i-1],e[i]);i>t;){let t=i-2;e[i]=e[t],i--}e[t]=n,e[t+1]=r}}function Ri(e,t,n){let r=Bi(e,t);return r>=0?e[r|1]=n:(r=~r,Li(e,r,t,n)),r}function zi(e,t){let n=Bi(e,t);if(n>=0)return e[n|1]}function Bi(e,t){return Vi(e,t,1)}function Vi(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 Pi(t,e=>{let t=e;Zi(t,a,[],r)&&(i||=[],i.push(t))}),i!==void 0&&Xi(i,a),n}function Xi(e,t){for(let n=0;n{t(e,r)})}}function Zi(e,t,n,r){if(e=qr(e),!e)return!1;let i=null,a=$r(e),o=!a&&li(e);if(!a&&!o){let t=e.ngModule;if(a=$r(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)Zi(i,t,n,r)}}else if(a){if(a.imports!=null&&!s){r.add(i);let e;try{Pi(a.imports,i=>{Zi(i,t,n,r)&&(e||=[],e.push(i))})}finally{}e!==void 0&&Xi(e,t)}if(!s){let e=Ni(i)||(()=>new i);t({provide:i,useFactory:e,deps:Ui},i),t({provide:Ki,useValue:i,multi:!0},i),t({provide:Wi,useValue:()=>R(i),multi:!0},i)}let o=a.providers;if(o!=null&&!s){let n=e;Qi(o,e=>{t(e,n)})}}else return!1;return i!==e&&e.providers!==void 0}function Qi(e,t){for(let n of e)ni(n)&&(n=n.ɵproviders),Array.isArray(n)?Qi(n,t):t(n)}var $i=I({provide:String,useValue:I});function ea(e){return typeof e==`object`&&!!e&&$i in e}function ta(e){return!!(e&&e.useExisting)}function na(e){return!!(e&&e.useFactory)}function ra(e){return typeof e==`function`}var ia=new L(``),aa={},oa={},sa=void 0;function ca(){return sa===void 0&&(sa=new qi),sa}var la=class{},ua=class extends la{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,ba(e,e=>this.processProvider(e)),this.records.set(Gi,ga(void 0,this)),r.has(`environment`)&&this.records.set(la,ga(void 0,this));let i=this.records.get(ia);i!=null&&typeof i.value==`string`&&this.scopes.add(i.value),this.injectorDefTypes=new Set(this.get(Ki,Ui,{self:!0}))}retrieve(e,t){let n=ki(t)||0;try{return this.get(e,Ti,n)}catch(e){if(Wn(e))return e;throw e}}destroy(){ha(this),this._destroyed=!0;let e=P(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(),P(e)}}onDestroy(e){return ha(this),this._onDestroyHooks.push(e),()=>this.removeOnDestroy(e)}runInContext(e){ha(this);let t=Hn(this),n=Ci(void 0);try{return e()}finally{Hn(t),Ci(n)}}get(e,t=Ti,n){if(ha(this),Object.hasOwn(e,ci))return e[ci](this);let r=ki(n),i=Hn(this),a=Ci(void 0);try{if(!(r&4)){let t=this.records.get(e);if(t===void 0){let n=ya(e)&&Xr(e);t=n&&this.injectableDefInScope(n)?ga(da(e),aa):null,this.records.set(e,t)}if(t!=null)return this.hydrate(e,t,r)}let n=r&2?ca():this.parent;return t=r&8&&t===Ti?null:t,n.get(e,t)}catch(e){let t=bi(e);throw t===-200||t===-201?new F(t,null):e}finally{Ci(a),Hn(i)}}resolveInjectorInitializers(){let e=P(null),t=Hn(this),n=Ci(void 0);try{let e=this.get(Wi,Ui,{self:!0});for(let t of e)t()}finally{Hn(t),Ci(n),P(e)}}toString(){return`R3Injector[...]`}processProvider(e){e=qr(e);let t=ra(e)?e:qr(e&&e.provide),n=pa(e);if(!ra(e)&&e.multi===!0){let n=this.records.get(t);n||(n=ga(void 0,aa,!0),n.factory=()=>ji(n.multi),this.records.set(t,n)),t=e,n.multi.push(e)}this.records.set(t,n)}hydrate(e,t,n){let r=P(null);try{if(t.value===oa)throw _i(``);return t.value===aa&&(t.value=oa,t.value=t.factory(void 0,n)),typeof t.value==`object`&&t.value&&va(t.value)&&this._ngOnDestroyHooks.add(t.value),t.value}finally{P(r)}}injectableDefInScope(e){if(!e.providedIn)return!1;let t=qr(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 da(e){let t=Xr(e),n=t===null?Ni(e):t.factory;if(n!==null)return n;if(e instanceof L)throw new F(-204,!1);if(e instanceof Function)return fa(e);throw new F(-204,!1)}function fa(e){if(e.length>0)throw new F(-204,!1);let t=Qr(e);return t===null?()=>new e:()=>t.factory(e)}function pa(e){return ea(e)?ga(void 0,e.useValue):ga(ma(e),aa)}function ma(e,t,n){let r;if(ra(e)){let t=qr(e);return Ni(t)||da(t)}if(ea(e))r=()=>qr(e.useValue);else if(na(e))r=()=>e.useFactory(...ji(e.deps||[]));else if(ta(e))r=(t,n)=>R(qr(e.useExisting),n!==void 0&&n&8?8:void 0);else{let t=qr(e&&(e.useClass||e.provide));if(_a(e))r=()=>new t(...ji(e.deps));else return Ni(t)||da(t)}return r}function ha(e){if(e.destroyed)throw new F(-205,!1)}function ga(e,t,n=!1){return{factory:e,value:t,multi:n?[]:void 0}}function _a(e){return!!e.deps}function va(e){return typeof e==`object`&&!!e&&typeof e.ngOnDestroy==`function`}function ya(e){return typeof e==`function`||typeof e==`object`&&e.ngMetadataName===`InjectionToken`}function ba(e,t){for(let n of e)Array.isArray(n)?ba(n,t):n&&ni(n)?ba(n.ɵproviders,t):t(n)}function xa(e,t){let n;e instanceof ua?(ha(e),n=e):n=new Di(e);let r=Hn(n),i=Ci(void 0);try{return t()}finally{Hn(r),Ci(i)}}function Sa(){return Si()!==void 0||Vn()!=null}var Ca=1;function wa(e){return Array.isArray(e)&&typeof e[Ca]==`object`}function Ta(e){return Array.isArray(e)&&e[Ca]===!0}function Ea(e){return!!(e.flags&4)}function Da(e){return e.componentOffset>-1}function Oa(e){return(e.flags&1)==1}function ka(e){return!!e.template}function Aa(e){return!!(e[2]&512)}function ja(e){return(e[2]&256)==256}var Ma=`math`;function Na(e){for(;Array.isArray(e);)e=e[0];return e}function Pa(e,t){return Na(t[e])}function Fa(e,t){return Na(t[e.index])}function Ia(e,t){return e.data[t]}function La(e,t){return e[t]}function Ra(e,t,n,r){n>=e.data.length&&(e.data[n]=null,e.blueprint[n]=null),t[n]=r}function za(e,t){let n=t[e];return wa(n)?n:n[0]}function Ba(e){return(e[2]&128)==128}function Va(e,t){return t==null?null:e[t]}function Ha(e){e[17]=0}function Ua(e){e[2]&1024||(e[2]|=1024,Ba(e)&&qa(e))}function Wa(e,t){for(;e>0;)t=t[14],e--;return t}function Ga(e){return!!(e[2]&9216||e[24]?.dirty)}function Ka(e){e[10].changeDetectionScheduler?.notify(8),e[2]&64&&(e[2]|=1024),Ga(e)&&qa(e)}function qa(e){e[10].changeDetectionScheduler?.notify(0);let t=Xa(e);for(;t!==null&&!(t[2]&8192||(t[2]|=8192,!Ba(t)));)t=Xa(t)}function Ja(e,t){if(ja(e))throw new F(911,!1);e[21]===null&&(e[21]=[]),e[21].push(t)}function Ya(e,t){if(e[21]===null)return;let n=e[21].indexOf(t);n!==-1&&e[21].splice(n,1)}function Xa(e){let t=e[3];return Ta(t)?t[3]:t}function Za(e){return e[7]??=[]}function Qa(e){return e.cleanup??=[]}var B={lFrame:Po(null),bindingsEnabled:!0,skipHydrationRootTNode:null},$a=!1;function eo(){return B.lFrame.elementDepthCount}function to(){B.lFrame.elementDepthCount++}function no(){B.lFrame.elementDepthCount--}function ro(){return B.bindingsEnabled}function io(){return B.skipHydrationRootTNode!==null}function ao(e){return B.skipHydrationRootTNode===e}function oo(){B.skipHydrationRootTNode=null}function V(){return B.lFrame.lView}function so(){return B.lFrame.tView}function co(e){return B.lFrame.contextLView=e,e[8]}function lo(e){return B.lFrame.contextLView=null,e}function uo(){let e=fo();for(;e!==null&&e.type===64;)e=e.parent;return e}function fo(){return B.lFrame.currentTNode}function po(){let e=B.lFrame,t=e.currentTNode;return e.isParent?t:t.parent}function mo(e,t){let n=B.lFrame;n.currentTNode=e,n.isParent=t}function ho(){return B.lFrame.isParent}function go(){B.lFrame.isParent=!1}function _o(){return $a}function vo(e){let t=$a;return $a=e,t}function yo(){let e=B.lFrame,t=e.bindingRootIndex;return t===-1&&(t=e.bindingRootIndex=e.tView.bindingStartIndex),t}function bo(){return B.lFrame.bindingIndex}function xo(e){return B.lFrame.bindingIndex=e}function So(){return B.lFrame.bindingIndex++}function Co(e){let t=B.lFrame,n=t.bindingIndex;return t.bindingIndex+=e,n}function wo(){return B.lFrame.inI18n}function To(e,t){let n=B.lFrame;n.bindingIndex=n.bindingRootIndex=e,Do(t)}function Eo(){return B.lFrame.currentDirectiveIndex}function Do(e){B.lFrame.currentDirectiveIndex=e}function Oo(e){let t=B.lFrame.currentDirectiveIndex;return t===-1?null:e[t]}function ko(e){B.lFrame.currentQueryIndex=e}function Ao(e){let t=e[1];return t.type===2?t.declTNode:t.type===1?e[5]:null}function jo(e,t,n){if(n&4){let r=t,i=e;for(;r=r.parent,r===null&&!(n&1)&&(r=Ao(i),!(r===null||(i=i[14],r.type&10))););if(r===null)return!1;t=r,e=i}let r=B.lFrame=No();return r.currentTNode=t,r.lView=e,!0}function Mo(e){let t=No(),n=e[1];B.lFrame=t,t.currentTNode=n.firstChild,t.lView=e,t.tView=n,t.contextLView=e,t.bindingIndex=n.bindingStartIndex,t.inI18n=!1}function No(){let e=B.lFrame,t=e===null?null:e.child;return t===null?Po(e):t}function Po(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 Fo(){let e=B.lFrame;return B.lFrame=e.parent,e.currentTNode=null,e.lView=null,e}var Io=Fo;function Lo(){let e=Fo();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 Ro(e){return(B.lFrame.contextLView=Wa(e,B.lFrame.contextLView))[8]}function zo(){return B.lFrame.selectedIndex}function Bo(e){B.lFrame.selectedIndex=e}function Vo(){let e=B.lFrame;return Ia(e.tView,e.selectedIndex)}function Ho(){B.lFrame.currentNamespace=`svg`}function Uo(){Wo()}function Wo(){B.lFrame.currentNamespace=null}function Go(){return B.lFrame.currentNamespace}var Ko=!0;function qo(){return Ko}function Jo(e){Ko=e}function Yo(e,t=null,n=null,r){let i=Xo(e,t,n,r);return i.resolveInjectorInitializers(),i}function Xo(e,t=null,n=null,r,i=new Set){return new ua([n||Ui,Ji(e)],t||ca(),null,i)}var Zo=class e{static THROW_IF_NOT_FOUND=Ti;static NULL=new qi;static create(e,t){if(Array.isArray(e))return Yo({name:``},t,e,``);{let t=e.name??``;return Yo({name:t},e.parent,e.providers,t)}}static ɵprov=Yr({token:e,providedIn:`any`,factory:()=>R(Gi)});static __NG_ELEMENT_ID__=-1},Qo=new L(``),$o=class{static __NG_ELEMENT_ID__=ts;static __NG_ENV_ID__=e=>e},es=class extends $o{_lView;constructor(e){super(),this._lView=e}get destroyed(){return ja(this._lView)}onDestroy(e){let t=this._lView;return Ja(t,e),()=>Ya(t,e)}};function ts(){return new es(V())}var ns=new L(``),rs=(()=>{class e{taskId=0;pendingTasks=new Set;destroyed=!1;pendingTask=new Rr(!1);debugTaskTracker=z(ns,{optional:!0});get hasPendingTasks(){return!this.destroyed&&this.pendingTask.value}get hasPendingTasksObservable(){return this.destroyed?new Dr(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=Yr({token:e,providedIn:`root`,factory:()=>new e})}return e})(),is=class extends Ir{__isAsync;destroyRef=void 0;pendingTasks=void 0;constructor(e=!1){super(),this.__isAsync=e,Sa()&&(this.destroyRef=z($o,{optional:!0})??void 0,this.pendingTasks=z(rs,{optional:!0})??void 0)}emit(e){let t=P(null);try{super.next(e)}finally{P(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 er&&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 os(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 ss(e){return queueMicrotask(()=>e()),()=>{e=as}}var cs=`isAngularZone`,ls=`isAngularZone_ID`,us=0,ds=class e{hasPendingMacrotasks=!1;hasPendingMicrotasks=!1;isStable=!0;onUnstable=new is(!1);onMicrotaskEmpty=new is(!1);onStable=new is(!1);onError=new is(!1);constructor(e){let{enableLongStackTrace:t=!1,shouldCoalesceEventChangeDetection:n=!1,shouldCoalesceRunChangeDetection:r=!1,scheduleInRootZone:i=!1}=e;if(typeof Zone>`u`)throw new F(908,!1);Zone.assertZonePatched();let a=this;a._nesting=0,a._outer=a._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(a._inner=a._inner.fork(new Zone.TaskTrackingZoneSpec)),t&&Zone.longStackTraceZoneSpec&&(a._inner=a._inner.fork(Zone.longStackTraceZoneSpec)),a.shouldCoalesceEventChangeDetection=!r&&n,a.shouldCoalesceRunChangeDetection=r,a.callbackScheduled=!1,a.scheduleInRootZone=i,hs(a)}static isInAngularZone(){return typeof Zone<`u`&&Zone.current.get(cs)===!0}static assertInAngularZone(){if(!e.isInAngularZone())throw new F(909,!1)}static assertNotInAngularZone(){if(e.isInAngularZone())throw new F(909,!1)}run(e,t,n){return this._inner.run(e,t,n)}runTask(e,t,n,r){let i=this._inner,a=i.scheduleEventTask(`NgZoneEvent: `+r,e,fs,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)}},fs={};function ps(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 ms(e){if(e.isCheckStableRunning||e.callbackScheduled)return;e.callbackScheduled=!0;function t(){os(()=>{e.callbackScheduled=!1,gs(e),e.isCheckStableRunning=!0,ps(e),e.isCheckStableRunning=!1})}e.scheduleInRootZone?Zone.root.run(()=>{t()}):e._outer.run(()=>{t()}),gs(e)}function hs(e){let t=()=>{ms(e)},n=us++;e._inner=e._inner.fork({name:`angular`,properties:{[cs]:!0,[ls]:n,[ls+n]:!0},onInvokeTask:(n,r,i,a,o,s)=>{if(bs(s))return n.invokeTask(i,a,o,s);try{return _s(e),n.invokeTask(i,a,o,s)}finally{(e.shouldCoalesceEventChangeDetection&&a.type===`eventTask`||e.shouldCoalesceRunChangeDetection)&&t(),vs(e)}},onInvoke:(n,r,i,a,o,s,c)=>{try{return _s(e),n.invoke(i,a,o,s,c)}finally{e.shouldCoalesceRunChangeDetection&&!e.callbackScheduled&&!xs(s)&&t(),vs(e)}},onHasTask:(t,n,r,i)=>{t.hasTask(r,i),n===r&&(i.change==`microTask`?(e._hasPendingMicrotasks=i.microTask,gs(e),ps(e)):i.change==`macroTask`&&(e.hasPendingMacrotasks=i.macroTask))},onHandleError:(t,n,r,i)=>(t.handleError(r,i),e.runOutsideAngular(()=>e.onError.emit(i)),!1)})}function gs(e){e.hasPendingMicrotasks=!!(e._hasPendingMicrotasks||(e.shouldCoalesceEventChangeDetection||e.shouldCoalesceRunChangeDetection)&&e.callbackScheduled===!0)}function _s(e){e._nesting++,e.isStable&&(e.isStable=!1,e.onUnstable.emit(null))}function vs(e){e._nesting--,ps(e)}var ys=class{hasPendingMicrotasks=!1;hasPendingMacrotasks=!1;isStable=!0;onUnstable=new is;onMicrotaskEmpty=new is;onStable=new is;onError=new is;run(e,t,n){return e.apply(t,n)}runGuarded(e,t,n){return e.apply(t,n)}runOutsideAngular(e){return e()}runTask(e,t,n,r){return e.apply(t,n)}};function bs(e){return Ss(e,`__ignore_ng_zone__`)}function xs(e){return Ss(e,`__scheduler_tick__`)}function Ss(e,t){return!Array.isArray(e)||e.length!==1?!1:e[0]?.data?.[t]===!0}var Cs=class{_console=console;handleError(e){this._console.error(`ERROR`,e)}},ws=new L(``,{factory:()=>{let e=z(ds),t=z(la),n;return r=>{e.runOutsideAngular(()=>{t.destroyed&&!n?setTimeout(()=>{throw r}):(n??=t.get(Cs),n.handleError(r))})}}}),Ts={provide:Wi,useValue:()=>{z(Cs,{optional:!0})},multi:!0};function H(e,t){let[n,r,i]=Mn(e,t?.equal),a=n;return a[en],a.set=r,a.update=i,a.asReadonly=Es.bind(a),a}function Es(){let e=this[en];if(e.readonlyFn===void 0){let t=()=>this();t[en]=e,e.readonlyFn=t}return e.readonlyFn}var Ds=new L(``,{factory:()=>Os}),Os=`ng`,ks=new L(``),As=new L(``,{providedIn:`platform`,factory:()=>`unknown`}),js=new L(``,{factory:()=>z(Qo).body?.querySelector(`[ngCspNonce]`)?.getAttribute(`ngCspNonce`)||null}),Ms=(()=>{class e{view;node;constructor(e,t){this.view=e,this.node=t}static __NG_ELEMENT_ID__=Ns}return e})();function Ns(){return new Ms(V(),uo())}var Ps=class{},Fs=new L(``,{factory:()=>!0}),Is=new L(``),Ls=(()=>{class e{static ɵprov=Yr({token:e,providedIn:`root`,factory:()=>new Rs})}return e})(),Rs=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}},zs=class{[en];constructor(e){this[en]=e}destroy(){this[en].destroy()}};function Bs(e,t){let n=t?.injector??z(Zo),r=t?.manualCleanup===!0?null:n.get($o),i,a=n.get(Ms,null,{optional:!0}),o=n.get(Ps);return a===null?i=Gs(e,n.get(Ls),o):(i=Ws(a.view,o,e),r instanceof es&&r._lView===a.view&&(r=null)),i.injector=n,r!==null&&(i.onDestroyFns=[r.onDestroy(()=>i.destroy())]),new zs(i)}var Vs={...Rn,cleanupFns:void 0,zone:null,onDestroyFns:null,run(){let e=vo(!1);try{zn(this)}finally{vo(e)}},cleanup(){if(!this.cleanupFns?.length)return;let e=P(null);try{for(;this.cleanupFns.length;)this.cleanupFns.pop()()}finally{this.cleanupFns=[],P(e)}}},Hs={...Vs,consumerMarkedDirty(){this.scheduler.schedule(this),this.notifier.notify(12)},destroy(){if(gn(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.scheduler.remove(this)}},Us={...Vs,consumerMarkedDirty(){this.view[2]|=8192,qa(this.view),this.notifier.notify(13)},destroy(){if(gn(this),this.onDestroyFns!==null)for(let e of this.onDestroyFns)e();this.cleanup(),this.view[23]?.delete(this)}};function Ws(e,t,n){let r=Object.create(Us);return r.view=e,r.zone=typeof Zone<`u`?Zone.current:null,r.notifier=t,r.fn=Ks(r,n),e[23]??=new Set,e[23].add(r),r.consumerMarkedDirty(r),r}function Gs(e,t,n){let r=Object.create(Hs);return r.fn=Ks(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 Ks(e,t){return()=>{t(t=>(e.cleanupFns??=[]).push(t))}}var qs=(()=>{class e{internalPendingTasks=z(rs);scheduler=z(Ps);errorHandler=z(ws);add(){let e=this.internalPendingTasks.add();return()=>{this.internalPendingTasks.has(e)&&(this.scheduler.notify(11),this.internalPendingTasks.remove(e))}}run(e){let t=this.add();try{e().catch(this.errorHandler).finally(t)}catch(e){this.errorHandler(e),t()}}static ɵprov=Yr({token:e,providedIn:`root`,factory:()=>new e})}return e})(),Js=Symbol(`InputSignalNode#UNSET`),Ys={...In,transformFn:void 0,applyValueToInputSignal(e,t){Pn(e,t)}};function Xs(e){return{toString:e}.toString()}var U=(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})(U||{});function Zs(e,t,n,r){t===null?e[n]=r:t.applyValueToInputSignal(t,r)}var Qs=null;function $s(){return Qs}var ec=[],W=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,sc(o,a)):sc(o,a)}var lc=-1,uc=class{factory;name;injectImpl;resolving=!1;canSeeViewProviders;multi;componentProviders;index;providerFactory;constructor(e,t,n,r){this.factory=e,this.name=r,this.canSeeViewProviders=t,this.injectImpl=n}};function dc(e){return!!(e.flags&8)}function fc(e){return!!(e.flags&16)}function pc(e,t,n){let r=0;for(;rt){o=a-1;break}}}for(;a>16}function xc(e,t){let n=bc(e),r=t;for(;n>0;)r=r[14],n--;return r}var Sc=!0;function Cc(e){let t=Sc;return Sc=e,t}var wc=255,Tc=5,Ec=0,Dc={};function Oc(e,t,n){let r;typeof n==`string`?r=n.charCodeAt(0)||0:Object.hasOwn(n,si)&&(r=n[si]),r??=n[si]=Ec++;let i=r&wc,a=1<>Tc)]|=a}function kc(e,t){let n=jc(e,t);if(n!==-1)return n;let r=t[1];r.firstCreatePass&&(e.injectorIndex=t.length,Ac(r.data,e),Ac(t,null),Ac(r.blueprint,null));let i=Mc(e,t),a=e.injectorIndex;if(vc(i)){let e=yc(i),n=xc(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 Ac(e,t){e.push(0,0,0,0,0,0,0,0,t)}function jc(e,t){return e.injectorIndex===-1||e.parent&&e.parent.injectorIndex===e.injectorIndex||t[e.injectorIndex+8]===null?-1:e.injectorIndex}function Mc(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=qc(i),r===null)return lc;if(n++,i=i[14],r.injectorIndex!==-1)return r.injectorIndex|n<<16}return lc}function Nc(e,t,n){Oc(e,t,n)}function Pc(e,t,n){if(n&8||e!==void 0)return e;vi(t,`NodeInjector`)}function Fc(e,t,n,r){if(n&8&&r===void 0&&(r=null),!(n&3)){let i=e[9],a=Ci(void 0);try{return i?i.get(t,r,n&8):wi(t,r,n&8)}finally{Ci(a)}}return Pc(r,t,n)}function Ic(e,t,n,r=0,i){if(e!==null){if(t[2]&2048&&!(r&2)){let i=Kc(e,t,n,r,Dc);if(i!==Dc)return i}let i=Lc(e,t,n,r,Dc);if(i!==Dc)return i}return Fc(t,n,r,i)}function Lc(e,t,n,r,i){let a=Vc(n);if(typeof a==`function`){if(!jo(t,e,r))return r&1?Pc(i,n,r):Fc(t,n,r,i);try{let e;if(e=a(r),e==null&&!(r&8))vi(n);else return e}finally{Io()}}else if(typeof a==`number`){let i=null,o=jc(e,t),s=lc,c=r&1?t[15][5]:null;for((o===-1||r&4)&&(s=o===-1?Mc(e,t):t[o+8],s===lc||!Uc(r,!1)?o=-1:(i=t[1],o=yc(s),t=xc(s,t)));o!==-1;){let e=t[1];if(Hc(a,o,e.data)){let e=Rc(o,t,n,i,r,c);if(e!==Dc)return e}s=t[o+8],s!==lc&&Uc(r,t[1].data[o+8]===c)&&Hc(a,o,t)?(i=e,o=yc(s),t=xc(s,t)):o=-1}}return i}function Rc(e,t,n,r,i,a){let o=t[1],s=o.data[e+8],c=zc(s,o,n,r==null?Da(s)&&Sc:r!=o&&!!(s.type&3),i&1&&a===s);return c===null?Dc:Bc(t,o,c,s,i)}function zc(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&&ka(e)&&e.type===n)return c}return null}function Bc(e,t,n,r,i){let a=e[n],o=t.data;if(a instanceof uc){let s=a;if(s.resolving)throw _i(``);let c=Cc(s.canSeeViewProviders);s.resolving=!0,o[n].type||o[n];let l=s.injectImpl?Ci(s.injectImpl):null;jo(e,r,0);try{a=e[n]=s.factory(void 0,i,o,e,r),t.firstCreatePass&&n>=r.directiveStart&&tc(n,o[n],t)}finally{l!==null&&Ci(l),Cc(c),s.resolving=!1,Io()}}return a}function Vc(e){if(typeof e==`string`)return e.charCodeAt(0)||0;let t=Object.hasOwn(e,si)?e[si]:void 0;return typeof t==`number`?t>=0?t&wc:Gc:t}function Hc(e,t,n){let r=1<>Tc)]&r)}function Uc(e,t){return!(e&2)&&!(e&1&&t)}var Wc=class{_tNode;_lView;constructor(e,t){this._tNode=e,this._lView=t}get(e,t,n){return Ic(this._tNode,this._lView,e,ki(n),t)}};function Gc(){return new Wc(uo(),V())}function Kc(e,t,n,r,i){let a=e,o=t;for(;a!==null&&o!==null&&o[2]&2048&&!Aa(o);){let e=Lc(a,o,n,r|2,Dc);if(e!==Dc)return e;r&=-5;let t=a.parent;if(!t){let e=o[20];if(e){let t=e.get(n,Dc,r);if(t!==Dc)return t}t=qc(o),o=o[14]}a=t}return i}function qc(e){let t=e[1],n=t.type;return n===2?t.declTNode:n===1?e[5]:null}var Jc=()=>(typeof requestIdleCallback<`u`?requestIdleCallback:e=>setTimeout(e)).bind(globalThis),Yc=()=>(typeof requestIdleCallback<`u`?cancelIdleCallback:clearTimeout).bind(globalThis),Xc=new L(``,{factory:()=>new Zc}),Zc=class{requestIdleCallback=Jc();cancelIdleCallback=Yc();requestOnIdle(e,t){return this.requestIdleCallback(e,t)}cancelOnIdle(e){return this.cancelIdleCallback(e)}};function Qc(e){return{token:e.token,providedIn:e.autoProvided===!1?null:`root`,factory:e.factory,value:void 0}}function $c(){return el(uo(),V())}function el(e,t){return new tl(Fa(e,t))}var tl=(()=>{class e{nativeElement;constructor(e){this.nativeElement=e}static __NG_ELEMENT_ID__=$c}return e})();function nl(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||{}),il=new Map,al=0;function ol(){return al++}function sl(e){il.set(e[19],e)}function cl(e){il.delete(e[19])}var ll=`__ngContext__`;function ul(e,t){wa(t)?(e[ll]=t[19],sl(t)):e[ll]=t}function dl(e){return pl(e[12])}function fl(e){return pl(e[4])}function pl(e){for(;e!==null&&!Ta(e);)e=e[4];return e}var ml=void 0;function hl(e){ml=e}function gl(){if(ml!==void 0)return ml;if(typeof document<`u`)return document;throw new F(210,!1)}var _l=!1,vl=new L(``,{factory:()=>_l}),yl=new L(``),bl=new WeakMap;function xl(e,t){if(typeof e!=`object`||!e)return;let n=bl.get(e);n||(n=new WeakSet,bl.set(e,n)),n.add(t)}var Sl=new L(``);function Cl(e){return(e.flags&32)==32}var wl=()=>null;function Tl(e,t,n=!1){return wl(e,t,n)}function El(e){return e.get(yl,!1,{optional:!0})}function Dl(e,t){let n=e.contentQueries;if(n!==null){let r=P(null);try{for(let r=0;r|^->||--!>|)/g,Fl=`​$1​`;function Il(e){return e.replace(Nl,e=>e.replace(Pl,Fl))}function Ll(e,t){return e.createText(t)}function Rl(e,t,n){e.setValue(t,n)}function zl(e,t){return e.createComment(Il(t))}function Bl(e,t,n){return e.createElement(t,n)}function Vl(e,t,n,r,i){e.insertBefore(t,n,r,i)}function Hl(e,t,n){e.appendChild(t,n)}function Ul(e,t,n,r,i){r===null?Hl(e,t,n):Vl(e,t,n,r,i)}function Wl(e,t,n,r){e.removeChild(null,t,n,r)}function Gl(e,t,n){e.setAttribute(t,`style`,n)}function Kl(e,t,n){n===``?e.removeAttribute(t,`class`):e.setAttribute(t,`class`,n)}function ql(e,t,n){let{mergedAttrs:r,classes:i,styles:a}=n;r!==null&&pc(e,t,r),i!==null&&Kl(e,t,i),a!==null&&Gl(e,t,a)}function Jl(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 Yl=`ng-template`;function Xl(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(eu(r))return!1;o=!0}}}}}return eu(r)||o}function eu(e){return!(e&1)}function tu(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!==``&&!eu(o)&&(t+=au(a,i),i=``),r=o,a||=!eu(r);n++}return i!==``&&(t+=au(a,i)),t}function su(e){return e.map(ou).join(`,`)}function cu(e){let t=[],n=[],r=1,i=2;for(;r=0;e--){let{el:n,declarationView:s}=r[e],c=n.parentNode;n===t?(r.splice(e,1),gu.add(n),n.dispatchEvent(new CustomEvent(`animationend`,{detail:{cancel:!0}}))):(a&&n===a||c&&i&&c!==i&&(o===null||s===null||o===s))&&(r.splice(e,1),n.dispatchEvent(new CustomEvent(`animationend`,{detail:{cancel:!0}})),n.parentNode?.removeChild(n))}}function vu(e,t,n){let r=hu(n),i=mu.get(e);i?i.some(e=>e.el===t)||i.push({el:t,declarationView:r}):mu.set(e,[{el:t,declarationView:r}])}var yu=(function(e){return e[e.CHANGE_DETECTION=0]=`CHANGE_DETECTION`,e[e.AFTER_NEXT_RENDER=1]=`AFTER_NEXT_RENDER`,e})(yu||{}),bu=new L(``),xu=new Set;function Su(e){xu.has(e)||(xu.add(e),performance?.mark?.(`mark_feature_usage`,{detail:{feature:e}}))}var Cu=(()=>{class e{impl=null;execute(){this.impl?.execute()}static ɵprov=Yr({token:e,providedIn:`root`,factory:()=>new e})}return e})(),wu=new L(``,{factory:()=>{let e=z(la),t=new Set;return e.onDestroy(()=>t.clear()),{queue:t,isScheduled:!1,scheduler:null,injector:e}}});function Tu(e,t,n){let r=e.get(wu);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 Eu(e,t){let n=e.get(wu);if(Array.isArray(t))for(let e of t)n.queue.delete(e);else n.queue.delete(t)}function Du(e,t){let n=e.get(wu);if(t.detachedLeaveAnimationFns){for(let e of t.detachedLeaveAnimationFns)n.queue.delete(e);t.detachedLeaveAnimationFns=void 0}}function Ou(e,t){for(let[n,r]of t)Tu(e,r.animateFns)}function ku(e,t,n,r){let i=e?.[26]?.enter;t!==null&&i&&i.has(n.index)&&Ou(r,i)}function Au(e,t,n,r){try{n.get(Gi)}catch{return r(!1)}let i=e?.[26];i?.enter?.has(t.index)&&Eu(n,i.enter.get(t.index).animateFns);let a=ju(e,t,i);if(a.size===0){let n=!1;if(e){let r=[];Nu(e,t,r),n=r.length>0}if(!n)return r(!1)}e&&pu.add(e[19]),Tu(n,()=>Mu(e,t,i||void 0,a,r),i||void 0)}function ju(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 Mu(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&&Nu(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),Fu(e,t.running,i)}else Promise.allSettled(a).then(()=>{e&&pu.delete(e[19]),i(!0)})}else e&&pu.delete(e[19]),i(!1)}function Nu(e,t,n){if(t.type&12){let r=e[t.index];if(Ta(r))for(let e=10;e{e[26]?.running===t&&(e[26].running=void 0,pu.delete(e[19])),n(!0)})}function Iu(e,t,n,r,i,a,o,s){if(i!=null){let c,l=!1;Ta(i)?c=i:wa(i)&&(l=!0,i=i[0]);let u=Na(i);e===0&&r!==null?(ku(s,r,a,n),o==null?Hl(t,r,u):Vl(t,r,u,o||null,!0)):e===1&&r!==null?(ku(s,r,a,n),Vl(t,r,u,o||null,!0),_u(a,u,s)):e===2?(s?.[26]?.leave?.has(a.index)&&vu(a,u,s),gu.delete(u),Au(s,a,n,e=>{if(gu.has(u)){gu.delete(u);return}Wl(t,u,l,e)})):e===3&&(gu.delete(u),Au(s,a,n,()=>{t.destroyNode(u)})),c!=null&&ad(t,e,n,c,a,r,o)}}function Lu(e,t){zu(e,t),t[0]=null,t[5]=null}function Ru(e,t,n,r,i,a){r[0]=i,r[5]=t,nd(e,r,n,1,i,a)}function zu(e,t){t[10].changeDetectionScheduler?.notify(9),nd(e,t,t[11],2,null,null)}function Bu(e){let t=e[12];if(!t)return Uu(e[1],e);for(;t;){let n=null;if(wa(t))n=t[12];else{let e=t[10];e&&(n=e)}if(!n){for(;t&&!t[4]&&t!==e;)wa(t)&&Uu(t[1],t),t=t[3];t===null&&(t=e),wa(t)&&Uu(t[1],t),n=t&&t[4]}t=n}}function Vu(e,t){let n=e[9],r=n.indexOf(t);n.splice(r,1)}function Hu(e,t){if(ja(t))return;let n=t[11];n.destroyNode&&nd(e,t,n,3,null,null),Bu(t)}function Uu(e,t){if(ja(t))return;let n=P(null);try{t[2]&=-129,t[2]|=256,t[24]&&gn(t[24]),Gu(e,t),Wu(e,t),t[1].type===1&&t[11].destroy();let n=t[16];if(n!==null&&Ta(t[3])){n!==t[3]&&Vu(n,t);let r=t[18];r!==null&&r.detachView(e)}cl(t)}finally{P(n)}}function Wu(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&&hd(e,t,27,!1),W(o?U.TemplateUpdateStart:U.TemplateCreateStart,i,n),n(r,i)}finally{Bo(a),W(o?U.TemplateUpdateEnd:U.TemplateCreateEnd,i,n)}}function yd(e,t,n){Ed(e,t,n),(n.flags&64)==64&&Dd(e,t,n)}function bd(e,t,n=Fa){let r=t.localNames;if(r!==null){let i=t.index+1;for(let a=0;a{qa(e.lView)},consumerOnSignalRead(){this.lView[24]=this}};function Yd(e){let t=e[24]??Object.create(Xd);return t.lView=e,t}var Xd={...nn,consumerIsAlwaysLive:!0,kind:`template`,consumerMarkedDirty:e=>{let t=Xa(e.lView);for(;t&&!Zd(t[1]);)t=Xa(t);t&&Ua(t)},consumerOnSignalRead(){this.lView[24]=this}};function Zd(e){return e.type!==2}function Qd(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 $d=100;function ef(e,t=0){let n=e[10].rendererFactory;n.begin?.();try{tf(e,t)}finally{n.end?.()}}function tf(e,t){let n=_o();try{vo(!0),cf(e,t);let n=0;for(;Ga(e);){if(n===$d)throw new F(103,!1);n++,cf(e,1)}}finally{vo(n)}}function nf(e,t,n,r){if(ja(t))return;let i=t[2];Mo(t);let a=!0,o=null,s=null;Zd(e)?(s=Gd(t),o=dn(s)):tn()===null?(a=!1,s=Yd(t),o=dn(s)):t[24]&&=(gn(t[24]),null);try{Ha(t),xo(e.bindingStartIndex),n!==null&&vd(e,t,n,2,r);let a=(i&3)==3;if(a){let n=e.preOrderCheckHooks;n!==null&&rc(t,n,null)}else{let n=e.preOrderHooks;n!==null&&ic(t,n,0,null),ac(t,0)}if(af(t),Qd(t),rf(t,0),e.contentQueries!==null&&Dl(e,t),a){let n=e.contentCheckHooks;n!==null&&rc(t,n)}else{let n=e.contentHooks;n!==null&&ic(t,n,1),ac(t,1)}uf(e,t);let o=e.components;o!==null&&lf(t,o,0);let s=e.viewQuery;if(s!==null&&Ol(2,s,r),a){let n=e.viewCheckHooks;n!==null&&rc(t,n)}else{let n=e.viewHooks;n!==null&&ic(t,n,2),ac(t,2)}if(e.firstUpdatePass===!0&&(e.firstUpdatePass=!1),t[22]){for(let e of t[22])e();t[22]=null}Ud(t),t[2]&=-73}catch(e){throw qa(t),e}finally{s!==null&&(pn(s,o),a&&qd(s)),Lo()}}function rf(e,t){for(let n=dl(e);n!==null;n=fl(n))for(let e=10;e0&&(e[n-1][4]=r[4]);let a=Ii(e,10+t);Lu(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 _f(e,t,n,r){let i=10+r,a=n.length;r>0&&(n[i-1][4]=t),r-1&&(gf(e,n),Ii(t,n))}this._attachedToViewContainer=!1}Hu(this._lView[1],this._lView)}onDestroy(e){Ja(this._lView,e)}markForCheck(){df(this._cdRefInjectingView||this._lView,4)}detach(){this._lView[2]&=-129}reattach(){Ka(this._lView),this._lView[2]|=128}detectChanges(){this._lView[2]|=1024,ef(this._lView)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new F(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null;let e=Aa(this._lView),t=this._lView[16];t!==null&&!e&&Vu(t,this._lView),zu(this._lView[1],this._lView)}attachToAppRef(e){if(this._attachedToViewContainer)throw new F(902,!1);this._appRef=e;let t=Aa(this._lView),n=this._lView[16];n!==null&&!t&&vf(n,this._lView),Ka(this._lView)}};function bf(e,t,n,r,i){let a=e.data[t];if(a===null)a=xf(e,t,n,r,i),wo()&&(a.flags|=32);else if(a.type&64){a.type=n,a.value=r,a.attrs=i;let e=po();a.injectorIndex=e===null?-1:e.injectorIndex}return mo(a,!0),a}function xf(e,t,n,r,i){let a=fo(),o=ho(),s=o?a:a&&a.parent,c=e.data[t]=Cf(e,s,n,t,r,i);return Sf(e,c,a,o),c}function Sf(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 Cf(e,t,n,r,i,a){let o=t?t.injectorIndex:-1,s=0;return io()&&(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:Go(),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 wf(e){let t=e[6]??[],n=e[3][11],r=[];for(let e of t)e.data.di===void 0?Tf(e,n):r.push(e);e[6]=r}function Tf(e,t){let n=0,r=e.firstChild;if(r){let i=e.data.r;for(;nnull,Df=()=>null;function Of(e,t){return Ef(e,t)}function kf(e,t,n){return Df(e,t,n)}var Af=class{},jf=class{},Mf=(()=>{class e{static ɵprov=Yr({token:e,providedIn:`root`,factory:()=>null})}return e})();function Nf(e){return e.debugInfo?.className||e.type.name||null}var Pf={},Ff=class{injector;parentInjector;constructor(e,t){this.injector=e,this.parentInjector=t}get(e,t,n){let r=this.injector.get(e,Pf,n);return r!==Pf||t===Pf?r:this.parentInjector.get(e,t,n)}};function If(e,t,n){return e[t]=n}function Lf(e,t,n){if(n===lu)return!1;let r=e[t];return!Object.is(r,n)&&(e[t]=n,!0)}function Rf(e,t,n,r){let i=Lf(e,t,n);return Lf(e,t+1,r)||i}function zf(e,t,n,r,i){let a=Rf(e,t,n,r);return Lf(e,t+2,i)||a}function Bf(e,t,n){return function r(i){let a=r.__ngNativeEl__;a!==void 0&&xl(i,a),df(Da(e)?za(e.index,t):t,5);let o=t[8],s=Vf(t,o,n,i),c=r.__ngNextListenerFn__;for(;c;)s=Vf(t,o,c,i)&&s,c=c.__ngNextListenerFn__;return s}}function Vf(e,t,n,r){let i=P(null);try{return W(U.OutputStart,t,n),n(r)!==!1}catch(t){return Nd(e,t),!1}finally{W(U.OutputEnd,t,n),P(i)}}function Hf(e,t,n,r,i,a,o,s){let c=Oa(e),l=!1,u=null;if(!r&&c&&(u=Wf(t,n,a,e.index)),u!==null){let e=u.__ngLastListenerFn__||u;e.__ngNextListenerFn__=o,u.__ngLastListenerFn__=o,l=!0}else{let o=Fa(e,n),c=r?r(o):o;r||(s.__ngNativeEl__=o);let l=i.listen(c,a,s);Uf(a)||Gf(r?t=>r(Na(t[e.index])):e.index,t,n,a,s,l,!1)}return l}function Uf(e){return e.startsWith(`animation`)||e.startsWith(`transition`)}function Wf(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 Gf(e,t,n,r,i,a,o){let s=t.firstCreatePass?Qa(t):null,c=Za(n),l=c.length;c.push(i,a),s&&s.push(r,e,l,(l+1)*(o?-1:1))}function Kf(e,t,n,r,i,a){let o=t[n],s=t[1],c=o[s.data[n].outputs[r]].subscribe(a);Gf(e.index,s,t,i,a,c,!0)}var qf=Symbol(`BINDING`),Jf=new L(``);function Yf(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 lp(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&gd.SignalBased)!==0};return i&&(a.transform=i),a})}function _p(e){return Object.keys(e).map(t=>({propName:e[t],templateName:t}))}function vp(e,t,n){let r=t instanceof la?t:t?.injector;return r&&e.getStandaloneInjector!==null&&(r=e.getStandaloneInjector(r)||r),r?new Ff(n,r):n}function yp(e){let t=e.get(jf,null);if(t===null)throw new F(407,!1);return{rendererFactory:t,sanitizer:e.get(Mf,null),changeDetectionScheduler:e.get(Ps,null),ngReflect:!1,tracingService:e.get(bu,null,{optional:!0})}}function bp(e,t,n){let r=Sp(e);return Bl(t,r,r===`svg`?`svg`:r===`math`?Ma:n)}function xp(e){if((e&&`localName`in e&&typeof e.localName==`string`?e.localName:e?.tagName)?.toLowerCase()===`script`)throw new F(905,!1)}function Sp(e){return(e.selectors[0][0]||`div`).toLowerCase()}var Cp=class{componentDef;ngModule;selector;componentType;ngContentSelectors;isBoundToModule;cachedInputs=null;cachedOutputs=null;get inputs(){return this.cachedInputs??=gp(this.componentDef.inputs),this.cachedInputs}get outputs(){return this.cachedOutputs??=_p(this.componentDef.outputs),this.cachedOutputs}constructor(e,t){this.componentDef=e,this.ngModule=t,this.componentType=e.type,this.selector=su(e.selectors),this.ngContentSelectors=e.ngContentSelectors??[],this.isBoundToModule=!!t}create(e,t,n,r,i,a,o){W(U.DynamicComponentStart);let s=P(null);try{let s=this.componentDef,c=vp(s,r||this.ngModule,e),l=yp(c),u=l.tracingService;return u&&u.componentCreate?u.componentCreate(Nf(s),()=>this.createComponentRef(l,c,t,n,i,a,o)):this.createComponentRef(l,c,t,n,i,a,o)}finally{P(s)}}createComponentRef(e,t,n,r,i,a,o){let s=this.componentDef,c=wp(r,s,a,i),l=e.rendererFactory.createRenderer(null,s),u=r?xd(l,r,s.encapsulation,t):bp(s,l,o??null);xp(u);let d=t.get(Jf,null),f=Tp(u,()=>t.get(Qo,null)??gl());d&&d.addHost(f);let p=a?.some(Dp)||i?.some(e=>typeof e!=`function`&&e.bindings.some(Dp)),m=ud(null,c,null,512|fd(s),null,null,e,l,t,null,Tl(u,t,!0));d&&mp&&f instanceof ShadowRoot&&Ja(m,()=>{d.removeHost(f)}),m[27]=u,Mo(m);let h=null;try{let e=dp(27,m,2,`#host`,()=>c.directiveRegistry,!0,0);ql(l,u,e),ul(u,m),yd(c,m,e),kl(c,e,m),fp(c,e),n!==void 0&&kp(e,this.ngContentSelectors,n),h=za(e.index,m),m[8]=h[8],Ld(c,m,null)}catch(e){throw h!==null&&cl(h),cl(m),e}finally{W(U.DynamicComponentEnd),Lo()}return new Op(this.componentType,m,!!p)}};function wp(e,t,n,r){let i=e?[`ng-version`,`22.1.7`]:cu(t.selectors[0]),a=null,o=null,s=0;if(n)for(let e of n)s+=e[qf].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 Dp(e){let t=e[qf].kind;return t===`input`||t===`twoWay`}var Op=class extends Af{_rootLView;_hasInputBindings;instance;hostView;changeDetectorRef;componentType;location;previousInputValues=null;_tNode;constructor(e,t,n){super(),this._rootLView=t,this._hasInputBindings=n,this._tNode=Ia(t[1],27),this.location=el(this._tNode,t),this.instance=za(this._tNode.index,t)[8],this.hostView=this.changeDetectorRef=new yf(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;Pd(n,r[1],r,e,t),this.previousInputValues.set(e,t),df(za(n.index,r),1)}get injector(){return new Wc(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(e){this.hostView.onDestroy(e)}};function kp(e,t,n){let r=e.projection=[];for(let e=0;e!1;function jp(e,t,n){return Ap(e,t,n)}function Mp(e){return!!e&&typeof e.then==`function`}function Np(e){return!!e&&typeof e.subscribe==`function`}var Pp=class{},Fp=class extends Pp{injector;instance=null;constructor(e){super();let t=new ua([...e.providers,{provide:Pp,useValue:this}],e.parent||ca(),e.debugName,new Set([`environment`]));this.injector=t,e.runEnvironmentInitializers&&t.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(e){this.injector.onDestroy(e)}};function Ip(e,t,n=null){return new Fp({providers:e,parent:t,debugName:n,runEnvironmentInitializers:!0}).injector}var Lp=(()=>{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=Yi(!1,e.type),n=t.length>0?Ip([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=Yr({token:e,providedIn:`environment`,factory:()=>new e(R(la))})}return e})();function Rp(e){return Xs(()=>{let t=Up(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(Lp).getOrCreateStandaloneInjector(n):null,getExternalStyles:null,signals:e.signals??!1,data:e.data||{},encapsulation:e.encapsulation||Al.Emulated,styles:e.styles||Ui,_:null,schemas:e.schemas||null,tView:null,id:``};t.standalone&&Su(`NgStandalone`),Wp(n);let r=e.dependencies;return n.directiveDefs=Gp(r,zp),n.pipeDefs=Gp(r,di),n.id=Kp(n),n})}function zp(e){return li(e)||ui(e)}function Bp(e,t){if(e==null)return Hi;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=gd.None,c=null),n[a]=[r,s,c],t[a]=o}return n}function Vp(e){if(e==null)return Hi;let t={};for(let n in e)Object.hasOwn(e,n)&&(t[e[n]]=n);return t}function Hp(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 Up(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||Hi,exportAs:e.exportAs||null,standalone:e.standalone??!0,signals:e.signals===!0,selectors:e.selectors||Ui,viewQuery:e.viewQuery||null,features:e.features||null,setInput:null,resolveHostDirectives:null,hostDirectives:null,controlDef:null,signalFormsInputPresence:null,inputs:Bp(e.inputs,t),outputs:Vp(e.outputs),debugInfo:null}}function Wp(e){e.features?.forEach(t=>t(e))}function Gp(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 Kp(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 qp=new L(``),Jp=(()=>{class e{resolve;reject;initialized=!1;done=!1;donePromise=new Promise((e,t)=>{this.resolve=e,this.reject=t});appInits=z(qp,{optional:!0})??[];injector=z(Zo);constructor(){}runInitializers(){if(this.initialized)return;let e=[];for(let t of this.appInits){let n=xa(this.injector,t);if(Mp(n))e.push(n);else if(Np(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=Qc({token:e,factory:e.ɵfac})}return e})();function Yp(e,t,n,r,i,a,o,s){if(n.firstCreatePass){e.mergedAttrs=gc(e.mergedAttrs,e.attrs);let t=e.tView=sd(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),mo(e,!1);let c=Qp(n,t,e,r);qo()&&Zu(n,t,c,e),ul(c,t);let l=ff(c,t,c,e);t[r+27]=l,md(t,l),jp(l,e,t)}function Xp(e,t,n,r,i,a,o,s,c,l,u){let d=n+27,f;if(t.firstCreatePass){if(f=bf(t,d,4,o||null,s||null),l!=null){let e=Va(t.consts,l);f.localNames=[];for(let t=0;t{class e{cachedInjectors=new Map;getOrCreateInjector(e,t,n,r){if(!this.cachedInjectors.has(e)){let i=n.length>0?Ip(n,t,r):null;this.cachedInjectors.set(e,i)}return this.cachedInjectors.get(e)}ngOnDestroy(){try{for(let e of this.cachedInjectors.values())e!==null&&e.destroy()}finally{this.cachedInjectors.clear()}}static ɵprov=Yr({token:e,providedIn:`environment`,factory:()=>new e})}return e})(),Om=new L(``);function km(e,t,n){return e.get(Dm).getOrCreateInjector(t,e,n,``)}function Am(e,t,n){if(e instanceof Ff){let r=e.injector,i=e.parentInjector;return new Ff(r,km(i,t,n))}let r=e.get(la);return r===e?km(e,t,n):new Ff(e,km(r,t,n))}function jm(e,t,n,r=!1){let i=n[3],a=i[1];if(ja(i))return;let o=vm(i,t),s=o[1],c=o[lm];if(!(c!==null&&ee.data.s===t[1])??-1;return{dehydratedView:n>-1?e[6][n]:null,dehydratedViewIx:n}}function Nm(e,t,n,r,i){W(U.DeferBlockStateStart);let a=Sm(e,i,r);if(a!==null){t[1]=e;let o=i[1],s=Ia(o,a+27);hf(n,0);let c;if(e===rm.Complete){let e=bm(o,r),t=e.providers;t&&t.length>0&&(c=Am(i[9],e,t))}let{dehydratedView:l,dehydratedViewIx:u}=Mm(n,t),d=zd(i,s,null,{injector:c,dehydratedView:l});if(mf(n,d,0,Bd(s,l)),Ua(d),u>-1&&n[6]?.splice(u,1),(e===rm.Complete||e===rm.Error)&&Array.isArray(t[um])){for(let e of t[um])e();t[um]=null}}W(U.DeferBlockStateEnd)}function Pm(e,t){return e{e.loadingState===em.COMPLETE?jm(rm.Complete,t,n):e.loadingState===em.FAILED&&jm(rm.Error,t,n)})}var Lm=null;function Rm(e,t){return t[9].get(Om,null,{optional:!0})?.behavior!==fm.Manual}var zm=new L(``),Bm=new L(``);function Vm(){An(()=>{throw new F(600,``)})}var Hm=10,Um=(()=>{class e{_runningTick=!1;_destroyed=!1;_destroyListeners=[];_views=[];internalErrorHandler=z(ws);afterRenderManager=z(Cu);zonelessEnabled=z(Fs);rootEffectScheduler=z(Ls);dirtyFlags=0;tracingSnapshot=null;allTestViews=new Set;autoDetectTestViews=new Set;includeAllTestViews=!1;afterTick=new Ir;get allViews(){return[...(this.includeAllTestViews?this.allTestViews:this.autoDetectTestViews).keys(),...this._views]}get destroyed(){return this._destroyed}componentTypes=[];components=[];internalPendingTask=z(rs);get isStable(){return this.internalPendingTask.hasPendingTasksObservable.pipe(zr(e=>!e))}constructor(){z(bu,{optional:!0})}whenStable(){let e;return new Promise(t=>{e=this.isStable.subscribe({next:e=>{e&&t()}})}).finally(()=>{e.unsubscribe()})}_injector=z(la);_rendererFactory=null;get injector(){return this._injector}bootstrap(e,t){return this.bootstrapImpl(e,t)}bootstrapImpl(e,t,n=Zo.NULL){return this._injector.get(ds).run(()=>{if(W(U.BootstrapComponentStart),!this._injector.get(Jp).done)throw new F(405,``);let r=li(e),i=this._injector.get(Pp),a=new Cp(r,i);this.componentTypes.push(e);let{hostElement:o,directives:s,bindings:c}=Wm(t),l=o||a.selector,u=a.create(n,[],l,i.injector,s,c),d=u.location.nativeElement,f=u.injector.get(zm,null);return f?.registerApplication(d),u.onDestroy(()=>{this.detachView(u.hostView),Gm(this.components,u),f?.unregisterApplication(d)}),this._loadComponent(u),W(U.BootstrapComponentEnd,u),u})}tick(){this.zonelessEnabled||(this.dirtyFlags|=1),this._tick()}_tick(){W(U.ChangeDetectionStart),this.tracingSnapshot===null?this.tickImpl():this.tracingSnapshot.run(yu.CHANGE_DETECTION,this.tickImpl)}tickImpl=()=>{if(this._runningTick)throw W(U.ChangeDetectionEnd),new F(101,!1);let e=P(null);try{this._runningTick=!0,this.synchronize()}finally{this._runningTick=!1,this.tracingSnapshot?.dispose(),this.tracingSnapshot=null,P(e),this.afterTick.next(),W(U.ChangeDetectionEnd)}};synchronize(){this._rendererFactory===null&&!this._injector.destroyed&&(this._rendererFactory=this._injector.get(jf,null,{optional:!0}));let e=0;for(;this.dirtyFlags!==0&&e++Ga(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;Gm(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(Bm,[]).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),()=>Gm(this._destroyListeners,e)}destroy(){if(this._destroyed)throw new F(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=Qc({token:e,factory:e.ɵfac})}return e})();function Wm(e){return e===void 0||typeof e==`string`||e instanceof Element?{hostElement:e}:e}function Gm(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function Km(e,t,n){let r=t.get(Jm);return r.add(e,n),()=>r.remove(e)}function qm(e){return(t,n)=>Km(t,n,e)}var Jm=(()=>{class e{buckets=new Map;callbackBucket=new Map;applicationRef=z(Um);ngZone=z(ds);idleService=z(Xc);add(e,t){let n=Ym(t);this.callbackBucket.set(e,n);let r=this.buckets.get(n);r??(r={idleId:null,queue:new Set},this.buckets.set(n,r)),r.queue.add(e),this.scheduleBucket(r,t)}remove(e){let t=this.callbackBucket.get(e);if(t===void 0)return;this.callbackBucket.delete(e);let n=this.buckets.get(t);n&&(n.queue.delete(e),n.queue.size===0&&(this.cancelBucket(n),this.buckets.delete(t)))}scheduleBucket(e,t){if(e.idleId!==null)return;let n=Ym(t),r=r=>{for(let t of e.queue)if(t(),this.applicationRef._tick(),e.queue.delete(t),this.callbackBucket.delete(t),r&&r.timeRemaining()===0&&!r.didTimeout)break;e.idleId=null,e.queue.size>0?this.scheduleBucket(e,t):this.buckets.delete(n)};e.idleId=this.idleService.requestOnIdle(e=>this.ngZone.run(()=>r(e)),t)}cancelBucket(e){e.idleId!==null&&(this.idleService.cancelOnIdle(e.idleId),e.idleId=null)}ngOnDestroy(){for(let e of this.buckets.values())this.cancelBucket(e);this.buckets.clear(),this.callbackBucket.clear()}static ɵprov=Yr({token:e,providedIn:`root`,factory:()=>new e})}return e})();function Ym(e){return!e||e.timeout==null?``:`${e.timeout}`}function Xm(e){let t=V(),n=uo();if(Fm(t,n),!Rm(0,t))return;let r=t[9];pm(0,vm(t,n),e(()=>Qm(0,t,n),r))}function Zm(e,t,n){let r=t[9],i=t[1];if(e.loadingState!==em.NOT_STARTED)return e.loadingPromise??Promise.resolve();let a=vm(t,n),o=Em(i,e);e.loadingState=em.IN_PROGRESS,mm(1,a);let s=e.dependencyResolverFn,c=r.get(qs).add();return s?(e.loadingPromise=Promise.allSettled(s()).then(n=>{let r=!1,i=[],a=[];for(let e=0;e0&&(t.directiveRegistry=Tm(t.directiveRegistry,i),e.providers=Yi(!1,...i.map(e=>e.type))),a.length>0&&(t.pipeRegistry=Tm(t.pipeRegistry,a))}}),e.loadingPromise.finally(()=>{e.loadingPromise=null,c()})):(e.loadingPromise=Promise.resolve().then(()=>{e.loadingPromise=null,e.loadingState=em.COMPLETE,c()}),e.loadingPromise)}function Qm(e,t,n){let r=t[1],i=t[n.index];if(!Rm(e,t))return;let a=vm(t,n),o=bm(r,n);switch(hm(a),o.loadingState){case em.NOT_STARTED:jm(rm.Loading,n,i),Zm(o,t,n),o.loadingState===em.IN_PROGRESS&&Im(o,n,i);break;case em.IN_PROGRESS:jm(rm.Loading,n,i),Im(o,n,i);break;case em.COMPLETE:jm(rm.Complete,n,i);break;case em.FAILED:jm(rm.Error,n,i)}}function $m(e,t,n){return e===0?th(t,n):e!==2||!th(t,n)}function eh(e){return e!=null&&(e&1)==1}function th(e,t){let n=e[9],r=bm(e[1],t),i=El(n),a=eh(r.flags),o=vm(e,t)[cm]!==null;return!(a&&o&&i)}function nh(e,t,n,r,i,a,o,s,c,l){let u=V(),d=so(),f=e+27,p=Xp(u,d,e,null,0,0),m=u[9],h=El(m);if(d.firstCreatePass){Su(`NgDefer`);let e={primaryTmplIndex:t,loadingTmplIndex:r??null,placeholderTmplIndex:i??null,errorTmplIndex:a??null,placeholderBlockConfig:null,loadingBlockConfig:null,dependencyResolverFn:n??null,loadingState:em.NOT_STARTED,loadingPromise:null,providers:null,hydrateTriggers:null,debug:null,flags:l??0};c?.(d,e,s,o),xm(d,f,e)}let g=u[f];jp(g,p,u);let _=null,v=null;if(g[6]?.length>0){let e=g[6][0].data;v=e.di??null,_=e.s}let y=[null,im.Initial,null,null,null,null,v,_,null,null];ym(u,f,y);let b=null;v!==null&&h&&(b=m.get(Sl),b.add(v,{lView:u,tNode:p,lContainer:g}));let x=()=>{hm(y),v!==null&&b?.cleanup([v])};pm(0,y,()=>Ya(u,x)),Ja(u,x)}function rh(e){$m(0,V(),uo())&&Xm(qm({timeout:e}))}var ih=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 ah(e,t,n,r,i){return e===n&&Object.is(t,r)?1:Object.is(i(e,t),i(n,r))?-1:0}function oh(e,t,n,r){let i,a,o=0,s=e.length-1;if(Array.isArray(t)){P(r);let c=t.length-1;for(P(null);o<=s&&o<=c;){let r=e.at(o),l=t[o],u=ah(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=ah(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 uh,a??=lh(e,o,s,n),sh(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;)ch(e,i,n,o,t[o]),o++}else if(t!=null){P(r);let c=t[Symbol.iterator]();P(null);let l=c.next();for(;!l.done&&o<=s;){let t=e.at(o),r=l.value,u=ah(o,t,o,r,n);if(u!==0)u<0&&e.updateValue(o,r),o++,l=c.next();else{i??=new uh,a??=lh(e,o,s,n);let u=n(o,r);if(sh(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;)ch(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 sh(e,t,n,r){return t!==void 0&&t.has(r)?(e.attach(n,t.get(r)),t.delete(r),!0):!1}function ch(e,t,n,r,i){if(sh(e,t,r,n(r,i)))e.updateValue(r,i);else{let t=e.create(r,i);e.attach(r,t)}}function lh(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 uh=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 K(e,t,n,r,i,a,o,s){Su(`NgControlFlow`);let c=V(),l=so();return Xp(c,l,e,t,n,r,i,Va(l.consts,a),256,o,s),dh}function dh(e,t,n,r,i,a,o,s){Su(`NgControlFlow`);let c=V(),l=so();return Xp(c,l,e,t,n,r,i,Va(l.consts,a),512,o,s),dh}function q(e,t){Su(`NgControlFlow`);let n=V(),r=So(),i=n[r]===lu?-1:n[r],a=i===-1?void 0:vh(n,27+i);if(Lf(n,r,e)){let r=P(null);try{if(a!==void 0&&hf(a,0),e!==-1){let r=27+e,i=vh(n,r),a=Ch(n[1],r),o=kf(i,a,n);mf(i,zd(n,a,t,{dehydratedView:o}),0,Bd(a,o))}}finally{P(r)}}else if(a!==void 0){let e=pf(a,0);e!==void 0&&(e[8]=t)}}var fh=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 ph(e){return e}var mh=class{hasEmptyBlock;trackByFn;liveCollection;constructor(e,t,n){this.hasEmptyBlock=e,this.trackByFn=t,this.liveCollection=n}};function hh(e,t,n,r,i,a,o,s,c,l,u,d,f){Su(`NgControlFlow`);let p=V(),m=so(),h=c!==void 0,g=V(),_=new mh(h,s?o.bind(g[15][8]):o);g[27+e]=_,Xp(p,m,e+1,t,n,r,i,Va(m.consts,a),256),h&&Xp(p,m,e+2,c,l,u,d,Va(m.consts,f),512)}var gh=class extends ih{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,mf(this.lContainer,t,e,Bd(this.templateTNode,n)),yh(this.lContainer,e)}detach(e){return this.needsIndexUpdate||=e!==this.length-1,bh(this.lContainer,e),xh(this.lContainer,e)}create(e,t){let n=Of(this.lContainer,this.templateTNode.tView.ssrId);return zd(this.hostLView,this.templateTNode,new fh(this.lContainer,t,e),{dehydratedView:n})}destroy(e){Hu(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];Du(e,r),pu.delete(n[19]),r.detachedLeaveAnimationFns=void 0}}function bh(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 xh(e,t){return gf(e,t)}function Sh(e,t){return pf(e,t)}function Ch(e,t){return Ia(e,t)}function wh(e,t,n){let r=V();return Lf(r,So(),t)&&(so(),Cd(Vo(),r,e,t,r[11],n)),wh}function Th(e,t,n,r,i){Pd(t,e,n,i?`class`:`style`,r)}function Eh(e,t,n,r){let i=V(),a=i[1],o=e+27,s=a.firstCreatePass?dp(o,i,2,t,kd,ro(),n,r):a.data[o];if(Da(s)){let n=i[10].tracingService;if(n&&n.componentCreate){let o=a.data[s.directiveStart+s.componentOffset];return n.componentCreate(Nf(o),()=>(Dh(e,t,i,s,r),Eh))}}return Dh(e,t,i,s,r),Eh}function Dh(e,t,n,r,i){if(jd(r,n,e,t,jh),Oa(r)){let e=n[1];yd(e,n,r),kl(e,r,n)}i!=null&&bd(n,r)}function Oh(){let e=so(),t=Md(uo());return e.firstCreatePass&&fp(e,t),ao(t)&&oo(),no(),t.classesWithoutHost!=null&&dc(t)&&Th(e,t,V(),t.classesWithoutHost,!0),t.stylesWithoutHost!=null&&fc(t)&&Th(e,t,V(),t.stylesWithoutHost,!1),Oh}function kh(e,t,n,r){return Eh(e,t,n,r),Oh(),kh}function J(e,t,n,r){let i=V(),a=i[1],o=e+27,s=a.firstCreatePass?pp(o,a,2,t,n,r):a.data[o];return jd(s,i,e,t,jh),r!=null&&bd(i,s),J}function Y(){return ao(Md(uo()))&&oo(),no(),Y}function Ah(e,t,n,r){return J(e,t,n,r),Y(),Ah}var jh=(e,t,n,r,i)=>(Jo(!0),Bl(t[11],r,Go()));function Mh(){let e=so(),t=Md(uo());return e.firstCreatePass&&fp(e,t),Mh}function Nh(e,t,n){let r=V(),i=r[1],a=e+27,o=i.firstCreatePass?pp(a,i,8,`ng-container`,t,n):i.data[a];return jd(o,r,e,`ng-container`,Ih),n!=null&&bd(r,o),Nh}function Ph(){return Md(uo()),Mh}function Fh(e,t,n){return Nh(e,t,n),Ph(),Fh}var Ih=(e,t,n,r,i)=>(Jo(!0),zl(t[11],``));function Lh(){return V()}function Rh(e,t,n){let r=V();return Lf(r,So(),t)&&(so(),wd(Vo(),r,e,t,r[11],n)),Rh}var zh=`en-US`;function Bh(e){typeof e==`string`&&e.toLowerCase().replace(/_/g,`-`)}function Vh(e,t,n){let r=V(),i=so(),a=uo();return Uh(i,r,r[11],a,e,t,n),Vh}function Hh(e,t,n){let r=V(),i=so(),a=uo();return(a.type&3||n)&&Hf(a,i,r,n,r[11],e,t,Bf(a,r,t)),Hh}function Uh(e,t,n,r,i,a,o){let s=!0,c=null;if((r.type&3||o)&&(c??=Bf(r,t,a),Hf(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 Kh(e){return(e&2)==2}function qh(e,t){return e&131071|t<<17}function Jh(e){return e|2}function Yh(e){return(e&131068)>>2}function Xh(e,t){return e&-131069|t<<2}function Zh(e){return(e&1)==1}function Qh(e){return e|1}function $h(e,t,n,r,i,a){let o=a?t.classBindings:t.styleBindings,s=Gh(o),c=Yh(o);e[r]=n;let l=!1,u;if(Array.isArray(n)){let e=n;u=e[1],(u===null||Bi(e,u)>0)&&(l=!0)}else u=n;if(i){if(c!==0){let t=Gh(e[s+1]);e[r+1]=Wh(t,s),t!==0&&(e[t+1]=Xh(e[t+1],r)),e[s+1]=qh(e[s+1],r)}else e[r+1]=Wh(s,0),s!==0&&(e[s+1]=Xh(e[s+1],r)),s=r}else e[r+1]=Wh(c,0),s===0?s=r:e[c+1]=Xh(e[c+1],r),c=r;l&&(e[r+1]=Jh(e[r+1])),tg(e,u,r,!0),tg(e,u,r,!1),eg(t,u,e,r,a),o=Wh(s,c),a?t.classBindings=o:t.styleBindings=o}function eg(e,t,n,r,i){let a=i?e.residualClasses:e.residualStyles;a!=null&&typeof t==`string`&&Bi(a,t)>=0&&(n[r+1]=Qh(n[r+1]))}function tg(e,t,n,r){let i=e[n+1],a=t===null,o=r?Gh(i):Yh(i),s=!1;for(;o!==0&&(s===!1||a);){let n=e[o],i=e[o+1];ng(n,t)&&(s=!0,e[o+1]=r?Qh(i):Jh(i)),o=r?Gh(i):Yh(i)}s&&(e[n+1]=r?Jh(i):Qh(i))}function ng(e,t){return e===null||t==null||(Array.isArray(e)?e[1]:e)===t?!0:Array.isArray(e)&&typeof t==`string`?Bi(e,t)>=0:!1}function rg(e,t,n){return ag(e,t,n,!1),rg}function ig(e,t){return ag(e,t,null,!0),ig}function ag(e,t,n,r){let i=V(),a=so(),o=Co(2);if(a.firstUpdatePass&&sg(a,e,o,r),t!==lu&&Lf(i,o,t)){let s=a.data[zo()];mg(a,s,i,i[11],e,i[o+1]=_g(t,n),r,o)}}function og(e,t){return t>=e.expandoStartIndex}function sg(e,t,n,r){let i=e.data;if(i[n+1]===null){let a=i[zo()],o=og(e,n);vg(a,r)&&t===null&&!o&&(t=!1),t=cg(i,a,t,r),$h(i,a,t,n,o,r)}}function cg(e,t,n,r){let i=Oo(e),a=r?t.residualClasses:t.residualStyles;if(i===null)(r?t.classBindings:t.styleBindings)===0&&(n=fg(null,e,t,n,r),n=pg(n,t.attrs,r),a=null);else{let o=t.directiveStylingLast;if(o===-1||e[o]!==i){if(n=fg(i,e,t,n,r),a===null){let n=lg(e,t,r);n!==void 0&&Array.isArray(n)&&(n=fg(null,e,t,n[1],r),n=pg(n,t.attrs,r),ug(e,t,r,n))}else a=dg(e,t,r)}}return a!==void 0&&(r?t.residualClasses=a:t.residualStyles=a),n}function lg(e,t,n){let r=n?t.classBindings:t.styleBindings;if(Yh(r)!==0)return e[Gh(r)]}function ug(e,t,n,r){let i=n?t.classBindings:t.styleBindings;e[Gh(i)]=r}function dg(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===lu&&(u=l?Ui:void 0);let d=l?zi(u,r):c===r?u:void 0;if(a&&!gg(d)&&(d=zi(t,r)),gg(d)&&(s=d,o))return s;let f=e[i+1];i=o?Gh(f):Yh(f)}if(t!==null){let e=a?t.residualClasses:t.residualStyles;e!=null&&(s=zi(e,r))}return s}function gg(e){return e!==void 0}function _g(e,t){return e==null||e===``||(typeof t==`string`?e=Ml(e)+t:typeof e==`object`&&(e=Ur(Ml(e)))),e}function vg(e,t){return!!(e.flags&(t?8:16))}function Z(e,t=``){let n=V(),r=so(),i=e+27,a=r.firstCreatePass?bf(r,i,1,t,null):r.data[i],o=yg(r,n,a,t);n[i]=o,qo()&&Zu(r,n,o,a),mo(a,!1)}var yg=(e,t,n,r)=>(Jo(!0),Ll(t[11],r));function bg(e,t,n,r=``){return Lf(e,So(),n)?t+pi(n)+r:lu}function xg(e,t,n,r,i,a=``){let o=Rf(e,bo(),n,i);return Co(2),o?t+pi(n)+r+pi(i)+a:lu}function Sg(e,t,n,r,i,a,o,s=``){let c=zf(e,bo(),n,i,o);return Co(3),c?t+pi(n)+r+pi(i)+a+pi(o)+s:lu}function Q(e){return $(``,e),Q}function $(e,t,n){let r=V(),i=bg(r,e,t,n);return i!==lu&&Tg(r,zo(),i),$}function Cg(e,t,n,r,i){let a=V(),o=xg(a,e,t,n,r,i);return o!==lu&&Tg(a,zo(),o),Cg}function wg(e,t,n,r,i,a,o){let s=V(),c=Sg(s,e,t,n,r,i,a,o);return c!==lu&&Tg(s,zo(),c),wg}function Tg(e,t,n){let r=Pa(t,e);Rl(e[11],r,n)}function Eg(e,t){let n=e[t];return n===lu?void 0:n}function Dg(e,t,n,r,i,a){let o=t+n;return Lf(e,o,i)?If(e,o+1,a?r.call(a,i):r(i)):Eg(e,o+1)}function Og(e,t){let n=so(),r,i=e+27;n.firstCreatePass?(r=kg(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=Ni(r.type,!0)),o=Ci(Xf);try{let e=Cc(!1),t=a();return Cc(e),Ra(n,V(),i,t),t}finally{Ci(o)}}function kg(e,t){if(t)for(let n=t.length-1;n>=0;n--){let r=t[n];if(e===r.name)return r}}function Ag(e,t,n){let r=e+27,i=V(),a=La(i,r);return jg(i,r)?Dg(i,yo(),t,a.transform,n,a):a.transform(n)}function jg(e,t){return e[1].data[t].pure}var Mg=(()=>{class e{applicationErrorHandler=z(ws);appRef=z(Um);taskService=z(rs);ngZone=z(ds);zonelessEnabled=z(Fs);tracing=z(bu,{optional:!0});zoneIsDefined=typeof Zone<`u`&&!!Zone.root.run;schedulerTickApplyArgs=[{data:{__scheduler_tick__:!0}}];subscriptions=new er;angularZoneId=this.zoneIsDefined?this.ngZone._inner?.get(ls):null;scheduleInRootZone=!this.zonelessEnabled&&this.zoneIsDefined&&(z(Is,{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?ss:os;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=Qc({token:e,factory:e.ɵfac})}return e})();function Ng(){return[{provide:Ps,useExisting:Mg},{provide:ds,useClass:ys},{provide:Fs,useValue:!0}]}function Pg(){return typeof $localize<`u`&&$localize.locale||`en-US`}var Fg=new L(``,{factory:()=>z(Fg,{optional:!0,skipSelf:!0})||Pg()}),Ig=class{destroyed=!1;listeners=null;errorHandler=z(Cs,{optional:!0});isEmitting=!1;hasNullListeners=!1;destroyRef=z($o);constructor(){this.destroyRef.onDestroy(()=>{this.destroyed=!0,this.listeners=null})}subscribe(e){if(this.destroyed)throw new F(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(Hr(953,!1));return}if(this.listeners===null)return;this.isEmitting=!0;let t=P(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&&Lg(this.listeners)),P(t),this.isEmitting=!1}}};function Lg(e){let t=e.length-1;for(;t>-1;)e[t]===null&&e.splice(t,1),t--}function Rg(e,t){return Sn(e,t?.equal)}(class e extends Error{_brand;constructor(e){super(e)}static IDLE=new e(`IDLE`);static LOADING=new e(`LOADING`)});function zg(e,t){let n=Object.create(Ys);n.value=e,n.transformFn=t?.transform;function r(){if(rn(n),n.value===Js)throw new F(-950,null);return n.value}return r[en]=n,r}function Bg(e){return new Ig}function Vg(e,t){return zg(e,t)}function Hg(e){return zg(Js,e)}var Ug=(Vg.required=Hg,Vg),Wg=new L(``),Gg=new L(``);function Kg(e){return!e.moduleRef}function qg(e){let t=Kg(e)?e.r3Injector:e.moduleRef.injector,n=t.get(ds);return n.run(()=>{Kg(e)?e.r3Injector.resolveInjectorInitializers():e.moduleRef.resolveInjectorInitializers();let r=t.get(ws),i;if(n.runOutsideAngular(()=>{i=n.onError.subscribe({next:r})}),Kg(e)){let n=()=>t.destroy(),r=e.platformInjector.get(Wg);r.add(n),t.onDestroy(()=>{i.unsubscribe(),r.delete(n)})}else{let t=()=>e.moduleRef.destroy(),n=e.platformInjector.get(Wg);n.add(t),e.moduleRef.onDestroy(()=>{Gm(e.allPlatformModules,e.moduleRef),i.unsubscribe(),n.delete(t)})}return Yg(r,n,()=>{let n=t.get(rs),r=n.add(),i=t.get(Jp);return i.runInitializers(),i.donePromise.then(()=>{if(Bh(t.get(Fg,zh)||`en-US`),!t.get(Gg,!0))return Kg(e)?t.get(Um):(e.allPlatformModules.push(e.moduleRef),e.moduleRef);if(Kg(e)){let n=t.get(Um);return e.rootComponent!==void 0&&n.bootstrap(e.rootComponent),n}return Jg?.(e.moduleRef,e.allPlatformModules),e.moduleRef}).finally(()=>void n.remove(r))})})}var Jg;function Yg(e,t,n){try{let r=n();return Mp(r)?r.catch(n=>{throw t.runOutsideAngular(()=>e(n)),n}):r}catch(n){throw t.runOutsideAngular(()=>e(n)),n}}var Xg=null;function Zg(e=[],t){return Zo.create({name:t,providers:[{provide:ia,useValue:`platform`},{provide:Wg,useValue:new Set([()=>Xg=null])},...e]})}function Qg(e=[]){if(Xg)return Xg;let t=Zg(e);return Xg=t,Vm(),$g(t),t}function $g(e){let t=e.get(ks,null);xa(e,()=>{t?.forEach(e=>e())})}function e_(e){let{rootComponent:t,appProviders:n,platformProviders:r,platformRef:i}=e;W(U.BootstrapApplicationStart);try{let e=i?.injector??Qg(r);return qg({r3Injector:new Fp({providers:[Ng(),Ts,...n||[]],parent:e,debugName:``,runEnvironmentInitializers:!1}).injector,platformInjector:e,rootComponent:t})}catch(e){return Promise.reject(e)}finally{W(U.BootstrapApplicationEnd)}}var t_=null;function n_(){return t_}function r_(e){t_??=e}var i_=class{},a_=(()=>{class e{transform(e){return JSON.stringify(e,null,2)}static ɵfac=function(t){return new(t||e)};static ɵpipe=Hp({name:`json`,type:e,pure:!1})}return e})();function o_(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 s_=`browser`,c_=class{_doc;constructor(e){this._doc=e}manager},l_=(()=>{class e extends c_{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)(R(Qo))};static ɵprov=Yr({token:e,factory:e.ɵfac})}return e})(),u_=new L(``),d_=(()=>{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 l_));this._plugins=n.slice().reverse();let r=e.find(e=>e instanceof l_);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 F(-5101,!1);return this._eventNameToPlugin.set(e,t),t}static ɵfac=function(t){return new(t||e)(R(u_),R(ds))};static ɵprov=Yr({token:e,factory:e.ɵfac})}return e})(),f_=`ng-app-id`;function p_(e){for(let t of e)t.remove()}function m_(e,t){let n=t.createElement(`style`);return n.textContent=e,n}function h_(e,t,n,r){let i=e.head?.querySelectorAll(`style[${f_}="${t}"],link[${f_}="${t}"]`);if(!i||i.length===0)return!1;for(let e of i)e.removeAttribute(f_),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 g_(e,t){let n=t.createElement(`link`);return n.setAttribute(`rel`,`stylesheet`),n.setAttribute(`href`,e),n}var __=(()=>{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,h_(e,t,this.inline,this.external)&&this.hosts.add(e.head)}addStyles(e,t){for(let t of e)this.addUsage(t,this.inline,m_);t?.forEach(e=>this.addUsage(e,this.external,g_))}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&&(p_(n.elements),t.delete(e)))}ngOnDestroy(){for(let[,{elements:e}]of[...this.inline,...this.external])p_(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,m_(t,this.doc)));for(let[t,{elements:n}]of this.external)n.push(this.addElement(e,g_(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)(R(Qo),R(Ds),R(js,8),R(As))};static ɵprov=Yr({token:e,factory:e.ɵfac})}return e})(),v_={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`},y_=/%COMP%/g,b_=`%COMP%`,x_=`_nghost-${b_}`,S_=`_ngcontent-${b_}`,C_=!0,w_=new L(``,{factory:()=>C_}),T_=new L(``);function E_(e){return S_.replace(y_,e)}function D_(e){return x_.replace(y_,e)}function O_(e,t){return t.map(t=>t.replace(y_,e))}var k_=(()=>{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 A_(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 P_?n.applyToHost(e):n instanceof N_&&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 Al.Emulated:r=new P_(o,s,t,this.appId,c,i,a,l,this.cssVarNamespace);break;case Al.ShadowDom:return new M_(o,e,t,i,a,this.nonce,l,this.cssVarNamespace,s);case Al.ExperimentalIsolatedShadowDom:return new M_(o,e,t,i,a,this.nonce,l,this.cssVarNamespace);default:r=new N_(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)(R(d_),R(Jf),R(Ds),R(w_),R(Qo),R(ds),R(js),R(bu,8),R(T_,8))};static ɵprov=Yr({token:e,factory:e.ɵfac})}return e})(),A_=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(v_[t]||t,e):this.doc.createElement(e)}createComment(e){return this.doc.createComment(e)}createText(e){return this.doc.createTextNode(e)}appendChild(e,t){(j_(e)?e.content:e).appendChild(t)}insertBefore(e,t,n){if(e){let r=j_(e)?e.content:e;if(n!=null&&n.parentNode!==r)throw new F(-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 F(-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=v_[r];i?e.setAttributeNS(i,t,n):e.setAttribute(t,n)}else e.setAttribute(t,n)}removeAttribute(e,t,n){if(n){let r=v_[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&(uu.DashCase|uu.Important)?e.style.setProperty(t,n,r&uu.Important?`important`:``):e.style[t]=n}removeStyle(e,t,n){let r=t.startsWith(`--`);r&&(t=t.replace(`%NS%`,this.cssVarNamespace)),r||n&uu.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=n_().getGlobalEventTarget(this.doc,e),!e))throw new F(-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 j_(e){return e.tagName===`TEMPLATE`&&e.content!==void 0}var M_=class extends A_{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=O_(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=g_(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)}},N_=class extends A_{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?O_(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&&pu.size===0&&this.sharedStylesHost.removeStyles(this.styles,this.styleUrls)}},P_=class extends N_{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=E_(l),this.hostAttr=D_(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}},F_=class e extends i_{supportsDOMEvents=!0;static makeCurrent(){r_(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=L_();return t==null?null:R_(t)}resetBaseElement(){I_=null}getUserAgent(){return window.navigator.userAgent}getCookie(e){return o_(document.cookie,e)}},I_=null;function L_(){return I_||=document.head.querySelector(`base`),I_?I_.getAttribute(`href`):null}function R_(e){return new URL(e,document.baseURI).pathname}var z_=[`alt`,`control`,`meta`,`shift`],B_={"\b":`Backspace`," ":`Tab`,"":`Delete`,"\x1B":`Escape`,Del:`Delete`,Esc:`Escape`,Left:`ArrowLeft`,Right:`ArrowRight`,Up:`ArrowUp`,Down:`ArrowDown`,Menu:`ContextMenu`,Scroll:`ScrollLock`,Win:`OS`},V_={alt:e=>e.altKey,control:e=>e.ctrlKey,meta:e=>e.metaKey,shift:e=>e.shiftKey},H_=(()=>{class e extends c_{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(()=>n_().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.`),z_.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=B_[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`),z_.forEach(t=>{if(t!==n){let n=V_[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)(R(Qo))};static ɵprov=Yr({token:e,factory:e.ɵfac})}return e})();async function U_(e,t,n){return e_({rootComponent:e,...W_(t,n)})}function W_(e,t){return{platformRef:t?.platformRef,appProviders:[...Y_,...e?.providers??[]],platformProviders:J_}}function G_(){F_.makeCurrent()}function K_(){return new Cs}function q_(){return hl(document),document}var J_=[{provide:As,useValue:s_},{provide:ks,useValue:G_,multi:!0},{provide:Qo,useFactory:q_}],Y_=[{provide:ia,useValue:`root`},{provide:Cs,useFactory:K_},{provide:u_,useClass:l_,multi:!0},{provide:u_,useClass:H_,multi:!0},k_,{provide:Jf,useClass:__},{provide:__,useExisting:Jf},d_,{provide:jf,useExisting:k_},[]];function X_(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 ev({code:i,why:Q_(a.why,e),fix:Q_(a.fix,e),docs:o,cause:e.cause,sources:e.sources},s);for(let e of t)e(r,n);return r};n[i]=s}return n}function rv(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 lv=Math.random.bind(Math),uv=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function dv(e=21){let t=``,n=e;for(;n--;)t+=uv[lv()*64|0];return t}var fv=6e4,pv=e=>e,mv=pv,{clearTimeout:hv,setTimeout:gv}=globalThis;function _v(e,t){let{post:n,on:r,off:i=()=>{},eventNames:a=[],serialize:o=pv,deserialize:s=mv,resolver:c,bind:l=`rpc`,timeout:u=fv,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}=cv(),_=dv();s.i=_;let v;async function y(n=s){return u>=0&&(v=gv(()=>{try{if(t.onTimeoutError?.call(h,e,r)!==!0)throw Error(`[birpc] timeout on calling "${e}"`)}catch(e){g(e)}p.delete(_)},u),typeof v==`object`&&(v=v.unref?.())),p.set(_,{resolve:d,reject:g,timeoutId:v,method:e}),await c(n),l}try{t.onRequest?await t.onRequest.call(h,s,y,d):await y()}catch(e){if(t.onGeneralError?.call(h,e)!==!0)throw e;return}finally{hv(v),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:y,get $closed(){return f},get $meta(){return t.meta},$close:v,$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 v(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(b)}function y(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 b(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&&(hv(r.timeoutId),n?r.reject(n):r.resolve(t)),p.delete(e)}}return m=r(b),h}function vv(e,t){return t.safety?t.safety:e===`static`||e===`query`||e==null?`read`:`action`}var yv=Object.freeze({type:`object`,additionalProperties:!0});function bv(e){let t=e[`~standard`];if(t.jsonSchema)try{return t.jsonSchema.input({target:`draft-2020-12`})}catch{return yv}return yv}function xv(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 Cv(e,t){return Sv(e,t)??[e]}function wv(e){return typeof e==`string`?`'${e}'`:new Ov().serialize(e)}var Tv=` _-,;:!?.'"()[]{}@*/\\&#%\`^+<=>|~$0123456789abcdefghijklmnopqrstuvwxyz`,Ev=(function(){let e=new Uint8Array(128);for(let t=0;t<69;t++)e[Tv.charCodeAt(t)]=t+1;for(let t=65;t<=90;t++)e[t]=e[t+32];return e})();function Dv(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})(),kv=[1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225],Av=[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],jv=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_`,Mv=[],Nv=class{_data=new Pv;_hash=new Pv([...kv]);_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)Mv[n]=e[t+n]|0;else{let e=Mv[n-15],t=(e<<25|e>>>7)^(e<<14|e>>>18)^e>>>3,r=Mv[n-2],i=(r<<15|r>>>17)^(r<<13|r>>>19)^r>>>10;Mv[n]=t+Mv[n-7]+i+Mv[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+Av[n]+Mv[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=Pv.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 Fv(e){return new Nv().finalize(e).toBase64()}function Iv(e){return Fv(wv(e))}function Lv(e){return Iv(e)}function Rv(){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 zv=/^[\w+.-]{2,}:\/\//;function Bv(e){return e.endsWith(`/`)?e:`${e}/`}function Vv(e){return(e.endsWith(`/`)?e.slice(0,-1):e)||`/`}function Hv(e,...t){let n=e;for(let e of t)e&&e!==`/`&&(n=n?Bv(n)+e.replace(/^\.?\//,``):e);return n}function Uv(e,t){if(!t||t===`/`||zv.test(e))return e;let n=Vv(t);return e.startsWith(n)?e:Hv(n,e)}function Wv(e,t){let n=e.match(zv);return t+(n?e.slice(n[0].length):e)}var Gv=`useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict`;function Kv(e=21){let t=``,n=e;for(;n--;)t+=Gv[Math.random()*64|0];return t}var qv=Symbol.for(`immer-nothing`),Jv=Symbol.for(`immer-draftable`),Yv=Symbol.for(`immer-state`),Xv=[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 Zv(e,...t){{let n=Xv[e],r=xy(n)?n.apply(null,t):n;throw Error(`[Immer] ${r}`)}}var Qv=Object,$v=Qv.getPrototypeOf,ey=`constructor`,ty=`prototype`,ny=`configurable`,ry=`enumerable`,iy=`writable`,ay=`value`,oy=e=>!!e&&!!e[Yv];function sy(e){return e?uy(e)||_y(e)||!!e[Jv]||!!e[ey]?.[Jv]||vy(e)||yy(e):!1}var cy=Qv[ty][ey].toString(),ly=new WeakMap;function uy(e){if(!e||!by(e))return!1;let t=$v(e);if(t===null||t===Qv[ty])return!0;let n=Qv.hasOwnProperty.call(t,ey)&&t[ey];if(n===Object)return!0;if(!xy(n))return!1;let r=ly.get(n);return r===void 0&&(r=Function.toString.call(n),ly.set(n,r)),r===cy}function dy(e,t,n=!0){fy(e)===0?(n?Reflect.ownKeys(e):Qv.keys(e)).forEach(n=>{t(n,e[n],e)}):e.forEach((n,r)=>t(r,n,e))}function fy(e){let t=e[Yv];return t?t.type_:_y(e)?1:vy(e)?2:yy(e)?3:0}var py=(e,t,n=fy(e))=>n===2?e.has(t):Qv[ty].hasOwnProperty.call(e,t),my=(e,t,n=fy(e))=>n===2?e.get(t):e[t],hy=(e,t,n,r=fy(e))=>{r===2?e.set(t,n):r===3?e.add(n):e[t]=n};function gy(e,t){return e===t?e!==0||1/e==1/t:e!==e&&t!==t}var _y=Array.isArray,vy=e=>e instanceof Map,yy=e=>e instanceof Set,by=e=>typeof e==`object`,xy=e=>typeof e==`function`,Sy=e=>typeof e==`boolean`;function Cy(e){let t=+e;return Number.isInteger(t)&&String(t)===e}var wy=e=>by(e)?e?.[Yv]:null,Ty=e=>e.copy_||e.base_,Ey=e=>e.modified_?e.copy_:e.base_;function Dy(e,t){if(vy(e))return new Map(e);if(yy(e))return new Set(e);if(_y(e))return Array[ty].slice.call(e);let n=uy(e);if(t===!0||t===`class_only`&&!n){let t=Qv.getOwnPropertyDescriptors(e);delete t[Yv];let n=Reflect.ownKeys(t);for(let r=0;r1&&Qv.defineProperties(e,{set:Ay,add:Ay,clear:Ay,delete:Ay}),Qv.freeze(e),t&&dy(e,(e,t)=>{Oy(t,!0)},!1),e)}function ky(){Zv(2)}var Ay={[ay]:ky};function jy(e){return e===null||!by(e)||Qv.isFrozen(e)}var My=`MapSet`,Ny=`Patches`,Py=`ArrayMethods`,Fy={};function Iy(e){let t=Fy[e];return t||Zv(0,e),t}var Ly=e=>!!Fy[e];function Ry(e,t){Fy[e]||(Fy[e]=t)}var zy,By=()=>zy,Vy=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:Ly(My)?Iy(My):void 0,arrayMethodsPlugin_:Ly(Py)?Iy(Py):void 0});function Hy(e,t){t&&(e.patchPlugin_=Iy(Ny),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Uy(e){Wy(e),e.drafts_.forEach(Ky),e.drafts_=null}function Wy(e){e===zy&&(zy=e.parent_)}var Gy=e=>zy=Vy(zy,e);function Ky(e){let t=e[Yv];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function qy(e,t){t.unfinalizedDrafts_=t.drafts_.length;let n=t.drafts_[0];if(e!==void 0&&e!==n){n[Yv].modified_&&(Uy(t),Zv(4)),sy(e)&&(e=Jy(t,e));let{patchPlugin_:r}=t;r&&r.generateReplacementPatches_(n[Yv].base_,e,t)}else e=Jy(t,n);return Yy(t,e,!0),Uy(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e===qv?void 0:e}function Jy(e,t){if(jy(t))return t;let n=t[Yv];if(!n)return rb(t,e.handledSet_,e);if(!Zy(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);tb(n,e)}return n.copy_}function Yy(e,t,n=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&Oy(t,n)}function Xy(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var Zy=(e,t)=>e.scope_===t,Qy=[];function $y(e,t,n,r){let i=Ty(e),a=e.type_;if(r!==void 0&&my(i,r,a)===t){hy(i,r,n,a);return}if(!e.draftLocations_){let t=e.draftLocations_=new Map;dy(i,(e,n)=>{if(oy(n)){let r=t.get(n)||[];r.push(e),t.set(n,r)}})}let o=e.draftLocations_.get(t)??Qy;for(let e of o)hy(i,e,n,a)}function eb(e,t,n){e.callbacks_.push(function(r){let i=t;if(!i||!Zy(i,r))return;r.mapSetPlugin_?.fixSetContents(i);let a=Ey(i);$y(e,i.draft_??i,a,n),tb(i,r)})}function tb(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)}Xy(e)}}function nb(e,t,n){let{scope_:r}=e;if(oy(n)){let i=n[Yv];Zy(i,r)&&i.callbacks_.push(function(){fb(e),$y(e,n,Ey(i),t)})}else sy(n)&&e.callbacks_.push(function(){let i=Ty(e);e.type_===3?i.has(n)&&rb(n,r.handledSet_,r):my(i,t,e.type_)===n&&r.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&rb(my(e.copy_,t,e.type_),r.handledSet_,r)})}function rb(e,t,n){return!n.immer_.autoFreeze_&&n.unfinalizedDrafts_<1||oy(e)||t.has(e)||!sy(e)||jy(e)?e:(t.add(e),dy(e,(r,i)=>{if(oy(i)){let t=i[Yv];Zy(t,n)&&(hy(e,r,Ey(t),e.type_),Xy(t))}else sy(i)&&rb(i,t,n)}),e)}function ib(e,t){let n=_y(e),r={type_:+!!n,scope_:t?t.scope_:By(),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=ab;n&&(i=[r],a=ob);let{revoke:o,proxy:s}=Proxy.revocable(i,a);return r.draft_=s,r.revoke_=o,[s,r]}var ab={get(e,t){if(t===Yv)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=Ty(e);if(!py(i,t,e.type_))return lb(e,i,t);let a=i[t];if(e.finalized_||!sy(a)||r&&e.operationMethod&&n?.isMutatingArrayMethod(e.operationMethod)&&Cy(t))return a;if(a===sb(e.base_,t)||cb(e,t,a)){fb(e);let n=e.type_===1?+t:t,r=mb(e.scope_,a,e,n);return e.copy_[n]=r}return a},has(e,t){return t in Ty(e)},ownKeys(e){return Reflect.ownKeys(Ty(e))},set(e,t,n){let r=ub(Ty(e),t);if(r?.set)return r.set.call(e.draft_,n),!0;if(!e.modified_){let r=sb(Ty(e),t),i=r?.[Yv];if(i&&i.base_===n)return e.copy_[t]=n,e.assigned_.set(t,!1),!0;if(gy(n,r)&&(n!==void 0||py(e.base_,t,e.type_)))return!0;fb(e),db(e)}return e.copy_[t]===n&&(n!==void 0||py(e.copy_,t,e.type_))||Number.isNaN(n)&&Number.isNaN(e.copy_[t])?!0:(e.copy_[t]=n,e.assigned_.set(t,!0),nb(e,t,n),!0)},deleteProperty(e,t){return fb(e),sb(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),db(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){let n=Ty(e),r=Reflect.getOwnPropertyDescriptor(n,t);return r&&{[iy]:!0,[ny]:e.type_!==1||t!==`length`,[ry]:r[ry],[ay]:n[t]}},defineProperty(){Zv(11)},getPrototypeOf(e){return $v(e.base_)},setPrototypeOf(){Zv(12)}},ob={};for(let e in ab){let t=ab[e];ob[e]=function(){let e=arguments;return e[0]=e[0][0],t.apply(this,e)}}ob.deleteProperty=function(e,t){return isNaN(parseInt(t))&&Zv(13),ob.set.call(this,e,t,void 0)},ob.set=function(e,t,n){return t!==`length`&&isNaN(parseInt(t))&&Zv(14),ab.set.call(this,e[0],t,n,e[0])};function sb(e,t){let n=e[Yv];return(n?Ty(n):e)[t]}function cb(e,t,n){return e.type_!==1||!e.allIndicesReassigned_||e.assigned_?.get(t)||!sy(n)||n[Yv]?!1:e.baseRefs_.has(n)}function lb(e,t,n){let r=ub(t,n);return r?ay in r?r[ay]:r.get?.call(e.draft_):void 0}function ub(e,t){if(!(t in e))return;let n=$v(e);for(;n;){let e=Object.getOwnPropertyDescriptor(n,t);if(e)return e;n=$v(n)}}function db(e){e.modified_||(e.modified_=!0,e.parent_&&db(e.parent_))}function fb(e){e.copy_||=(e.assigned_=new Map,Dy(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var pb=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(e,t,n)=>{if(xy(e)&&!xy(t)){let n=t;t=e;let r=this;return function(e=n,...i){return r.produce(e,e=>t.call(this,e,...i))}}xy(t)||Zv(6),n!==void 0&&!xy(n)&&Zv(7);let r;if(sy(e)){let i=Gy(this),a=mb(i,e,void 0),o=!0;try{r=t(a),o=!1}finally{o?Uy(i):Wy(i)}return Hy(i,n),qy(r,i)}if(!e||!by(e)){if(r=t(e),r===void 0&&(r=e),r===qv&&(r=void 0),this.autoFreeze_&&Oy(r,!0),n){let t=[],i=[];Iy(Ny).generateReplacementPatches_(e,r,{patches_:t,inversePatches_:i}),n(t,i)}return r}Zv(1,e)},this.produceWithPatches=(e,t)=>{if(xy(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]},Sy(e?.autoFreeze)&&this.setAutoFreeze(e.autoFreeze),Sy(e?.useStrictShallowCopy)&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),Sy(e?.useStrictIteration)&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){sy(e)||Zv(8),oy(e)&&(e=hb(e));let t=Gy(this),n=mb(t,e,void 0);return n[Yv].isManual_=!0,Wy(t),n}finishDraft(e,t){let n=e&&e[Yv];(!n||!n.isManual_)&&Zv(9);let{scope_:r}=n;return Hy(r,t),qy(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=Iy(Ny).applyPatches_;return oy(e)?r(e,t):this.produce(e,e=>r(e,t))}};function mb(e,t,n,r){let[i,a]=vy(t)?Iy(My).proxyMap_(t,n):yy(t)?Iy(My).proxySet_(t,n):ib(t,n);return(n?.scope_??By()).drafts_.push(i),a.callbacks_=n?.callbacks_??[],a.key_=r,n&&r!==void 0?eb(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 hb(e){return oy(e)||Zv(10,e),gb(e)}function gb(e){if(!sy(e)||jy(e))return e;let t=e[Yv],n,r=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,n=Dy(e,t.scope_.immer_.useStrictShallowCopy_),r=t.scope_.immer_.shouldUseStrictIteration()}else n=Dy(e,!0);return dy(n,(e,t)=>{hy(n,e,gb(t))},r),t&&(t.finalized_=!1),n}function _b(){Xv.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=wy(my(e,n.key_)),i=my(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||py(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=my(o,e,c),f=my(s,e,c),p=l?py(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===qv?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(yy(e))return new Set(Array.from(e).map(u));let t=Object.create($v(e));for(let n in e)t[n]=u(e[n]);return py(e,Jv)&&(t[Jv]=e[Jv]),t}function d(e){return oy(e)?u(e):e}Ry(Ny,{applyPatches_:l,generatePatches_:i,generateReplacementPatches_:c,getPath:e})}globalThis.Iterator?.from;var vb=new pb,yb=vb.produce,bb=vb.produceWithPatches.bind(vb),xb=vb.applyPatches.bind(vb),Sb=1e3;function Cb(e,t){if(e.add(t),e.size>Sb){let t=e.values().next().value;t!==void 0&&e.delete(t)}}function wb(e){let{enablePatches:t=!1}=e;t&&_b();let n=Rv(),r=e.initialValue,i=new Set;return{on:n.on,value:()=>r,patch:(e,t=Kv())=>{i.has(t)||(_b(),r=xb(r,e),Cb(i,t),n.emit(`updated`,r,void 0,t))},mutate:(e,a=Kv())=>{if(!i.has(a)){if(Cb(i,a),t){let[t,i]=bb(r,e);if(t===r)return;r=t,n.emit(`updated`,r,i,a)}else{let t=yb(r,e);if(t===r)return;r=t,n.emit(`updated`,r,void 0,a)}}},syncIds:i}}var Tb=typeof self==`object`?self:globalThis,Eb=new Set([`Error`,`EvalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`,`AggregateError`]),Db=new Set([`Boolean`,`Number`,`String`,`Int8Array`,`Uint8Array`,`Uint8ClampedArray`,`Int16Array`,`Uint16Array`,`Int32Array`,`Uint32Array`,`Float16Array`,`Float32Array`,`Float64Array`,`BigInt64Array`,`BigUint64Array`]);function Ob(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=Eb.has(e)?Tb[e]:void 0;return n(new(r??Tb.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`&&Db.has(a))return n(new Tb[a](o),i);throw TypeError(`unable to deserialize unsafe or unknown type: ${String(a)}`)};return r}function kb(e){return Ob(new Map,e)(0)}var Ab=``,{toString:jb}={},{keys:Mb}=Object;function Nb(e){let t=typeof e;if(t!==`object`||!e)return[0,t];let n=jb.call(e).slice(8,-1);switch(n){case`Array`:return[1,Ab];case`Object`:return[2,Ab];case`Date`:return[3,Ab];case`RegExp`:return[4,Ab];case`Map`:return[5,Ab];case`Set`:return[6,Ab];case`DataView`:return[1,n]}return n.includes(`Array`)?[1,n]:n.includes(`Error`)?[7,n]:[2,n]}function Pb([e,t]){return e===0&&(t===`function`||t===`symbol`)}function Fb(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]=Nb(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 Mb(r))(e||!Pb(Nb(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||!(Pb(Nb(n))||Pb(Nb(i))))&&t.push([a(n),a(i)]);return n}case 6:{let t=[],n=i([o,t],r);for(let n of r)(e||!Pb(Nb(n)))&&t.push(a(n));return n}}let{message:c}=r;return i([o,{name:s,message:c}],r)};return a}function Ib(e,t={}){let n=[];return Fb(!(t.json||t.lossy),!!t.json,new Map,n)(e),n}var{parse:Lb,stringify:Rb}=JSON,zb={json:!0,lossy:!0};function Bb(e){return kb(Lb(e))}function Vb(e){return Rb(Ib(e,zb))}function Hb(e){return kb(e)}function Ub(e){return Vb(e)}function Wb(e){return Bb(e)}var Gb=256,Kb=class extends Error{name=`StreamClosedError`};function qb(e={}){let t=e.id??Kv(),n=Math.max(0,e.replayWindow??0),r=Rv(),i=new AbortController,a=[],o=!1,s=0;function c(e){if(o)throw new Kb(`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=Yb(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 Jb(e={}){let t=e.id??Kv(),n=Math.max(1,e.highWaterMark??Gb),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 Yb(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 Xb=128;function Zb(e){return e.replace(/[^\w-]+/g,`_`).slice(0,Xb)}var Qb=`modulepreload`,$b=function(e,t){return new URL(e,t).href},ex={},tx=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=$b(t,n),t=s(t),t in ex)return;ex[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`:Qb,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)})},nx=`__connection.json`,rx=`__DEVFRAME_CONNECTION__`,ix=`x-birpc-session`,ax=`__rpc-dump/index.json`,ox=`devframe:services`,sx=`devframe_otp`,cx=`devframe_auth_token`;iv.postMessage.remoteAssetsError;var lx=class{cacheMap=new Map;options;keySerializer;constructor(e){this.options=e,this.keySerializer=e.keySerializer||(e=>Lv(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()}},ux=sv({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 dx(e){if(e.agent&&e.jsonSerializable===!1)throw ux.DF0019({name:e.name});e.agent&&!e.jsonSerializable&&(e.jsonSerializable=!0)}async function fx(e,t){let n=e[`~standard`].validate(t);return n instanceof Promise?await n:n}function px(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 mx(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 _x(e,t){let n=e.handler;if(!n){let r=await gx(e,t);if(!r.handler)throw ux.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 mx(e.name,r,t),o=await a(...n);return await hx(e.name,i,o)}}var vx=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 _x(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 ux.DF0021({name:e.name});dx(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 ux.DF0022({name:e.name});dx(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 _x(this.definitions.get(e),this.context)}getSchema(e){let t=this.definitions.get(e);if(!t)throw ux.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 yx(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 xx(t,`undefined`,r,e);return n}return i!==null&&bx(i,r,e,t),n})}function bx(e,t,n,r){if(typeof e==`bigint`)throw xx(r,`BigInt`,t,n);if(typeof e!=`object`)return;if(e instanceof Map)throw xx(r,`Map`,t,n);if(e instanceof Set)throw xx(r,`Set`,t,n);if(e instanceof Date)throw xx(r,`Date`,t,n);if(Array.isArray(e))return;let i=Object.getPrototypeOf(e);if(i!==null&&i!==Object.prototype)throw xx(r,e.constructor?.name??`class instance`,t,n)}function xx(e,t,n,r){let i=Sx(n,r);return ux.DF0020({name:e||``,type:t,path:i})}function Sx(e,t){return Array.isArray(e)?`[${t}]`:t===``?``:t}var Cx=`__DEVFRAME_CONNECTION_META__`,wx=`__DEVFRAME_CONNECTION_AUTH_TOKEN__`;function Tx(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 Ex(){return Tx(rx)}function Dx(){return Tx(Cx)}function Ox(e){if(e)return e;try{let e=localStorage.getItem(wx);if(e)return e}catch{}return Tx(wx)}function kx(e){globalThis[rx]=e,globalThis[Cx]={...e.connectionMeta,baseUrl:e.metaBaseUrl},e.authToken&&Ax(e.authToken)}function Ax(e){try{localStorage.setItem(wx,e)}catch{}globalThis[wx]=e;let t=Ex();t&&(globalThis[rx]={...t,authToken:e})}function jx(e){let t=Uv(nx,e);try{return new URL(t,globalThis.location?.href).href}catch{return t}}function Mx(e,t){return t&&t!==e.authToken?{...e,authToken:t}:e}function Nx(){let e=Ex();if(e)return Mx(e,Ox()??e.authToken??e.connectionMeta.authToken);let t=Dx();if(t)return{connectionMeta:t,metaBaseUrl:t.baseUrl??jx(`./`),authToken:Ox(t.authToken)}}async function Px(e={}){if(e.connection){let t=Mx(e.connection,Ox(e.authToken??e.connection.authToken??e.connection.connectionMeta.authToken));return kx(t),t}let t=Array.isArray(e.baseURL)?e.baseURL:[e.baseURL??`./`];if(e.connectionMeta){let n={connectionMeta:e.connectionMeta,metaBaseUrl:jx(t[0]??`./`),authToken:Ox(e.authToken??e.connectionMeta.authToken)};return kx(n),n}let n=Nx();if(n){let t=Mx(n,Ox(e.authToken??n.authToken??n.connectionMeta.authToken));return kx(t),t}let r=[];for(let n of t){let t=Uv(nx,n),i=jx(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:Ox(e.authToken??r.authToken)};return kx(o),o}catch(e){r.push(e)}}throw Error(`Failed to get connection meta from ${t.join(`, `)}`,{cause:r})}var Fx=class extends Error{name=`DevframeConnectionError`;kind;constructor(e,t,n){super(t,n),this.kind=e}};function Ix(e=sx){try{let t=globalThis.location?.hash?.replace(/^#/,``)??``;return new URLSearchParams(t).get(e)||void 0}catch{return}}function Lx(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 Rx(e=sx){let t=Ix(e);return t&&Lx(e),t}async function zx(e,t={}){let n=Rx(t.param??`devframe_otp`);return n?e.isTrusted?!0:e.requestTrustWithCode(n):!1}function Bx(e){let t={},n=new WeakMap,r,i=()=>(r??=e.sharedState.get(ox,{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 Vx(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:iv.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:iv.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=wb({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(iv.client.isTrustedUpdated,e=>{e&&!n&&(n=!0,d())})}})}}}var Hx=new Map;function Ux(e=Hx){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?yx(n,r??``):`s:${Ub(n)}`},deserialize:e=>{let n=e.startsWith(`s:`)?Wb(e.slice(2)):JSON.parse(e);return n.t===`q`&&n.i&&n.m&&t.set(n.i,n.m),n}}}function Wx(){}function Gx(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 Kx(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 qx(e){let{onConnected:t=Wx,onError:n=Wx,onDisconnected:r=Wx,definitions:i,fetch:a=globalThis.fetch.bind(globalThis)}=e,o=e.url;e.authToken&&(o=`${o}${o.includes(`?`)?`&`:`?`}${cx}=${encodeURIComponent(e.authToken)}`);let s=Ux(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 v(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=Gx(r);if(!e)break;r=e.rest;let{event:t,data:n}=Kx(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 v(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`,[ix]: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 Jx(e,t){let{channel:n,rpcOptions:r={}}=t;return _v(e,{...n,timeout:-1,...r,proxify:!1})}function Yx(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(iv.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 Fx(`connection`,`[devframe] Not connected to the devframe server`,{cause:u??void 0}):l===`unauthorized`?new Fx(`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(iv.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 Fx(`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(iv.client.error,n,t),r(n)})})}let _=new Map;for(let e of r.jsonSerializableMethods??[])_.set(e,{jsonSerializable:!0});let v=e.createChannel({definitions:_,onError(e){f(`error`,e),i.emit(iv.client.connectionError,e),m(new Fx(`connection`,`[devframe] Connection to the devframe server failed`,{cause:e}))},onDisconnected(){l!==`error`&&f(`disconnected`),m(new Fx(`connection`,`[devframe] Disconnected from the devframe server`,{cause:u??void 0}))}}),y=Jx(a.functions,{channel:v,rpcOptions:o});a.register({name:iv.broadcast.authRevoked,type:`event`,handler:()=>{c=!1;let e=new Fx(`auth`,`[devframe] The devframe server revoked this client's trust`);f(`unauthorized`,e),i.emit(iv.client.connectionError,e),m(e),i.emit(iv.client.isTrustedUpdated,!1)}});let b=n;async function x(e){b=e;let t=await y.$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 Fx(`auth`,`[devframe] The devframe server refused this client's credentials`);f(`unauthorized`,e),i.emit(iv.client.connectionError,e)}return i.emit(iv.client.isTrustedUpdated,c),t.isTrusted}async function S(e){let t=(await y.$call(`anonymous:devframe:auth:exchange`,{code:e,ua:navigator.userAgent,origin:location.origin}))?.authToken??null;return t&&(b=t,c=!0,d.resolve(!0),f(`connected`),i.emit(iv.client.isTrustedUpdated,!0)),t}async function ee(e={}){await y.$call(`anonymous:devframe:auth:request-code`,{ua:navigator.userAgent,origin:location.origin,...e.reissue?{reissue:!0}:{}})}async function C(){return c?!0:x(b??``)}async function w(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:C,requestTrustWithToken:x,requestTrustWithCode:S,requestAuthCode:ee,ensureTrusted:w,call:(...e)=>{let t=String(e[0]),n=h();return n?(i.emit(iv.client.error,n,t),Promise.reject(n)):g(y.$call(...e),t)},callEvent:(...e)=>{let t=h();if(t){i.emit(iv.client.error,t,String(e[0]));return}return y.$callEvent(...e)},callOptional:(...e)=>{let t=String(e[0]),n=h();return n?(i.emit(iv.client.error,n,t),Promise.reject(n)):g(y.$callOptional(...e),t)},close:()=>{v.close()}}}function Xx(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 Zx(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},sseOptions:s={},callTimeout:c=0}=e,l=Xx(n.sse,r??`./`,location);return Yx({transport:`sse`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>qx({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 Qx(e){let{name:t,message:n,cause:r,...i}=e,a=r instanceof Error?r:$x(r)?Qx(r):r,o=a===void 0?Error(n):Error(n,{cause:a});return o.name=t,Object.assign(o,i),o}function $x(e){return typeof e==`object`&&!!e&&typeof e.message==`string`&&typeof e.name==`string`}function eS(e){return typeof e==`object`&&!!e&&e.type===`static`&&typeof e.path==`string`}function tS(e){return typeof e==`object`&&!!e&&e.type===`query`&&typeof e.records==`object`&&e.records!==null}function nS(e){return typeof e==`object`&&!!e&&(`output`in e||`error`in e)}function rS(e){if(e.error)throw Qx(e.error);return e.output}function iS(e){return e.some(e=>e!=null)}function aS(e){return typeof e==`object`&&e&&`serialization`in e&&`data`in e?e.data:e}function oS(e,t){let n=new Map,r=new Map;function i(e,t){return t===`structured-clone`&&Array.isArray(e)?Hb(e):e}function a(e,t){return i(aS(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 nS(r)?rS(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(eS(r)){if(iS(n))throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`);return await o(r)}if(tS(r)){let e=Lv(n),i=r.records[e];if(i)return rS(await s(i,r.serialization));if(r.fallback)return rS(await s(r.fallback,r.serialization));throw Error(`[devframe-rpc] No dump match for "${t}" with args: ${JSON.stringify(n)}`)}if(!iS(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 sS(e){let t=oS(await e.fetchJsonFromBases(ax),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 cS=``;function lS(e,t){return`${e}${cS}${t}`}function uS(e){let t=new Map,n=new Map;e.client.register({name:iv.broadcast.streamingChunk,type:`event`,handler(e,n,r,i){t.get(lS(e,n))?._push(r,i)}}),e.client.register({name:iv.broadcast.streamingEnd,type:`event`,handler(e,n,r){let i=lS(e,n),a=t.get(i);a&&(a._end(r),t.delete(i))}}),e.client.register({name:iv.broadcast.streamingUploadCancel,type:`event`,handler(e,t){let r=lS(e,t),i=n.get(r);i&&(i.abort(`server cancelled upload`),n.delete(r))}}),e.events.on(iv.client.isTrustedUpdated,n=>{if(n)for(let[n,r]of t){if(r.cancelled||r.done)continue;let t=n.indexOf(cS);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=lS(n,r),o=t.get(a);if(o)return o;let s=Jb({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(iv.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=lS(t,r),a=n.get(i);if(a)return a;let o=qb({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 dS(){}var fS=new Map;function pS(e){let t=e.url;e.authToken&&(t=`${t}?${cx}=${encodeURIComponent(e.authToken)}`);let n=new WebSocket(t),{onConnected:r=dS,onError:i=dS,onDisconnected:a=dS,definitions:o=fS}=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=Ux(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 mS(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 Wv(a,/^https/i.test(a)?`wss://`:`ws://`);let o=new URL(a,r);return o.protocol=i,o.href}function hS(e){let{authToken:t,connectionMeta:n,metaBaseUrl:r,events:i,clientRpc:a,rpcOptions:o={},wsOptions:s={},callTimeout:c=0}=e,l=mS(n.websocket,r??`./`,location);return Yx({transport:`websocket`,authToken:t,connectionMeta:n,events:i,clientRpc:a,rpcOptions:o,callTimeout:c,createChannel:e=>pS({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 gS(e){return e.includes(`:`)}function _S(e,t){return gS(t)?t:`${e}:${t}`}function vS(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 yS(e,t,n){let r=`devframe:settings:${n}:${t}`,i;function a(){return i||=e.sharedState.get(r,{initialValue:{}}),i}return vS(a)}function bS(e,t){return{global:yS(e,t,`global`),project:yS(e,t,`project`)}}function xS(e,t){return{namespace:t,base:e,rpc:{namespace:t,register(n){if(gS(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(_S(t,n),...r)),callEvent:((n,...r)=>e.callEvent(_S(t,n),...r)),callOptional:((n,...r)=>e.callOptional(_S(t,n),...r)),sharedState:((n,r)=>e.sharedState.get(_S(t,n),r)),streaming:{subscribe:(n,r,i)=>e.streaming.subscribe(_S(t,n),r,i),upload:(n,r)=>e.streaming.upload(_S(t,n),r)}},settings:bS(e,t),scope:e.scope}}function SS(){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 CS(e,t={}){let n=t.modelContext??SS();if(!n)return()=>{};let r=n,i=new Map,a=new Map;function o(t,n){let o=Zb(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=vv(t.type,n),u=r.registerTool({name:o,description:n.description,inputSchema:xv(t.args),annotations:{title:n.title??t.name,readOnlyHint:l===`read`,destructiveHint:l===`destructive`},execute:n=>wS(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 wS(e,t,n){try{let r=Cv(n,e.args?.length);return{content:[{type:`text`,text:TS(await(await _x(e,t))(...r))}]}}catch(e){return{isError:!0,content:[{type:`text`,text:ES(e)}]}}}function TS(e){return e===void 0?`undefined`:typeof e==`string`?e:JSON.stringify(e,null,2)}function ES(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 DS(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 OS(e={}){let{baseURL:t=`./`,rpcOptions:n={},cacheOptions:r=!1}=e,i=Rv(),a=Array.isArray(t)?t:[t],o=await Px(e),{connectionMeta:s,metaBaseUrl:c,authToken:l}=o,u=a[0]??`./`;try{u=new URL(`.`,c).href}catch{}let d=new lx({functions:[],...typeof e.cacheOptions==`object`?e.cacheOptions:{}}),f={rpc:void 0},p=new vx(f),m=e.webmcp===!1?void 0:CS(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(Uv(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 v={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)}}},y=DS(e.transport??`auto`,s),b=y===`static`?await sS({fetchJsonFromBases:_}):y===`sse`?Zx({...v,sseOptions:e.sseOptions}):hS({...v,wsOptions:e.wsOptions}),x;try{x=new BroadcastChannel(`devframe-auth`)}catch{}let S,ee=!1;function C(e){return((...t)=>ee||!S?e(...t):S.then(()=>e(...t)))}function w(){g=!0;try{h?.(),m?.()}finally{try{x?.close()}finally{b.close?.()}}}let T={events:i,get isTrusted(){return b.isTrusted},get status(){return b.status},get connectionError(){return b.connectionError},get transport(){return b.transport??y},get connection(){return o},connectionMeta:s,ensureTrusted:b.ensureTrusted,requestTrust:b.requestTrust,requestTrustWithToken:async e=>(Ax(e),o={...o,authToken:e},b.requestTrustWithToken(e)),requestTrustWithCode:async e=>{let t=await b.requestTrustWithCode(e);if(!t)return!1;Ax(t),o={...o,authToken:t};try{x?.postMessage({type:`auth-update`,authToken:t})}catch{}return!0},requestAuthCode:e=>b.requestAuthCode(e),call:C(b.call),callEvent:C(b.callEvent),callOptional:C(b.callOptional),client:p,sharedState:void 0,services:void 0,streaming:void 0,cacheManager:d,scope:void 0,close:w};T.sharedState=Vx(T),T.streaming=uS(T),T.services=Bx(T);let te=new Map;T.scope=(e=>{if(!e)return T;let t=te.get(e);return t||(t=xS(T,e),te.set(e,t)),t}),f.rpc=T;function E(){try{return typeof window<`u`&&window.self===window.top}catch{return!1}}async function ne(){if(e.simpleAuth!==!1&&E()&&typeof globalThis.prompt==`function`)for(await T.requestAuthCode().catch(()=>{});!T.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 T.requestTrustWithCode(t))return}}async function D(){let t=await b.requestTrust(),n=e.otpParam??`devframe_otp`,r=n?await zx(T,{param:n}):!1;t||r||T.isTrusted||await ne()}return S=D().then(()=>{ee=!0},()=>{ee=!0}),s.mcp&&tx(async()=>{let{setupBrowserAgentRpcBridge:e}=await import(`./browser-agent-rpc-BXhoSh1z-DT7_jkxB.js`);return{setupBrowserAgentRpcBridge:e}},[],import.meta.url).then(({setupBrowserAgentRpcBridge:e})=>{g||(h=e(T))}).catch(()=>{}),x&&(x.onmessage=e=>{e.data?.type===`auth-update`&&e.data.authToken&&T.requestTrustWithToken(e.data.authToken)}),T}var kS=OS,AS=class e{rpc=Ug(null);navigate=Bg();meta=H(null);componentCount=H(0);routeCount=H(0);signalCount=H(0);providerCount=H(0);storeCount=H(0);constructor(){Bs(()=>{let e=this.rpc();if(!e)return;let t=e.scope(`ng-devtools`);t.rpc.call(`build-meta`).then(e=>this.meta.set(e)).catch(()=>{}),t.rpc.call(`get-components`).then(e=>this.componentCount.set(e.length)).catch(()=>{}),t.rpc.call(`get-routes`).then(e=>this.routeCount.set(e.length)).catch(()=>{}),t.rpc.call(`get-signals`).then(e=>this.signalCount.set(e.length)).catch(()=>{}),t.rpc.call(`get-providers`).then(e=>this.providerCount.set(e.length)).catch(()=>{}),t.rpc.call(`get-ngrx-store`).then(e=>this.storeCount.set(e.length)).catch(()=>{})})}static ɵfac=function(t){return new(t||e)};static ɵcmp=Rp({type:e,selectors:[[`app-dashboard`]],inputs:{rpc:[1,`rpc`]},outputs:{navigate:`navigate`},decls:56,vars:9,consts:[[1,`grid`],[1,`card`],[1,`card`,`clickable`,3,`click`],[1,`big`],[1,`sub`]],template:function(e,t){e&1&&(J(0,`div`,0)(1,`div`,1)(2,`h3`),Z(3,`Project`),Y(),J(4,`dl`)(5,`dt`),Z(6,`Name`),Y(),J(7,`dd`),Z(8),Y(),J(9,`dt`),Z(10,`Angular`),Y(),J(11,`dd`),Z(12),Y(),J(13,`dt`),Z(14,`TypeScript`),Y(),J(15,`dd`),Z(16),Y(),J(17,`dt`),Z(18,`SSR`),Y(),J(19,`dd`),Z(20),Y()()(),J(21,`div`,2),Hh(`click`,function(){return t.navigate.emit(`components`)}),J(22,`h3`),Z(23,`Components`),Y(),J(24,`p`,3),Z(25),Y(),J(26,`p`,4),Z(27,`discovered in source`),Y()(),J(28,`div`,2),Hh(`click`,function(){return t.navigate.emit(`routes`)}),J(29,`h3`),Z(30,`Routes`),Y(),J(31,`p`,3),Z(32),Y(),J(33,`p`,4),Z(34,`registered paths`),Y()(),J(35,`div`,2),Hh(`click`,function(){return t.navigate.emit(`signals`)}),J(36,`h3`),Z(37,`Signals`),Y(),J(38,`p`,3),Z(39),Y(),J(40,`p`,4),Z(41,`reactive primitives`),Y()(),J(42,`div`,2),Hh(`click`,function(){return t.navigate.emit(`injectors`)}),J(43,`h3`),Z(44,`Injectors`),Y(),J(45,`p`,3),Z(46),Y(),J(47,`p`,4),Z(48,`DI providers`),Y()(),J(49,`div`,2),Hh(`click`,function(){return t.navigate.emit(`store`)}),J(50,`h3`),Z(51,`NgRx Store`),Y(),J(52,`p`,3),Z(53),Y(),J(54,`p`,4),Z(55,`store entries`),Y()()()),e&2&&(G(8),Q(t.meta()?.projectName??`…`),G(4),Q(t.meta()?.angularVersion??`…`),G(4),Q(t.meta()?.typescript??`…`),G(4),Q(t.meta()?.ssr?`Yes`:`No`),G(5),Q(t.componentCount()),G(7),Q(t.routeCount()),G(7),Q(t.signalCount()),G(7),Q(t.providerCount()),G(7),Q(t.storeCount()))},styles:[`.grid[_ngcontent-%COMP%] { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); - gap: 16px; - } - .card[_ngcontent-%COMP%] { - background: #18181b; - border: 1px solid #27272a; - border-radius: 10px; - padding: 20px; - } - .card.clickable[_ngcontent-%COMP%] { - cursor: pointer; - transition: border-color 0.15s; - } - .card.clickable[_ngcontent-%COMP%]:hover { - border-color: var(--%NS%accent); - } - h3[_ngcontent-%COMP%] { - font-size: 13px; - text-transform: uppercase; - color: #71717a; - margin-bottom: 12px; - letter-spacing: 0.05em; - } - dl[_ngcontent-%COMP%] { - display: grid; - grid-template-columns: auto 1fr; - gap: 6px 12px; - font-size: 14px; - } - dt[_ngcontent-%COMP%] { - color: #a1a1aa; - } - dd[_ngcontent-%COMP%] { - color: #e4e4e7; - font-weight: 500; - } - .big[_ngcontent-%COMP%] { - font-size: 36px; - font-weight: 700; - color: var(--%NS%accent); - } - .sub[_ngcontent-%COMP%] { - font-size: 13px; - color: #71717a; - margin-top: 4px; - }`]})},jS=(e,t)=>t.selector,MS=(e,t)=>t.token+t.line;function NS(e,t){e&1&&(J(0,`p`,3),Z(1,`Scanning components…`),Y())}function PS(e,t){e&1&&(J(0,`p`,3),Z(1,`No components found.`),Y())}function FS(e,t){if(e&1&&(J(0,`div`,10)(1,`span`,11),Z(2,`Inputs:`),Y(),Z(3),Y()),e&2){let e=X().$implicit;G(3),$(` `,e.inputs.join(`, `),` `)}}function IS(e,t){if(e&1&&(J(0,`div`,10)(1,`span`,11),Z(2,`Outputs:`),Y(),Z(3),Y()),e&2){let e=X().$implicit;G(3),$(` `,e.outputs.join(`, `),` `)}}function LS(e,t){if(e&1){let e=Lh();J(0,`li`,7),Hh(`click`,function(){let t=co(e).$implicit;return lo(X(2).select(t))}),J(1,`div`,8),Z(2),Y(),J(3,`div`,9),Z(4),Y(),K(5,FS,4,1,`div`,10),K(6,IS,4,1,`div`,10),Y()}if(e&2){let e=t.$implicit;G(2),$(`<`,e.selector,`>`),G(2),Q(e.file),G(),q(e.inputs.length?5:-1),G(),q(e.outputs.length?6:-1)}}function RS(e,t){if(e&1&&(J(0,`ul`,4),hh(1,LS,7,4,`li`,6,jS),Y()),e&2){let e=X();G(),_h(e.filtered())}}function zS(e,t){if(e&1&&(J(0,`dt`),Z(1,`Inputs`),Y(),J(2,`dd`),Z(3),Y()),e&2){let e=X(2);G(3),Q(e.selected().inputs.join(`, `))}}function BS(e,t){if(e&1&&(J(0,`dt`),Z(1,`Outputs`),Y(),J(2,`dd`),Z(3),Y()),e&2){let e=X(2);G(3),Q(e.selected().outputs.join(`, `))}}function VS(e,t){if(e&1&&(J(0,`span`,17),Z(1),Y()),e&2){let e=X().$implicit;G(),$(`→ `,e.source)}}function HS(e,t){if(e&1&&(J(0,`li`,14)(1,`span`,15),Z(2),Y(),J(3,`span`,16),Z(4),Y(),K(5,VS,2,1,`span`,17),Y()),e&2){let e=t.$implicit;G(2),Q(e.token),G(2),Q(e.type),G(),q(e.source&&e.source!==`class`&&e.source!==`providers array`?5:-1)}}function US(e,t){if(e&1&&(J(0,`h4`),Z(1,`Injected Providers`),Y(),J(2,`ul`,13),hh(3,HS,6,3,`li`,14,MS),Y()),e&2){let e=X(2);G(3),_h(e.selectedProviders())}}function WS(e,t){e&1&&(J(0,`p`,12),Z(1,`No injected providers detected.`),Y())}function GS(e,t){if(e&1&&(J(0,`aside`,5)(1,`h3`),Z(2),Y(),J(3,`dl`)(4,`dt`),Z(5,`File`),Y(),J(6,`dd`),Z(7),Y(),K(8,zS,4,1),K(9,BS,4,1),J(10,`dt`),Z(11,`Standalone`),Y(),J(12,`dd`),Z(13),Y()(),K(14,US,5,0)(15,WS,2,0,`p`,12),Y()),e&2){let e=X();G(2),$(`<`,e.selected().selector,`>`),G(5),Q(e.selected().file),G(),q(e.selected().inputs.length?8:-1),G(),q(e.selected().outputs.length?9:-1),G(4),Q(e.selected().isStandalone?`Yes`:`No`),G(),q(e.selectedProviders().length?14:15)}}var KS=class e{rpc=Ug(null);components=H([]);allProviders=H([]);filter=H(``);loading=H(!1);selected=H(null);selectedProviders=H([]);filtered=H([]);constructor(){Bs(()=>{let e=this.filter().toLowerCase(),t=this.components();this.filtered.set(e?t.filter(t=>t.selector.includes(e)||t.file.includes(e)):t)}),Bs(()=>{this.rpc()&&this.refresh()})}async refresh(){let e=this.rpc();if(e){this.loading.set(!0);try{let t=e.scope(`ng-devtools`),[n,r]=await Promise.all([t.rpc.call(`get-components`),t.rpc.call(`get-providers`)]);this.components.set(n),this.allProviders.set(r);let i=this.selected();i&&this.selectedProviders.set(r.filter(e=>e.file===i.file))}finally{this.loading.set(!1)}}}select(e){this.selected.set(e),this.selectedProviders.set(this.allProviders().filter(t=>t.file===e.file));let t=this.rpc();t&&t.scope(`ng-devtools`).rpc.callEvent(`select-component`,e.selector)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Rp({type:e,selectors:[[`app-component-tree`]],inputs:{rpc:[1,`rpc`]},decls:8,vars:3,consts:[[1,`toolbar`],[`type`,`text`,`placeholder`,`Filter components…`,3,`input`,`value`],[3,`click`],[1,`muted`],[`role`,`list`,1,`component-list`],[1,`detail`],[1,`component-item`],[1,`component-item`,3,`click`],[1,`selector`],[1,`file`],[1,`io`],[1,`label`],[1,`no-providers`],[`role`,`list`,1,`provider-list`],[1,`provider-item`],[1,`provider-token`],[1,`provider-type`],[1,`provider-source`]],template:function(e,t){e&1&&(J(0,`div`,0)(1,`input`,1),Hh(`input`,function(e){return t.filter.set(e.target.value)}),Y(),J(2,`button`,2),Hh(`click`,function(){return t.refresh()}),Z(3,`Refresh`),Y()(),K(4,NS,2,0,`p`,3)(5,PS,2,0,`p`,3)(6,RS,3,0,`ul`,4),K(7,GS,16,6,`aside`,5)),e&2&&(G(),Rh(`value`,t.filter()),G(3),q(t.loading()?4:t.filtered().length===0?5:6),G(3),q(t.selected()?7:-1))},styles:[`.toolbar[_ngcontent-%COMP%] { - display: flex; - gap: 8px; - margin-bottom: 16px; - } - input[_ngcontent-%COMP%] { - flex: 1; - padding: 8px 12px; - background: #18181b; - border: 1px solid #27272a; - border-radius: 6px; - color: #e4e4e7; - font-size: 14px; - outline: none; - } - input[_ngcontent-%COMP%]:focus { - border-color: var(--%NS%accent); - } - button[_ngcontent-%COMP%] { - padding: 8px 16px; - background: #3f3f46; - border: none; - border-radius: 6px; - color: #e4e4e7; - cursor: pointer; - font-size: 13px; - } - button[_ngcontent-%COMP%]:hover { - background: #52525b; - } - .muted[_ngcontent-%COMP%] { - color: #71717a; - font-size: 14px; - } - .component-list[_ngcontent-%COMP%] { - list-style: none; - padding: 0; - display: flex; - flex-direction: column; - gap: 8px; - } - .component-item[_ngcontent-%COMP%] { - background: #18181b; - border: 1px solid #27272a; - border-radius: 8px; - padding: 12px 16px; - cursor: pointer; - transition: border-color 0.15s; - } - .component-item[_ngcontent-%COMP%]:hover { - border-color: var(--%NS%accent); - } - .selector[_ngcontent-%COMP%] { - font-family: monospace; - font-size: 15px; - color: var(--%NS%accent); - font-weight: 600; - } - .file[_ngcontent-%COMP%] { - font-size: 12px; - color: #71717a; - margin-top: 2px; - } - .io[_ngcontent-%COMP%] { - font-size: 13px; - color: #a1a1aa; - margin-top: 4px; - } - .io[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] { - color: #71717a; - } - .detail[_ngcontent-%COMP%] { - margin-top: 16px; - padding: 16px; - background: #18181b; - border: 1px solid #27272a; - border-radius: 8px; - } - .detail[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] { - font-family: monospace; - color: var(--%NS%accent); - margin-bottom: 12px; - } - dl[_ngcontent-%COMP%] { - display: grid; - grid-template-columns: auto 1fr; - gap: 4px 12px; - font-size: 13px; - margin-bottom: 16px; - } - dt[_ngcontent-%COMP%] { - color: #71717a; - } - dd[_ngcontent-%COMP%] { - color: #e4e4e7; - } - h4[_ngcontent-%COMP%] { - font-size: 12px; - text-transform: uppercase; - letter-spacing: 0.05em; - color: #71717a; - margin-bottom: 8px; - } - .provider-list[_ngcontent-%COMP%] { - list-style: none; - padding: 0; - display: flex; - flex-direction: column; - gap: 6px; - } - .provider-item[_ngcontent-%COMP%] { - display: flex; - align-items: center; - gap: 8px; - padding: 6px 10px; - background: #09090b; - border: 1px solid #27272a; - border-radius: 6px; - font-size: 13px; - } - .provider-token[_ngcontent-%COMP%] { - font-family: monospace; - color: #e4e4e7; - font-weight: 600; - } - .provider-type[_ngcontent-%COMP%] { - font-size: 11px; - padding: 1px 6px; - border-radius: 4px; - background: #3f3f46; - color: #a1a1aa; - } - .provider-source[_ngcontent-%COMP%] { - font-size: 12px; - color: #71717a; - } - .no-providers[_ngcontent-%COMP%] { - font-size: 13px; - color: #52525b; - }`]})},qS=(e,t)=>t.path+t.file;function JS(e,t){e&1&&(J(0,`p`,3),Z(1,`Scanning routes…`),Y())}function YS(e,t){e&1&&(J(0,`p`,3),Z(1,`No routes found.`),Y())}function XS(e,t){if(e&1&&(J(0,`tr`)(1,`td`,5),Z(2),Y(),J(3,`td`),Z(4),Y(),J(5,`td`,6),Z(6),Y(),J(7,`td`),Z(8),Y()()),e&2){let e=t.$implicit;G(2),$(`/`,e.path),G(2),Q(e.component??`—`),G(2),Q(e.file),G(2),Q(e.hasChildren?`Yes`:`—`)}}function ZS(e,t){if(e&1&&(J(0,`table`,4)(1,`thead`)(2,`tr`)(3,`th`),Z(4,`Path`),Y(),J(5,`th`),Z(6,`Component`),Y(),J(7,`th`),Z(8,`File`),Y(),J(9,`th`),Z(10,`Children`),Y()()(),J(11,`tbody`),hh(12,XS,9,4,`tr`,null,qS),Y()()),e&2){let e=X();G(12),_h(e.filtered())}}var QS=class e{rpc=Ug(null);routes=H([]);filter=H(``);loading=H(!1);filtered=H([]);constructor(){Bs(()=>{let e=this.filter().toLowerCase(),t=this.routes();this.filtered.set(e?t.filter(t=>t.path.includes(e)||t.file.includes(e)):t)}),Bs(()=>{this.rpc()&&this.refresh()})}async refresh(){let e=this.rpc();if(e){this.loading.set(!0);try{let t=await e.scope(`ng-devtools`).rpc.call(`get-routes`);this.routes.set(t)}finally{this.loading.set(!1)}}}static ɵfac=function(t){return new(t||e)};static ɵcmp=Rp({type:e,selectors:[[`app-route-inspector`]],inputs:{rpc:[1,`rpc`]},decls:7,vars:2,consts:[[1,`toolbar`],[`type`,`text`,`placeholder`,`Filter routes…`,3,`input`,`value`],[3,`click`],[1,`muted`],[`role`,`table`],[1,`path`],[1,`file`]],template:function(e,t){e&1&&(J(0,`div`,0)(1,`input`,1),Hh(`input`,function(e){return t.filter.set(e.target.value)}),Y(),J(2,`button`,2),Hh(`click`,function(){return t.refresh()}),Z(3,`Refresh`),Y()(),K(4,JS,2,0,`p`,3)(5,YS,2,0,`p`,3)(6,ZS,14,0,`table`,4)),e&2&&(G(),Rh(`value`,t.filter()),G(3),q(t.loading()?4:t.filtered().length===0?5:6))},styles:[`.toolbar[_ngcontent-%COMP%] { - display: flex; - gap: 8px; - margin-bottom: 16px; - } - input[_ngcontent-%COMP%] { - flex: 1; - padding: 8px 12px; - background: #18181b; - border: 1px solid #27272a; - border-radius: 6px; - color: #e4e4e7; - font-size: 14px; - outline: none; - } - input[_ngcontent-%COMP%]:focus { - border-color: var(--%NS%accent); - } - button[_ngcontent-%COMP%] { - padding: 8px 16px; - background: #3f3f46; - border: none; - border-radius: 6px; - color: #e4e4e7; - cursor: pointer; - font-size: 13px; - } - button[_ngcontent-%COMP%]:hover { - background: #52525b; - } - .muted[_ngcontent-%COMP%] { - color: #71717a; - font-size: 14px; - } - table[_ngcontent-%COMP%] { - width: 100%; - border-collapse: collapse; - font-size: 14px; - } - thead[_ngcontent-%COMP%] { - position: sticky; - top: 0; - } - th[_ngcontent-%COMP%] { - text-align: left; - padding: 8px 12px; - background: #18181b; - color: #71717a; - font-size: 12px; - text-transform: uppercase; - letter-spacing: 0.05em; - border-bottom: 1px solid #27272a; - } - td[_ngcontent-%COMP%] { - padding: 10px 12px; - border-bottom: 1px solid #1e1e22; - } - tr[_ngcontent-%COMP%]:hover td[_ngcontent-%COMP%] { - background: #18181b; - } - .path[_ngcontent-%COMP%] { - font-family: monospace; - color: var(--%NS%accent); - font-weight: 500; - } - .file[_ngcontent-%COMP%] { - font-size: 12px; - color: #71717a; - }`]})},$S=(e,t)=>t.name+t.file+t.line,eC=(e,t)=>t.kind,tC=(e,t)=>t.id;function nC(e,t){e&1&&(J(0,`div`,3)(1,`p`,4),Z(2,`No signals found.`),Y(),J(3,`p`,5),Z(4,` No signal(), computed(), effect() calls found in source. Runtime graph requires Angular 19+ with the overlay connected. `),Y()())}function rC(e,t){if(e&1&&Z(0),e&2){let e=X().$implicit;$(` · in <`,e.component,`> `)}}function iC(e,t){if(e&1&&(J(0,`div`,8)(1,`div`,9)(2,`span`,10),Z(3),Y(),J(4,`span`,11),Z(5),Y()(),J(6,`div`,12),Z(7),K(8,rC,1,1),Y()()),e&2){let e=t.$implicit,n=X(2);G(2),rg(`background`,n.kindColor(e.kind)),G(),Q(e.kind),G(2),Q(e.name),G(2),Cg(` `,e.file,`:`,e.line,` `),G(),q(e.component?8:-1)}}function aC(e,t){if(e&1&&(J(0,`p`,6),Z(1,`Signals from source scan (static analysis):`),Y(),J(2,`div`,7),hh(3,iC,9,7,`div`,8,$S),Y()),e&2){let e=X();G(3),_h(e.filteredSourceSignals())}}function oC(e,t){if(e&1&&(J(0,`span`,14),Ah(1,`span`,17),Z(2),Y()),e&2){let e=t.$implicit;G(),rg(`background`,e.color),G(),$(` `,e.kind,` `)}}function sC(e,t){e&1&&(J(0,`span`,19),Z(1,`watching`),Y())}function cC(e,t){if(e&1&&(J(0,`div`,20),Z(1),Og(2,`json`),Y()),e&2){let e=X().$implicit;G(),Q(Ag(2,1,e.value))}}function lC(e,t){if(e&1&&Z(0),e&2){let e=X().$implicit;$(` · Deps: `,X(2).getDependencies(e).length,` `)}}function uC(e,t){if(e&1&&Z(0),e&2){let e=X().$implicit;$(` · Consumers: `,X(2).getConsumers(e).length,` `)}}function dC(e,t){if(e&1){let e=Lh();J(0,`div`,18),Hh(`click`,function(){let t=co(e).$implicit;return lo(X(2).selectNode(t))}),J(1,`div`,9)(2,`span`,10),Z(3),Y(),J(4,`span`,11),Z(5),Y(),K(6,sC,2,0,`span`,19),Y(),K(7,cC,3,3,`div`,20),J(8,`div`,12),Z(9),K(10,lC,1,1),K(11,uC,1,1),Y()()}if(e&2){let e=t.$implicit,n=X(2);ig(`selected`,n.selectedNode()?.id===e.id),G(2),rg(`background`,n.kindColor(e.kind)),G(),Q(e.kind),G(2),Q(e.label??`(unnamed)`),G(),q(e.watched?6:-1),G(),q(e.value===void 0?-1:7),G(2),$(` Epoch: `,e.epoch,` `),G(),q(n.getDependencies(e).length?10:-1),G(),q(n.getConsumers(e).length?11:-1)}}function fC(e,t){if(e&1&&(J(0,`dt`),Z(1,`Value`),Y(),J(2,`dd`)(3,`pre`),Z(4),Og(5,`json`),Y()()),e&2){let e=X(3);G(4),Q(Ag(5,1,e.selectedNode().value))}}function pC(e,t){if(e&1&&(J(0,`li`)(1,`span`,21),Z(2),Y(),Z(3),Y()),e&2){let e=t.$implicit,n=X(4);G(),rg(`background`,n.kindColor(e.kind)),G(),Q(e.kind),G(),$(` `,e.label??e.id,` `)}}function mC(e,t){if(e&1&&(J(0,`h4`),Z(1,`Dependencies (producers)`),Y(),J(2,`ul`),hh(3,pC,4,4,`li`,null,tC),Y()),e&2){let e=X(3);G(3),_h(e.getDependencies(e.selectedNode()))}}function hC(e,t){if(e&1&&(J(0,`li`)(1,`span`,21),Z(2),Y(),Z(3),Y()),e&2){let e=t.$implicit,n=X(4);G(),rg(`background`,n.kindColor(e.kind)),G(),Q(e.kind),G(),$(` `,e.label??e.id,` `)}}function gC(e,t){if(e&1&&(J(0,`h4`),Z(1,`Consumers`),Y(),J(2,`ul`),hh(3,hC,4,4,`li`,null,tC),Y()),e&2){let e=X(3);G(3),_h(e.getConsumers(e.selectedNode()))}}function _C(e,t){if(e&1&&(J(0,`aside`,16)(1,`h3`),Z(2),Y(),J(3,`dl`)(4,`dt`),Z(5,`Kind`),Y(),J(6,`dd`),Z(7),Y(),J(8,`dt`),Z(9,`Epoch`),Y(),J(10,`dd`),Z(11),Y(),K(12,fC,6,3),Y(),K(13,mC,5,0),K(14,gC,5,0),Y()),e&2){let e=X(2);G(2),Q(e.selectedNode().label??e.selectedNode().id),G(5),Q(e.selectedNode().kind),G(4),Q(e.selectedNode().epoch),G(),q(e.selectedNode().value===void 0?-1:12),G(),q(e.getDependencies(e.selectedNode()).length?13:-1),G(),q(e.getConsumers(e.selectedNode()).length?14:-1)}}function vC(e,t){if(e&1&&(J(0,`div`,13),hh(1,oC,3,3,`span`,14,eC),Y(),J(3,`div`,7),hh(4,dC,12,11,`div`,15,tC),Y(),K(6,_C,15,6,`aside`,16)),e&2){let e=X();G(),_h(e.kindLegend),G(3),_h(e.filteredNodes()),G(2),q(e.selectedNode()?6:-1)}}var yC={signal:`#a78bfa`,computed:`#60a5fa`,linkedSignal:`#34d399`,effect:`#fb923c`,template:`#94a3b8`,afterRenderEffectPhase:`#f472b6`,childSignalProp:`#c084fc`,"input (signal)":`#f59e0b`,"input.required (signal)":`#f59e0b`,"output (signal)":`#ec4899`,"model (signal)":`#14b8a6`,"model.required (signal)":`#14b8a6`,"viewChild (signal)":`#8b5cf6`,"viewChild.required (signal)":`#8b5cf6`,"viewChildren (signal)":`#8b5cf6`,"contentChild (signal)":`#6366f1`,"contentChild.required (signal)":`#6366f1`,"contentChildren (signal)":`#6366f1`,resource:`#06b6d4`,unknown:`#71717a`},bC=class e{rpc=Ug(null);graph=H(null);sourceSignals=H([]);filter=H(``);selectedNode=H(null);kindLegend=Object.entries(yC).map(([e,t])=>({kind:e,color:t}));filteredNodes=Rg(()=>{let e=this.graph();if(!e)return[];let t=this.filter().toLowerCase();return t?e.nodes.filter(e=>(e.label??``).toLowerCase().includes(t)||e.kind.includes(t)):e.nodes});filteredSourceSignals=Rg(()=>{let e=this.filter().toLowerCase(),t=this.sourceSignals();return e?t.filter(t=>t.name.toLowerCase().includes(e)||t.kind.includes(e)||t.file.includes(e)):t});constructor(){Bs(()=>{let e=this.rpc();e&&(this.loadSignalGraph(e),this.loadSourceSignals(e))})}async loadSignalGraph(e){let t=await e.scope(`ng-devtools`).rpc.sharedState(`signal-graph`),n=t.value();n?.graph&&this.graph.set(n.graph),t.on(`updated`,e=>{e?.graph&&this.graph.set(e.graph)})}async loadSourceSignals(e){let t=e.scope(`ng-devtools`);try{let e=await t.rpc.call(`get-signals`);this.sourceSignals.set(e)}catch{}}selectNode(e){this.selectedNode.set(this.selectedNode()?.id===e.id?null:e)}kindColor(e){return yC[e]??yC.unknown}getDependencies(e){let t=this.graph();if(!t)return[];let n=t.nodes.findIndex(t=>t.id===e.id);return t.edges.filter(e=>e.consumer===n).map(e=>t.nodes[e.producer]).filter(Boolean)}getConsumers(e){let t=this.graph();if(!t)return[];let n=t.nodes.findIndex(t=>t.id===e.id);return t.edges.filter(e=>e.producer===n).map(e=>t.nodes[e.consumer]).filter(Boolean)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Rp({type:e,selectors:[[`app-signal-inspector`]],inputs:{rpc:[1,`rpc`]},decls:7,vars:5,consts:[[1,`toolbar`],[`type`,`text`,`placeholder`,`Filter by name or kind…`,3,`input`,`value`],[1,`label`],[1,`empty`],[1,`muted`],[1,`hint`],[1,`source-label`],[1,`nodes`],[1,`node-card`],[1,`node-header`],[1,`kind-badge`],[1,`node-label`],[1,`node-meta`],[1,`legend`],[1,`legend-item`],[1,`node-card`,3,`selected`],[1,`detail-panel`],[1,`dot`],[1,`node-card`,3,`click`],[1,`watched-badge`],[1,`node-value`],[1,`kind-badge`,`sm`]],template:function(e,t){e&1&&(J(0,`div`,0)(1,`input`,1),Hh(`input`,function(e){return t.filter.set(e.target.value)}),Y(),J(2,`span`,2),Z(3),Y()(),K(4,nC,5,0,`div`,3),K(5,aC,5,0),K(6,vC,7,1)),e&2&&(G(),Rh(`value`,t.filter()),G(2),$(`Component: `,t.graph()?.componentSelector??`—`),G(),q(!t.graph()&&t.sourceSignals().length===0?4:-1),G(),q(!t.graph()&&t.sourceSignals().length>0?5:-1),G(),q(t.graph()?6:-1))},dependencies:[a_],styles:[`.toolbar[_ngcontent-%COMP%] { - display: flex; - gap: 12px; - align-items: center; - margin-bottom: 16px; - } - input[_ngcontent-%COMP%] { - flex: 1; - padding: 8px 12px; - background: #18181b; - border: 1px solid #27272a; - border-radius: 6px; - color: #e4e4e7; - font-size: 14px; - outline: none; - } - input[_ngcontent-%COMP%]:focus { - border-color: var(--%NS%accent); - } - .label[_ngcontent-%COMP%] { - font-size: 13px; - color: #71717a; - white-space: nowrap; - } - .empty[_ngcontent-%COMP%] { - text-align: center; - padding: 48px 16px; - } - .muted[_ngcontent-%COMP%] { - color: #71717a; - font-size: 14px; - } - .hint[_ngcontent-%COMP%] { - color: #52525b; - font-size: 12px; - margin-top: 8px; - } - .source-label[_ngcontent-%COMP%] { - font-size: 13px; - color: #71717a; - margin-bottom: 12px; - } - .legend[_ngcontent-%COMP%] { - display: flex; - gap: 12px; - flex-wrap: wrap; - margin-bottom: 16px; - } - .legend-item[_ngcontent-%COMP%] { - display: flex; - align-items: center; - gap: 4px; - font-size: 12px; - color: #a1a1aa; - } - .dot[_ngcontent-%COMP%] { - width: 8px; - height: 8px; - border-radius: 50%; - } - .nodes[_ngcontent-%COMP%] { - display: flex; - flex-direction: column; - gap: 8px; - } - .node-card[_ngcontent-%COMP%] { - background: #18181b; - border: 1px solid #27272a; - border-radius: 8px; - padding: 12px 16px; - cursor: pointer; - transition: border-color 0.15s; - } - .node-card[_ngcontent-%COMP%]:hover { - border-color: #3f3f46; - } - .node-card.selected[_ngcontent-%COMP%] { - border-color: var(--%NS%accent); - } - .node-header[_ngcontent-%COMP%] { - display: flex; - align-items: center; - gap: 8px; - } - .kind-badge[_ngcontent-%COMP%] { - font-size: 11px; - padding: 2px 8px; - border-radius: 4px; - color: #fff; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.05em; - } - .kind-badge.sm[_ngcontent-%COMP%] { - font-size: 10px; - padding: 1px 5px; - } - .node-label[_ngcontent-%COMP%] { - font-family: monospace; - font-size: 14px; - color: #e4e4e7; - } - .watched-badge[_ngcontent-%COMP%] { - font-size: 10px; - padding: 1px 6px; - border-radius: 4px; - background: #14532d; - color: #4ade80; - } - .node-value[_ngcontent-%COMP%] { - font-family: monospace; - font-size: 12px; - color: #a1a1aa; - margin-top: 4px; - max-height: 40px; - overflow: hidden; - } - .node-meta[_ngcontent-%COMP%] { - font-size: 11px; - color: #52525b; - margin-top: 4px; - } - .detail-panel[_ngcontent-%COMP%] { - margin-top: 16px; - padding: 16px; - background: #18181b; - border: 1px solid #27272a; - border-radius: 8px; - } - .detail-panel[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] { - font-family: monospace; - color: var(--%NS%accent); - margin-bottom: 12px; - } - .detail-panel[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] { - font-size: 12px; - color: #71717a; - margin: 12px 0 4px; - text-transform: uppercase; - letter-spacing: 0.05em; - } - dl[_ngcontent-%COMP%] { - display: grid; - grid-template-columns: auto 1fr; - gap: 4px 12px; - font-size: 13px; - } - dt[_ngcontent-%COMP%] { - color: #71717a; - } - dd[_ngcontent-%COMP%] { - color: #e4e4e7; - } - pre[_ngcontent-%COMP%] { - font-size: 12px; - white-space: pre-wrap; - margin: 0; - } - ul[_ngcontent-%COMP%] { - list-style: none; - padding: 0; - font-size: 13px; - } - li[_ngcontent-%COMP%] { - padding: 2px 0; - color: #a1a1aa; - display: flex; - align-items: center; - gap: 6px; - }`]})},xC=(e,t)=>t.type,SC=(e,t)=>t.token+t.file+t.line,CC=(e,t)=>t.injector.id,wC=(e,t)=>t.node.injector.id,TC=(e,t)=>t.token;function EC(e,t){e&1&&(J(0,`div`,4)(1,`p`,5),Z(2,`No DI data found.`),Y(),J(3,`p`,6),Z(4,` No providers, injectables, or inject() calls found. Runtime tree requires Angular 17+ with the overlay connected. `),Y()())}function DC(e,t){if(e&1&&(J(0,`span`,14),Z(1),Y()),e&2){let e=X().$implicit;G(),$(`providedIn: `,e.providedIn)}}function OC(e,t){if(e&1&&Z(0),e&2){let e=X().$implicit;$(` · as `,e.source,` `)}}function kC(e,t){if(e&1&&(J(0,`div`,11)(1,`div`,12)(2,`span`,13),Z(3),Y(),K(4,DC,2,1,`span`,14),Y(),J(5,`div`,15),Z(6),K(7,OC,1,1),Y()()),e&2){let e=t.$implicit;G(3),Q(e.token),G(),q(e.providedIn?4:-1),G(2),Cg(` `,e.file,`:`,e.line,` `),G(),q(e.source!==`class`&&e.source!==`providers array`?7:-1)}}function AC(e,t){if(e&1&&(J(0,`div`,9)(1,`h3`),Z(2),Y(),J(3,`div`,10),hh(4,kC,8,5,`div`,11,SC),Y()()),e&2){let e=t.$implicit;G(2),Cg(``,e.label,` (`,e.items.length,`)`),G(2),_h(e.items)}}function jC(e,t){if(e&1&&(J(0,`p`,7),Z(1,`DI from source scan (static analysis):`),Y(),J(2,`div`,8),hh(3,AC,6,2,`div`,9,xC),Y()),e&2){let e=X();G(3),_h(e.groupedProviders())}}function MC(e,t){e&1&&Fh(0)}function NC(e,t){if(e&1&&(J(0,`span`,24),Z(1),Y()),e&2){let e=X().$implicit;G(),$(``,e.node.injector.providerCount,` providers`)}}function PC(e,t){if(e&1){let e=Lh();J(0,`div`,21),Hh(`click`,function(){let t=co(e).$implicit;return lo(X(4).select(t.node))}),J(1,`span`,22),Z(2),Y(),J(3,`span`,23),Z(4),Y(),K(5,NC,2,1,`span`,24),Y()}if(e&2){let e=t.$implicit,n=X(4);rg(`padding-left`,e.depth*24+12,`px`),ig(`selected`,n.selectedId()===e.node.injector.id),G(),rg(`background`,n.typeColor(e.node.injector.type)),G(),$(` `,e.node.injector.type,` `),G(2),Q(e.node.injector.name),G(),q(e.node.injector.providerCount>0?5:-1)}}function FC(e,t){if(e&1&&(J(0,`div`,19),hh(1,PC,6,9,`div`,20,wC),Y()),e&2){let e=X().$implicit,t=X(2);G(),_h(t.flattenTree(e))}}function IC(e,t){e&1&&(Zp(0,MC,1,0,`ng-container`,18)(1,FC,3,0),nh(2,1),rh()),e&2&&Rh(`ngTemplateOutlet`,void 0)}function LC(e,t){e&1&&(J(0,`p`,5),Z(1,`No providers configured on this injector.`),Y())}function RC(e,t){if(e&1&&(J(0,`tr`)(1,`td`,13),Z(2),Y(),J(3,`td`),Z(4),Y(),J(5,`td`),Z(6),Y()()),e&2){let e=t.$implicit;G(2),Q(e.token),G(2),Q(e.type),G(2),Q(e.isViewProvider?`Yes`:`—`)}}function zC(e,t){if(e&1&&(J(0,`table`,26)(1,`thead`)(2,`tr`)(3,`th`),Z(4,`Token`),Y(),J(5,`th`),Z(6,`Type`),Y(),J(7,`th`),Z(8,`View`),Y()()(),J(9,`tbody`),hh(10,RC,7,3,`tr`,null,TC),Y()()),e&2){let e=X(3);G(10),_h(e.selectedInjector().providers)}}function BC(e,t){if(e&1&&(J(0,`aside`,17)(1,`div`,25)(2,`span`,22),Z(3),Y(),J(4,`h3`),Z(5),Y()(),K(6,LC,2,0,`p`,5)(7,zC,12,0,`table`,26),Y()),e&2){let e=X(2);G(2),rg(`background`,e.typeColor(e.selectedInjector().injector.type)),G(),$(` `,e.selectedInjector().injector.type,` `),G(2),Q(e.selectedInjector().injector.name),G(),q(e.selectedInjector().providers.length===0?6:7)}}function VC(e,t){if(e&1&&(J(0,`div`,16),hh(1,IC,4,1,null,null,CC),Y(),K(3,BC,8,5,`aside`,17)),e&2){let e=X();G(),_h(e.filteredRoots()),G(2),q(e.selectedInjector()?3:-1)}}var HC={element:`#60a5fa`,environment:`#34d399`,null:`#71717a`},UC=class e{rpc=Ug(null);roots=H([]);sourceProviders=H([]);filter=H(``);hideEmpty=H(!1);selectedId=H(null);selectedInjector=Rg(()=>{let e=this.selectedId();return e?this.findNode(this.roots(),e):null});filteredRoots=Rg(()=>{let e=this.roots();this.hideEmpty()&&(e=this.filterEmpty(e));let t=this.filter().toLowerCase();return t&&(e=this.filterByQuery(e,t)),e});groupedProviders=Rg(()=>{let e=this.sourceProviders(),t=this.filter().toLowerCase(),n=t?e.filter(e=>e.token.toLowerCase().includes(t)||e.file.includes(t)):e,r=[{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 n){let t=r.find(t=>t.type===e.type);t&&t.items.push(e)}return r.filter(e=>e.items.length>0)});constructor(){Bs(()=>{let e=this.rpc();e&&(this.loadInjectorTree(e),this.loadSourceProviders(e))})}async loadInjectorTree(e){let t=await e.scope(`ng-devtools`).rpc.sharedState(`injector-tree`),n=t.value();n?.roots?.length&&this.roots.set(n.roots),t.on(`updated`,e=>{e?.roots&&this.roots.set(e.roots)})}async loadSourceProviders(e){let t=e.scope(`ng-devtools`);try{let e=await t.rpc.call(`get-providers`);this.sourceProviders.set(e)}catch{}}select(e){this.selectedId.set(this.selectedId()===e.injector.id?null:e.injector.id)}typeColor(e){return HC[e]??HC.null}flattenTree(e){let t=[],n=(e,r)=>{t.push({node:e,depth:r});for(let t of e.children)n(t,r+1)};return n(e,0),t}findNode(e,t){for(let n of e){if(n.injector.id===t)return n;let e=this.findNode(n.children,t);if(e)return e}return null}filterEmpty(e){return e.map(e=>({...e,children:this.filterEmpty(e.children)})).filter(e=>e.injector.providerCount>0||e.children.length>0)}filterByQuery(e,t){return e.map(e=>({...e,children:this.filterByQuery(e.children,t)})).filter(e=>e.injector.name.toLowerCase().includes(t)||e.providers.some(e=>e.token.toLowerCase().includes(t))||e.children.length>0)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Rp({type:e,selectors:[[`app-di-inspector`]],inputs:{rpc:[1,`rpc`]},decls:8,vars:5,consts:[[1,`toolbar`],[`type`,`text`,`placeholder`,`Filter by injector name or token…`,3,`input`,`value`],[1,`checkbox`],[`type`,`checkbox`,3,`change`,`checked`],[1,`empty`],[1,`muted`],[1,`hint`],[1,`source-label`],[1,`source-providers`],[1,`provider-group`],[1,`provider-list`],[1,`provider-card`],[1,`provider-header`],[1,`token`],[1,`provided-in`],[1,`provider-meta`],[1,`tree-container`],[1,`detail-panel`],[4,`ngTemplateOutlet`],[1,`injector-tree`],[1,`injector-row`,3,`selected`,`paddingLeft`],[1,`injector-row`,3,`click`],[1,`type-badge`],[1,`name`],[1,`provider-count`],[1,`detail-header`],[`role`,`table`]],template:function(e,t){e&1&&(J(0,`div`,0)(1,`input`,1),Hh(`input`,function(e){return t.filter.set(e.target.value)}),Y(),J(2,`label`,2)(3,`input`,3),Hh(`change`,function(){return t.hideEmpty.set(!t.hideEmpty())}),Y(),Z(4,` Hide empty injectors `),Y()(),K(5,EC,5,0,`div`,4),K(6,jC,5,0),K(7,VC,4,1)),e&2&&(G(),Rh(`value`,t.filter()),G(2),Rh(`checked`,t.hideEmpty()),G(2),q(t.roots().length===0&&t.sourceProviders().length===0?5:-1),G(),q(t.roots().length===0&&t.sourceProviders().length>0?6:-1),G(),q(t.roots().length>0?7:-1))},styles:[`.toolbar[_ngcontent-%COMP%] { - display: flex; - gap: 12px; - align-items: center; - margin-bottom: 16px; - } - input[type='text'][_ngcontent-%COMP%] { - flex: 1; - padding: 8px 12px; - background: #18181b; - border: 1px solid #27272a; - border-radius: 6px; - color: #e4e4e7; - font-size: 14px; - outline: none; - } - input[type='text'][_ngcontent-%COMP%]:focus { - border-color: var(--%NS%accent); - } - .checkbox[_ngcontent-%COMP%] { - display: flex; - align-items: center; - gap: 6px; - font-size: 13px; - color: #a1a1aa; - white-space: nowrap; - cursor: pointer; - } - .empty[_ngcontent-%COMP%] { - text-align: center; - padding: 48px 16px; - } - .muted[_ngcontent-%COMP%] { - color: #71717a; - font-size: 14px; - } - .hint[_ngcontent-%COMP%] { - color: #52525b; - font-size: 12px; - margin-top: 8px; - } - .tree-container[_ngcontent-%COMP%] { - display: flex; - flex-direction: column; - } - .injector-row[_ngcontent-%COMP%] { - display: flex; - align-items: center; - gap: 8px; - padding: 8px 12px; - cursor: pointer; - border-bottom: 1px solid #1e1e22; - transition: background 0.1s; - } - .injector-row[_ngcontent-%COMP%]:hover { - background: #18181b; - } - .injector-row.selected[_ngcontent-%COMP%] { - background: color-mix(in srgb, var(--%NS%accent) 22%, transparent); - border-color: var(--%NS%accent); - } - .type-badge[_ngcontent-%COMP%] { - font-size: 10px; - padding: 2px 6px; - border-radius: 4px; - color: #fff; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.05em; - } - .name[_ngcontent-%COMP%] { - font-family: monospace; - font-size: 13px; - color: #e4e4e7; - } - .provider-count[_ngcontent-%COMP%] { - font-size: 11px; - color: #71717a; - margin-left: auto; - } - .detail-panel[_ngcontent-%COMP%] { - margin-top: 16px; - padding: 16px; - background: #18181b; - border: 1px solid #27272a; - border-radius: 8px; - } - .detail-header[_ngcontent-%COMP%] { - display: flex; - align-items: center; - gap: 8px; - margin-bottom: 12px; - } - .detail-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] { - font-family: monospace; - color: #e4e4e7; - margin: 0; - } - table[_ngcontent-%COMP%] { - width: 100%; - border-collapse: collapse; - font-size: 13px; - } - th[_ngcontent-%COMP%] { - text-align: left; - padding: 6px 10px; - background: #0f0f11; - color: #71717a; - font-size: 11px; - text-transform: uppercase; - letter-spacing: 0.05em; - border-bottom: 1px solid #27272a; - } - td[_ngcontent-%COMP%] { - padding: 8px 10px; - border-bottom: 1px solid #1e1e22; - } - .token[_ngcontent-%COMP%] { - font-family: monospace; - color: var(--%NS%accent); - } - .source-label[_ngcontent-%COMP%] { - font-size: 13px; - color: #71717a; - margin-bottom: 12px; - } - .source-providers[_ngcontent-%COMP%] { - display: flex; - flex-direction: column; - gap: 20px; - } - .provider-group[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] { - font-size: 13px; - color: #71717a; - text-transform: uppercase; - letter-spacing: 0.05em; - margin-bottom: 8px; - } - .provider-list[_ngcontent-%COMP%] { - display: flex; - flex-direction: column; - gap: 6px; - } - .provider-card[_ngcontent-%COMP%] { - background: #18181b; - border: 1px solid #27272a; - border-radius: 8px; - padding: 10px 14px; - } - .provider-header[_ngcontent-%COMP%] { - display: flex; - align-items: center; - gap: 8px; - } - .provider-header[_ngcontent-%COMP%] .token[_ngcontent-%COMP%] { - font-size: 14px; - font-weight: 500; - } - .provided-in[_ngcontent-%COMP%] { - font-size: 11px; - padding: 1px 6px; - border-radius: 4px; - background: #14532d; - color: #4ade80; - } - .provider-meta[_ngcontent-%COMP%] { - font-size: 11px; - color: #52525b; - margin-top: 4px; - }`]})},WC=(e,t)=>t.kind,GC=(e,t)=>t.name+t.file+t.line;function KC(e,t){e&1&&Ah(0,`span`,4)}function qC(e,t){e&1&&(J(0,`div`,5)(1,`p`,6),Z(2,`No NgRx store patterns found.`),Y(),J(3,`p`,7),Z(4,` No createAction, createReducer, createEffect, createSelector, or createFeature calls found in source. Make sure your app uses @ngrx/store. `),Y()())}function JC(e,t){if(e&1&&(J(0,`span`,9),Ah(1,`span`,14),Z(2),Y()),e&2){let e=t.$implicit;G(),rg(`background`,e.color),G(),$(` `,e.kind,` `)}}function YC(e,t){if(e&1&&(J(0,`span`,15),Z(1),Y()),e&2){let e=t.$implicit;rg(`border-color`,X(3).kindColor(e.kind)),G(),wg(` `,e.count,` `,e.kind,``,e.count===1?``:`s`,` `)}}function XC(e,t){if(e&1&&Z(0),e&2){let e=X().$implicit;$(` · `,e.detail,` `)}}function ZC(e,t){if(e&1&&(J(0,`div`,13)(1,`div`,16)(2,`span`,17),Z(3),Y(),J(4,`span`,18),Z(5),Y()(),J(6,`div`,19),Z(7),K(8,XC,1,1),Y()()),e&2){let e=t.$implicit,n=X(3);G(2),rg(`background`,n.kindColor(e.kind)),G(),$(` `,e.kind,` `),G(2),Q(e.name),G(2),Cg(` `,e.file,`:`,e.line,` `),G(),q(e.detail?8:-1)}}function QC(e,t){if(e&1&&(J(0,`div`,8),hh(1,JC,3,3,`span`,9,WC),Y(),J(3,`div`,10),hh(4,YC,2,5,`span`,11,WC),Y(),J(6,`div`,12),hh(7,ZC,9,7,`div`,13,GC),Y()),e&2){let e=X(2);G(),_h(e.kindLegend),G(3),_h(e.groupedEntries()),G(3),_h(e.filteredEntries())}}function $C(e,t){e&1&&K(0,qC,5,0,`div`,5)(1,QC,9,0),e&2&&q(X().sourceEntries().length===0?0:1)}function ew(e,t){e&1&&(J(0,`div`,5)(1,`p`,6),Z(2,`No NgRx store connection detected.`),Y(),J(3,`p`,7),Z(4,` Runtime inspection requires @ngrx/store-devtools to be configured in your app. The store devtools use the Redux DevTools protocol to expose state. `),Y()())}function tw(e,t){if(e&1){let e=Lh();J(0,`div`,28),Hh(`click`,function(){let t=co(e).$implicit;return lo(X(3).selectedAction.set(t))}),J(1,`div`,29),Z(2),Y(),J(3,`div`,30),Z(4),Y()()}if(e&2){let e=t.$implicit,n=X(3);ig(`selected`,n.selectedAction()===e),G(2),Q(e.type),G(2),Q(n.formatTime(e.timestamp))}}function nw(e,t){e&1&&(J(0,`p`,6),Z(1,`No actions dispatched yet.`),Y())}function rw(e,t){if(e&1&&(J(0,`dt`),Z(1,`Payload`),Y(),J(2,`dd`)(3,`pre`),Z(4),Og(5,`json`),Y()()),e&2){let e=X(4);G(4),Q(Ag(5,1,e.selectedAction().payload))}}function iw(e,t){if(e&1&&(J(0,`aside`,27)(1,`h3`),Z(2),Y(),J(3,`dl`)(4,`dt`),Z(5,`Type`),Y(),J(6,`dd`),Z(7),Y(),J(8,`dt`),Z(9,`Time`),Y(),J(10,`dd`),Z(11),Y(),K(12,rw,6,3),Y()()),e&2){let e=X(3);G(2),Q(e.selectedAction().type),G(5),Q(e.selectedAction().type),G(4),Q(e.formatTime(e.selectedAction().timestamp)),G(),q(e.selectedAction().payload===void 0?-1:12)}}function aw(e,t){if(e&1&&(J(0,`div`,20)(1,`section`,21)(2,`h3`),Z(3,`Current State`),Y(),J(4,`pre`,22),Z(5),Og(6,`json`),Y()(),J(7,`section`,23)(8,`h3`),Z(9,` Recent Actions `),J(10,`span`,24),Z(11),Y()(),J(12,`div`,25),hh(13,tw,5,4,`div`,26,ph,!1,nw,2,0,`p`,6),Y()()(),K(16,iw,13,4,`aside`,27)),e&2){let e=X(2);G(5),Q(Ag(6,4,e.runtimeState()?.state)),G(6),Q(e.filteredActions().length),G(2),_h(e.filteredActions()),G(3),q(e.selectedAction()?16:-1)}}function ow(e,t){e&1&&K(0,ew,5,0,`div`,5)(1,aw,17,6),e&2&&q(+!!X().runtimeState()?.connected)}var sw={action:`#f59e0b`,reducer:`#a78bfa`,effect:`#fb923c`,selector:`#60a5fa`,feature:`#34d399`,"store-setup":`#94a3b8`,"signal-store":`#e879f9`,"signal-state":`#22d3ee`,"signal-method":`#fb7185`},cw=class e{rpc=Ug(null);filter=H(``);mode=H(`source`);sourceEntries=H([]);runtimeState=H(null);selectedAction=H(null);kindLegend=Object.entries(sw).map(([e,t])=>({kind:e,color:t}));filteredEntries=Rg(()=>{let e=this.filter().toLowerCase();return this.sourceEntries().filter(t=>t.name.toLowerCase().includes(e)||t.kind.toLowerCase().includes(e))});groupedEntries=Rg(()=>{let e=this.sourceEntries(),t=new Map;for(let n of e)t.set(n.kind,(t.get(n.kind)??0)+1);return[...t.entries()].map(([e,t])=>({kind:e,count:t}))});filteredActions=Rg(()=>{let e=this.filter().toLowerCase(),t=[...this.runtimeState()?.actions??[]].reverse();return e?t.filter(t=>t.type.toLowerCase().includes(e)):t});constructor(){Bs(()=>{let e=this.rpc();if(!e)return;let t=e.scope(`ng-devtools`);t.rpc.call(`get-ngrx-store`).then(e=>{this.sourceEntries.set(e),e.length===0&&this.mode.set(`runtime`)}).catch(()=>this.sourceEntries.set([])),t.rpc.sharedState(`ngrx-store`).then(e=>{e?.subscribe&&e.subscribe(e=>this.runtimeState.set(e))})})}kindColor(e){return sw[e]??`#71717a`}formatTime(e){return new Date(e).toLocaleTimeString()}static ɵfac=function(t){return new(t||e)};static ɵcmp=Rp({type:e,selectors:[[`app-store-inspector`]],inputs:{rpc:[1,`rpc`]},decls:10,vars:8,consts:[[1,`toolbar`],[`type`,`text`,`placeholder`,`Filter by name or kind…`,3,`input`,`value`],[1,`toggle-group`],[3,`click`],[1,`live-dot`],[1,`empty`],[1,`muted`],[1,`hint`],[1,`legend`],[1,`legend-item`],[1,`summary`],[1,`summary-badge`,3,`border-color`],[1,`nodes`],[1,`node-card`],[1,`dot`],[1,`summary-badge`],[1,`node-header`],[1,`kind-badge`],[1,`node-label`],[1,`node-meta`],[1,`runtime-layout`],[1,`state-panel`],[1,`state-tree`],[1,`actions-panel`],[1,`action-count`],[1,`action-list`],[1,`action-card`,3,`selected`],[1,`detail-panel`],[1,`action-card`,3,`click`],[1,`action-type`],[1,`action-time`]],template:function(e,t){e&1&&(J(0,`div`,0)(1,`input`,1),Hh(`input`,function(e){return t.filter.set(e.target.value)}),Y(),J(2,`div`,2)(3,`button`,3),Hh(`click`,function(){return t.mode.set(`source`)}),Z(4,`Source`),Y(),J(5,`button`,3),Hh(`click`,function(){return t.mode.set(`runtime`)}),Z(6,` Runtime `),K(7,KC,1,0,`span`,4),Y()()(),K(8,$C,2,1),K(9,ow,2,1)),e&2&&(G(),Rh(`value`,t.filter()),G(2),ig(`active`,t.mode()===`source`),G(2),ig(`active`,t.mode()===`runtime`),G(2),q(t.runtimeState()?.connected?7:-1),G(),q(t.mode()===`source`?8:-1),G(),q(t.mode()===`runtime`?9:-1))},dependencies:[a_],styles:[`.toolbar[_ngcontent-%COMP%] { - display: flex; - gap: 12px; - align-items: center; - margin-bottom: 16px; - } - input[_ngcontent-%COMP%] { - flex: 1; - padding: 8px 12px; - background: #18181b; - border: 1px solid #27272a; - border-radius: 6px; - color: #e4e4e7; - font-size: 14px; - outline: none; - } - input[_ngcontent-%COMP%]:focus { - border-color: var(--%NS%accent); - } - .toggle-group[_ngcontent-%COMP%] { - display: flex; - border: 1px solid #27272a; - border-radius: 6px; - overflow: hidden; - } - .toggle-group[_ngcontent-%COMP%] button[_ngcontent-%COMP%] { - padding: 6px 14px; - border: none; - background: transparent; - color: #a1a1aa; - cursor: pointer; - font-size: 13px; - display: flex; - align-items: center; - gap: 6px; - } - .toggle-group[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%] { - background: #3f3f46; - color: #fff; - } - .live-dot[_ngcontent-%COMP%] { - width: 6px; - height: 6px; - border-radius: 50%; - background: #4ade80; - animation: _ngcontent-%COMP%_pulse 2s infinite; - } - @keyframes _ngcontent-%COMP%_pulse { - 0%, - 100% { - opacity: 1; - } - 50% { - opacity: 0.4; - } - } - .empty[_ngcontent-%COMP%] { - text-align: center; - padding: 48px 16px; - } - .muted[_ngcontent-%COMP%] { - color: #71717a; - font-size: 14px; - } - .hint[_ngcontent-%COMP%] { - color: #52525b; - font-size: 12px; - margin-top: 8px; - } - .legend[_ngcontent-%COMP%] { - display: flex; - gap: 12px; - flex-wrap: wrap; - margin-bottom: 12px; - } - .legend-item[_ngcontent-%COMP%] { - display: flex; - align-items: center; - gap: 4px; - font-size: 12px; - color: #a1a1aa; - } - .dot[_ngcontent-%COMP%] { - width: 8px; - height: 8px; - border-radius: 50%; - } - .summary[_ngcontent-%COMP%] { - display: flex; - gap: 8px; - flex-wrap: wrap; - margin-bottom: 16px; - } - .summary-badge[_ngcontent-%COMP%] { - font-size: 12px; - padding: 3px 10px; - border-radius: 99px; - border: 1px solid; - color: #e4e4e7; - } - .nodes[_ngcontent-%COMP%] { - display: flex; - flex-direction: column; - gap: 8px; - } - .node-card[_ngcontent-%COMP%] { - background: #18181b; - border: 1px solid #27272a; - border-radius: 8px; - padding: 12px 16px; - transition: border-color 0.15s; - } - .node-card[_ngcontent-%COMP%]:hover { - border-color: #3f3f46; - } - .node-header[_ngcontent-%COMP%] { - display: flex; - align-items: center; - gap: 8px; - } - .kind-badge[_ngcontent-%COMP%] { - font-size: 11px; - padding: 2px 8px; - border-radius: 4px; - color: #fff; - font-weight: 600; - text-transform: uppercase; - letter-spacing: 0.05em; - } - .node-label[_ngcontent-%COMP%] { - font-family: monospace; - font-size: 14px; - color: #e4e4e7; - } - .node-meta[_ngcontent-%COMP%] { - font-size: 12px; - color: #71717a; - margin-top: 4px; - } - .runtime-layout[_ngcontent-%COMP%] { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 16px; - } - .state-panel[_ngcontent-%COMP%], - .actions-panel[_ngcontent-%COMP%] { - background: #18181b; - border: 1px solid #27272a; - border-radius: 10px; - padding: 16px; - } - h3[_ngcontent-%COMP%] { - font-size: 13px; - text-transform: uppercase; - color: #71717a; - margin-bottom: 12px; - letter-spacing: 0.05em; - display: flex; - align-items: center; - gap: 8px; - } - .action-count[_ngcontent-%COMP%] { - font-size: 11px; - padding: 1px 6px; - border-radius: 99px; - background: #3f3f46; - color: #a1a1aa; - } - .state-tree[_ngcontent-%COMP%] { - font-family: monospace; - font-size: 12px; - color: #a1a1aa; - white-space: pre-wrap; - word-break: break-all; - max-height: 500px; - overflow: auto; - } - .action-list[_ngcontent-%COMP%] { - display: flex; - flex-direction: column; - gap: 6px; - max-height: 500px; - overflow: auto; - } - .action-card[_ngcontent-%COMP%] { - display: flex; - justify-content: space-between; - align-items: center; - padding: 8px 12px; - background: #09090b; - border: 1px solid #27272a; - border-radius: 6px; - cursor: pointer; - transition: border-color 0.15s; - } - .action-card[_ngcontent-%COMP%]:hover { - border-color: #3f3f46; - } - .action-card.selected[_ngcontent-%COMP%] { - border-color: var(--%NS%accent); - } - .action-type[_ngcontent-%COMP%] { - font-family: monospace; - font-size: 13px; - color: #e4e4e7; - } - .action-time[_ngcontent-%COMP%] { - font-size: 11px; - color: #71717a; - } - .detail-panel[_ngcontent-%COMP%] { - margin-top: 16px; - background: #18181b; - border: 1px solid var(--%NS%accent); - border-radius: 10px; - padding: 16px; - } - dl[_ngcontent-%COMP%] { - display: grid; - grid-template-columns: auto 1fr; - gap: 6px 12px; - font-size: 14px; - } - dt[_ngcontent-%COMP%] { - color: #a1a1aa; - } - dd[_ngcontent-%COMP%] { - color: #e4e4e7; - } - pre[_ngcontent-%COMP%] { - font-family: monospace; - font-size: 12px; - white-space: pre-wrap; - word-break: break-all; - }`]})},lw=(e,t)=>t.id;function uw(e,t){if(e&1){let e=Lh();Eh(0,`button`,13),Vh(`click`,function(){let t=co(e).$implicit;return lo(X().switchTab(t.id))}),Z(1),Oh()}if(e&2){let e=t.$implicit;ig(`active`,X().tab()===e.id),G(),Q(e.label)}}function dw(e,t){if(e&1){let e=Lh();Eh(0,`app-dashboard`,14),Vh(`navigate`,function(t){return co(e),lo(X().switchTab(t))}),Oh()}e&2&&wh(`rpc`,X().rpc())}function fw(e,t){e&1&&kh(0,`app-component-tree`,12),e&2&&wh(`rpc`,X().rpc())}function pw(e,t){e&1&&kh(0,`app-route-inspector`,12),e&2&&wh(`rpc`,X().rpc())}function mw(e,t){e&1&&kh(0,`app-signal-inspector`,12),e&2&&wh(`rpc`,X().rpc())}function hw(e,t){e&1&&kh(0,`app-di-inspector`,12),e&2&&wh(`rpc`,X().rpc())}function gw(e,t){e&1&&kh(0,`app-store-inspector`,12),e&2&&wh(`rpc`,X().rpc())}var _w=class e{tabs=[{id:`dashboard`,label:`Dashboard`},{id:`components`,label:`Components`},{id:`routes`,label:`Routes`},{id:`signals`,label:`Signals`},{id:`injectors`,label:`Injectors`},{id:`store`,label:`Store`}];tab=H(`dashboard`);rpc=H(null);connected=H(!1);ngOnInit(){let e=new URLSearchParams(location.hash.replace(/^#/,``)).get(`tab`);e&&this.tabs.some(t=>t.id===e)&&this.tab.set(e);let t=yw();kS(t?{baseURL:t}:{}).then(e=>{this.rpc.set(e),this.connected.set(!0),e.events.on(`connection:status`,e=>{this.connected.set(e===`connected`)})})}ngOnDestroy(){}switchTab(e){this.tab.set(e),history.replaceState(history.state,``,`#tab=${e}`)}static ɵfac=function(t){return new(t||e)};static ɵcmp=Rp({type:e,selectors:[[`app-root`]],decls:26,vars:4,consts:[[1,`brand`],[`width`,`20`,`height`,`22`,`viewBox`,`0 0 223 236`,`fill`,`url(#ng-logo)`,`aria-hidden`,`true`],[`id`,`ng-logo`,`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`],[`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`],[3,`active`],[1,`status`],[3,`rpc`],[3,`click`],[3,`navigate`,`rpc`]],template:function(e,t){if(e&1&&(Eh(0,`header`)(1,`div`,0),Ho(),Eh(2,`svg`,1)(3,`defs`)(4,`linearGradient`,2),kh(5,`stop`,3)(6,`stop`,4)(7,`stop`,5)(8,`stop`,6)(9,`stop`,7)(10,`stop`,8),Oh()(),kh(11,`path`,9),Oh(),Uo(),Eh(12,`span`),Z(13,`Angular DevTools`),Oh()(),Eh(14,`nav`),hh(15,uw,2,3,`button`,10,lw),Oh(),Eh(17,`span`,11),Z(18),Oh()(),Eh(19,`main`),K(20,dw,1,1,`app-dashboard`,12)(21,fw,1,1,`app-component-tree`,12)(22,pw,1,1,`app-route-inspector`,12)(23,mw,1,1,`app-signal-inspector`,12)(24,hw,1,1,`app-di-inspector`,12)(25,gw,1,1,`app-store-inspector`,12),Oh()),e&2){let e;G(15),_h(t.tabs),G(2),ig(`connected`,t.connected()),G(),$(` `,t.connected()?`Connected`:`Connecting…`,` `),G(2),q((e=t.tab())===`dashboard`?20:e===`components`?21:e===`routes`?22:e===`signals`?23:e===`injectors`?24:e===`store`?25:-1)}},dependencies:[AS,KS,QS,bC,UC,cw],styles:[`[_nghost-%COMP%] { - display: flex; - flex-direction: column; - height: 100vh; - } - header[_ngcontent-%COMP%] { - display: flex; - align-items: center; - gap: 16px; - padding: 8px 16px; - background: #18181b; - border-bottom: 1px solid #27272a; - } - .brand[_ngcontent-%COMP%] { - display: flex; - align-items: center; - gap: 8px; - font-weight: 600; - color: var(--%NS%accent); - } - .brand[_ngcontent-%COMP%] span[_ngcontent-%COMP%] { - color: var(--%NS%accent); - white-space: nowrap; - } - nav[_ngcontent-%COMP%] { - display: flex; - gap: 4px; - flex: 1; - } - nav[_ngcontent-%COMP%] button[_ngcontent-%COMP%] { - padding: 6px 14px; - border: none; - border-radius: 6px; - background: transparent; - color: #a1a1aa; - cursor: pointer; - font-size: 13px; - transition: all 0.15s; - } - nav[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover { - background: #27272a; - color: #e4e4e7; - } - nav[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%] { - background: #3f3f46; - color: #fff; - } - .status[_ngcontent-%COMP%] { - font-size: 12px; - padding: 3px 10px; - border-radius: 99px; - background: #44403c; - color: #a8a29e; - } - .status.connected[_ngcontent-%COMP%] { - background: #14532d; - color: #4ade80; - } - main[_ngcontent-%COMP%] { - flex: 1; - overflow: auto; - padding: 16px; - }`]})};function vw(e){try{return new URL(e,location.href).origin===location.origin}catch{return!1}}function yw(){let e=new URLSearchParams(location.search).get(`baseURL`);if(e&&vw(e))return e;if(!location.pathname.includes(`__ng-devtools`))return`/__ng-devtools/`}U_(_w).catch(console.error);export{Kv as t}; \ No newline at end of file diff --git a/packages/ng-devtools/dist/public/index.html b/packages/ng-devtools/dist/public/index.html deleted file mode 100644 index b81f0b6..0000000 --- a/packages/ng-devtools/dist/public/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - Angular DevTools - - - - - - -