@source-crafter/xzor-runtime 0.1.16 → 0.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/fine.d.ts CHANGED
@@ -36,6 +36,12 @@ export declare const fine: {
36
36
  region(parent: Node, build: Build): void;
37
37
  /** A region between `end` and the comment before it. */
38
38
  regionAt(end: Comment, build: Build): void;
39
+ /** `@if`/`@switch` before `end`: `run()` gives the branch's index, `run(parent)` builds it; rebuilt only when the index changes. */
40
+ branchAt(end: Comment, run: (parent?: Node) => number): void;
41
+ /** `@show:if`/`@show:switch` before `end`: `run()` picks a branch, `run(parent)` builds the one picked; see `#show`. */
42
+ showAt(end: Comment, run: (parent?: Node) => number): void;
43
+ /** `@pause { }` in a show branch, before `end`: built once; what it holds stops while the branch is hidden. */
44
+ pauseAt(end: Comment, build: Build): void;
39
45
  /** `@once(expr)`: `read()` once, untracked, into `node`. */
40
46
  textOnce(node: Text, read: () => unknown): void;
41
47
  /** `@once { }`: `build` once, untracked, before `end`; its values are set, not bound. */
@@ -57,6 +63,11 @@ export declare const fine: {
57
63
  * on their own reads like a region's. A rejection without `catch` is reported.
58
64
  */
59
65
  awaitAt<R>(end: Comment, read: () => R, pending: Build | undefined, then: ((parent: Node, value: Awaited<R>) => void) | undefined, fail: ((parent: Node, error: unknown) => void) | undefined): void;
66
+ /**
67
+ * `@await (f(a, b))`: as `awaitAt`, but `f` is called again only when an argument changes (`Object.is`) or
68
+ * what `f` itself reads does, not on every change to what the arguments read.
69
+ */
70
+ awaitCallAt<A extends unknown[], R>(end: Comment, args: () => [...A], call: (...args: A) => R, pending: Build | undefined, then: ((parent: Node, value: Awaited<R>) => void) | undefined, fail: ((parent: Node, error: unknown) => void) | undefined): void;
60
71
  /** Two comments appended to `parent`, for a lone region; the end one. */
61
72
  anchors(parent: Node): Comment;
62
73
  /** A row's region: `reads[i](item, parent)` builds it. */
@@ -942,8 +942,10 @@ function $leave(node) {
942
942
  const el = node;
943
943
  if (!ComponentBase.$leaves || el.nodeType !== 1 || !el.hasAttribute("data-leave") || el.hasAttribute("data-leaving"))
944
944
  return void node.parentNode?.removeChild(node);
945
+ const running = () => el.getAnimations?.({ subtree: true }) ?? [];
946
+ const before = new Set(running());
945
947
  el.setAttribute("data-leaving", "");
946
- const animations = el.getAnimations?.({ subtree: true }) ?? [];
948
+ const animations = running().filter((a) => !before.has(a) && a.effect?.getComputedTiming().endTime !== Infinity);
947
949
  if (animations.length === 0)
948
950
  return void el.remove();
949
951
  const gone = () => el.remove();
@@ -1156,5 +1158,5 @@ class NavLink extends ComponentBase {
1156
1158
 
1157
1159
  export { FINE, setFineHooks, patchIsland, disposeIsland, $isFragment, SVG, $inSvg, Route, viewTransitions, setNavigationForTests, basePath, polyfillDisposeSymbols, ServiceProvider, Mount, Import, Singleton, Scoped, Transient, SharedInstance, ComponentBase, RenderTreeBuilder, setRenderObserver, lazy, $leave, mount, NavLink };
1158
1160
 
1159
- //# debugId=5919FE955442986264756E2164756E21
1160
- //# sourceMappingURL=index-w2yxrgd1.js.map
1161
+ //# debugId=824F41450E9EF35264756E2164756E21
1162
+ //# sourceMappingURL=index-45b6cjyv.js.map
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../runtime/index.ts"],
4
4
  "sourcesContent": [
5
- "// xzor runtime: the RenderTreeBuilder that generated components call into, and a DOM\n// renderer that re-renders one component at a time and patches only what changed.\n\ntype Handler = (e: Event) => unknown;\ntype Modifier = \"preventDefault\" | \"stopPropagation\";\ntype Modifiers = Partial<Record<Modifier, boolean>>;\n\nexport type VText = { kind: \"text\"; text: string; dom?: Text };\n\nexport type VElement = {\n kind: \"element\";\n tag: string;\n attrs: Record<string, string>;\n events: Record<string, Handler>;\n modifiers: Record<string, Modifiers>;\n children: VNode[];\n key?: unknown;\n ref?: (el: Element) => void;\n dom?: Element;\n};\n\n/** One `@cascade:name(value)` provider; created on the region's first render and carried across the next ones. */\ntype CascadeRecord = {\n name: string;\n value: unknown;\n fixed: boolean;\n consumers: Set<ComponentBase> | undefined;\n parent: CascadeRecord | undefined;\n};\n\n/** Output of one `@if`/`@for`/`@switch`/`@cascade`; its contents are diffed in isolation. */\nexport type VRegion = {\n kind: \"region\";\n children: VNode[];\n anchor?: Comment;\n // `@cascade:name(value)` describes its provider with plain fields; `cascade` is the record they create.\n name?: string;\n value?: unknown;\n fixed?: boolean;\n cascade?: CascadeRecord;\n};\n\n/** A child component; the diff decides whether it keeps its previous instance. */\nexport type VComponent = {\n kind: \"component\";\n type: Ctor<ComponentBase>;\n props: Record<string, unknown>;\n slots?: object;\n key?: unknown;\n ref?: (c: ComponentBase) => void;\n instance?: ComponentBase;\n mounted?: Mounted;\n // `@catch`: set on a routed page, it takes the failures the page itself causes instead of `rethrow`.\n onError?: (err: unknown, nav: number) => void;\n // The navigation that put this page here; a patch refreshes its params whenever it moves on.\n nav?: number;\n};\n\nexport type VNode = VText | VElement | VRegion | VComponent | VFine;\n\n/** A `@fine` component's DOM: built once by `fine.ts`, between two comments; patches only refresh it. */\nexport type VFine = { kind: \"fine\"; build: (parent: Node) => void; root?: FineRoot };\n\n/** @internal What `fine.ts` keeps for one fine vnode. */\nexport type FineRoot = { bindings: unknown; start: Comment; end: Comment };\n\ntype FineHooks = {\n create(build: (parent: Node) => void, owner: ComponentBase, app: IApplication | undefined, scope: unknown): FineRoot;\n refresh(root: FineRoot): void;\n dispose(root: FineRoot): void;\n /** A handler of a fine component ran: it re-runs the bindings that read nothing tracked. */\n handled(owner: ComponentBase, result: unknown): void;\n};\n\nlet fineHooks: FineHooks | undefined;\n\n/** @internal On `FineComponent.prototype`: its handlers and callbacks write tracked fields, so nothing re-renders it. */\nexport const FINE: unique symbol = Symbol(\"xzor.fine\");\n\nconst isFine = (c: ComponentBase): boolean => (c as unknown as Record<symbol, unknown>)[FINE] === true;\n\n/** @internal Set by `fine.ts` (the model entry), so the renderer pays nothing without it. */\nexport function setFineHooks(h: FineHooks): void {\n fineHooks = h;\n}\n\n/**\n * @internal A virtual-DOM island inside a fine template: renders `build` before `end`, patching `old`.\n * `scope` is the cascade scope the fine component was mounted in.\n */\nexport function patchIsland(\n owner: ComponentBase,\n app: IApplication | undefined,\n scope: unknown,\n end: Node,\n old: VNode[],\n build: (b: RenderTreeBuilder) => void,\n): VNode[] {\n const builder = new RenderTreeBuilder(owner);\n build(builder);\n const next = builder.nodes;\n batch(() => patchList(end.parentNode!, old, next, end, owner, app, scope as CascadeRecord | undefined));\n return next;\n}\n\n/** @internal Disposes an island's tree; its DOM goes with the region that holds it. */\nexport function disposeIsland(tree: VNode[]): void {\n for (const v of tree) dispose(v);\n}\n\n/** @internal Whether a value is markup (`RenderFragment`). */\nexport const $isFragment = (value: unknown): boolean => isFragment(value);\n\nexport const SVG = \"http://www.w3.org/2000/svg\";\n/** Whether children of `parent` belong to the SVG namespace (`<foreignObject>` holds HTML). */\nexport const $inSvg = (parent: Node): boolean => (parent as Element).namespaceURI === SVG && parent.nodeName !== \"foreignObject\";\nconst inSvg = $inSvg;\n\nfunction fineNodes(root: FineRoot): Node[] {\n const nodes: Node[] = [];\n for (let n: Node | null = root.start; n !== null; n = n.nextSibling) {\n nodes.push(n);\n if (n === root.end) break;\n }\n return nodes;\n}\n\n/** One entry of the generated `.xzor/routes.ts` table; `match` converts the path segments or rejects them. */\nexport type RouteEntry = {\n tag: string | undefined;\n pattern: string;\n /** The page's shortest pattern this one extends: routes of one family share the page instance. */\n family?: string;\n component: unknown;\n match: (s: string[]) => Record<string, unknown> | null;\n};\n\n/** The project's routes, in precedence order. */\nexport type RouteTable = readonly RouteEntry[];\n\n/**\n * The state of the current navigation, published to the routes block and as the cascading value `route`.\n * `Tags` maps each route tag to its params; the generated table fixes it (`AppRoute`) so `is` checks tags.\n */\nexport class Route<P = Record<string, unknown>, Tags extends object = Record<string, Record<string, unknown>>> {\n readonly #nav: Navigation | undefined;\n\n constructor(\n readonly path: string,\n readonly tag: (keyof Tags & string) | undefined,\n readonly params: P,\n readonly query: URLSearchParams,\n readonly match: Record<string, string>,\n nav?: Navigation,\n ) {\n this.#nav = nav;\n }\n\n /** Narrows `params` to the routes carrying `tag`. */\n is<K extends keyof Tags & string>(tag: K): this is Route<Tags[K], Tags> & { readonly tag: K } {\n return this.tag === tag;\n }\n\n /** History navigation under `@ClientRoutes`; `@ServerRoutes` loads the url. */\n navigate(url: string, opts?: { replace?: boolean }): void {\n if (this.#nav) this.#nav.navigate(url, opts?.replace === true);\n else location.href = url;\n }\n}\n\n/** One section of a `@ClientRoutes`/`@ServerRoutes` block; xzor emits these in source order. */\nexport type RouteSection =\n | { kind: \"tag\"; tag: string; render: (route: Route, page: RenderFragment) => RenderFragment }\n | { kind: \"regex\"; re: RegExp; page: boolean; render: (route: Route, page: RenderFragment) => RenderFragment }\n | {\n kind: \"pattern\";\n match: (segments: string[]) => Record<string, string> | null;\n page: boolean;\n render: (route: Route, page: RenderFragment) => RenderFragment;\n }\n | { kind: \"notFound\"; render: (route: Route) => RenderFragment }\n | { kind: \"catch\"; render: (route: Route, error: unknown) => RenderFragment }\n | { kind: \"default\"; render: (route: Route, page: RenderFragment) => RenderFragment };\n\n/** How `@ClientRoutes` reaches the browser's history; `setNavigationForTests` swaps it. */\nexport type Navigation = {\n current(): URL;\n navigate(url: string, replace: boolean): void;\n subscribe(fn: () => void): () => void;\n /** Like `subscribe`, without taking over link clicks (a `NavLink` only watches). Defaults to `subscribe`. */\n observe?(fn: () => void): () => void;\n};\n\n// One set for the whole page: the listeners below exist only while a routes block is mounted.\nconst navigated = new Set<() => void>();\n// NavLinks: notified like routes blocks, but they never intercept clicks.\nconst observers = new Set<() => void>();\nconst EXTERNAL = /(^|\\s)external(\\s|$)/;\nlet transitions = false;\n\n/** Commits each navigation inside `document.startViewTransition` where the browser has it. */\nexport function viewTransitions(on: boolean): void {\n transitions = on;\n}\n\nfunction notifyNavigated(): void {\n const doc = document as Document & { startViewTransition?: (update: () => void) => { ready: Promise<unknown> } };\n // `ready` rejects when the browser skips the animation (a hidden tab, a newer navigation): the update still ran.\n if (transitions && doc.startViewTransition) doc.startViewTransition(notifyAll).ready.catch(noop);\n else notifyAll();\n}\n\nfunction notifyAll(): void {\n for (const fn of [...navigated]) fn();\n for (const fn of [...observers]) fn();\n}\n\nconst onPopState = (): void => notifyNavigated();\n\nfunction onLinkClick(e: MouseEvent): void {\n if (e.defaultPrevented || e.button !== 0 || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return;\n const anchor = (e.target as Element | null)?.closest?.(\"a\");\n const href = anchor?.getAttribute(\"href\");\n if (!anchor || href == null || href.startsWith(\"#\")) return;\n const frame = anchor.getAttribute(\"target\");\n if ((frame !== null && frame !== \"_self\") || anchor.hasAttribute(\"download\")) return;\n const rel = anchor.getAttribute(\"rel\");\n if (rel !== null && EXTERNAL.test(rel)) return;\n // `<base href>` is what the browser resolves a relative link against, so the router has to agree.\n const url = new URL(href, document.baseURI);\n if (url.origin !== location.origin) return;\n // Moving inside the page the user is already on is the browser's job, not a navigation.\n if (url.hash !== \"\" && url.pathname === location.pathname && url.search === location.search) return;\n e.preventDefault();\n browserNavigation.navigate(url.href, false);\n}\n\n// Renders read the current URL every time; it is only parsed again once the address changed.\nlet currentUrl: URL | undefined;\n\nconst browserNavigation: Navigation = {\n current: () => (currentUrl?.href === location.href ? currentUrl : (currentUrl = new URL(location.href))),\n navigate(url, replace) {\n const href = new URL(url, document.baseURI).href;\n if (replace) history.replaceState(null, \"\", href);\n else history.pushState(null, \"\", href);\n notifyNavigated();\n },\n subscribe(fn) {\n navigated.add(fn);\n if (navigated.size === 1) {\n if (observers.size === 0) window.addEventListener(\"popstate\", onPopState);\n document.addEventListener(\"click\", onLinkClick);\n }\n return () => {\n navigated.delete(fn);\n if (navigated.size === 0) {\n if (observers.size === 0) window.removeEventListener(\"popstate\", onPopState);\n document.removeEventListener(\"click\", onLinkClick);\n }\n };\n },\n observe(fn) {\n observers.add(fn);\n if (observers.size === 1 && navigated.size === 0) window.addEventListener(\"popstate\", onPopState);\n return () => {\n observers.delete(fn);\n if (observers.size === 0 && navigated.size === 0) window.removeEventListener(\"popstate\", onPopState);\n };\n },\n};\n\nlet testNavigation: Navigation | undefined;\n\n/** @internal Swaps in a memory navigation; set it before mounting the routes block. */\nexport function setNavigationForTests(nav: Navigation | undefined): void {\n testNavigation = nav;\n}\n\nconst navigationOf = (): Navigation => testNavigation ?? browserNavigation;\n\n/** What one mounted routes block keeps between renders. */\ntype Router = {\n // Set under `@ClientRoutes` only: it is also what `route.navigate` uses.\n nav: Navigation | undefined;\n off: (() => void) | undefined;\n onError: ((err: unknown, nav: number) => void) | undefined;\n caught: Extract<RouteSection, { kind: \"catch\" }> | undefined;\n href: string;\n // Counts the navigations this block has resolved; a failure stamped with an older one is stale.\n id: number;\n route: Route | undefined;\n // Index into the sections of the current render, or -1.\n section: number;\n page: RouteEntry | undefined;\n params: Record<string, unknown>;\n error: unknown;\n failed: boolean;\n};\n\nconst ROUTER: unique symbol = Symbol(\"xzor.router\");\ntype Routed = { [ROUTER]?: Router };\n\nfunction segmentsOf(pathname: string): string[] {\n const rest = pathname.startsWith(\"/\") ? pathname.slice(1) : pathname;\n return rest === \"\" ? [] : rest.split(\"/\");\n}\n\nlet baseFor: string | undefined;\nlet base = \"\";\n\n/** The path of `<base href>` without its last segment: \"\" without one, \"/docs\" under `<base href=\"/docs/\">`. */\nexport function basePath(): string {\n const uri = document.baseURI;\n if (uri !== baseFor) {\n baseFor = uri;\n const path = document.querySelector(\"base[href]\") ? new URL(uri).pathname : \"/\";\n base = path.slice(0, path.lastIndexOf(\"/\"));\n }\n return base;\n}\n\n/** The pathname routes match: relative to `basePath()`, starting with `/`. */\nfunction routePath(pathname: string): string {\n const b = basePath();\n return b !== \"\" && (pathname === b || pathname.startsWith(`${b}/`)) ? pathname.slice(b.length) || \"/\" : pathname;\n}\n\n/** The section's named groups, or null; `lastIndex` is reset in case the regex carries `g` or `y`. */\nfunction groupsOf(re: RegExp, pathname: string): Record<string, string> | null {\n re.lastIndex = 0;\n const m = re.exec(pathname);\n return m ? (m.groups ?? {}) : null;\n}\n\n/** Spec order: a page route picks among the `(page)` sections, otherwise the page-less ones decide. */\nfunction resolveRoute(router: Router, table: RouteTable, sections: readonly RouteSection[], url: URL): void {\n const path = routePath(url.pathname);\n const segments = segmentsOf(path);\n let page: RouteEntry | undefined;\n let params: Record<string, unknown> | null = null;\n for (const entry of table) {\n params = entry.match(segments);\n if (params) {\n page = entry;\n break;\n }\n }\n let section = -1;\n let match: Record<string, string> = {};\n for (let i = 0; i < sections.length && section < 0; i++) {\n const s = sections[i]!;\n if (page) {\n if (s.kind === \"tag\") {\n if (s.tag === page.tag) section = i;\n } else if (s.kind === \"regex\" && s.page) {\n const groups = groupsOf(s.re, path);\n if (groups) {\n section = i;\n match = groups;\n }\n } else if (s.kind === \"pattern\" && s.page) {\n const own = s.match(segments);\n if (own) {\n section = i;\n // The page keeps the table's converted params; the pattern only decides that this section applies.\n match = own;\n }\n }\n } else if (s.kind === \"regex\" && !s.page) {\n const groups = groupsOf(s.re, path);\n if (groups) {\n section = i;\n match = groups;\n }\n } else if (s.kind === \"pattern\" && !s.page) {\n const own = s.match(segments);\n if (own) {\n section = i;\n params = own;\n }\n }\n }\n if (section < 0) section = sections.findIndex((s) => s.kind === (page ? \"default\" : \"notFound\"));\n router.href = url.href;\n router.id++;\n router.page = page;\n router.params = params ?? {};\n router.section = section;\n router.route = new Route(path, page?.tag, router.params, url.searchParams, match, router.nav);\n}\n\n/** A navigation raised while something renders (a page redirecting itself) waits for that render to end. */\nfunction renavigate(owner: ComponentBase): void {\n if (depth === 0) update(owner);\n else queueMicrotask(() => update(owner));\n}\n\ntype Ctor<C extends ComponentBase> = new (...args: any[]) => C;\n// `latest` is the current vnode of a component still waiting for its instance; cleared on arrival or removal.\ntype Mounted = {\n tree: VNode[];\n anchor: Comment;\n app: IApplication | undefined;\n scope: CascadeRecord | undefined;\n latest: VComponent | undefined;\n // The render pass that last refreshed this component's parameters; a cascade skips it then.\n pass: number;\n // A routed page kept across navigations: the latest one it belongs to.\n nav?: number;\n};\n\n/** Builds components that need injected services; generated by xzor from `@Mount` and `@ServiceProvider`. */\nexport interface IApplication {\n onStarted?(): void | Promise<void>;\n /** Consulted only for component classes with a non-empty `static inject`; returns the component, a promise for it, or `undefined` (the runtime then throws). */\n createComponent?(type: Function): ComponentBase | Promise<ComponentBase> | undefined;\n}\n\nconst noop = () => {};\nconst SELECTOR = /[#.[]/;\n\n// Errors from fire-and-forget promises must not vanish; throwing from a microtask reports them.\nconst rethrow = (err: unknown): void =>\n queueMicrotask(() => {\n throw err;\n });\n\nfunction surface(result: unknown): void {\n if (result instanceof Promise) result.catch(rethrow);\n}\n// Projects on the ES2022 lib have no `Symbol.dispose` typing.\ntype DisposeSymbols = { dispose: symbol; asyncDispose: symbol };\nconst wellKnown = Symbol as unknown as DisposeSymbols;\n\n/** @internal Engines without explicit resource management get the registry symbols that TypeScript's downlevel helpers use. */\nexport function polyfillDisposeSymbols(target: Partial<DisposeSymbols>): void {\n target.dispose ??= Symbol.for(\"Symbol.dispose\");\n target.asyncDispose ??= Symbol.for(\"Symbol.asyncDispose\");\n}\n// Runs before any generated provider's class body evaluates `[Symbol.dispose]`, since providers import this module.\npolyfillDisposeSymbols(wellKnown);\ntype ServiceDecorator = {\n <T>(impl: new (...a: any[]) => T): ClassDecorator;\n <T>(key: string, factory: (...a: any[]) => T | Promise<T>): ClassDecorator;\n};\n\nexport const ServiceProvider = (): ClassDecorator => noop;\nexport const Mount = (_component: Function, _target: string): ClassDecorator => noop;\nexport const Import = (..._providers: Function[]): ClassDecorator => noop;\nexport const Singleton: ServiceDecorator = () => noop;\nexport const Scoped: ServiceDecorator = () => noop;\nexport const Transient: ServiceDecorator = () => noop;\nexport const SharedInstance: unique symbol = Symbol(\"xzor.sharedInstance\");\n\nconst mountedComponents = new WeakMap<ComponentBase, Mounted>();\nconst elementHandlers = new WeakMap<\n Element,\n { owner: ComponentBase; events: Record<string, Handler>; modifiers: Record<string, Modifiers>; listening: Set<string> }\n>();\n\nconst FRAGMENT: unique symbol = Symbol(\"xzor.fragment\");\n\ntype Fragment = ((builder: RenderTreeBuilder) => void) & { readonly [FRAGMENT]: true };\n\n/** Markup held as a value (Blazor's RenderFragment); render it with `@member`. */\nexport type RenderFragment = Fragment;\nexport type Renderer = RenderFragment;\n\n/** A component event; invoking it re-renders the component that passed it in. */\nexport type EventCallback<T = void> = (arg: T) => unknown;\n\n/** The DOM element type for a tag name, as `document.createElement` would return it. */\nexport type ElementOf<T extends string> = T extends keyof HTMLElementTagNameMap\n ? HTMLElementTagNameMap[T]\n : T extends keyof SVGElementTagNameMap\n ? SVGElementTagNameMap[T]\n : HTMLElement;\n\nfunction isFragment(value: unknown): value is Fragment {\n return typeof value === \"function\" && FRAGMENT in value;\n}\n\n/** A pending `@bind:debounce` write, on the input it came from. */\ntype Debounced = { timer: ReturnType<typeof setTimeout>; settle: (value: unknown) => void };\nconst DEBOUNCED = Symbol(\"xzor.debounced\");\n\nexport abstract class ComponentBase {\n /** @internal Set by components that use `@leave`: until then, removal skips the `data-leave` check. */\n static $leaves = false;\n /** Wraps builder calls as a RenderFragment; xzor emits this for markup used as a value. */\n static fragment(build: (builder: RenderTreeBuilder) => void): RenderFragment {\n return Object.assign(build, { [FRAGMENT]: true as const });\n }\n\n /** Reads a bound input's new value, converted to the bound field's current type. */\n static bindValue<T>(e: Event, current: T): T {\n const input = e.target as HTMLInputElement;\n if (typeof current === \"boolean\") return input.checked as T;\n if (typeof current === \"number\") return Number(input.value) as T;\n return input.value as T;\n }\n\n /**\n * `@bind:debounce`: runs `run` once input on `e`'s target pauses for `ms`. Each call's promise settles: the\n * last with what `run` returns, the ones it replaced with `undefined`.\n */\n static debounce<T>(e: Event, ms: number, run: () => T): Promise<Awaited<T> | undefined> {\n const target = e.target as unknown as Record<symbol, Debounced | undefined>;\n const prev = target[DEBOUNCED];\n if (prev !== undefined) {\n clearTimeout(prev.timer);\n prev.settle(undefined);\n }\n return new Promise((settle) => {\n const timer = setTimeout(() => {\n target[DEBOUNCED] = undefined;\n settle(run() as Awaited<T>);\n }, ms);\n target[DEBOUNCED] = { timer, settle: settle as (v: unknown) => void };\n });\n }\n\n /** Content the parent passed for each `@slot`; xzor declares the exact type per component. */\n slots: {} = {};\n\n protected abstract buildRenderTree(builder: RenderTreeBuilder): void;\n\n // Lifecycle, in Blazor's order. `...Async` results re-render the component when they settle.\n protected onInitialized(): void {}\n protected onInitializedAsync(): Promise<void> | void {}\n protected onParametersSet(): void {}\n protected onParametersSetAsync(): Promise<void> | void {}\n protected onAfterRender(_firstRender: boolean): void {}\n protected onAfterRenderAsync(_firstRender: boolean): Promise<void> | void {}\n protected shouldRender(): boolean {\n return true;\n }\n /** Called when the component leaves the tree. */\n protected dispose(): void {}\n\n /** Re-renders this component. Event handlers it owns do this automatically. */\n stateHasChanged(): void {\n update(this);\n }\n}\n\ntype Hooks = {\n buildRenderTree(b: RenderTreeBuilder): void;\n onInitialized(): void;\n onInitializedAsync(): Promise<void> | void;\n onParametersSet(): void;\n onParametersSetAsync(): Promise<void> | void;\n onAfterRender(first: boolean): void;\n onAfterRenderAsync(first: boolean): Promise<void> | void;\n shouldRender(): boolean;\n dispose(): void;\n};\n\nconst hooks = (c: ComponentBase) => c as unknown as Hooks;\n\nexport class RenderTreeBuilder {\n readonly #root: VNode[] = [];\n readonly #open: (VElement | VRegion)[] = [];\n\n constructor(private readonly owner: ComponentBase) {}\n\n get nodes(): VNode[] {\n return this.#root;\n }\n\n #append(node: VNode): void {\n (this.#open.at(-1)?.children ?? this.#root).push(node);\n }\n\n #current(): VElement {\n const el = this.#open.at(-1);\n if (el?.kind !== \"element\") throw new Error(\"xzor: attribute outside of an element\");\n return el;\n }\n\n openElement(tag: string): void {\n const el: VElement = { kind: \"element\", tag, attrs: {}, events: {}, modifiers: {}, children: [] };\n this.#append(el);\n this.#open.push(el);\n }\n\n closeElement(): void {\n this.#open.pop();\n }\n\n openRegion(): void {\n const region: VRegion = { kind: \"region\", children: [] };\n this.#append(region);\n this.#open.push(region);\n }\n\n /** `@cascade:name(value)`: a region whose children see `value` under `name`; `fixed` keeps the first value. */\n openCascade(name: string, value: unknown, fixed?: boolean): void {\n const region: VRegion = { kind: \"region\", children: [], name, value, fixed: fixed === true };\n this.#append(region);\n this.#open.push(region);\n }\n\n closeRegion(): void {\n this.#open.pop();\n }\n\n /** `@ClientRoutes`/`@ServerRoutes`: renders the section that matches the current navigation. */\n addRoutes(engine: \"client\" | \"server\", table: RouteTable, sections: readonly RouteSection[]): void {\n const owner = this.owner as ComponentBase & Routed;\n const nav = navigationOf();\n let router = owner[ROUTER];\n if (!router) {\n router = owner[ROUTER] = {\n nav: engine === \"client\" ? nav : undefined,\n off: undefined,\n onError: undefined,\n caught: sections.find((s): s is Extract<RouteSection, { kind: \"catch\" }> => s.kind === \"catch\"),\n href: \"\",\n id: 0,\n route: undefined,\n section: -1,\n page: undefined,\n params: {},\n error: undefined,\n failed: false,\n };\n const failing = router;\n if (router.caught) {\n // The page's own failures reach this one handler; one raised by a page we left is dropped.\n router.onError = (err, id) => {\n if (id !== failing.id) return;\n failing.error = err;\n failing.failed = true;\n queueMicrotask(() => update(owner));\n };\n }\n // `@ServerRoutes` matches once on load: no listeners, no re-render.\n if (router.nav) router.off = router.nav.subscribe(() => renavigate(owner));\n }\n const state = router;\n const url = nav.current();\n if (url.href !== state.href || !state.route) {\n // A navigation clears the error the last page raised.\n state.failed = false;\n state.error = undefined;\n resolveRoute(state, table, sections, url);\n }\n const route = state.route!;\n const section = sections[state.section];\n const page = state.page;\n this.openCascade(\"route\", route);\n if (state.failed) {\n state.caught!.render(route, state.error)(this);\n } else if (page) {\n const entry = page;\n const fragment = ComponentBase.fragment((b) => b.#addPage(entry, state));\n if (section) (section.render as (r: Route, p: RenderFragment) => RenderFragment)(route, fragment)(this);\n else fragment(this);\n } else if (section) {\n (section.render as (r: Route) => RenderFragment)(route)(this);\n }\n this.closeRegion();\n }\n\n // Keyed by route family: navigating between routes of one family (or params only) keeps the page instance.\n #addPage(entry: RouteEntry, router: Router): void {\n this.#append({\n kind: \"component\",\n type: entry.component as Ctor<ComponentBase>,\n props: router.params,\n key: entry.family ?? entry.pattern,\n onError: router.onError,\n nav: router.id,\n });\n }\n\n addAttribute(name: string, value: unknown): void {\n const el = this.#current();\n // `aria-*` states are the strings \"true\" and \"false\".\n if (typeof value === \"boolean\" && name.startsWith(\"aria-\")) value = String(value);\n if (value === false || value == null) delete el.attrs[name];\n else el.attrs[name] = value === true ? \"\" : String(value);\n }\n\n /** `class:name=\"@on\"`: adds `name` to the open element's class while `on` is truthy. */\n toggleClass(name: string, on: unknown): void {\n if (!on) return;\n const attrs = this.#current().attrs;\n const own = attrs[\"class\"];\n attrs[\"class\"] = own ? `${own} ${name}` : name;\n }\n\n /** `@attributes`: each entry is added in order, so later attributes override it. */\n addAttributes(attrs: Record<string, unknown> | null | undefined): void {\n for (const [name, value] of Object.entries(attrs ?? {})) this.addAttribute(name, value);\n }\n\n /** `@attr:name`: an attribute of the nearest open element; `class` adds to its classes. */\n addParentAttribute(name: string, value: unknown): void {\n const open = this.#open;\n let i = open.length - 1;\n while (i >= 0 && open[i]!.kind !== \"element\") i--;\n if (i < 0) throw new Error(`xzor: @attr:${name} outside of an element`);\n const el = open[i] as VElement;\n const own = el.attrs[name];\n if (name === \"class\" && own && value !== false && value != null) el.attrs[\"class\"] = `${own} ${value === true ? \"\" : String(value)}`.trimEnd();\n else if (value === false || value == null) delete el.attrs[name];\n else el.attrs[name] = value === true ? \"\" : String(value);\n }\n\n /** `@onclick:preventDefault` and `@onclick:stopPropagation`, with or without a handler. */\n addEventModifier(event: string, modifier: Modifier, enabled: boolean): void {\n const el = this.#current();\n (el.modifiers[event] ??= {})[modifier] = enabled;\n }\n\n /** `@key`: list diffs match this element by key instead of position. */\n setKey(key: unknown): void {\n this.#current().key = key;\n }\n\n /** `@ref`: receives the DOM element (typed from its tag) after each render. */\n setRef<T extends string>(_tag: T, ref: (el: ElementOf<T>) => void): void {\n this.#current().ref = ref as (el: Element) => void;\n }\n\n addEventHandler<K extends keyof HTMLElementEventMap>(\n event: K,\n handler: (e: HTMLElementEventMap[K]) => unknown,\n ): void;\n addEventHandler(event: string, handler: Handler): void;\n addEventHandler(event: string, handler: (e: never) => unknown): void {\n this.#current().events[event] = handler as Handler;\n }\n\n addText(text: string): void {\n this.#append({ kind: \"text\", text });\n }\n\n /** `@fine`: the whole template, built once into the DOM; its bindings keep it current. */\n addFine(build: (parent: Node) => void): void {\n this.#append({ kind: \"fine\", build });\n }\n\n addContent(value: unknown): void {\n if (isFragment(value)) {\n this.openRegion();\n value(this);\n this.closeRegion();\n return;\n }\n // An empty text node keeps the slot, so siblings stay aligned when content comes and goes.\n if (value === false || value == null) value = \"\";\n this.#append({ kind: \"text\", text: String(value) });\n }\n\n addComponent<C extends ComponentBase>(\n type: Ctor<C>,\n props: Partial<C>,\n slots?: C[\"slots\"],\n extra?: { key?: unknown; ref?: (c: C) => void },\n ): void {\n this.#append({\n kind: \"component\",\n type,\n props: props as Record<string, unknown>,\n slots,\n key: extra?.key,\n ref: extra?.ref as ((c: ComponentBase) => void) | undefined,\n });\n }\n\n /** Wraps a handler passed to a child as an EventCallback (re-renders this owner). */\n callback<T>(handler: (arg: T) => unknown): EventCallback<T> {\n const owner = this.owner;\n if (isFine(owner))\n return (arg: T) => {\n const result = handler(arg);\n fineHooks!.handled(owner, result);\n return result;\n };\n return (arg: T) => {\n const result = handler(arg);\n update(owner);\n if (result instanceof Promise) void result.then(() => update(owner));\n return result;\n };\n }\n}\n\n// Inputs keep live state in properties, so bound attributes are mirrored onto them. `--name` is a custom property.\nfunction setAttr(el: Element, name: string, value: string): void {\n if (name.charCodeAt(0) === 45 && name.charCodeAt(1) === 45) return (el as HTMLElement).style.setProperty(name, value);\n el.setAttribute(name, value);\n if (name === \"value\" && \"value\" in el) (el as HTMLInputElement).value = value;\n if (name === \"checked\" && \"checked\" in el) (el as HTMLInputElement).checked = true;\n}\n\nfunction removeAttr(el: Element, name: string): void {\n if (name.charCodeAt(0) === 45 && name.charCodeAt(1) === 45) return void (el as HTMLElement).style.removeProperty(name);\n el.removeAttribute(name);\n if (name === \"value\" && \"value\" in el) (el as HTMLInputElement).value = \"\";\n if (name === \"checked\" && \"checked\" in el) (el as HTMLInputElement).checked = false;\n}\n\n/** What `@source-crafter/xzor-runtime/model` installs to learn which models a render read. */\nexport type RenderObserver = {\n begin(component: ComponentBase): void;\n end(component: ComponentBase): void;\n dispose(component: ComponentBase): void;\n};\n\nlet observer: RenderObserver | undefined;\n\n/** @internal Set by the model entry; the renderer costs one null check while none is installed. */\nexport function setRenderObserver(o: RenderObserver | undefined): void {\n observer = o;\n}\n\nfunction render(component: ComponentBase): VNode[] {\n const builder = new RenderTreeBuilder(component);\n if (observer === undefined) hooks(component).buildRenderTree(builder);\n else {\n observer.begin(component);\n try {\n hooks(component).buildRenderTree(builder);\n } finally {\n observer.end(component);\n }\n }\n return builder.nodes;\n}\n\n// After-render callbacks wait until the outermost render pass has touched the DOM.\nlet depth = 0;\nlet pass = 0;\nconst afterRender: (() => void)[] = [];\n\nfunction batch(fn: () => void): void {\n if (depth++ === 0) pass++;\n try {\n fn();\n } finally {\n if (--depth === 0) for (const done of afterRender.splice(0)) done();\n }\n}\n\nfunction settle(component: ComponentBase, result: Promise<void> | void, node?: VComponent): void {\n if (!(result instanceof Promise)) return;\n void result.then(() => update(component), node?.onError && ((err: unknown) => fail(node, err)));\n}\n\n/** `@catch`: the failure is reported with the navigation the page belongs to, so a late one can be dropped. */\nfunction fail(v: VComponent, err: unknown): void {\n if (v.onError) v.onError(err, v.mounted?.nav ?? v.nav ?? 0);\n else rethrow(err);\n}\n\nfunction parametersSet(component: ComponentBase): void {\n hooks(component).onParametersSet();\n settle(component, hooks(component).onParametersSetAsync());\n}\n\n/** `static cascades` on a component class: one `[property, cascade name]` pair per `@Cascade` member. */\ntype CascadeList = readonly (readonly [prop: string, name: string])[];\n\nconst cascadesOf = (type: Function): CascadeList | undefined => (type as { cascades?: CascadeList }).cascades;\n\nconst fields = (c: ComponentBase) => c as unknown as Record<string, unknown>;\n\nfunction findCascade(scope: CascadeRecord | undefined, name: string): CascadeRecord | undefined {\n for (let s = scope; s; s = s.parent) if (s.name === name) return s;\n return undefined;\n}\n\n/** Gives each `@Cascade` member the nearest provider's value and subscribes to later changes. */\nfunction resolveCascades(instance: ComponentBase, scope: CascadeRecord | undefined): void {\n // The instance's class, not the vnode's type: a lazy component's type is its loader.\n const list = cascadesOf(instance.constructor);\n if (!list) return;\n for (const [prop, name] of list) {\n const record = findCascade(scope, name);\n if (!record) continue;\n fields(instance)[prop] = record.value;\n // Several members may share one name; the set keeps one entry per instance, in subscription order.\n if (!record.fixed) (record.consumers ??= new Set()).add(instance);\n }\n}\n\nfunction unsubscribeCascades(instance: ComponentBase, scope: CascadeRecord | undefined): void {\n const list = cascadesOf(instance.constructor);\n if (!list) return;\n for (const [, name] of list) findCascade(scope, name)?.consumers?.delete(instance);\n}\n\n// Assigning before the region's children are patched lets a consumer whose props also changed\n// render once with both; the leftovers are told afterwards.\nfunction assignCascade(record: CascadeRecord, consumers: readonly ComponentBase[]): void {\n for (const consumer of consumers) {\n for (const [prop, name] of cascadesOf(consumer.constructor)!) {\n if (name === record.name) fields(consumer)[prop] = record.value;\n }\n }\n}\n\n// A changed cascade takes the same path as a changed prop: onParametersSet, then re-render.\nfunction notifyCascade(consumers: readonly ComponentBase[]): void {\n for (const consumer of consumers) {\n const m = mountedComponents.get(consumer);\n if (!m || m.pass === pass) continue;\n m.pass = pass;\n try {\n parametersSet(consumer);\n update(consumer);\n } catch (err) {\n // One consumer's failure must not keep the rest from seeing the new value.\n rethrow(err);\n }\n }\n}\n\nfunction queueAfterRender(component: ComponentBase, first: boolean): void {\n afterRender.push(() => {\n hooks(component).onAfterRender(first);\n void hooks(component).onAfterRenderAsync(first);\n });\n}\n\nfunction update(component: ComponentBase): void {\n batch(() => {\n const m = mountedComponents.get(component);\n const parent = m?.anchor.parentNode;\n if (!m || !parent || !hooks(component).shouldRender()) return;\n const next = render(component);\n patchList(parent, m.tree, next, m.anchor, component, m.app, m.scope);\n m.tree = next;\n queueAfterRender(component, false);\n });\n}\n\n// `into` is the placeholder left by an async component; it keeps its anchor and the nodes go before it.\nfunction mountComponent(\n component: ComponentBase,\n app: IApplication | undefined,\n scope: CascadeRecord | undefined,\n into?: Mounted,\n node?: VComponent,\n): { nodes: Node[]; mounted: Mounted } {\n hooks(component).onInitialized();\n settle(component, hooks(component).onInitializedAsync(), node);\n parametersSet(component);\n const tree = render(component);\n const mounted = into ?? { tree, anchor: document.createComment(\"\"), app, scope, latest: undefined, pass };\n if (into) into.tree = tree;\n mountedComponents.set(component, mounted);\n const nodes = tree.flatMap((v) => create(v, component, app, scope));\n queueAfterRender(component, true);\n if (!into) nodes.push(mounted.anchor);\n return { nodes, mounted };\n}\n\nconst LAZY = Symbol(\"xzor.lazy\");\ntype Lazy = { [LAZY]: () => Promise<Ctor<ComponentBase>>; loaded: Ctor<ComponentBase> | undefined };\n\n/**\n * A component loaded on first use (a chunk of its own in a split bundle). It stands for the class in the\n * tree: an anchor holds its place until the module arrives, and later uses construct it at once.\n */\nexport function lazy<C>(load: () => Promise<{ default: C }>): C {\n let pending: Promise<Ctor<ComponentBase>> | undefined;\n const stub: Lazy = {\n [LAZY]: () => (pending ??= load().then((m) => (stub.loaded = m.default as Ctor<ComponentBase>))),\n loaded: undefined,\n };\n return stub as unknown as C;\n}\n\nfunction construct(type: Ctor<ComponentBase>, app: IApplication | undefined): ComponentBase | Promise<ComponentBase> {\n const load = (type as Partial<Lazy>)[LAZY];\n if (load !== undefined) {\n const loaded = (type as unknown as Lazy).loaded;\n return loaded !== undefined ? construct(loaded, app) : load().then((c) => construct(c, app));\n }\n const inject = (type as { inject?: readonly string[] }).inject;\n if (!inject?.length) return new type();\n const made = app?.createComponent?.(type);\n if (made) return made;\n if (app) throw new Error(`xzor: ${type.name} is not registered with the application`);\n throw new Error(`xzor: ${type.name} needs injected services (${inject.join(\", \")}) but has no application`);\n}\n\nfunction arrive(mounted: Mounted, instance: ComponentBase): void {\n const v = mounted.latest;\n const parent = mounted.anchor.parentNode;\n mounted.latest = undefined;\n // No vnode: removed before arrival. No parent: the anchor was detached without a dispose.\n if (!v || !parent) {\n disposeInstance(instance);\n return;\n }\n try {\n batch(() => {\n applyProps(instance, v);\n resolveCascades(instance, mounted.scope);\n v.ref?.(instance);\n for (const node of mountComponent(instance, mounted.app, mounted.scope, mounted, v).nodes)\n parent.insertBefore(node, mounted.anchor);\n v.instance = instance;\n });\n } catch (err) {\n fail(v, err);\n if (!v.instance) {\n mountedComponents.delete(instance);\n observer?.dispose(instance);\n unsubscribeCascades(instance, mounted.scope);\n // Nodes of the failed render were never inserted; keep only the empty placeholder.\n const partial = mounted.tree;\n mounted.tree = [];\n for (const node of partial) {\n try {\n dispose(node);\n } catch (disposeErr) {\n rethrow(disposeErr);\n }\n }\n }\n }\n}\n\nfunction applyProps(instance: ComponentBase, v: VComponent): void {\n Object.assign(instance, v.props);\n if (v.slots) instance.slots = v.slots;\n}\n\nfunction propsChanged(o: VComponent, n: VComponent): boolean {\n // Slot lambdas are recreated on every parent render, so a child with slots always refreshes.\n if (n.slots) return true;\n for (const [key, value] of Object.entries(n.props)) {\n // Like Blazor, objects may have been mutated, so they always count as changed.\n if (!Object.is(o.props[key], value) || (typeof value === \"object\" && value !== null)) return true;\n }\n return false;\n}\n\nconst eventNames = (v: VElement) => new Set([...Object.keys(v.events), ...Object.keys(v.modifiers)]);\n\nfunction listen(el: Element, event: string): void {\n elementHandlers.get(el)!.listening.add(event);\n el.addEventListener(event, (e) => {\n const record = elementHandlers.get(el);\n if (!record) return;\n const mods = record.modifiers[event];\n if (mods?.preventDefault) e.preventDefault();\n if (mods?.stopPropagation) e.stopPropagation();\n const handler = record.events[event];\n if (!handler) return;\n const result = handler(e);\n if (isFine(record.owner)) return fineHooks!.handled(record.owner, result);\n update(record.owner);\n if (result instanceof Promise) void result.then(() => update(record.owner));\n });\n}\n\nfunction create(\n v: VNode,\n owner: ComponentBase,\n app: IApplication | undefined,\n scope: CascadeRecord | undefined,\n svg = false,\n): Node[] {\n switch (v.kind) {\n case \"text\":\n v.dom = document.createTextNode(v.text);\n return [v.dom];\n case \"element\": {\n const el = svg || v.tag === \"svg\" ? document.createElementNS(SVG, v.tag) : document.createElement(v.tag);\n for (const [name, value] of Object.entries(v.attrs)) setAttr(el, name, value);\n elementHandlers.set(el, { owner, events: v.events, modifiers: v.modifiers, listening: new Set() });\n for (const event of eventNames(v)) listen(el, event);\n const inner = inSvg(el);\n for (const child of v.children) el.append(...create(child, owner, app, scope, inner));\n v.dom = el;\n v.ref?.(el);\n return [el];\n }\n case \"region\": {\n v.anchor = document.createComment(\"\");\n // The record outlives the vnode: later renders carry it over in `patch`.\n const inner =\n v.name === undefined\n ? scope\n : (v.cascade = { name: v.name, value: v.value, fixed: v.fixed === true, consumers: undefined, parent: scope });\n return [...v.children.flatMap((c) => create(c, owner, app, inner, svg)), v.anchor];\n }\n case \"component\": {\n if (!v.onError) return createComponent(v, app, scope);\n try {\n return createComponent(v, app, scope);\n } catch (err) {\n return failedComponent(v, err, app, scope);\n }\n }\n case \"fine\": {\n if (!fineHooks) throw new Error(\"xzor: a @fine component needs @source-crafter/xzor-runtime/model\");\n return fineNodes((v.root = fineHooks.create(v.build, owner, app, scope)));\n }\n }\n}\n\n// `@cached` components that left the tree, by type and key; their nodes stay built, detached.\n// ponytail: never evicted; one entry per type and key, so a page with keyed routes keeps one per family.\nconst kept = new WeakMap<Function, Map<unknown, VComponent>>();\nlet keptCount = 0;\n\nfunction keep(v: VComponent): void {\n let byKey = kept.get(v.type);\n if (byKey === undefined) kept.set(v.type, (byKey = new Map()));\n if (!byKey.has(v.key)) keptCount++;\n byKey.set(v.key, v);\n}\n\n/** The nodes of a kept instance of `v`'s type and key, patched to `v`'s props; `undefined` if none is kept. */\nfunction revive(v: VComponent, app: IApplication | undefined, scope: CascadeRecord | undefined): Node[] | undefined {\n if (keptCount === 0) return undefined;\n const byKey = kept.get(v.type);\n const old = byKey?.get(v.key);\n if (old === undefined) return undefined;\n byKey!.delete(v.key);\n keptCount--;\n const instance = (v.instance = old.instance!);\n const mounted = (v.mounted = old.mounted!);\n mounted.app = app;\n mounted.scope = scope;\n applyProps(instance, v);\n resolveCascades(instance, scope);\n v.ref?.(instance);\n // Re-rendered in a fragment: `update` patches before the anchor, which needs a parent.\n const frag = document.createDocumentFragment();\n for (const node of nodesOf(old)) frag.appendChild(node);\n mounted.pass = pass;\n parametersSet(instance);\n update(instance);\n return [...frag.childNodes];\n}\n\nfunction createComponent(v: VComponent, app: IApplication | undefined, scope: CascadeRecord | undefined): Node[] {\n const revived = revive(v, app, scope);\n if (revived !== undefined) return revived;\n const made = construct(v.type, app);\n if (made instanceof Promise) {\n const mounted: Mounted = (v.mounted = {\n tree: [],\n anchor: document.createComment(\"\"),\n app,\n scope,\n latest: v,\n pass,\n });\n made.then(\n (instance) => arrive(mounted, instance),\n (err) => {\n const latest = mounted.latest;\n mounted.latest = undefined;\n if (latest) fail(latest, err);\n // A routed page we already left: its failure is stale, like any other.\n else if (!v.onError) rethrow(err);\n },\n );\n return [mounted.anchor];\n }\n v.instance = made;\n applyProps(made, v);\n resolveCascades(made, scope);\n v.ref?.(made);\n const { nodes, mounted } = mountComponent(made, app, scope, undefined, v);\n v.mounted = mounted;\n return nodes;\n}\n\n// `@catch`: the page's nodes never reached the DOM, so only an anchor stays until the block re-renders.\nfunction failedComponent(\n v: VComponent,\n err: unknown,\n app: IApplication | undefined,\n scope: CascadeRecord | undefined,\n): Node[] {\n const instance = v.instance;\n v.instance = undefined;\n if (instance) {\n // Children the page had already mounted go with it, or they keep taking cascades and hooks.\n const partial = mountedComponents.get(instance);\n mountedComponents.delete(instance);\n observer?.dispose(instance);\n unsubscribeCascades(instance, scope);\n for (const node of partial?.tree ?? []) {\n try {\n dispose(node);\n } catch (disposeErr) {\n rethrow(disposeErr);\n }\n }\n }\n v.mounted = { tree: [], anchor: document.createComment(\"\"), app, scope, latest: undefined, pass };\n fail(v, err);\n return [v.mounted.anchor];\n}\n\nfunction nodesOf(v: VNode): Node[] {\n switch (v.kind) {\n case \"text\":\n case \"element\":\n return [v.dom!];\n case \"region\":\n return [...v.children.flatMap(nodesOf), v.anchor!];\n case \"component\":\n return [...v.mounted!.tree.flatMap(nodesOf), v.mounted!.anchor];\n case \"fine\":\n return fineNodes(v.root!);\n }\n}\n\nfunction same(o: VNode, n: VNode): boolean {\n if (o.kind !== n.kind) return false;\n if (o.kind === \"element\") return o.tag === (n as VElement).tag && o.key === (n as VElement).key;\n if (o.kind === \"component\") return o.type === (n as VComponent).type && o.key === (n as VComponent).key;\n // A provider is only ever patched against the same provider; anything else replaces it.\n if (o.kind === \"region\") return o.name === (n as VRegion).name && o.fixed === (n as VRegion).fixed;\n return true;\n}\n\nfunction dispose(v: VNode): void {\n switch (v.kind) {\n case \"element\":\n v.children.forEach(dispose);\n return;\n case \"region\":\n // The provider goes away with its region, so its consumers need not unsubscribe one by one.\n if (v.cascade) v.cascade.consumers = undefined;\n v.children.forEach(dispose);\n return;\n case \"component\":\n if (!v.instance) {\n if (v.mounted) v.mounted.latest = undefined;\n return;\n }\n unsubscribeCascades(v.instance, v.mounted?.scope);\n if ((v.instance.constructor as { cached?: boolean }).cached === true) return keep(v);\n v.mounted?.tree.forEach(dispose);\n mountedComponents.delete(v.instance);\n disposeInstance(v.instance);\n return;\n case \"fine\":\n fineHooks!.dispose(v.root!);\n return;\n }\n}\n\nfunction disposeInstance(c: ComponentBase): void {\n observer?.dispose(c);\n (c as Routed)[ROUTER]?.off?.();\n hooks(c).dispose();\n const d = c as unknown as Record<symbol, (() => unknown) | undefined>;\n d[wellKnown.dispose]?.();\n surface(d[wellKnown.asyncDispose]?.());\n}\n\nfunction remove(parent: Node, v: VNode): void {\n for (const node of nodesOf(v)) $leave(node);\n dispose(v);\n}\n\n/**\n * @internal Removes `node`. A `data-leave` element gets `data-leaving` first and goes when the animations that\n * starts (in it and below) finish; with none, or removed again meanwhile, it goes at once.\n */\nexport function $leave(node: Node): void {\n const el = node as Element;\n if (!ComponentBase.$leaves || el.nodeType !== 1 || !el.hasAttribute(\"data-leave\") || el.hasAttribute(\"data-leaving\")) return void node.parentNode?.removeChild(node);\n el.setAttribute(\"data-leaving\", \"\");\n const animations = (el as Partial<Element & { getAnimations(o?: object): Animation[] }>).getAnimations?.({ subtree: true }) ?? [];\n if (animations.length === 0) return void el.remove();\n const gone = (): void => el.remove();\n void Promise.all(animations.map((a) => a.finished)).then(gone, gone);\n}\n\nfunction patch(\n o: VNode,\n n: VNode,\n owner: ComponentBase,\n app: IApplication | undefined,\n scope: CascadeRecord | undefined,\n): void {\n switch (n.kind) {\n case \"text\": {\n const dom = (n.dom = (o as VText).dom!);\n if (dom.data !== n.text) dom.data = n.text;\n return;\n }\n case \"element\": {\n const old = o as VElement;\n const el = (n.dom = old.dom!);\n for (const name of Object.keys(old.attrs)) if (!(name in n.attrs)) removeAttr(el, name);\n for (const [name, value] of Object.entries(n.attrs)) {\n const live = name === \"value\" ? (el as HTMLInputElement).value : undefined;\n if (old.attrs[name] !== value || (live !== undefined && live !== value)) setAttr(el, name, value);\n }\n const record = elementHandlers.get(el)!;\n record.events = n.events;\n record.modifiers = n.modifiers;\n for (const event of eventNames(n)) if (!record.listening.has(event)) listen(el, event);\n patchList(el, old.children, n.children, null, owner, app, scope);\n n.ref?.(el);\n return;\n }\n case \"region\": {\n const old = o as VRegion;\n const anchor = (n.anchor = old.anchor!);\n // The provider record is carried like the anchor, so consumers keep their subscription.\n const record = old.cascade;\n let subscribers: ComponentBase[] | undefined;\n let inner = scope;\n if (record) {\n record.parent = scope;\n n.cascade = record;\n inner = record;\n // A fixed provider keeps the value of its first render, for consumers mounted later too.\n if (!record.fixed && !Object.is(record.value, n.value)) {\n record.value = n.value;\n if (record.consumers?.size) {\n subscribers = [...record.consumers];\n assignCascade(record, subscribers);\n }\n }\n }\n patchList(anchor.parentNode!, old.children, n.children, anchor, owner, app, inner);\n // Consumers that this patch mounted or already refreshed skip the notification.\n if (subscribers) notifyCascade(subscribers);\n return;\n }\n case \"component\": {\n const old = o as VComponent;\n n.mounted = old.mounted;\n if (!old.instance) {\n // Still waiting for its instance: carry the newest props to arrival.\n if (n.mounted!.latest) n.mounted!.latest = n;\n return;\n }\n const instance = (n.instance = old.instance);\n // A page whose navigation moved on takes its params again even when they compare equal.\n const changed = n.nav !== old.nav || propsChanged(old, n);\n if (n.nav !== undefined) n.mounted!.nav = n.nav;\n applyProps(instance, n);\n n.ref?.(instance);\n if (changed) {\n n.mounted!.pass = pass;\n parametersSet(instance);\n update(instance);\n }\n return;\n }\n case \"fine\": {\n // Built once: a re-render (`stateHasChanged`) re-runs the bindings, for changes nothing tracks.\n fineHooks!.refresh((n.root = (o as VFine).root!));\n return;\n }\n }\n}\n\nconst keyOf = (v: VNode | undefined) => (v && (v.kind === \"element\" || v.kind === \"component\") ? v.key : undefined);\n\nfunction patchList(\n parent: Node,\n old: VNode[],\n next: VNode[],\n end: Node | null,\n owner: ComponentBase,\n app: IApplication | undefined,\n scope: CascadeRecord | undefined,\n): void {\n if (old.some((v) => keyOf(v) != null) || next.some((v) => keyOf(v) != null)) {\n patchKeyed(parent, old, next, end, owner, app, scope);\n return;\n }\n // Positional diff; regions keep variable-length blocks from misaligning their siblings.\n for (let i = 0; i < next.length; i++) {\n const n = next[i]!;\n const o = old[i];\n if (o && same(o, n)) {\n patch(o, n, owner, app, scope);\n continue;\n }\n const ref = o ? nodesOf(o)[0]! : end;\n for (const node of create(n, owner, app, scope, inSvg(parent))) parent.insertBefore(node, ref);\n if (o) remove(parent, o);\n }\n for (const o of old.slice(next.length)) remove(parent, o);\n}\n\n/** `@key` diff: keyed nodes are matched by key and moved; unkeyed ones by position. */\nfunction patchKeyed(\n parent: Node,\n old: VNode[],\n next: VNode[],\n end: Node | null,\n owner: ComponentBase,\n app: IApplication | undefined,\n scope: CascadeRecord | undefined,\n): void {\n const byKey = new Map<unknown, VNode>();\n for (const o of old) if (keyOf(o) != null) byKey.set(keyOf(o), o);\n const used = new Set<VNode>();\n const matches = next.map((n, i) => {\n const key = keyOf(n);\n const o = key != null ? byKey.get(key) : keyOf(old[i]) == null ? old[i] : undefined;\n if (o && !used.has(o) && same(o, n)) {\n used.add(o);\n return o;\n }\n return undefined;\n });\n for (const o of old) if (!used.has(o)) remove(parent, o);\n let ref = end;\n for (let i = next.length - 1; i >= 0; i--) {\n const n = next[i]!;\n const o = matches[i];\n let nodes: Node[];\n if (o) {\n patch(o, n, owner, app, scope);\n nodes = nodesOf(n);\n } else {\n nodes = create(n, owner, app, scope, inSvg(parent));\n }\n for (let j = nodes.length - 1; j >= 0; j--) {\n const node = nodes[j]!;\n if (node.parentNode !== parent || node.nextSibling !== ref) parent.insertBefore(node, ref);\n ref = node;\n }\n }\n}\n\nfunction resolveTarget(target: string | Element): Element {\n if (typeof target !== \"string\") return target;\n const found = SELECTOR.test(target) ? document.querySelector(target) : document.getElementById(target);\n if (!found) throw new Error(`xzor: mount target \"${target}\" not found`);\n return found;\n}\n\n/** `target` is an element, an element id, or a selector (anything containing `#`, `.` or `[`). */\nexport function mount<C extends ComponentBase>(type: Ctor<C>, target: string | Element, app?: IApplication): C {\n const host = resolveTarget(target);\n const root = construct(type, app);\n if (root instanceof Promise) throw new Error(`xzor: root component ${type.name} cannot be asynchronous`);\n batch(() => host.replaceChildren(...mountComponent(root, app, undefined).nodes));\n surface(app?.onStarted?.());\n return root as C;\n}\n\n/** An `<a>` that carries `activeClass` while the current URL is on its `href`; it follows navigation itself. */\nexport class NavLink extends ComponentBase {\n href = \"\";\n activeClass = \"active\";\n match: \"prefix\" | \"exact\" = \"prefix\";\n\n declare slots: { default?: () => RenderFragment };\n\n #path = \"\";\n // `href` resolved against the base URL, encoded like `location.pathname`; `null` for another origin.\n #for: string | undefined;\n #target: string | null = null;\n #off: (() => void) | undefined;\n\n protected override onInitialized(): void {\n const nav = navigationOf();\n this.#path = nav.current().pathname;\n const fn = () => {\n const path = nav.current().pathname;\n if (path === this.#path) return;\n this.#path = path;\n this.stateHasChanged();\n };\n this.#off = nav.observe ? nav.observe(fn) : nav.subscribe(fn);\n }\n\n protected override dispose(): void {\n this.#off?.();\n }\n\n #active(): boolean {\n if (this.#for !== this.href) {\n this.#for = this.href;\n const url = new URL(this.href, document.baseURI);\n this.#target = url.origin === location.origin ? url.pathname : null;\n }\n const target = this.#target;\n if (target === null) return false;\n const path = this.#path;\n // The root is every path's prefix, so it only ever matches exactly.\n if (this.match === \"exact\" || target === `${basePath()}/`) return path === target;\n return path === target || path.startsWith(target.endsWith(\"/\") ? target : `${target}/`);\n }\n\n protected override buildRenderTree(b: RenderTreeBuilder): void {\n b.openElement(\"a\");\n b.addAttribute(\"href\", this.href);\n if (this.#active()) {\n b.addAttribute(\"class\", this.activeClass);\n b.addAttribute(\"aria-current\", \"page\");\n }\n b.addContent(this.slots.default?.() ?? null);\n b.closeElement();\n }\n}\n"
5
+ "// xzor runtime: the RenderTreeBuilder that generated components call into, and a DOM\n// renderer that re-renders one component at a time and patches only what changed.\n\ntype Handler = (e: Event) => unknown;\ntype Modifier = \"preventDefault\" | \"stopPropagation\";\ntype Modifiers = Partial<Record<Modifier, boolean>>;\n\nexport type VText = { kind: \"text\"; text: string; dom?: Text };\n\nexport type VElement = {\n kind: \"element\";\n tag: string;\n attrs: Record<string, string>;\n events: Record<string, Handler>;\n modifiers: Record<string, Modifiers>;\n children: VNode[];\n key?: unknown;\n ref?: (el: Element) => void;\n dom?: Element;\n};\n\n/** One `@cascade:name(value)` provider; created on the region's first render and carried across the next ones. */\ntype CascadeRecord = {\n name: string;\n value: unknown;\n fixed: boolean;\n consumers: Set<ComponentBase> | undefined;\n parent: CascadeRecord | undefined;\n};\n\n/** Output of one `@if`/`@for`/`@switch`/`@cascade`; its contents are diffed in isolation. */\nexport type VRegion = {\n kind: \"region\";\n children: VNode[];\n anchor?: Comment;\n // `@cascade:name(value)` describes its provider with plain fields; `cascade` is the record they create.\n name?: string;\n value?: unknown;\n fixed?: boolean;\n cascade?: CascadeRecord;\n};\n\n/** A child component; the diff decides whether it keeps its previous instance. */\nexport type VComponent = {\n kind: \"component\";\n type: Ctor<ComponentBase>;\n props: Record<string, unknown>;\n slots?: object;\n key?: unknown;\n ref?: (c: ComponentBase) => void;\n instance?: ComponentBase;\n mounted?: Mounted;\n // `@catch`: set on a routed page, it takes the failures the page itself causes instead of `rethrow`.\n onError?: (err: unknown, nav: number) => void;\n // The navigation that put this page here; a patch refreshes its params whenever it moves on.\n nav?: number;\n};\n\nexport type VNode = VText | VElement | VRegion | VComponent | VFine;\n\n/** A `@fine` component's DOM: built once by `fine.ts`, between two comments; patches only refresh it. */\nexport type VFine = { kind: \"fine\"; build: (parent: Node) => void; root?: FineRoot };\n\n/** @internal What `fine.ts` keeps for one fine vnode. */\nexport type FineRoot = { bindings: unknown; start: Comment; end: Comment };\n\ntype FineHooks = {\n create(build: (parent: Node) => void, owner: ComponentBase, app: IApplication | undefined, scope: unknown): FineRoot;\n refresh(root: FineRoot): void;\n dispose(root: FineRoot): void;\n /** A handler of a fine component ran: it re-runs the bindings that read nothing tracked. */\n handled(owner: ComponentBase, result: unknown): void;\n};\n\nlet fineHooks: FineHooks | undefined;\n\n/** @internal On `FineComponent.prototype`: its handlers and callbacks write tracked fields, so nothing re-renders it. */\nexport const FINE: unique symbol = Symbol(\"xzor.fine\");\n\nconst isFine = (c: ComponentBase): boolean => (c as unknown as Record<symbol, unknown>)[FINE] === true;\n\n/** @internal Set by `fine.ts` (the model entry), so the renderer pays nothing without it. */\nexport function setFineHooks(h: FineHooks): void {\n fineHooks = h;\n}\n\n/**\n * @internal A virtual-DOM island inside a fine template: renders `build` before `end`, patching `old`.\n * `scope` is the cascade scope the fine component was mounted in.\n */\nexport function patchIsland(\n owner: ComponentBase,\n app: IApplication | undefined,\n scope: unknown,\n end: Node,\n old: VNode[],\n build: (b: RenderTreeBuilder) => void,\n): VNode[] {\n const builder = new RenderTreeBuilder(owner);\n build(builder);\n const next = builder.nodes;\n batch(() => patchList(end.parentNode!, old, next, end, owner, app, scope as CascadeRecord | undefined));\n return next;\n}\n\n/** @internal Disposes an island's tree; its DOM goes with the region that holds it. */\nexport function disposeIsland(tree: VNode[]): void {\n for (const v of tree) dispose(v);\n}\n\n/** @internal Whether a value is markup (`RenderFragment`). */\nexport const $isFragment = (value: unknown): boolean => isFragment(value);\n\nexport const SVG = \"http://www.w3.org/2000/svg\";\n/** Whether children of `parent` belong to the SVG namespace (`<foreignObject>` holds HTML). */\nexport const $inSvg = (parent: Node): boolean => (parent as Element).namespaceURI === SVG && parent.nodeName !== \"foreignObject\";\nconst inSvg = $inSvg;\n\nfunction fineNodes(root: FineRoot): Node[] {\n const nodes: Node[] = [];\n for (let n: Node | null = root.start; n !== null; n = n.nextSibling) {\n nodes.push(n);\n if (n === root.end) break;\n }\n return nodes;\n}\n\n/** One entry of the generated `.xzor/routes.ts` table; `match` converts the path segments or rejects them. */\nexport type RouteEntry = {\n tag: string | undefined;\n pattern: string;\n /** The page's shortest pattern this one extends: routes of one family share the page instance. */\n family?: string;\n component: unknown;\n match: (s: string[]) => Record<string, unknown> | null;\n};\n\n/** The project's routes, in precedence order. */\nexport type RouteTable = readonly RouteEntry[];\n\n/**\n * The state of the current navigation, published to the routes block and as the cascading value `route`.\n * `Tags` maps each route tag to its params; the generated table fixes it (`AppRoute`) so `is` checks tags.\n */\nexport class Route<P = Record<string, unknown>, Tags extends object = Record<string, Record<string, unknown>>> {\n readonly #nav: Navigation | undefined;\n\n constructor(\n readonly path: string,\n readonly tag: (keyof Tags & string) | undefined,\n readonly params: P,\n readonly query: URLSearchParams,\n readonly match: Record<string, string>,\n nav?: Navigation,\n ) {\n this.#nav = nav;\n }\n\n /** Narrows `params` to the routes carrying `tag`. */\n is<K extends keyof Tags & string>(tag: K): this is Route<Tags[K], Tags> & { readonly tag: K } {\n return this.tag === tag;\n }\n\n /** History navigation under `@ClientRoutes`; `@ServerRoutes` loads the url. */\n navigate(url: string, opts?: { replace?: boolean }): void {\n if (this.#nav) this.#nav.navigate(url, opts?.replace === true);\n else location.href = url;\n }\n}\n\n/** One section of a `@ClientRoutes`/`@ServerRoutes` block; xzor emits these in source order. */\nexport type RouteSection =\n | { kind: \"tag\"; tag: string; render: (route: Route, page: RenderFragment) => RenderFragment }\n | { kind: \"regex\"; re: RegExp; page: boolean; render: (route: Route, page: RenderFragment) => RenderFragment }\n | {\n kind: \"pattern\";\n match: (segments: string[]) => Record<string, string> | null;\n page: boolean;\n render: (route: Route, page: RenderFragment) => RenderFragment;\n }\n | { kind: \"notFound\"; render: (route: Route) => RenderFragment }\n | { kind: \"catch\"; render: (route: Route, error: unknown) => RenderFragment }\n | { kind: \"default\"; render: (route: Route, page: RenderFragment) => RenderFragment };\n\n/** How `@ClientRoutes` reaches the browser's history; `setNavigationForTests` swaps it. */\nexport type Navigation = {\n current(): URL;\n navigate(url: string, replace: boolean): void;\n subscribe(fn: () => void): () => void;\n /** Like `subscribe`, without taking over link clicks (a `NavLink` only watches). Defaults to `subscribe`. */\n observe?(fn: () => void): () => void;\n};\n\n// One set for the whole page: the listeners below exist only while a routes block is mounted.\nconst navigated = new Set<() => void>();\n// NavLinks: notified like routes blocks, but they never intercept clicks.\nconst observers = new Set<() => void>();\nconst EXTERNAL = /(^|\\s)external(\\s|$)/;\nlet transitions = false;\n\n/** Commits each navigation inside `document.startViewTransition` where the browser has it. */\nexport function viewTransitions(on: boolean): void {\n transitions = on;\n}\n\nfunction notifyNavigated(): void {\n const doc = document as Document & { startViewTransition?: (update: () => void) => { ready: Promise<unknown> } };\n // `ready` rejects when the browser skips the animation (a hidden tab, a newer navigation): the update still ran.\n if (transitions && doc.startViewTransition) doc.startViewTransition(notifyAll).ready.catch(noop);\n else notifyAll();\n}\n\nfunction notifyAll(): void {\n for (const fn of [...navigated]) fn();\n for (const fn of [...observers]) fn();\n}\n\nconst onPopState = (): void => notifyNavigated();\n\nfunction onLinkClick(e: MouseEvent): void {\n if (e.defaultPrevented || e.button !== 0 || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return;\n const anchor = (e.target as Element | null)?.closest?.(\"a\");\n const href = anchor?.getAttribute(\"href\");\n if (!anchor || href == null || href.startsWith(\"#\")) return;\n const frame = anchor.getAttribute(\"target\");\n if ((frame !== null && frame !== \"_self\") || anchor.hasAttribute(\"download\")) return;\n const rel = anchor.getAttribute(\"rel\");\n if (rel !== null && EXTERNAL.test(rel)) return;\n // `<base href>` is what the browser resolves a relative link against, so the router has to agree.\n const url = new URL(href, document.baseURI);\n if (url.origin !== location.origin) return;\n // Moving inside the page the user is already on is the browser's job, not a navigation.\n if (url.hash !== \"\" && url.pathname === location.pathname && url.search === location.search) return;\n e.preventDefault();\n browserNavigation.navigate(url.href, false);\n}\n\n// Renders read the current URL every time; it is only parsed again once the address changed.\nlet currentUrl: URL | undefined;\n\nconst browserNavigation: Navigation = {\n current: () => (currentUrl?.href === location.href ? currentUrl : (currentUrl = new URL(location.href))),\n navigate(url, replace) {\n const href = new URL(url, document.baseURI).href;\n if (replace) history.replaceState(null, \"\", href);\n else history.pushState(null, \"\", href);\n notifyNavigated();\n },\n subscribe(fn) {\n navigated.add(fn);\n if (navigated.size === 1) {\n if (observers.size === 0) window.addEventListener(\"popstate\", onPopState);\n document.addEventListener(\"click\", onLinkClick);\n }\n return () => {\n navigated.delete(fn);\n if (navigated.size === 0) {\n if (observers.size === 0) window.removeEventListener(\"popstate\", onPopState);\n document.removeEventListener(\"click\", onLinkClick);\n }\n };\n },\n observe(fn) {\n observers.add(fn);\n if (observers.size === 1 && navigated.size === 0) window.addEventListener(\"popstate\", onPopState);\n return () => {\n observers.delete(fn);\n if (observers.size === 0 && navigated.size === 0) window.removeEventListener(\"popstate\", onPopState);\n };\n },\n};\n\nlet testNavigation: Navigation | undefined;\n\n/** @internal Swaps in a memory navigation; set it before mounting the routes block. */\nexport function setNavigationForTests(nav: Navigation | undefined): void {\n testNavigation = nav;\n}\n\nconst navigationOf = (): Navigation => testNavigation ?? browserNavigation;\n\n/** What one mounted routes block keeps between renders. */\ntype Router = {\n // Set under `@ClientRoutes` only: it is also what `route.navigate` uses.\n nav: Navigation | undefined;\n off: (() => void) | undefined;\n onError: ((err: unknown, nav: number) => void) | undefined;\n caught: Extract<RouteSection, { kind: \"catch\" }> | undefined;\n href: string;\n // Counts the navigations this block has resolved; a failure stamped with an older one is stale.\n id: number;\n route: Route | undefined;\n // Index into the sections of the current render, or -1.\n section: number;\n page: RouteEntry | undefined;\n params: Record<string, unknown>;\n error: unknown;\n failed: boolean;\n};\n\nconst ROUTER: unique symbol = Symbol(\"xzor.router\");\ntype Routed = { [ROUTER]?: Router };\n\nfunction segmentsOf(pathname: string): string[] {\n const rest = pathname.startsWith(\"/\") ? pathname.slice(1) : pathname;\n return rest === \"\" ? [] : rest.split(\"/\");\n}\n\nlet baseFor: string | undefined;\nlet base = \"\";\n\n/** The path of `<base href>` without its last segment: \"\" without one, \"/docs\" under `<base href=\"/docs/\">`. */\nexport function basePath(): string {\n const uri = document.baseURI;\n if (uri !== baseFor) {\n baseFor = uri;\n const path = document.querySelector(\"base[href]\") ? new URL(uri).pathname : \"/\";\n base = path.slice(0, path.lastIndexOf(\"/\"));\n }\n return base;\n}\n\n/** The pathname routes match: relative to `basePath()`, starting with `/`. */\nfunction routePath(pathname: string): string {\n const b = basePath();\n return b !== \"\" && (pathname === b || pathname.startsWith(`${b}/`)) ? pathname.slice(b.length) || \"/\" : pathname;\n}\n\n/** The section's named groups, or null; `lastIndex` is reset in case the regex carries `g` or `y`. */\nfunction groupsOf(re: RegExp, pathname: string): Record<string, string> | null {\n re.lastIndex = 0;\n const m = re.exec(pathname);\n return m ? (m.groups ?? {}) : null;\n}\n\n/** Spec order: a page route picks among the `(page)` sections, otherwise the page-less ones decide. */\nfunction resolveRoute(router: Router, table: RouteTable, sections: readonly RouteSection[], url: URL): void {\n const path = routePath(url.pathname);\n const segments = segmentsOf(path);\n let page: RouteEntry | undefined;\n let params: Record<string, unknown> | null = null;\n for (const entry of table) {\n params = entry.match(segments);\n if (params) {\n page = entry;\n break;\n }\n }\n let section = -1;\n let match: Record<string, string> = {};\n for (let i = 0; i < sections.length && section < 0; i++) {\n const s = sections[i]!;\n if (page) {\n if (s.kind === \"tag\") {\n if (s.tag === page.tag) section = i;\n } else if (s.kind === \"regex\" && s.page) {\n const groups = groupsOf(s.re, path);\n if (groups) {\n section = i;\n match = groups;\n }\n } else if (s.kind === \"pattern\" && s.page) {\n const own = s.match(segments);\n if (own) {\n section = i;\n // The page keeps the table's converted params; the pattern only decides that this section applies.\n match = own;\n }\n }\n } else if (s.kind === \"regex\" && !s.page) {\n const groups = groupsOf(s.re, path);\n if (groups) {\n section = i;\n match = groups;\n }\n } else if (s.kind === \"pattern\" && !s.page) {\n const own = s.match(segments);\n if (own) {\n section = i;\n params = own;\n }\n }\n }\n if (section < 0) section = sections.findIndex((s) => s.kind === (page ? \"default\" : \"notFound\"));\n router.href = url.href;\n router.id++;\n router.page = page;\n router.params = params ?? {};\n router.section = section;\n router.route = new Route(path, page?.tag, router.params, url.searchParams, match, router.nav);\n}\n\n/** A navigation raised while something renders (a page redirecting itself) waits for that render to end. */\nfunction renavigate(owner: ComponentBase): void {\n if (depth === 0) update(owner);\n else queueMicrotask(() => update(owner));\n}\n\ntype Ctor<C extends ComponentBase> = new (...args: any[]) => C;\n// `latest` is the current vnode of a component still waiting for its instance; cleared on arrival or removal.\ntype Mounted = {\n tree: VNode[];\n anchor: Comment;\n app: IApplication | undefined;\n scope: CascadeRecord | undefined;\n latest: VComponent | undefined;\n // The render pass that last refreshed this component's parameters; a cascade skips it then.\n pass: number;\n // A routed page kept across navigations: the latest one it belongs to.\n nav?: number;\n};\n\n/** Builds components that need injected services; generated by xzor from `@Mount` and `@ServiceProvider`. */\nexport interface IApplication {\n onStarted?(): void | Promise<void>;\n /** Consulted only for component classes with a non-empty `static inject`; returns the component, a promise for it, or `undefined` (the runtime then throws). */\n createComponent?(type: Function): ComponentBase | Promise<ComponentBase> | undefined;\n}\n\nconst noop = () => {};\nconst SELECTOR = /[#.[]/;\n\n// Errors from fire-and-forget promises must not vanish; throwing from a microtask reports them.\nconst rethrow = (err: unknown): void =>\n queueMicrotask(() => {\n throw err;\n });\n\nfunction surface(result: unknown): void {\n if (result instanceof Promise) result.catch(rethrow);\n}\n// Projects on the ES2022 lib have no `Symbol.dispose` typing.\ntype DisposeSymbols = { dispose: symbol; asyncDispose: symbol };\nconst wellKnown = Symbol as unknown as DisposeSymbols;\n\n/** @internal Engines without explicit resource management get the registry symbols that TypeScript's downlevel helpers use. */\nexport function polyfillDisposeSymbols(target: Partial<DisposeSymbols>): void {\n target.dispose ??= Symbol.for(\"Symbol.dispose\");\n target.asyncDispose ??= Symbol.for(\"Symbol.asyncDispose\");\n}\n// Runs before any generated provider's class body evaluates `[Symbol.dispose]`, since providers import this module.\npolyfillDisposeSymbols(wellKnown);\ntype ServiceDecorator = {\n <T>(impl: new (...a: any[]) => T): ClassDecorator;\n <T>(key: string, factory: (...a: any[]) => T | Promise<T>): ClassDecorator;\n};\n\nexport const ServiceProvider = (): ClassDecorator => noop;\nexport const Mount = (_component: Function, _target: string): ClassDecorator => noop;\nexport const Import = (..._providers: Function[]): ClassDecorator => noop;\nexport const Singleton: ServiceDecorator = () => noop;\nexport const Scoped: ServiceDecorator = () => noop;\nexport const Transient: ServiceDecorator = () => noop;\nexport const SharedInstance: unique symbol = Symbol(\"xzor.sharedInstance\");\n\nconst mountedComponents = new WeakMap<ComponentBase, Mounted>();\nconst elementHandlers = new WeakMap<\n Element,\n { owner: ComponentBase; events: Record<string, Handler>; modifiers: Record<string, Modifiers>; listening: Set<string> }\n>();\n\nconst FRAGMENT: unique symbol = Symbol(\"xzor.fragment\");\n\ntype Fragment = ((builder: RenderTreeBuilder) => void) & { readonly [FRAGMENT]: true };\n\n/** Markup held as a value (Blazor's RenderFragment); render it with `@member`. */\nexport type RenderFragment = Fragment;\nexport type Renderer = RenderFragment;\n\n/** A component event; invoking it re-renders the component that passed it in. */\nexport type EventCallback<T = void> = (arg: T) => unknown;\n\n/** The DOM element type for a tag name, as `document.createElement` would return it. */\nexport type ElementOf<T extends string> = T extends keyof HTMLElementTagNameMap\n ? HTMLElementTagNameMap[T]\n : T extends keyof SVGElementTagNameMap\n ? SVGElementTagNameMap[T]\n : HTMLElement;\n\nfunction isFragment(value: unknown): value is Fragment {\n return typeof value === \"function\" && FRAGMENT in value;\n}\n\n/** A pending `@bind:debounce` write, on the input it came from. */\ntype Debounced = { timer: ReturnType<typeof setTimeout>; settle: (value: unknown) => void };\nconst DEBOUNCED = Symbol(\"xzor.debounced\");\n\nexport abstract class ComponentBase {\n /** @internal Set by components that use `@leave`: until then, removal skips the `data-leave` check. */\n static $leaves = false;\n /** Wraps builder calls as a RenderFragment; xzor emits this for markup used as a value. */\n static fragment(build: (builder: RenderTreeBuilder) => void): RenderFragment {\n return Object.assign(build, { [FRAGMENT]: true as const });\n }\n\n /** Reads a bound input's new value, converted to the bound field's current type. */\n static bindValue<T>(e: Event, current: T): T {\n const input = e.target as HTMLInputElement;\n if (typeof current === \"boolean\") return input.checked as T;\n if (typeof current === \"number\") return Number(input.value) as T;\n return input.value as T;\n }\n\n /**\n * `@bind:debounce`: runs `run` once input on `e`'s target pauses for `ms`. Each call's promise settles: the\n * last with what `run` returns, the ones it replaced with `undefined`.\n */\n static debounce<T>(e: Event, ms: number, run: () => T): Promise<Awaited<T> | undefined> {\n const target = e.target as unknown as Record<symbol, Debounced | undefined>;\n const prev = target[DEBOUNCED];\n if (prev !== undefined) {\n clearTimeout(prev.timer);\n prev.settle(undefined);\n }\n return new Promise((settle) => {\n const timer = setTimeout(() => {\n target[DEBOUNCED] = undefined;\n settle(run() as Awaited<T>);\n }, ms);\n target[DEBOUNCED] = { timer, settle: settle as (v: unknown) => void };\n });\n }\n\n /** Content the parent passed for each `@slot`; xzor declares the exact type per component. */\n slots: {} = {};\n\n protected abstract buildRenderTree(builder: RenderTreeBuilder): void;\n\n // Lifecycle, in Blazor's order. `...Async` results re-render the component when they settle.\n protected onInitialized(): void {}\n protected onInitializedAsync(): Promise<void> | void {}\n protected onParametersSet(): void {}\n protected onParametersSetAsync(): Promise<void> | void {}\n protected onAfterRender(_firstRender: boolean): void {}\n protected onAfterRenderAsync(_firstRender: boolean): Promise<void> | void {}\n protected shouldRender(): boolean {\n return true;\n }\n /** Called when the component leaves the tree. */\n protected dispose(): void {}\n\n /** Re-renders this component. Event handlers it owns do this automatically. */\n stateHasChanged(): void {\n update(this);\n }\n}\n\ntype Hooks = {\n buildRenderTree(b: RenderTreeBuilder): void;\n onInitialized(): void;\n onInitializedAsync(): Promise<void> | void;\n onParametersSet(): void;\n onParametersSetAsync(): Promise<void> | void;\n onAfterRender(first: boolean): void;\n onAfterRenderAsync(first: boolean): Promise<void> | void;\n shouldRender(): boolean;\n dispose(): void;\n};\n\nconst hooks = (c: ComponentBase) => c as unknown as Hooks;\n\nexport class RenderTreeBuilder {\n readonly #root: VNode[] = [];\n readonly #open: (VElement | VRegion)[] = [];\n\n constructor(private readonly owner: ComponentBase) {}\n\n get nodes(): VNode[] {\n return this.#root;\n }\n\n #append(node: VNode): void {\n (this.#open.at(-1)?.children ?? this.#root).push(node);\n }\n\n #current(): VElement {\n const el = this.#open.at(-1);\n if (el?.kind !== \"element\") throw new Error(\"xzor: attribute outside of an element\");\n return el;\n }\n\n openElement(tag: string): void {\n const el: VElement = { kind: \"element\", tag, attrs: {}, events: {}, modifiers: {}, children: [] };\n this.#append(el);\n this.#open.push(el);\n }\n\n closeElement(): void {\n this.#open.pop();\n }\n\n openRegion(): void {\n const region: VRegion = { kind: \"region\", children: [] };\n this.#append(region);\n this.#open.push(region);\n }\n\n /** `@cascade:name(value)`: a region whose children see `value` under `name`; `fixed` keeps the first value. */\n openCascade(name: string, value: unknown, fixed?: boolean): void {\n const region: VRegion = { kind: \"region\", children: [], name, value, fixed: fixed === true };\n this.#append(region);\n this.#open.push(region);\n }\n\n closeRegion(): void {\n this.#open.pop();\n }\n\n /** `@ClientRoutes`/`@ServerRoutes`: renders the section that matches the current navigation. */\n addRoutes(engine: \"client\" | \"server\", table: RouteTable, sections: readonly RouteSection[]): void {\n const owner = this.owner as ComponentBase & Routed;\n const nav = navigationOf();\n let router = owner[ROUTER];\n if (!router) {\n router = owner[ROUTER] = {\n nav: engine === \"client\" ? nav : undefined,\n off: undefined,\n onError: undefined,\n caught: sections.find((s): s is Extract<RouteSection, { kind: \"catch\" }> => s.kind === \"catch\"),\n href: \"\",\n id: 0,\n route: undefined,\n section: -1,\n page: undefined,\n params: {},\n error: undefined,\n failed: false,\n };\n const failing = router;\n if (router.caught) {\n // The page's own failures reach this one handler; one raised by a page we left is dropped.\n router.onError = (err, id) => {\n if (id !== failing.id) return;\n failing.error = err;\n failing.failed = true;\n queueMicrotask(() => update(owner));\n };\n }\n // `@ServerRoutes` matches once on load: no listeners, no re-render.\n if (router.nav) router.off = router.nav.subscribe(() => renavigate(owner));\n }\n const state = router;\n const url = nav.current();\n if (url.href !== state.href || !state.route) {\n // A navigation clears the error the last page raised.\n state.failed = false;\n state.error = undefined;\n resolveRoute(state, table, sections, url);\n }\n const route = state.route!;\n const section = sections[state.section];\n const page = state.page;\n this.openCascade(\"route\", route);\n if (state.failed) {\n state.caught!.render(route, state.error)(this);\n } else if (page) {\n const entry = page;\n const fragment = ComponentBase.fragment((b) => b.#addPage(entry, state));\n if (section) (section.render as (r: Route, p: RenderFragment) => RenderFragment)(route, fragment)(this);\n else fragment(this);\n } else if (section) {\n (section.render as (r: Route) => RenderFragment)(route)(this);\n }\n this.closeRegion();\n }\n\n // Keyed by route family: navigating between routes of one family (or params only) keeps the page instance.\n #addPage(entry: RouteEntry, router: Router): void {\n this.#append({\n kind: \"component\",\n type: entry.component as Ctor<ComponentBase>,\n props: router.params,\n key: entry.family ?? entry.pattern,\n onError: router.onError,\n nav: router.id,\n });\n }\n\n addAttribute(name: string, value: unknown): void {\n const el = this.#current();\n // `aria-*` states are the strings \"true\" and \"false\".\n if (typeof value === \"boolean\" && name.startsWith(\"aria-\")) value = String(value);\n if (value === false || value == null) delete el.attrs[name];\n else el.attrs[name] = value === true ? \"\" : String(value);\n }\n\n /** `class:name=\"@on\"`: adds `name` to the open element's class while `on` is truthy. */\n toggleClass(name: string, on: unknown): void {\n if (!on) return;\n const attrs = this.#current().attrs;\n const own = attrs[\"class\"];\n attrs[\"class\"] = own ? `${own} ${name}` : name;\n }\n\n /** `@attributes`: each entry is added in order, so later attributes override it. */\n addAttributes(attrs: Record<string, unknown> | null | undefined): void {\n for (const [name, value] of Object.entries(attrs ?? {})) this.addAttribute(name, value);\n }\n\n /** `@attr:name`: an attribute of the nearest open element; `class` adds to its classes. */\n addParentAttribute(name: string, value: unknown): void {\n const open = this.#open;\n let i = open.length - 1;\n while (i >= 0 && open[i]!.kind !== \"element\") i--;\n if (i < 0) throw new Error(`xzor: @attr:${name} outside of an element`);\n const el = open[i] as VElement;\n const own = el.attrs[name];\n if (name === \"class\" && own && value !== false && value != null) el.attrs[\"class\"] = `${own} ${value === true ? \"\" : String(value)}`.trimEnd();\n else if (value === false || value == null) delete el.attrs[name];\n else el.attrs[name] = value === true ? \"\" : String(value);\n }\n\n /** `@onclick:preventDefault` and `@onclick:stopPropagation`, with or without a handler. */\n addEventModifier(event: string, modifier: Modifier, enabled: boolean): void {\n const el = this.#current();\n (el.modifiers[event] ??= {})[modifier] = enabled;\n }\n\n /** `@key`: list diffs match this element by key instead of position. */\n setKey(key: unknown): void {\n this.#current().key = key;\n }\n\n /** `@ref`: receives the DOM element (typed from its tag) after each render. */\n setRef<T extends string>(_tag: T, ref: (el: ElementOf<T>) => void): void {\n this.#current().ref = ref as (el: Element) => void;\n }\n\n addEventHandler<K extends keyof HTMLElementEventMap>(\n event: K,\n handler: (e: HTMLElementEventMap[K]) => unknown,\n ): void;\n addEventHandler(event: string, handler: Handler): void;\n addEventHandler(event: string, handler: (e: never) => unknown): void {\n this.#current().events[event] = handler as Handler;\n }\n\n addText(text: string): void {\n this.#append({ kind: \"text\", text });\n }\n\n /** `@fine`: the whole template, built once into the DOM; its bindings keep it current. */\n addFine(build: (parent: Node) => void): void {\n this.#append({ kind: \"fine\", build });\n }\n\n addContent(value: unknown): void {\n if (isFragment(value)) {\n this.openRegion();\n value(this);\n this.closeRegion();\n return;\n }\n // An empty text node keeps the slot, so siblings stay aligned when content comes and goes.\n if (value === false || value == null) value = \"\";\n this.#append({ kind: \"text\", text: String(value) });\n }\n\n addComponent<C extends ComponentBase>(\n type: Ctor<C>,\n props: Partial<C>,\n slots?: C[\"slots\"],\n extra?: { key?: unknown; ref?: (c: C) => void },\n ): void {\n this.#append({\n kind: \"component\",\n type,\n props: props as Record<string, unknown>,\n slots,\n key: extra?.key,\n ref: extra?.ref as ((c: ComponentBase) => void) | undefined,\n });\n }\n\n /** Wraps a handler passed to a child as an EventCallback (re-renders this owner). */\n callback<T>(handler: (arg: T) => unknown): EventCallback<T> {\n const owner = this.owner;\n if (isFine(owner))\n return (arg: T) => {\n const result = handler(arg);\n fineHooks!.handled(owner, result);\n return result;\n };\n return (arg: T) => {\n const result = handler(arg);\n update(owner);\n if (result instanceof Promise) void result.then(() => update(owner));\n return result;\n };\n }\n}\n\n// Inputs keep live state in properties, so bound attributes are mirrored onto them. `--name` is a custom property.\nfunction setAttr(el: Element, name: string, value: string): void {\n if (name.charCodeAt(0) === 45 && name.charCodeAt(1) === 45) return (el as HTMLElement).style.setProperty(name, value);\n el.setAttribute(name, value);\n if (name === \"value\" && \"value\" in el) (el as HTMLInputElement).value = value;\n if (name === \"checked\" && \"checked\" in el) (el as HTMLInputElement).checked = true;\n}\n\nfunction removeAttr(el: Element, name: string): void {\n if (name.charCodeAt(0) === 45 && name.charCodeAt(1) === 45) return void (el as HTMLElement).style.removeProperty(name);\n el.removeAttribute(name);\n if (name === \"value\" && \"value\" in el) (el as HTMLInputElement).value = \"\";\n if (name === \"checked\" && \"checked\" in el) (el as HTMLInputElement).checked = false;\n}\n\n/** What `@source-crafter/xzor-runtime/model` installs to learn which models a render read. */\nexport type RenderObserver = {\n begin(component: ComponentBase): void;\n end(component: ComponentBase): void;\n dispose(component: ComponentBase): void;\n};\n\nlet observer: RenderObserver | undefined;\n\n/** @internal Set by the model entry; the renderer costs one null check while none is installed. */\nexport function setRenderObserver(o: RenderObserver | undefined): void {\n observer = o;\n}\n\nfunction render(component: ComponentBase): VNode[] {\n const builder = new RenderTreeBuilder(component);\n if (observer === undefined) hooks(component).buildRenderTree(builder);\n else {\n observer.begin(component);\n try {\n hooks(component).buildRenderTree(builder);\n } finally {\n observer.end(component);\n }\n }\n return builder.nodes;\n}\n\n// After-render callbacks wait until the outermost render pass has touched the DOM.\nlet depth = 0;\nlet pass = 0;\nconst afterRender: (() => void)[] = [];\n\nfunction batch(fn: () => void): void {\n if (depth++ === 0) pass++;\n try {\n fn();\n } finally {\n if (--depth === 0) for (const done of afterRender.splice(0)) done();\n }\n}\n\nfunction settle(component: ComponentBase, result: Promise<void> | void, node?: VComponent): void {\n if (!(result instanceof Promise)) return;\n void result.then(() => update(component), node?.onError && ((err: unknown) => fail(node, err)));\n}\n\n/** `@catch`: the failure is reported with the navigation the page belongs to, so a late one can be dropped. */\nfunction fail(v: VComponent, err: unknown): void {\n if (v.onError) v.onError(err, v.mounted?.nav ?? v.nav ?? 0);\n else rethrow(err);\n}\n\nfunction parametersSet(component: ComponentBase): void {\n hooks(component).onParametersSet();\n settle(component, hooks(component).onParametersSetAsync());\n}\n\n/** `static cascades` on a component class: one `[property, cascade name]` pair per `@Cascade` member. */\ntype CascadeList = readonly (readonly [prop: string, name: string])[];\n\nconst cascadesOf = (type: Function): CascadeList | undefined => (type as { cascades?: CascadeList }).cascades;\n\nconst fields = (c: ComponentBase) => c as unknown as Record<string, unknown>;\n\nfunction findCascade(scope: CascadeRecord | undefined, name: string): CascadeRecord | undefined {\n for (let s = scope; s; s = s.parent) if (s.name === name) return s;\n return undefined;\n}\n\n/** Gives each `@Cascade` member the nearest provider's value and subscribes to later changes. */\nfunction resolveCascades(instance: ComponentBase, scope: CascadeRecord | undefined): void {\n // The instance's class, not the vnode's type: a lazy component's type is its loader.\n const list = cascadesOf(instance.constructor);\n if (!list) return;\n for (const [prop, name] of list) {\n const record = findCascade(scope, name);\n if (!record) continue;\n fields(instance)[prop] = record.value;\n // Several members may share one name; the set keeps one entry per instance, in subscription order.\n if (!record.fixed) (record.consumers ??= new Set()).add(instance);\n }\n}\n\nfunction unsubscribeCascades(instance: ComponentBase, scope: CascadeRecord | undefined): void {\n const list = cascadesOf(instance.constructor);\n if (!list) return;\n for (const [, name] of list) findCascade(scope, name)?.consumers?.delete(instance);\n}\n\n// Assigning before the region's children are patched lets a consumer whose props also changed\n// render once with both; the leftovers are told afterwards.\nfunction assignCascade(record: CascadeRecord, consumers: readonly ComponentBase[]): void {\n for (const consumer of consumers) {\n for (const [prop, name] of cascadesOf(consumer.constructor)!) {\n if (name === record.name) fields(consumer)[prop] = record.value;\n }\n }\n}\n\n// A changed cascade takes the same path as a changed prop: onParametersSet, then re-render.\nfunction notifyCascade(consumers: readonly ComponentBase[]): void {\n for (const consumer of consumers) {\n const m = mountedComponents.get(consumer);\n if (!m || m.pass === pass) continue;\n m.pass = pass;\n try {\n parametersSet(consumer);\n update(consumer);\n } catch (err) {\n // One consumer's failure must not keep the rest from seeing the new value.\n rethrow(err);\n }\n }\n}\n\nfunction queueAfterRender(component: ComponentBase, first: boolean): void {\n afterRender.push(() => {\n hooks(component).onAfterRender(first);\n void hooks(component).onAfterRenderAsync(first);\n });\n}\n\nfunction update(component: ComponentBase): void {\n batch(() => {\n const m = mountedComponents.get(component);\n const parent = m?.anchor.parentNode;\n if (!m || !parent || !hooks(component).shouldRender()) return;\n const next = render(component);\n patchList(parent, m.tree, next, m.anchor, component, m.app, m.scope);\n m.tree = next;\n queueAfterRender(component, false);\n });\n}\n\n// `into` is the placeholder left by an async component; it keeps its anchor and the nodes go before it.\nfunction mountComponent(\n component: ComponentBase,\n app: IApplication | undefined,\n scope: CascadeRecord | undefined,\n into?: Mounted,\n node?: VComponent,\n): { nodes: Node[]; mounted: Mounted } {\n hooks(component).onInitialized();\n settle(component, hooks(component).onInitializedAsync(), node);\n parametersSet(component);\n const tree = render(component);\n const mounted = into ?? { tree, anchor: document.createComment(\"\"), app, scope, latest: undefined, pass };\n if (into) into.tree = tree;\n mountedComponents.set(component, mounted);\n const nodes = tree.flatMap((v) => create(v, component, app, scope));\n queueAfterRender(component, true);\n if (!into) nodes.push(mounted.anchor);\n return { nodes, mounted };\n}\n\nconst LAZY = Symbol(\"xzor.lazy\");\ntype Lazy = { [LAZY]: () => Promise<Ctor<ComponentBase>>; loaded: Ctor<ComponentBase> | undefined };\n\n/**\n * A component loaded on first use (a chunk of its own in a split bundle). It stands for the class in the\n * tree: an anchor holds its place until the module arrives, and later uses construct it at once.\n */\nexport function lazy<C>(load: () => Promise<{ default: C }>): C {\n let pending: Promise<Ctor<ComponentBase>> | undefined;\n const stub: Lazy = {\n [LAZY]: () => (pending ??= load().then((m) => (stub.loaded = m.default as Ctor<ComponentBase>))),\n loaded: undefined,\n };\n return stub as unknown as C;\n}\n\nfunction construct(type: Ctor<ComponentBase>, app: IApplication | undefined): ComponentBase | Promise<ComponentBase> {\n const load = (type as Partial<Lazy>)[LAZY];\n if (load !== undefined) {\n const loaded = (type as unknown as Lazy).loaded;\n return loaded !== undefined ? construct(loaded, app) : load().then((c) => construct(c, app));\n }\n const inject = (type as { inject?: readonly string[] }).inject;\n if (!inject?.length) return new type();\n const made = app?.createComponent?.(type);\n if (made) return made;\n if (app) throw new Error(`xzor: ${type.name} is not registered with the application`);\n throw new Error(`xzor: ${type.name} needs injected services (${inject.join(\", \")}) but has no application`);\n}\n\nfunction arrive(mounted: Mounted, instance: ComponentBase): void {\n const v = mounted.latest;\n const parent = mounted.anchor.parentNode;\n mounted.latest = undefined;\n // No vnode: removed before arrival. No parent: the anchor was detached without a dispose.\n if (!v || !parent) {\n disposeInstance(instance);\n return;\n }\n try {\n batch(() => {\n applyProps(instance, v);\n resolveCascades(instance, mounted.scope);\n v.ref?.(instance);\n for (const node of mountComponent(instance, mounted.app, mounted.scope, mounted, v).nodes)\n parent.insertBefore(node, mounted.anchor);\n v.instance = instance;\n });\n } catch (err) {\n fail(v, err);\n if (!v.instance) {\n mountedComponents.delete(instance);\n observer?.dispose(instance);\n unsubscribeCascades(instance, mounted.scope);\n // Nodes of the failed render were never inserted; keep only the empty placeholder.\n const partial = mounted.tree;\n mounted.tree = [];\n for (const node of partial) {\n try {\n dispose(node);\n } catch (disposeErr) {\n rethrow(disposeErr);\n }\n }\n }\n }\n}\n\nfunction applyProps(instance: ComponentBase, v: VComponent): void {\n Object.assign(instance, v.props);\n if (v.slots) instance.slots = v.slots;\n}\n\nfunction propsChanged(o: VComponent, n: VComponent): boolean {\n // Slot lambdas are recreated on every parent render, so a child with slots always refreshes.\n if (n.slots) return true;\n for (const [key, value] of Object.entries(n.props)) {\n // Like Blazor, objects may have been mutated, so they always count as changed.\n if (!Object.is(o.props[key], value) || (typeof value === \"object\" && value !== null)) return true;\n }\n return false;\n}\n\nconst eventNames = (v: VElement) => new Set([...Object.keys(v.events), ...Object.keys(v.modifiers)]);\n\nfunction listen(el: Element, event: string): void {\n elementHandlers.get(el)!.listening.add(event);\n el.addEventListener(event, (e) => {\n const record = elementHandlers.get(el);\n if (!record) return;\n const mods = record.modifiers[event];\n if (mods?.preventDefault) e.preventDefault();\n if (mods?.stopPropagation) e.stopPropagation();\n const handler = record.events[event];\n if (!handler) return;\n const result = handler(e);\n if (isFine(record.owner)) return fineHooks!.handled(record.owner, result);\n update(record.owner);\n if (result instanceof Promise) void result.then(() => update(record.owner));\n });\n}\n\nfunction create(\n v: VNode,\n owner: ComponentBase,\n app: IApplication | undefined,\n scope: CascadeRecord | undefined,\n svg = false,\n): Node[] {\n switch (v.kind) {\n case \"text\":\n v.dom = document.createTextNode(v.text);\n return [v.dom];\n case \"element\": {\n const el = svg || v.tag === \"svg\" ? document.createElementNS(SVG, v.tag) : document.createElement(v.tag);\n for (const [name, value] of Object.entries(v.attrs)) setAttr(el, name, value);\n elementHandlers.set(el, { owner, events: v.events, modifiers: v.modifiers, listening: new Set() });\n for (const event of eventNames(v)) listen(el, event);\n const inner = inSvg(el);\n for (const child of v.children) el.append(...create(child, owner, app, scope, inner));\n v.dom = el;\n v.ref?.(el);\n return [el];\n }\n case \"region\": {\n v.anchor = document.createComment(\"\");\n // The record outlives the vnode: later renders carry it over in `patch`.\n const inner =\n v.name === undefined\n ? scope\n : (v.cascade = { name: v.name, value: v.value, fixed: v.fixed === true, consumers: undefined, parent: scope });\n return [...v.children.flatMap((c) => create(c, owner, app, inner, svg)), v.anchor];\n }\n case \"component\": {\n if (!v.onError) return createComponent(v, app, scope);\n try {\n return createComponent(v, app, scope);\n } catch (err) {\n return failedComponent(v, err, app, scope);\n }\n }\n case \"fine\": {\n if (!fineHooks) throw new Error(\"xzor: a @fine component needs @source-crafter/xzor-runtime/model\");\n return fineNodes((v.root = fineHooks.create(v.build, owner, app, scope)));\n }\n }\n}\n\n// `@cached` components that left the tree, by type and key; their nodes stay built, detached.\n// ponytail: never evicted; one entry per type and key, so a page with keyed routes keeps one per family.\nconst kept = new WeakMap<Function, Map<unknown, VComponent>>();\nlet keptCount = 0;\n\nfunction keep(v: VComponent): void {\n let byKey = kept.get(v.type);\n if (byKey === undefined) kept.set(v.type, (byKey = new Map()));\n if (!byKey.has(v.key)) keptCount++;\n byKey.set(v.key, v);\n}\n\n/** The nodes of a kept instance of `v`'s type and key, patched to `v`'s props; `undefined` if none is kept. */\nfunction revive(v: VComponent, app: IApplication | undefined, scope: CascadeRecord | undefined): Node[] | undefined {\n if (keptCount === 0) return undefined;\n const byKey = kept.get(v.type);\n const old = byKey?.get(v.key);\n if (old === undefined) return undefined;\n byKey!.delete(v.key);\n keptCount--;\n const instance = (v.instance = old.instance!);\n const mounted = (v.mounted = old.mounted!);\n mounted.app = app;\n mounted.scope = scope;\n applyProps(instance, v);\n resolveCascades(instance, scope);\n v.ref?.(instance);\n // Re-rendered in a fragment: `update` patches before the anchor, which needs a parent.\n const frag = document.createDocumentFragment();\n for (const node of nodesOf(old)) frag.appendChild(node);\n mounted.pass = pass;\n parametersSet(instance);\n update(instance);\n return [...frag.childNodes];\n}\n\nfunction createComponent(v: VComponent, app: IApplication | undefined, scope: CascadeRecord | undefined): Node[] {\n const revived = revive(v, app, scope);\n if (revived !== undefined) return revived;\n const made = construct(v.type, app);\n if (made instanceof Promise) {\n const mounted: Mounted = (v.mounted = {\n tree: [],\n anchor: document.createComment(\"\"),\n app,\n scope,\n latest: v,\n pass,\n });\n made.then(\n (instance) => arrive(mounted, instance),\n (err) => {\n const latest = mounted.latest;\n mounted.latest = undefined;\n if (latest) fail(latest, err);\n // A routed page we already left: its failure is stale, like any other.\n else if (!v.onError) rethrow(err);\n },\n );\n return [mounted.anchor];\n }\n v.instance = made;\n applyProps(made, v);\n resolveCascades(made, scope);\n v.ref?.(made);\n const { nodes, mounted } = mountComponent(made, app, scope, undefined, v);\n v.mounted = mounted;\n return nodes;\n}\n\n// `@catch`: the page's nodes never reached the DOM, so only an anchor stays until the block re-renders.\nfunction failedComponent(\n v: VComponent,\n err: unknown,\n app: IApplication | undefined,\n scope: CascadeRecord | undefined,\n): Node[] {\n const instance = v.instance;\n v.instance = undefined;\n if (instance) {\n // Children the page had already mounted go with it, or they keep taking cascades and hooks.\n const partial = mountedComponents.get(instance);\n mountedComponents.delete(instance);\n observer?.dispose(instance);\n unsubscribeCascades(instance, scope);\n for (const node of partial?.tree ?? []) {\n try {\n dispose(node);\n } catch (disposeErr) {\n rethrow(disposeErr);\n }\n }\n }\n v.mounted = { tree: [], anchor: document.createComment(\"\"), app, scope, latest: undefined, pass };\n fail(v, err);\n return [v.mounted.anchor];\n}\n\nfunction nodesOf(v: VNode): Node[] {\n switch (v.kind) {\n case \"text\":\n case \"element\":\n return [v.dom!];\n case \"region\":\n return [...v.children.flatMap(nodesOf), v.anchor!];\n case \"component\":\n return [...v.mounted!.tree.flatMap(nodesOf), v.mounted!.anchor];\n case \"fine\":\n return fineNodes(v.root!);\n }\n}\n\nfunction same(o: VNode, n: VNode): boolean {\n if (o.kind !== n.kind) return false;\n if (o.kind === \"element\") return o.tag === (n as VElement).tag && o.key === (n as VElement).key;\n if (o.kind === \"component\") return o.type === (n as VComponent).type && o.key === (n as VComponent).key;\n // A provider is only ever patched against the same provider; anything else replaces it.\n if (o.kind === \"region\") return o.name === (n as VRegion).name && o.fixed === (n as VRegion).fixed;\n return true;\n}\n\nfunction dispose(v: VNode): void {\n switch (v.kind) {\n case \"element\":\n v.children.forEach(dispose);\n return;\n case \"region\":\n // The provider goes away with its region, so its consumers need not unsubscribe one by one.\n if (v.cascade) v.cascade.consumers = undefined;\n v.children.forEach(dispose);\n return;\n case \"component\":\n if (!v.instance) {\n if (v.mounted) v.mounted.latest = undefined;\n return;\n }\n unsubscribeCascades(v.instance, v.mounted?.scope);\n if ((v.instance.constructor as { cached?: boolean }).cached === true) return keep(v);\n v.mounted?.tree.forEach(dispose);\n mountedComponents.delete(v.instance);\n disposeInstance(v.instance);\n return;\n case \"fine\":\n fineHooks!.dispose(v.root!);\n return;\n }\n}\n\nfunction disposeInstance(c: ComponentBase): void {\n observer?.dispose(c);\n (c as Routed)[ROUTER]?.off?.();\n hooks(c).dispose();\n const d = c as unknown as Record<symbol, (() => unknown) | undefined>;\n d[wellKnown.dispose]?.();\n surface(d[wellKnown.asyncDispose]?.());\n}\n\nfunction remove(parent: Node, v: VNode): void {\n for (const node of nodesOf(v)) $leave(node);\n dispose(v);\n}\n\n/**\n * @internal Removes `node`. A `data-leave` element gets `data-leaving` first and goes when the finite animations\n * that starts (in it and below) finish; with none, or removed again meanwhile, it goes at once.\n */\nexport function $leave(node: Node): void {\n const el = node as Element;\n if (!ComponentBase.$leaves || el.nodeType !== 1 || !el.hasAttribute(\"data-leave\") || el.hasAttribute(\"data-leaving\")) return void node.parentNode?.removeChild(node);\n type Running = { finished: Promise<unknown>; effect?: { getComputedTiming(): { endTime?: number | CSSNumericValue } } | null };\n const running = (): Running[] => (el as Partial<{ getAnimations(o?: object): Running[] }>).getAnimations?.({ subtree: true }) ?? [];\n // Animations already running (a spinner inside) aren't the leave's; an endless one would never let it go.\n const before = new Set(running());\n el.setAttribute(\"data-leaving\", \"\");\n const animations = running().filter((a) => !before.has(a) && a.effect?.getComputedTiming().endTime !== Infinity);\n if (animations.length === 0) return void el.remove();\n const gone = (): void => el.remove();\n void Promise.all(animations.map((a) => a.finished)).then(gone, gone);\n}\n\nfunction patch(\n o: VNode,\n n: VNode,\n owner: ComponentBase,\n app: IApplication | undefined,\n scope: CascadeRecord | undefined,\n): void {\n switch (n.kind) {\n case \"text\": {\n const dom = (n.dom = (o as VText).dom!);\n if (dom.data !== n.text) dom.data = n.text;\n return;\n }\n case \"element\": {\n const old = o as VElement;\n const el = (n.dom = old.dom!);\n for (const name of Object.keys(old.attrs)) if (!(name in n.attrs)) removeAttr(el, name);\n for (const [name, value] of Object.entries(n.attrs)) {\n const live = name === \"value\" ? (el as HTMLInputElement).value : undefined;\n if (old.attrs[name] !== value || (live !== undefined && live !== value)) setAttr(el, name, value);\n }\n const record = elementHandlers.get(el)!;\n record.events = n.events;\n record.modifiers = n.modifiers;\n for (const event of eventNames(n)) if (!record.listening.has(event)) listen(el, event);\n patchList(el, old.children, n.children, null, owner, app, scope);\n n.ref?.(el);\n return;\n }\n case \"region\": {\n const old = o as VRegion;\n const anchor = (n.anchor = old.anchor!);\n // The provider record is carried like the anchor, so consumers keep their subscription.\n const record = old.cascade;\n let subscribers: ComponentBase[] | undefined;\n let inner = scope;\n if (record) {\n record.parent = scope;\n n.cascade = record;\n inner = record;\n // A fixed provider keeps the value of its first render, for consumers mounted later too.\n if (!record.fixed && !Object.is(record.value, n.value)) {\n record.value = n.value;\n if (record.consumers?.size) {\n subscribers = [...record.consumers];\n assignCascade(record, subscribers);\n }\n }\n }\n patchList(anchor.parentNode!, old.children, n.children, anchor, owner, app, inner);\n // Consumers that this patch mounted or already refreshed skip the notification.\n if (subscribers) notifyCascade(subscribers);\n return;\n }\n case \"component\": {\n const old = o as VComponent;\n n.mounted = old.mounted;\n if (!old.instance) {\n // Still waiting for its instance: carry the newest props to arrival.\n if (n.mounted!.latest) n.mounted!.latest = n;\n return;\n }\n const instance = (n.instance = old.instance);\n // A page whose navigation moved on takes its params again even when they compare equal.\n const changed = n.nav !== old.nav || propsChanged(old, n);\n if (n.nav !== undefined) n.mounted!.nav = n.nav;\n applyProps(instance, n);\n n.ref?.(instance);\n if (changed) {\n n.mounted!.pass = pass;\n parametersSet(instance);\n update(instance);\n }\n return;\n }\n case \"fine\": {\n // Built once: a re-render (`stateHasChanged`) re-runs the bindings, for changes nothing tracks.\n fineHooks!.refresh((n.root = (o as VFine).root!));\n return;\n }\n }\n}\n\nconst keyOf = (v: VNode | undefined) => (v && (v.kind === \"element\" || v.kind === \"component\") ? v.key : undefined);\n\nfunction patchList(\n parent: Node,\n old: VNode[],\n next: VNode[],\n end: Node | null,\n owner: ComponentBase,\n app: IApplication | undefined,\n scope: CascadeRecord | undefined,\n): void {\n if (old.some((v) => keyOf(v) != null) || next.some((v) => keyOf(v) != null)) {\n patchKeyed(parent, old, next, end, owner, app, scope);\n return;\n }\n // Positional diff; regions keep variable-length blocks from misaligning their siblings.\n for (let i = 0; i < next.length; i++) {\n const n = next[i]!;\n const o = old[i];\n if (o && same(o, n)) {\n patch(o, n, owner, app, scope);\n continue;\n }\n const ref = o ? nodesOf(o)[0]! : end;\n for (const node of create(n, owner, app, scope, inSvg(parent))) parent.insertBefore(node, ref);\n if (o) remove(parent, o);\n }\n for (const o of old.slice(next.length)) remove(parent, o);\n}\n\n/** `@key` diff: keyed nodes are matched by key and moved; unkeyed ones by position. */\nfunction patchKeyed(\n parent: Node,\n old: VNode[],\n next: VNode[],\n end: Node | null,\n owner: ComponentBase,\n app: IApplication | undefined,\n scope: CascadeRecord | undefined,\n): void {\n const byKey = new Map<unknown, VNode>();\n for (const o of old) if (keyOf(o) != null) byKey.set(keyOf(o), o);\n const used = new Set<VNode>();\n const matches = next.map((n, i) => {\n const key = keyOf(n);\n const o = key != null ? byKey.get(key) : keyOf(old[i]) == null ? old[i] : undefined;\n if (o && !used.has(o) && same(o, n)) {\n used.add(o);\n return o;\n }\n return undefined;\n });\n for (const o of old) if (!used.has(o)) remove(parent, o);\n let ref = end;\n for (let i = next.length - 1; i >= 0; i--) {\n const n = next[i]!;\n const o = matches[i];\n let nodes: Node[];\n if (o) {\n patch(o, n, owner, app, scope);\n nodes = nodesOf(n);\n } else {\n nodes = create(n, owner, app, scope, inSvg(parent));\n }\n for (let j = nodes.length - 1; j >= 0; j--) {\n const node = nodes[j]!;\n if (node.parentNode !== parent || node.nextSibling !== ref) parent.insertBefore(node, ref);\n ref = node;\n }\n }\n}\n\nfunction resolveTarget(target: string | Element): Element {\n if (typeof target !== \"string\") return target;\n const found = SELECTOR.test(target) ? document.querySelector(target) : document.getElementById(target);\n if (!found) throw new Error(`xzor: mount target \"${target}\" not found`);\n return found;\n}\n\n/** `target` is an element, an element id, or a selector (anything containing `#`, `.` or `[`). */\nexport function mount<C extends ComponentBase>(type: Ctor<C>, target: string | Element, app?: IApplication): C {\n const host = resolveTarget(target);\n const root = construct(type, app);\n if (root instanceof Promise) throw new Error(`xzor: root component ${type.name} cannot be asynchronous`);\n batch(() => host.replaceChildren(...mountComponent(root, app, undefined).nodes));\n surface(app?.onStarted?.());\n return root as C;\n}\n\n/** An `<a>` that carries `activeClass` while the current URL is on its `href`; it follows navigation itself. */\nexport class NavLink extends ComponentBase {\n href = \"\";\n activeClass = \"active\";\n match: \"prefix\" | \"exact\" = \"prefix\";\n\n declare slots: { default?: () => RenderFragment };\n\n #path = \"\";\n // `href` resolved against the base URL, encoded like `location.pathname`; `null` for another origin.\n #for: string | undefined;\n #target: string | null = null;\n #off: (() => void) | undefined;\n\n protected override onInitialized(): void {\n const nav = navigationOf();\n this.#path = nav.current().pathname;\n const fn = () => {\n const path = nav.current().pathname;\n if (path === this.#path) return;\n this.#path = path;\n this.stateHasChanged();\n };\n this.#off = nav.observe ? nav.observe(fn) : nav.subscribe(fn);\n }\n\n protected override dispose(): void {\n this.#off?.();\n }\n\n #active(): boolean {\n if (this.#for !== this.href) {\n this.#for = this.href;\n const url = new URL(this.href, document.baseURI);\n this.#target = url.origin === location.origin ? url.pathname : null;\n }\n const target = this.#target;\n if (target === null) return false;\n const path = this.#path;\n // The root is every path's prefix, so it only ever matches exactly.\n if (this.match === \"exact\" || target === `${basePath()}/`) return path === target;\n return path === target || path.startsWith(target.endsWith(\"/\") ? target : `${target}/`);\n }\n\n protected override buildRenderTree(b: RenderTreeBuilder): void {\n b.openElement(\"a\");\n b.addAttribute(\"href\", this.href);\n if (this.#active()) {\n b.addAttribute(\"class\", this.activeClass);\n b.addAttribute(\"aria-current\", \"page\");\n }\n b.addContent(this.slots.default?.() ?? null);\n b.closeElement();\n }\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "5919FE955442986264756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "824F41450E9EF35264756E2164756E21",
9
9
  "names": []
10
10
  }
package/index.d.ts CHANGED
@@ -281,8 +281,8 @@ export declare function lazy<C>(load: () => Promise<{
281
281
  default: C;
282
282
  }>): C;
283
283
  /**
284
- * @internal Removes `node`. A `data-leave` element gets `data-leaving` first and goes when the animations that
285
- * starts (in it and below) finish; with none, or removed again meanwhile, it goes at once.
284
+ * @internal Removes `node`. A `data-leave` element gets `data-leaving` first and goes when the finite animations
285
+ * that starts (in it and below) finish; with none, or removed again meanwhile, it goes at once.
286
286
  */
287
287
  export declare function $leave(node: Node): void;
288
288
  /** `target` is an element, an element id, or a selector (anything containing `#`, `.` or `[`). */
package/index.js CHANGED
@@ -25,7 +25,7 @@ import {
25
25
  setNavigationForTests,
26
26
  setRenderObserver,
27
27
  viewTransitions
28
- } from "./index-w2yxrgd1.js";
28
+ } from "./index-45b6cjyv.js";
29
29
  export {
30
30
  $inSvg,
31
31
  $isFragment,