@expressive/dom 0.4.0 → 0.5.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.
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  ---
8
8
 
9
- `@expressive/dom` renders Expressive MVC without React or Preact. Function components are renderer-stateless: they project props and MVC snapshots into DOM, while `Model.get()` and `Model.use()` supply dependency tracking and owned state.
9
+ `@expressive/dom` renders Expressive MVC without React or Preact. Function components are renderer-stateless: they project props and MVC snapshots into DOM, while `Model.get()` supplies dependency tracking. Owned state lives on classes - a Component field or `<Component for>`.
10
10
 
11
11
  ```bash
12
12
  npm install @expressive/mvc @expressive/dom
@@ -33,11 +33,14 @@ class Counter extends Model {
33
33
  }
34
34
 
35
35
  function Count() {
36
- const { count, increment } = Counter.use();
36
+ const { count, increment } = Counter.get();
37
37
  return <button onClick={increment}>{count}</button>;
38
38
  }
39
39
 
40
- const unmount = render(<Count />, document.getElementById('app')!);
40
+ const unmount = render(
41
+ <Component for={Counter}><Count /></Component>,
42
+ document.getElementById('app')!
43
+ );
41
44
  ```
42
45
 
43
46
  `style` recursively composes conditional class tokens and inline declarations. Strings become classes; objects merge left-to-right and render inline. Use `className` for a browser-specific class outside the composition. The `class` attribute spelling and CSS declaration strings are not supported.
@@ -1,16 +1,8 @@
1
1
  import { Context, Model } from "@expressive/mvc";
2
2
 
3
3
  //#region src/render/adapter.d.ts
4
- interface UseModel extends Model {
5
- use?(...props: any[]): Promise<void> | void;
6
- mount?(): (() => void) | void;
7
- }
8
4
  type NoVoid<T> = T extends undefined | void ? null : T;
