marko 6.0.145 → 6.0.146

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.mjs CHANGED
@@ -557,17 +557,20 @@ function _attr_input_checked_script(scope, nodeAccessor) {
557
557
  });
558
558
  }
559
559
  function _attr_input_checkedValue(scope, nodeAccessor, checkedValue, checkedValueChange, value) {
560
- scope["G" /* ControlledValue */ + nodeAccessor] = checkedValue, _attr(scope[nodeAccessor], "value", value), setCheckboxValue(
560
+ let multiple = Array.isArray(checkedValue), normalizedValue = normalizeStrProp(value), normalizedCheckedValue = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
561
+ scope["G" /* ControlledValue */ + nodeAccessor] = normalizedCheckedValue, _attr(scope[nodeAccessor], "value", normalizedValue), setCheckboxValue(
561
562
  scope,
562
563
  nodeAccessor,
563
564
  1 /* InputCheckedValue */,
564
- Array.isArray(checkedValue) ? checkedValue.includes(value) : checkedValue === value,
565
+ multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue,
565
566
  checkedValueChange
566
567
  );
567
568
  }
568
569
  function _attr_input_checkedValue_script(scope, nodeAccessor) {
569
570
  let el = scope[nodeAccessor];
570
- syncControllable(el, "input", hasCheckboxChanged, () => {
571
+ isResuming && el.defaultChecked && (scope["G" /* ControlledValue */ + nodeAccessor] ? scope["G" /* ControlledValue */ + nodeAccessor].push(
572
+ el.value
573
+ ) : scope["G" /* ControlledValue */ + nodeAccessor] = el.value), syncControllable(el, "input", hasCheckboxChanged, () => {
571
574
  let checkedValueChange = scope["E" /* ControlledHandler */ + nodeAccessor];
572
575
  if (checkedValueChange) {
573
576
  let oldValue = scope["G" /* ControlledValue */ + nodeAccessor], newValue = Array.isArray(oldValue) ? updateList(oldValue, el.value, el.checked) : el.checked ? el.value : void 0;
@@ -584,7 +587,7 @@ function _attr_input_checkedValue_script(scope, nodeAccessor) {
584
587
  }
585
588
  function _attr_input_value(scope, nodeAccessor, value, valueChange) {
586
589
  let el = scope[nodeAccessor], normalizedValue = normalizeStrProp(value);
587
- scope["E" /* ControlledHandler */ + nodeAccessor] = valueChange, valueChange ? (scope["F" /* ControlledType */ + nodeAccessor] = 2 /* InputValue */, scope["G" /* ControlledValue */ + nodeAccessor] = value, el.isConnected ? setValueAndUpdateSelection(el, normalizedValue) : el.defaultValue = normalizedValue) : (scope["F" /* ControlledType */ + nodeAccessor] = 5 /* None */, el.defaultValue = normalizedValue);
590
+ scope["E" /* ControlledHandler */ + nodeAccessor] = valueChange, valueChange ? (scope["F" /* ControlledType */ + nodeAccessor] = 2 /* InputValue */, scope["G" /* ControlledValue */ + nodeAccessor] = normalizedValue, el.isConnected ? setValueAndUpdateSelection(el, normalizedValue) : el.defaultValue = normalizedValue) : (scope["F" /* ControlledType */ + nodeAccessor] = 5 /* None */, el.defaultValue = normalizedValue);
588
591
  }
589
592
  function _attr_input_value_script(scope, nodeAccessor) {
590
593
  let el = scope[nodeAccessor];
@@ -597,10 +600,11 @@ function _attr_input_value_script(scope, nodeAccessor) {
597
600
  });
598
601
  }
599
602
  function _attr_select_value(scope, nodeAccessor, value, valueChange) {
600
- scope["E" /* ControlledHandler */ + nodeAccessor] = valueChange, valueChange ? (scope["F" /* ControlledType */ + nodeAccessor] = 3 /* SelectValue */, scope["G" /* ControlledValue */ + nodeAccessor] = value) : scope["F" /* ControlledType */ + nodeAccessor] = 5 /* None */, pendingEffects.unshift(
603
+ let normalizedValue = Array.isArray(value) ? value.map(normalizeStrProp) : normalizeStrProp(value);
604
+ scope["E" /* ControlledHandler */ + nodeAccessor] = valueChange, valueChange ? (scope["F" /* ControlledType */ + nodeAccessor] = 3 /* SelectValue */, scope["G" /* ControlledValue */ + nodeAccessor] = normalizedValue) : scope["F" /* ControlledType */ + nodeAccessor] = 5 /* None */, pendingEffects.unshift(
601
605
  () => setSelectOptions(
602
606
  scope[nodeAccessor],
603
- value,
607
+ normalizedValue,
604
608
  valueChange
605
609
  ),
606
610
  scope
@@ -610,19 +614,26 @@ function _attr_select_value_script(scope, nodeAccessor) {
610
614
  let el = scope[nodeAccessor], onChange = () => {
611
615
  let valueChange = scope["E" /* ControlledHandler */ + nodeAccessor];
612
616
  if (valueChange) {
613
- let newValue = Array.isArray(
614
- scope["G" /* ControlledValue */ + nodeAccessor]
615
- ) ? Array.from(el.selectedOptions, toValueProp) : el.value;
616
- setSelectOptions(
617
- el,
618
- scope["G" /* ControlledValue */ + nodeAccessor],
619
- valueChange
620
- ), valueChange(newValue), run();
617
+ let oldValue = scope["G" /* ControlledValue */ + nodeAccessor], newValue = Array.isArray(oldValue) ? Array.from(el.selectedOptions, toValueProp) : el.value;
618
+ setSelectOptions(el, oldValue, valueChange), valueChange(newValue), run();
621
619
  }
622
620
  };
621
+ if (isResuming)
622
+ if (el.multiple) {
623
+ scope["G" /* ControlledValue */ + nodeAccessor] = [];
624
+ for (let opt of el.options)
625
+ opt.defaultSelected && scope["G" /* ControlledValue */ + nodeAccessor].push(opt.value);
626
+ } else {
627
+ scope["G" /* ControlledValue */ + nodeAccessor] = "";
628
+ for (let opt of el.options)
629
+ if (opt.defaultSelected) {
630
+ scope["G" /* ControlledValue */ + nodeAccessor] = opt.value;
631
+ break;
632
+ }
633
+ }
623
634
  el._ || new MutationObserver(() => {
624
635
  let value = scope["G" /* ControlledValue */ + nodeAccessor];
625
- (Array.isArray(value) ? value.length !== el.selectedOptions.length || value.some((value2, i) => value2 != el.selectedOptions[i].value) : el.value != value) && onChange();
636
+ (Array.isArray(value) ? value.length !== el.selectedOptions.length || value.some((value2, i) => value2 != el.selectedOptions[i].value) : el.value !== value) && onChange();
626
637
  }).observe(el, {
627
638
  childList: !0,
628
639
  subtree: !0
@@ -634,20 +645,17 @@ function setSelectOptions(el, value, valueChange) {
634
645
  let selected = value.includes(opt.value);
635
646
  valueChange ? opt.selected = selected : opt.defaultSelected = selected;
636
647
  }
637
- else {
638
- let normalizedValue = normalizeStrProp(value);
639
- if (valueChange)
640
- el.value = normalizedValue;
641
- else
642
- for (let opt of el.options)
643
- opt.defaultSelected = opt.value === normalizedValue;
644
- }
648
+ else if (valueChange)
649
+ el.value = value;
650
+ else
651
+ for (let opt of el.options)
652
+ opt.defaultSelected = opt.value === value;
645
653
  }
646
654
  function _attr_details_or_dialog_open(scope, nodeAccessor, open, openChange) {
647
- scope["E" /* ControlledHandler */ + nodeAccessor] = openChange, openChange ? scope["F" /* ControlledType */ + nodeAccessor] = 4 /* DetailsOrDialogOpen */ : scope["F" /* ControlledType */ + nodeAccessor] = 5 /* None */, scope[nodeAccessor].open = scope["G" /* ControlledValue */ + nodeAccessor] = normalizeBoolProp(open);
655
+ scope["E" /* ControlledHandler */ + nodeAccessor] = openChange, scope["F" /* ControlledType */ + nodeAccessor] = openChange ? 4 /* DetailsOrDialogOpen */ : 5 /* None */, scope[nodeAccessor].open = scope["G" /* ControlledValue */ + nodeAccessor] = normalizeBoolProp(open);
648
656
  }
649
657
  function _attr_details_or_dialog_open_script(scope, nodeAccessor) {
650
- let el = scope[nodeAccessor], hasChanged = () => el.open !== scope["G" /* ControlledValue */ + nodeAccessor];
658
+ let el = scope[nodeAccessor], hasChanged = () => el.open === !scope["G" /* ControlledValue */ + nodeAccessor];
651
659
  syncControllable(
652
660
  el,
653
661
  el.tagName === "DIALOG" ? "close" : "toggle",
@@ -5,9 +5,9 @@ export declare function _attr_option_value(value: unknown): string;
5
5
  export declare function _attr_select_value(scopeId: number, nodeAccessor: Accessor, value: unknown, valueChange: unknown, content?: () => void): void;
6
6
  export declare function _attr_textarea_value(scopeId: number, nodeAccessor: Accessor, value: unknown, valueChange: unknown): string;
7
7
  export declare function _attr_input_value(scopeId: number, nodeAccessor: Accessor, value: unknown, valueChange: unknown): string;
8
- export declare function _attr_input_checked(scopeId: number, nodeAccessor: Accessor, checked: unknown, checkedChange: unknown): string;
8
+ export declare function _attr_input_checked(scopeId: number, nodeAccessor: Accessor, checked: unknown, checkedChange: unknown): "" | " checked";
9
9
  export declare function _attr_input_checkedValue(scopeId: number, nodeAccessor: Accessor, checkedValue: unknown, checkedValueChange: unknown, value: unknown): string;
10
- export declare function _attr_details_or_dialog_open(scopeId: number, nodeAccessor: Accessor, open: unknown, openChange: unknown): string;
10
+ export declare function _attr_details_or_dialog_open(scopeId: number, nodeAccessor: Accessor, open: unknown, openChange: unknown): "" | " open";
11
11
  export declare function _attr_nonce(): string;
12
12
  export declare function _attr(name: string, value: unknown): string;
13
13
  export declare function _attrs(data: Record<string, unknown>, nodeAccessor: Accessor, scopeId: number, tagName: string): string;
package/dist/html.js CHANGED
@@ -1775,8 +1775,8 @@ function _attr_style(value) {
1775
1775
  return stringAttr("style", styleValue(value));
1776
1776
  }
1777
1777
  function _attr_option_value(value) {
1778
- let selectedValue = getContext(kSelectedValue);
1779
- return _attr("value", value) + (!isVoid(value) && (Array.isArray(selectedValue) ? selectedValue.includes(value) : selectedValue === value) ? " selected" : "");
1778
+ let valueAttr = _attr("value", value);
1779
+ return normalizedValueMatches(getContext(kSelectedValue), value) ? valueAttr + " selected" : valueAttr;
1780
1780
  }
1781
1781
  var kSelectedValue = /* @__PURE__ */ Symbol("selectedValue");
1782
1782
  function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content) {
@@ -1784,7 +1784,7 @@ function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content)
1784
1784
  3 /* SelectValue */,
1785
1785
  scopeId,
1786
1786
  nodeAccessor,
1787
- value,
1787
+ void 0,
1788
1788
  valueChange
1789
1789
  ), content && withContext(kSelectedValue, value, content);
1790
1790
  }
@@ -1813,26 +1813,34 @@ function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange) {
1813
1813
  nodeAccessor,
1814
1814
  void 0,
1815
1815
  checkedChange
1816
- ), _attr("checked", checked);
1816
+ ), normalizeBoolAttrValue(checked) ? " checked" : "";
1817
1817
  }
1818
1818
  function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value) {
1819
- let multiple = Array.isArray(checkedValue), valueAttr = _attr("value", value);
1819
+ let valueAttr = _attr("value", value);
1820
1820
  return checkedValueChange && writeControlledScope(
1821
1821
  1 /* InputCheckedValue */,
1822
1822
  scopeId,
1823
1823
  nodeAccessor,
1824
- checkedValue,
1824
+ getCheckedValueRef(checkedValue),
1825
1825
  checkedValueChange
1826
- ), (multiple ? checkedValue.includes(value) : checkedValue === value) ? valueAttr + " checked" : valueAttr;
1826
+ ), normalizedValueMatches(checkedValue, value) ? valueAttr + " checked" : valueAttr;
1827
+ }
1828
+ var checkedValuesRefs = /* @__PURE__ */ new WeakMap();
1829
+ function getCheckedValueRef(checkedValue) {
1830
+ if (Array.isArray(checkedValue)) {
1831
+ let ref = checkedValuesRefs.get(checkedValue);
1832
+ return ref || (ref = [], checkedValuesRefs.set(checkedValue, ref)), ref;
1833
+ }
1827
1834
  }
1828
1835
  function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange) {
1836
+ let normalizedOpen = normalizeBoolAttrValue(open);
1829
1837
  return openChange && writeControlledScope(
1830
1838
  4 /* DetailsOrDialogOpen */,
1831
1839
  scopeId,
1832
1840
  nodeAccessor,
1833
- open,
1841
+ normalizedOpen,
1834
1842
  openChange
1835
- ), _attr("open", open);
1843
+ ), normalizedOpen ? " open" : "";
1836
1844
  }
1837
1845
  function _attr_nonce() {
1838
1846
  return getChunk().boundary.state.nonceAttr;
@@ -1966,6 +1974,23 @@ function escapeDoubleQuotedAttrValue(value) {
1966
1974
  function replaceUnsafeDoubleQuoteAttrChar(match) {
1967
1975
  return match === '"' ? "&#34;" : "&amp;";
1968
1976
  }
1977
+ function normalizedValueMatches(a, b) {
1978
+ let value = normalizeStrAttrValue(b);
1979
+ if (Array.isArray(a)) {
1980
+ for (let item of a)
1981
+ if (normalizeStrAttrValue(item) === value)
1982
+ return !0;
1983
+ } else if (normalizeStrAttrValue(a) === value)
1984
+ return !0;
1985
+ return !1;
1986
+ }
1987
+ function normalizeStrAttrValue(value) {
1988
+ return value && value !== !0 || value === 0 ? value + "" : "";
1989
+ }
1990
+ function normalizeBoolAttrValue(value) {
1991
+ if (value != null && value !== !1)
1992
+ return !0;
1993
+ }
1969
1994
 
1970
1995
  // src/common/compat-meta.ts
1971
1996
  var RENDERER_REGISTER_ID = "$C_r", SET_SCOPE_REGISTER_ID = "$C_s", RENDER_BODY_ID = "$C_b";
package/dist/html.mjs CHANGED
@@ -1685,8 +1685,8 @@ function _attr_style(value) {
1685
1685
  return stringAttr("style", styleValue(value));
1686
1686
  }
1687
1687
  function _attr_option_value(value) {
1688
- let selectedValue = getContext(kSelectedValue);
1689
- return _attr("value", value) + (!isVoid(value) && (Array.isArray(selectedValue) ? selectedValue.includes(value) : selectedValue === value) ? " selected" : "");
1688
+ let valueAttr = _attr("value", value);
1689
+ return normalizedValueMatches(getContext(kSelectedValue), value) ? valueAttr + " selected" : valueAttr;
1690
1690
  }
1691
1691
  var kSelectedValue = /* @__PURE__ */ Symbol("selectedValue");
1692
1692
  function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content) {
@@ -1694,7 +1694,7 @@ function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content)
1694
1694
  3 /* SelectValue */,
1695
1695
  scopeId,
1696
1696
  nodeAccessor,
1697
- value,
1697
+ void 0,
1698
1698
  valueChange
1699
1699
  ), content && withContext(kSelectedValue, value, content);
1700
1700
  }
@@ -1723,26 +1723,34 @@ function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange) {
1723
1723
  nodeAccessor,
1724
1724
  void 0,
1725
1725
  checkedChange
1726
- ), _attr("checked", checked);
1726
+ ), normalizeBoolAttrValue(checked) ? " checked" : "";
1727
1727
  }
