@expressive/dom 0.6.0 → 0.7.0

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.
@@ -0,0 +1,9 @@
1
+ import { Context, Model } from "@expressive/mvc";
2
+
3
+ //#region src/render/adapter.d.ts
4
+ declare module '@expressive/mvc' {
5
+ interface Component {
6
+ mount?(): (() => void) | void;
7
+ }
8
+ }
9
+ //# sourceMappingURL=chunk-adapter-N5dp5cMY.d.ts.map
@@ -1,5 +1,6 @@
1
1
  import { Model, pending, unbind } from "@expressive/mvc";
2
2
  import { watch } from "@expressive/mvc/observable";
3
+ import { resolver } from "@expressive/mvc/jsx-runtime";
3
4
 
4
5
  //#region src/render/scheduler.ts
5
6
  const urgent = /* @__PURE__ */ new Set();
@@ -135,17 +136,21 @@ function unschedule(scope) {
135
136
  //#region src/render/adapter.ts
136
137
  let current;
137
138
  let collecting;
139
+ let memo;
138
140
  function enter(scope, render) {
139
141
  const parent = current;
140
142
  const releases = collecting;
143
+ const cached = memo;
141
144
  const next = [];
142
145
  current = scope;
143
146
  collecting = next;
147
+ memo = /* @__PURE__ */ new Map();
144
148
  try {
145
149
  return render();
146
150
  } finally {
147
151
  current = parent;
148
152
  collecting = releases;
153
+ memo = cached;
149
154
  scope.subscriptions.forEach((release) => release());
150
155
  scope.subscriptions = next;
151
156
  }
@@ -156,12 +161,8 @@ function dispose(scope) {
156
161
  scope.subscriptions.forEach((release) => release());
157
162
  scope.subscriptions = [];
158
163
  }
159
- function requireScope() {
160
- if (!current) throw new Error("Model.get() may only run while @expressive/dom is rendering.");
161
- return current;
162
- }
163
164
  function tracked(target, required) {
164
- const scope = requireScope();
165
+ const scope = current;
165
166
  let proxy = target;
166
167
  let first = true;
167
168
  const release = watch(target, (next) => {
@@ -172,19 +173,16 @@ function tracked(target, required) {
172
173
  collecting.push(release);
173
174
  return proxy;
174
175
  }
175
- Model.get = function get(argument) {
176
- const scope = requireScope();
177
- const instance = tracked(scope.context).get(this, argument === false ? false : true);
178
- if (!instance) return void 0;
179
- const proxy = tracked(instance, argument === true);
180
- if (typeof argument != "function") return proxy;
181
- const refresh = ((action) => {
182
- if (typeof action == "function") action = action();
183
- schedule(scope);
184
- return action instanceof Promise ? action.finally(() => schedule(scope)) : void 0;
185
- });
186
- return argument.call(proxy, proxy, refresh) ?? null;
187
- };
176
+ const normal = resolver((Type, compute) => {
177
+ if (!current) return normal(Type, compute);
178
+ const found = compute(Type ? cache(current.context) : current.context);
179
+ return found instanceof Model ? cache(found) : found;
180
+ });
181
+ function cache(target) {
182
+ let proxy = memo.get(target);
183
+ if (!proxy) memo.set(target, proxy = tracked(target, false));
184
+ return proxy;
185
+ }
188
186
  const OWNERS = /* @__PURE__ */ new WeakMap();
189
187
  Model.on({ method(key, fn, owner) {
190
188
  if (/^[A-Z]/.test(key)) OWNERS.set(fn, {
@@ -248,5 +246,5 @@ function hot(id, components) {
248
246
  }
249
247
 
250
248
  //#endregion
251
- export { untrack as a, enter as c, release as d, schedule as f, track as i, afterFlush as l, transition as m, latest as n, call as o, settle as p, same as r, dispose as s, hot as t, claim as u };
252
- //# sourceMappingURL=chunk-hot-a8qgv3tf.js.map
249
+ export { untrack as a, enter as c, claim as d, release as f, transition as h, track as i, owner as l, settle as m, latest as n, call as o, schedule as p, same as r, dispose as s, hot as t, afterFlush as u };
250
+ //# sourceMappingURL=chunk-hot-vusv_ouU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-hot-vusv_ouU.js","names":[],"sources":["../src/render/scheduler.ts","../src/render/adapter.ts","../src/render/hot.ts"],"sourcesContent":["import { pending } from '@expressive/mvc';\n\ninterface Schedulable {\n queued?: 'urgent' | 'passive' | 'deferred';\n holds?: (() => void)[];\n probed?: { output: unknown };\n blocking?: (() => void)[];\n update(passive: boolean): PromiseLike<unknown> | void;\n probe?(): PromiseLike<unknown> | void;\n empty?(): boolean;\n}\n\nconst urgent = new Set<Schedulable>();\nconst passive = new Set<Schedulable>();\nconst after: (() => void)[] = [];\n\nlet depth = 0;\nlet urgentQueued = false;\nlet passiveQueued = false;\n\nfunction flush(scopes: Set<Schedulable>) {\n for (const scope of scopes) {\n scopes.delete(scope);\n scope.queued = undefined;\n\n let waiting: PromiseLike<unknown> | void = undefined;\n\n try {\n waiting = scope.update(false);\n } catch (error) {\n console.error(error);\n }\n\n settle(scope);\n if (!waiting) unblock(scope);\n }\n}\n\nfunction flushUrgent() {\n urgentQueued = false;\n flush(urgent);\n\n for (const run of after.splice(0)) run();\n}\n\nfunction afterFlush(run: () => void) {\n after.push(run);\n\n if (!urgentQueued) {\n urgentQueued = true;\n queueMicrotask(flushUrgent);\n }\n}\n\nfunction flushPassive() {\n passiveQueued = false;\n\n const batch = [...passive].filter((scope) => scope.queued === 'passive');\n passive.clear();\n\n for (const scope of batch) {\n const waiting = scope.probe?.();\n if (waiting) return defer(batch, waiting, scope);\n }\n\n batch.sort((a, b) => Number(!!b.empty?.()) - Number(!!a.empty?.()));\n\n for (let index = 0; index < batch.length; index++) {\n const scope = batch[index];\n\n if (scope.queued !== 'passive') continue;\n\n scope.queued = undefined;\n\n let waiting: PromiseLike<unknown> | void = undefined;\n\n try {\n waiting = scope.update(true);\n } catch (error) {\n console.error(error);\n }\n\n settle(scope);\n\n if (waiting) return defer(batch.slice(index + 1), waiting, scope);\n unblock(scope);\n }\n}\n\nfunction defer(scopes: Schedulable[], waiting: PromiseLike<unknown>, source: Schedulable) {\n const held = scopes.filter((scope) => scope.queued === 'passive');\n\n for (const scope of held) {\n scope.queued = 'deferred';\n scope.probed = undefined;\n }\n\n const resume = () => {\n for (const scope of held)\n if (scope.queued === 'deferred') {\n scope.queued = undefined;\n transition(() => schedule(scope));\n }\n };\n\n (source.blocking ||= []).push(resume);\n waiting.then(resume, resume);\n}\n\nfunction unblock(scope: Schedulable) {\n const { blocking } = scope;\n\n scope.blocking = undefined;\n blocking?.forEach((resume) => resume());\n}\n\nfunction release(holds?: (() => void)[]) {\n holds?.forEach((held) => held());\n}\n\nfunction settle(scope: Schedulable) {\n const { holds } = scope;\n\n scope.holds = undefined;\n release(holds);\n}\n\nfunction schedule(scope: Schedulable) {\n const held = pending();\n\n if (held) (scope.holds ||= []).push(held);\n scope.probed = undefined;\n\n if (!depth) {\n passive.delete(scope);\n scope.queued = 'urgent';\n urgent.add(scope);\n\n if (!urgentQueued) {\n urgentQueued = true;\n queueMicrotask(flushUrgent);\n }\n\n return;\n }\n\n if (scope.queued && scope.queued !== 'deferred') return;\n\n scope.queued = 'passive';\n passive.add(scope);\n\n if (!passiveQueued) {\n passiveQueued = true;\n setTimeout(flushPassive);\n }\n}\n\nfunction transition(work: () => void) {\n depth++;\n\n try {\n work();\n } finally {\n depth--;\n }\n}\n\nfunction claim(scope: Schedulable) {\n urgent.delete(scope);\n passive.delete(scope);\n scope.queued = undefined;\n scope.probed = undefined;\n}\n\nfunction unschedule(scope: Schedulable) {\n urgent.delete(scope);\n passive.delete(scope);\n scope.queued = undefined;\n scope.probed = undefined;\n settle(scope);\n unblock(scope);\n}\n\nexport { afterFlush, claim, release, schedule, settle, transition, unschedule };\nexport type { Schedulable };\n","import { Context, Model, unbind } from '@expressive/mvc';\nimport { watch } from '@expressive/mvc/observable';\nimport { resolver } from '@expressive/mvc/jsx-runtime';\n\nimport { schedule, transition, unschedule } from './scheduler';\nimport type { Schedulable } from './scheduler';\n\ninterface Scope extends Schedulable {\n active: boolean;\n context: Context;\n subscriptions: (() => void)[];\n}\n\nlet current: Scope | undefined;\nlet collecting: (() => void)[] | undefined;\nlet memo: Map<object, object> | undefined;\n\nfunction enter<T>(scope: Scope, render: () => T): T {\n const parent = current;\n const releases = collecting;\n const cached = memo;\n const next: (() => void)[] = [];\n\n current = scope;\n collecting = next;\n memo = new Map();\n\n try {\n return render();\n } finally {\n current = parent;\n collecting = releases;\n memo = cached;\n scope.subscriptions.forEach((release) => release());\n scope.subscriptions = next;\n }\n}\n\nfunction dispose(scope: Scope) {\n scope.active = false;\n unschedule(scope);\n scope.subscriptions.forEach((release) => release());\n scope.subscriptions = [];\n}\n\nfunction tracked<T extends object>(target: T, required?: boolean): T {\n const scope = current!;\n let proxy = target;\n let first = true;\n\n const release = watch(\n target,\n (next) => {\n proxy = next;\n if (!first && scope.active) schedule(scope);\n first = false;\n },\n required,\n transition\n );\n\n collecting!.push(release);\n return proxy;\n}\n\ndeclare module '@expressive/mvc' {\n interface Component {\n mount?(): (() => void) | void;\n }\n}\n\nconst normal = resolver((Type, compute) => {\n if (!current) return normal(Type, compute);\n\n const found = compute(Type ? cache(current.context) : current.context);\n\n return found instanceof Model ? cache(found) : found;\n});\n\nfunction cache<T extends object>(target: T): T {\n let proxy = memo!.get(target);\n\n if (!proxy) memo!.set(target, (proxy = tracked(target, false)));\n\n return proxy as T;\n}\n\nconst OWNERS = new WeakMap<Function, { owner: Model; key: string }>();\n\nModel.on({\n method(key, fn, owner) {\n if (/^[A-Z]/.test(key)) OWNERS.set(fn, { owner, key });\n }\n});\n\nfunction call(type: Function, props: unknown) {\n const sub = OWNERS.get(type);\n\n if (!sub) return type(props);\n\n const { owner, key } = sub;\n return unbind((owner as any)[key]).call(tracked(owner), props);\n}\n\nfunction owner(type: unknown) {\n return typeof type == 'function' ? OWNERS.get(type) : undefined;\n}\n\nexport { call, dispose, enter, owner };\nexport type { Scope };\n","import type { Scope } from './adapter';\nimport { owner } from './adapter';\nimport { schedule } from './scheduler';\n\ninterface Family {\n current: Function;\n scopes: Set<Scope>;\n}\n\nconst FAMILIES = new Map<string, Family>();\nconst FAMILY = new WeakMap<Function, Family>();\n\n/** The latest implementation of a component registered for hot refresh. */\nfunction latest(type: Function) {\n return FAMILY.get(type)?.current || type;\n}\n\n/** Whether two element types are one component, across hot edits. */\nfunction same(a: unknown, b: unknown) {\n if (a === b) return true;\n\n const sub = owner(a);\n\n if (sub) {\n const other = owner(b);\n return !!other && other.owner === sub.owner && other.key === sub.key;\n }\n\n const family = typeof a == 'function' && FAMILY.get(a);\n\n return !!family && family === FAMILY.get(b as Function);\n}\n\nfunction track(type: Function, scope: Scope) {\n FAMILY.get(type)?.scopes.add(scope);\n}\n\nfunction untrack(type: Function, scope: Scope) {\n FAMILY.get(type)?.scopes.delete(scope);\n}\n\n/**\n * Register a module's function components under stable ids. A component seen\n * before takes its new implementation and re-renders where it is mounted.\n */\nfunction hot(id: string, components: Record<string, unknown>) {\n for (const [name, type] of Object.entries(components)) {\n if (typeof type != 'function') continue;\n\n const key = `${id}#${name}`;\n let family = FAMILIES.get(key);\n\n if (!family) FAMILIES.set(key, (family = { current: type, scopes: new Set() }));\n\n FAMILY.set(type, family);\n\n if (family.current === type) continue;\n\n family.current = type;\n\n for (const scope of family.scopes) schedule(scope);\n }\n}\n\nexport { hot, latest, same, track, untrack };\n"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as untrack, c as enter, d as release, f as schedule, i as track, l as afterFlush, m as transition, n as latest, o as call, p as settle$1, r as same, s as dispose, u as claim$1 } from "./chunk-hot-a8qgv3tf.js";
1
+ import { a as untrack, c as enter, d as claim$1, f as release, h as transition, i as track, l as owner, m as settle$1, n as latest, o as call, p as schedule, r as same, s as dispose, u as afterFlush } from "./chunk-hot-vusv_ouU.js";
2
2
  import { a as createElement, i as childrenOf, n as PORTAL, o as isVNode, r as Portal, s as vnode, t as Fragment } from "./chunk-vnode-wpCWQ_Zg.js";
3
3
  import "./jsx-runtime.js";
4
4
  import { Component, Context, Model, has, map, unbind } from "@expressive/mvc";
@@ -59,6 +59,7 @@ const css = {
59
59
 
60
60
  //#endregion
61
61
  //#region src/style/protocol.ts
62
+ const SUBCOMPONENT = /^_[A-Z]/;
62
63
  const registrations = /* @__PURE__ */ new WeakMap();
63
64
  const tokens = /* @__PURE__ */ new WeakMap();
64
65
  let root;
@@ -84,7 +85,7 @@ function appearanceRoot() {
84
85
  function appearanceSealed() {
85
86
  return rendered;
86
87
  }
87
- function enterAppearance(parent, type) {
88
+ function enterAppearance(parent, type, key) {
88
89
  const chain = [];
89
90
  let current = type;
90
91
  while (current && current !== Function.prototype) {
@@ -92,9 +93,12 @@ function enterAppearance(parent, type) {
92
93
  if (enter) chain.unshift(enter);
93
94
  current = Object.getPrototypeOf(current);
94
95
  }
95
- for (const enter of chain) parent = enter(parent);
96
+ for (const enter of chain) parent = enter(parent, key);
96
97
  return parent;
97
98
  }
99
+ function reserved(key) {
100
+ if (SUBCOMPONENT.test(key)) throw new Error(`"${key}" is reserved for subcomponents in style() maps.`);
101
+ }
98
102
  function createAppearanceToken(appearance) {
99
103
  const token = {};
100
104
  tokens.set(token, appearance);
@@ -125,6 +129,7 @@ function createStyleScope(parent, value, label, defines) {
125
129
  for (const key of Object.keys(value)) {
126
130
  const entry = value[key];
127
131
  if (key[0] == "$") throw new Error(`Reserved key "${key}" in style map.`);
132
+ if (SUBCOMPONENT.test(key)) throw new Error(`Subcomponent "${key}" must be at the top of a style() map.`);
128
133
  if (key[0] == "_") {
129
134
  if (!isObject(entry)) throw new Error(`Rule "${key}" must be an object. Macros are defined by macro().`);
130
135
  const name = key.slice(1);
@@ -199,18 +204,29 @@ function baseToken(scope) {
199
204
  }
200
205
  function style$1(type, rules) {
201
206
  if (entered.has(type)) throw new Error("Cannot add styles after a component has rendered.");
202
- if (Object.hasOwn(type, STYLES)) type[STYLES].push(rules);
203
- else {
207
+ if (!Object.hasOwn(type, STYLES)) {
204
208
  const label = type.displayName || type.name;
205
209
  Object.defineProperty(type, STYLES, {
206
210
  configurable: true,
207
- value: [rules]
211
+ value: {
212
+ own: [],
213
+ subs: {}
214
+ }
208
215
  });
209
- registerAppearance(type, (parent) => {
216
+ registerAppearance(type, (parent, key) => {
217
+ const { own, subs } = type[STYLES];
210
218
  entered.add(type);
211
- return extendContext(parent, type[STYLES], label);
219
+ if (!key) return extendContext(parent, own, label);
220
+ return subs[key] ? extendContext(parent, subs[key], `${label}_${key}`) : parent;
212
221
  });
213
222
  }
223
+ const { own, subs } = type[STYLES];
224
+ const rest = {};
225
+ for (const key of Object.keys(rules)) if (SUBCOMPONENT.test(key)) {
226
+ if (!isObject(rules[key])) throw new Error(`Subcomponent "${key}" must be an object.`);
227
+ (subs[key.slice(1)] ||= []).push(rules[key]);
228
+ } else rest[key] = rules[key];
229
+ own.push(rest);
214
230
  return type;
215
231
  }
216
232
  function macro$1(rules) {
@@ -557,6 +573,7 @@ function resolve(type, props, run) {
557
573
  const tickets = /* @__PURE__ */ new WeakMap();
558
574
  function componentProps(type, props, appearance) {
559
575
  const context = appearance?.context;
576
+ for (const key of Object.keys(props)) reserved(key);
560
577
  if (!context || typeof type != "function") return {
561
578
  appearance,
562
579
  props
@@ -716,7 +733,8 @@ function renderedAppearance(fiber) {
716
733
  style
717
734
  }));
718
735
  const inherited = fiber.appearance?.context || appearanceRoot();
719
- const context = enterAppearance(inherited, latest(fiber.type));
736
+ const sub = owner(fiber.type);
737
+ const context = sub ? enterAppearance(inherited, latest(sub.owner.constructor), sub.key) : enterAppearance(inherited, latest(fiber.type));
720
738
  if (context?.base && context !== inherited) entries.push({
721
739
  hops: 0,
722
740
  style: context.base
@@ -784,7 +802,11 @@ function patchProps(fiber, next, appearance) {
784
802
  ...previous,
785
803
  ...next
786
804
  })) {
787
- if (key.startsWith("_") || key == "children" || key == "className" || key == "key" || key == "ref" || key == "style" || CONTROLS.includes(key)) continue;
805
+ if (key[0] == "_") {
806
+ reserved(key);
807
+ continue;
808
+ }
809
+ if (key == "children" || key == "className" || key == "key" || key == "ref" || key == "style" || CONTROLS.includes(key)) continue;
788
810
  if (previous[key] === next[key]) continue;
789
811
  patchProp(fiber, element, key, previous[key], next[key]);
790
812
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["style","macro","Fragment"],"sources":["../src/style/css.ts","../src/style/protocol.ts","../src/style/appearance.ts","../src/style/declarations.ts","../src/style/stylesheet.ts","../src/render/commits.ts","../src/render/fiber.ts","../src/render/collection.ts","../src/node/loader.ts","../src/style/claim.ts","../src/render/style.ts","../src/render/element.ts","../src/render/portal.ts","../src/render/reconcile.ts","../src/render/suspense.ts","../src/render/component.ts","../src/render/mount.ts","../src/render/render.ts"],"sourcesContent":["import type { macro, style } from './stylesheet';\n\nconst unitless = new Map<string, boolean>();\n\nlet probe: CSSStyleDeclaration | undefined;\n\n/**\n * Does the CSSOM accept a bare number for this property? Probed once with a\n * canonical value; the answer is a property of CSS, not of the value.\n */\nfunction bare(property: string) {\n let known = unitless.get(property);\n\n if (known === undefined) {\n probe ||= document.createElement('div').style;\n (probe as any)[property] = '';\n (probe as any)[property] = 1;\n unitless.set(property, known = Boolean((probe as any)[property]));\n }\n\n return known;\n}\n\nfunction sized(property: string, value: unknown): unknown {\n if (Array.isArray(value))\n return value.map((entry) => sized(property, entry));\n\n return typeof value == 'number' && value !== 0 && !bare(property)\n ? `${value}px`\n : value;\n}\n\n/**\n * Web macro pack. Register with `macro(css)` to opt into pixel units for\n * numbers and the axis shorthands CSS itself does not provide.\n */\nconst css = {\n '*': (value: unknown, key: string) => ({ [key]: sized(key, value) }),\n mx: (value: style.Value) => ({ marginLeft: value, marginRight: value }),\n my: (value: style.Value) => ({ marginTop: value, marginBottom: value }),\n px: (value: style.Value) => ({ paddingLeft: value, paddingRight: value }),\n py: (value: style.Value) => ({ paddingTop: value, paddingBottom: value }),\n size: (value: style.Value) =>\n Array.isArray(value)\n ? { width: value[0], height: value[1] }\n : { width: value, height: value }\n} satisfies macro.Map;\n\ndeclare module '@expressive/dom' {\n namespace macro {\n interface Registry {\n mx(value: style.Value): style.Map;\n my(value: style.Value): style.Map;\n px(value: style.Value): style.Map;\n py(value: style.Value): style.Map;\n size(value: style.Value): style.Map;\n }\n }\n}\n\nexport { css };\n","type Declaration = Record<string, unknown>;\n\ninterface Block {\n declarations: Declaration;\n name: string;\n ordinal: number;\n}\n\ninterface ResolvedAppearance {\n blocks?: Block[];\n classes?: string[];\n context?: AppearanceContext;\n declarations?: Declaration;\n}\n\ninterface AppearanceContext {\n readonly scope?: unknown;\n readonly base?: object;\n resolve(\n props: Record<string, unknown>,\n tag?: string\n ): ResolvedAppearance | undefined;\n}\n\ntype EnterAppearance = (parent?: AppearanceContext) => AppearanceContext;\ntype Emit = (block: Block, depth: number, document: Document) => string;\n\nconst registrations = new WeakMap<object, EnterAppearance>();\nconst tokens = new WeakMap<object, ResolvedAppearance>();\nlet root: (() => AppearanceContext | undefined) | undefined;\nlet emitter: Emit | undefined;\nlet rendered = false;\n\nfunction registerAppearance(type: object, enter: EnterAppearance) {\n registrations.set(type, enter);\n}\n\nfunction registerAppearanceRoot(factory: () => AppearanceContext | undefined) {\n root = factory;\n}\n\nfunction registerEmitter(emit: Emit) {\n emitter = emit;\n}\n\nfunction emitClass(block: Block, depth: number, document: Document) {\n return emitter!(block, depth, document);\n}\n\nfunction appearanceRoot() {\n rendered = true;\n return root?.();\n}\n\n/** Has anything rendered yet - global registration is closed after it has. */\nfunction appearanceSealed() {\n return rendered;\n}\n\nfunction enterAppearance(parent: AppearanceContext | undefined, type: Function) {\n const chain: EnterAppearance[] = [];\n let current: object | null = type;\n\n while (current && current !== Function.prototype) {\n const enter = registrations.get(current);\n if (enter) chain.unshift(enter);\n current = Object.getPrototypeOf(current);\n }\n\n for (const enter of chain) parent = enter(parent);\n return parent;\n}\n\nfunction createAppearanceToken(appearance: ResolvedAppearance) {\n const token = {};\n tokens.set(token, appearance);\n return token;\n}\n\nfunction appearanceToken(value: unknown) {\n return value && typeof value == 'object' ? tokens.get(value) : undefined;\n}\n\nexport {\n appearanceRoot,\n appearanceSealed,\n appearanceToken,\n createAppearanceToken,\n emitClass,\n enterAppearance,\n registerAppearance,\n registerAppearanceRoot,\n registerEmitter\n};\n\nexport type { AppearanceContext, Block, Declaration, ResolvedAppearance };\n","import { appearanceSealed, createAppearanceToken, registerAppearance, registerAppearanceRoot } from './protocol';\nimport type { AppearanceContext, Block, Declaration, ResolvedAppearance } from './protocol';\n\ntype StyleMap = Record<string, unknown>;\n\ntype Macro = (value: unknown, key: string) => unknown;\ntype Depths = ReadonlyMap<string, number>;\n\ninterface Expansion {\n block?: Block;\n classes: string[];\n declarations: Declaration;\n nested: StyleMap[];\n}\n\ninterface StyleScope {\n children: WeakMap<object, StyleScope>;\n expansions: Map<string, Expansion>;\n label: string;\n labels: Record<string, string>;\n names: readonly string[];\n own: Declaration;\n routes: Map<string, AppearanceRoute>;\n rules: StyleMap;\n}\n\ninterface AppearanceRoute {\n flags: readonly string[];\n scope: StyleScope;\n tag?: string;\n}\n\nconst bases = new WeakMap<StyleScope, Declaration>();\nconst chains = new WeakMap<StyleScope, Map<string, Macro[]>>();\nconst contexts = new WeakMap<StyleScope, AppearanceContext>();\nconst rootScopes = new WeakMap<object, StyleScope>();\nconst STYLES = Symbol('@expressive/dom.styles');\nconst entered = new WeakSet<object>();\nconst globals: StyleMap[] = [];\nlet globalContext: AppearanceContext | undefined;\n\nfunction createStyleScope(parent: StyleScope | undefined, value: unknown, label?: string, defines?: boolean): StyleScope | undefined {\n if (!isObject(value)) return parent;\n\n const cache = parent?.children || rootScopes;\n const cached = cache.get(value);\n if (cached) return cached;\n\n const own: string[] = [];\n const source: StyleMap = {};\n const base: Declaration = {};\n\n for (const key of Object.keys(value)) {\n const entry = (value as StyleMap)[key];\n\n if (key[0] == '$')\n throw new Error(`Reserved key \"${key}\" in style map.`);\n\n if (key[0] == '_') {\n if (!isObject(entry))\n throw new Error(`Rule \"${key}\" must be an object. Macros are defined by macro().`);\n\n const name = key.slice(1);\n own.push(name);\n source[name] = entry;\n } else if (defines && typeof entry == 'function') {\n own.push(key);\n source[key] = entry;\n } else base[key] = entry;\n }\n\n const names = parent\n ? [...parent.names, ...own.filter((name) => !parent.names.includes(name))]\n : own;\n const rules = Object.create(parent?.rules || null) as StyleMap;\n const labels = Object.create(parent?.labels || null) as Record<string, string>;\n const scopeLabel = label || parent?.label || 'style';\n\n for (const name of own) {\n const rule = source[name];\n const inherited = parent?.rules[name];\n rules[name] = isObject(inherited) && isObject(rule) ? { ...inherited, ...rule } : rule;\n labels[name] = scopeLabel;\n }\n\n const scope: StyleScope = {\n children: new WeakMap(),\n expansions: new Map(),\n label: scopeLabel,\n labels,\n names,\n own: base,\n routes: new Map(),\n rules\n };\n\n cache.set(value, scope);\n return scope;\n}\n\nfunction createContext(scope: StyleScope): AppearanceContext {\n const cached = contexts.get(scope);\n if (cached) return cached;\n\n const context: AppearanceContext = {\n scope,\n base: baseToken(scope),\n resolve(props, tag) {\n return resolveAppearance(scope, props, tag);\n }\n };\n\n contexts.set(scope, context);\n return context;\n}\n\nfunction extendContext(parent: AppearanceContext | undefined, maps: readonly StyleMap[], label: string, defines?: boolean) {\n let scope = parent?.scope as StyleScope | undefined;\n const base: Declaration = { ...(scope && bases.get(scope)) };\n\n for (const map of maps) {\n scope = createStyleScope(scope, map, label, defines);\n Object.assign(base, scope!.own);\n }\n\n if (Object.keys(base).length) bases.set(scope!, base);\n\n return createContext(scope!);\n}\n\nfunction baseToken(scope: StyleScope) {\n const base = bases.get(scope);\n if (!base) return undefined;\n\n const expansion = expand(scope, base, new Map());\n const appearance: ResolvedAppearance = {};\n\n if (Object.keys(expansion.declarations).length)\n appearance.blocks = [{ declarations: expansion.declarations, name: scope.label, ordinal: -1 }];\n\n if (expansion.classes.length) appearance.classes = expansion.classes;\n\n return createAppearanceToken(appearance);\n}\n\nfunction style<T extends object>(type: T, rules: StyleMap): T {\n if (entered.has(type)) throw new Error('Cannot add styles after a component has rendered.');\n\n if (Object.hasOwn(type, STYLES)) (type as any)[STYLES].push(rules);\n else {\n const label = (type as { displayName?: string }).displayName || (type as Function).name;\n\n Object.defineProperty(type, STYLES, { configurable: true, value: [rules] });\n registerAppearance(type, (parent) => {\n entered.add(type);\n return extendContext(parent, (type as any)[STYLES], label);\n });\n }\n\n return type;\n}\n\nfunction macro(rules: StyleMap): StyleMap {\n for (const key of Object.keys(rules))\n if (key[0] != '_' && key[0] != '$' && typeof rules[key] != 'function')\n throw new Error(`Macro \"${key}\" must be a function. Use \"_${key}\" to register a rule.`);\n\n if (appearanceSealed())\n throw new Error('Cannot add macros after rendering has started.');\n\n globals.push(rules);\n globalContext = undefined;\n registerAppearanceRoot(() => globalContext ||= extendContext(undefined, globals, 'global', true));\n return rules;\n}\n\nfunction createAppearanceRoute(\n scope: StyleScope | undefined,\n props: Record<string, unknown>,\n tag?: string\n): AppearanceRoute | undefined {\n if (!scope) return undefined;\n\n const keys = Object.keys(props).filter((key) => key.startsWith('_')).sort();\n const id = `${tag || ''}\\0${keys.join('\\0')}`;\n const cached = scope.routes.get(id);\n if (cached) return cached;\n\n const present = new Set(keys.map((key) => key.slice(1)));\n const flags: string[] = [];\n\n for (const name of scope.names) {\n if (!present.has(name) || name == tag) continue;\n if (isObject(scope.rules[name])) flags.push(name);\n }\n\n const route: AppearanceRoute = {\n flags,\n scope,\n tag: tag && isObject(scope.rules[tag]) ? tag : undefined\n };\n\n scope.routes.set(id, route);\n return route;\n}\n\nfunction resolveAppearance(\n scope: StyleScope | undefined,\n props: Record<string, unknown>,\n tag?: string\n): ResolvedAppearance | undefined {\n const route = createAppearanceRoute(scope, props, tag);\n\n if (!route) return undefined;\n\n const parts: Expansion[] = [];\n const names: string[] = route.tag ? [route.tag] : [];\n\n for (const name of route.flags)\n if (props[`_${name}`]) names.push(name);\n\n for (const name of names)\n parts.push(expandRule(route.scope, name));\n\n const blocks = parts.flatMap((part) => part.block ? [part.block] : []);\n const classes = parts.flatMap((part) => part.classes);\n let child: StyleScope | undefined = route.scope;\n\n for (const part of parts)\n for (const nested of part.nested)\n child = createStyleScope(child, nested, tag ? `${route.scope.label}_${tag}` : route.scope.label);\n\n if (!blocks.length && !classes.length && child === route.scope)\n return undefined;\n\n const appearance: ResolvedAppearance = {};\n if (blocks.length) appearance.blocks = blocks;\n if (classes.length) appearance.classes = classes;\n if (child !== route.scope) appearance.context = createContext(child!);\n\n return appearance;\n}\n\nfunction expandRule(scope: StyleScope, name: string) {\n let expansion = scope.expansions.get(name);\n\n if (!expansion) {\n expansion = expand(scope, scope.rules[name], new Map());\n\n if (Object.keys(expansion.declarations).length)\n expansion.block = {\n declarations: expansion.declarations,\n name: `${scope.labels[name]}_${name}`,\n ordinal: scope.names.indexOf(name)\n };\n\n scope.expansions.set(name, expansion);\n }\n\n return expansion;\n}\n\nfunction handlers(scope: StyleScope, name: string) {\n let known = chains.get(scope);\n if (!known) chains.set(scope, (known = new Map()));\n\n let chain = known.get(name);\n\n if (!chain) {\n chain = [];\n\n for (const key of [name, '*'])\n for (let rules: object | null = scope.rules; rules; rules = Object.getPrototypeOf(rules)) {\n const own = Object.getOwnPropertyDescriptor(rules, key);\n if (own && typeof own.value == 'function') chain.push(own.value as Macro);\n }\n\n known.set(name, chain);\n }\n\n return chain;\n}\n\nfunction expand(scope: StyleScope, value: unknown, depths: Depths): Expansion {\n const output: Expansion = { classes: [], declarations: {}, nested: [] };\n const nested: StyleMap = {};\n\n function walk(value: unknown, depths: Depths) {\n if (!value) return;\n\n if (typeof value == 'string') {\n output.classes.push(...value.split(/\\s+/).filter(Boolean));\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((entry) => walk(entry, depths));\n return;\n }\n\n for (const [name, entry] of Object.entries(value as Declaration)) {\n if (name[0] == '_') {\n if (isObject(entry)) nested[name] = entry;\n continue;\n }\n\n const chain = handlers(scope, name);\n const depth = depths.get(name) || 0;\n\n if (depth < chain.length) {\n if (isPresent(entry))\n walk(\n chain[depth](entry === true ? undefined : entry, name),\n new Map(depths).set(name, depth + 1)\n );\n } else output.declarations[name] = terminal(name, entry);\n }\n }\n\n walk(value, depths);\n if (Object.keys(nested).length) output.nested.push(nested);\n return output;\n}\n\nfunction terminal(name: string, value: unknown) {\n if (Array.isArray(value)) return value.join(' ');\n\n if (typeof value == 'function' || isObject(value))\n throw new Error(`No macro handles \"${name}\".`);\n\n return typeof value == 'number' ? String(value) : value;\n}\n\nfunction isPresent(value: unknown) {\n return value !== false && value !== null && value !== undefined;\n}\n\nfunction isObject(value: unknown): value is Declaration {\n return !!value && typeof value == 'object' && !Array.isArray(value);\n}\n\nexport { createAppearanceRoute, createStyleScope, macro, resolveAppearance, style };\nexport type { AppearanceRoute, StyleMap, StyleScope };\n","type Declaration = Record<string, unknown>;\n\nfunction applyDeclarations(style: CSSStyleDeclaration, declarations: Declaration, previous: Declaration = {}) {\n const target = style as any;\n\n for (const key of Object.keys({ ...previous, ...declarations })) {\n const value = declarations[key];\n if (key.startsWith('--')) {\n style.setProperty(key, value == null ? '' : String(value));\n continue;\n }\n\n if (typeof value == 'number') target[key] = '';\n target[key] = value == null ? '' : value;\n if (typeof value == 'number' && value !== 0 && !target[key]) target[key] = `${value}px`;\n }\n}\n\nexport { applyDeclarations };\nexport type { Declaration };\n","import * as appearance from './appearance';\nimport { registerEmitter } from './protocol';\nimport type { Block } from './protocol';\nimport { applyDeclarations } from './declarations';\nimport type { Declaration } from './declarations';\n\ntype Member = Extract<keyof CSSStyleDeclaration, string>;\n\ntype Settable = {\n [K in Member]-?: CSSStyleDeclaration[K] extends Function ? never : K;\n}[Member];\n\ntype Key =\n | style.Property\n | keyof macro.Registry\n | `--${string}`\n | `_${string}`;\n\ntype Argument<K extends keyof macro.Registry> =\n macro.Registry[K] extends (value: infer A, ...rest: any[]) => any ? A : never;\n\ndeclare namespace macro {\n /**\n * Macros visible to a style map. A pack augments this interface to declare\n * what it registers with `macro()`.\n */\n interface Registry {}\n\n /** Maps one argument to style, or to keys which resolve further. */\n type Fn = (value: any, key: string) => unknown;\n\n /**\n * Body of a `macro()` map. A name declared in {@link Registry} must match its\n * declaration; an undeclared one is accepted, and becomes checkable at call\n * sites once a module augments `Registry` with it.\n */\n type Map =\n & Partial<Registry>\n & { [K in `_${string}`]?: style.Map }\n & Record<string, Fn | style.Map | undefined>;\n}\n\ndeclare namespace style {\n /** CSS property names, minus the CSSOM's own members. */\n type Property = Exclude<Settable, 'length' | 'parentRule' | 'cssText'>;\n\n /** What a declaration or macro argument may be; never a plain object. */\n type Value =\n | string\n | number\n | boolean\n | null\n | undefined\n | readonly Value[];\n\n /**\n * Body of a `style()` map. Bare keys are declarations or macro calls,\n * `_name` opens a rule or descendant scope, and `$name` is reserved.\n */\n type Map = {\n [K in Key]?:\n K extends `_${string}` ? Map :\n K extends keyof macro.Registry ? Argument<K> :\n Value;\n };\n}\n\ninterface Sheet {\n element: HTMLStyleElement;\n emitted: WeakMap<Block, Map<number, string>>;\n names: Map<string, string>;\n positions: [number, number][];\n}\n\nconst sheets = new WeakMap<Document, Sheet>();\n\nfunction style<T extends object>(type: T, rules: style.Map): T {\n appearance.style(type, rules);\n registerEmitter(emit);\n return type;\n}\n\nfunction macro(rules: macro.Map): macro.Map {\n appearance.macro(rules);\n registerEmitter(emit);\n return rules;\n}\n\nfunction emit(block: Block, depth: number, document: Document) {\n let sheet = sheets.get(document);\n\n if (!sheet?.element.sheet) {\n const element = document.createElement('style');\n element.dataset.expressive = 'dom';\n document.head.append(element);\n sheet = { element, emitted: new WeakMap(), names: new Map(), positions: [] };\n sheets.set(document, sheet);\n }\n\n let byDepth = sheet.emitted.get(block);\n if (!byDepth) sheet.emitted.set(block, (byDepth = new Map()));\n\n const cached = byDepth.get(depth);\n if (cached) return cached;\n\n const css = serialize(document, block.declarations);\n const base = (depth ? `${block.name}-d${depth}` : block.name).replace(/[^\\w-]/g, '_');\n let name = base;\n\n for (let index = 2; sheet.names.has(name) && sheet.names.get(name) !== css; index++)\n name = `${base}-${index}`;\n\n if (!sheet.names.has(name)) {\n const { positions } = sheet;\n let at = positions.findIndex(([d, o]) => d > depth || d == depth && o > block.ordinal);\n if (at < 0) at = positions.length;\n\n sheet.names.set(name, css);\n positions.splice(at, 0, [depth, block.ordinal]);\n sheet.element.sheet!.insertRule(`.${name}{${css}}`, at);\n }\n\n byDepth.set(depth, name);\n return name;\n}\n\nfunction serialize(document: Document, declarations: Declaration) {\n const value = document.createElement('div').style as any;\n applyDeclarations(value, declarations);\n return value.cssText;\n}\n\nexport { macro, style };\n","interface Placed {\n start: Node;\n dead?: boolean;\n}\n\ntype Entry = [Placed, () => unknown];\n\nconst DETACHED = new WeakMap<Node, Entry[]>();\n\nlet batch: Entry[] | undefined;\n\n/** Run `run` once `fiber` is on the page: now, after the current batch, or when its detached root attaches. */\nfunction inserted(fiber: Placed, run: () => unknown) {\n enqueue([fiber, run]);\n}\n\n/** A fragment whose commits wait until it attaches. */\nfunction fragment() {\n const root = document.createDocumentFragment();\n\n DETACHED.set(root, []);\n return root;\n}\n\nfunction attach(root: Node) {\n const held = DETACHED.get(root);\n\n DETACHED.delete(root);\n held?.forEach(enqueue);\n}\n\n/** Defer commits made during `work` until it returns or throws. */\nfunction batched<T>(work: () => T): T {\n if (batch) return work();\n\n const entries: Entry[] = (batch = []);\n\n try {\n return work();\n } finally {\n batch = undefined;\n entries.forEach(deliver);\n }\n}\n\nfunction enqueue(entry: Entry) {\n if (batch) batch.push(entry);\n else deliver(entry);\n}\n\nfunction deliver(entry: Entry) {\n const [fiber, run] = entry;\n const held = DETACHED.get(fiber.start.getRootNode());\n\n if (held) held.push(entry);\n else if (!fiber.dead) run();\n}\n\nexport { attach, batched, fragment, inserted };\n","import { Component, Context } from '@expressive/mvc';\n\nimport type { Key, Node as RenderNode } from '../node/vnode';\nimport type { Appearance, Claim } from '../style/claim';\nimport type { Scope } from './adapter';\n\ntype Container = Element | DocumentFragment;\n\ntype Kind = 'collection' | 'component' | 'element' | 'fragment' | 'function' | 'portal' | 'text';\n\ninterface Boundary {\n catch?: (error: Error) => Promise<void> | void;\n fallback: () => RenderNode;\n owner?: Fiber;\n parent?: Boundary;\n waiting?: Set<Fiber>;\n}\n\ntype Placement = Pick<Component, 'fallback' | 'catch'>;\n\ninterface Fiber {\n kind: Kind;\n key?: Key;\n type?: unknown;\n value?: unknown;\n source?: unknown;\n props?: Record<string, any>;\n context: Context;\n boundary?: Boundary;\n ownBoundary?: Boundary;\n start: globalThis.Node;\n end: globalThis.Node;\n children: Fiber[];\n scope?: Scope;\n cleanup?: (() => void) | void;\n release?: () => void;\n childContext?: Context;\n instance?: Component;\n owned?: boolean;\n events?: Map<string, EventListener>;\n portalStart?: globalThis.Node;\n portalEnd?: globalThis.Node;\n portalContainer?: Container;\n suspended?: Set<() => void>;\n applied?: boolean;\n retried?: boolean;\n portals?: [Fiber, DocumentFragment][];\n dead?: boolean;\n waitingOn?: Boundary;\n recovering?: object;\n stash?: DocumentFragment;\n placeholder?: Fiber;\n staging?: DocumentFragment;\n render?: () => RenderNode;\n appearance?: Appearance;\n consumed?: boolean;\n claimed?: Claim;\n}\n\nfunction range(kind: Kind, parent: globalThis.Node, before: globalThis.Node | null, context: Context): Fiber {\n const start = document.createComment(kind);\n const end = document.createComment(`/${kind}`);\n\n parent.insertBefore(start, before);\n parent.insertBefore(end, before);\n\n return { kind, context, start, end, children: [] };\n}\n\nfunction makeScope(context: Context, update: (passive: boolean) => void): Scope {\n return {\n active: true,\n context,\n subscriptions: [],\n update\n };\n}\n\nfunction moveRange(start: globalThis.Node, end: globalThis.Node, target: globalThis.Node) {\n let node: globalThis.Node | null = start;\n\n while (node) {\n const next: globalThis.Node | null = node.nextSibling;\n target.appendChild(node);\n if (node === end) break;\n node = next;\n }\n}\n\nfunction move(fiber: Fiber, parent: globalThis.Node, before: globalThis.Node | null) {\n if (fiber.start.parentNode === parent && fiber.end.nextSibling === before) return;\n\n let node: globalThis.Node | null = fiber.start;\n while (node) {\n const next: globalThis.Node | null = node.nextSibling;\n parent.insertBefore(node, before);\n if (node === fiber.end) break;\n node = next;\n }\n}\n\nfunction removeRange(start: globalThis.Node, end: globalThis.Node) {\n let node = start;\n\n while (true) {\n const next = node.nextSibling;\n (node as ChildNode).remove();\n if (node === end) break;\n node = next!;\n }\n}\n\nexport { makeScope, move, moveRange, range, removeRange };\nexport type { Boundary, Container, Fiber, Placement };\n","import { Context, has, map } from '@expressive/mvc';\nimport { watch } from '@expressive/mvc/observable';\n\nimport type { Node as VNode } from '../node/vnode';\nimport type { Appearance } from '../style/claim';\nimport { makeScope, range } from './fiber';\nimport type { Boundary, Fiber } from './fiber';\nimport { complete } from './mount';\nimport { attempt, passiveRender } from './render';\nimport { schedule, transition } from './scheduler';\n\nfunction mountCollection(value: has.List<unknown> | has.Pool<unknown> | map.Managed<unknown, unknown>, parent: globalThis.Node, before: globalThis.Node | null, context: Context, boundary?: Boundary, appearance?: Appearance) {\n const fiber = range('collection', parent, before, context);\n fiber.source = value;\n fiber.value = value;\n fiber.boundary = boundary;\n fiber.appearance = appearance;\n fiber.scope = makeScope(context, (passive) => runCollection(fiber, passive));\n\n let first = true;\n fiber.release = watch(value, (current) => {\n fiber.value = current;\n if (!first && fiber.scope?.active) schedule(fiber.scope);\n first = false;\n }, undefined, transition);\n\n return complete(fiber, () => {\n runCollection(fiber, passiveRender);\n });\n}\n\nfunction runCollection(fiber: Fiber, passive: boolean) {\n attempt(fiber, passive, () => {\n return (fiber.value as has.List<VNode>).render();\n });\n}\n\nfunction patchCollection(fiber: Fiber, appearance?: Appearance) {\n if (fiber.appearance === appearance) return;\n\n fiber.appearance = appearance;\n runCollection(fiber, passiveRender);\n}\n\nfunction isCollection(value: unknown): value is has.List<unknown> | has.Pool<unknown> | map.Managed<unknown, unknown> {\n return value instanceof has.List || value instanceof has.Pool || value instanceof map.Managed;\n}\n\nexport { isCollection, mountCollection, patchCollection };\n","import type { JSX } from '../jsx-runtime';\nimport type { ComponentType, Node } from './vnode';\nimport { vnode } from './vnode';\n\ntype Module<T extends ComponentType = ComponentType> = T | { default: T };\n\ntype Attributes<T> = [T] extends [never] ? {}\n : T extends abstract new (...args: any[]) => infer I\n ? JSX.LibraryManagedAttributes<T, I>\n : T extends (props: infer P) => any ? P : never;\n\ninterface Load {\n pending: PromiseLike<void>;\n resolved?: ComponentType;\n failed?: { error: unknown };\n}\n\nconst LOADS = new WeakMap<Function, Load>();\n\nfunction resolve(type: Function, props: object, run: () => unknown): Node {\n const load = LOADS.get(type);\n\n if (load?.resolved) return vnode(load.resolved, props);\n\n if (load?.failed) {\n LOADS.delete(type);\n throw load.failed.error;\n }\n\n if (load) throw load.pending;\n\n const output = run();\n\n if (!output || typeof (output as PromiseLike<unknown>).then != 'function') return output as Node;\n\n const next = {} as Load;\n\n LOADS.set(type, next);\n\n throw next.pending = (output as PromiseLike<Module | undefined>).then(\n (module) => {\n const component = typeof module == 'function' ? module : module?.default;\n\n if (typeof component == 'function') next.resolved = component;\n else next.failed = { error: new Error('Loader resolved no component.') };\n },\n (error) => {\n next.failed = { error };\n }\n );\n}\n\nexport { resolve };\nexport type { Attributes, Module };\n","import { applyDeclarations } from './declarations';\nimport { appearanceToken, createAppearanceToken, emitClass } from './protocol';\nimport type { AppearanceContext, ResolvedAppearance } from './protocol';\n\ntype Style = string | Record<string, unknown> | false | null | undefined | readonly Style[];\n\ninterface Appearance {\n context?: AppearanceContext;\n entries: Forwarded[];\n}\n\ninterface Forwarded {\n hops: number;\n style: Style;\n}\n\ninterface Carried {\n appearance: ResolvedAppearance;\n doors: number;\n}\n\ninterface Collected {\n classes: string[];\n declarations: Record<string, unknown>;\n tokens: Carried[];\n}\n\ninterface Claim {\n className: string;\n context?: AppearanceContext;\n declarations: Record<string, unknown>;\n}\n\ninterface Ticket {\n classes: string[];\n tokens: Carried[];\n}\n\nconst tickets = new WeakMap<object, Ticket>();\n\nfunction componentProps(\n type: unknown,\n props: Record<string, any>,\n appearance: Appearance | undefined\n) {\n const context = appearance?.context;\n if (!context || typeof type != 'function') return { appearance, props };\n\n const value = context.resolve(props);\n const entries = appearance!.entries;\n\n if (!value) return { appearance: { entries }, props };\n\n return {\n appearance: {\n context: value.context,\n entries\n },\n props: { ...props, style: [createAppearanceToken(value), props.style] }\n };\n}\n\nfunction door(value: Style) {\n const collected: Collected = { classes: [], declarations: {}, tokens: [] };\n const { classes, declarations, tokens } = collected;\n\n collect(value, collected, 1);\n\n if (!classes.length && !tokens.length && !Object.keys(declarations).length) return undefined;\n\n const key = Object.freeze({});\n\n tickets.set(key, { classes, tokens });\n return Object.freeze({ ...declarations, [Symbol('style')]: key });\n}\n\nfunction claim(\n element: Element,\n appearance: Appearance | undefined,\n resolved: ResolvedAppearance | undefined,\n className: unknown,\n value: Style\n): Claim {\n const collected: Collected = { classes: [], declarations: {}, tokens: [] };\n const entries = appearance?.entries || [];\n let context = appearance?.context;\n let reach = -1;\n\n if (resolved) collect(createAppearanceToken(resolved), collected, 0);\n appendClasses(collected.classes, className);\n collect(value, collected, 0);\n\n for (let index = entries.length - 1; index >= 0; index--)\n collect(entries[index].style, collected, entries[index].hops);\n\n for (const { appearance, doors } of collected.tokens) {\n for (const block of appearance.blocks || [])\n collected.classes.push(emitClass(block, doors, element.ownerDocument));\n if (appearance.classes) collected.classes.push(...appearance.classes);\n if (appearance.context && doors >= reach) {\n context = appearance.context;\n reach = doors;\n }\n }\n\n return {\n className: [...new Set(collected.classes)].join(' '),\n context,\n declarations: collected.declarations\n };\n}\n\nfunction applyClaim(element: Element, before: Claim | undefined, after: Claim) {\n const previous = before || { className: '', declarations: {} };\n\n if (previous.className !== after.className) {\n if (after.className) element.setAttribute('class', after.className);\n else element.removeAttribute('class');\n }\n\n applyDeclarations((element as HTMLElement).style, after.declarations, previous.declarations);\n}\n\nfunction collect(value: Style, collected: Collected, doors: number) {\n if (!value) return;\n\n const token = appearanceToken(value);\n if (token) {\n collected.tokens.push({ appearance: token, doors });\n Object.assign(collected.declarations, token.declarations);\n return;\n }\n\n if (typeof value == 'string') {\n appendClasses(collected.classes, value);\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((entry) => collect(entry, collected, doors));\n return;\n }\n\n for (const symbol of Object.getOwnPropertySymbols(value)) {\n const ticket = tickets.get((value as Record<symbol, object>)[symbol]);\n if (!ticket) continue;\n\n collected.classes.push(...ticket.classes);\n for (const carried of ticket.tokens)\n collected.tokens.push({ appearance: carried.appearance, doors: carried.doors + doors });\n }\n\n for (const key of Object.keys(value)) collected.declarations[key] = (value as Record<string, unknown>)[key];\n}\n\nfunction appendClasses(classes: string[], value: unknown) {\n if (typeof value == 'string') classes.push(...value.split(/\\s+/).filter(Boolean));\n}\n\nexport { applyClaim, claim, componentProps, door };\nexport type { Appearance, Claim, Style };\n","import type { Node as RenderNode } from '../node/vnode';\nimport { door } from '../style/claim';\nimport type { Appearance, Style } from '../style/claim';\nimport { appearanceRoot, enterAppearance } from '../style/protocol';\nimport type { Fiber } from './fiber';\nimport { latest } from './hot';\n\nlet rendering: object | undefined;\n\nlet touched = false;\n\nconst observed = new WeakMap<object, Record<string, any>>();\n\nfunction observe(props: Record<string, any>) {\n if (!('style' in props)) return props;\n\n let output = observed.get(props);\n\n if (!output) {\n const { style } = props;\n let handle: Style;\n let resolved = false;\n\n output = Object.defineProperty({ ...props }, 'style', {\n enumerable: true,\n get() {\n if (rendering === output) touched = true;\n if (!resolved) {\n handle = door(style);\n resolved = true;\n }\n return handle;\n }\n });\n observed.set(props, output);\n }\n\n return output;\n}\n\nfunction consume(fiber: Fiber, render: () => RenderNode) {\n const previous = rendering;\n const read = touched;\n\n rendering = fiber.props;\n touched = false;\n\n try {\n const output = render();\n fiber.consumed = touched;\n return output;\n } finally {\n rendering = previous;\n touched = read;\n }\n}\n\nfunction renderedAppearance(fiber: Fiber): Appearance | undefined {\n if (fiber.kind != 'component' && fiber.kind != 'function') return fiber.appearance;\n\n const style = fiber.props?.style as Style;\n const entries = (fiber.appearance?.entries || []).map(({ hops, style }) => ({ hops: hops + 1, style }));\n const inherited = fiber.appearance?.context || appearanceRoot();\n const context = enterAppearance(inherited, latest(fiber.type as Function));\n\n if (context?.base && context !== inherited)\n entries.push({ hops: 0, style: context.base as Style });\n\n if (style && !fiber.consumed && !(fiber.instance && 'style' in fiber.instance)) entries.push({ hops: 0, style });\n\n return entries.length || context ? { context, entries } : undefined;\n}\n\nexport { consume, observe, renderedAppearance };\n","import { Context } from '@expressive/mvc';\n\nimport type { VNode } from '../node/vnode';\nimport { applyClaim, claim } from '../style/claim';\nimport type { Appearance } from '../style/claim';\nimport { inserted } from './commits';\nimport type { Boundary, Fiber } from './fiber';\nimport { complete, unmountFiber } from './mount';\nimport { reconcileChildren } from './reconcile';\nimport { focusing } from './render';\nimport { afterFlush } from './scheduler';\nimport { hostOf } from './suspense';\n\nconst SVG = 'http://www.w3.org/2000/svg';\nconst CONTROLS = ['checked', 'value'];\nconst ENUMERATED = ['contentEditable', 'contenteditable', 'draggable', 'spellcheck'];\nconst ALIASES: Record<string, string> = { autoFocus: 'autofocus', contentEditable: 'contenteditable', htmlFor: 'for' };\nconst controlled = new WeakMap<Element, Fiber>();\nconst restoring = new WeakSet<Document>();\n\nfunction mountElement(value: VNode, parent: globalThis.Node, before: globalThis.Node | null, context: Context, boundary?: Boundary, appearance?: Appearance) {\n const tag = value.type as string;\n const host = hostOf(parent);\n const namespace = tag == 'svg' || host instanceof SVGElement && host.localName != 'foreignObject' ? SVG : undefined;\n const element = namespace\n ? document.createElementNS(SVG, tag)\n : document.createElement(tag);\n const fiber: Fiber = {\n kind: 'element',\n key: value.key,\n type: tag,\n props: {},\n context,\n boundary,\n start: element,\n end: element,\n children: [],\n events: new Map()\n };\n\n parent.insertBefore(element, before);\n complete(fiber, () => {\n patchProps(fiber, value.props, appearance);\n });\n\n if (value.props.autofocus || value.props.autoFocus) focusing.push(element);\n return fiber;\n}\n\nfunction patchProps(fiber: Fiber, next: Record<string, any>, appearance?: Appearance) {\n const element = fiber.start as Element;\n const previous = fiber.props!;\n const raw = 'dangerouslySetInnerHTML' in next;\n const resolved = appearance?.context?.resolve(next, fiber.type as string);\n\n if (raw) {\n for (let index = fiber.children.length - 1; index >= 0; index--)\n unmountFiber(fiber.children[index]);\n fiber.children = [];\n }\n\n for (const key of Object.keys({ ...previous, ...next })) {\n if (key.startsWith('_') || key == 'children' || key == 'className' || key == 'key' || key == 'ref' || key == 'style' || CONTROLS.includes(key)) continue;\n if (previous[key] === next[key]) continue;\n patchProp(fiber, element, key, previous[key], next[key]);\n }\n\n const claimed = claim(element, appearance, resolved, next.className, next.style);\n\n applyClaim(element, fiber.claimed, claimed);\n fiber.claimed = claimed;\n fiber.props = next;\n fiber.appearance = appearance;\n\n if (!raw) {\n reconcileChildren(\n fiber,\n element,\n null,\n next.children,\n fiber.context,\n fiber.boundary,\n claimed.context ? { context: claimed.context, entries: [] } : undefined\n );\n }\n\n for (const key of CONTROLS) {\n const value = next[key];\n const live = (element as any)[key];\n const differs = value == null || !(key in element)\n ? previous[key] !== value\n : key == 'value' ? String(live) !== String(value) : live !== value;\n\n if (differs) patchProp(fiber, element, key, previous[key], value);\n }\n\n if (CONTROLS.some((key) => next[key] != null)) {\n const document = element.ownerDocument;\n\n controlled.set(element, fiber);\n\n if (!restoring.has(document)) {\n restoring.add(document);\n document.addEventListener('input', restoreTarget);\n document.addEventListener('change', restoreTarget);\n }\n }\n\n if (previous.ref !== next.ref) patchProp(fiber, element, 'ref', previous.ref, next.ref);\n}\n\nfunction patchProp(fiber: Fiber, element: Element, key: string, previous: any, next: any) {\n if (key == 'ref') {\n applyRef(previous, null);\n inserted(fiber, () => applyRef(next, element));\n return;\n }\n\n if (key == 'dangerouslySetInnerHTML') {\n element.innerHTML = next?.__html || '';\n return;\n }\n\n if (/^on[A-Z]/.test(key)) {\n const capture = key.endsWith('Capture');\n const lower = (capture ? key.slice(2, -7) : key.slice(2)).toLowerCase();\n const name = lower == 'doubleclick' ? 'dblclick' : lower;\n const id = `${name}:${capture}`;\n const current = fiber.events!.get(id);\n\n if (current) element.removeEventListener(name, current, capture);\n if (typeof next == 'function') {\n fiber.events!.set(id, next);\n element.addEventListener(name, next, capture);\n } else fiber.events!.delete(id);\n return;\n }\n\n const name = ALIASES[key] || key;\n\n if ((key.startsWith('aria-') || key.startsWith('data-') || ENUMERATED.includes(key)) && next != null) {\n element.setAttribute(name, String(next));\n return;\n }\n\n if (next === null || next === undefined || next === false) {\n if (key in element && typeof (element as any)[key] != 'function')\n try {\n const current = (element as any)[key];\n (element as any)[key] = typeof current == 'boolean'\n ? false\n : typeof current == 'number'\n ? 0\n : '';\n } catch {}\n element.removeAttribute(element.namespaceURI === SVG ? name.toLowerCase() : name);\n element.removeAttribute(name);\n return;\n }\n\n if (key in element && (element.namespaceURI !== SVG || settable(element, key)))\n try {\n (element as any)[key] = next;\n return;\n } catch {}\n\n element.setAttribute(name, next === true ? '' : String(next));\n}\n\nfunction restoreTarget(event: Event) {\n const element = event.target as HTMLInputElement;\n const fiber = controlled.get(element);\n\n if (fiber && event.type == settles(fiber.props!, element))\n queueMicrotask(() => afterFlush(() => restore(fiber)));\n}\n\nfunction settles(props: Record<string, any>, element: HTMLInputElement) {\n if (props.onInput) return 'input';\n if (props.onChange) return 'change';\n return element.type == 'checkbox' || element.type == 'radio' || element.localName == 'select' ? 'change' : 'input';\n}\n\nfunction restore(fiber: Fiber) {\n const element = fiber.start as any;\n\n for (const key of CONTROLS) {\n const value = fiber.props![key];\n\n if (value == null || fiber.dead) continue;\n if (key == 'value' ? String(element.value) !== String(value) : element[key] !== value)\n element[key] = value;\n }\n}\n\nfunction settable(element: Element, key: string) {\n let target: object = element;\n let descriptor: PropertyDescriptor | undefined;\n\n while (!(descriptor = Object.getOwnPropertyDescriptor(target, key)))\n target = Object.getPrototypeOf(target);\n\n return !!(descriptor.set || descriptor.writable);\n}\n\nfunction applyRef(ref: unknown, value: Element | null) {\n if (typeof ref == 'function') ref(value);\n else if (ref && typeof ref == 'object' && 'current' in ref) (ref as { current: Element | null }).current = value;\n}\n\nfunction unmountElement(fiber: Fiber) {\n applyRef(fiber.props?.ref, null);\n for (const [id, listener] of fiber.events!) {\n const [name, capture] = id.split(':');\n (fiber.start as Element).removeEventListener(name, listener, capture === 'true');\n }\n}\n\nexport { mountElement, patchProps, unmountElement };\n","import { Context } from '@expressive/mvc';\n\nimport { PORTAL } from '../node/vnode';\nimport type { Node as RenderNode, VNode } from '../node/vnode';\nimport type { Appearance } from '../style/claim';\nimport type { Boundary, Container, Fiber } from './fiber';\nimport { complete } from './mount';\nimport { reconcileChildren } from './reconcile';\n\nfunction mountPortal(value: VNode, parent: globalThis.Node, before: globalThis.Node | null, context: Context, boundary?: Boundary, appearance?: Appearance) {\n const marker = document.createComment('portal');\n const container = target(value.props.into, parent);\n const portalStart = document.createComment('portal-root');\n const portalEnd = document.createComment('/portal-root');\n\n parent.insertBefore(marker, before);\n container.append(portalStart, portalEnd);\n\n const output: Fiber = {\n kind: 'portal',\n key: value.key,\n type: PORTAL,\n props: value.props,\n context,\n boundary,\n appearance,\n start: marker,\n end: marker,\n children: [],\n portalContainer: container,\n portalStart,\n portalEnd\n };\n\n return complete(output, () => {\n reconcilePortal(output, value.props.children, context, boundary, appearance);\n });\n}\n\nfunction target(into: unknown, parent: globalThis.Node): Container {\n if (typeof into != 'string') return into as Container;\n\n const root = parent.getRootNode();\n const found = [...document.querySelectorAll(into)];\n\n if (root instanceof DocumentFragment) found.push(...root.querySelectorAll(into));\n\n if (found.length != 1)\n throw new Error(`Portal target \"${into}\" ${found.length ? 'is ambiguous' : 'was not found'}.`);\n\n return found[0];\n}\n\nfunction reconcilePortal(fiber: Fiber, value: RenderNode, context: Context, boundary?: Boundary, appearance?: Appearance) {\n reconcileChildren(fiber, fiber.portalEnd!.parentNode!, fiber.portalEnd!, value, context, boundary, appearance);\n}\n\nfunction patchPortal(fiber: Fiber, value: VNode, context: Context, appearance?: Appearance) {\n fiber.appearance = appearance;\n fiber.props = value.props;\n reconcilePortal(fiber, value.props.children, context, fiber.boundary, appearance);\n}\n\nfunction unmountPortal(fiber: Fiber) {\n (fiber.portalStart as ChildNode).remove();\n (fiber.portalEnd as ChildNode).remove();\n}\n\nexport { mountPortal, patchPortal, unmountPortal };\n","import { Context, Model } from '@expressive/mvc';\n\nimport { childrenOf, isVNode } from '../node/vnode';\nimport type { Key, Node as RenderNode, VNode } from '../node/vnode';\nimport type { Appearance } from '../style/claim';\nimport { isCollection, patchCollection } from './collection';\nimport { attach } from './commits';\nimport { patchComponent, patchFunction, renderable } from './component';\nimport { patchProps } from './element';\nimport { move } from './fiber';\nimport type { Boundary, Fiber } from './fiber';\nimport { same } from './hot';\nimport { mount, patchFragment, patchText, unmountFiber } from './mount';\nimport { patchPortal } from './portal';\nimport { gather } from './suspense';\n\nfunction reconcile(fiber: Fiber, value: RenderNode, context: Context, boundary?: Boundary, appearance?: Appearance) {\n const detached = fiber.stash || fiber.staging;\n\n if (detached) reconcileChildren(fiber, detached, null, value, context, boundary, appearance);\n else reconcileChildren(fiber, fiber.end.parentNode!, fiber.end, value, context, boundary, appearance);\n}\n\nfunction reconcileChildren(owner: Fiber, parent: globalThis.Node, before: globalThis.Node | null, value: RenderNode, context: Context, boundary?: Boundary, appearance?: Appearance) {\n const values = childrenOf(value);\n const old = owner.children;\n const keyed = new Map<Key, Fiber>();\n const used = new Set<Fiber>();\n const next: Fiber[] = [];\n\n for (const child of old)\n if (child.key !== null && child.key !== undefined) keyed.set(child.key, child);\n\n try {\n for (let index = 0; index < values.length; index++) {\n const value = source(values[index]);\n const key = keyOf(value);\n let child = key !== null && key !== undefined\n ? keyed.get(key)\n : old[index]?.key == null\n ? old[index]\n : undefined;\n\n if (child && used.has(child)) child = undefined;\n if (child) used.add(child);\n\n const fiber = patch(child, value, parent, before, context, boundary, appearance);\n\n if (fiber !== child) used.delete(child!);\n next.push(fiber);\n }\n } catch (error) {\n gather(error, next, old);\n owner.children = [...next, ...old.filter((child) => !child.dead && !next.includes(child))];\n throw error;\n }\n\n for (const child of old)\n if (!used.has(child)) unmountFiber(child);\n\n let anchor = before;\n for (let index = next.length - 1; index >= 0; index--) {\n const child = next[index];\n const root = child.start.getRootNode();\n\n move(child, parent, anchor);\n anchor = child.start;\n if (child.start.getRootNode() !== root) attach(root);\n }\n\n owner.children = next;\n}\n\nfunction patch(old: Fiber | undefined, value: RenderNode, parent: globalThis.Node, before: globalThis.Node | null, context: Context, boundary?: Boundary, appearance?: Appearance): Fiber {\n if (!old || !compatible(old, value)) return mount(value, parent, old?.start || before, context, boundary, appearance);\n\n if (old.ownBoundary) old.ownBoundary.parent = boundary;\n old.boundary = old.ownBoundary || boundary;\n\n if (old.kind == 'collection') patchCollection(old, appearance);\n else if (old.kind == 'text') patchText(old, value);\n else if (old.kind == 'element') patchProps(old, (value as VNode).props, appearance);\n else if (old.kind == 'fragment') patchFragment(old, value as VNode, context, appearance);\n else if (old.kind == 'function') patchFunction(old, value as VNode, appearance);\n else if (old.kind == 'component') patchComponent(old, value, appearance);\n else patchPortal(old, value as VNode, context, appearance);\n\n return old;\n}\n\nfunction compatible(fiber: Fiber, value: RenderNode) {\n if (fiber.kind == 'text') return ['string', 'number', 'bigint'].includes(typeof value);\n if (renderable(value)) return fiber.kind == 'component' && fiber.instance === value;\n if (isCollection(value))\n return fiber.kind == 'collection' && fiber.source === value;\n if (!isVNode(value)) return false;\n if (fiber.key !== value.key || !same(fiber.type, value.type)) return false;\n if (fiber.kind == 'portal') return fiber.props!.into === value.props.into;\n return true;\n}\n\nfunction source(value: RenderNode): RenderNode {\n if (value instanceof Model) return value.is;\n\n while (isCollection(value) && isCollection(Object.getPrototypeOf(value)))\n value = Object.getPrototypeOf(value);\n\n return value;\n}\n\nfunction keyOf(value: RenderNode): Key {\n if (renderable(value)) return value.key;\n return isVNode(value) ? value.key : undefined;\n}\n\nexport { reconcile, reconcileChildren };\n","import { fragment } from './commits';\nimport { move, moveRange, range } from './fiber';\nimport type { Boundary, Fiber } from './fiber';\nimport { unmountFiber } from './mount';\nimport { reconcile } from './reconcile';\nimport { depth, pass } from './render';\nimport { release, schedule, transition } from './scheduler';\n\nconst dirty = new Set<Boundary>();\nconst stashes = new WeakMap<globalThis.Node, Fiber>();\nlet holding: { thrown: unknown; fiber?: Fiber } | undefined;\nlet settling = false;\n\nfunction park(fiber: Fiber) {\n move(fiber, fragment(), null);\n}\n\nfunction hold(fiber: Fiber, error: unknown) {\n if (!holding || error !== holding.thrown) return false;\n\n park(fiber);\n holding.fiber = fiber;\n return true;\n}\n\nfunction gather(error: unknown, next: Fiber[], old: Fiber[]) {\n if (!holding || error !== holding.thrown) return;\n\n for (const fiber of next) if (!old.includes(fiber)) park(fiber);\n if (holding.fiber) next.push(holding.fiber);\n holding.fiber = undefined;\n}\n\nfunction hostOf(parent: globalThis.Node) {\n let host = parent;\n\n for (let owner = stashes.get(host); owner; owner = stashes.get(host))\n host = owner.end.parentNode!;\n\n return host;\n}\n\nfunction wait(fiber: Fiber, boundary: Boundary) {\n if (fiber.waitingOn !== boundary) unwait(fiber);\n\n fiber.waitingOn = boundary;\n (boundary.waiting ||= new Set()).add(fiber);\n dirty.add(boundary);\n}\n\nfunction unwait(fiber: Fiber) {\n const boundary = fiber.waitingOn;\n\n if (!boundary) return;\n\n fiber.waitingOn = undefined;\n boundary.waiting!.delete(fiber);\n if (!boundary.owner!.dead) dirty.add(boundary);\n}\n\nfunction settle() {\n if (settling) return;\n settling = true;\n\n try {\n for (const boundary of dirty) {\n dirty.delete(boundary);\n\n const owner = boundary.owner!;\n const waiting = boundary.waiting!.size > 0;\n\n if (!owner.dead && waiting != !!owner.stash)\n waiting ? hide(owner, boundary) : reveal(owner);\n }\n } finally {\n settling = false;\n }\n}\n\nfunction hide(owner: Fiber, boundary: Boundary) {\n const stash = document.createDocumentFragment();\n\n for (const child of owner.children) move(child, stash, null);\n\n owner.portals = portals(owner, []).map((portal) => {\n const content = document.createDocumentFragment();\n moveRange(portal.portalStart!, portal.portalEnd!, content);\n return [portal, content];\n });\n\n stashes.set(stash, owner);\n\n const context = owner.childContext!;\n const placeholder = range('fragment', owner.end.parentNode!, owner.end, context);\n\n owner.stash = stash;\n owner.placeholder = placeholder;\n reconcile(placeholder, boundary.fallback(), context, boundary.parent);\n}\n\nfunction reveal(owner: Fiber) {\n unmountFiber(owner.placeholder!);\n owner.end.parentNode!.insertBefore(owner.stash!, owner.end);\n\n for (const [portal, content] of owner.portals!)\n if (!portal.dead) portal.portalContainer!.append(content);\n\n owner.portals = undefined;\n owner.placeholder = undefined;\n owner.stash = undefined;\n}\n\nfunction portals(fiber: Fiber, found: Fiber[]) {\n for (const child of fiber.children) {\n if (child.kind == 'portal') found.push(child);\n portals(child, found);\n }\n\n return found;\n}\n\nfunction suspend(fiber: Fiber, thrown: unknown, passive: boolean, empty: boolean) {\n const boundary = fiber.boundary;\n\n if (isThenable(thrown)) {\n if (!boundary) throw thrown;\n if (passive && empty && depth > 1) {\n if (holding?.thrown !== thrown) holding = { thrown };\n throw thrown;\n }\n\n holding = undefined;\n if (!passive) wait(fiber, boundary);\n\n const scope = fiber.scope!;\n let held = scope.holds;\n\n scope.holds = undefined;\n\n const clear = () => {\n fiber.suspended!.delete(clear);\n release(held);\n held = undefined;\n };\n\n (fiber.suspended ||= new Set()).add(clear);\n\n const resume = (retry: () => void) => {\n fiber.suspended!.delete(clear);\n if (!scope.active) return clear();\n if (held) (scope.holds ||= []).push(...held);\n held = undefined;\n retry();\n };\n\n thrown.then(\n () => resume(() => passive ? transition(() => schedule(scope)) : schedule(scope)),\n (error) => resume(() => pass(() => recover(fiber, error, fiber.boundary)))\n );\n return thrown;\n }\n\n recover(fiber, thrown, fiber.boundary);\n}\n\nfunction recover(fiber: Fiber, thrown: unknown, boundary: Boundary | undefined) {\n const error = thrown instanceof Error ? thrown : new Error(String(thrown));\n\n while (boundary && !boundary.catch) boundary = boundary.parent;\n\n if (!boundary) throw error;\n\n const handler = boundary;\n\n const token = {};\n\n wait(fiber, handler);\n fiber.recovering = token;\n\n Promise.resolve(handler.catch!(error)).then(\n () => {\n if (fiber.recovering !== token) return;\n fiber.recovering = undefined;\n if (!fiber.scope!.active || fiber.retried) return;\n fiber.retried = true;\n schedule(fiber.scope!);\n },\n (next) => {\n if (fiber.recovering === token && fiber.scope!.active) pass(() => recover(fiber, next, handler.parent));\n }\n );\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<unknown> {\n return !!value && typeof (value as PromiseLike<unknown>).then == 'function';\n}\n\nexport { gather, hold, hostOf, isThenable, settle, suspend, unwait };\n","import { Component, Context, unbind } from '@expressive/mvc';\nimport { watch } from '@expressive/mvc/observable';\n\nimport { resolve } from '../node/loader';\nimport { isVNode } from '../node/vnode';\nimport type { Key, Node as RenderNode, VNode } from '../node/vnode';\nimport { componentProps } from '../style/claim';\nimport type { Appearance } from '../style/claim';\nimport { call, enter } from './adapter';\nimport { inserted } from './commits';\nimport { makeScope, range } from './fiber';\nimport type { Boundary, Fiber, Placement } from './fiber';\nimport { latest, track, untrack } from './hot';\nimport { complete } from './mount';\nimport { attempt, passiveRender } from './render';\nimport { claim as dequeue, schedule, settle as absorb, transition } from './scheduler';\nimport { consume, observe } from './style';\nimport { isThenable } from './suspense';\n\nfunction mountFunction(value: VNode, parent: globalThis.Node, before: globalThis.Node | null, context: Context, boundary?: Boundary, appearance?: Appearance) {\n const fiber = range('function', parent, before, context);\n const resolved = componentProps(value.type, value.props, appearance);\n fiber.key = value.key;\n fiber.type = value.type;\n fiber.props = observe(resolved.props);\n fiber.boundary = boundary;\n fiber.appearance = resolved.appearance;\n fiber.scope = makeScope(context, (passive) => run(fiber, passive));\n fiber.render = () => enter(fiber.scope!, () => {\n const type = latest(fiber.type as Function);\n return resolve(type, fiber.props!, () => call(type, fiber.props));\n });\n track(fiber.type as Function, fiber.scope);\n probing(fiber);\n\n return complete(fiber, () => {\n run(fiber, passiveRender);\n });\n}\n\nfunction mountOwnedComponent(\n value: VNode,\n parent: globalThis.Node,\n before: globalThis.Node | null,\n context: Context,\n boundary?: Boundary,\n appearance?: Appearance\n) {\n const resolved = componentProps(value.type, value.props, appearance);\n const Type = value.type as new (props: unknown) => Component;\n const props = observe(resolved.props);\n const instance = new Type(props);\n\n return mountComponent(instance, parent, before, context, boundary, resolved.appearance, true, value.key, props);\n}\n\nfunction mountComponent(\n instance: Component,\n parent: globalThis.Node,\n before: globalThis.Node | null,\n context: Context,\n inherited?: Boundary,\n appearance?: Appearance,\n owned = false,\n key?: Key,\n props: Record<string, any> = instance.props\n) {\n const fiber = range('component', parent, before, context);\n const childContext = context.push(instance);\n const element = (owned ? props : {}) as Placement;\n const { fallback } = instance;\n const ownBoundary: Boundary | undefined = fallback !== undefined && fallback !== false || element.catch || instance.catch\n ? {\n catch: element.catch || instance.catch ? (error) => {\n const handler = owned && (fiber.props as Placement).catch;\n return (handler || instance.catch)!.call(instance, error, instance);\n } : undefined,\n fallback: () => instance.fallback,\n owner: fiber,\n parent: inherited\n }\n : inherited;\n\n fiber.boundary = ownBoundary;\n if (ownBoundary !== inherited) fiber.ownBoundary = ownBoundary;\n fiber.childContext = childContext;\n fiber.instance = instance;\n fiber.key = owned ? key : instance.key;\n fiber.type = instance.constructor;\n fiber.props = props;\n fiber.owned = owned;\n fiber.appearance = appearance;\n fiber.scope = makeScope(childContext, (passive) => run(fiber, passive));\n fiber.render = () => enter(fiber.scope!, () => {\n return unbind((fiber.value as Component).render).call(fiber.value, fiber.props);\n });\n probing(fiber);\n\n let first = true;\n let proxy = instance;\n fiber.release = watch(instance, (current, events) => {\n const { applied, scope } = fiber;\n\n proxy = current;\n fiber.applied = undefined;\n\n if (!first && scope!.active) {\n if (applied && events.includes('props')) transition(() => schedule(scope!));\n else schedule(scope!);\n }\n\n first = false;\n }, undefined, transition);\n\n Object.defineProperty(fiber, 'value', { get: () => proxy });\n try {\n complete(fiber, () => {\n run(fiber, passiveRender);\n });\n } finally {\n if (owned && !fiber.dead) inserted(fiber, () => (fiber.cleanup = instance.mount?.()));\n }\n\n return fiber;\n}\n\nfunction run(fiber: Fiber, passive: boolean) {\n const result = attempt(fiber, passive, fiber.render!);\n\n if (result !== true) return result;\n}\n\nfunction probing(fiber: Fiber) {\n const scope = fiber.scope!;\n\n scope.empty = () => !fiber.children.length;\n scope.probe = () => {\n try {\n scope.probed = { output: consume(fiber, fiber.render!) };\n } catch (thrown) {\n if (isThenable(thrown)) return thrown;\n }\n };\n}\n\nfunction patchFunction(fiber: Fiber, value: VNode, appearance?: Appearance) {\n const resolved = componentProps(value.type, value.props, appearance);\n if (fiber.type !== value.type) {\n untrack(fiber.type as Function, fiber.scope!);\n fiber.type = value.type;\n track(fiber.type as Function, fiber.scope!);\n }\n fiber.appearance = resolved.appearance;\n fiber.props = observe(resolved.props);\n rerun(fiber, () => run(fiber, passiveRender));\n}\n\nfunction patchComponent(fiber: Fiber, value: RenderNode, appearance?: Appearance) {\n const resolved = isVNode(value)\n ? componentProps(value.type, value.props, appearance)\n : { appearance, props: fiber.props! };\n fiber.appearance = resolved.appearance;\n const props = isVNode(value) ? observe(resolved.props) : resolved.props;\n if (isVNode(value) && props !== fiber.props) {\n const instance = fiber.instance!;\n if (passiveRender) fiber.applied = true;\n (instance as any).props = props;\n }\n fiber.props = props;\n rerun(fiber, () => run(fiber, passiveRender));\n}\n\nfunction rerun(fiber: Fiber, run: () => void) {\n dequeue(fiber.scope!);\n run();\n absorb(fiber.scope!);\n}\n\nfunction unmountComponent(fiber: Fiber) {\n if (typeof fiber.cleanup == 'function') fiber.cleanup();\n fiber.childContext?.pop();\n if (fiber.owned && !fiber.instance!.get(null)) fiber.instance!.set(null);\n}\n\nfunction renderable(value: unknown): value is Component {\n return value instanceof Component;\n}\n\nexport { mountComponent, mountFunction, mountOwnedComponent, patchComponent, patchFunction, renderable, unmountComponent };\n","import { Component, Context, Model } from '@expressive/mvc';\nimport { Fragment } from '@expressive/mvc/jsx-runtime';\n\nimport { isVNode, PORTAL } from '../node/vnode';\nimport type { Node as RenderNode, VNode } from '../node/vnode';\nimport type { Appearance } from '../style/claim';\nimport { dispose } from './adapter';\nimport { isCollection, mountCollection } from './collection';\nimport { mountComponent, mountFunction, mountOwnedComponent, renderable, unmountComponent } from './component';\nimport { mountElement, unmountElement } from './element';\nimport { range, removeRange } from './fiber';\nimport type { Boundary, Fiber } from './fiber';\nimport { untrack } from './hot';\nimport { mountPortal, unmountPortal } from './portal';\nimport { reconcile } from './reconcile';\nimport { hold, unwait } from './suspense';\n\nfunction complete<T extends Fiber>(fiber: T, work: () => void): T {\n try {\n work();\n } catch (error) {\n if (!hold(fiber, error)) unmountFiber(fiber);\n\n throw error;\n }\n\n return fiber;\n}\n\nfunction mount(value: RenderNode, parent: globalThis.Node, before: globalThis.Node | null, context: Context, boundary?: Boundary, appearance?: Appearance): Fiber {\n if (typeof value == 'string' || typeof value == 'number' || typeof value == 'bigint') {\n const text = document.createTextNode(String(value));\n parent.insertBefore(text, before);\n return { kind: 'text', value, context, start: text, end: text, children: [] };\n }\n\n if (renderable(value)) return mountComponent(value, parent, before, context, boundary, appearance);\n if (value instanceof Model) notRenderable(value.constructor);\n if (isCollection(value))\n return mountCollection(value, parent, before, context, boundary, appearance);\n\n if (!isVNode(value)) throw new TypeError(`Cannot render ${String(value)}.`);\n\n if (value.type === Fragment) return mountFragment(value, parent, before, context, boundary, appearance);\n if (value.type === PORTAL) return mountPortal(value, parent, before, context, boundary, appearance);\n if (typeof value.type == 'string') return mountElement(value, parent, before, context, boundary, appearance);\n if (typeof value.type != 'function')\n throw new Error(`Cannot render ${String(value.type)}.`);\n\n if (value.type === Component || value.type.prototype instanceof Component)\n return mountOwnedComponent(value, parent, before, context, boundary, appearance);\n\n if (value.type.prototype instanceof Model) notRenderable(value.type);\n\n return mountFunction(value, parent, before, context, boundary, appearance);\n}\n\nfunction mountFragment(value: VNode, parent: globalThis.Node, before: globalThis.Node | null, context: Context, boundary?: Boundary, appearance?: Appearance) {\n const fiber = range('fragment', parent, before, context);\n fiber.key = value.key;\n fiber.type = Fragment;\n fiber.appearance = appearance;\n\n return complete(fiber, () => {\n reconcile(fiber, value.props.children, context, boundary, appearance);\n });\n}\n\nfunction patchText(fiber: Fiber, value: RenderNode) {\n const next = String(value);\n if (fiber.start.nodeValue !== next) fiber.start.nodeValue = next;\n fiber.value = value;\n}\n\nfunction patchFragment(fiber: Fiber, value: VNode, context: Context, appearance?: Appearance) {\n fiber.context = context;\n fiber.appearance = appearance;\n reconcile(fiber, value.props.children, context, fiber.boundary, appearance);\n}\n\nfunction unmountFiber(fiber: Fiber) {\n fiber.dead = true;\n unwait(fiber);\n\n for (let index = fiber.children.length - 1; index >= 0; index--)\n unmountFiber(fiber.children[index]);\n\n if (fiber.placeholder) unmountFiber(fiber.placeholder);\n\n fiber.suspended?.forEach((clear) => clear());\n if (fiber.kind == 'function') untrack(fiber.type as Function, fiber.scope!);\n if (fiber.scope) dispose(fiber.scope);\n fiber.release?.();\n\n if (fiber.kind == 'element') unmountElement(fiber);\n else if (fiber.kind == 'component') unmountComponent(fiber);\n else if (fiber.kind == 'portal') unmountPortal(fiber);\n\n removeRange(fiber.start, fiber.end);\n}\n\nfunction notRenderable(type: Function): never {\n throw new Error(`${type.name} is a Model - extend Component to render it, or provide it with <Component for={${type.name}}>.`);\n}\n\nexport { complete, mount, patchFragment, patchText, unmountFiber };\n","import { Context } from '@expressive/mvc';\n\nimport type { Node as RenderNode } from '../node/vnode';\nimport { appearanceRoot } from '../style/protocol';\nimport { attach, batched, fragment } from './commits';\nimport { range } from './fiber';\nimport type { Container, Fiber } from './fiber';\nimport { unmountFiber } from './mount';\nimport { reconcile } from './reconcile';\nimport { consume, renderedAppearance } from './style';\nimport { settle, suspend, unwait } from './suspense';\n\nconst roots = new WeakMap<Container, () => void>();\nconst focusing: Element[] = [];\nlet passiveRender = false;\nlet depth = 0;\n\nfunction render(node: RenderNode, container: Container): () => void {\n roots.get(container)?.();\n container.replaceChildren();\n\n const context = new Context(Context.root);\n const fiber = range('fragment', container, null, context);\n\n try {\n pass(() => {\n const appearanceContext = appearanceRoot();\n reconcile(fiber, node, context, undefined, appearanceContext ? { context: appearanceContext, entries: [] } : undefined);\n });\n } catch (error) {\n unmountFiber(fiber);\n context.pop();\n throw error;\n }\n\n let active = true;\n const unmount = () => {\n if (!active) return;\n active = false;\n unmountFiber(fiber);\n context.pop();\n roots.delete(container);\n };\n\n roots.set(container, unmount);\n return unmount;\n}\n\nfunction pass<T>(work: () => T): T {\n depth++;\n\n try {\n return work();\n } finally {\n if (!--depth) {\n settle();\n focus();\n }\n }\n}\n\nfunction focus() {\n for (const element of focusing.splice(0))\n if (element.isConnected) (element as HTMLElement).focus();\n}\n\nfunction attempt(fiber: Fiber, passive: boolean, render: () => RenderNode): true | PromiseLike<unknown> | void {\n const previous = passiveRender;\n const scope = fiber.scope!;\n const probed = scope.probed;\n const empty = !fiber.children.length;\n\n scope.probed = undefined;\n passiveRender ||= passive;\n\n if (passive && !depth && empty && !fiber.stash)\n fiber.staging ||= fragment();\n\n const run = () => pass(() => {\n try {\n const output = probed ? probed.output as RenderNode : consume(fiber, render);\n reconcile(fiber, output, scope.context, fiber.boundary, renderedAppearance(fiber));\n\n if (fiber.staging) {\n fiber.end.parentNode!.insertBefore(fiber.staging, fiber.end);\n attach(fiber.staging);\n fiber.staging = undefined;\n }\n\n if (!fiber.recovering) unwait(fiber);\n fiber.retried = undefined;\n return true;\n } catch (thrown) {\n return suspend(fiber, thrown, passive, empty);\n }\n });\n\n try {\n return passive ? batched(run) : run();\n } finally {\n passiveRender = previous;\n }\n}\n\nexport { attempt, depth, focusing, pass, passiveRender, render };\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["style","macro","Fragment"],"sources":["../src/style/css.ts","../src/style/protocol.ts","../src/style/appearance.ts","../src/style/declarations.ts","../src/style/stylesheet.ts","../src/render/commits.ts","../src/render/fiber.ts","../src/render/collection.ts","../src/node/loader.ts","../src/style/claim.ts","../src/render/style.ts","../src/render/element.ts","../src/render/portal.ts","../src/render/reconcile.ts","../src/render/suspense.ts","../src/render/component.ts","../src/render/mount.ts","../src/render/render.ts"],"sourcesContent":["import type { macro, style } from './stylesheet';\n\nconst unitless = new Map<string, boolean>();\n\nlet probe: CSSStyleDeclaration | undefined;\n\n/**\n * Does the CSSOM accept a bare number for this property? Probed once with a\n * canonical value; the answer is a property of CSS, not of the value.\n */\nfunction bare(property: string) {\n let known = unitless.get(property);\n\n if (known === undefined) {\n probe ||= document.createElement('div').style;\n (probe as any)[property] = '';\n (probe as any)[property] = 1;\n unitless.set(property, known = Boolean((probe as any)[property]));\n }\n\n return known;\n}\n\nfunction sized(property: string, value: unknown): unknown {\n if (Array.isArray(value))\n return value.map((entry) => sized(property, entry));\n\n return typeof value == 'number' && value !== 0 && !bare(property)\n ? `${value}px`\n : value;\n}\n\n/**\n * Web macro pack. Register with `macro(css)` to opt into pixel units for\n * numbers and the axis shorthands CSS itself does not provide.\n */\nconst css = {\n '*': (value: unknown, key: string) => ({ [key]: sized(key, value) }),\n mx: (value: style.Value) => ({ marginLeft: value, marginRight: value }),\n my: (value: style.Value) => ({ marginTop: value, marginBottom: value }),\n px: (value: style.Value) => ({ paddingLeft: value, paddingRight: value }),\n py: (value: style.Value) => ({ paddingTop: value, paddingBottom: value }),\n size: (value: style.Value) =>\n Array.isArray(value)\n ? { width: value[0], height: value[1] }\n : { width: value, height: value }\n} satisfies macro.Map;\n\ndeclare module '@expressive/dom' {\n namespace macro {\n interface Registry {\n mx(value: style.Value): style.Map;\n my(value: style.Value): style.Map;\n px(value: style.Value): style.Map;\n py(value: style.Value): style.Map;\n size(value: style.Value): style.Map;\n }\n }\n}\n\nexport { css };\n","type Declaration = Record<string, unknown>;\n\ninterface Block {\n declarations: Declaration;\n name: string;\n ordinal: number;\n}\n\ninterface ResolvedAppearance {\n blocks?: Block[];\n classes?: string[];\n context?: AppearanceContext;\n declarations?: Declaration;\n}\n\ninterface AppearanceContext {\n readonly scope?: unknown;\n readonly base?: object;\n resolve(\n props: Record<string, unknown>,\n tag?: string\n ): ResolvedAppearance | undefined;\n}\n\ntype EnterAppearance = (parent?: AppearanceContext, key?: string) => AppearanceContext | undefined;\ntype Emit = (block: Block, depth: number, document: Document) => string;\n\nconst SUBCOMPONENT = /^_[A-Z]/;\nconst registrations = new WeakMap<object, EnterAppearance>();\nconst tokens = new WeakMap<object, ResolvedAppearance>();\nlet root: (() => AppearanceContext | undefined) | undefined;\nlet emitter: Emit | undefined;\nlet rendered = false;\n\nfunction registerAppearance(type: object, enter: EnterAppearance) {\n registrations.set(type, enter);\n}\n\nfunction registerAppearanceRoot(factory: () => AppearanceContext | undefined) {\n root = factory;\n}\n\nfunction registerEmitter(emit: Emit) {\n emitter = emit;\n}\n\nfunction emitClass(block: Block, depth: number, document: Document) {\n return emitter!(block, depth, document);\n}\n\nfunction appearanceRoot() {\n rendered = true;\n return root?.();\n}\n\n/** Has anything rendered yet - global registration is closed after it has. */\nfunction appearanceSealed() {\n return rendered;\n}\n\nfunction enterAppearance(parent: AppearanceContext | undefined, type: Function, key?: string) {\n const chain: EnterAppearance[] = [];\n let current: object | null = type;\n\n while (current && current !== Function.prototype) {\n const enter = registrations.get(current);\n if (enter) chain.unshift(enter);\n current = Object.getPrototypeOf(current);\n }\n\n for (const enter of chain) parent = enter(parent, key);\n return parent;\n}\n\nfunction reserved(key: string) {\n if (SUBCOMPONENT.test(key))\n throw new Error(`\"${key}\" is reserved for subcomponents in style() maps.`);\n}\n\nfunction createAppearanceToken(appearance: ResolvedAppearance) {\n const token = {};\n tokens.set(token, appearance);\n return token;\n}\n\nfunction appearanceToken(value: unknown) {\n return value && typeof value == 'object' ? tokens.get(value) : undefined;\n}\n\nexport {\n appearanceRoot,\n appearanceSealed,\n appearanceToken,\n createAppearanceToken,\n emitClass,\n enterAppearance,\n registerAppearance,\n registerAppearanceRoot,\n registerEmitter,\n reserved,\n SUBCOMPONENT\n};\n\nexport type { AppearanceContext, Block, Declaration, ResolvedAppearance };\n","import { appearanceSealed, createAppearanceToken, registerAppearance, registerAppearanceRoot, SUBCOMPONENT } from './protocol';\nimport type { AppearanceContext, Block, Declaration, ResolvedAppearance } from './protocol';\n\ntype StyleMap = Record<string, unknown>;\n\ninterface Styles {\n own: StyleMap[];\n subs: Record<string, StyleMap[]>;\n}\n\ntype Macro = (value: unknown, key: string) => unknown;\ntype Depths = ReadonlyMap<string, number>;\n\ninterface Expansion {\n block?: Block;\n classes: string[];\n declarations: Declaration;\n nested: StyleMap[];\n}\n\ninterface StyleScope {\n children: WeakMap<object, StyleScope>;\n expansions: Map<string, Expansion>;\n label: string;\n labels: Record<string, string>;\n names: readonly string[];\n own: Declaration;\n routes: Map<string, AppearanceRoute>;\n rules: StyleMap;\n}\n\ninterface AppearanceRoute {\n flags: readonly string[];\n scope: StyleScope;\n tag?: string;\n}\n\nconst bases = new WeakMap<StyleScope, Declaration>();\nconst chains = new WeakMap<StyleScope, Map<string, Macro[]>>();\nconst contexts = new WeakMap<StyleScope, AppearanceContext>();\nconst rootScopes = new WeakMap<object, StyleScope>();\nconst STYLES = Symbol('@expressive/dom.styles');\nconst entered = new WeakSet<object>();\nconst globals: StyleMap[] = [];\nlet globalContext: AppearanceContext | undefined;\n\nfunction createStyleScope(parent: StyleScope | undefined, value: unknown, label?: string, defines?: boolean): StyleScope | undefined {\n if (!isObject(value)) return parent;\n\n const cache = parent?.children || rootScopes;\n const cached = cache.get(value);\n if (cached) return cached;\n\n const own: string[] = [];\n const source: StyleMap = {};\n const base: Declaration = {};\n\n for (const key of Object.keys(value)) {\n const entry = (value as StyleMap)[key];\n\n if (key[0] == '$')\n throw new Error(`Reserved key \"${key}\" in style map.`);\n\n if (SUBCOMPONENT.test(key))\n throw new Error(`Subcomponent \"${key}\" must be at the top of a style() map.`);\n\n if (key[0] == '_') {\n if (!isObject(entry))\n throw new Error(`Rule \"${key}\" must be an object. Macros are defined by macro().`);\n\n const name = key.slice(1);\n own.push(name);\n source[name] = entry;\n } else if (defines && typeof entry == 'function') {\n own.push(key);\n source[key] = entry;\n } else base[key] = entry;\n }\n\n const names = parent\n ? [...parent.names, ...own.filter((name) => !parent.names.includes(name))]\n : own;\n const rules = Object.create(parent?.rules || null) as StyleMap;\n const labels = Object.create(parent?.labels || null) as Record<string, string>;\n const scopeLabel = label || parent?.label || 'style';\n\n for (const name of own) {\n const rule = source[name];\n const inherited = parent?.rules[name];\n rules[name] = isObject(inherited) && isObject(rule) ? { ...inherited, ...rule } : rule;\n labels[name] = scopeLabel;\n }\n\n const scope: StyleScope = {\n children: new WeakMap(),\n expansions: new Map(),\n label: scopeLabel,\n labels,\n names,\n own: base,\n routes: new Map(),\n rules\n };\n\n cache.set(value, scope);\n return scope;\n}\n\nfunction createContext(scope: StyleScope): AppearanceContext {\n const cached = contexts.get(scope);\n if (cached) return cached;\n\n const context: AppearanceContext = {\n scope,\n base: baseToken(scope),\n resolve(props, tag) {\n return resolveAppearance(scope, props, tag);\n }\n };\n\n contexts.set(scope, context);\n return context;\n}\n\nfunction extendContext(parent: AppearanceContext | undefined, maps: readonly StyleMap[], label: string, defines?: boolean) {\n let scope = parent?.scope as StyleScope | undefined;\n const base: Declaration = { ...(scope && bases.get(scope)) };\n\n for (const map of maps) {\n scope = createStyleScope(scope, map, label, defines);\n Object.assign(base, scope!.own);\n }\n\n if (Object.keys(base).length) bases.set(scope!, base);\n\n return createContext(scope!);\n}\n\nfunction baseToken(scope: StyleScope) {\n const base = bases.get(scope);\n if (!base) return undefined;\n\n const expansion = expand(scope, base, new Map());\n const appearance: ResolvedAppearance = {};\n\n if (Object.keys(expansion.declarations).length)\n appearance.blocks = [{ declarations: expansion.declarations, name: scope.label, ordinal: -1 }];\n\n if (expansion.classes.length) appearance.classes = expansion.classes;\n\n return createAppearanceToken(appearance);\n}\n\nfunction style<T extends object>(type: T, rules: StyleMap): T {\n if (entered.has(type)) throw new Error('Cannot add styles after a component has rendered.');\n\n if (!Object.hasOwn(type, STYLES)) {\n const label = (type as { displayName?: string }).displayName || (type as Function).name;\n\n Object.defineProperty(type, STYLES, { configurable: true, value: { own: [], subs: {} } });\n registerAppearance(type, (parent, key) => {\n const { own, subs } = (type as any)[STYLES] as Styles;\n entered.add(type);\n\n if (!key) return extendContext(parent, own, label);\n\n return subs[key] ? extendContext(parent, subs[key], `${label}_${key}`) : parent;\n });\n }\n\n const { own, subs } = (type as any)[STYLES] as Styles;\n const rest: StyleMap = {};\n\n for (const key of Object.keys(rules))\n if (SUBCOMPONENT.test(key)) {\n if (!isObject(rules[key]))\n throw new Error(`Subcomponent \"${key}\" must be an object.`);\n\n (subs[key.slice(1)] ||= []).push(rules[key] as StyleMap);\n } else rest[key] = rules[key];\n\n own.push(rest);\n return type;\n}\n\nfunction macro(rules: StyleMap): StyleMap {\n for (const key of Object.keys(rules))\n if (key[0] != '_' && key[0] != '$' && typeof rules[key] != 'function')\n throw new Error(`Macro \"${key}\" must be a function. Use \"_${key}\" to register a rule.`);\n\n if (appearanceSealed())\n throw new Error('Cannot add macros after rendering has started.');\n\n globals.push(rules);\n globalContext = undefined;\n registerAppearanceRoot(() => globalContext ||= extendContext(undefined, globals, 'global', true));\n return rules;\n}\n\nfunction createAppearanceRoute(\n scope: StyleScope | undefined,\n props: Record<string, unknown>,\n tag?: string\n): AppearanceRoute | undefined {\n if (!scope) return undefined;\n\n const keys = Object.keys(props).filter((key) => key.startsWith('_')).sort();\n const id = `${tag || ''}\\0${keys.join('\\0')}`;\n const cached = scope.routes.get(id);\n if (cached) return cached;\n\n const present = new Set(keys.map((key) => key.slice(1)));\n const flags: string[] = [];\n\n for (const name of scope.names) {\n if (!present.has(name) || name == tag) continue;\n if (isObject(scope.rules[name])) flags.push(name);\n }\n\n const route: AppearanceRoute = {\n flags,\n scope,\n tag: tag && isObject(scope.rules[tag]) ? tag : undefined\n };\n\n scope.routes.set(id, route);\n return route;\n}\n\nfunction resolveAppearance(\n scope: StyleScope | undefined,\n props: Record<string, unknown>,\n tag?: string\n): ResolvedAppearance | undefined {\n const route = createAppearanceRoute(scope, props, tag);\n\n if (!route) return undefined;\n\n const parts: Expansion[] = [];\n const names: string[] = route.tag ? [route.tag] : [];\n\n for (const name of route.flags)\n if (props[`_${name}`]) names.push(name);\n\n for (const name of names)\n parts.push(expandRule(route.scope, name));\n\n const blocks = parts.flatMap((part) => part.block ? [part.block] : []);\n const classes = parts.flatMap((part) => part.classes);\n let child: StyleScope | undefined = route.scope;\n\n for (const part of parts)\n for (const nested of part.nested)\n child = createStyleScope(child, nested, tag ? `${route.scope.label}_${tag}` : route.scope.label);\n\n if (!blocks.length && !classes.length && child === route.scope)\n return undefined;\n\n const appearance: ResolvedAppearance = {};\n if (blocks.length) appearance.blocks = blocks;\n if (classes.length) appearance.classes = classes;\n if (child !== route.scope) appearance.context = createContext(child!);\n\n return appearance;\n}\n\nfunction expandRule(scope: StyleScope, name: string) {\n let expansion = scope.expansions.get(name);\n\n if (!expansion) {\n expansion = expand(scope, scope.rules[name], new Map());\n\n if (Object.keys(expansion.declarations).length)\n expansion.block = {\n declarations: expansion.declarations,\n name: `${scope.labels[name]}_${name}`,\n ordinal: scope.names.indexOf(name)\n };\n\n scope.expansions.set(name, expansion);\n }\n\n return expansion;\n}\n\nfunction handlers(scope: StyleScope, name: string) {\n let known = chains.get(scope);\n if (!known) chains.set(scope, (known = new Map()));\n\n let chain = known.get(name);\n\n if (!chain) {\n chain = [];\n\n for (const key of [name, '*'])\n for (let rules: object | null = scope.rules; rules; rules = Object.getPrototypeOf(rules)) {\n const own = Object.getOwnPropertyDescriptor(rules, key);\n if (own && typeof own.value == 'function') chain.push(own.value as Macro);\n }\n\n known.set(name, chain);\n }\n\n return chain;\n}\n\nfunction expand(scope: StyleScope, value: unknown, depths: Depths): Expansion {\n const output: Expansion = { classes: [], declarations: {}, nested: [] };\n const nested: StyleMap = {};\n\n function walk(value: unknown, depths: Depths) {\n if (!value) return;\n\n if (typeof value == 'string') {\n output.classes.push(...value.split(/\\s+/).filter(Boolean));\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((entry) => walk(entry, depths));\n return;\n }\n\n for (const [name, entry] of Object.entries(value as Declaration)) {\n if (name[0] == '_') {\n if (isObject(entry)) nested[name] = entry;\n continue;\n }\n\n const chain = handlers(scope, name);\n const depth = depths.get(name) || 0;\n\n if (depth < chain.length) {\n if (isPresent(entry))\n walk(\n chain[depth](entry === true ? undefined : entry, name),\n new Map(depths).set(name, depth + 1)\n );\n } else output.declarations[name] = terminal(name, entry);\n }\n }\n\n walk(value, depths);\n if (Object.keys(nested).length) output.nested.push(nested);\n return output;\n}\n\nfunction terminal(name: string, value: unknown) {\n if (Array.isArray(value)) return value.join(' ');\n\n if (typeof value == 'function' || isObject(value))\n throw new Error(`No macro handles \"${name}\".`);\n\n return typeof value == 'number' ? String(value) : value;\n}\n\nfunction isPresent(value: unknown) {\n return value !== false && value !== null && value !== undefined;\n}\n\nfunction isObject(value: unknown): value is Declaration {\n return !!value && typeof value == 'object' && !Array.isArray(value);\n}\n\nexport { createAppearanceRoute, createStyleScope, macro, resolveAppearance, style };\nexport type { AppearanceRoute, StyleMap, StyleScope };\n","type Declaration = Record<string, unknown>;\n\nfunction applyDeclarations(style: CSSStyleDeclaration, declarations: Declaration, previous: Declaration = {}) {\n const target = style as any;\n\n for (const key of Object.keys({ ...previous, ...declarations })) {\n const value = declarations[key];\n if (key.startsWith('--')) {\n style.setProperty(key, value == null ? '' : String(value));\n continue;\n }\n\n if (typeof value == 'number') target[key] = '';\n target[key] = value == null ? '' : value;\n if (typeof value == 'number' && value !== 0 && !target[key]) target[key] = `${value}px`;\n }\n}\n\nexport { applyDeclarations };\nexport type { Declaration };\n","import * as appearance from './appearance';\nimport { registerEmitter } from './protocol';\nimport type { Block } from './protocol';\nimport { applyDeclarations } from './declarations';\nimport type { Declaration } from './declarations';\n\ntype Member = Extract<keyof CSSStyleDeclaration, string>;\n\ntype Settable = {\n [K in Member]-?: CSSStyleDeclaration[K] extends Function ? never : K;\n}[Member];\n\ntype Key =\n | style.Property\n | keyof macro.Registry\n | `--${string}`\n | `_${string}`;\n\ntype Argument<K extends keyof macro.Registry> =\n macro.Registry[K] extends (value: infer A, ...rest: any[]) => any ? A : never;\n\ndeclare namespace macro {\n /**\n * Macros visible to a style map. A pack augments this interface to declare\n * what it registers with `macro()`.\n */\n interface Registry {}\n\n /** Maps one argument to style, or to keys which resolve further. */\n type Fn = (value: any, key: string) => unknown;\n\n /**\n * Body of a `macro()` map. A name declared in {@link Registry} must match its\n * declaration; an undeclared one is accepted, and becomes checkable at call\n * sites once a module augments `Registry` with it.\n */\n type Map =\n & Partial<Registry>\n & { [K in `_${string}`]?: style.Map }\n & Record<string, Fn | style.Map | undefined>;\n}\n\ndeclare namespace style {\n /** CSS property names, minus the CSSOM's own members. */\n type Property = Exclude<Settable, 'length' | 'parentRule' | 'cssText'>;\n\n /** What a declaration or macro argument may be; never a plain object. */\n type Value =\n | string\n | number\n | boolean\n | null\n | undefined\n | readonly Value[];\n\n /**\n * Body of a `style()` map. Bare keys are declarations or macro calls,\n * `_name` opens a rule or descendant scope, and `$name` is reserved.\n */\n type Map = {\n [K in Key]?:\n K extends `_${string}` ? Map :\n K extends keyof macro.Registry ? Argument<K> :\n Value;\n };\n}\n\ninterface Sheet {\n element: HTMLStyleElement;\n emitted: WeakMap<Block, Map<number, string>>;\n names: Map<string, string>;\n positions: [number, number][];\n}\n\nconst sheets = new WeakMap<Document, Sheet>();\n\nfunction style<T extends object>(type: T, rules: style.Map): T {\n appearance.style(type, rules);\n registerEmitter(emit);\n return type;\n}\n\nfunction macro(rules: macro.Map): macro.Map {\n appearance.macro(rules);\n registerEmitter(emit);\n return rules;\n}\n\nfunction emit(block: Block, depth: number, document: Document) {\n let sheet = sheets.get(document);\n\n if (!sheet?.element.sheet) {\n const element = document.createElement('style');\n element.dataset.expressive = 'dom';\n document.head.append(element);\n sheet = { element, emitted: new WeakMap(), names: new Map(), positions: [] };\n sheets.set(document, sheet);\n }\n\n let byDepth = sheet.emitted.get(block);\n if (!byDepth) sheet.emitted.set(block, (byDepth = new Map()));\n\n const cached = byDepth.get(depth);\n if (cached) return cached;\n\n const css = serialize(document, block.declarations);\n const base = (depth ? `${block.name}-d${depth}` : block.name).replace(/[^\\w-]/g, '_');\n let name = base;\n\n for (let index = 2; sheet.names.has(name) && sheet.names.get(name) !== css; index++)\n name = `${base}-${index}`;\n\n if (!sheet.names.has(name)) {\n const { positions } = sheet;\n let at = positions.findIndex(([d, o]) => d > depth || d == depth && o > block.ordinal);\n if (at < 0) at = positions.length;\n\n sheet.names.set(name, css);\n positions.splice(at, 0, [depth, block.ordinal]);\n sheet.element.sheet!.insertRule(`.${name}{${css}}`, at);\n }\n\n byDepth.set(depth, name);\n return name;\n}\n\nfunction serialize(document: Document, declarations: Declaration) {\n const value = document.createElement('div').style as any;\n applyDeclarations(value, declarations);\n return value.cssText;\n}\n\nexport { macro, style };\n","interface Placed {\n start: Node;\n dead?: boolean;\n}\n\ntype Entry = [Placed, () => unknown];\n\nconst DETACHED = new WeakMap<Node, Entry[]>();\n\nlet batch: Entry[] | undefined;\n\n/** Run `run` once `fiber` is on the page: now, after the current batch, or when its detached root attaches. */\nfunction inserted(fiber: Placed, run: () => unknown) {\n enqueue([fiber, run]);\n}\n\n/** A fragment whose commits wait until it attaches. */\nfunction fragment() {\n const root = document.createDocumentFragment();\n\n DETACHED.set(root, []);\n return root;\n}\n\nfunction attach(root: Node) {\n const held = DETACHED.get(root);\n\n DETACHED.delete(root);\n held?.forEach(enqueue);\n}\n\n/** Defer commits made during `work` until it returns or throws. */\nfunction batched<T>(work: () => T): T {\n if (batch) return work();\n\n const entries: Entry[] = (batch = []);\n\n try {\n return work();\n } finally {\n batch = undefined;\n entries.forEach(deliver);\n }\n}\n\nfunction enqueue(entry: Entry) {\n if (batch) batch.push(entry);\n else deliver(entry);\n}\n\nfunction deliver(entry: Entry) {\n const [fiber, run] = entry;\n const held = DETACHED.get(fiber.start.getRootNode());\n\n if (held) held.push(entry);\n else if (!fiber.dead) run();\n}\n\nexport { attach, batched, fragment, inserted };\n","import { Component, Context } from '@expressive/mvc';\n\nimport type { Key, Node as RenderNode } from '../node/vnode';\nimport type { Appearance, Claim } from '../style/claim';\nimport type { Scope } from './adapter';\n\ntype Container = Element | DocumentFragment;\n\ntype Kind = 'collection' | 'component' | 'element' | 'fragment' | 'function' | 'portal' | 'text';\n\ninterface Boundary {\n catch?: (error: Error) => Promise<void> | void;\n fallback: () => RenderNode;\n owner?: Fiber;\n parent?: Boundary;\n waiting?: Set<Fiber>;\n}\n\ntype Placement = Pick<Component, 'fallback' | 'catch'>;\n\ninterface Fiber {\n kind: Kind;\n key?: Key;\n type?: unknown;\n value?: unknown;\n source?: unknown;\n props?: Record<string, any>;\n context: Context;\n boundary?: Boundary;\n ownBoundary?: Boundary;\n start: globalThis.Node;\n end: globalThis.Node;\n children: Fiber[];\n scope?: Scope;\n cleanup?: (() => void) | void;\n release?: () => void;\n childContext?: Context;\n instance?: Component;\n owned?: boolean;\n events?: Map<string, EventListener>;\n portalStart?: globalThis.Node;\n portalEnd?: globalThis.Node;\n portalContainer?: Container;\n suspended?: Set<() => void>;\n applied?: boolean;\n retried?: boolean;\n portals?: [Fiber, DocumentFragment][];\n dead?: boolean;\n waitingOn?: Boundary;\n recovering?: object;\n stash?: DocumentFragment;\n placeholder?: Fiber;\n staging?: DocumentFragment;\n render?: () => RenderNode;\n appearance?: Appearance;\n consumed?: boolean;\n claimed?: Claim;\n}\n\nfunction range(kind: Kind, parent: globalThis.Node, before: globalThis.Node | null, context: Context): Fiber {\n const start = document.createComment(kind);\n const end = document.createComment(`/${kind}`);\n\n parent.insertBefore(start, before);\n parent.insertBefore(end, before);\n\n return { kind, context, start, end, children: [] };\n}\n\nfunction makeScope(context: Context, update: (passive: boolean) => void): Scope {\n return {\n active: true,\n context,\n subscriptions: [],\n update\n };\n}\n\nfunction moveRange(start: globalThis.Node, end: globalThis.Node, target: globalThis.Node) {\n let node: globalThis.Node | null = start;\n\n while (node) {\n const next: globalThis.Node | null = node.nextSibling;\n target.appendChild(node);\n if (node === end) break;\n node = next;\n }\n}\n\nfunction move(fiber: Fiber, parent: globalThis.Node, before: globalThis.Node | null) {\n if (fiber.start.parentNode === parent && fiber.end.nextSibling === before) return;\n\n let node: globalThis.Node | null = fiber.start;\n while (node) {\n const next: globalThis.Node | null = node.nextSibling;\n parent.insertBefore(node, before);\n if (node === fiber.end) break;\n node = next;\n }\n}\n\nfunction removeRange(start: globalThis.Node, end: globalThis.Node) {\n let node = start;\n\n while (true) {\n const next = node.nextSibling;\n (node as ChildNode).remove();\n if (node === end) break;\n node = next!;\n }\n}\n\nexport { makeScope, move, moveRange, range, removeRange };\nexport type { Boundary, Container, Fiber, Placement };\n","import { Context, has, map } from '@expressive/mvc';\nimport { watch } from '@expressive/mvc/observable';\n\nimport type { Node as VNode } from '../node/vnode';\nimport type { Appearance } from '../style/claim';\nimport { makeScope, range } from './fiber';\nimport type { Boundary, Fiber } from './fiber';\nimport { complete } from './mount';\nimport { attempt, passiveRender } from './render';\nimport { schedule, transition } from './scheduler';\n\nfunction mountCollection(value: has.List<unknown> | has.Pool<unknown> | map.Managed<unknown, unknown>, parent: globalThis.Node, before: globalThis.Node | null, context: Context, boundary?: Boundary, appearance?: Appearance) {\n const fiber = range('collection', parent, before, context);\n fiber.source = value;\n fiber.value = value;\n fiber.boundary = boundary;\n fiber.appearance = appearance;\n fiber.scope = makeScope(context, (passive) => runCollection(fiber, passive));\n\n let first = true;\n fiber.release = watch(value, (current) => {\n fiber.value = current;\n if (!first && fiber.scope?.active) schedule(fiber.scope);\n first = false;\n }, undefined, transition);\n\n return complete(fiber, () => {\n runCollection(fiber, passiveRender);\n });\n}\n\nfunction runCollection(fiber: Fiber, passive: boolean) {\n attempt(fiber, passive, () => {\n return (fiber.value as has.List<VNode>).render();\n });\n}\n\nfunction patchCollection(fiber: Fiber, appearance?: Appearance) {\n if (fiber.appearance === appearance) return;\n\n fiber.appearance = appearance;\n runCollection(fiber, passiveRender);\n}\n\nfunction isCollection(value: unknown): value is has.List<unknown> | has.Pool<unknown> | map.Managed<unknown, unknown> {\n return value instanceof has.List || value instanceof has.Pool || value instanceof map.Managed;\n}\n\nexport { isCollection, mountCollection, patchCollection };\n","import type { JSX } from '../jsx-runtime';\nimport type { ComponentType, Node } from './vnode';\nimport { vnode } from './vnode';\n\ntype Module<T extends ComponentType = ComponentType> = T | { default: T };\n\ntype Attributes<T> = [T] extends [never] ? {}\n : T extends abstract new (...args: any[]) => infer I\n ? JSX.LibraryManagedAttributes<T, I>\n : T extends (props: infer P) => any ? P : never;\n\ninterface Load {\n pending: PromiseLike<void>;\n resolved?: ComponentType;\n failed?: { error: unknown };\n}\n\nconst LOADS = new WeakMap<Function, Load>();\n\nfunction resolve(type: Function, props: object, run: () => unknown): Node {\n const load = LOADS.get(type);\n\n if (load?.resolved) return vnode(load.resolved, props);\n\n if (load?.failed) {\n LOADS.delete(type);\n throw load.failed.error;\n }\n\n if (load) throw load.pending;\n\n const output = run();\n\n if (!output || typeof (output as PromiseLike<unknown>).then != 'function') return output as Node;\n\n const next = {} as Load;\n\n LOADS.set(type, next);\n\n throw next.pending = (output as PromiseLike<Module | undefined>).then(\n (module) => {\n const component = typeof module == 'function' ? module : module?.default;\n\n if (typeof component == 'function') next.resolved = component;\n else next.failed = { error: new Error('Loader resolved no component.') };\n },\n (error) => {\n next.failed = { error };\n }\n );\n}\n\nexport { resolve };\nexport type { Attributes, Module };\n","import { applyDeclarations } from './declarations';\nimport { appearanceToken, createAppearanceToken, emitClass, reserved } from './protocol';\nimport type { AppearanceContext, ResolvedAppearance } from './protocol';\n\ntype Style = string | Record<string, unknown> | false | null | undefined | readonly Style[];\n\ninterface Appearance {\n context?: AppearanceContext;\n entries: Forwarded[];\n}\n\ninterface Forwarded {\n hops: number;\n style: Style;\n}\n\ninterface Carried {\n appearance: ResolvedAppearance;\n doors: number;\n}\n\ninterface Collected {\n classes: string[];\n declarations: Record<string, unknown>;\n tokens: Carried[];\n}\n\ninterface Claim {\n className: string;\n context?: AppearanceContext;\n declarations: Record<string, unknown>;\n}\n\ninterface Ticket {\n classes: string[];\n tokens: Carried[];\n}\n\nconst tickets = new WeakMap<object, Ticket>();\n\nfunction componentProps(\n type: unknown,\n props: Record<string, any>,\n appearance: Appearance | undefined\n) {\n const context = appearance?.context;\n\n for (const key of Object.keys(props)) reserved(key);\n\n if (!context || typeof type != 'function') return { appearance, props };\n\n const value = context.resolve(props);\n const entries = appearance!.entries;\n\n if (!value) return { appearance: { entries }, props };\n\n return {\n appearance: {\n context: value.context,\n entries\n },\n props: { ...props, style: [createAppearanceToken(value), props.style] }\n };\n}\n\nfunction door(value: Style) {\n const collected: Collected = { classes: [], declarations: {}, tokens: [] };\n const { classes, declarations, tokens } = collected;\n\n collect(value, collected, 1);\n\n if (!classes.length && !tokens.length && !Object.keys(declarations).length) return undefined;\n\n const key = Object.freeze({});\n\n tickets.set(key, { classes, tokens });\n return Object.freeze({ ...declarations, [Symbol('style')]: key });\n}\n\nfunction claim(\n element: Element,\n appearance: Appearance | undefined,\n resolved: ResolvedAppearance | undefined,\n className: unknown,\n value: Style\n): Claim {\n const collected: Collected = { classes: [], declarations: {}, tokens: [] };\n const entries = appearance?.entries || [];\n let context = appearance?.context;\n let reach = -1;\n\n if (resolved) collect(createAppearanceToken(resolved), collected, 0);\n appendClasses(collected.classes, className);\n collect(value, collected, 0);\n\n for (let index = entries.length - 1; index >= 0; index--)\n collect(entries[index].style, collected, entries[index].hops);\n\n for (const { appearance, doors } of collected.tokens) {\n for (const block of appearance.blocks || [])\n collected.classes.push(emitClass(block, doors, element.ownerDocument));\n if (appearance.classes) collected.classes.push(...appearance.classes);\n if (appearance.context && doors >= reach) {\n context = appearance.context;\n reach = doors;\n }\n }\n\n return {\n className: [...new Set(collected.classes)].join(' '),\n context,\n declarations: collected.declarations\n };\n}\n\nfunction applyClaim(element: Element, before: Claim | undefined, after: Claim) {\n const previous = before || { className: '', declarations: {} };\n\n if (previous.className !== after.className) {\n if (after.className) element.setAttribute('class', after.className);\n else element.removeAttribute('class');\n }\n\n applyDeclarations((element as HTMLElement).style, after.declarations, previous.declarations);\n}\n\nfunction collect(value: Style, collected: Collected, doors: number) {\n if (!value) return;\n\n const token = appearanceToken(value);\n if (token) {\n collected.tokens.push({ appearance: token, doors });\n Object.assign(collected.declarations, token.declarations);\n return;\n }\n\n if (typeof value == 'string') {\n appendClasses(collected.classes, value);\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((entry) => collect(entry, collected, doors));\n return;\n }\n\n for (const symbol of Object.getOwnPropertySymbols(value)) {\n const ticket = tickets.get((value as Record<symbol, object>)[symbol]);\n if (!ticket) continue;\n\n collected.classes.push(...ticket.classes);\n for (const carried of ticket.tokens)\n collected.tokens.push({ appearance: carried.appearance, doors: carried.doors + doors });\n }\n\n for (const key of Object.keys(value)) collected.declarations[key] = (value as Record<string, unknown>)[key];\n}\n\nfunction appendClasses(classes: string[], value: unknown) {\n if (typeof value == 'string') classes.push(...value.split(/\\s+/).filter(Boolean));\n}\n\nexport { applyClaim, claim, componentProps, door };\nexport type { Appearance, Claim, Style };\n","import type { Node as RenderNode } from '../node/vnode';\nimport { door } from '../style/claim';\nimport type { Appearance, Style } from '../style/claim';\nimport { appearanceRoot, enterAppearance } from '../style/protocol';\nimport { owner } from './adapter';\nimport type { Fiber } from './fiber';\nimport { latest } from './hot';\n\nlet rendering: object | undefined;\n\nlet touched = false;\n\nconst observed = new WeakMap<object, Record<string, any>>();\n\nfunction observe(props: Record<string, any>) {\n if (!('style' in props)) return props;\n\n let output = observed.get(props);\n\n if (!output) {\n const { style } = props;\n let handle: Style;\n let resolved = false;\n\n output = Object.defineProperty({ ...props }, 'style', {\n enumerable: true,\n get() {\n if (rendering === output) touched = true;\n if (!resolved) {\n handle = door(style);\n resolved = true;\n }\n return handle;\n }\n });\n observed.set(props, output);\n }\n\n return output;\n}\n\nfunction consume(fiber: Fiber, render: () => RenderNode) {\n const previous = rendering;\n const read = touched;\n\n rendering = fiber.props;\n touched = false;\n\n try {\n const output = render();\n fiber.consumed = touched;\n return output;\n } finally {\n rendering = previous;\n touched = read;\n }\n}\n\nfunction renderedAppearance(fiber: Fiber): Appearance | undefined {\n if (fiber.kind != 'component' && fiber.kind != 'function') return fiber.appearance;\n\n const style = fiber.props?.style as Style;\n const entries = (fiber.appearance?.entries || []).map(({ hops, style }) => ({ hops: hops + 1, style }));\n const inherited = fiber.appearance?.context || appearanceRoot();\n const sub = owner(fiber.type);\n const context = sub\n ? enterAppearance(inherited, latest(sub.owner.constructor), sub.key)\n : enterAppearance(inherited, latest(fiber.type as Function));\n\n if (context?.base && context !== inherited)\n entries.push({ hops: 0, style: context.base as Style });\n\n if (style && !fiber.consumed && !(fiber.instance && 'style' in fiber.instance)) entries.push({ hops: 0, style });\n\n return entries.length || context ? { context, entries } : undefined;\n}\n\nexport { consume, observe, renderedAppearance };\n","import { Context } from '@expressive/mvc';\n\nimport type { VNode } from '../node/vnode';\nimport { applyClaim, claim } from '../style/claim';\nimport type { Appearance } from '../style/claim';\nimport { reserved } from '../style/protocol';\nimport { inserted } from './commits';\nimport type { Boundary, Fiber } from './fiber';\nimport { complete, unmountFiber } from './mount';\nimport { reconcileChildren } from './reconcile';\nimport { focusing } from './render';\nimport { afterFlush } from './scheduler';\nimport { hostOf } from './suspense';\n\nconst SVG = 'http://www.w3.org/2000/svg';\nconst CONTROLS = ['checked', 'value'];\nconst ENUMERATED = ['contentEditable', 'contenteditable', 'draggable', 'spellcheck'];\nconst ALIASES: Record<string, string> = { autoFocus: 'autofocus', contentEditable: 'contenteditable', htmlFor: 'for' };\nconst controlled = new WeakMap<Element, Fiber>();\nconst restoring = new WeakSet<Document>();\n\nfunction mountElement(value: VNode, parent: globalThis.Node, before: globalThis.Node | null, context: Context, boundary?: Boundary, appearance?: Appearance) {\n const tag = value.type as string;\n const host = hostOf(parent);\n const namespace = tag == 'svg' || host instanceof SVGElement && host.localName != 'foreignObject' ? SVG : undefined;\n const element = namespace\n ? document.createElementNS(SVG, tag)\n : document.createElement(tag);\n const fiber: Fiber = {\n kind: 'element',\n key: value.key,\n type: tag,\n props: {},\n context,\n boundary,\n start: element,\n end: element,\n children: [],\n events: new Map()\n };\n\n parent.insertBefore(element, before);\n complete(fiber, () => {\n patchProps(fiber, value.props, appearance);\n });\n\n if (value.props.autofocus || value.props.autoFocus) focusing.push(element);\n return fiber;\n}\n\nfunction patchProps(fiber: Fiber, next: Record<string, any>, appearance?: Appearance) {\n const element = fiber.start as Element;\n const previous = fiber.props!;\n const raw = 'dangerouslySetInnerHTML' in next;\n const resolved = appearance?.context?.resolve(next, fiber.type as string);\n\n if (raw) {\n for (let index = fiber.children.length - 1; index >= 0; index--)\n unmountFiber(fiber.children[index]);\n fiber.children = [];\n }\n\n for (const key of Object.keys({ ...previous, ...next })) {\n if (key[0] == '_') {\n reserved(key);\n continue;\n }\n\n if (key == 'children' || key == 'className' || key == 'key' || key == 'ref' || key == 'style' || CONTROLS.includes(key)) continue;\n if (previous[key] === next[key]) continue;\n patchProp(fiber, element, key, previous[key], next[key]);\n }\n\n const claimed = claim(element, appearance, resolved, next.className, next.style);\n\n applyClaim(element, fiber.claimed, claimed);\n fiber.claimed = claimed;\n fiber.props = next;\n fiber.appearance = appearance;\n\n if (!raw) {\n reconcileChildren(\n fiber,\n element,\n null,\n next.children,\n fiber.context,\n fiber.boundary,\n claimed.context ? { context: claimed.context, entries: [] } : undefined\n );\n }\n\n for (const key of CONTROLS) {\n const value = next[key];\n const live = (element as any)[key];\n const differs = value == null || !(key in element)\n ? previous[key] !== value\n : key == 'value' ? String(live) !== String(value) : live !== value;\n\n if (differs) patchProp(fiber, element, key, previous[key], value);\n }\n\n if (CONTROLS.some((key) => next[key] != null)) {\n const document = element.ownerDocument;\n\n controlled.set(element, fiber);\n\n if (!restoring.has(document)) {\n restoring.add(document);\n document.addEventListener('input', restoreTarget);\n document.addEventListener('change', restoreTarget);\n }\n }\n\n if (previous.ref !== next.ref) patchProp(fiber, element, 'ref', previous.ref, next.ref);\n}\n\nfunction patchProp(fiber: Fiber, element: Element, key: string, previous: any, next: any) {\n if (key == 'ref') {\n applyRef(previous, null);\n inserted(fiber, () => applyRef(next, element));\n return;\n }\n\n if (key == 'dangerouslySetInnerHTML') {\n element.innerHTML = next?.__html || '';\n return;\n }\n\n if (/^on[A-Z]/.test(key)) {\n const capture = key.endsWith('Capture');\n const lower = (capture ? key.slice(2, -7) : key.slice(2)).toLowerCase();\n const name = lower == 'doubleclick' ? 'dblclick' : lower;\n const id = `${name}:${capture}`;\n const current = fiber.events!.get(id);\n\n if (current) element.removeEventListener(name, current, capture);\n if (typeof next == 'function') {\n fiber.events!.set(id, next);\n element.addEventListener(name, next, capture);\n } else fiber.events!.delete(id);\n return;\n }\n\n const name = ALIASES[key] || key;\n\n if ((key.startsWith('aria-') || key.startsWith('data-') || ENUMERATED.includes(key)) && next != null) {\n element.setAttribute(name, String(next));\n return;\n }\n\n if (next === null || next === undefined || next === false) {\n if (key in element && typeof (element as any)[key] != 'function')\n try {\n const current = (element as any)[key];\n (element as any)[key] = typeof current == 'boolean'\n ? false\n : typeof current == 'number'\n ? 0\n : '';\n } catch {}\n element.removeAttribute(element.namespaceURI === SVG ? name.toLowerCase() : name);\n element.removeAttribute(name);\n return;\n }\n\n if (key in element && (element.namespaceURI !== SVG || settable(element, key)))\n try {\n (element as any)[key] = next;\n return;\n } catch {}\n\n element.setAttribute(name, next === true ? '' : String(next));\n}\n\nfunction restoreTarget(event: Event) {\n const element = event.target as HTMLInputElement;\n const fiber = controlled.get(element);\n\n if (fiber && event.type == settles(fiber.props!, element))\n queueMicrotask(() => afterFlush(() => restore(fiber)));\n}\n\nfunction settles(props: Record<string, any>, element: HTMLInputElement) {\n if (props.onInput) return 'input';\n if (props.onChange) return 'change';\n return element.type == 'checkbox' || element.type == 'radio' || element.localName == 'select' ? 'change' : 'input';\n}\n\nfunction restore(fiber: Fiber) {\n const element = fiber.start as any;\n\n for (const key of CONTROLS) {\n const value = fiber.props![key];\n\n if (value == null || fiber.dead) continue;\n if (key == 'value' ? String(element.value) !== String(value) : element[key] !== value)\n element[key] = value;\n }\n}\n\nfunction settable(element: Element, key: string) {\n let target: object = element;\n let descriptor: PropertyDescriptor | undefined;\n\n while (!(descriptor = Object.getOwnPropertyDescriptor(target, key)))\n target = Object.getPrototypeOf(target);\n\n return !!(descriptor.set || descriptor.writable);\n}\n\nfunction applyRef(ref: unknown, value: Element | null) {\n if (typeof ref == 'function') ref(value);\n else if (ref && typeof ref == 'object' && 'current' in ref) (ref as { current: Element | null }).current = value;\n}\n\nfunction unmountElement(fiber: Fiber) {\n applyRef(fiber.props?.ref, null);\n for (const [id, listener] of fiber.events!) {\n const [name, capture] = id.split(':');\n (fiber.start as Element).removeEventListener(name, listener, capture === 'true');\n }\n}\n\nexport { mountElement, patchProps, unmountElement };\n","import { Context } from '@expressive/mvc';\n\nimport { PORTAL } from '../node/vnode';\nimport type { Node as RenderNode, VNode } from '../node/vnode';\nimport type { Appearance } from '../style/claim';\nimport type { Boundary, Container, Fiber } from './fiber';\nimport { complete } from './mount';\nimport { reconcileChildren } from './reconcile';\n\nfunction mountPortal(value: VNode, parent: globalThis.Node, before: globalThis.Node | null, context: Context, boundary?: Boundary, appearance?: Appearance) {\n const marker = document.createComment('portal');\n const container = target(value.props.into, parent);\n const portalStart = document.createComment('portal-root');\n const portalEnd = document.createComment('/portal-root');\n\n parent.insertBefore(marker, before);\n container.append(portalStart, portalEnd);\n\n const output: Fiber = {\n kind: 'portal',\n key: value.key,\n type: PORTAL,\n props: value.props,\n context,\n boundary,\n appearance,\n start: marker,\n end: marker,\n children: [],\n portalContainer: container,\n portalStart,\n portalEnd\n };\n\n return complete(output, () => {\n reconcilePortal(output, value.props.children, context, boundary, appearance);\n });\n}\n\nfunction target(into: unknown, parent: globalThis.Node): Container {\n if (typeof into != 'string') return into as Container;\n\n const root = parent.getRootNode();\n const found = [...document.querySelectorAll(into)];\n\n if (root instanceof DocumentFragment) found.push(...root.querySelectorAll(into));\n\n if (found.length != 1)\n throw new Error(`Portal target \"${into}\" ${found.length ? 'is ambiguous' : 'was not found'}.`);\n\n return found[0];\n}\n\nfunction reconcilePortal(fiber: Fiber, value: RenderNode, context: Context, boundary?: Boundary, appearance?: Appearance) {\n reconcileChildren(fiber, fiber.portalEnd!.parentNode!, fiber.portalEnd!, value, context, boundary, appearance);\n}\n\nfunction patchPortal(fiber: Fiber, value: VNode, context: Context, appearance?: Appearance) {\n fiber.appearance = appearance;\n fiber.props = value.props;\n reconcilePortal(fiber, value.props.children, context, fiber.boundary, appearance);\n}\n\nfunction unmountPortal(fiber: Fiber) {\n (fiber.portalStart as ChildNode).remove();\n (fiber.portalEnd as ChildNode).remove();\n}\n\nexport { mountPortal, patchPortal, unmountPortal };\n","import { Context, Model } from '@expressive/mvc';\n\nimport { childrenOf, isVNode } from '../node/vnode';\nimport type { Key, Node as RenderNode, VNode } from '../node/vnode';\nimport type { Appearance } from '../style/claim';\nimport { isCollection, patchCollection } from './collection';\nimport { attach } from './commits';\nimport { patchComponent, patchFunction, renderable } from './component';\nimport { patchProps } from './element';\nimport { move } from './fiber';\nimport type { Boundary, Fiber } from './fiber';\nimport { same } from './hot';\nimport { mount, patchFragment, patchText, unmountFiber } from './mount';\nimport { patchPortal } from './portal';\nimport { gather } from './suspense';\n\nfunction reconcile(fiber: Fiber, value: RenderNode, context: Context, boundary?: Boundary, appearance?: Appearance) {\n const detached = fiber.stash || fiber.staging;\n\n if (detached) reconcileChildren(fiber, detached, null, value, context, boundary, appearance);\n else reconcileChildren(fiber, fiber.end.parentNode!, fiber.end, value, context, boundary, appearance);\n}\n\nfunction reconcileChildren(owner: Fiber, parent: globalThis.Node, before: globalThis.Node | null, value: RenderNode, context: Context, boundary?: Boundary, appearance?: Appearance) {\n const values = childrenOf(value);\n const old = owner.children;\n const keyed = new Map<Key, Fiber>();\n const used = new Set<Fiber>();\n const next: Fiber[] = [];\n\n for (const child of old)\n if (child.key !== null && child.key !== undefined) keyed.set(child.key, child);\n\n try {\n for (let index = 0; index < values.length; index++) {\n const value = source(values[index]);\n const key = keyOf(value);\n let child = key !== null && key !== undefined\n ? keyed.get(key)\n : old[index]?.key == null\n ? old[index]\n : undefined;\n\n if (child && used.has(child)) child = undefined;\n if (child) used.add(child);\n\n const fiber = patch(child, value, parent, before, context, boundary, appearance);\n\n if (fiber !== child) used.delete(child!);\n next.push(fiber);\n }\n } catch (error) {\n gather(error, next, old);\n owner.children = [...next, ...old.filter((child) => !child.dead && !next.includes(child))];\n throw error;\n }\n\n for (const child of old)\n if (!used.has(child)) unmountFiber(child);\n\n let anchor = before;\n for (let index = next.length - 1; index >= 0; index--) {\n const child = next[index];\n const root = child.start.getRootNode();\n\n move(child, parent, anchor);\n anchor = child.start;\n if (child.start.getRootNode() !== root) attach(root);\n }\n\n owner.children = next;\n}\n\nfunction patch(old: Fiber | undefined, value: RenderNode, parent: globalThis.Node, before: globalThis.Node | null, context: Context, boundary?: Boundary, appearance?: Appearance): Fiber {\n if (!old || !compatible(old, value)) return mount(value, parent, old?.start || before, context, boundary, appearance);\n\n if (old.ownBoundary) old.ownBoundary.parent = boundary;\n old.boundary = old.ownBoundary || boundary;\n\n if (old.kind == 'collection') patchCollection(old, appearance);\n else if (old.kind == 'text') patchText(old, value);\n else if (old.kind == 'element') patchProps(old, (value as VNode).props, appearance);\n else if (old.kind == 'fragment') patchFragment(old, value as VNode, context, appearance);\n else if (old.kind == 'function') patchFunction(old, value as VNode, appearance);\n else if (old.kind == 'component') patchComponent(old, value, appearance);\n else patchPortal(old, value as VNode, context, appearance);\n\n return old;\n}\n\nfunction compatible(fiber: Fiber, value: RenderNode) {\n if (fiber.kind == 'text') return ['string', 'number', 'bigint'].includes(typeof value);\n if (renderable(value)) return fiber.kind == 'component' && fiber.instance === value;\n if (isCollection(value))\n return fiber.kind == 'collection' && fiber.source === value;\n if (!isVNode(value)) return false;\n if (fiber.key !== value.key || !same(fiber.type, value.type)) return false;\n if (fiber.kind == 'portal') return fiber.props!.into === value.props.into;\n return true;\n}\n\nfunction source(value: RenderNode): RenderNode {\n if (value instanceof Model) return value.is;\n\n while (isCollection(value) && isCollection(Object.getPrototypeOf(value)))\n value = Object.getPrototypeOf(value);\n\n return value;\n}\n\nfunction keyOf(value: RenderNode): Key {\n if (renderable(value)) return value.key;\n return isVNode(value) ? value.key : undefined;\n}\n\nexport { reconcile, reconcileChildren };\n","import { fragment } from './commits';\nimport { move, moveRange, range } from './fiber';\nimport type { Boundary, Fiber } from './fiber';\nimport { unmountFiber } from './mount';\nimport { reconcile } from './reconcile';\nimport { depth, pass } from './render';\nimport { release, schedule, transition } from './scheduler';\n\nconst dirty = new Set<Boundary>();\nconst stashes = new WeakMap<globalThis.Node, Fiber>();\nlet holding: { thrown: unknown; fiber?: Fiber } | undefined;\nlet settling = false;\n\nfunction park(fiber: Fiber) {\n move(fiber, fragment(), null);\n}\n\nfunction hold(fiber: Fiber, error: unknown) {\n if (!holding || error !== holding.thrown) return false;\n\n park(fiber);\n holding.fiber = fiber;\n return true;\n}\n\nfunction gather(error: unknown, next: Fiber[], old: Fiber[]) {\n if (!holding || error !== holding.thrown) return;\n\n for (const fiber of next) if (!old.includes(fiber)) park(fiber);\n if (holding.fiber) next.push(holding.fiber);\n holding.fiber = undefined;\n}\n\nfunction hostOf(parent: globalThis.Node) {\n let host = parent;\n\n for (let owner = stashes.get(host); owner; owner = stashes.get(host))\n host = owner.end.parentNode!;\n\n return host;\n}\n\nfunction wait(fiber: Fiber, boundary: Boundary) {\n if (fiber.waitingOn !== boundary) unwait(fiber);\n\n fiber.waitingOn = boundary;\n (boundary.waiting ||= new Set()).add(fiber);\n dirty.add(boundary);\n}\n\nfunction unwait(fiber: Fiber) {\n const boundary = fiber.waitingOn;\n\n if (!boundary) return;\n\n fiber.waitingOn = undefined;\n boundary.waiting!.delete(fiber);\n if (!boundary.owner!.dead) dirty.add(boundary);\n}\n\nfunction settle() {\n if (settling) return;\n settling = true;\n\n try {\n for (const boundary of dirty) {\n dirty.delete(boundary);\n\n const owner = boundary.owner!;\n const waiting = boundary.waiting!.size > 0;\n\n if (!owner.dead && waiting != !!owner.stash)\n waiting ? hide(owner, boundary) : reveal(owner);\n }\n } finally {\n settling = false;\n }\n}\n\nfunction hide(owner: Fiber, boundary: Boundary) {\n const stash = document.createDocumentFragment();\n\n for (const child of owner.children) move(child, stash, null);\n\n owner.portals = portals(owner, []).map((portal) => {\n const content = document.createDocumentFragment();\n moveRange(portal.portalStart!, portal.portalEnd!, content);\n return [portal, content];\n });\n\n stashes.set(stash, owner);\n\n const context = owner.childContext!;\n const placeholder = range('fragment', owner.end.parentNode!, owner.end, context);\n\n owner.stash = stash;\n owner.placeholder = placeholder;\n reconcile(placeholder, boundary.fallback(), context, boundary.parent);\n}\n\nfunction reveal(owner: Fiber) {\n unmountFiber(owner.placeholder!);\n owner.end.parentNode!.insertBefore(owner.stash!, owner.end);\n\n for (const [portal, content] of owner.portals!)\n if (!portal.dead) portal.portalContainer!.append(content);\n\n owner.portals = undefined;\n owner.placeholder = undefined;\n owner.stash = undefined;\n}\n\nfunction portals(fiber: Fiber, found: Fiber[]) {\n for (const child of fiber.children) {\n if (child.kind == 'portal') found.push(child);\n portals(child, found);\n }\n\n return found;\n}\n\nfunction suspend(fiber: Fiber, thrown: unknown, passive: boolean, empty: boolean) {\n const boundary = fiber.boundary;\n\n if (isThenable(thrown)) {\n if (!boundary) throw thrown;\n if (passive && empty && depth > 1) {\n if (holding?.thrown !== thrown) holding = { thrown };\n throw thrown;\n }\n\n holding = undefined;\n if (!passive) wait(fiber, boundary);\n\n const scope = fiber.scope!;\n let held = scope.holds;\n\n scope.holds = undefined;\n\n const clear = () => {\n fiber.suspended!.delete(clear);\n release(held);\n held = undefined;\n };\n\n (fiber.suspended ||= new Set()).add(clear);\n\n const resume = (retry: () => void) => {\n fiber.suspended!.delete(clear);\n if (!scope.active) return clear();\n if (held) (scope.holds ||= []).push(...held);\n held = undefined;\n retry();\n };\n\n thrown.then(\n () => resume(() => passive ? transition(() => schedule(scope)) : schedule(scope)),\n (error) => resume(() => pass(() => recover(fiber, error, fiber.boundary)))\n );\n return thrown;\n }\n\n recover(fiber, thrown, fiber.boundary);\n}\n\nfunction recover(fiber: Fiber, thrown: unknown, boundary: Boundary | undefined) {\n const error = thrown instanceof Error ? thrown : new Error(String(thrown));\n\n while (boundary && !boundary.catch) boundary = boundary.parent;\n\n if (!boundary) throw error;\n\n const handler = boundary;\n\n const token = {};\n\n wait(fiber, handler);\n fiber.recovering = token;\n\n Promise.resolve(handler.catch!(error)).then(\n () => {\n if (fiber.recovering !== token) return;\n fiber.recovering = undefined;\n if (!fiber.scope!.active || fiber.retried) return;\n fiber.retried = true;\n schedule(fiber.scope!);\n },\n (next) => {\n if (fiber.recovering === token && fiber.scope!.active) pass(() => recover(fiber, next, handler.parent));\n }\n );\n}\n\nfunction isThenable(value: unknown): value is PromiseLike<unknown> {\n return !!value && typeof (value as PromiseLike<unknown>).then == 'function';\n}\n\nexport { gather, hold, hostOf, isThenable, settle, suspend, unwait };\n","import { Component, Context, unbind } from '@expressive/mvc';\nimport { watch } from '@expressive/mvc/observable';\n\nimport { resolve } from '../node/loader';\nimport { isVNode } from '../node/vnode';\nimport type { Key, Node as RenderNode, VNode } from '../node/vnode';\nimport { componentProps } from '../style/claim';\nimport type { Appearance } from '../style/claim';\nimport { call, enter } from './adapter';\nimport { inserted } from './commits';\nimport { makeScope, range } from './fiber';\nimport type { Boundary, Fiber, Placement } from './fiber';\nimport { latest, track, untrack } from './hot';\nimport { complete } from './mount';\nimport { attempt, passiveRender } from './render';\nimport { claim as dequeue, schedule, settle as absorb, transition } from './scheduler';\nimport { consume, observe } from './style';\nimport { isThenable } from './suspense';\n\nfunction mountFunction(value: VNode, parent: globalThis.Node, before: globalThis.Node | null, context: Context, boundary?: Boundary, appearance?: Appearance) {\n const fiber = range('function', parent, before, context);\n const resolved = componentProps(value.type, value.props, appearance);\n fiber.key = value.key;\n fiber.type = value.type;\n fiber.props = observe(resolved.props);\n fiber.boundary = boundary;\n fiber.appearance = resolved.appearance;\n fiber.scope = makeScope(context, (passive) => run(fiber, passive));\n fiber.render = () => enter(fiber.scope!, () => {\n const type = latest(fiber.type as Function);\n return resolve(type, fiber.props!, () => call(type, fiber.props));\n });\n track(fiber.type as Function, fiber.scope);\n probing(fiber);\n\n return complete(fiber, () => {\n run(fiber, passiveRender);\n });\n}\n\nfunction mountOwnedComponent(\n value: VNode,\n parent: globalThis.Node,\n before: globalThis.Node | null,\n context: Context,\n boundary?: Boundary,\n appearance?: Appearance\n) {\n const resolved = componentProps(value.type, value.props, appearance);\n const Type = value.type as new (props: unknown) => Component;\n const props = observe(resolved.props);\n const instance = new Type(props);\n\n return mountComponent(instance, parent, before, context, boundary, resolved.appearance, true, value.key, props);\n}\n\nfunction mountComponent(\n instance: Component,\n parent: globalThis.Node,\n before: globalThis.Node | null,\n context: Context,\n inherited?: Boundary,\n appearance?: Appearance,\n owned = false,\n key?: Key,\n props: Record<string, any> = instance.props\n) {\n const fiber = range('component', parent, before, context);\n const childContext = context.push(instance);\n const element = (owned ? props : {}) as Placement;\n const { fallback } = instance;\n const ownBoundary: Boundary | undefined = fallback !== undefined && fallback !== false || element.catch || instance.catch\n ? {\n catch: element.catch || instance.catch ? (error) => {\n const handler = owned && (fiber.props as Placement).catch;\n return (handler || instance.catch)!.call(instance, error, instance);\n } : undefined,\n fallback: () => instance.fallback,\n owner: fiber,\n parent: inherited\n }\n : inherited;\n\n fiber.boundary = ownBoundary;\n if (ownBoundary !== inherited) fiber.ownBoundary = ownBoundary;\n fiber.childContext = childContext;\n fiber.instance = instance;\n fiber.key = owned ? key : instance.key;\n fiber.type = instance.constructor;\n fiber.props = props;\n fiber.owned = owned;\n fiber.appearance = appearance;\n fiber.scope = makeScope(childContext, (passive) => run(fiber, passive));\n fiber.render = () => enter(fiber.scope!, () => {\n return unbind((fiber.value as Component).render).call(fiber.value, fiber.props);\n });\n probing(fiber);\n\n let first = true;\n let proxy = instance;\n fiber.release = watch(instance, (current, events) => {\n const { applied, scope } = fiber;\n\n proxy = current;\n fiber.applied = undefined;\n\n if (!first && scope!.active) {\n if (applied && events.includes('props')) transition(() => schedule(scope!));\n else schedule(scope!);\n }\n\n first = false;\n }, undefined, transition);\n\n Object.defineProperty(fiber, 'value', { get: () => proxy });\n try {\n complete(fiber, () => {\n run(fiber, passiveRender);\n });\n } finally {\n if (owned && !fiber.dead) inserted(fiber, () => (fiber.cleanup = instance.mount?.()));\n }\n\n return fiber;\n}\n\nfunction run(fiber: Fiber, passive: boolean) {\n const result = attempt(fiber, passive, fiber.render!);\n\n if (result !== true) return result;\n}\n\nfunction probing(fiber: Fiber) {\n const scope = fiber.scope!;\n\n scope.empty = () => !fiber.children.length;\n scope.probe = () => {\n try {\n scope.probed = { output: consume(fiber, fiber.render!) };\n } catch (thrown) {\n if (isThenable(thrown)) return thrown;\n }\n };\n}\n\nfunction patchFunction(fiber: Fiber, value: VNode, appearance?: Appearance) {\n const resolved = componentProps(value.type, value.props, appearance);\n if (fiber.type !== value.type) {\n untrack(fiber.type as Function, fiber.scope!);\n fiber.type = value.type;\n track(fiber.type as Function, fiber.scope!);\n }\n fiber.appearance = resolved.appearance;\n fiber.props = observe(resolved.props);\n rerun(fiber, () => run(fiber, passiveRender));\n}\n\nfunction patchComponent(fiber: Fiber, value: RenderNode, appearance?: Appearance) {\n const resolved = isVNode(value)\n ? componentProps(value.type, value.props, appearance)\n : { appearance, props: fiber.props! };\n fiber.appearance = resolved.appearance;\n const props = isVNode(value) ? observe(resolved.props) : resolved.props;\n if (isVNode(value) && props !== fiber.props) {\n const instance = fiber.instance!;\n if (passiveRender) fiber.applied = true;\n (instance as any).props = props;\n }\n fiber.props = props;\n rerun(fiber, () => run(fiber, passiveRender));\n}\n\nfunction rerun(fiber: Fiber, run: () => void) {\n dequeue(fiber.scope!);\n run();\n absorb(fiber.scope!);\n}\n\nfunction unmountComponent(fiber: Fiber) {\n if (typeof fiber.cleanup == 'function') fiber.cleanup();\n fiber.childContext?.pop();\n if (fiber.owned && !fiber.instance!.get(null)) fiber.instance!.set(null);\n}\n\nfunction renderable(value: unknown): value is Component {\n return value instanceof Component;\n}\n\nexport { mountComponent, mountFunction, mountOwnedComponent, patchComponent, patchFunction, renderable, unmountComponent };\n","import { Component, Context, Model } from '@expressive/mvc';\nimport { Fragment } from '@expressive/mvc/jsx-runtime';\n\nimport { isVNode, PORTAL } from '../node/vnode';\nimport type { Node as RenderNode, VNode } from '../node/vnode';\nimport type { Appearance } from '../style/claim';\nimport { dispose } from './adapter';\nimport { isCollection, mountCollection } from './collection';\nimport { mountComponent, mountFunction, mountOwnedComponent, renderable, unmountComponent } from './component';\nimport { mountElement, unmountElement } from './element';\nimport { range, removeRange } from './fiber';\nimport type { Boundary, Fiber } from './fiber';\nimport { untrack } from './hot';\nimport { mountPortal, unmountPortal } from './portal';\nimport { reconcile } from './reconcile';\nimport { hold, unwait } from './suspense';\n\nfunction complete<T extends Fiber>(fiber: T, work: () => void): T {\n try {\n work();\n } catch (error) {\n if (!hold(fiber, error)) unmountFiber(fiber);\n\n throw error;\n }\n\n return fiber;\n}\n\nfunction mount(value: RenderNode, parent: globalThis.Node, before: globalThis.Node | null, context: Context, boundary?: Boundary, appearance?: Appearance): Fiber {\n if (typeof value == 'string' || typeof value == 'number' || typeof value == 'bigint') {\n const text = document.createTextNode(String(value));\n parent.insertBefore(text, before);\n return { kind: 'text', value, context, start: text, end: text, children: [] };\n }\n\n if (renderable(value)) return mountComponent(value, parent, before, context, boundary, appearance);\n if (value instanceof Model) notRenderable(value.constructor);\n if (isCollection(value))\n return mountCollection(value, parent, before, context, boundary, appearance);\n\n if (!isVNode(value)) throw new TypeError(`Cannot render ${String(value)}.`);\n\n if (value.type === Fragment) return mountFragment(value, parent, before, context, boundary, appearance);\n if (value.type === PORTAL) return mountPortal(value, parent, before, context, boundary, appearance);\n if (typeof value.type == 'string') return mountElement(value, parent, before, context, boundary, appearance);\n if (typeof value.type != 'function')\n throw new Error(`Cannot render ${String(value.type)}.`);\n\n if (value.type === Component || value.type.prototype instanceof Component)\n return mountOwnedComponent(value, parent, before, context, boundary, appearance);\n\n if (value.type.prototype instanceof Model) notRenderable(value.type);\n\n return mountFunction(value, parent, before, context, boundary, appearance);\n}\n\nfunction mountFragment(value: VNode, parent: globalThis.Node, before: globalThis.Node | null, context: Context, boundary?: Boundary, appearance?: Appearance) {\n const fiber = range('fragment', parent, before, context);\n fiber.key = value.key;\n fiber.type = Fragment;\n fiber.appearance = appearance;\n\n return complete(fiber, () => {\n reconcile(fiber, value.props.children, context, boundary, appearance);\n });\n}\n\nfunction patchText(fiber: Fiber, value: RenderNode) {\n const next = String(value);\n if (fiber.start.nodeValue !== next) fiber.start.nodeValue = next;\n fiber.value = value;\n}\n\nfunction patchFragment(fiber: Fiber, value: VNode, context: Context, appearance?: Appearance) {\n fiber.context = context;\n fiber.appearance = appearance;\n reconcile(fiber, value.props.children, context, fiber.boundary, appearance);\n}\n\nfunction unmountFiber(fiber: Fiber) {\n fiber.dead = true;\n unwait(fiber);\n\n for (let index = fiber.children.length - 1; index >= 0; index--)\n unmountFiber(fiber.children[index]);\n\n if (fiber.placeholder) unmountFiber(fiber.placeholder);\n\n fiber.suspended?.forEach((clear) => clear());\n if (fiber.kind == 'function') untrack(fiber.type as Function, fiber.scope!);\n if (fiber.scope) dispose(fiber.scope);\n fiber.release?.();\n\n if (fiber.kind == 'element') unmountElement(fiber);\n else if (fiber.kind == 'component') unmountComponent(fiber);\n else if (fiber.kind == 'portal') unmountPortal(fiber);\n\n removeRange(fiber.start, fiber.end);\n}\n\nfunction notRenderable(type: Function): never {\n throw new Error(`${type.name} is a Model - extend Component to render it, or provide it with <Component for={${type.name}}>.`);\n}\n\nexport { complete, mount, patchFragment, patchText, unmountFiber };\n","import { Context } from '@expressive/mvc';\n\nimport type { Node as RenderNode } from '../node/vnode';\nimport { appearanceRoot } from '../style/protocol';\nimport { attach, batched, fragment } from './commits';\nimport { range } from './fiber';\nimport type { Container, Fiber } from './fiber';\nimport { unmountFiber } from './mount';\nimport { reconcile } from './reconcile';\nimport { consume, renderedAppearance } from './style';\nimport { settle, suspend, unwait } from './suspense';\n\nconst roots = new WeakMap<Container, () => void>();\nconst focusing: Element[] = [];\nlet passiveRender = false;\nlet depth = 0;\n\nfunction render(node: RenderNode, container: Container): () => void {\n roots.get(container)?.();\n container.replaceChildren();\n\n const context = new Context(Context.root);\n const fiber = range('fragment', container, null, context);\n\n try {\n pass(() => {\n const appearanceContext = appearanceRoot();\n reconcile(fiber, node, context, undefined, appearanceContext ? { context: appearanceContext, entries: [] } : undefined);\n });\n } catch (error) {\n unmountFiber(fiber);\n context.pop();\n throw error;\n }\n\n let active = true;\n const unmount = () => {\n if (!active) return;\n active = false;\n unmountFiber(fiber);\n context.pop();\n roots.delete(container);\n };\n\n roots.set(container, unmount);\n return unmount;\n}\n\nfunction pass<T>(work: () => T): T {\n depth++;\n\n try {\n return work();\n } finally {\n if (!--depth) {\n settle();\n focus();\n }\n }\n}\n\nfunction focus() {\n for (const element of focusing.splice(0))\n if (element.isConnected) (element as HTMLElement).focus();\n}\n\nfunction attempt(fiber: Fiber, passive: boolean, render: () => RenderNode): true | PromiseLike<unknown> | void {\n const previous = passiveRender;\n const scope = fiber.scope!;\n const probed = scope.probed;\n const empty = !fiber.children.length;\n\n scope.probed = undefined;\n passiveRender ||= passive;\n\n if (passive && !depth && empty && !fiber.stash)\n fiber.staging ||= fragment();\n\n const run = () => pass(() => {\n try {\n const output = probed ? probed.output as RenderNode : consume(fiber, render);\n reconcile(fiber, output, scope.context, fiber.boundary, renderedAppearance(fiber));\n\n if (fiber.staging) {\n fiber.end.parentNode!.insertBefore(fiber.staging, fiber.end);\n attach(fiber.staging);\n fiber.staging = undefined;\n }\n\n if (!fiber.recovering) unwait(fiber);\n fiber.retried = undefined;\n return true;\n } catch (thrown) {\n return suspend(fiber, thrown, passive, empty);\n }\n });\n\n try {\n return passive ? batched(run) : run();\n } finally {\n passiveRender = previous;\n }\n}\n\nexport { attempt, depth, focusing, pass, passiveRender, render };\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { t as hot } from "./chunk-hot-a8qgv3tf.js";
1
+ import { t as hot } from "./chunk-hot-vusv_ouU.js";
2
2
  import { s as vnode } from "./chunk-vnode-wpCWQ_Zg.js";
3
3
  import { Fragment } from "@expressive/mvc/jsx-runtime";
4
4
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expressive/dom",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "MVC-native DOM renderer.",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -56,7 +56,7 @@
56
56
  "test": "bun run typecheck && bun run coverage"
57
57
  },
58
58
  "peerDependencies": {
59
- "@expressive/mvc": "^0.91.0",
59
+ "@expressive/mvc": "^0.92.0",
60
60
  "vite": ">=5"
61
61
  },
62
62
  "peerDependenciesMeta": {
@@ -1,22 +0,0 @@
1
- import { Context, Model } from "@expressive/mvc";
2
-
3
- //#region src/render/adapter.d.ts
4
- type NoVoid<T> = T extends undefined | void ? null : T;
5
- declare module '@expressive/mvc' {
6
- namespace Model {
7
- type ForceRefresh = {
8
- (): void;
9
- <T = void>(waitFor: Promise<T>): Promise<T>;
10
- <T = void>(invoke: () => Promise<T>): Promise<T>;
11
- };
12
- type GetFactory<T extends Model, R> = (this: T, current: T, refresh: ForceRefresh) => R;
13
- function get<T extends Model>(this: Model.Extends<T>): T;
14
- function get<T extends Model>(this: Model.Extends<T>, required: false): T | undefined;
15
- function get<T extends Model>(this: Model.Extends<T>, required: true): Required<T>;
16
- function get<T extends Model, R>(this: Model.Extends<T>, factory: GetFactory<T, R>): NoVoid<R>;
17
- }
18
- interface Component {
19
- mount?(): (() => void) | void;
20
- }
21
- }
22
- //# sourceMappingURL=chunk-adapter-BzKJ4wEj.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunk-hot-a8qgv3tf.js","names":[],"sources":["../src/render/scheduler.ts","../src/render/adapter.ts","../src/render/hot.ts"],"sourcesContent":["import { pending } from '@expressive/mvc';\n\ninterface Schedulable {\n queued?: 'urgent' | 'passive' | 'deferred';\n holds?: (() => void)[];\n probed?: { output: unknown };\n blocking?: (() => void)[];\n update(passive: boolean): PromiseLike<unknown> | void;\n probe?(): PromiseLike<unknown> | void;\n empty?(): boolean;\n}\n\nconst urgent = new Set<Schedulable>();\nconst passive = new Set<Schedulable>();\nconst after: (() => void)[] = [];\n\nlet depth = 0;\nlet urgentQueued = false;\nlet passiveQueued = false;\n\nfunction flush(scopes: Set<Schedulable>) {\n for (const scope of scopes) {\n scopes.delete(scope);\n scope.queued = undefined;\n\n let waiting: PromiseLike<unknown> | void = undefined;\n\n try {\n waiting = scope.update(false);\n } catch (error) {\n console.error(error);\n }\n\n settle(scope);\n if (!waiting) unblock(scope);\n }\n}\n\nfunction flushUrgent() {\n urgentQueued = false;\n flush(urgent);\n\n for (const run of after.splice(0)) run();\n}\n\nfunction afterFlush(run: () => void) {\n after.push(run);\n\n if (!urgentQueued) {\n urgentQueued = true;\n queueMicrotask(flushUrgent);\n }\n}\n\nfunction flushPassive() {\n passiveQueued = false;\n\n const batch = [...passive].filter((scope) => scope.queued === 'passive');\n passive.clear();\n\n for (const scope of batch) {\n const waiting = scope.probe?.();\n if (waiting) return defer(batch, waiting, scope);\n }\n\n batch.sort((a, b) => Number(!!b.empty?.()) - Number(!!a.empty?.()));\n\n for (let index = 0; index < batch.length; index++) {\n const scope = batch[index];\n\n if (scope.queued !== 'passive') continue;\n\n scope.queued = undefined;\n\n let waiting: PromiseLike<unknown> | void = undefined;\n\n try {\n waiting = scope.update(true);\n } catch (error) {\n console.error(error);\n }\n\n settle(scope);\n\n if (waiting) return defer(batch.slice(index + 1), waiting, scope);\n unblock(scope);\n }\n}\n\nfunction defer(scopes: Schedulable[], waiting: PromiseLike<unknown>, source: Schedulable) {\n const held = scopes.filter((scope) => scope.queued === 'passive');\n\n for (const scope of held) {\n scope.queued = 'deferred';\n scope.probed = undefined;\n }\n\n const resume = () => {\n for (const scope of held)\n if (scope.queued === 'deferred') {\n scope.queued = undefined;\n transition(() => schedule(scope));\n }\n };\n\n (source.blocking ||= []).push(resume);\n waiting.then(resume, resume);\n}\n\nfunction unblock(scope: Schedulable) {\n const { blocking } = scope;\n\n scope.blocking = undefined;\n blocking?.forEach((resume) => resume());\n}\n\nfunction release(holds?: (() => void)[]) {\n holds?.forEach((held) => held());\n}\n\nfunction settle(scope: Schedulable) {\n const { holds } = scope;\n\n scope.holds = undefined;\n release(holds);\n}\n\nfunction schedule(scope: Schedulable) {\n const held = pending();\n\n if (held) (scope.holds ||= []).push(held);\n scope.probed = undefined;\n\n if (!depth) {\n passive.delete(scope);\n scope.queued = 'urgent';\n urgent.add(scope);\n\n if (!urgentQueued) {\n urgentQueued = true;\n queueMicrotask(flushUrgent);\n }\n\n return;\n }\n\n if (scope.queued && scope.queued !== 'deferred') return;\n\n scope.queued = 'passive';\n passive.add(scope);\n\n if (!passiveQueued) {\n passiveQueued = true;\n setTimeout(flushPassive);\n }\n}\n\nfunction transition(work: () => void) {\n depth++;\n\n try {\n work();\n } finally {\n depth--;\n }\n}\n\nfunction claim(scope: Schedulable) {\n urgent.delete(scope);\n passive.delete(scope);\n scope.queued = undefined;\n scope.probed = undefined;\n}\n\nfunction unschedule(scope: Schedulable) {\n urgent.delete(scope);\n passive.delete(scope);\n scope.queued = undefined;\n scope.probed = undefined;\n settle(scope);\n unblock(scope);\n}\n\nexport { afterFlush, claim, release, schedule, settle, transition, unschedule };\nexport type { Schedulable };\n","import { Context, Model, unbind } from '@expressive/mvc';\nimport { watch } from '@expressive/mvc/observable';\n\nimport { schedule, transition, unschedule } from './scheduler';\nimport type { Schedulable } from './scheduler';\n\ninterface Scope extends Schedulable {\n active: boolean;\n context: Context;\n subscriptions: (() => void)[];\n}\n\nlet current: Scope | undefined;\nlet collecting: (() => void)[] | undefined;\n\nfunction enter<T>(scope: Scope, render: () => T): T {\n const parent = current;\n const releases = collecting;\n const next: (() => void)[] = [];\n\n current = scope;\n collecting = next;\n\n try {\n return render();\n } finally {\n current = parent;\n collecting = releases;\n scope.subscriptions.forEach((release) => release());\n scope.subscriptions = next;\n }\n}\n\nfunction dispose(scope: Scope) {\n scope.active = false;\n unschedule(scope);\n scope.subscriptions.forEach((release) => release());\n scope.subscriptions = [];\n}\n\nfunction requireScope(): Scope {\n if (!current)\n throw new Error('Model.get() may only run while @expressive/dom is rendering.');\n\n return current;\n}\n\nfunction tracked<T extends object>(target: T, required?: boolean): T {\n const scope = requireScope();\n let proxy = target;\n let first = true;\n\n const release = watch(\n target,\n (next) => {\n proxy = next;\n if (!first && scope.active) schedule(scope);\n first = false;\n },\n required,\n transition\n );\n\n collecting!.push(release);\n return proxy;\n}\n\ntype NoVoid<T> = T extends undefined | void ? null : T;\n\ndeclare module '@expressive/mvc' {\n namespace Model {\n type ForceRefresh = {\n (): void;\n <T = void>(waitFor: Promise<T>): Promise<T>;\n <T = void>(invoke: () => Promise<T>): Promise<T>;\n };\n\n type GetFactory<T extends Model, R> = (\n this: T,\n current: T,\n refresh: ForceRefresh\n ) => R;\n\n function get<T extends Model>(this: Model.Extends<T>): T;\n function get<T extends Model>(this: Model.Extends<T>, required: false): T | undefined;\n function get<T extends Model>(this: Model.Extends<T>, required: true): Required<T>;\n function get<T extends Model, R>(\n this: Model.Extends<T>,\n factory: GetFactory<T, R>\n ): NoVoid<R>;\n }\n\n interface Component {\n mount?(): (() => void) | void;\n }\n}\n\n(Model as any).get = function get<T extends Model>(\n this: Model.Extends<T>,\n argument?: boolean | Model.GetFactory<T, unknown>\n) {\n const scope = requireScope();\n const instance = tracked(scope.context).get(this, argument === false ? false : true);\n\n if (!instance) return undefined;\n\n const proxy = tracked(instance, argument === true);\n\n if (typeof argument != 'function') return proxy;\n\n const refresh = ((action?: Promise<unknown> | (() => Promise<unknown>)) => {\n if (typeof action == 'function') action = action();\n schedule(scope);\n return action instanceof Promise ? action.finally(() => schedule(scope)) : undefined;\n }) as Model.ForceRefresh;\n\n return argument.call(proxy, proxy, refresh) ?? null;\n};\n\nconst OWNERS = new WeakMap<Function, { owner: Model; key: string }>();\n\nModel.on({\n method(key, fn, owner) {\n if (/^[A-Z]/.test(key)) OWNERS.set(fn, { owner, key });\n }\n});\n\nfunction call(type: Function, props: unknown) {\n const sub = OWNERS.get(type);\n\n if (!sub) return type(props);\n\n const { owner, key } = sub;\n return unbind((owner as any)[key]).call(tracked(owner), props);\n}\n\nfunction owner(type: unknown) {\n return typeof type == 'function' ? OWNERS.get(type) : undefined;\n}\n\nexport { call, dispose, enter, owner };\nexport type { Scope };\n","import type { Scope } from './adapter';\nimport { owner } from './adapter';\nimport { schedule } from './scheduler';\n\ninterface Family {\n current: Function;\n scopes: Set<Scope>;\n}\n\nconst FAMILIES = new Map<string, Family>();\nconst FAMILY = new WeakMap<Function, Family>();\n\n/** The latest implementation of a component registered for hot refresh. */\nfunction latest(type: Function) {\n return FAMILY.get(type)?.current || type;\n}\n\n/** Whether two element types are one component, across hot edits. */\nfunction same(a: unknown, b: unknown) {\n if (a === b) return true;\n\n const sub = owner(a);\n\n if (sub) {\n const other = owner(b);\n return !!other && other.owner === sub.owner && other.key === sub.key;\n }\n\n const family = typeof a == 'function' && FAMILY.get(a);\n\n return !!family && family === FAMILY.get(b as Function);\n}\n\nfunction track(type: Function, scope: Scope) {\n FAMILY.get(type)?.scopes.add(scope);\n}\n\nfunction untrack(type: Function, scope: Scope) {\n FAMILY.get(type)?.scopes.delete(scope);\n}\n\n/**\n * Register a module's function components under stable ids. A component seen\n * before takes its new implementation and re-renders where it is mounted.\n */\nfunction hot(id: string, components: Record<string, unknown>) {\n for (const [name, type] of Object.entries(components)) {\n if (typeof type != 'function') continue;\n\n const key = `${id}#${name}`;\n let family = FAMILIES.get(key);\n\n if (!family) FAMILIES.set(key, (family = { current: type, scopes: new Set() }));\n\n FAMILY.set(type, family);\n\n if (family.current === type) continue;\n\n family.current = type;\n\n for (const scope of family.scopes) schedule(scope);\n }\n}\n\nexport { hot, latest, same, track, untrack };\n"],"mappings":";;;;AAYA,MAAM,yBAAS,IAAI,KAAkB;AACrC,MAAM,0BAAU,IAAI,KAAkB;AACtC,MAAM,QAAwB,EAAE;AAEhC,IAAI,QAAQ;AACZ,IAAI,eAAe;AACnB,IAAI,gBAAgB;AAEpB,SAAS,MAAM,QAA0B;AACvC,MAAK,MAAM,SAAS,QAAQ;AAC1B,SAAO,OAAO,MAAM;AACpB,QAAM,SAAS;EAEf,IAAI,UAAuC;AAE3C,MAAI;AACF,aAAU,MAAM,OAAO,MAAM;WACtB,OAAO;AACd,WAAQ,MAAM,MAAM;;AAGtB,SAAO,MAAM;AACb,MAAI,CAAC,QAAS,SAAQ,MAAM;;;AAIhC,SAAS,cAAc;AACrB,gBAAe;AACf,OAAM,OAAO;AAEb,MAAK,MAAM,OAAO,MAAM,OAAO,EAAE,CAAE,MAAK;;AAG1C,SAAS,WAAW,KAAiB;AACnC,OAAM,KAAK,IAAI;AAEf,KAAI,CAAC,cAAc;AACjB,iBAAe;AACf,iBAAe,YAAY;;;AAI/B,SAAS,eAAe;AACtB,iBAAgB;CAEhB,MAAM,QAAQ,CAAC,GAAG,QAAQ,CAAC,QAAQ,UAAU,MAAM,WAAW,UAAU;AACxE,SAAQ,OAAO;AAEf,MAAK,MAAM,SAAS,OAAO;EACzB,MAAM,UAAU,MAAM,SAAS;AAC/B,MAAI,QAAS,QAAO,MAAM,OAAO,SAAS,MAAM;;AAGlD,OAAM,MAAM,GAAG,MAAM,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAEnE,MAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;EACjD,MAAM,QAAQ,MAAM;AAEpB,MAAI,MAAM,WAAW,UAAW;AAEhC,QAAM,SAAS;EAEf,IAAI,UAAuC;AAE3C,MAAI;AACF,aAAU,MAAM,OAAO,KAAK;WACrB,OAAO;AACd,WAAQ,MAAM,MAAM;;AAGtB,SAAO,MAAM;AAEb,MAAI,QAAS,QAAO,MAAM,MAAM,MAAM,QAAQ,EAAE,EAAE,SAAS,MAAM;AACjE,UAAQ,MAAM;;;AAIlB,SAAS,MAAM,QAAuB,SAA+B,QAAqB;CACxF,MAAM,OAAO,OAAO,QAAQ,UAAU,MAAM,WAAW,UAAU;AAEjE,MAAK,MAAM,SAAS,MAAM;AACxB,QAAM,SAAS;AACf,QAAM,SAAS;;CAGjB,MAAM,eAAe;AACnB,OAAK,MAAM,SAAS,KAClB,KAAI,MAAM,WAAW,YAAY;AAC/B,SAAM,SAAS;AACf,oBAAiB,SAAS,MAAM,CAAC;;;AAIvC,EAAC,OAAO,aAAa,EAAE,EAAE,KAAK,OAAO;AACrC,SAAQ,KAAK,QAAQ,OAAO;;AAG9B,SAAS,QAAQ,OAAoB;CACnC,MAAM,EAAE,aAAa;AAErB,OAAM,WAAW;AACjB,WAAU,SAAS,WAAW,QAAQ,CAAC;;AAGzC,SAAS,QAAQ,OAAwB;AACvC,QAAO,SAAS,SAAS,MAAM,CAAC;;AAGlC,SAAS,OAAO,OAAoB;CAClC,MAAM,EAAE,UAAU;AAElB,OAAM,QAAQ;AACd,SAAQ,MAAM;;AAGhB,SAAS,SAAS,OAAoB;CACpC,MAAM,OAAO,SAAS;AAEtB,KAAI,KAAM,EAAC,MAAM,UAAU,EAAE,EAAE,KAAK,KAAK;AACzC,OAAM,SAAS;AAEf,KAAI,CAAC,OAAO;AACV,UAAQ,OAAO,MAAM;AACrB,QAAM,SAAS;AACf,SAAO,IAAI,MAAM;AAEjB,MAAI,CAAC,cAAc;AACjB,kBAAe;AACf,kBAAe,YAAY;;AAG7B;;AAGF,KAAI,MAAM,UAAU,MAAM,WAAW,WAAY;AAEjD,OAAM,SAAS;AACf,SAAQ,IAAI,MAAM;AAElB,KAAI,CAAC,eAAe;AAClB,kBAAgB;AAChB,aAAW,aAAa;;;AAI5B,SAAS,WAAW,MAAkB;AACpC;AAEA,KAAI;AACF,QAAM;WACE;AACR;;;AAIJ,SAAS,MAAM,OAAoB;AACjC,QAAO,OAAO,MAAM;AACpB,SAAQ,OAAO,MAAM;AACrB,OAAM,SAAS;AACf,OAAM,SAAS;;AAGjB,SAAS,WAAW,OAAoB;AACtC,QAAO,OAAO,MAAM;AACpB,SAAQ,OAAO,MAAM;AACrB,OAAM,SAAS;AACf,OAAM,SAAS;AACf,QAAO,MAAM;AACb,SAAQ,MAAM;;;;;ACxKhB,IAAI;AACJ,IAAI;AAEJ,SAAS,MAAS,OAAc,QAAoB;CAClD,MAAM,SAAS;CACf,MAAM,WAAW;CACjB,MAAM,OAAuB,EAAE;AAE/B,WAAU;AACV,cAAa;AAEb,KAAI;AACF,SAAO,QAAQ;WACP;AACR,YAAU;AACV,eAAa;AACb,QAAM,cAAc,SAAS,YAAY,SAAS,CAAC;AACnD,QAAM,gBAAgB;;;AAI1B,SAAS,QAAQ,OAAc;AAC7B,OAAM,SAAS;AACf,YAAW,MAAM;AACjB,OAAM,cAAc,SAAS,YAAY,SAAS,CAAC;AACnD,OAAM,gBAAgB,EAAE;;AAG1B,SAAS,eAAsB;AAC7B,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,+DAA+D;AAEjF,QAAO;;AAGT,SAAS,QAA0B,QAAW,UAAuB;CACnE,MAAM,QAAQ,cAAc;CAC5B,IAAI,QAAQ;CACZ,IAAI,QAAQ;CAEZ,MAAM,UAAU,MACd,SACC,SAAS;AACR,UAAQ;AACR,MAAI,CAAC,SAAS,MAAM,OAAQ,UAAS,MAAM;AAC3C,UAAQ;IAEV,UACA,WACD;AAED,YAAY,KAAK,QAAQ;AACzB,QAAO;;AAiCT,AAAC,MAAc,MAAM,SAAS,IAE5B,UACA;CACA,MAAM,QAAQ,cAAc;CAC5B,MAAM,WAAW,QAAQ,MAAM,QAAQ,CAAC,IAAI,MAAM,aAAa,QAAQ,QAAQ,KAAK;AAEpF,KAAI,CAAC,SAAU,QAAO;CAEtB,MAAM,QAAQ,QAAQ,UAAU,aAAa,KAAK;AAElD,KAAI,OAAO,YAAY,WAAY,QAAO;CAE1C,MAAM,YAAY,WAAyD;AACzE,MAAI,OAAO,UAAU,WAAY,UAAS,QAAQ;AAClD,WAAS,MAAM;AACf,SAAO,kBAAkB,UAAU,OAAO,cAAc,SAAS,MAAM,CAAC,GAAG;;AAG7E,QAAO,SAAS,KAAK,OAAO,OAAO,QAAQ,IAAI;;AAGjD,MAAM,yBAAS,IAAI,SAAkD;AAErE,MAAM,GAAG,EACP,OAAO,KAAK,IAAI,OAAO;AACrB,KAAI,SAAS,KAAK,IAAI,CAAE,QAAO,IAAI,IAAI;EAAE;EAAO;EAAK,CAAC;GAEzD,CAAC;AAEF,SAAS,KAAK,MAAgB,OAAgB;CAC5C,MAAM,MAAM,OAAO,IAAI,KAAK;AAE5B,KAAI,CAAC,IAAK,QAAO,KAAK,MAAM;CAE5B,MAAM,EAAE,OAAO,QAAQ;AACvB,QAAO,OAAQ,MAAc,KAAK,CAAC,KAAK,QAAQ,MAAM,EAAE,MAAM;;AAGhE,SAAS,MAAM,MAAe;AAC5B,QAAO,OAAO,QAAQ,aAAa,OAAO,IAAI,KAAK,GAAG;;;;;AChIxD,MAAM,2BAAW,IAAI,KAAqB;AAC1C,MAAM,yBAAS,IAAI,SAA2B;;AAG9C,SAAS,OAAO,MAAgB;AAC9B,QAAO,OAAO,IAAI,KAAK,EAAE,WAAW;;;AAItC,SAAS,KAAK,GAAY,GAAY;AACpC,KAAI,MAAM,EAAG,QAAO;CAEpB,MAAM,MAAM,MAAM,EAAE;AAEpB,KAAI,KAAK;EACP,MAAM,QAAQ,MAAM,EAAE;AACtB,SAAO,CAAC,CAAC,SAAS,MAAM,UAAU,IAAI,SAAS,MAAM,QAAQ,IAAI;;CAGnE,MAAM,SAAS,OAAO,KAAK,cAAc,OAAO,IAAI,EAAE;AAEtD,QAAO,CAAC,CAAC,UAAU,WAAW,OAAO,IAAI,EAAc;;AAGzD,SAAS,MAAM,MAAgB,OAAc;AAC3C,QAAO,IAAI,KAAK,EAAE,OAAO,IAAI,MAAM;;AAGrC,SAAS,QAAQ,MAAgB,OAAc;AAC7C,QAAO,IAAI,KAAK,EAAE,OAAO,OAAO,MAAM;;;;;;AAOxC,SAAS,IAAI,IAAY,YAAqC;AAC5D,MAAK,MAAM,CAAC,MAAM,SAAS,OAAO,QAAQ,WAAW,EAAE;AACrD,MAAI,OAAO,QAAQ,WAAY;EAE/B,MAAM,MAAM,GAAG,GAAG,GAAG;EACrB,IAAI,SAAS,SAAS,IAAI,IAAI;AAE9B,MAAI,CAAC,OAAQ,UAAS,IAAI,KAAM,SAAS;GAAE,SAAS;GAAM,wBAAQ,IAAI,KAAK;GAAE,CAAE;AAE/E,SAAO,IAAI,MAAM,OAAO;AAExB,MAAI,OAAO,YAAY,KAAM;AAE7B,SAAO,UAAU;AAEjB,OAAK,MAAM,SAAS,OAAO,OAAQ,UAAS,MAAM"}