9
5
  declare module '@expressive/mvc' {
10
- interface UseModel extends Model {
11
- use?(...props: any[]): Promise<void> | void;
12
- mount?(): (() => void) | void;
13
- }
14
6
  namespace Model {
15
7
  type ForceRefresh = {
16
8
  (): void;
@@ -18,20 +10,13 @@ declare module '@expressive/mvc' {
18
10
  <T = void>(invoke: () => Promise<T>): Promise<T>;
19
11
  };
20
12
  type GetFactory<T extends Model, R> = (this: T, current: T, refresh: ForceRefresh) => R;
21
- type UseArgs<T extends Model> = T extends {
22
- use(...props: infer P): any;
23
- } ? P : Model.Args<T>;
24
13
  function get<T extends Model>(this: Model.Extends<T>): T;
25
14
  function get<T extends Model>(this: Model.Extends<T>, required: false): T | undefined;
26
15
  function get<T extends Model>(this: Model.Extends<T>, required: true): Required<T>;
27
16
  function get<T extends Model, R>(this: Model.Extends<T>, factory: GetFactory<T, R>): NoVoid<R>;
28
- function use<T extends UseModel>(this: Model.Type<T>, ...args: UseArgs<T>): T;
29
- }
30
- namespace Component {
31
- const use: never;
32
17
  }
33
18
  interface Component {
34
19
  mount?(): (() => void) | void;
35
20
  }
36
21
  }
37
- //# sourceMappingURL=chunk-adapter-i1piHw8T.d.ts.map
22
+ //# sourceMappingURL=chunk-adapter-BzKJ4wEj.d.ts.map
@@ -1,4 +1,4 @@
1
- import { Component, Model, pending, unbind } from "@expressive/mvc";
1
+ import { Model, pending, unbind } from "@expressive/mvc";
2
2
  import { watch } from "@expressive/mvc/observable";
3
3
 
4
4
  //#region src/render/scheduler.ts
@@ -141,17 +141,9 @@ function enter(scope, render) {
141
141
  const next = [];
142
142
  current = scope;
143
143
  collecting = next;
144
- scope.childContext = scope.context;
145
- scope.useIndex = 0;
146
144
  try {
147
- const output = render();
148
- if (scope.kind == "function" && scope.useIndex !== scope.uses.length) {
149
- if (!scope.hot) throw new Error("Model.use() calls must keep the same order on every function-component render.");
150
- truncate(scope, scope.useIndex);
151
- }
152
- return output;
145
+ return render();
153
146
  } finally {
154
- scope.hot = void 0;
155
147
  current = parent;
156
148
  collecting = releases;
157
149
  scope.subscriptions.forEach((release) => release());
@@ -163,27 +155,9 @@ function dispose(scope) {
163
155
  unschedule(scope);
164
156
  scope.subscriptions.forEach((release) => release());
165
157
  scope.subscriptions = [];
166
- truncate(scope, 0);
167
- }
168
- /** Destroy the `Model.use()` slots of a scope from `index` on. */
169
- function truncate(scope, index) {
170
- for (let i = scope.uses.length - 1; i >= index; i--) {
171
- const slot = scope.uses[i];
172
- slot.release();
173
- if (typeof slot.cleanup == "function") slot.cleanup();
174
- slot.context.pop();
175
- slot.instance.set(null);
176
- }
177
- scope.uses.length = index;
178
- }
179
- function commit(scope) {
180
- for (const slot of scope.uses) if (!slot.mounted) {
181
- slot.mounted = true;
182
- slot.cleanup = slot.instance.mount?.();
183
- }
184
158
  }
185
159
  function requireScope() {
186
- if (!current) throw new Error("Model.get() and Model.use() may only run while @expressive/dom is rendering.");
160
+ if (!current) throw new Error("Model.get() may only run while @expressive/dom is rendering.");
187
161
  return current;
188
162
  }
189
163
  function tracked(target, required) {
@@ -200,7 +174,7 @@ function tracked(target, required) {
200
174
  }
201
175
  Model.get = function get(argument) {
202
176
  const scope = requireScope();
203
- const instance = scope.childContext.get(this, argument === false ? false : true);
177
+ const instance = scope.context.get(this, argument === false ? false : true);
204
178
  if (!instance) return void 0;
205
179
  const proxy = tracked(instance, argument === true);
206
180
  if (typeof argument != "function") return proxy;
@@ -211,56 +185,6 @@ Model.get = function get(argument) {
211
185
  });
212
186
  return argument.call(proxy, proxy, refresh) ?? null;
213
187
  };
214
- Model.use = function use(...args) {
215
- const scope = requireScope();
216
- if (scope.kind != "function") throw new Error("Model.use() is only available at the top level of a function component.");
217
- const index = scope.useIndex++;
218
- let slot = scope.uses[index];
219
- if (slot && slot.Type !== this) {
220
- if (!scope.hot) throw new Error("Model.use() calls must keep the same order on every function-component render.");
221
- truncate(scope, index);
222
- slot = void 0;
223
- }
224
- if (!slot) {
225
- let instance;
226
- const assign = (value) => typeof value == "object" && value && instance.set(value);
227
- let apply = (...values) => Promise.all(values.flat().map(assign));
228
- instance = new this((self) => {
229
- const own = self;
230
- if (typeof own.use == "function") {
231
- apply = own.use.bind(own);
232
- apply(...args);
233
- return;
234
- }
235
- return args;
236
- });
237
- const context = scope.childContext.push(instance);
238
- slot = {
239
- Type: this,
240
- context,
241
- instance,
242
- proxy: instance,
243
- release: void 0,
244
- apply
245
- };
246
- let first = true;
247
- slot.release = watch(instance, (proxy) => {
248
- slot.proxy = proxy;
249
- if (!first && scope.active) schedule(scope);
250
- first = false;
251
- }, void 0, transition);
252
- slot.apply = apply;
253
- scope.uses.push(slot);
254
- } else slot.apply(...args);
255
- scope.childContext = slot.context;
256
- return slot.proxy;
257
- };
258
- Object.defineProperty(Component, "use", {
259
- configurable: true,
260
- value() {
261
- throw new Error(`${this} is a Component - render it instead of calling use().`);
262
- }
263
- });
264
188
  const OWNERS = /* @__PURE__ */ new WeakMap();
265
189
  Model.on({ method(key, fn, owner) {
266
190
  if (/^[A-Z]/.test(key)) OWNERS.set(fn, {
@@ -319,13 +243,10 @@ function hot(id, components) {
319
243
  FAMILY.set(type, family);
320
244
  if (family.current === type) continue;
321
245
  family.current = type;
322
- for (const scope of family.scopes) {
323
- scope.hot = true;
324
- schedule(scope);
325
- }
246
+ for (const scope of family.scopes) schedule(scope);
326
247
  }
327
248
  }
328
249
 
329
250
  //#endregion
330
- export { untrack as a, dispose as c, claim as d, release as f, transition as h, track as i, enter as l, settle as m, latest as n, call as o, schedule as p, same as r, commit as s, hot as t, afterFlush as u };
331
- //# sourceMappingURL=chunk-hot-9LhRiwFx.js.map
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-Bj-g5ynf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-hot-Bj-g5ynf.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 = 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":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { a as Portal, i as Node, r as Fragment, s as createElement } from "./chunk-loader-CZ-53pyV.js";
2
2
  import { JSX } from "./jsx-runtime.js";
3
- import { Context, Model } from "@expressive/mvc";
3
+ import { Component, Context } from "@expressive/mvc";
4
4
 
5
5
  //#region src/style/stylesheet.d.ts
6
6
  type Member = Extract<keyof CSSStyleDeclaration, string>;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as untrack, c as dispose, d as claim$1, f as release, h as transition, i as track, l as enter, m as settle$1, n as latest, o as call, p as schedule, r as same, s as commit, u as afterFlush } from "./chunk-hot-9LhRiwFx.js";
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-Bj-g5ynf.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";
@@ -458,16 +458,12 @@ function range(kind, parent, before, context) {
458
458
  children: []
459
459
  };
460
460
  }
461
- function makeScope(kind, context, update) {
461
+ function makeScope(context, update) {
462
462
  return {
463
463
  active: true,
464
- childContext: context,
465
464
  context,
466
- kind,
467
465
  subscriptions: [],
468
- update,
469
- useIndex: 0,
470
- uses: []
466
+ update
471
467
  };
472
468
  }
473
469
  function moveRange(start, end, target) {
@@ -507,7 +503,7 @@ function mountCollection(value, parent, before, context, boundary, appearance) {
507
503
  fiber.value = value;
508
504
  fiber.boundary = boundary;
509
505
  fiber.appearance = appearance;
510
- fiber.scope = makeScope("collection", context, (passive) => runCollection(fiber, passive));
506
+ fiber.scope = makeScope(context, (passive) => runCollection(fiber, passive));
511
507
  let first = true;
512
508
  fiber.release = watch(value, (current) => {
513
509
  fiber.value = current;
@@ -1169,7 +1165,7 @@ function mountFunction(value, parent, before, context, boundary, appearance) {
1169
1165
  fiber.props = observe(resolved.props);
1170
1166
  fiber.boundary = boundary;
1171
1167
  fiber.appearance = resolved.appearance;
1172
- fiber.scope = makeScope("function", context, (passive) => runFunction(fiber, passive));
1168
+ fiber.scope = makeScope(context, (passive) => run(fiber, passive));
1173
1169
  fiber.render = () => enter(fiber.scope, () => {
1174
1170
  const type = latest(fiber.type);
1175
1171
  return resolve(type, fiber.props, () => call(type, fiber.props));
@@ -1177,29 +1173,25 @@ function mountFunction(value, parent, before, context, boundary, appearance) {
1177
1173
  track(fiber.type, fiber.scope);
1178
1174
  probing(fiber);
1179
1175
  return complete(fiber, () => {
1180
- runFunction(fiber, passiveRender);
1176
+ run(fiber, passiveRender);
1181
1177
  });
1182
1178
  }
1183
1179
  function mountOwnedComponent(value, parent, before, context, boundary, appearance) {
1184
1180
  const resolved = componentProps(value.type, value.props, appearance);
1185
1181
  const Type = value.type;
1186
1182
  const props = observe(resolved.props);
1187
- const instance = new Type(props, Type.prototype instanceof Component ? void 0 : () => props.is?.(instance));
1188
- return mountComponent(instance, parent, before, context, boundary, resolved.appearance, true, value.key, props);
1183
+ return mountComponent(new Type(props), parent, before, context, boundary, resolved.appearance, true, value.key, props);
1189
1184
  }
1190
1185
  function mountComponent(instance, parent, before, context, inherited, appearance, owned = false, key, props = instance.props) {
1191
1186
  const fiber = range("component", parent, before, context);
1192
1187
  const childContext = context.push(instance);
1193
1188
  const element = owned ? props : {};
1194
- const fallback = element.fallback !== void 0 ? element.fallback : instance.fallback;
1189
+ const { fallback } = instance;
1195
1190
  const ownBoundary = fallback !== void 0 && fallback !== false || element.catch || instance.catch ? {
1196
1191
  catch: element.catch || instance.catch ? (error) => {
1197
1192
  return (owned && fiber.props.catch || instance.catch).call(instance, error, instance);
1198
1193
  } : void 0,
1199
- fallback: () => {
1200
- const placed = owned ? fiber.props.fallback : void 0;
1201
- return placed !== void 0 ? placed : instance.fallback;
1202
- },
1194
+ fallback: () => instance.fallback,
1203
1195
  owner: fiber,
1204
1196
  parent: inherited
1205
1197
  } : inherited;
@@ -1212,10 +1204,9 @@ function mountComponent(instance, parent, before, context, inherited, appearance
1212
1204
  fiber.props = props;
1213
1205
  fiber.owned = owned;
1214
1206
  fiber.appearance = appearance;
1215
- fiber.scope = makeScope("component", childContext, (passive) => runComponent(fiber, passive));
1207
+ fiber.scope = makeScope(childContext, (passive) => run(fiber, passive));
1216
1208
  fiber.render = () => enter(fiber.scope, () => {
1217
- const { render } = fiber.value;
1218
- return render ? unbind(render).call(fiber.value, fiber.props) : fiber.props.children ?? null;
1209
+ return unbind(fiber.value.render).call(fiber.value, fiber.props);
1219
1210
  });
1220
1211
  probing(fiber);
1221
1212
  let first = true;
@@ -1231,19 +1222,14 @@ function mountComponent(instance, parent, before, context, inherited, appearance
1231
1222
  Object.defineProperty(fiber, "value", { get: () => proxy });
1232
1223
  try {
1233
1224
  complete(fiber, () => {
1234
- runComponent(fiber, passiveRender);
1225
+ run(fiber, passiveRender);
1235
1226
  });
1236
1227
  } finally {
1237
1228
  if (owned && !fiber.dead) inserted(fiber, () => fiber.cleanup = instance.mount?.());
1238
1229
  }
1239
1230
  return fiber;
1240
1231
  }
1241
- function runFunction(fiber, passive) {
1242
- const result = attempt(fiber, passive, fiber.render);
1243
- if (result === true) inserted(fiber, () => commit(fiber.scope));
1244
- else return result;
1245
- }
1246
- function runComponent(fiber, passive) {
1232
+ function run(fiber, passive) {
1247
1233
  const result = attempt(fiber, passive, fiber.render);
1248
1234
  if (result !== true) return result;
1249
1235
  }
@@ -1263,12 +1249,11 @@ function patchFunction(fiber, value, appearance) {
1263
1249
  if (fiber.type !== value.type) {
1264
1250
  untrack(fiber.type, fiber.scope);
1265
1251
  fiber.type = value.type;
1266
- fiber.scope.hot = true;
1267
1252
  track(fiber.type, fiber.scope);
1268
1253
  }
1269
1254
  fiber.appearance = resolved.appearance;
1270
1255
  fiber.props = observe(resolved.props);
1271
- rerun(fiber, () => runFunction(fiber, passiveRender));
1256
+ rerun(fiber, () => run(fiber, passiveRender));
1272
1257
  }
1273
1258
  function patchComponent(fiber, value, appearance) {
1274
1259
  const resolved = isVNode(value) ? componentProps(value.type, value.props, appearance) : {
@@ -1280,11 +1265,10 @@ function patchComponent(fiber, value, appearance) {
1280
1265
  if (isVNode(value) && props !== fiber.props) {
1281
1266
  const instance = fiber.instance;
1282
1267
  if (passiveRender) fiber.applied = true;
1283
- if (instance instanceof Component) instance.props = props;
1284
- else instance.set(merge(fiber.props, props));
1268
+ instance.props = props;
1285
1269
  }
1286
1270
  fiber.props = props;
1287
- rerun(fiber, () => runComponent(fiber, passiveRender));
1271
+ rerun(fiber, () => run(fiber, passiveRender));
1288
1272
  }
1289
1273
  function rerun(fiber, run) {
1290
1274
  claim$1(fiber.scope);
@@ -1297,15 +1281,7 @@ function unmountComponent(fiber) {
1297
1281
  if (fiber.owned && !fiber.instance.get(null)) fiber.instance.set(null);
1298
1282
  }
1299
1283
  function renderable(value) {
1300
- return value instanceof Model && typeof value.render == "function";
1301
- }
1302
- function merge(previous, next) {
1303
- const output = {};
1304
- for (const key in previous) output[key] = void 0;
1305
- return {
1306
- ...output,
1307
- ...next
1308
- };
1284
+ return value instanceof Component;
1309
1285
  }
1310
1286
 
1311
1287
  //#endregion
@@ -1333,13 +1309,15 @@ function mount(value, parent, before, context, boundary, appearance) {
1333
1309
  };
1334
1310
  }
1335
1311
  if (renderable(value)) return mountComponent(value, parent, before, context, boundary, appearance);
1312
+ if (value instanceof Model) notRenderable(value.constructor);
1336
1313
  if (isCollection(value)) return mountCollection(value, parent, before, context, boundary, appearance);
1337
1314
  if (!isVNode(value)) throw new TypeError(`Cannot render ${String(value)}.`);
1338
1315
  if (value.type === Fragment$1) return mountFragment(value, parent, before, context, boundary, appearance);
1339
1316
  if (value.type === PORTAL) return mountPortal(value, parent, before, context, boundary, appearance);
1340
1317
  if (typeof value.type == "string") return mountElement(value, parent, before, context, boundary, appearance);
1341
1318
  if (typeof value.type != "function") throw new Error(`Cannot render ${String(value.type)}.`);
1342
- if (value.type.prototype instanceof Model) return mountOwnedComponent(value, parent, before, context, boundary, appearance);
1319
+ if (value.type === Component || value.type.prototype instanceof Component) return mountOwnedComponent(value, parent, before, context, boundary, appearance);
1320
+ if (value.type.prototype instanceof Model) notRenderable(value.type);
1343
1321
  return mountFunction(value, parent, before, context, boundary, appearance);
1344
1322
  }
1345
1323
  function mountFragment(value, parent, before, context, boundary, appearance) {
@@ -1375,6 +1353,9 @@ function unmountFiber(fiber) {
1375
1353
  else if (fiber.kind == "portal") unmountPortal(fiber);
1376
1354
  removeRange(fiber.start, fiber.end);
1377
1355
  }
1356
+ function notRenderable(type) {
1357
+ throw new Error(`${type.name} is a Model - extend Component to render it, or provide it with <Component for={${type.name}}>.`);
1358
+ }
1378
1359
 
1379
1360
  //#endregion
1380
1361
  //#region src/render/render.ts
@@ -1435,7 +1416,7 @@ function attempt(fiber, passive, render) {
1435
1416
  if (passive && !depth && empty && !fiber.stash) fiber.staging ||= fragment();
1436
1417
  const run = () => pass(() => {
1437
1418
  try {
1438
- reconcile(fiber, probed ? probed.output : consume(fiber, render), scope.childContext, fiber.boundary, renderedAppearance(fiber));
1419
+ reconcile(fiber, probed ? probed.output : consume(fiber, render), scope.context, fiber.boundary, renderedAppearance(fiber));
1439
1420
  if (fiber.staging) {
1440
1421
  fiber.end.parentNode.insertBefore(fiber.staging, fiber.end);
1441
1422
  attach(fiber.staging);
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 { Context, Model } 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\ninterface Renderable extends Model {\n props?: Record<string, any>;\n key?: Key;\n fallback?: RenderNode | false;\n catch?(error: Error, instance: Renderable): Promise<void> | void;\n mount?(): (() => void) | void;\n render?(props?: any): RenderNode;\n}\n\ntype Placement = Pick<Renderable, '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?: Renderable;\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(kind: Scope['kind'], context: Context, update: (passive: boolean) => void): Scope {\n return {\n active: true,\n childContext: context,\n context,\n kind,\n subscriptions: [],\n update,\n useIndex: 0,\n uses: []\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, Renderable };\n","import { Context, has, map } from '@expressive/mvc';\nimport { watch } from '@expressive/mvc/observable';\n\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('collection', 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 const value = fiber.value as Iterable<unknown>;\n return value instanceof map.Managed ? [...value.values()] : [...value];\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, Model, 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, commit, enter } from './adapter';\nimport { inserted } from './commits';\nimport { makeScope, range } from './fiber';\nimport type { Boundary, Fiber, Placement, Renderable } 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('function', context, (passive) => runFunction(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 runFunction(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 (...args: unknown[]) => Renderable;\n const props = observe(resolved.props);\n const instance: Renderable = new Type(props,\n Type.prototype instanceof Component ? undefined : () => props.is?.(instance)\n );\n\n return mountComponent(instance, parent, before, context, boundary, resolved.appearance, true, value.key, props);\n}\n\nfunction mountComponent(\n instance: Renderable,\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 = 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 = element.fallback !== undefined ? element.fallback : instance.fallback;\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: () => {\n const placed = owned ? (fiber.props as Placement).fallback : undefined;\n return placed !== undefined ? placed : instance.fallback;\n },\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('component', childContext, (passive) => runComponent(fiber, passive));\n fiber.render = () => enter(fiber.scope!, () => {\n const { render } = fiber.value as Renderable;\n return render ? unbind(render).call(fiber.value, fiber.props) : fiber.props!.children ?? null;\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 runComponent(fiber, passiveRender);\n });\n } finally {\n if (owned && !fiber.dead) inserted(fiber, () => (fiber.cleanup = instance.mount?.()));\n }\n\n return fiber;\n}\n\nfunction runFunction(fiber: Fiber, passive: boolean) {\n const result = attempt(fiber, passive, fiber.render!);\n\n if (result === true) inserted(fiber, () => commit(fiber.scope!));\n else return result;\n}\n\nfunction runComponent(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 fiber.scope!.hot = true;\n track(fiber.type as Function, fiber.scope!);\n }\n fiber.appearance = resolved.appearance;\n fiber.props = observe(resolved.props);\n rerun(fiber, () => runFunction(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 if (instance instanceof Component) (instance as any).props = props;\n else instance.set(merge(fiber.props!, props) as never);\n }\n fiber.props = props;\n rerun(fiber, () => runComponent(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 Renderable {\n return value instanceof Model && typeof (value as Renderable).render == 'function';\n}\n\nfunction merge(previous: Record<string, any>, next: Record<string, any>) {\n const output: Record<string, any> = {};\n for (const key in previous) output[key] = undefined;\n return { ...output, ...next };\n}\n\nexport { mountComponent, mountFunction, mountOwnedComponent, patchComponent, patchFunction, renderable, unmountComponent };\n","import { 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 (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.prototype instanceof Model)\n return mountOwnedComponent(value, parent, before, context, boundary, appearance);\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\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.childContext, 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) => 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 { 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 const value = fiber.value as Iterable<unknown>;\n return value instanceof map.Managed ? [...value.values()] : [...value];\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,4 +1,4 @@
1
- import { t as hot } from "./chunk-hot-9LhRiwFx.js";
1
+ import { t as hot } from "./chunk-hot-Bj-g5ynf.js";
2
2
  import { s as vnode } from "./chunk-vnode-wpCWQ_Zg.js";
3
3
  import { Fragment } from "@expressive/mvc/jsx-runtime";
4
4
 
@@ -41,7 +41,9 @@ declare module '@expressive/mvc/jsx-runtime' {
41
41
  node: Node;
42
42
  intrinsics: Intrinsics;
43
43
  element: () => PromiseLike<Module>;
44
- elementClass: Model;
44
+ elementClass: Model & {
45
+ render(props?: any): Component.Node;
46
+ };
45
47
  }
46
48
  }
47
49
  declare module '@expressive/mvc' {
@@ -71,12 +73,8 @@ declare const jsxs: typeof vnode;
71
73
  declare namespace JSX {
72
74
  type Element = JSX$1.Element;
73
75
  type ElementType = keyof IntrinsicElements | ((props: any) => Component.Node) | (() => PromiseLike<Module>) | (abstract new (...args: any[]) => ElementClass);
74
- /**
75
- * Any Model renders as a class element - one with `render` produces content,
76
- * one without passes children through and provides itself.
77
- */
78
76
  interface ElementClass extends Model {
79
- render?(props?: any): Component.Node;
77
+ render(props?: any): Component.Node;
80
78
  }
81
79
  /**
82
80
  * Empty, so a class element's attributes resolve from its instance type and
@@ -1 +1 @@
1
- {"version":3,"file":"jsx-runtime.js","names":[],"sources":["../src/jsx-runtime.ts"],"sourcesContent":["import { Fragment, host } from '@expressive/mvc/jsx-runtime';\nimport type { Component, Model } from '@expressive/mvc';\nimport type { JSX as Base } from '@expressive/mvc/jsx-runtime';\n\nimport { childrenOf, isVNode, vnode } from './node/vnode';\nimport type { Node, VNode } from './node/vnode';\nimport type { Attributes as Loaded, Module } from './node/loader';\n\ntype Words =\n | 'AnimationCancel' | 'AnimationEnd' | 'AnimationIteration' | 'AnimationStart'\n | 'AuxClick' | 'BeforeInput' | 'BeforeMatch' | 'BeforeToggle' | 'CanPlay' | 'CanPlayThrough'\n | 'CompositionEnd' | 'CompositionStart' | 'CompositionUpdate'\n | 'ContextLost' | 'ContextMenu' | 'ContextRestored' | 'CueChange' | 'DblClick'\n | 'DragEnd' | 'DragEnter' | 'DragLeave' | 'DragOver' | 'DragStart' | 'DurationChange'\n | 'FocusIn' | 'FocusOut' | 'FormData' | 'GotPointerCapture' | 'KeyDown' | 'KeyPress' | 'KeyUp'\n | 'LoadedData' | 'LoadedMetadata' | 'LoadStart' | 'LostPointerCapture'\n | 'MouseDown' | 'MouseEnter' | 'MouseLeave' | 'MouseMove' | 'MouseOut' | 'MouseOver' | 'MouseUp'\n | 'PointerCancel' | 'PointerDown' | 'PointerEnter' | 'PointerLeave' | 'PointerMove'\n | 'PointerOut' | 'PointerOver' | 'PointerRawUpdate' | 'PointerUp'\n | 'RateChange' | 'ScrollEnd' | 'SecurityPolicyViolation' | 'SelectionChange' | 'SelectStart'\n | 'SlotChange' | 'TimeUpdate' | 'TouchCancel' | 'TouchEnd' | 'TouchMove' | 'TouchStart'\n | 'TransitionCancel' | 'TransitionEnd' | 'TransitionRun' | 'TransitionStart' | 'VolumeChange';\n\ntype Cased = { [W in Words as Lowercase<W>]: W };\ntype EventName<K> = K extends keyof Cased ? Cased[K] : Capitalize<K & string>;\n\ntype EventAttributes<T extends Element> = {\n [K in keyof GlobalEventHandlersEventMap as `on${EventName<K>}`]?:\n (event: GlobalEventHandlersEventMap[K] & { currentTarget: T }) => unknown;\n} & {\n [K in keyof GlobalEventHandlersEventMap as `on${EventName<K>}Capture`]?:\n (event: GlobalEventHandlersEventMap[K] & { currentTarget: T }) => unknown;\n};\n\ntype Declarations = Partial<Record<keyof CSSStyleDeclaration, string | number | null>> & {\n [property: `--${string}`]: string | number | null | undefined;\n};\ntype Style = string | Declarations | false | null | undefined | readonly Style[];\n\ntype SVGAttributes = {\n [K in\n | 'clipPathUnits' | 'cx' | 'cy' | 'd' | 'dx' | 'dy' | 'fill' | 'filter' | 'fx' | 'fy'\n | 'gradientTransform' | 'gradientUnits' | 'height' | 'href' | 'in' | 'in2' | 'mask'\n | 'markerHeight' | 'markerUnits' | 'markerWidth' | 'maskUnits' | 'offset' | 'opacity'\n | 'orient' | 'pathLength' | 'patternUnits' | 'points' | 'preserveAspectRatio' | 'r'\n | 'refX' | 'refY' | 'result' | 'rotate' | 'rx' | 'ry' | 'stdDeviation' | 'stroke'\n | 'textLength' | 'transform' | 'type' | 'values' | 'version' | 'viewBox' | 'width'\n | 'x' | 'x1' | 'x2' | 'xmlns' | 'y' | 'y1' | 'y2']?: string | number;\n};\n\ntype Attributes<T extends Element> = EventAttributes<T> & {\n [K in keyof T as K extends 'children' | 'className' | 'style'\n ? never\n : T[K] extends Function\n ? never\n : K]?: T[K] | string | number | boolean;\n} & {\n children?: Node;\n className?: string;\n autoFocus?: boolean;\n onDoubleClick?: (event: MouseEvent & { currentTarget: T }) => unknown;\n dangerouslySetInnerHTML?: { __html: string };\n key?: string | number | null;\n ref?: ((node: T | null) => unknown) | { current: T | null };\n style?: Style;\n [attribute: `_${string}`]: unknown;\n [attribute: `data-${string}`]: unknown;\n [attribute: `aria-${string}`]: unknown;\n};\n\ntype Intrinsics = {\n [K in keyof HTMLElementTagNameMap]: Attributes<HTMLElementTagNameMap[K]>;\n} & {\n [K in keyof SVGElementTagNameMap]: Attributes<SVGElementTagNameMap[K]> & SVGAttributes;\n};\n\ndeclare module '@expressive/mvc/jsx-runtime' {\n interface Host {\n node: Node;\n intrinsics: Intrinsics;\n element: () => PromiseLike<Module>;\n elementClass: Model;\n }\n}\n\ndeclare module '@expressive/mvc' {\n namespace Model {\n /** JSX attributes of a Model with no `props` member: its settable fields, `is`, a boundary, and what `render` accepts. */\n type Props<T extends Model> =\n & Component.ModelProps<T>\n & {\n is?: (instance: T) => void;\n /** Shown while this element's content is suspended or recovering. `false` opts out. */\n fallback?: Reserved<T, 'fallback', Component.Node | false>;\n /** Called when this element's content throws. A returned promise retries once settled. */\n catch?: Reserved<T, 'catch', (error: Error, instance: T) => Promise<void> | void>;\n }\n & Component.RenderProps<T extends { render: infer R } ? R : never>;\n\n /** Boundary attribute type, narrowed by a member of the same name so a mismatch fails at the element. */\n type Reserved<T, K extends string, V> = K extends keyof T ? T[K] & V : V;\n }\n}\n\ndeclare module '@expressive/mvc/jsx-runtime' {\n namespace JSX {\n interface IntrinsicAttributes {\n style?: Style;\n [attribute: `_${string}`]: unknown;\n }\n }\n}\n\nhost({\n jsx: vnode,\n jsxs: vnode,\n Fragment,\n childrenOf,\n isElement: isVNode,\n typeOf(node: unknown) {\n return isVNode(node) ? node.type : undefined;\n },\n propsOf(node: unknown) {\n return isVNode(node) ? node.props : {};\n }\n});\n\nconst jsx = vnode;\nconst jsxs = vnode;\n\nexport { Fragment, jsx, jsxs };\nexport type { VNode as JSXElement };\nexport declare namespace JSX {\n type Element = Base.Element;\n type ElementType =\n | keyof IntrinsicElements\n | ((props: any) => Component.Node)\n | (() => PromiseLike<Module>)\n | (abstract new (...args: any[]) => ElementClass);\n /**\n * Any Model renders as a class element - one with `render` produces content,\n * one without passes children through and provides itself.\n */\n interface ElementClass extends Model { render?(props?: any): Component.Node }\n /**\n * Empty, so a class element's attributes resolve from its instance type and\n * {@link LibraryManagedAttributes} picks `props` when declared, else derives\n * them from the Model.\n */\n interface ElementAttributesProperty {}\n type LibraryManagedAttributes<C, P> =\n C extends abstract new (...args: any[]) => infer I\n ? P extends { props: infer Q } ? Q\n : I extends Model ? Model.Props<I>\n : P\n : C extends () => PromiseLike<Module<infer T>>\n ? Loaded<T>\n : P;\n interface ElementChildrenAttribute extends Base.ElementChildrenAttribute {}\n interface IntrinsicAttributes extends Base.IntrinsicAttributes {}\n type IntrinsicElements = Base.IntrinsicElements;\n}\n"],"mappings":";;;;AAiHA,KAAK;CACH,KAAK;CACL,MAAM;CACN;CACA;CACA,WAAW;CACX,OAAO,MAAe;AACpB,SAAO,QAAQ,KAAK,GAAG,KAAK,OAAO;;CAErC,QAAQ,MAAe;AACrB,SAAO,QAAQ,KAAK,GAAG,KAAK,QAAQ,EAAE;;CAEzC,CAAC;AAEF,MAAM,MAAM;AACZ,MAAM,OAAO"}
1
+ {"version":3,"file":"jsx-runtime.js","names":[],"sources":["../src/jsx-runtime.ts"],"sourcesContent":["import { Fragment, host } from '@expressive/mvc/jsx-runtime';\nimport type { Component, Model } from '@expressive/mvc';\nimport type { JSX as Base } from '@expressive/mvc/jsx-runtime';\n\nimport { childrenOf, isVNode, vnode } from './node/vnode';\nimport type { Node, VNode } from './node/vnode';\nimport type { Attributes as Loaded, Module } from './node/loader';\n\ntype Words =\n | 'AnimationCancel' | 'AnimationEnd' | 'AnimationIteration' | 'AnimationStart'\n | 'AuxClick' | 'BeforeInput' | 'BeforeMatch' | 'BeforeToggle' | 'CanPlay' | 'CanPlayThrough'\n | 'CompositionEnd' | 'CompositionStart' | 'CompositionUpdate'\n | 'ContextLost' | 'ContextMenu' | 'ContextRestored' | 'CueChange' | 'DblClick'\n | 'DragEnd' | 'DragEnter' | 'DragLeave' | 'DragOver' | 'DragStart' | 'DurationChange'\n | 'FocusIn' | 'FocusOut' | 'FormData' | 'GotPointerCapture' | 'KeyDown' | 'KeyPress' | 'KeyUp'\n | 'LoadedData' | 'LoadedMetadata' | 'LoadStart' | 'LostPointerCapture'\n | 'MouseDown' | 'MouseEnter' | 'MouseLeave' | 'MouseMove' | 'MouseOut' | 'MouseOver' | 'MouseUp'\n | 'PointerCancel' | 'PointerDown' | 'PointerEnter' | 'PointerLeave' | 'PointerMove'\n | 'PointerOut' | 'PointerOver' | 'PointerRawUpdate' | 'PointerUp'\n | 'RateChange' | 'ScrollEnd' | 'SecurityPolicyViolation' | 'SelectionChange' | 'SelectStart'\n | 'SlotChange' | 'TimeUpdate' | 'TouchCancel' | 'TouchEnd' | 'TouchMove' | 'TouchStart'\n | 'TransitionCancel' | 'TransitionEnd' | 'TransitionRun' | 'TransitionStart' | 'VolumeChange';\n\ntype Cased = { [W in Words as Lowercase<W>]: W };\ntype EventName<K> = K extends keyof Cased ? Cased[K] : Capitalize<K & string>;\n\ntype EventAttributes<T extends Element> = {\n [K in keyof GlobalEventHandlersEventMap as `on${EventName<K>}`]?:\n (event: GlobalEventHandlersEventMap[K] & { currentTarget: T }) => unknown;\n} & {\n [K in keyof GlobalEventHandlersEventMap as `on${EventName<K>}Capture`]?:\n (event: GlobalEventHandlersEventMap[K] & { currentTarget: T }) => unknown;\n};\n\ntype Declarations = Partial<Record<keyof CSSStyleDeclaration, string | number | null>> & {\n [property: `--${string}`]: string | number | null | undefined;\n};\ntype Style = string | Declarations | false | null | undefined | readonly Style[];\n\ntype SVGAttributes = {\n [K in\n | 'clipPathUnits' | 'cx' | 'cy' | 'd' | 'dx' | 'dy' | 'fill' | 'filter' | 'fx' | 'fy'\n | 'gradientTransform' | 'gradientUnits' | 'height' | 'href' | 'in' | 'in2' | 'mask'\n | 'markerHeight' | 'markerUnits' | 'markerWidth' | 'maskUnits' | 'offset' | 'opacity'\n | 'orient' | 'pathLength' | 'patternUnits' | 'points' | 'preserveAspectRatio' | 'r'\n | 'refX' | 'refY' | 'result' | 'rotate' | 'rx' | 'ry' | 'stdDeviation' | 'stroke'\n | 'textLength' | 'transform' | 'type' | 'values' | 'version' | 'viewBox' | 'width'\n | 'x' | 'x1' | 'x2' | 'xmlns' | 'y' | 'y1' | 'y2']?: string | number;\n};\n\ntype Attributes<T extends Element> = EventAttributes<T> & {\n [K in keyof T as K extends 'children' | 'className' | 'style'\n ? never\n : T[K] extends Function\n ? never\n : K]?: T[K] | string | number | boolean;\n} & {\n children?: Node;\n className?: string;\n autoFocus?: boolean;\n onDoubleClick?: (event: MouseEvent & { currentTarget: T }) => unknown;\n dangerouslySetInnerHTML?: { __html: string };\n key?: string | number | null;\n ref?: ((node: T | null) => unknown) | { current: T | null };\n style?: Style;\n [attribute: `_${string}`]: unknown;\n [attribute: `data-${string}`]: unknown;\n [attribute: `aria-${string}`]: unknown;\n};\n\ntype Intrinsics = {\n [K in keyof HTMLElementTagNameMap]: Attributes<HTMLElementTagNameMap[K]>;\n} & {\n [K in keyof SVGElementTagNameMap]: Attributes<SVGElementTagNameMap[K]> & SVGAttributes;\n};\n\ndeclare module '@expressive/mvc/jsx-runtime' {\n interface Host {\n node: Node;\n intrinsics: Intrinsics;\n element: () => PromiseLike<Module>;\n elementClass: Model & { render(props?: any): Component.Node };\n }\n}\n\ndeclare module '@expressive/mvc' {\n namespace Model {\n /** JSX attributes of a Model with no `props` member: its settable fields, `is`, a boundary, and what `render` accepts. */\n type Props<T extends Model> =\n & Component.ModelProps<T>\n & {\n is?: (instance: T) => void;\n /** Shown while this element's content is suspended or recovering. `false` opts out. */\n fallback?: Reserved<T, 'fallback', Component.Node | false>;\n /** Called when this element's content throws. A returned promise retries once settled. */\n catch?: Reserved<T, 'catch', (error: Error, instance: T) => Promise<void> | void>;\n }\n & Component.RenderProps<T extends { render: infer R } ? R : never>;\n\n /** Boundary attribute type, narrowed by a member of the same name so a mismatch fails at the element. */\n type Reserved<T, K extends string, V> = K extends keyof T ? T[K] & V : V;\n }\n}\n\ndeclare module '@expressive/mvc/jsx-runtime' {\n namespace JSX {\n interface IntrinsicAttributes {\n style?: Style;\n [attribute: `_${string}`]: unknown;\n }\n }\n}\n\nhost({\n jsx: vnode,\n jsxs: vnode,\n Fragment,\n childrenOf,\n isElement: isVNode,\n typeOf(node: unknown) {\n return isVNode(node) ? node.type : undefined;\n },\n propsOf(node: unknown) {\n return isVNode(node) ? node.props : {};\n }\n});\n\nconst jsx = vnode;\nconst jsxs = vnode;\n\nexport { Fragment, jsx, jsxs };\nexport type { VNode as JSXElement };\nexport declare namespace JSX {\n type Element = Base.Element;\n type ElementType =\n | keyof IntrinsicElements\n | ((props: any) => Component.Node)\n | (() => PromiseLike<Module>)\n | (abstract new (...args: any[]) => ElementClass);\n interface ElementClass extends Model { render(props?: any): Component.Node }\n /**\n * Empty, so a class element's attributes resolve from its instance type and\n * {@link LibraryManagedAttributes} picks `props` when declared, else derives\n * them from the Model.\n */\n interface ElementAttributesProperty {}\n type LibraryManagedAttributes<C, P> =\n C extends abstract new (...args: any[]) => infer I\n ? P extends { props: infer Q } ? Q\n : I extends Model ? Model.Props<I>\n : P\n : C extends () => PromiseLike<Module<infer T>>\n ? Loaded<T>\n : P;\n interface ElementChildrenAttribute extends Base.ElementChildrenAttribute {}\n interface IntrinsicAttributes extends Base.IntrinsicAttributes {}\n type IntrinsicElements = Base.IntrinsicElements;\n}\n"],"mappings":";;;;AAiHA,KAAK;CACH,KAAK;CACL,MAAM;CACN;CACA;CACA,WAAW;CACX,OAAO,MAAe;AACpB,SAAO,QAAQ,KAAK,GAAG,KAAK,OAAO;;CAErC,QAAQ,MAAe;AACrB,SAAO,QAAQ,KAAK,GAAG,KAAK,QAAQ,EAAE;;CAEzC,CAAC;AAEF,MAAM,MAAM;AACZ,MAAM,OAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expressive/dom",
3
- "version": "0.4.0",
3
+ "version": "0.5.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.89.0",
59
+ "@expressive/mvc": "^0.90.0",
60
60
  "vite": ">=5"
61
61
  },
62
62
  "peerDependenciesMeta": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunk-hot-9LhRiwFx.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 { Component, 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 UseModel extends Model {\n use?(...props: any[]): Promise<void> | void;\n mount?(): (() => void) | void;\n}\n\ninterface UseSlot {\n Type: Model.Type;\n context: Context;\n instance: UseModel;\n proxy: Model;\n release: () => void;\n mounted?: true;\n cleanup?: (() => void) | void;\n apply: (...args: any[]) => unknown;\n}\n\ninterface Scope extends Schedulable {\n active: boolean;\n childContext: Context;\n context: Context;\n hot?: boolean;\n kind: 'component' | 'function' | 'collection';\n subscriptions: (() => void)[];\n uses: UseSlot[];\n useIndex: number;\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 scope.childContext = scope.context;\n scope.useIndex = 0;\n\n try {\n const output = render();\n\n if (scope.kind == 'function' && scope.useIndex !== scope.uses.length) {\n if (!scope.hot)\n throw new Error('Model.use() calls must keep the same order on every function-component render.');\n\n truncate(scope, scope.useIndex);\n }\n\n return output;\n } finally {\n scope.hot = undefined;\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 truncate(scope, 0);\n}\n\n/** Destroy the `Model.use()` slots of a scope from `index` on. */\nfunction truncate(scope: Scope, index: number) {\n for (let i = scope.uses.length - 1; i >= index; i--) {\n const slot = scope.uses[i];\n\n slot.release();\n if (typeof slot.cleanup == 'function') slot.cleanup();\n slot.context.pop();\n slot.instance.set(null);\n }\n\n scope.uses.length = index;\n}\n\nfunction commit(scope: Scope) {\n for (const slot of scope.uses)\n if (!slot.mounted) {\n slot.mounted = true;\n slot.cleanup = slot.instance.mount?.();\n }\n}\n\nfunction requireScope(): Scope {\n if (!current)\n throw new Error('Model.get() and Model.use() 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 interface UseModel extends Model {\n use?(...props: any[]): Promise<void> | void;\n mount?(): (() => void) | void;\n }\n\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 type UseArgs<T extends Model> = T extends { use(...props: infer P): any }\n ? P\n : Model.Args<T>;\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 function use<T extends UseModel>(\n this: Model.Type<T>,\n ...args: UseArgs<T>\n ): T;\n }\n\n namespace Component {\n const use: never;\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 = scope.childContext.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\n(Model as any).use = function use<T extends UseModel>(\n this: Model.Type<T>,\n ...args: Model.UseArgs<T>\n) {\n const scope = requireScope();\n\n if (scope.kind != 'function')\n throw new Error('Model.use() is only available at the top level of a function component.');\n\n const index = scope.useIndex++;\n let slot = scope.uses[index] as UseSlot | undefined;\n\n if (slot && slot.Type !== this) {\n if (!scope.hot)\n throw new Error('Model.use() calls must keep the same order on every function-component render.');\n\n truncate(scope, index);\n slot = undefined;\n }\n\n if (!slot) {\n let instance!: T;\n const assign = (value: unknown) =>\n typeof value == 'object' && value && instance.set(value as Model.Assign<T>);\n let apply: (...values: any[]) => unknown = (...values) =>\n Promise.all(values.flat().map(assign));\n\n instance = new (this as any)((self: T) => {\n const own = self as T & UseModel;\n\n if (typeof own.use == 'function') {\n apply = own.use.bind(own);\n apply(...args);\n return;\n }\n\n return args;\n });\n const context = scope.childContext.push(instance);\n\n slot = {\n Type: this,\n context,\n instance,\n proxy: instance,\n release: undefined!,\n apply\n };\n\n let first = true;\n slot.release = watch(instance, (proxy) => {\n slot!.proxy = proxy;\n\n if (!first && scope.active) schedule(scope);\n first = false;\n }, undefined, transition);\n\n slot.apply = apply;\n scope.uses.push(slot);\n } else {\n slot.apply(...args);\n }\n\n scope.childContext = slot.context;\n return slot.proxy as T;\n};\n\nObject.defineProperty(Component, 'use', {\n configurable: true,\n value() {\n throw new Error(`${this} is a Component - render it instead of calling use().`);\n }\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, commit, 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) {\n scope.hot = true;\n schedule(scope);\n }\n }\n}\n\nexport { hot, latest, same, track, untrack };\n"],"mappings":"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"}