1728
1728
  function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value) {
1729
- let multiple = Array.isArray(checkedValue), valueAttr = _attr("value", value);
1729
+ let valueAttr = _attr("value", value);
1730
1730
  return checkedValueChange && writeControlledScope(
1731
1731
  1 /* InputCheckedValue */,
1732
1732
  scopeId,
1733
1733
  nodeAccessor,
1734
- checkedValue,
1734
+ getCheckedValueRef(checkedValue),
1735
1735
  checkedValueChange
1736
- ), (multiple ? checkedValue.includes(value) : checkedValue === value) ? valueAttr + " checked" : valueAttr;
1736
+ ), normalizedValueMatches(checkedValue, value) ? valueAttr + " checked" : valueAttr;
1737
+ }
1738
+ var checkedValuesRefs = /* @__PURE__ */ new WeakMap();
1739
+ function getCheckedValueRef(checkedValue) {
1740
+ if (Array.isArray(checkedValue)) {
1741
+ let ref = checkedValuesRefs.get(checkedValue);
1742
+ return ref || (ref = [], checkedValuesRefs.set(checkedValue, ref)), ref;
1743
+ }
1737
1744
  }
1738
1745
  function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange) {
1746
+ let normalizedOpen = normalizeBoolAttrValue(open);
1739
1747
  return openChange && writeControlledScope(
1740
1748
  4 /* DetailsOrDialogOpen */,
1741
1749
  scopeId,
1742
1750
  nodeAccessor,
1743
- open,
1751
+ normalizedOpen,
1744
1752
  openChange
1745
- ), _attr("open", open);
1753
+ ), normalizedOpen ? " open" : "";
1746
1754
  }
