marko 6.1.9 → 6.1.11

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/dist/dom.js CHANGED
@@ -49,7 +49,7 @@ let empty = [], rest = Symbol(), toDelimitedString = function toDelimitedString(
49
49
  };
50
50
  }, _for_of = /* @__PURE__ */ loop(([all, by = bySecondArg], cb) => {
51
51
  typeof by == "string" ? forOf(all, (item, i) => cb(item[by], [item, i])) : forOf(all, (item, i) => cb(by(item, i), [item, i]));
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) => {
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]))), runId = 1, pendingRenders = [], caughtError = /* @__PURE__ */ new WeakSet(), placeholderShown = /* @__PURE__ */ new WeakSet(), pendingEffects = [], pendingScopes = [], rendering, scopeKeyOffset = 1e3, runEffects = ((effects) => {
53
53
  for (let i = 0; i < effects.length;) effects[i++](effects[i++]);
54
54
  }), runRender = (render) => render.c(render.b, render.d), catchEnabled, classIdToBranch = /* @__PURE__ */ new Map(), scopesByRender = /* @__PURE__ */ new WeakMap(), getRenderScopes = ($global) => {
55
55
  let render = self[$global.runtimeId]?.[$global.renderId], scopes = render && scopesByRender.get(render);
@@ -158,6 +158,9 @@ function isEventHandler(name) {
158
158
  function getEventHandlerName(name) {
159
159
  return name[2] === "-" ? name.slice(3) : name.slice(2).toLowerCase();
160
160
  }
161
+ function isNotVoid(value) {
162
+ return value != null && value !== !1;
163
+ }
161
164
  function normalizeDynamicRenderer(value) {
162
165
  if (value) {
163
166
  if (typeof value == "string") return value;
@@ -522,14 +525,14 @@ function _el(id, accessor) {
522
525
  //#endregion
523
526
  //#region src/dom/controllable.ts
524
527
  function _attr_input_checked_default(scope, nodeAccessor, checked) {
525
- let el = scope[nodeAccessor], normalizedChecked = normalizeBoolProp(checked);
528
+ let el = scope[nodeAccessor], normalizedChecked = isNotVoid(checked);
526
529
  if (el.defaultChecked !== normalizedChecked) {
527
530
  let restoreValue = scope.H ? normalizedChecked : el.checked;
528
531
  el.defaultChecked = normalizedChecked, restoreValue !== normalizedChecked && (el.checked = restoreValue);
529
532
  }
530
533
  }
531
534
  function _attr_input_checked(scope, nodeAccessor, checked, checkedChange) {
532
- let el = scope[nodeAccessor], normalizedChecked = normalizeBoolProp(checked);
535
+ let el = scope[nodeAccessor], normalizedChecked = isNotVoid(checked);
533
536
  scope["E" + nodeAccessor] = checkedChange, scope["F" + nodeAccessor] = checkedChange ? 0 : 5, checkedChange && !scope.H ? el.checked = normalizedChecked : _attr_input_checked_default(scope, nodeAccessor, normalizedChecked);
534
537
  }
535
538
  function _attr_input_checked_script(scope, nodeAccessor) {
@@ -544,11 +547,11 @@ function _attr_input_checked_script(scope, nodeAccessor) {
544
547
  }
545
548
  function _attr_input_checkedValue_default(scope, nodeAccessor, checkedValue, value) {
546
549
  let multiple = Array.isArray(checkedValue), normalizedValue = normalizeStrProp(value), normalizedCheckedValue = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
547
- _attr(scope[nodeAccessor], "value", normalizedValue), _attr_input_checked_default(scope, nodeAccessor, multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue);
550
+ _attr(scope[nodeAccessor], "value", value), _attr_input_checked_default(scope, nodeAccessor, multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue);
548
551
  }
549
552
  function _attr_input_checkedValue(scope, nodeAccessor, checkedValue, checkedValueChange, value) {
550
- let el = scope[nodeAccessor], multiple = Array.isArray(checkedValue), normalizedValue = normalizeStrProp(value), normalizedCheckedValue = scope["G" + nodeAccessor] = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
551
- _attr(el, "value", normalizedValue), scope["E" + nodeAccessor] = checkedValueChange, scope["F" + nodeAccessor] = checkedValueChange ? 1 : 5, checkedValueChange && !scope.H ? el.checked = multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue : _attr_input_checkedValue_default(scope, nodeAccessor, normalizedCheckedValue, normalizedValue);
553
+ let el = scope[nodeAccessor], multiple = Array.isArray(checkedValue), normalizedCheckedValue = scope["G" + nodeAccessor] = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
554
+ scope["E" + nodeAccessor] = checkedValueChange, scope["F" + nodeAccessor] = checkedValueChange ? 1 : 5, checkedValueChange && !scope.H ? (el.checked = multiple ? normalizedCheckedValue.includes(normalizeStrProp(value)) : normalizeStrProp(value) === normalizedCheckedValue, _attr(el, "value", value)) : _attr_input_checkedValue_default(scope, nodeAccessor, checkedValue, value);
552
555
  }
553
556
  function _attr_input_checkedValue_script(scope, nodeAccessor) {
554
557
  let el = scope[nodeAccessor];
@@ -563,14 +566,14 @@ function _attr_input_checkedValue_script(scope, nodeAccessor) {
563
566
  });
564
567
  }
565
568
  function _attr_input_value_default(scope, nodeAccessor, value) {
566
- let el = scope[nodeAccessor], normalizedValue = normalizeStrProp(value);
569
+ let el = scope[nodeAccessor], normalizedValue = normalizeAttrValue(value) || "";
567
570
  if (el.defaultValue !== normalizedValue) {
568
571
  let restoreValue = scope.H ? normalizedValue : el.value;
569
572
  el.defaultValue = normalizedValue, setInputValue(el, restoreValue);
570
573
  }
571
574
  }
572
575
  function _attr_input_value(scope, nodeAccessor, value, valueChange) {
573
- let el = scope[nodeAccessor], normalizedValue = normalizeStrProp(value);
576
+ let el = scope[nodeAccessor], normalizedValue = normalizeAttrValue(value) || "";
574
577
  scope["E" + nodeAccessor] = valueChange, scope["G" + nodeAccessor] = normalizedValue, scope["F" + nodeAccessor] = valueChange ? 2 : 5, valueChange && !scope.H ? setInputValue(el, normalizedValue) : _attr_input_value_default(scope, nodeAccessor, normalizedValue);
575
578
  }
576
579
  function _attr_input_value_script(scope, nodeAccessor) {
@@ -634,10 +637,10 @@ function getSelectValue(el, multiple) {
634
637
  return multiple ? Array.from(el.selectedOptions, (opt) => opt.value) : el.value;
635
638
  }
636
639
  function _attr_details_or_dialog_open_default(scope, nodeAccessor, open) {
637
- scope.H && (scope[nodeAccessor].open = normalizeBoolProp(open));
640
+ scope.H && (scope[nodeAccessor].open = isNotVoid(open));
638
641
  }
639
642
  function _attr_details_or_dialog_open(scope, nodeAccessor, open, openChange) {
640
- let normalizedOpen = scope["G" + nodeAccessor] = normalizeBoolProp(open);
643
+ let normalizedOpen = scope["G" + nodeAccessor] = isNotVoid(open);
641
644
  scope["E" + nodeAccessor] = openChange, scope["F" + nodeAccessor] = openChange ? 4 : 5, openChange && !scope.H ? scope[nodeAccessor].open = normalizedOpen : _attr_details_or_dialog_open_default(scope, nodeAccessor, normalizedOpen);
642
645
  }
643
646
  function _attr_details_or_dialog_open_script(scope, nodeAccessor) {
@@ -681,9 +684,6 @@ function hasFormElementChanged(el) {
681
684
  function normalizeStrProp(value) {
682
685
  return normalizeAttrValue(value) || "";
683
686
  }
684
- function normalizeBoolProp(value) {
685
- return value != null && value !== !1;
686
- }
687
687
  function updateList(arr, val, push) {
688
688
  let index = arr.indexOf(val);
689
689
  return (push ? !~index && [...arr, val] : ~index && arr.slice(0, index).concat(arr.slice(index + 1))) || arr;
@@ -828,7 +828,7 @@ function normalizeClientRender(value) {
828
828
  if (renderer && renderer.a) return renderer;
829
829
  }
830
830
  function normalizeAttrValue(value) {
831
- if (value || value === 0) return value === !0 ? "" : value + "";
831
+ if (isNotVoid(value)) return value === !0 ? "" : value + "";
832
832
  }
833
833
  function _lifecycle(scope, thisObj, index = 0) {
834
834
  let accessor = "K" + index, instance = scope[accessor];
@@ -1008,13 +1008,18 @@ function byFirstArg(name) {
1008
1008
  //#endregion
1009
1009
  //#region src/dom/queue.ts
1010
1010
  function queueRender(scope, signal, signalKey, value, scopeKey = scope.L) {
1011
- let key = scopeKey * 1e3 + signalKey, render = signalKey >= 0 && pendingRendersLookup[key];
1012
- render ? render.d = value : (queuePendingRender(render = {
1013
- a: key,
1011
+ let render;
1012
+ if (signalKey >= 0 && (render = scope[signalKey + scopeKeyOffset])) {
1013
+ if (render.d = value, render.e === runId || catchEnabled && render.f) return;
1014
+ render.e = runId;
1015
+ } else render = {
1016
+ a: scopeKey * scopeKeyOffset + signalKey,
1014
1017
  b: scope,
1015
1018
  c: signal,
1016
- d: value
1017
- }), signalKey >= 0 && (pendingRendersLookup[key] = render));
1019
+ d: value,
1020
+ e: runId
1021
+ }, signalKey >= 0 && (scope[signalKey + scopeKeyOffset] = render);
1022
+ queuePendingRender(render);
1018
1023
  }
1019
1024
  function queuePendingRender(render) {
1020
1025
  let i = pendingRenders.push(render) - 1;
@@ -1030,11 +1035,10 @@ function queueEffect(scope, fn) {
1030
1035
  }
1031
1036
  function run() {
1032
1037
  let effects = pendingEffects;
1033
- asyncRendersLookup = {};
1034
1038
  try {
1035
1039
  rendering = 1, runRenders();
1036
1040
  } finally {
1037
- pendingRendersLookup = asyncRendersLookup, asyncRendersLookup = rendering = 0, pendingRenders = [], pendingEffects = [];
1041
+ runId++, rendering = 0, pendingRenders = [], pendingEffects = [];
1038
1042
  }
1039
1043
  runEffects(effects);
1040
1044
  }
@@ -1042,12 +1046,12 @@ function queueAsyncRender(scope, signal, value) {
1042
1046
  queueRender(scope, signal, -1, value), queueMicrotask(run);
1043
1047
  }
1044
1048
  function prepareEffects(fn) {
1045
- let prevRenders = pendingRenders, prevEffects = pendingEffects, prevLookup = asyncRendersLookup, preparedEffects = pendingEffects = [];
1046
- pendingRenders = [], asyncRendersLookup = pendingRendersLookup, pendingRendersLookup = {};
1049
+ let prevRenders = pendingRenders, prevEffects = pendingEffects, preparedEffects = pendingEffects = [];
1050
+ pendingRenders = [];
1047
1051
  try {
1048
1052
  rendering = 1, fn(), runRenders();
1049
1053
  } finally {
1050
- rendering = 0, pendingRendersLookup = asyncRendersLookup, asyncRendersLookup = prevLookup, pendingRenders = prevRenders, pendingEffects = prevEffects;
1054
+ runId++, rendering = 0, pendingRenders = prevRenders, pendingEffects = prevEffects;
1051
1055
  }
1052
1056
  return preparedEffects;
1053
1057
  }
@@ -1091,10 +1095,10 @@ function _enable_catch() {
1091
1095
  try {
1092
1096
  let branch = render.b.F;
1093
1097
  for (; branch;) {
1094
- if (branch.W) return asyncRendersLookup[render.a] = render, branch.W.push(render);
1098
+ if (branch.W) return render.f = 1, branch.W.push(render);
1095
1099
  branch = branch.N;
1096
1100
  }
1097
- runRender(render);
1101
+ render.f = 0, runRender(render);
1098
1102
  } catch (error) {
1099
1103
  renderCatch(render.b, error);
1100
1104
  }
package/dist/dom.mjs CHANGED
@@ -49,7 +49,7 @@ let empty = [], rest = Symbol(), toDelimitedString = function toDelimitedString(
49
49
  };
50
50
  }, _for_of = /* @__PURE__ */ loop(([all, by = bySecondArg], cb) => {
51
51
  typeof by == "string" ? forOf(all, (item, i) => cb(item[by], [item, i])) : forOf(all, (item, i) => cb(by(item, i), [item, i]));
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) => {
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]))), runId = 1, pendingRenders = [], caughtError = /* @__PURE__ */ new WeakSet(), placeholderShown = /* @__PURE__ */ new WeakSet(), pendingEffects = [], pendingScopes = [], rendering, scopeKeyOffset = 1e3, runEffects = ((effects) => {
53
53
  for (let i = 0; i < effects.length;) effects[i++](effects[i++]);
54
54
  }), runRender = (render) => render.c(render.b, render.d), catchEnabled, classIdToBranch = /* @__PURE__ */ new Map(), scopesByRender = /* @__PURE__ */ new WeakMap(), getRenderScopes = ($global) => {
55
55
  let render = self[$global.runtimeId]?.[$global.renderId], scopes = render && scopesByRender.get(render);
@@ -157,6 +157,9 @@ function isEventHandler(name) {
157
157
  function getEventHandlerName(name) {
158
158
  return name[2] === "-" ? name.slice(3) : name.slice(2).toLowerCase();
159
159
  }
160
+ function isNotVoid(value) {
161
+ return value != null && value !== !1;
162
+ }
160
163
  function normalizeDynamicRenderer(value) {
161
164
  if (value) {
162
165
  if (typeof value == "string") return value;
@@ -521,14 +524,14 @@ function _el(id, accessor) {
521
524
  //#endregion
522
525
  //#region src/dom/controllable.ts
523
526
  function _attr_input_checked_default(scope, nodeAccessor, checked) {
524
- let el = scope[nodeAccessor], normalizedChecked = normalizeBoolProp(checked);
527
+ let el = scope[nodeAccessor], normalizedChecked = isNotVoid(checked);
525
528
  if (el.defaultChecked !== normalizedChecked) {
526
529
  let restoreValue = scope.H ? normalizedChecked : el.checked;
527
530
  el.defaultChecked = normalizedChecked, restoreValue !== normalizedChecked && (el.checked = restoreValue);
528
531
  }
529
532
  }
530
533
  function _attr_input_checked(scope, nodeAccessor, checked, checkedChange) {
531
- let el = scope[nodeAccessor], normalizedChecked = normalizeBoolProp(checked);
534
+ let el = scope[nodeAccessor], normalizedChecked = isNotVoid(checked);
532
535
  scope["E" + nodeAccessor] = checkedChange, scope["F" + nodeAccessor] = checkedChange ? 0 : 5, checkedChange && !scope.H ? el.checked = normalizedChecked : _attr_input_checked_default(scope, nodeAccessor, normalizedChecked);
533
536
  }
534
537
  function _attr_input_checked_script(scope, nodeAccessor) {
@@ -543,11 +546,11 @@ function _attr_input_checked_script(scope, nodeAccessor) {
543
546
  }
544
547
  function _attr_input_checkedValue_default(scope, nodeAccessor, checkedValue, value) {
545
548
  let multiple = Array.isArray(checkedValue), normalizedValue = normalizeStrProp(value), normalizedCheckedValue = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
546
- _attr(scope[nodeAccessor], "value", normalizedValue), _attr_input_checked_default(scope, nodeAccessor, multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue);
549
+ _attr(scope[nodeAccessor], "value", value), _attr_input_checked_default(scope, nodeAccessor, multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue);
547
550
  }
548
551
  function _attr_input_checkedValue(scope, nodeAccessor, checkedValue, checkedValueChange, value) {
549
- let el = scope[nodeAccessor], multiple = Array.isArray(checkedValue), normalizedValue = normalizeStrProp(value), normalizedCheckedValue = scope["G" + nodeAccessor] = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
550
- _attr(el, "value", normalizedValue), scope["E" + nodeAccessor] = checkedValueChange, scope["F" + nodeAccessor] = checkedValueChange ? 1 : 5, checkedValueChange && !scope.H ? el.checked = multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue : _attr_input_checkedValue_default(scope, nodeAccessor, normalizedCheckedValue, normalizedValue);
552
+ let el = scope[nodeAccessor], multiple = Array.isArray(checkedValue), normalizedCheckedValue = scope["G" + nodeAccessor] = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
553
+ scope["E" + nodeAccessor] = checkedValueChange, scope["F" + nodeAccessor] = checkedValueChange ? 1 : 5, checkedValueChange && !scope.H ? (el.checked = multiple ? normalizedCheckedValue.includes(normalizeStrProp(value)) : normalizeStrProp(value) === normalizedCheckedValue, _attr(el, "value", value)) : _attr_input_checkedValue_default(scope, nodeAccessor, checkedValue, value);
551
554
  }
552
555
  function _attr_input_checkedValue_script(scope, nodeAccessor) {
553
556
  let el = scope[nodeAccessor];
@@ -562,14 +565,14 @@ function _attr_input_checkedValue_script(scope, nodeAccessor) {
562
565
  });
563
566
  }
564
567
  function _attr_input_value_default(scope, nodeAccessor, value) {
565
- let el = scope[nodeAccessor], normalizedValue = normalizeStrProp(value);
568
+ let el = scope[nodeAccessor], normalizedValue = normalizeAttrValue(value) || "";
566
569
  if (el.defaultValue !== normalizedValue) {
567
570
  let restoreValue = scope.H ? normalizedValue : el.value;
568
571
  el.defaultValue = normalizedValue, setInputValue(el, restoreValue);
569
572
  }
570
573
  }
571
574
  function _attr_input_value(scope, nodeAccessor, value, valueChange) {
572
- let el = scope[nodeAccessor], normalizedValue = normalizeStrProp(value);
575
+ let el = scope[nodeAccessor], normalizedValue = normalizeAttrValue(value) || "";
573
576
  scope["E" + nodeAccessor] = valueChange, scope["G" + nodeAccessor] = normalizedValue, scope["F" + nodeAccessor] = valueChange ? 2 : 5, valueChange && !scope.H ? setInputValue(el, normalizedValue) : _attr_input_value_default(scope, nodeAccessor, normalizedValue);
574
577
  }
575
578
  function _attr_input_value_script(scope, nodeAccessor) {
@@ -633,10 +636,10 @@ function getSelectValue(el, multiple) {
633
636
  return multiple ? Array.from(el.selectedOptions, (opt) => opt.value) : el.value;
634
637
  }
635
638
  function _attr_details_or_dialog_open_default(scope, nodeAccessor, open) {
636
- scope.H && (scope[nodeAccessor].open = normalizeBoolProp(open));
639
+ scope.H && (scope[nodeAccessor].open = isNotVoid(open));
637
640
  }
638
641
  function _attr_details_or_dialog_open(scope, nodeAccessor, open, openChange) {
639
- let normalizedOpen = scope["G" + nodeAccessor] = normalizeBoolProp(open);
642
+ let normalizedOpen = scope["G" + nodeAccessor] = isNotVoid(open);
640
643
  scope["E" + nodeAccessor] = openChange, scope["F" + nodeAccessor] = openChange ? 4 : 5, openChange && !scope.H ? scope[nodeAccessor].open = normalizedOpen : _attr_details_or_dialog_open_default(scope, nodeAccessor, normalizedOpen);
641
644
  }
642
645
  function _attr_details_or_dialog_open_script(scope, nodeAccessor) {
@@ -680,9 +683,6 @@ function hasFormElementChanged(el) {
680
683
  function normalizeStrProp(value) {
681
684
  return normalizeAttrValue(value) || "";
682
685
  }
683
- function normalizeBoolProp(value) {
684
- return value != null && value !== !1;
685
- }
686
686
  function updateList(arr, val, push) {
687
687
  let index = arr.indexOf(val);
688
688
  return (push ? !~index && [...arr, val] : ~index && arr.slice(0, index).concat(arr.slice(index + 1))) || arr;
@@ -827,7 +827,7 @@ function normalizeClientRender(value) {
827
827
  if (renderer && renderer.a) return renderer;
828
828
  }
829
829
  function normalizeAttrValue(value) {
830
- if (value || value === 0) return value === !0 ? "" : value + "";
830
+ if (isNotVoid(value)) return value === !0 ? "" : value + "";
831
831
  }
832
832
  function _lifecycle(scope, thisObj, index = 0) {
833
833
  let accessor = "K" + index, instance = scope[accessor];
@@ -1007,13 +1007,18 @@ function byFirstArg(name) {
1007
1007
  //#endregion
1008
1008
  //#region src/dom/queue.ts
1009
1009
  function queueRender(scope, signal, signalKey, value, scopeKey = scope.L) {
1010
- let key = scopeKey * 1e3 + signalKey, render = signalKey >= 0 && pendingRendersLookup[key];
1011
- render ? render.d = value : (queuePendingRender(render = {
1012
- a: key,
1010
+ let render;
1011
+ if (signalKey >= 0 && (render = scope[signalKey + scopeKeyOffset])) {
1012
+ if (render.d = value, render.e === runId || catchEnabled && render.f) return;
1013
+ render.e = runId;
1014
+ } else render = {
1015
+ a: scopeKey * scopeKeyOffset + signalKey,
1013
1016
  b: scope,
1014
1017
  c: signal,
1015
- d: value
1016
- }), signalKey >= 0 && (pendingRendersLookup[key] = render));
1018
+ d: value,
1019
+ e: runId
1020
+ }, signalKey >= 0 && (scope[signalKey + scopeKeyOffset] = render);
1021
+ queuePendingRender(render);
1017
1022
  }
1018
1023
  function queuePendingRender(render) {
1019
1024
  let i = pendingRenders.push(render) - 1;
@@ -1029,11 +1034,10 @@ function queueEffect(scope, fn) {
1029
1034
  }
1030
1035
  function run() {
1031
1036
  let effects = pendingEffects;
1032
- asyncRendersLookup = {};
1033
1037
  try {
1034
1038
  rendering = 1, runRenders();
1035
1039
  } finally {
1036
- pendingRendersLookup = asyncRendersLookup, asyncRendersLookup = rendering = 0, pendingRenders = [], pendingEffects = [];
1040
+ runId++, rendering = 0, pendingRenders = [], pendingEffects = [];
1037
1041
  }
1038
1042
  runEffects(effects);
1039
1043
  }
@@ -1041,12 +1045,12 @@ function queueAsyncRender(scope, signal, value) {
1041
1045
  queueRender(scope, signal, -1, value), queueMicrotask(run);
1042
1046
  }
1043
1047
  function prepareEffects(fn) {
1044
- let prevRenders = pendingRenders, prevEffects = pendingEffects, prevLookup = asyncRendersLookup, preparedEffects = pendingEffects = [];
1045
- pendingRenders = [], asyncRendersLookup = pendingRendersLookup, pendingRendersLookup = {};
1048
+ let prevRenders = pendingRenders, prevEffects = pendingEffects, preparedEffects = pendingEffects = [];
1049
+ pendingRenders = [];
1046
1050
  try {
1047
1051
  rendering = 1, fn(), runRenders();
1048
1052
  } finally {
1049
- rendering = 0, pendingRendersLookup = asyncRendersLookup, asyncRendersLookup = prevLookup, pendingRenders = prevRenders, pendingEffects = prevEffects;
1053
+ runId++, rendering = 0, pendingRenders = prevRenders, pendingEffects = prevEffects;
1050
1054
  }
1051
1055
  return preparedEffects;
1052
1056
  }
@@ -1090,10 +1094,10 @@ function _enable_catch() {
1090
1094
  try {
1091
1095
  let branch = render.b.F;
1092
1096
  for (; branch;) {
1093
- if (branch.W) return asyncRendersLookup[render.a] = render, branch.W.push(render);
1097
+ if (branch.W) return render.f = 1, branch.W.push(render);
1094
1098
  branch = branch.N;
1095
1099
  }
1096
- runRender(render);
1100
+ render.f = 0, runRender(render);
1097
1101
  } catch (error) {
1098
1102
  renderCatch(render.b, error);
1099
1103
  }
package/dist/html.js CHANGED
@@ -713,7 +713,11 @@ function writeArrayBuffer(state, val) {
713
713
  return state.buf.push(result), !0;
714
714
  }
715
715
  function writeTypedArray(state, val, ref) {
716
- return val.byteOffset || state.refs.has(val.buffer) ? (state.buf.push("new " + val.constructor.name + "("), writeProp(state, val.buffer, ref, "buffer"), state.buf.push(val.byteOffset ? "," + val.byteOffset + ")" : ")")) : (state.refs.set(val.buffer, new Reference(ref, "buffer", state.flush, null)), state.buf.push("new " + val.constructor.name + (val.length === 0 ? "" : "(" + (hasOnlyZeros(val) ? val.length : typedArrayToInitString(val)) + ")"))), !0;
716
+ if (val.byteOffset || state.refs.has(val.buffer)) {
717
+ let needsLength = val.byteOffset + val.byteLength < val.buffer.byteLength;
718
+ state.buf.push("new " + val.constructor.name + "("), writeProp(state, val.buffer, ref, "buffer"), state.buf.push((val.byteOffset || needsLength ? "," + val.byteOffset + (needsLength ? "," + val.length : "") : "") + ")");
719
+ } else state.refs.set(val.buffer, new Reference(ref, "buffer", state.flush, null)), state.buf.push("new " + val.constructor.name + (val.length === 0 ? "" : "(" + (hasOnlyZeros(val) ? val.length : typedArrayToInitString(val)) + ")"));
720
+ return !0;
717
721
  }
718
722
  function writeWeakSet(state) {
719
723
  return state.buf.push("new WeakSet"), !0;
@@ -742,15 +746,15 @@ function writeHeaders(state, val) {
742
746
  function writeFormData(state, val) {
743
747
  let sep = "[", valStr = "";
744
748
  for (let [key, value] of val) typeof value == "string" && (valStr += sep + quote(key, 0) + "," + quote(value, 0), sep = ",");
745
- return sep === "[" ? state.buf.push("new FormData") : state.buf.push(valStr + "].reduce((f,v,i,a)=>i%2&&f.append(v,a[i+1])||f,new FormData)"), !0;
749
+ return sep === "[" ? state.buf.push("new FormData") : state.buf.push(valStr + "].reduce((f,v,i,a)=>i%2&&f.append(a[i-1],v)||f,new FormData)"), !0;
746
750
  }
747
751
  function writeRequest(state, val, ref) {
748
- let sep = "", hasBody = val.body && !val.bodyUsed && val.duplex === "half";
749
- state.buf.push("new Request(" + quote(val.url, 0)), hasBody && (state.buf.push(",{body:"), writeProp(state, val.body, ref, "body") ? (state.buf.push(",duplex:\"half\""), sep = ",") : state.buf.pop());
752
+ let sep = "", bodySerialized = !1, hasBody = val.body && !val.bodyUsed && val.duplex === "half";
753
+ state.buf.push("new Request(" + quote(val.url, 0)), hasBody && (state.buf.push(",{body:"), writeProp(state, val.body, ref, "body") ? (state.buf.push(",duplex:\"half\""), sep = ",", bodySerialized = !0) : state.buf.pop());
750
754
  let options = "";
751
755
  val.cache !== "default" && (options += sep + "cache:" + quote(val.cache, 0), sep = ","), val.credentials !== "same-origin" && (options += sep + "credentials:" + quote(val.credentials, 0), sep = ",");
752
756
  let headers = stringEntriesToProps(val.headers);
753
- return state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null)), headers && (options += sep + "headers:{" + headers + "}", sep = ","), val.integrity && (options += sep + "integrity:" + quote(val.integrity, 0), sep = ","), val.keepalive && (options += sep + "keepalive:true", sep = ","), val.method !== "GET" && (options += sep + "method:" + quote(val.method, 0), sep = ","), val.mode !== "cors" && (options += sep + "mode:" + quote(val.mode, 0), sep = ","), val.redirect !== "follow" && (options += sep + "redirect:" + quote(val.redirect, 0), sep = ","), val.referrer !== "about:client" && (options += sep + "referrer:" + quote(val.referrer, 0), sep = ","), val.referrerPolicy && (options += sep + "referrerPolicy:" + quote(val.referrerPolicy, 0)), state.buf.push(hasBody ? options + "})" : options ? ",{" + options + "})" : ")"), !0;
757
+ return state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null)), headers && (options += sep + "headers:{" + headers + "}", sep = ","), val.integrity && (options += sep + "integrity:" + quote(val.integrity, 0), sep = ","), val.keepalive && (options += sep + "keepalive:true", sep = ","), val.method !== "GET" && (options += sep + "method:" + quote(val.method, 0), sep = ","), val.mode !== "cors" && (options += sep + "mode:" + quote(val.mode, 0), sep = ","), val.redirect !== "follow" && (options += sep + "redirect:" + quote(val.redirect, 0), sep = ","), val.referrer !== "about:client" && (options += sep + "referrer:" + quote(val.referrer, 0), sep = ","), val.referrerPolicy && (options += sep + "referrerPolicy:" + quote(val.referrerPolicy, 0)), state.buf.push(bodySerialized ? options + "})" : options ? ",{" + options + "})" : ")"), !0;
754
758
  }
755
759
  function writeResponse(state, val, ref) {
756
760
  let sep = "", options = "";
@@ -978,6 +982,9 @@ function getEventHandlerName(name) {
978
982
  function isVoid(value) {
979
983
  return value == null || value === !1;
980
984
  }
985
+ function isNotVoid(value) {
986
+ return value != null && value !== !1;
987
+ }
981
988
  function normalizeDynamicRenderer(value) {
982
989
  if (value) {
983
990
  if (typeof value == "string") return value;
@@ -1607,7 +1614,7 @@ function _attr_input_value(scopeId, nodeAccessor, value, valueChange) {
1607
1614
  return valueChange && writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange), _attr("value", value);
1608
1615
  }
1609
1616
  function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange) {
1610
- return checkedChange && writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange), normalizeBoolAttrValue(checked) ? " checked" : "";
1617
+ return checkedChange && writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange), isNotVoid(checked) ? " checked" : "";
1611
1618
  }
1612
1619
  function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value) {
1613
1620
  let valueAttr = _attr("value", value);
@@ -1620,8 +1627,8 @@ function getCheckedValueRef(checkedValue) {
1620
1627
  }
1621
1628
  }
1622
1629
  function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange) {
1623
- let normalizedOpen = normalizeBoolAttrValue(open);
1624
- return openChange && writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen, openChange), normalizedOpen ? " open" : "";
1630
+ let normalizedOpen = isNotVoid(open);
1631
+ return openChange && writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen || void 0, openChange), normalizedOpen ? " open" : "";
1625
1632
  }
1626
1633
  function _attr_nonce() {
1627
1634
  return getChunk().boundary.state.nonceAttr;
@@ -1634,17 +1641,17 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
1634
1641
  switch (tagName) {
1635
1642
  case "input":
1636
1643
  if (data.checkedChange) result += _attr_input_checked(scopeId, nodeAccessor, data.checked, data.checkedChange);
1637
- else if (data.checkedValue || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value);
1644
+ else if ("checkedValue" in data || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value);
1638
1645
  else if (data.valueChange) result += _attr_input_value(scopeId, nodeAccessor, data.value, data.valueChange);
1639
1646
  else break;
1640
1647
  skip = /^(?:value|checked(?:Value)?)(?:Change)?$|[\s/>"'=]/;
1641
1648
  break;
1642
1649
  case "select":
1643
1650
  case "textarea":
1644
- (data.value || data.valueChange) && (skip = /^value(?:Change)?$|[\s/>"'=]/);
1651
+ ("value" in data || data.valueChange) && (skip = /^value(?:Change)?$|[\s/>"'=]/);
1645
1652
  break;
1646
1653
  case "option":
1647
- data.value && (result += _attr_option_value(data.value), skip = /^value$|[\s/>"'=]/);
1654
+ "value" in data && (result += _attr_option_value(data.value), skip = /^value$|[\s/>"'=]/);
1648
1655
  break;
1649
1656
  case "details":
1650
1657
  case "dialog":
@@ -1727,9 +1734,6 @@ function normalizedValueMatches(a, b) {
1727
1734
  function normalizeStrAttrValue(value) {
1728
1735
  return value && value !== !0 || value === 0 ? value + "" : "";
1729
1736
  }
1730
- function normalizeBoolAttrValue(value) {
1731
- if (value != null && value !== !1) return !0;
1732
- }
1733
1737
  //#endregion
1734
1738
  //#region src/html/dynamic-tag.ts
1735
1739
  function _content(id, fn) {
package/dist/html.mjs CHANGED
@@ -712,7 +712,11 @@ function writeArrayBuffer(state, val) {
712
712
  return state.buf.push(result), !0;
713
713
  }
714
714
  function writeTypedArray(state, val, ref) {
715
- return val.byteOffset || state.refs.has(val.buffer) ? (state.buf.push("new " + val.constructor.name + "("), writeProp(state, val.buffer, ref, "buffer"), state.buf.push(val.byteOffset ? "," + val.byteOffset + ")" : ")")) : (state.refs.set(val.buffer, new Reference(ref, "buffer", state.flush, null)), state.buf.push("new " + val.constructor.name + (val.length === 0 ? "" : "(" + (hasOnlyZeros(val) ? val.length : typedArrayToInitString(val)) + ")"))), !0;
715
+ if (val.byteOffset || state.refs.has(val.buffer)) {
716
+ let needsLength = val.byteOffset + val.byteLength < val.buffer.byteLength;
717
+ state.buf.push("new " + val.constructor.name + "("), writeProp(state, val.buffer, ref, "buffer"), state.buf.push((val.byteOffset || needsLength ? "," + val.byteOffset + (needsLength ? "," + val.length : "") : "") + ")");
718
+ } else state.refs.set(val.buffer, new Reference(ref, "buffer", state.flush, null)), state.buf.push("new " + val.constructor.name + (val.length === 0 ? "" : "(" + (hasOnlyZeros(val) ? val.length : typedArrayToInitString(val)) + ")"));
719
+ return !0;
716
720
  }
717
721
  function writeWeakSet(state) {
718
722
  return state.buf.push("new WeakSet"), !0;
@@ -741,15 +745,15 @@ function writeHeaders(state, val) {
741
745
  function writeFormData(state, val) {
742
746
  let sep = "[", valStr = "";
743
747
  for (let [key, value] of val) typeof value == "string" && (valStr += sep + quote(key, 0) + "," + quote(value, 0), sep = ",");
744
- return sep === "[" ? state.buf.push("new FormData") : state.buf.push(valStr + "].reduce((f,v,i,a)=>i%2&&f.append(v,a[i+1])||f,new FormData)"), !0;
748
+ return sep === "[" ? state.buf.push("new FormData") : state.buf.push(valStr + "].reduce((f,v,i,a)=>i%2&&f.append(a[i-1],v)||f,new FormData)"), !0;
745
749
  }
746
750
  function writeRequest(state, val, ref) {
747
- let sep = "", hasBody = val.body && !val.bodyUsed && val.duplex === "half";
748
- state.buf.push("new Request(" + quote(val.url, 0)), hasBody && (state.buf.push(",{body:"), writeProp(state, val.body, ref, "body") ? (state.buf.push(",duplex:\"half\""), sep = ",") : state.buf.pop());
751
+ let sep = "", bodySerialized = !1, hasBody = val.body && !val.bodyUsed && val.duplex === "half";
752
+ state.buf.push("new Request(" + quote(val.url, 0)), hasBody && (state.buf.push(",{body:"), writeProp(state, val.body, ref, "body") ? (state.buf.push(",duplex:\"half\""), sep = ",", bodySerialized = !0) : state.buf.pop());
749
753
  let options = "";
750
754
  val.cache !== "default" && (options += sep + "cache:" + quote(val.cache, 0), sep = ","), val.credentials !== "same-origin" && (options += sep + "credentials:" + quote(val.credentials, 0), sep = ",");
751
755
  let headers = stringEntriesToProps(val.headers);
752
- return state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null)), headers && (options += sep + "headers:{" + headers + "}", sep = ","), val.integrity && (options += sep + "integrity:" + quote(val.integrity, 0), sep = ","), val.keepalive && (options += sep + "keepalive:true", sep = ","), val.method !== "GET" && (options += sep + "method:" + quote(val.method, 0), sep = ","), val.mode !== "cors" && (options += sep + "mode:" + quote(val.mode, 0), sep = ","), val.redirect !== "follow" && (options += sep + "redirect:" + quote(val.redirect, 0), sep = ","), val.referrer !== "about:client" && (options += sep + "referrer:" + quote(val.referrer, 0), sep = ","), val.referrerPolicy && (options += sep + "referrerPolicy:" + quote(val.referrerPolicy, 0)), state.buf.push(hasBody ? options + "})" : options ? ",{" + options + "})" : ")"), !0;
756
+ return state.refs.set(val.headers, new Reference(ref, "headers", state.flush, null)), headers && (options += sep + "headers:{" + headers + "}", sep = ","), val.integrity && (options += sep + "integrity:" + quote(val.integrity, 0), sep = ","), val.keepalive && (options += sep + "keepalive:true", sep = ","), val.method !== "GET" && (options += sep + "method:" + quote(val.method, 0), sep = ","), val.mode !== "cors" && (options += sep + "mode:" + quote(val.mode, 0), sep = ","), val.redirect !== "follow" && (options += sep + "redirect:" + quote(val.redirect, 0), sep = ","), val.referrer !== "about:client" && (options += sep + "referrer:" + quote(val.referrer, 0), sep = ","), val.referrerPolicy && (options += sep + "referrerPolicy:" + quote(val.referrerPolicy, 0)), state.buf.push(bodySerialized ? options + "})" : options ? ",{" + options + "})" : ")"), !0;
753
757
  }
754
758
  function writeResponse(state, val, ref) {
755
759
  let sep = "", options = "";
@@ -977,6 +981,9 @@ function getEventHandlerName(name) {
977
981
  function isVoid(value) {
978
982
  return value == null || value === !1;
979
983
  }
984
+ function isNotVoid(value) {
985
+ return value != null && value !== !1;
986
+ }
980
987
  function normalizeDynamicRenderer(value) {
981
988
  if (value) {
982
989
  if (typeof value == "string") return value;
@@ -1606,7 +1613,7 @@ function _attr_input_value(scopeId, nodeAccessor, value, valueChange) {
1606
1613
  return valueChange && writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange), _attr("value", value);
1607
1614
  }
1608
1615
  function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange) {
1609
- return checkedChange && writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange), normalizeBoolAttrValue(checked) ? " checked" : "";
1616
+ return checkedChange && writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange), isNotVoid(checked) ? " checked" : "";
1610
1617
  }
1611
1618
  function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value) {
1612
1619
  let valueAttr = _attr("value", value);
@@ -1619,8 +1626,8 @@ function getCheckedValueRef(checkedValue) {
1619
1626
  }
1620
1627
  }
1621
1628
  function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange) {
1622
- let normalizedOpen = normalizeBoolAttrValue(open);
1623
- return openChange && writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen, openChange), normalizedOpen ? " open" : "";
1629
+ let normalizedOpen = isNotVoid(open);
1630
+ return openChange && writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen || void 0, openChange), normalizedOpen ? " open" : "";
1624
1631
  }
1625
1632
  function _attr_nonce() {
1626
1633
  return getChunk().boundary.state.nonceAttr;
@@ -1633,17 +1640,17 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
1633
1640
  switch (tagName) {
1634
1641
  case "input":
1635
1642
  if (data.checkedChange) result += _attr_input_checked(scopeId, nodeAccessor, data.checked, data.checkedChange);
1636
- else if (data.checkedValue || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value);
1643
+ else if ("checkedValue" in data || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value);
1637
1644
  else if (data.valueChange) result += _attr_input_value(scopeId, nodeAccessor, data.value, data.valueChange);
1638
1645
  else break;
1639
1646
  skip = /^(?:value|checked(?:Value)?)(?:Change)?$|[\s/>"'=]/;
1640
1647
  break;
1641
1648
  case "select":
1642
1649
  case "textarea":
1643
- (data.value || data.valueChange) && (skip = /^value(?:Change)?$|[\s/>"'=]/);
1650
+ ("value" in data || data.valueChange) && (skip = /^value(?:Change)?$|[\s/>"'=]/);
1644
1651
  break;
1645
1652
  case "option":
1646
- data.value && (result += _attr_option_value(data.value), skip = /^value$|[\s/>"'=]/);
1653
+ "value" in data && (result += _attr_option_value(data.value), skip = /^value$|[\s/>"'=]/);
1647
1654
  break;
1648
1655
  case "details":
1649
1656
  case "dialog":
@@ -1726,9 +1733,6 @@ function normalizedValueMatches(a, b) {
1726
1733
  function normalizeStrAttrValue(value) {
1727
1734
  return value && value !== !0 || value === 0 ? value + "" : "";
1728
1735
  }
1729
- function normalizeBoolAttrValue(value) {
1730
- if (value != null && value !== !1) return !0;
1731
- }
1732
1736
  //#endregion
1733
1737
  //#region src/html/dynamic-tag.ts
1734
1738
  function _content(id, fn) {