marko 6.1.3 → 6.1.5

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.
@@ -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,10 +12,11 @@ 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;
21
22
  export declare function skipDestroyedRenders(): void;
@@ -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;
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 { _el, _resume, _var_resume, init, initEmbedded, ready, } from "./dom/resume";
14
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)();
@@ -412,27 +415,35 @@ function createCloneableHTML(html, ns) {
412
415
  function enableBranches() {
413
416
  branchesEnabled || (branchesEnabled = 1, skipDestroyedRenders());
414
417
  }
418
+ function ready(readyId, runtimeId) {
419
+ (readyIds ||= /* @__PURE__ */ new Set()).add(readyId), init(runtimeId);
420
+ for (let renderId in curRenders) runResumeEffects(curRenders[renderId]);
421
+ }
415
422
  function initEmbedded(readyId, runtimeId) {
416
- embedEnabled = 1, ready(readyId), init(runtimeId), new MutationObserver(() => {
417
- let renders = self[curRuntimeId];
418
- for (let renderId in renders) {
419
- let { s, n } = renders[renderId];
420
- if (n && !n.isConnected) {
421
- delete renders[renderId];
422
- for (let id in s) destroyScope(s[id]);
423
- }
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]);
424
427
  }
425
- }).observe(document.body, {
428
+ }).observe(document, {
426
429
  childList: !0,
427
430
  subtree: !0
428
- });
431
+ })), ready(readyId, runtimeId);
429
432
  }
430
433
  function init(runtimeId = "M") {
431
- if (curRuntimeId) return;
432
- curRuntimeId = runtimeId;
433
- let resumeRender, renders = self[runtimeId], defineRuntime = (desc) => Object.defineProperty(self, runtimeId, desc), initRuntime = (renders) => {
434
- defineRuntime({ value: resumeRender = ((renderId) => {
435
- 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) => {
436
447
  for (visitType !== "[" && (visitScope[nextToken()] = visitType === ")" || visitType === "}" ? parent : visit, accessor = "A" + lastToken, singleNode = visitType !== "]" && visitType !== ")", nextToken()); branchId = +lastToken;) {
437
448
  if ((endedBranches ||= []).push(branch = getScope(branchId)), setParentBranch(branch, branch.F), (branch.O = render.p?.[branchId]) && (branch.O.m = render.m), singleNode) {
438
449
  for (; startVisit.previousSibling && ~visits.indexOf(startVisit = startVisit.previousSibling););
@@ -441,22 +452,40 @@ function init(runtimeId = "M") {
441
452
  for (; i && orphanBranches[--i].L > branchId;) setParentBranch(orphanBranches.pop(), branch);
442
453
  nextToken();
443
454
  }
444
- 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));
445
- })(), 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;
446
- return render.m = (effects = []) => {
447
- if (readyLookup) {
448
- for (let readyId in render.b) if (readyLookup[readyId] !== 1) return readyLookup[readyId] = ((prev) => () => {
449
- runResumeEffects(render), prev?.();
450
- })(readyLookup[readyId]), effects;
451
- 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
+ }
452
482
  }
453
- 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));
454
- 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;
455
484
  for (visit of visits = render.v) if (lastTokenIndex = render.i.length, visitText = visit.data, visitType = visitText[lastTokenIndex++], visitScope = getScope(nextToken()), visitType === "*") {
456
485
  let prev = visit.previousSibling;
457
486
  visitScope[nextToken()] = prev && (prev.nodeType < 8 || prev.data) ? prev : visit.parentNode.insertBefore(new Text(), visit);
458
- } else branchesEnabled && visitBranches();
459
- 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;
460
489
  }, render.w = () => {
461
490
  walk(), runResumeEffects(render);
462
491
  }, render;
@@ -464,7 +493,7 @@ function init(runtimeId = "M") {
464
493
  };
465
494
  if (renders) {
466
495
  initRuntime(renders);
467
- for (let renderId in renders) runResumeEffects(resumeRender(renderId));
496
+ for (let renderId in renders) runResumeEffects(curRenders(renderId));
468
497
  } else defineRuntime({
469
498
  configurable: !0,
470
499
  set: initRuntime
@@ -472,7 +501,7 @@ function init(runtimeId = "M") {
472
501
  }
473
502
  function runResumeEffects(render) {
474
503
  try {
475
- isResuming = 1, runEffects(render.m(), 1);
504
+ isResuming = 1, runEffects(render.m([]), 1);
476
505
  } finally {
477
506
  isResuming = 0;
478
507
  }
@@ -830,32 +859,24 @@ function _await_promise(nodeAccessor, params) {
830
859
  nodeAccessor = decodeAccessor(nodeAccessor);
831
860
  let promiseAccessor = "L" + nodeAccessor, branchAccessor = "A" + nodeAccessor;
832
861
  return _enable_catch(), (scope, promise) => {
833
- let awaitBranch = scope[branchAccessor], tryBranch = findBranchWithKey(scope, "Q") || awaitBranch, awaitCounter = tryBranch.O;
834
- 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 = {
835
864
  i: 0,
836
865
  c() {
837
866
  if (--awaitCounter.i) return 1;
838
- if (tryBranch === scope[branchAccessor]) scope[nodeAccessor].parentNode && scope[nodeAccessor].replaceWith(scope[branchAccessor].S.parentNode);
839
- else {
840
- let placeholderBranch = tryBranch.P;
841
- placeholderBranch && (tryBranch.P = 0, placeholderBranch.S.parentNode.insertBefore(tryBranch.S.parentNode, placeholderBranch.S), removeAndDestroyBranch(placeholderBranch));
842
- }
843
- queueEffect(tryBranch, (scope) => {
844
- let pendingEffects = scope.J;
845
- pendingEffects && (scope.J = [], runEffects(pendingEffects, 1));
846
- });
867
+ tryBranch === scope[branchAccessor] ? scope[nodeAccessor].parentNode && scope[nodeAccessor].replaceWith(scope[branchAccessor].S.parentNode) : dismissPlaceholder(tryBranch), queueEffect(tryBranch, runPendingEffects);
847
868
  }
848
- }), placeholderShown.add(pendingEffects), scope[promiseAccessor] || (awaitBranch && (awaitBranch.W ||= []), awaitCounter.i++ || requestAnimationFrame(() => awaitCounter.i && runEffects(prepareEffects(() => queueRender(tryBranch === awaitBranch ? scope : tryBranch, () => {
849
- 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));
850
- }, -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))))));
851
872
  let thisPromise = scope[promiseAccessor] = promise.then((data) => {
852
873
  if (thisPromise === scope[promiseAccessor]) {
853
874
  let referenceNode = scope[nodeAccessor];
854
- scope[promiseAccessor] = 0, queueMicrotask(run), queueRender(scope, () => {
875
+ scope[promiseAccessor] = 0, queueAsyncRender(scope, () => {
855
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]);
856
877
  let pendingRenders = awaitBranch.W;
857
878
  if (awaitBranch.W = 0, pendingRenders?.forEach(queuePendingRender), placeholderShown.add(pendingEffects), awaitCounter.c(), awaitCounter.m) {
858
- let fnScopes = /* @__PURE__ */ new Map(), effects = awaitCounter.m();
879
+ let fnScopes = /* @__PURE__ */ new Map(), effects = awaitCounter.m([]);
859
880
  for (let i = 0; i < pendingEffects.length;) {
860
881
  let fn = pendingEffects[i++], scopes = fnScopes.get(fn);
861
882
  scopes || fnScopes.set(fn, scopes = /* @__PURE__ */ new Set()), scopes.add(pendingEffects[i++]);
@@ -865,10 +886,10 @@ function _await_promise(nodeAccessor, params) {
865
886
  fnScopes.get(fn)?.has(scope) || queueEffect(scope, fn);
866
887
  }
867
888
  }
868
- }, -1);
889
+ });
869
890
  }
870
891
  }, (error) => {
871
- 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));
872
893
  });