1747
1755
  function _attr_nonce() {
1748
1756
  return getChunk().boundary.state.nonceAttr;
@@ -1876,6 +1884,23 @@ function escapeDoubleQuotedAttrValue(value) {
1876
1884
  function replaceUnsafeDoubleQuoteAttrChar(match) {
1877
1885
  return match === '"' ? "&#34;" : "&amp;";
1878
1886
  }
1887
+ function normalizedValueMatches(a, b) {
1888
+ let value = normalizeStrAttrValue(b);
1889
+ if (Array.isArray(a)) {
1890
+ for (let item of a)
1891
+ if (normalizeStrAttrValue(item) === value)
1892
+ return !0;
1893
+ } else if (normalizeStrAttrValue(a) === value)
1894
+ return !0;
1895
+ return !1;
1896
+ }
1897
+ function normalizeStrAttrValue(value) {
1898
+ return value && value !== !0 || value === 0 ? value + "" : "";
1899
+ }
1900
+ function normalizeBoolAttrValue(value) {
1901
+ if (value != null && value !== !1)
1902
+ return !0;
1903
+ }
1879
1904
 
1880
1905
  // src/common/compat-meta.ts
1881
1906
  var RENDERER_REGISTER_ID = "$C_r", SET_SCOPE_REGISTER_ID = "$C_s", RENDER_BODY_ID = "$C_b";
@@ -5597,7 +5597,7 @@ var native_tag_default = {
5597
5597
  if (injectNonce && attr.name === "nonce") {
5598
5598
  injectNonce = false;
5599
5599
  }
5600
- if (isEventHandler(attr.name) || isNativeTagChangeHandler(attr.name)) {
5600
+ if (isEventHandler(attr.name)) {
5601
5601
  valueExtra.isEffect = true;
5602
5602
  hasEventHandlers = true;
5603
5603
  } else if (!evaluate(attr.value).confident) {
@@ -6491,7 +6491,7 @@ function trackDelimitedAttrObjectProperties(obj, meta) {
6491
6491
  key = prop.key.name;
6492
6492
  } else {
6493
6493
  const keyEval = evaluate(prop.key);
6494
- if (keyEval.confident) {
6494
+ if (keyEval.confident && typeof keyEval.computed === "string" && !/\s/.test(keyEval.computed)) {
6495
6495
  key = keyEval.computed + "";
6496
6496
  } else {
6497
6497
  (dynamicProps ||= []).push(prop);
@@ -6513,9 +6513,6 @@ function trackDelimitedAttrObjectProperties(obj, meta) {
6513
6513
  (meta.dynamicItems ||= []).push(import_compiler32.types.objectExpression(dynamicProps));
6514
6514
  }
6515
6515
  }
6516
- function isNativeTagChangeHandler(propName) {
6517
- return /^(?:value|checked(?:Value)?|open)Change$/.test(propName);
6518
- }
6519
6516
  function buildUndefined2() {
6520
6517
  return import_compiler32.types.unaryExpression("void", import_compiler32.types.numericLiteral(0));
6521
6518
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "marko",
3
- "version": "6.0.145",
3
+ "version": "6.0.146",
4
4
  "description": "Optimized runtime for Marko templates.",
5
5
  "keywords": [
6
6
  "api",
@@ -48,7 +48,7 @@
48
48
  "build": "node -r ~ts ./scripts/bundle.ts"
49
49
  },
50
50
  "dependencies": {
51
- "@marko/compiler": "^5.39.53",
51
+ "@marko/compiler": "^5.39.56",
52
52
  "csstype": "^3.2.3",
53
53
  "magic-string": "^0.30.21"
54
54
  },
package/tags/id.d.marko CHANGED
@@ -1,7 +1,7 @@
1
1
  /** File for types only, not actual implementation **/
2
2
 
3
3
  export interface Input {
4
- value?: string;
4
+ value?: string | null | false;
5
5
  }
6
6
 
7
7
  return="" as string