marko 6.1.2 → 6.1.4

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.
Files changed (38) hide show
  1. package/dist/common/accessor.d.ts +5 -0
  2. package/dist/common/accessor.debug.d.ts +5 -0
  3. package/dist/common/compat-meta.d.ts +0 -1
  4. package/dist/common/opt.d.ts +3 -1
  5. package/dist/common/types.d.ts +1 -1
  6. package/dist/debug/dom.js +315 -122
  7. package/dist/debug/dom.mjs +306 -123
  8. package/dist/debug/html.js +922 -712
  9. package/dist/debug/html.mjs +920 -713
  10. package/dist/dom/compat.d.ts +3 -2
  11. package/dist/dom/control-flow.d.ts +2 -1
  12. package/dist/dom/load.d.ts +23 -0
  13. package/dist/dom/queue.d.ts +4 -2
  14. package/dist/dom/resume.d.ts +10 -8
  15. package/dist/dom/signals.d.ts +4 -3
  16. package/dist/dom.d.ts +3 -2
  17. package/dist/dom.js +195 -66
  18. package/dist/dom.mjs +195 -66
  19. package/dist/html/assets.d.ts +47 -0
  20. package/dist/html/compat.d.ts +3 -2
  21. package/dist/html/inlined-runtimes.d.ts +1 -1
  22. package/dist/html/inlined-runtimes.debug.d.ts +1 -1
  23. package/dist/html/serializer.d.ts +14 -9
  24. package/dist/html/writer.d.ts +34 -15
  25. package/dist/html.d.ts +1 -0
  26. package/dist/html.js +502 -345
  27. package/dist/html.mjs +502 -345
  28. package/dist/translator/index.d.ts +1 -0
  29. package/dist/translator/index.js +342 -76
  30. package/dist/translator/interop/index.d.ts +1 -0
  31. package/dist/translator/util/marko-config.d.ts +2 -0
  32. package/dist/translator/util/references.d.ts +1 -5
  33. package/dist/translator/util/runtime.d.ts +1 -0
  34. package/dist/translator/util/tag-name-type.d.ts +2 -0
  35. package/dist/translator/util/walks.d.ts +1 -1
  36. package/dist/translator/visitors/import-declaration.d.ts +10 -1
  37. package/dist/translator/visitors/tag/custom-tag.d.ts +7 -0
  38. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- import { RendererProp } from "../common/types";
1
+ import { RendererProp, type Scope } from "../common/types";
2
2
  import { patchDynamicTag } from "./control-flow";
3
3
  import { queueEffect } from "./queue";
4
4
  import { type Renderer } from "./renderer";