873
894
  };
874
895
  }
@@ -879,6 +900,27 @@ function _await_content(nodeAccessor, template, walks, setup) {
879
900
  (scope[branchAccessor] = createBranch(scope.$, renderer, scope, scope[nodeAccessor].parentNode)).V = renderer, pendingScopes.pop();
880
901
  };
881
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
+ }
882
924
  function _try(nodeAccessor, template, walks, setup) {
883
925
  nodeAccessor = decodeAccessor(nodeAccessor);
884
926
  let branchAccessor = "A" + nodeAccessor, renderer = _content("", template, walks, setup)();
@@ -996,6 +1038,9 @@ function run() {
996
1038
  }
997
1039
  runEffects(effects);
998
1040
  }
1041
+ function queueAsyncRender(scope, signal, value) {
1042
+ queueRender(scope, signal, -1, value), queueMicrotask(run);
1043
+ }
999
1044
  function prepareEffects(fn) {
1000
1045
  let prevRenders = pendingRenders, prevEffects = pendingEffects, prevLookup = asyncRendersLookup, preparedEffects = pendingEffects = [];
1001
1046
  pendingRenders = [], asyncRendersLookup = pendingRendersLookup, pendingRendersLookup = {};
@@ -1116,9 +1161,84 @@ function mount(input = {}, reference, position) {
1116
1161
  }
1117
1162
  };
1118
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
+ }
1119
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", {
1120
1240
  enumerable: !0,
1121
1241
  get: function() {
1122
1242
  return _dynamic_tag;
1123
1243
  }
1124
- }), 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._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;