@@ -6,7 +6,8 @@ export declare const compat: {
6
6
  patchDynamicTag: typeof patchDynamicTag;
7
7
  queueEffect: typeof queueEffect;
8
8
  init(warp10Noop: any): void;
9
- registerRenderer(fn: any): void;
9
+ getScope($global: Record<string, unknown>, scopeId: unknown): Scope | undefined;
10
+ setRendererId(renderer: any, id: unknown): void;
10
11
  isRenderer(renderer: any): any;
11
12
  getStartNode(branch: any): any;
12
13
  setScopeNodes(branch: any, startNode: Node, endNode: Node): void;
@@ -1,8 +1,9 @@
1
- import { type Accessor, AccessorProp, type BranchScope, type EncodedAccessor, type Scope } from "../common/types";
1
+ import { type Accessor, AccessorProp, type AwaitCounter, type BranchScope, type EncodedAccessor, type Scope } from "../common/types";
2
2
  import { type Renderer, type SetupFn } from "./renderer";
3
3
  import { type Signal } from "./signals";
4
4
  export declare function _await_promise(nodeAccessor: EncodedAccessor, params?: Signal<unknown>): (scope: Scope, promise: Promise<unknown>) => void;
5
5
  export declare function _await_content(nodeAccessor: EncodedAccessor, template?: string | 0, walks?: string | 0, setup?: SetupFn | 0): (scope: Scope) => void;
6
+ export declare function addAwaitCounter(scope: Scope, tryBranch?: BranchScope | undefined): AwaitCounter | undefined;
6
7
  export declare function _try(nodeAccessor: EncodedAccessor, template?: string | 0, walks?: string | 0, setup?: SetupFn | 0): (scope: Scope, input: {
7
8
  catch: unknown;
8
9
  placeholder: unknown;
@@ -0,0 +1,23 @@
1
+ import { type EncodedAccessor, type Scope, type Template } from "../common/types";
2
+ import { type Renderer, type SetupFn } from "./renderer";
3
+ import type { Signal } from "./signals";
4
+ interface LoadModule {
5
+ _: [template: string, walks: string, setup: SetupFn];
6
+ }
7
+ interface LoadSignal {
8
+ _: Signal;
9
+ }
10
+ export interface LoadTrigger {
11
+ <T>(load: () => Promise<T>): () => Promise<T>;
12
+ }
13
+ export declare function _load_template(id: string, load: () => Promise<Renderer>): Template & Renderer;
14
+ export declare function _load_setup(nodeAccessor: EncodedAccessor, childScopeAccessor: EncodedAccessor, load: () => Promise<LoadModule>): (owner: Scope) => void;
15
+ export declare function _load_signal(load: () => Promise<LoadSignal>): Signal;
16
+ export declare function _load_visible_trigger(selector: string, options?: IntersectionObserverInit): LoadTrigger;
17
+ export declare function _load_idle_trigger(options?: {
18
+ timeout?: number;
19
+ }): LoadTrigger;
20
+ export declare function _load_event_trigger(event: string, selector: string): LoadTrigger;
21
+ export declare function _load_media_trigger(query: string): LoadTrigger;
22
+ export declare function _load_race_trigger(...triggers: LoadTrigger[]): LoadTrigger;
23
+ export {};
@@ -4,7 +4,7 @@ type ExecFn<S extends Scope = Scope> = (scope: S, arg?: any) => void;
4
4
  export type PendingRender = {
5
5
  [PendingRenderProp.Key]: number;
6
6
  [PendingRenderProp.Scope]: Scope;
7
- [PendingRenderProp.Signal]: Signal<any>;
7
+ [PendingRenderProp.Signal]: Signal<any, any>;
8
8
  [PendingRenderProp.Value]: unknown;
9
9
  };
10
10
  export declare const caughtError: WeakSet<unknown[]>;
@@ -12,11 +12,13 @@ export declare const placeholderShown: WeakSet<unknown[]>;
12
12
  export declare let pendingEffects: unknown[];
13
13
  export declare let pendingScopes: Scope[];
14
14
  export declare let rendering: undefined | 0 | 1;
15
- export declare function queueRender<T>(scope: Scope, signal: Signal<T>, signalKey: number, value?: T, scopeKey?: number): void;
15
+ export declare function queueRender<T, U extends Scope = Scope>(scope: U, signal: Signal<T, U>, signalKey: number, value?: T, scopeKey?: number): void;
16
16
  export declare function queuePendingRender(render: PendingRender): void;
17
17
  export declare function queueEffect<S extends Scope, T extends ExecFn<S>>(scope: S, fn: T): void;
18
18
  export declare function run(): void;
19
+ export declare function queueAsyncRender<T, U extends Scope = Scope>(scope: U, signal: Signal<T, U>, value?: T): void;
19
20
  export declare function prepareEffects(fn: () => void): unknown[];
20
21
  export declare let runEffects: (effects: unknown[], checkPending?: boolean | 1) => void;
22
+ export declare function skipDestroyedRenders(): void;
21
23
  export declare function _enable_catch(): void;
22
24
  export {};
@@ -1,7 +1,11 @@
1
1
  import { type AwaitCounter, type EncodedAccessor, type Scope } from "../common/types";
2
2
  import { type Signal } from "./signals";
3
- type Resumes = (number | Scope)[];
4
- type ResumeFn = (ctx: object) => Resumes;
3
+ type ResumeFn = (ctx: SerializeContext) => unknown;
4
+ type ResumeData = (string | number | (string | number)[] | ResumeFn)[];
5
+ interface SerializeContext {
6
+ (data: number | (Scope | number)[], registryId?: string): unknown;
7
+ _: Record<string, unknown>;
8
+ }
5
9
  export interface Renders {
6
10
  (renderId: string): RenderData;
7
11
  [renderId: string]: RenderData;
@@ -9,12 +13,10 @@ export interface Renders {
9
13
  export interface RenderData {
10
14
  i: string;
11
15
  v: Comment[];
12
- r?: (string | ResumeFn)[];
13
- s?: Record<string, Scope>;
16
+ r?: ResumeData;
14
17
  w(): void;
15
- m?(): unknown[];
16
- n?: Text;
17
- b?: 0 | Record<string, 1 | 0>;
18
+ m?(effects: unknown[]): unknown[];
19
+ b?: Record<string, ResumeData>;
18
20
  d: never;
19
21
  l: never;
20
22
  x: never;
@@ -22,7 +24,7 @@ export interface RenderData {
22
24
  p?: Record<string | number, AwaitCounter>;
23
25
  }
24
26
  export declare function enableBranches(): void;
25
- export declare const ready: (id: string) => void;
27
+ export declare function ready(readyId: string, runtimeId?: string): void;
26
28
  export declare function initEmbedded(readyId: string, runtimeId?: string): void;
27
29
  export declare function init(runtimeId?: string): void;
28
30
  export declare let isResuming: undefined | 0 | 1;
@@ -1,7 +1,8 @@
1
1
  import { type Accessor, AccessorProp, type EncodedAccessor, type Scope } from "../common/types";
2
2
  export type SignalFn = (scope: Scope) => void;
3
- export type Signal<T> = (scope: Scope, value: T) => void;
4
- export declare function _let<T>(id: EncodedAccessor, fn?: SignalFn): (scope: Scope, value: T, valueChange?: (v: T) => void) => T;
3
+ export type Signal<T = unknown, U extends Scope = Scope> = (scope: U, value: T) => void;
4
+ export declare function _let<T>(id: EncodedAccessor, fn?: SignalFn): (scope: Scope, value: T) => T;
5
+ export declare function _let_change<T>(id: EncodedAccessor, fn?: SignalFn): (scope: Scope, value: T, valueChange?: (v: T) => void) => T;
5
6
  export declare function _const<T>(valueAccessor: EncodedAccessor, fn?: SignalFn): Signal<T>;
6
7
  export declare function _or(id: number, fn: SignalFn, defaultPending?: number, scopeIdAccessor?: EncodedAccessor): Signal<never>;
7
8
  export declare function _for_closure(ownerLoopNodeAccessor: EncodedAccessor, fn: SignalFn): SignalFn;
@@ -15,7 +16,7 @@ export declare function _closure_get(valueAccessor: EncodedAccessor, fn: SignalF
15
16
  };
16
17
  export declare function _child_setup(setup: Signal<never> & {
17
18
  _: Signal<Scope>;
18
- }): Signal<never> & {
19
+ }): Signal<never, Scope> & {
19
20
  _: Signal<Scope>;
20
21
  };
21
22
  export declare function _var(scope: Scope, childAccessor: EncodedAccessor, signal: Signal<unknown>): void;
package/dist/dom.d.ts CHANGED
@@ -8,8 +8,9 @@ export { _await_content, _await_promise, _dynamic_tag, _for_in, _for_of, _for_to
8
8
  export { _attr_details_or_dialog_open as _attr_details_open, _attr_details_or_dialog_open_default as _attr_details_open_default, _attr_details_or_dialog_open_script as _attr_details_open_script, _attr_details_or_dialog_open as _attr_dialog_open, _attr_details_or_dialog_open_default as _attr_dialog_open_default, _attr_details_or_dialog_open_script as _attr_dialog_open_script, _attr_input_checked, _attr_input_checked_default, _attr_input_checked_script, _attr_input_checkedValue, _attr_input_checkedValue_default, _attr_input_checkedValue_script, _attr_input_value, _attr_input_value_default, _attr_input_value_script, _attr_select_value, _attr_select_value_default, _attr_select_value_script, _attr_input_value as _attr_textarea_value, _attr_input_value_default as _attr_textarea_value_default, _attr_input_value_script as _attr_textarea_value_script, } from "./dom/controllable";
9
9
  export { _attr, _attr_class, _attr_class_item, _attr_class_items, _attr_content, _attr_nonce, _attr_style, _attr_style_item, _attr_style_items, _attrs, _attrs_content, _attrs_partial, _attrs_partial_content, _attrs_script, _html, _lifecycle, _text, _text_content, _to_text, } from "./dom/dom";
10
10
  export { _on } from "./dom/event";
11
+ export { _load_event_trigger, _load_idle_trigger, _load_media_trigger, _load_race_trigger, _load_setup, _load_signal, _load_template, _load_visible_trigger, } from "./dom/load";
11
12
  export { _enable_catch, run } from "./dom/queue";
12
13
  export { _content, _content_closures, _content_resume } from "./dom/renderer";
13
- export { _el, _resume, _var_resume, init, initEmbedded } from "./dom/resume";
14
- export { _child_setup, _closure, _closure_get, _const, _el_read, _for_closure, _hoist, _hoist_resume, _id, _if_closure, _let, _or, _return, _return_change, _script, _var, _var_change, } from "./dom/signals";
14
+ export { _el, _resume, _var_resume, init, initEmbedded, ready, } from "./dom/resume";
15
+ export { _child_setup, _closure, _closure_get, _const, _el_read, _for_closure, _hoist, _hoist_resume, _id, _if_closure, _let, _let_change, _or, _return, _return_change, _script, _var, _var_change, } from "./dom/signals";
15
16
  export { _template } from "./dom/template";
package/dist/dom.js CHANGED
@@ -20,10 +20,7 @@ let empty = [], rest = Symbol(), toDelimitedString = function toDelimitedString(
20
20
  for (value = 10 * currentMultiplier + value - 107; value--;) walker.parentNode();
21
21
  walker.nextSibling();
22
22
  } else storedMultiplier = currentMultiplier * 10 + value - 117;
23
- }, cloneCache = {}, registeredValues = {}, curRuntimeId, readyLookup, branchesEnabled, embedEnabled, ready = /* @__PURE__ */ ((_) => (id) => {
24
- let cb = readyLookup[id];
25
- readyLookup[id] = 1, cb?.();
26
- })(readyLookup = {}), isResuming, inputType = "", controllableDelegate = /* @__PURE__ */ createDelegator(), _dynamic_tag = function(nodeAccessor, getContent, getTagVar, inputIsArgs) {
23
+ }, cloneCache = {}, registeredValues = {}, curRenders, branchesEnabled, embedRenders, readyIds, isResuming, inputType = "", controllableDelegate = /* @__PURE__ */ createDelegator(), _dynamic_tag = function(nodeAccessor, getContent, getTagVar, inputIsArgs) {
27
24
  nodeAccessor = decodeAccessor(nodeAccessor);
28
25
  let childScopeAccessor = "A" + nodeAccessor, rendererAccessor = "D" + nodeAccessor;
29
26
  return enableBranches(), (scope, newRenderer, getInput) => {
@@ -54,16 +51,22 @@ let empty = [], rest = Symbol(), toDelimitedString = function toDelimitedString(
54
51
  typeof by == "string" ? forOf(all, (item, i) => cb(item[by], [item, i])) : forOf(all, (item, i) => cb(by(item, i), [item, i]));
55
52
  }), _for_in = /* @__PURE__ */ loop(([obj, by = byFirstArg], cb) => forIn(obj, (key, value) => cb(by(key, value), [key, value]))), _for_to = /* @__PURE__ */ loop(([to, from, step, by = byFirstArg], cb) => forTo(to, from, step, (v) => cb(by(v), [v]))), _for_until = /* @__PURE__ */ loop(([until, from, step, by = byFirstArg], cb) => forUntil(until, from, step, (v) => cb(by(v), [v]))), pendingRenders = [], pendingRendersLookup = {}, asyncRendersLookup, caughtError = /* @__PURE__ */ new WeakSet(), placeholderShown = /* @__PURE__ */ new WeakSet(), pendingEffects = [], pendingScopes = [], rendering, runEffects = ((effects) => {
56
53
  for (let i = 0; i < effects.length;) effects[i++](effects[i++]);
57
- }), runRender = (render) => render.c(render.b, render.d), catchEnabled, classIdToBranch = /* @__PURE__ */ new Map(), compat = {
54
+ }), runRender = (render) => render.c(render.b, render.d), catchEnabled, classIdToBranch = /* @__PURE__ */ new Map(), scopesByRender = /* @__PURE__ */ new WeakMap(), getRenderScopes = ($global) => {
55
+ let render = self[$global.runtimeId]?.[$global.renderId], scopes = render && scopesByRender.get(render);
56
+ return render && !scopes && scopesByRender.set(render, scopes = {}), scopes;
57
+ }, compat = {
58
58
  patchDynamicTag,
59
59
  queueEffect,
60
60
  init(warp10Noop) {
61
- _resume("$C_s", (branch) => {
62
- classIdToBranch.set(branch.m5c, branch);
61
+ _resume("$C_s", (scope) => {
62
+ getRenderScopes(scope.$)[scope.L] = scope, scope.m5c && classIdToBranch.set(scope.m5c, scope);
63
63
  }), _resume("$C_b", warp10Noop);
64
64
  },
65
- registerRenderer(fn) {
66
- _resume("$C_r", fn);
65
+ getScope($global, scopeId) {
66
+ return getRenderScopes($global)?.[scopeId];
67
+ },
68
+ setRendererId(renderer, id) {
69
+ renderer.a = id;
67
70
  },
68
71
  isRenderer(renderer) {
69
72
  return renderer.b;
@@ -81,7 +84,7 @@ let empty = [], rest = Symbol(), toDelimitedString = function toDelimitedString(
81
84
  this.scope && destroyBranch(this.scope);
82
85
  },
83
86
  resolveRegistered(value, $global) {
84
- return Array.isArray(value) && typeof value[0] == "string" ? getRegisteredWithScope(value[0], value.length === 2 && self[$global.runtimeId]?.[$global.renderId]?.s[value[1]]) : value;
87
+ return Array.isArray(value) && typeof value[0] == "string" ? getRegisteredWithScope(value[0], getRenderScopes($global)?.[value[1]]) : value;
85
88
  },
86
89
  createRenderer(params, clone) {
87
90
  let renderer = _content("", 0, 0, 0, params)();
@@ -249,7 +252,7 @@ function schedule() {
249
252
  isScheduled || (isScheduled = 1, queueMicrotask(flushAndWaitFrame));
250
253
  }
251
254
  function flushAndWaitFrame() {
252
- run(), requestAnimationFrame(triggerMacroTask);
255
+ requestAnimationFrame(triggerMacroTask), run();
253
256
  }
254
257
  function triggerMacroTask() {
255
258
  channel || (channel = new MessageChannel(), channel.port1.onmessage = () => {
@@ -259,13 +262,17 @@ function triggerMacroTask() {
259
262
  //#endregion
260
263
  //#region src/dom/signals.ts
261
264
  function _let(id, fn) {
262
- let valueAccessor = decodeAccessor(id), valueChangeAccessor = "M" + valueAccessor;
263
- return (scope, value, valueChange) => (rendering ? ((scope[valueChangeAccessor] = valueChange) && scope[valueAccessor] !== value || scope.H) && (scope[valueAccessor] = value, fn?.(scope)) : scope[valueChangeAccessor] ? scope[valueChangeAccessor](value) : scope[valueAccessor] !== (scope[valueAccessor] = value) && fn && (schedule(), queueRender(scope, fn, id)), value);
265
+ let valueAccessor = decodeAccessor(id);
266
+ return (scope, value) => (rendering ? scope.H && (scope[valueAccessor] = value, fn?.(scope)) : (scope[valueAccessor] !== value || !(valueAccessor in scope)) && (scope[valueAccessor] = value, fn) && (schedule(), queueRender(scope, fn, id)), value);
267
+ }
268
+ function _let_change(id, fn) {
269
+ let valueAccessor = decodeAccessor(id), valueChangeAccessor = "M" + valueAccessor, base = _let(id, fn);
270
+ return (scope, value, valueChange) => (rendering ? (scope[valueChangeAccessor] = valueChange) && (scope[valueAccessor] !== value || !(valueAccessor in scope)) ? (scope[valueAccessor] = value, fn?.(scope)) : base(scope, value) : scope[valueChangeAccessor] ? scope[valueChangeAccessor](value) : base(scope, value), value);
264
271
  }
265
272
  function _const(valueAccessor, fn) {
266
- return valueAccessor = decodeAccessor(valueAccessor), (scope, value) => {
267
- (scope.H || scope[valueAccessor] !== value) && (scope[valueAccessor] = value, fn?.(scope));
268
- };
273
+ return valueAccessor = decodeAccessor(valueAccessor), ((scope, value) => {
274
+ (scope[valueAccessor] !== value || !(valueAccessor in scope)) && (scope[valueAccessor] = value, fn?.(scope));
275
+ });
269
276
  }
270
277
  function _or(id, fn, defaultPending = 1, scopeIdAccessor = "L") {
271
278
  return scopeIdAccessor !== "L" && (scopeIdAccessor = decodeAccessor(scopeIdAccessor)), (scope) => {
@@ -406,29 +413,37 @@ function createCloneableHTML(html, ns) {
406
413
  //#endregion
407
414
  //#region src/dom/resume.ts
408
415
  function enableBranches() {
409
- branchesEnabled = 1;
416
+ branchesEnabled || (branchesEnabled = 1, skipDestroyedRenders());
417
+ }
418
+ function ready(readyId, runtimeId) {
419
+ (readyIds ||= /* @__PURE__ */ new Set()).add(readyId), init(runtimeId);
420
+ for (let renderId in curRenders) runResumeEffects(curRenders[renderId]);
410
421
  }
411
422
  function initEmbedded(readyId, runtimeId) {
412
- embedEnabled = 1, ready(readyId), init(runtimeId), new MutationObserver(() => {
413
- let renders = self[curRuntimeId];
414
- for (let renderId in renders) {
415
- let { s, n } = renders[renderId];
416
- if (n && !n.isConnected) {
417
- delete renders[renderId];
418
- for (let id in s) destroyScope(s[id]);
419
- }
423
+ embedRenders || (embedRenders = /* @__PURE__ */ new Map(), new MutationObserver(() => {
424
+ for (let [anchor, [renderId, scopes]] of embedRenders) if (!anchor.isConnected) {
425
+ embedRenders.delete(anchor), delete curRenders[renderId];
426
+ for (let id in scopes) destroyScope(scopes[id]);
420
427
  }
421
- }).observe(document.body, {
428
+ }).observe(document, {
422
429
  childList: !0,
423
430
  subtree: !0
424
- });
431
+ })), ready(readyId, runtimeId);
425
432
  }
426
433
  function init(runtimeId = "M") {
427
- if (curRuntimeId) return;
428
- curRuntimeId = runtimeId;
429
- let resumeRender, renders = self[runtimeId], defineRuntime = (desc) => Object.defineProperty(self, runtimeId, desc), initRuntime = (renders) => {
430
- defineRuntime({ value: resumeRender = ((renderId) => {
431
- let render = resumeRender[renderId] = renders[renderId] || renders(renderId), walk = render.w, scopeLookup = render.s = {}, getScope = (id) => scopeLookup[id] ||= { L: +id }, serializeContext = { _: registeredValues }, visitBranches = branchesEnabled && ((branchScopesStack = [], branchStarts = [], orphanBranches = [], curBranchScopes) => (branchId, branch, endedBranches, accessor, singleNode, parent = visit.parentNode, startVisit = visit, i = orphanBranches.length) => {
434
+ if (curRenders) return;
435
+ let renders = self[runtimeId], defineRuntime = (desc) => Object.defineProperty(self, runtimeId, desc), initRuntime = (renders) => {
436
+ defineRuntime({ value: curRenders = ((renderId) => {
437
+ let render = curRenders[renderId] = renders[renderId] || renders(renderId), walk = render.w, scopeLookup = {}, getScope = (id) => scopeLookup[id] || initScope(scopeLookup[id] = { L: +id }), initGlobal = () => $global ||= {
438
+ runtimeId,
439
+ renderId
440
+ }, initScope = (scope) => (scope.$ = initGlobal(), branchesEnabled && scope.G && (scope.F = getScope(scope.G)), scope), applyScopes = (partials) => {
441
+ let scopeId = partials[0];
442
+ for (let i = 1; i < partials.length; i++) {
443
+ let partial = partials[i];
444
+ typeof partial == "number" ? scopeId += partial : (scopeId ? initScope(Object.assign(scopeLookup[scopeId] ||= (partial.L = scopeId, partial), partial)) : Object.assign(initGlobal(), partial), scopeId++);
445
+ }
446
+ }, serializeContext = ((data, registryId) => typeof data == "number" ? registryId ? registeredValues[registryId](getScope(data)) : getScope(data) : applyScopes(data)), createVisitBranches = (branchScopesStack = [], branchStarts = [], orphanBranches = [], curBranchScopes) => (branchId, branch, endedBranches, accessor, singleNode, parent = visit.parentNode, startVisit = visit, i = orphanBranches.length) => {
432
447
  for (visitType !== "[" && (visitScope[nextToken()] = visitType === ")" || visitType === "}" ? parent : visit, accessor = "A" + lastToken, singleNode = visitType !== "]" && visitType !== ")", nextToken()); branchId = +lastToken;) {
433
448
  if ((endedBranches ||= []).push(branch = getScope(branchId)), setParentBranch(branch, branch.F), (branch.O = render.p?.[branchId]) && (branch.O.m = render.m), singleNode) {
434
449
  for (; startVisit.previousSibling && ~visits.indexOf(startVisit = startVisit.previousSibling););
@@ -437,22 +452,40 @@ function init(runtimeId = "M") {
437
452
  for (; i && orphanBranches[--i].L > branchId;) setParentBranch(orphanBranches.pop(), branch);
438
453
  nextToken();
439
454
  }
440
- endedBranches && (orphanBranches.push(...endedBranches), singleNode && (visitScope[accessor] = endedBranches.length > 1 ? endedBranches.reverse() : endedBranches[0])), visitType === "[" && (endedBranches || (branchScopesStack.push(curBranchScopes), curBranchScopes = void 0), branchStarts.push(visit));
441
- })(), nextToken = () => lastToken = visitText.slice(lastTokenIndex, (lastTokenIndex = visitText.indexOf(" ", lastTokenIndex) + 1 || visitText.length + 1) - 1), $global, lastEffect, visits, resumes, visit, visitText, visitType, visitScope, lastToken, lastTokenIndex, lastScopeId = 0;
442
- return render.m = (effects = []) => {
443
- if (readyLookup) {
444
- for (let readyId in render.b) if (readyLookup[readyId] !== 1) return readyLookup[readyId] = ((prev) => () => {
445
- runResumeEffects(render), prev?.();
446
- })(readyLookup[readyId]), effects;
447
- render.b = 0;
455
+ if (endedBranches) {
456
+ for (let ended of endedBranches) orphanBranches.push(ended);
457
+ singleNode && (visitScope[accessor] = endedBranches.length > 1 ? endedBranches.reverse() : endedBranches[0]);
458
+ }
459
+ visitType === "[" && (endedBranches || (branchScopesStack.push(curBranchScopes), curBranchScopes = void 0), branchStarts.push(visit));
460
+ }, nextToken = () => lastToken = visitText.slice(lastTokenIndex, (lastTokenIndex = visitText.indexOf(" ", lastTokenIndex) + 1 || visitText.length + 1) - 1), processResumes = (resumes = [], effects) => {
461
+ let i = 0;
462
+ for (; i < resumes.length; i++) {
463
+ let serialized = resumes[i];
464
+ if (typeof serialized == "string") for (lastTokenIndex = 0, visitText = serialized; nextToken();) /\D/.test(lastToken) ? lastEffect = registeredValues[lastToken] : effects.push(lastEffect, getScope(lastToken));
465
+ else if (Array.isArray(serialized)) {
466
+ if (!(readyIds && serialized.every((dep) => readyIds.has(dep) && !render.b[dep].length))) break;
467
+ } else if (readyIds && typeof serialized == "number") break;
468
+ else {
469
+ let scopes = serialized(serializeContext);
470
+ Array.isArray(scopes) && applyScopes(scopes);
471
+ }
472
+ }
473
+ return resumes.splice(0, i), i;
474
+ }, $global, lastEffect, visits, visit, visitText, visitType, visitScope, lastToken, lastTokenIndex, visitBranches, embedAnchor;
475
+ return serializeContext._ = registeredValues, render.m = (effects) => {
476
+ if (processResumes(render.r, effects), readyIds && render.b) for (let progress = 1; progress;) {
477
+ progress = 0;
478
+ for (let readyId of readyIds) {
479
+ let resumes = render.b[readyId];
480
+ resumes && processResumes(resumes, effects) && (progress = 1);
481
+ }
448
482
  }
449
- for (let serialized of resumes = render.r || []) if (typeof serialized == "string") for (lastTokenIndex = 0, visitText = serialized; nextToken();) /\D/.test(lastToken) ? lastEffect = registeredValues[lastToken] : effects.push(lastEffect, getScope(lastToken));
450
- else for (let scope of serialized(serializeContext)) $global ? typeof scope == "number" ? lastScopeId += scope : (scopeLookup[scope.L = ++lastScopeId] = scope, scope.$ = $global, branchesEnabled && (scope.F = getScope(scope.G))) : ($global = scope || {}, $global.runtimeId = runtimeId, $global.renderId = renderId);
483
+ let retained = 0;
451
484
  for (visit of visits = render.v) if (lastTokenIndex = render.i.length, visitText = visit.data, visitType = visitText[lastTokenIndex++], visitScope = getScope(nextToken()), visitType === "*") {
452
485
  let prev = visit.previousSibling;
453
486
  visitScope[nextToken()] = prev && (prev.nodeType < 8 || prev.data) ? prev : visit.parentNode.insertBefore(new Text(), visit);
454
- } else branchesEnabled && visitBranches();
455
- return embedEnabled && (render.n ||= visit?.parentNode.insertBefore(new Text(), visit.nextSibling)), visits.length = resumes.length = 0, effects;
487
+ } else branchesEnabled ? (visitBranches ||= createVisitBranches())() : render.b && (visits[retained++] = visit);
488
+ return embedRenders && !embedAnchor && visit && embedRenders.set(embedAnchor = visit.parentNode.insertBefore(new Text(), visit.nextSibling), [renderId, scopeLookup]), visits.length = retained, effects;
456
489
  }, render.w = () => {
457
490
  walk(), runResumeEffects(render);
458
491
  }, render;
@@ -460,7 +493,7 @@ function init(runtimeId = "M") {
460
493
  };
461
494
  if (renders) {
462
495
  initRuntime(renders);
463
- for (let renderId in renders) runResumeEffects(resumeRender(renderId));
496
+ for (let renderId in renders) runResumeEffects(curRenders(renderId));
464
497
  } else defineRuntime({
465
498
  configurable: !0,
466
499
  set: initRuntime
@@ -468,7 +501,7 @@ function init(runtimeId = "M") {
468
501
  }
469
502
  function runResumeEffects(render) {
470
503
  try {
471
- isResuming = 1, runEffects(render.m(), 1);
504
+ isResuming = 1, runEffects(render.m([]), 1);
472
505
  } finally {
473
506
  isResuming = 0;
474
507
  }
@@ -826,32 +859,24 @@ function _await_promise(nodeAccessor, params) {
826
859
  nodeAccessor = decodeAccessor(nodeAccessor);
827
860
  let promiseAccessor = "L" + nodeAccessor, branchAccessor = "A" + nodeAccessor;
828
861
  return _enable_catch(), (scope, promise) => {
829
- let awaitBranch = scope[branchAccessor], tryBranch = findBranchWithKey(scope, "Q") || awaitBranch, awaitCounter = tryBranch.O;
830
- awaitCounter?.i || (awaitCounter = tryBranch.O = {
862
+ let awaitBranch = scope[branchAccessor], tryPlaceholder = findBranchWithKey(scope, "Q"), tryBranch = tryPlaceholder || awaitBranch, awaitCounter = tryBranch.O;
863
+ placeholderShown.add(pendingEffects), tryPlaceholder ? scope[promiseAccessor] || (awaitBranch && (awaitBranch.W ||= []), awaitCounter = addAwaitCounter(scope, tryPlaceholder)) : (awaitCounter?.i || (awaitCounter = tryBranch.O = {
831
864
  i: 0,
832
865
  c() {
833
866
  if (--awaitCounter.i) return 1;
834
- if (tryBranch === scope[branchAccessor]) scope[nodeAccessor].parentNode && scope[nodeAccessor].replaceWith(scope[branchAccessor].S.parentNode);
835
- else {
836
- let placeholderBranch = tryBranch.P;
837
- placeholderBranch && (tryBranch.P = 0, placeholderBranch.S.parentNode.insertBefore(tryBranch.S.parentNode, placeholderBranch.S), removeAndDestroyBranch(placeholderBranch));
838
- }
839
- queueEffect(tryBranch, (scope) => {
840
- let pendingEffects = scope.J;
841
- pendingEffects && (scope.J = [], runEffects(pendingEffects, 1));
842
- });
867
+ tryBranch === scope[branchAccessor] ? scope[nodeAccessor].parentNode && scope[nodeAccessor].replaceWith(scope[branchAccessor].S.parentNode) : dismissPlaceholder(tryBranch), queueEffect(tryBranch, runPendingEffects);
843
868
  }
844
- }), placeholderShown.add(pendingEffects), scope[promiseAccessor] || (awaitBranch && (awaitBranch.W ||= []), awaitCounter.i++ || requestAnimationFrame(() => awaitCounter.i && runEffects(prepareEffects(() => queueRender(tryBranch === awaitBranch ? scope : tryBranch, () => {
845
- tryBranch.Q ? (insertBranchBefore(tryBranch.P = createAndSetupBranch(scope.$, tryBranch.Q, tryBranch._, tryBranch.S.parentNode), tryBranch.S.parentNode, tryBranch.S), tempDetachBranch(tryBranch)) : awaitBranch.V || (awaitBranch.S.parentNode.insertBefore(scope[nodeAccessor], awaitBranch.S), tempDetachBranch(tryBranch));
846
- }, -1)))));
869
+ }), scope[promiseAccessor] || (awaitBranch && (awaitBranch.W ||= []), awaitCounter.i++ || requestAnimationFrame(() => awaitCounter.i && runEffects(prepareEffects(() => queueRender(scope, () => {
870
+ awaitBranch.V || (awaitBranch.S.parentNode.insertBefore(scope[nodeAccessor], awaitBranch.S), tempDetachBranch(tryBranch));
871
+ }, -1))))));
847
872
  let thisPromise = scope[promiseAccessor] = promise.then((data) => {
848
873
  if (thisPromise === scope[promiseAccessor]) {
849
874
  let referenceNode = scope[nodeAccessor];
850
- scope[promiseAccessor] = 0, queueMicrotask(run), queueRender(scope, () => {
875
+ scope[promiseAccessor] = 0, queueAsyncRender(scope, () => {
851
876
  (awaitBranch = scope[branchAccessor]).V && (pendingScopes.push(awaitBranch), setupBranch(awaitBranch.V, awaitBranch), awaitBranch.V = 0, insertBranchBefore(awaitBranch, scope[nodeAccessor].parentNode, scope[nodeAccessor]), referenceNode.remove()), params?.(awaitBranch, [data]);
852
877
  let pendingRenders = awaitBranch.W;
853
878
  if (awaitBranch.W = 0, pendingRenders?.forEach(queuePendingRender), placeholderShown.add(pendingEffects), awaitCounter.c(), awaitCounter.m) {
854
- let fnScopes = /* @__PURE__ */ new Map(), effects = awaitCounter.m();
879
+ let fnScopes = /* @__PURE__ */ new Map(), effects = awaitCounter.m([]);
855
880
  for (let i = 0; i < pendingEffects.length;) {
856
881
  let fn = pendingEffects[i++], scopes = fnScopes.get(fn);
857
882
  scopes || fnScopes.set(fn, scopes = /* @__PURE__ */ new Set()), scopes.add(pendingEffects[i++]);
@@ -861,10 +886,10 @@ function _await_promise(nodeAccessor, params) {
861
886
  fnScopes.get(fn)?.has(scope) || queueEffect(scope, fn);
862
887
  }
863
888
  }
864
- }, -1);
889
+ });
865
890
  }
866
891
  }, (error) => {
867
- thisPromise === scope[promiseAccessor] && (awaitCounter.i = scope[promiseAccessor] = 0, schedule(), queueRender(scope, renderCatch, -1, error));
892
+ thisPromise === scope[promiseAccessor] && (awaitCounter.i = scope[promiseAccessor] = 0, queueAsyncRender(scope, renderCatch, error));
868
893
  });
869
894
  };
870
895
  }
@@ -875,6 +900,27 @@ function _await_content(nodeAccessor, template, walks, setup) {
875
900
  (scope[branchAccessor] = createBranch(scope.$, renderer, scope, scope[nodeAccessor].parentNode)).V = renderer, pendingScopes.pop();
876
901
  };
877
902
  }
903
+ function addAwaitCounter(scope, tryBranch = findBranchWithKey(scope, "Q")) {
904
+ if (!tryBranch) return;
905
+ let awaitCounter = tryBranch.O;
906
+ return awaitCounter?.i || (awaitCounter = tryBranch.O = {
907
+ i: 0,
908
+ c() {
909
+ if (--awaitCounter.i) return 1;
910
+ dismissPlaceholder(tryBranch), queueEffect(tryBranch, runPendingEffects);
911
+ }
912
+ }), placeholderShown.add(pendingEffects), awaitCounter.i++ || requestAnimationFrame(() => awaitCounter.i && runEffects(prepareEffects(() => queueRender(tryBranch, () => {
913
+ insertBranchBefore(tryBranch.P = createAndSetupBranch(tryBranch.$, tryBranch.Q, tryBranch._, tryBranch.S.parentNode), tryBranch.S.parentNode, tryBranch.S), tempDetachBranch(tryBranch);
914
+ }, -1)))), awaitCounter;
915
+ }
916
+ function runPendingEffects(scope) {
917
+ let effects = scope.J;
918
+ effects && (scope.J = [], runEffects(effects, 1));
919
+ }
920
+ function dismissPlaceholder(tryBranch) {
921
+ let placeholderBranch = tryBranch.P;
922
+ placeholderBranch && (tryBranch.P = 0, placeholderBranch.S.parentNode.insertBefore(tryBranch.S.parentNode, placeholderBranch.S), removeAndDestroyBranch(placeholderBranch));
923
+ }
878
924
  function _try(nodeAccessor, template, walks, setup) {
879
925
  nodeAccessor = decodeAccessor(nodeAccessor);
880
926
  let branchAccessor = "A" + nodeAccessor, renderer = _content("", template, walks, setup)();
@@ -992,6 +1038,9 @@ function run() {
992
1038
  }
993
1039
  runEffects(effects);
994
1040
  }
1041
+ function queueAsyncRender(scope, signal, value) {
1042
+ queueRender(scope, signal, -1, value), queueMicrotask(run);
1043
+ }
995
1044
  function prepareEffects(fn) {
996
1045
  let prevRenders = pendingRenders, prevEffects = pendingEffects, prevLookup = asyncRendersLookup, preparedEffects = pendingEffects = [];
997
1046
  pendingRenders = [], asyncRendersLookup = pendingRendersLookup, pendingRendersLookup = {};
@@ -1014,11 +1063,16 @@ function runRenders() {
1014
1063
  }
1015
1064
  pendingRenders[i] = item;
1016
1065
  }
1017
- render.b.F?.I || runRender(render);
1066
+ runRender(render);
1018
1067
  }
1019
1068
  for (let scope of pendingScopes) scope.H = 0;
1020
1069
  pendingScopes = [];
1021
1070
  }
1071
+ function skipDestroyedRenders() {
1072
+ runRender = ((runRender) => (render) => {
1073
+ render.b.F?.I || runRender(render);
1074
+ })(runRender);
1075
+ }
1022
1076
  function _enable_catch() {
1023
1077
  if (!catchEnabled) {
1024
1078
  catchEnabled = 1, enableBranches();
@@ -1107,9 +1161,84 @@ function mount(input = {}, reference, position) {
1107
1161
  }
1108
1162
  };
1109
1163
  }
1164
+ //#endregion
1165
+ //#region src/dom/load.ts
1166
+ function _load_template(id, load) {
1167
+ _enable_catch();
1168
+ let pending, lazyTemplate = _template(id, 0, 0, (branch) => {
1169
+ let awaitCounter = addAwaitCounter(branch);
1170
+ branch.X ||= /* @__PURE__ */ new Map(), (pending ||= load()).then((renderer) => {
1171
+ Object.assign(lazyTemplate, renderer), queueAsyncRender(branch, (branch) => insertLoaded(renderer, branch, branch.S, awaitCounter));
1172
+ }, loadFailed(branch, awaitCounter));
1173
+ }, _load_signal(() => (pending ||= load()).then((r) => ({ _: r.d }))));
1174
+ return lazyTemplate;
1175
+ }
1176
+ function _load_setup(nodeAccessor, childScopeAccessor, load) {
1177
+ nodeAccessor = decodeAccessor(nodeAccessor), childScopeAccessor = decodeAccessor(childScopeAccessor);
1178
+ let pending, renderer;
1179
+ return _enable_catch(), (owner) => {
1180
+ let child = owner[childScopeAccessor];
1181
+ if (renderer) insertLoaded(renderer, child, owner[nodeAccessor]);
1182
+ else {
1183
+ let awaitCounter = addAwaitCounter(owner);
1184
+ child.X ||= /* @__PURE__ */ new Map(), (pending ||= load()).then((mod) => {
1185
+ renderer = _content("", ...mod._)(), queueAsyncRender(child, (child) => insertLoaded(renderer, child, owner[nodeAccessor], awaitCounter));
1186
+ }, loadFailed(child, awaitCounter));
1187
+ }
1188
+ };
1189
+ }
1190
+ function insertLoaded(renderer, branch, marker, awaitCounter) {
1191
+ let parent = marker.parentNode;
1192
+ branch.H = 1, renderer.b(branch, parent.namespaceURI), setupBranch(renderer, branch), applyLoad(branch, () => {
1193
+ insertBranchBefore(branch, parent, marker), marker.remove(), pendingScopes.push(branch), awaitCounter?.c();
1194
+ });
1195
+ }
1196
+ function loadFailed(scope, awaitCounter) {
1197
+ return (error) => {
1198
+ awaitCounter && (awaitCounter.i = 0), queueAsyncRender(scope, renderCatch, error);
1199
+ };
1200
+ }
1201
+ function applyLoad(scope, insert) {
1202
+ let values = scope.X, remaining;
1203
+ if (scope.X = 0, remaining = values?.size) for (let [promise, entry] of values) promise.then((signal) => {
1204
+ entry.b = signal, --remaining || (scope.H = 1, pendingScopes.push(scope), queueAsyncRender(scope, (scope) => {
1205
+ values.forEach((e) => e.b._(scope, e.a)), insert();
1206
+ }));
1207
+ }, () => 0);
1208
+ else insert();
1209
+ }
1210
+ function _load_signal(load) {
1211
+ let pending, signal;
1212
+ return (scope, value) => {
1213
+ pending ||= load(), scope.X || !("X" in scope) && scope.H ? (scope.X ||= /* @__PURE__ */ new Map()).set(pending, { a: value }) : signal ? signal(scope, value) : pending.then((mod) => queueAsyncRender(scope, signal = mod._, value), () => 0);
1214
+ };
1215
+ }
1216
+ function _load_visible_trigger(selector, options) {
1217
+ let pending, el;
1218
+ return (load) => () => (pending ||= new Promise((resolve) => (el = getSelectorOrResolve(selector, resolve)) && new IntersectionObserver((entries, io) => entries.some((entry) => entry.isIntersecting) && resolve(io.disconnect()), options).observe(el))).then(load);
1219
+ }
1220
+ function _load_idle_trigger(options) {
1221
+ let pending;
1222
+ return (load) => () => (pending ||= new Promise((resolve) => (self.requestIdleCallback || resolve)(resolve, options))).then(load);
1223
+ }
1224
+ function _load_event_trigger(event, selector) {
1225
+ let pending;
1226
+ return (load) => () => (pending ||= new Promise((resolve) => getSelectorOrResolve(selector, resolve)?.addEventListener(event, resolve, { once: !0 }))).then(load);
1227
+ }
1228
+ function _load_media_trigger(query) {
1229
+ let pending, mql;
1230
+ return (load) => () => (pending ||= new Promise((resolve) => (mql = matchMedia(query)).matches ? resolve() : mql.addEventListener("change", resolve, { once: !0 }))).then(load);
1231
+ }
1232
+ function _load_race_trigger(...triggers) {
1233
+ let noop = () => Promise.resolve(), pending;
1234
+ return (load) => () => (pending ||= Promise.race(triggers.map((t) => t(noop)()))).then(load);
1235
+ }
1236
+ function getSelectorOrResolve(selector, resolve) {
1237
+ return document.querySelector(selector) || resolve();
1238
+ }
1110
1239
  exports.$signal = $signal, exports.$signalReset = $signalReset, exports._assert_hoist = _assert_hoist, exports._assert_init = _assert_init, exports._attr = _attr, exports._attr_class = _attr_class, exports._attr_class_item = _attr_class_item, exports._attr_class_items = _attr_class_items, exports._attr_content = _attr_content, exports._attr_details_open = _attr_details_or_dialog_open, exports._attr_dialog_open = _attr_details_or_dialog_open, exports._attr_details_open_default = _attr_details_or_dialog_open_default, exports._attr_dialog_open_default = _attr_details_or_dialog_open_default, exports._attr_details_open_script = _attr_details_or_dialog_open_script, exports._attr_dialog_open_script = _attr_details_or_dialog_open_script, exports._attr_input_checked = _attr_input_checked, exports._attr_input_checkedValue = _attr_input_checkedValue, exports._attr_input_checkedValue_default = _attr_input_checkedValue_default, exports._attr_input_checkedValue_script = _attr_input_checkedValue_script, exports._attr_input_checked_default = _attr_input_checked_default, exports._attr_input_checked_script = _attr_input_checked_script, exports._attr_input_value = _attr_input_value, exports._attr_textarea_value = _attr_input_value, exports._attr_input_value_default = _attr_input_value_default, exports._attr_textarea_value_default = _attr_input_value_default, exports._attr_input_value_script = _attr_input_value_script, exports._attr_textarea_value_script = _attr_input_value_script, exports._attr_nonce = _attr_nonce, exports._attr_select_value = _attr_select_value, exports._attr_select_value_default = _attr_select_value_default, exports._attr_select_value_script = _attr_select_value_script, exports._attr_style = _attr_style, exports._attr_style_item = _attr_style_item, exports._attr_style_items = _attr_style_items, exports._attrs = _attrs, exports._attrs_content = _attrs_content, exports._attrs_partial = _attrs_partial, exports._attrs_partial_content = _attrs_partial_content, exports._attrs_script = _attrs_script, exports._await_content = _await_content, exports._await_promise = _await_promise, exports._call = _call, exports._child_setup = _child_setup, exports._closure = _closure, exports._closure_get = _closure_get, exports._const = _const, exports._content = _content, exports._content_closures = _content_closures, exports._content_resume = _content_resume, Object.defineProperty(exports, "_dynamic_tag", {
1111
1240
  enumerable: !0,
1112
1241
  get: function() {
1113
1242
  return _dynamic_tag;
1114
1243
  }
1115
- }), exports._el = _el, exports._el_read = _el_read, exports._enable_catch = _enable_catch, exports._for_closure = _for_closure, exports._for_in = _for_in, exports._for_of = _for_of, exports._for_to = _for_to, exports._for_until = _for_until, exports._hoist = _hoist, exports._hoist_resume = _hoist_resume, exports._html = _html, exports._id = _id, exports._if = _if, exports._if_closure = _if_closure, exports._let = _let, exports._lifecycle = _lifecycle, exports._on = _on, exports._or = _or, exports._resume = _resume, exports._resume_dynamic_tag = _resume_dynamic_tag, exports._return = _return, exports._return_change = _return_change, exports._script = _script, exports._template = _template, exports._text = _text, exports._text_content = _text_content, exports._to_text = _to_text, exports._try = _try, exports._var = _var, exports._var_change = _var_change, exports._var_resume = _var_resume, exports.attrTag = attrTag, exports.attrTags = attrTags, exports.compat = compat, exports.forIn = forIn, exports.forOf = forOf, exports.forTo = forTo, exports.forUntil = forUntil, exports.init = init, exports.initEmbedded = initEmbedded, exports.run = run;
1244
+ }), exports._el = _el, exports._el_read = _el_read, exports._enable_catch = _enable_catch, exports._for_closure = _for_closure, exports._for_in = _for_in, exports._for_of = _for_of, exports._for_to = _for_to, exports._for_until = _for_until, exports._hoist = _hoist, exports._hoist_resume = _hoist_resume, exports._html = _html, exports._id = _id, exports._if = _if, exports._if_closure = _if_closure, exports._let = _let, exports._let_change = _let_change, exports._lifecycle = _lifecycle, exports._load_event_trigger = _load_event_trigger, exports._load_idle_trigger = _load_idle_trigger, exports._load_media_trigger = _load_media_trigger, exports._load_race_trigger = _load_race_trigger, exports._load_setup = _load_setup, exports._load_signal = _load_signal, exports._load_template = _load_template, exports._load_visible_trigger = _load_visible_trigger, exports._on = _on, exports._or = _or, exports._resume = _resume, exports._resume_dynamic_tag = _resume_dynamic_tag, exports._return = _return, exports._return_change = _return_change, exports._script = _script, exports._template = _template, exports._text = _text, exports._text_content = _text_content, exports._to_text = _to_text, exports._try = _try, exports._var = _var, exports._var_change = _var_change, exports._var_resume = _var_resume, exports.attrTag = attrTag, exports.attrTags = attrTags, exports.compat = compat, exports.forIn = forIn, exports.forOf = forOf, exports.forTo = forTo, exports.forUntil = forUntil, exports.init = init, exports.initEmbedded = initEmbedded, exports.ready = ready, exports.run = run;