marko 6.0.145 → 6.0.147

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.d.ts CHANGED
@@ -5,7 +5,7 @@ export { _call } from "./common/helpers";
5
5
  export { $signal, $signalReset } from "./dom/abort-signal";
6
6
  export { compat } from "./dom/compat";
7
7
  export { _await_content, _await_promise, _dynamic_tag, _for_in, _for_of, _for_to, _for_until, _if, _resume_dynamic_tag, _try, } from "./dom/control-flow";
8
- export { _attr_details_or_dialog_open as _attr_details_open, _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_script as _attr_dialog_open_script, _attr_input_checked, _attr_input_checked_script, _attr_input_checkedValue, _attr_input_checkedValue_script, _attr_input_value, _attr_input_value_script, _attr_select_value, _attr_select_value_script, _attr_textarea_value, _attr_textarea_value_script, } from "./dom/controllable";
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
11
  export { _enable_catch as _enable_catch, run } from "./dom/queue";
package/dist/dom.js CHANGED
@@ -26,22 +26,29 @@ __export(dom_exports, {
26
26
  _attr_class_items: () => _attr_class_items,
27
27
  _attr_content: () => _attr_content,
28
28
  _attr_details_open: () => _attr_details_or_dialog_open,
29
+ _attr_details_open_default: () => _attr_details_or_dialog_open_default,
29
30
  _attr_details_open_script: () => _attr_details_or_dialog_open_script,
30
31
  _attr_dialog_open: () => _attr_details_or_dialog_open,
32
+ _attr_dialog_open_default: () => _attr_details_or_dialog_open_default,
31
33
  _attr_dialog_open_script: () => _attr_details_or_dialog_open_script,
32
34
  _attr_input_checked: () => _attr_input_checked,
33
35
  _attr_input_checkedValue: () => _attr_input_checkedValue,
36
+ _attr_input_checkedValue_default: () => _attr_input_checkedValue_default,
34
37
  _attr_input_checkedValue_script: () => _attr_input_checkedValue_script,
38
+ _attr_input_checked_default: () => _attr_input_checked_default,
35
39
  _attr_input_checked_script: () => _attr_input_checked_script,
36
40
  _attr_input_value: () => _attr_input_value,
41
+ _attr_input_value_default: () => _attr_input_value_default,
37
42
  _attr_input_value_script: () => _attr_input_value_script,
38
43
  _attr_nonce: () => _attr_nonce,
39
44
  _attr_select_value: () => _attr_select_value,
45
+ _attr_select_value_default: () => _attr_select_value_default,
40
46
  _attr_select_value_script: () => _attr_select_value_script,
41
47
  _attr_style: () => _attr_style,
42
48
  _attr_style_item: () => _attr_style_item,
43
49
  _attr_style_items: () => _attr_style_items,
44
50
  _attr_textarea_value: () => _attr_input_value,
51
+ _attr_textarea_value_default: () => _attr_input_value_default,
45
52
  _attr_textarea_value_script: () => _attr_input_value_script,
46
53
  _attrs: () => _attrs,
47
54
  _attrs_content: () => _attrs_content,
@@ -641,18 +648,21 @@ function _el(id, accessor) {
641
648
  }
642
649
 
643
650
  // src/dom/controllable.ts
651
+ var inputType = "", controllableDelegate = createDelegator();
652
+ function _attr_input_checked_default(scope, nodeAccessor, checked) {
653
+ let el = scope[nodeAccessor], normalizedChecked = normalizeBoolProp(checked);
654
+ if (el.defaultChecked !== normalizedChecked) {
655
+ let restoreValue = scope.H ? normalizedChecked : el.checked;
656
+ el.defaultChecked = normalizedChecked, restoreValue !== normalizedChecked && (el.checked = restoreValue);
657
+ }
658
+ }
644
659
  function _attr_input_checked(scope, nodeAccessor, checked, checkedChange) {
645
- setCheckboxValue(
646
- scope,
647
- nodeAccessor,
648
- 0 /* InputChecked */,
649
- normalizeBoolProp(checked),
650
- checkedChange
651
- );
660
+ let el = scope[nodeAccessor], normalizedChecked = normalizeBoolProp(checked);
661
+ scope["E" /* ControlledHandler */ + nodeAccessor] = checkedChange, scope["F" /* ControlledType */ + nodeAccessor] = checkedChange ? 0 /* InputChecked */ : 5 /* None */, checkedChange && !scope.H ? el.checked = normalizedChecked : _attr_input_checked_default(scope, nodeAccessor, normalizedChecked);
652
662
  }
653
663
  function _attr_input_checked_script(scope, nodeAccessor) {
654
664
  let el = scope[nodeAccessor];
655
- syncControllable(el, "input", hasCheckboxChanged, () => {
665
+ syncControllableFormInput(el, hasCheckboxChanged, () => {
656
666
  let checkedChange = scope["E" /* ControlledHandler */ + nodeAccessor];
657
667
  if (checkedChange) {
658
668
  let newValue = el.checked;
@@ -660,18 +670,28 @@ function _attr_input_checked_script(scope, nodeAccessor) {
660
670
  }
661
671
  });
662
672
  }
673
+ function _attr_input_checkedValue_default(scope, nodeAccessor, checkedValue, value) {
674
+ let multiple = Array.isArray(checkedValue), normalizedValue = normalizeStrProp(value), normalizedCheckedValue = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
675
+ _attr(scope[nodeAccessor], "value", normalizedValue), _attr_input_checked_default(
676
+ scope,
677
+ nodeAccessor,
678
+ multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue
679
+ );
680
+ }
663
681
  function _attr_input_checkedValue(scope, nodeAccessor, checkedValue, checkedValueChange, value) {
664
- scope["G" /* ControlledValue */ + nodeAccessor] = checkedValue, _attr(scope[nodeAccessor], "value", value), setCheckboxValue(
682
+ let el = scope[nodeAccessor], multiple = Array.isArray(checkedValue), normalizedValue = normalizeStrProp(value), normalizedCheckedValue = scope["G" /* ControlledValue */ + nodeAccessor] = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
683
+ _attr(el, "value", normalizedValue), scope["E" /* ControlledHandler */ + nodeAccessor] = checkedValueChange, scope["F" /* ControlledType */ + nodeAccessor] = checkedValueChange ? 1 /* InputCheckedValue */ : 5 /* None */, checkedValueChange && !scope.H ? el.checked = multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue : _attr_input_checkedValue_default(
665
684
  scope,
666
685
  nodeAccessor,
667
- 1 /* InputCheckedValue */,
668
- Array.isArray(checkedValue) ? checkedValue.includes(value) : checkedValue === value,
669
- checkedValueChange
686
+ normalizedCheckedValue,
687
+ normalizedValue
670
688
  );
671
689
  }
672
690
  function _attr_input_checkedValue_script(scope, nodeAccessor) {
673
691
  let el = scope[nodeAccessor];
674
- syncControllable(el, "input", hasCheckboxChanged, () => {
692
+ isResuming && el.defaultChecked && (scope["G" /* ControlledValue */ + nodeAccessor] ? scope["G" /* ControlledValue */ + nodeAccessor].push(
693
+ el.value
694
+ ) : scope["G" /* ControlledValue */ + nodeAccessor] = el.value), syncControllableFormInput(el, hasCheckboxChanged, () => {
675
695
  let checkedValueChange = scope["E" /* ControlledHandler */ + nodeAccessor];
676
696
  if (checkedValueChange) {
677
697
  let oldValue = scope["G" /* ControlledValue */ + nodeAccessor], newValue = Array.isArray(oldValue) ? updateList(oldValue, el.value, el.checked) : el.checked ? el.value : void 0;
@@ -686,103 +706,107 @@ function _attr_input_checkedValue_script(scope, nodeAccessor) {
686
706
  }
687
707
  });
688
708
  }
709
+ function _attr_input_value_default(scope, nodeAccessor, value) {
710
+ let el = scope[nodeAccessor], normalizedValue = normalizeStrProp(value);
711
+ if (el.defaultValue !== normalizedValue) {
712
+ let restoreValue = scope.H ? normalizedValue : el.value;
713
+ el.defaultValue = normalizedValue, setInputValue(el, restoreValue);
714
+ }
715
+ }
689
716
  function _attr_input_value(scope, nodeAccessor, value, valueChange) {
690
717
  let el = scope[nodeAccessor], normalizedValue = normalizeStrProp(value);
691
- 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);
718
+ scope["E" /* ControlledHandler */ + nodeAccessor] = valueChange, scope["G" /* ControlledValue */ + nodeAccessor] = normalizedValue, scope["F" /* ControlledType */ + nodeAccessor] = valueChange ? 2 /* InputValue */ : 5 /* None */, valueChange && !scope.H ? setInputValue(el, normalizedValue) : _attr_input_value_default(scope, nodeAccessor, normalizedValue);
692
719
  }
693
720
  function _attr_input_value_script(scope, nodeAccessor) {
694
721
  let el = scope[nodeAccessor];
695
- isResuming && (scope["G" /* ControlledValue */ + nodeAccessor] = el.defaultValue), syncControllable(el, "input", hasValueChanged, (ev) => {
722
+ isResuming && (scope["G" /* ControlledValue */ + nodeAccessor] = el.defaultValue), syncControllableFormInput(el, hasValueChanged, (ev) => {
696
723
  let valueChange = scope["E" /* ControlledHandler */ + nodeAccessor];
697
- valueChange && (inputType = ev?.inputType, valueChange(el.value), run(), setValueAndUpdateSelection(
698
- el,
699
- scope["G" /* ControlledValue */ + nodeAccessor]
700
- ), inputType = "");
724
+ valueChange && (inputType = ev?.inputType, valueChange(el.value), run(), setInputValue(el, scope["G" /* ControlledValue */ + nodeAccessor]), inputType = "");
701
725
  });
702
726
  }
727
+ function setInputValue(el, value) {
728
+ if (el.value !== value) {
729
+ let updatedPosition = resolveCursorPosition(
730
+ inputType,
731
+ el.getRootNode().activeElement === el && el.selectionStart,
732
+ el.value,
733
+ el.value = value
734
+ );
735
+ ~updatedPosition && el.setSelectionRange(updatedPosition, updatedPosition);
736
+ }
737
+ }
738
+ function _attr_select_value_default(scope, nodeAccessor, value) {
739
+ let restoreValue, el = scope[nodeAccessor], existing = !scope.H, multiple = Array.isArray(value), normalizedValue = multiple ? value.map(normalizeStrProp) : normalizeStrProp(value);
740
+ pendingEffects.unshift(() => {
741
+ for (let opt of el.options) {
742
+ let selected = multiple ? normalizedValue.includes(opt.value) : opt.value === normalizedValue;
743
+ opt.defaultSelected !== selected && (existing && (restoreValue ??= getSelectValue(el, multiple)), opt.defaultSelected = selected);
744
+ }
745
+ restoreValue !== void 0 && setSelectValue(el, restoreValue, multiple);
746
+ }, scope);
747
+ }
703
748
  function _attr_select_value(scope, nodeAccessor, value, valueChange) {
704
- 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(
705
- () => setSelectOptions(
706
- scope[nodeAccessor],
707
- value,
708
- valueChange
709
- ),
749
+ let el = scope[nodeAccessor], existing = !scope.H, multiple = Array.isArray(value), normalizedValue = scope["G" /* ControlledValue */ + nodeAccessor] = multiple ? value.map(normalizeStrProp) : normalizeStrProp(value);
750
+ scope["E" /* ControlledHandler */ + nodeAccessor] = valueChange, scope["F" /* ControlledType */ + nodeAccessor] = valueChange ? 3 /* SelectValue */ : 5 /* None */, valueChange && existing ? pendingEffects.unshift(
751
+ () => setSelectValue(el, normalizedValue, multiple),
710
752
  scope
711
- );
753
+ ) : _attr_select_value_default(scope, nodeAccessor, normalizedValue);
712
754
  }
713
755
  function _attr_select_value_script(scope, nodeAccessor) {
714
756
  let el = scope[nodeAccessor], onChange = () => {
715
757
  let valueChange = scope["E" /* ControlledHandler */ + nodeAccessor];
716
758
  if (valueChange) {
717
- let newValue = Array.isArray(
718
- scope["G" /* ControlledValue */ + nodeAccessor]
719
- ) ? Array.from(el.selectedOptions, toValueProp) : el.value;
720
- setSelectOptions(
721
- el,
722
- scope["G" /* ControlledValue */ + nodeAccessor],
723
- valueChange
724
- ), valueChange(newValue), run();
759
+ let oldValue = scope["G" /* ControlledValue */ + nodeAccessor], multiple = Array.isArray(oldValue), newValue = getSelectValue(el, multiple);
760
+ setSelectValue(el, oldValue, multiple), valueChange(newValue), run();
725
761
  }
726
762
  };
727
- el._ || new MutationObserver(() => {
728
- let value = scope["G" /* ControlledValue */ + nodeAccessor];
729
- (Array.isArray(value) ? value.length !== el.selectedOptions.length || value.some((value2, i) => value2 != el.selectedOptions[i].value) : el.value != value) && onChange();
730
- }).observe(el, {
731
- childList: !0,
732
- subtree: !0
733
- }), syncControllable(el, "input", hasSelectChanged, onChange);
734
- }
735
- function setSelectOptions(el, value, valueChange) {
736
- if (Array.isArray(value))
737
- for (let opt of el.options) {
738
- let selected = value.includes(opt.value);
739
- valueChange ? opt.selected = selected : opt.defaultSelected = selected;
740
- }
741
- else {
742
- let normalizedValue = normalizeStrProp(value);
743
- if (valueChange)
744
- el.value = normalizedValue;
745
- else
763
+ if (isResuming)
764
+ if (el.multiple) {
765
+ scope["G" /* ControlledValue */ + nodeAccessor] = [];
746
766
  for (let opt of el.options)
747
- opt.defaultSelected = opt.value === normalizedValue;
748
- }
767
+ opt.defaultSelected && scope["G" /* ControlledValue */ + nodeAccessor].push(opt.value);
768
+ } else {
769
+ scope["G" /* ControlledValue */ + nodeAccessor] = "";
770
+ for (let opt of el.options)
771
+ if (opt.defaultSelected) {
772
+ scope["G" /* ControlledValue */ + nodeAccessor] = opt.value;
773
+ break;
774
+ }
775
+ }
776
+ syncControllableFormInput(el, hasSelectChanged, onChange), new MutationObserver(() => {
777
+ let value = scope["G" /* ControlledValue */ + nodeAccessor];
778
+ (Array.isArray(value) ? value.length !== el.selectedOptions.length || value.some((value2, i) => value2 != el.selectedOptions[i].value) : el.value !== value) && onChange();
779
+ }).observe(el, { childList: !0, subtree: !0 });
780
+ }
781
+ function setSelectValue(el, value, multiple) {
782
+ if (multiple)
783
+ for (let opt of el.options)
784
+ opt.selected = value.includes(opt.value);
785
+ else
786
+ el.value = value;
787
+ }
788
+ function getSelectValue(el, multiple) {
789
+ return multiple ? Array.from(el.selectedOptions, (opt) => opt.value) : el.value;
790
+ }
791
+ function _attr_details_or_dialog_open_default(scope, nodeAccessor, open) {
792
+ scope.H && (scope[nodeAccessor].open = normalizeBoolProp(open));
749
793
  }
750
794
  function _attr_details_or_dialog_open(scope, nodeAccessor, open, openChange) {
751
- 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);
795
+ let normalizedOpen = scope["G" /* ControlledValue */ + nodeAccessor] = normalizeBoolProp(open);
796
+ scope["E" /* ControlledHandler */ + nodeAccessor] = openChange, scope["F" /* ControlledType */ + nodeAccessor] = openChange ? 4 /* DetailsOrDialogOpen */ : 5 /* None */, openChange && !scope.H ? scope[nodeAccessor].open = normalizedOpen : _attr_details_or_dialog_open_default(scope, nodeAccessor, normalizedOpen);
752
797
  }
753
798
  function _attr_details_or_dialog_open_script(scope, nodeAccessor) {
754
- let el = scope[nodeAccessor], hasChanged = () => el.open !== scope["G" /* ControlledValue */ + nodeAccessor];
755
- syncControllable(
756
- el,
757
- el.tagName === "DIALOG" ? "close" : "toggle",
758
- hasChanged,
759
- () => {
760
- let openChange = scope["E" /* ControlledHandler */ + nodeAccessor];
761
- if (openChange && hasChanged()) {
762
- let newValue = el.open;
763
- el.open = !newValue, openChange(newValue), run();
764
- }
799
+ let el = scope[nodeAccessor];
800
+ new MutationObserver(() => {
801
+ let openChange = scope["E" /* ControlledHandler */ + nodeAccessor];
802
+ if (openChange && el.open === !scope["G" /* ControlledValue */ + nodeAccessor]) {
803
+ let newValue = el.open;
804
+ el.open = !newValue, openChange(newValue), run();
765
805
  }
766
- );
767
- }
768
- var inputType = "";
769
- function setValueAndUpdateSelection(el, value) {
770
- if (el.value !== value) {
771
- let updatedPosition = resolveCursorPosition(
772
- inputType,
773
- el.getRootNode().activeElement === el && el.selectionStart,
774
- el.value,
775
- el.value = value
776
- );
777
- ~updatedPosition && el.setSelectionRange(updatedPosition, updatedPosition);
778
- }
779
- }
780
- function setCheckboxValue(scope, nodeAccessor, type, checked, checkedChange) {
781
- scope["E" /* ControlledHandler */ + nodeAccessor] = checkedChange, checkedChange ? (scope["F" /* ControlledType */ + nodeAccessor] = type, scope[nodeAccessor].checked = checked) : (scope["F" /* ControlledType */ + nodeAccessor] = 5 /* None */, scope[nodeAccessor].defaultChecked = checked);
806
+ }).observe(el, { attributes: !0, attributeFilter: ["open"] });
782
807
  }
783
- var controllableDelegate = createDelegator();
784
- function syncControllable(el, event, hasChanged, onChange) {
785
- el._ || (controllableDelegate(el, event, handleChange), el.form && controllableDelegate(el.form, "reset", handleFormReset), isResuming && hasChanged(el) && queueMicrotask(onChange)), el._ = onChange;
808
+ function syncControllableFormInput(el, hasChanged, onChange) {
809
+ el._ = onChange, controllableDelegate(el, "input", handleChange), el.form && controllableDelegate(el.form, "reset", handleFormReset), isResuming && hasChanged(el) && queueMicrotask(onChange);
786
810
  }
787
811
  function handleChange(ev) {
788
812
  ev.target._?.(ev);
@@ -821,9 +845,6 @@ function updateList(arr, val, push2) {
821
845
  let index = arr.indexOf(val);
822
846
  return (push2 ? !~index && [...arr, val] : ~index && arr.slice(0, index).concat(arr.slice(index + 1))) || arr;
823
847
  }
824
- function toValueProp(it) {
825
- return it.value;
826
- }
827
848
 
828
849
  // src/dom/dom.ts
829
850
  function _to_text(value) {
@@ -853,7 +874,7 @@ function _attr_style_items(element, items) {
853
874
  _attr_style_item(element, key, items[key]);
854
875
  }
855
876
  function _attr_style_item(element, name, value) {
856
- element.style.setProperty(name, value || value === 0 ? value + "" : "");
877
+ element.style.setProperty(name, _to_text(value));
857
878
  }
858
879
  function _attr_nonce(scope, nodeAccessor) {
859
880
  _attr(scope[nodeAccessor], "nonce", scope.$.cspNonce);
@@ -999,7 +1020,7 @@ function _attrs_script(scope, nodeAccessor) {
999
1020
  }
1000
1021
  function _html(scope, value, accessor) {
1001
1022
  let firstChild = scope[accessor], parentNode = firstChild.parentNode, lastChild = scope["H" /* DynamicHTMLLastChild */ + accessor] || firstChild, newContent = parseHTML(
1002
- value || value === 0 ? value + "" : "",
1023
+ _to_text(value),
1003
1024
  parentNode.namespaceURI
1004
1025
  );
1005
1026
  insertChildNodes(
package/dist/dom.mjs CHANGED
@@ -537,18 +537,21 @@ function _el(id, accessor) {
537
537
  }
538
538
 
539
539
  // src/dom/controllable.ts
540
+ var inputType = "", controllableDelegate = createDelegator();
541
+ function _attr_input_checked_default(scope, nodeAccessor, checked) {
542
+ let el = scope[nodeAccessor], normalizedChecked = normalizeBoolProp(checked);
543
+ if (el.defaultChecked !== normalizedChecked) {
544
+ let restoreValue = scope.H ? normalizedChecked : el.checked;
545
+ el.defaultChecked = normalizedChecked, restoreValue !== normalizedChecked && (el.checked = restoreValue);
546
+ }
547
+ }
540
548
  function _attr_input_checked(scope, nodeAccessor, checked, checkedChange) {
541
- setCheckboxValue(
542
- scope,
543
- nodeAccessor,
544
- 0 /* InputChecked */,
545
- normalizeBoolProp(checked),
546
- checkedChange
547
- );
549
+ let el = scope[nodeAccessor], normalizedChecked = normalizeBoolProp(checked);
550
+ scope["E" /* ControlledHandler */ + nodeAccessor] = checkedChange, scope["F" /* ControlledType */ + nodeAccessor] = checkedChange ? 0 /* InputChecked */ : 5 /* None */, checkedChange && !scope.H ? el.checked = normalizedChecked : _attr_input_checked_default(scope, nodeAccessor, normalizedChecked);
548
551
  }
549
552
  function _attr_input_checked_script(scope, nodeAccessor) {
550
553
  let el = scope[nodeAccessor];
551
- syncControllable(el, "input", hasCheckboxChanged, () => {
554
+ syncControllableFormInput(el, hasCheckboxChanged, () => {
552
555
  let checkedChange = scope["E" /* ControlledHandler */ + nodeAccessor];
553
556
  if (checkedChange) {
554
557
  let newValue = el.checked;
@@ -556,18 +559,28 @@ function _attr_input_checked_script(scope, nodeAccessor) {
556
559
  }
557
560
  });
558
561
  }
562
+ function _attr_input_checkedValue_default(scope, nodeAccessor, checkedValue, value) {
563
+ let multiple = Array.isArray(checkedValue), normalizedValue = normalizeStrProp(value), normalizedCheckedValue = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
564
+ _attr(scope[nodeAccessor], "value", normalizedValue), _attr_input_checked_default(
565
+ scope,
566
+ nodeAccessor,
567
+ multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue
568
+ );
569
+ }
559
570
  function _attr_input_checkedValue(scope, nodeAccessor, checkedValue, checkedValueChange, value) {
560
- scope["G" /* ControlledValue */ + nodeAccessor] = checkedValue, _attr(scope[nodeAccessor], "value", value), setCheckboxValue(
571
+ let el = scope[nodeAccessor], multiple = Array.isArray(checkedValue), normalizedValue = normalizeStrProp(value), normalizedCheckedValue = scope["G" /* ControlledValue */ + nodeAccessor] = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
572
+ _attr(el, "value", normalizedValue), scope["E" /* ControlledHandler */ + nodeAccessor] = checkedValueChange, scope["F" /* ControlledType */ + nodeAccessor] = checkedValueChange ? 1 /* InputCheckedValue */ : 5 /* None */, checkedValueChange && !scope.H ? el.checked = multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue : _attr_input_checkedValue_default(
561
573
  scope,
562
574
  nodeAccessor,
563
- 1 /* InputCheckedValue */,
564
- Array.isArray(checkedValue) ? checkedValue.includes(value) : checkedValue === value,
565
- checkedValueChange
575
+ normalizedCheckedValue,
576
+ normalizedValue
566
577
  );
567
578
  }
568
579
  function _attr_input_checkedValue_script(scope, nodeAccessor) {
569
580
  let el = scope[nodeAccessor];
570
- syncControllable(el, "input", hasCheckboxChanged, () => {
581
+ isResuming && el.defaultChecked && (scope["G" /* ControlledValue */ + nodeAccessor] ? scope["G" /* ControlledValue */ + nodeAccessor].push(
582
+ el.value
583
+ ) : scope["G" /* ControlledValue */ + nodeAccessor] = el.value), syncControllableFormInput(el, hasCheckboxChanged, () => {
571
584
  let checkedValueChange = scope["E" /* ControlledHandler */ + nodeAccessor];
572
585
  if (checkedValueChange) {
573
586
  let oldValue = scope["G" /* ControlledValue */ + nodeAccessor], newValue = Array.isArray(oldValue) ? updateList(oldValue, el.value, el.checked) : el.checked ? el.value : void 0;
@@ -582,103 +595,107 @@ function _attr_input_checkedValue_script(scope, nodeAccessor) {
582
595
  }
583
596
  });
584
597
  }
598
+ function _attr_input_value_default(scope, nodeAccessor, value) {
599
+ let el = scope[nodeAccessor], normalizedValue = normalizeStrProp(value);
600
+ if (el.defaultValue !== normalizedValue) {
601
+ let restoreValue = scope.H ? normalizedValue : el.value;
602
+ el.defaultValue = normalizedValue, setInputValue(el, restoreValue);
603
+ }
604
+ }
585
605
  function _attr_input_value(scope, nodeAccessor, value, valueChange) {
586
606
  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);
607
+ scope["E" /* ControlledHandler */ + nodeAccessor] = valueChange, scope["G" /* ControlledValue */ + nodeAccessor] = normalizedValue, scope["F" /* ControlledType */ + nodeAccessor] = valueChange ? 2 /* InputValue */ : 5 /* None */, valueChange && !scope.H ? setInputValue(el, normalizedValue) : _attr_input_value_default(scope, nodeAccessor, normalizedValue);
588
608
  }
589
609
  function _attr_input_value_script(scope, nodeAccessor) {
590
610
  let el = scope[nodeAccessor];
591
- isResuming && (scope["G" /* ControlledValue */ + nodeAccessor] = el.defaultValue), syncControllable(el, "input", hasValueChanged, (ev) => {
611
+ isResuming && (scope["G" /* ControlledValue */ + nodeAccessor] = el.defaultValue), syncControllableFormInput(el, hasValueChanged, (ev) => {
592
612
  let valueChange = scope["E" /* ControlledHandler */ + nodeAccessor];
593
- valueChange && (inputType = ev?.inputType, valueChange(el.value), run(), setValueAndUpdateSelection(
594
- el,
595
- scope["G" /* ControlledValue */ + nodeAccessor]
596
- ), inputType = "");
613
+ valueChange && (inputType = ev?.inputType, valueChange(el.value), run(), setInputValue(el, scope["G" /* ControlledValue */ + nodeAccessor]), inputType = "");
597
614
  });
598
615
  }
616
+ function setInputValue(el, value) {
617
+ if (el.value !== value) {
618
+ let updatedPosition = resolveCursorPosition(
619
+ inputType,
620
+ el.getRootNode().activeElement === el && el.selectionStart,
621
+ el.value,
622
+ el.value = value
623
+ );
624
+ ~updatedPosition && el.setSelectionRange(updatedPosition, updatedPosition);
625
+ }
626
+ }
627
+ function _attr_select_value_default(scope, nodeAccessor, value) {
628
+ let restoreValue, el = scope[nodeAccessor], existing = !scope.H, multiple = Array.isArray(value), normalizedValue = multiple ? value.map(normalizeStrProp) : normalizeStrProp(value);
629
+ pendingEffects.unshift(() => {
630
+ for (let opt of el.options) {
631
+ let selected = multiple ? normalizedValue.includes(opt.value) : opt.value === normalizedValue;
632
+ opt.defaultSelected !== selected && (existing && (restoreValue ??= getSelectValue(el, multiple)), opt.defaultSelected = selected);
633
+ }
634
+ restoreValue !== void 0 && setSelectValue(el, restoreValue, multiple);
635
+ }, scope);
636
+ }
599
637
  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(
601
- () => setSelectOptions(
602
- scope[nodeAccessor],
603
- value,
604
- valueChange
605
- ),
638
+ let el = scope[nodeAccessor], existing = !scope.H, multiple = Array.isArray(value), normalizedValue = scope["G" /* ControlledValue */ + nodeAccessor] = multiple ? value.map(normalizeStrProp) : normalizeStrProp(value);
639
+ scope["E" /* ControlledHandler */ + nodeAccessor] = valueChange, scope["F" /* ControlledType */ + nodeAccessor] = valueChange ? 3 /* SelectValue */ : 5 /* None */, valueChange && existing ? pendingEffects.unshift(
640
+ () => setSelectValue(el, normalizedValue, multiple),
606
641
  scope
607
- );
642
+ ) : _attr_select_value_default(scope, nodeAccessor, normalizedValue);
608
643
  }
609
644
  function _attr_select_value_script(scope, nodeAccessor) {
610
645
  let el = scope[nodeAccessor], onChange = () => {
611
646
  let valueChange = scope["E" /* ControlledHandler */ + nodeAccessor];
612
647
  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();
648
+ let oldValue = scope["G" /* ControlledValue */ + nodeAccessor], multiple = Array.isArray(oldValue), newValue = getSelectValue(el, multiple);
649
+ setSelectValue(el, oldValue, multiple), valueChange(newValue), run();
621
650
  }
622
651
  };
623
- el._ || new MutationObserver(() => {
624
- 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();
626
- }).observe(el, {
627
- childList: !0,
628
- subtree: !0
629
- }), syncControllable(el, "input", hasSelectChanged, onChange);
630
- }
631
- function setSelectOptions(el, value, valueChange) {
632
- if (Array.isArray(value))
633
- for (let opt of el.options) {
634
- let selected = value.includes(opt.value);
635
- valueChange ? opt.selected = selected : opt.defaultSelected = selected;
636
- }
637
- else {
638
- let normalizedValue = normalizeStrProp(value);
639
- if (valueChange)
640
- el.value = normalizedValue;
641
- else
652
+ if (isResuming)
653
+ if (el.multiple) {
654
+ scope["G" /* ControlledValue */ + nodeAccessor] = [];
642
655
  for (let opt of el.options)
643
- opt.defaultSelected = opt.value === normalizedValue;
644
- }
656
+ opt.defaultSelected && scope["G" /* ControlledValue */ + nodeAccessor].push(opt.value);
657
+ } else {
658
+ scope["G" /* ControlledValue */ + nodeAccessor] = "";
659
+ for (let opt of el.options)
660
+ if (opt.defaultSelected) {
661
+ scope["G" /* ControlledValue */ + nodeAccessor] = opt.value;
662
+ break;
663
+ }
664
+ }
665
+ syncControllableFormInput(el, hasSelectChanged, onChange), new MutationObserver(() => {
666
+ let value = scope["G" /* ControlledValue */ + nodeAccessor];
667
+ (Array.isArray(value) ? value.length !== el.selectedOptions.length || value.some((value2, i) => value2 != el.selectedOptions[i].value) : el.value !== value) && onChange();
668
+ }).observe(el, { childList: !0, subtree: !0 });
669
+ }
670
+ function setSelectValue(el, value, multiple) {
671
+ if (multiple)
672
+ for (let opt of el.options)
673
+ opt.selected = value.includes(opt.value);
674
+ else
675
+ el.value = value;
676
+ }
677
+ function getSelectValue(el, multiple) {
678
+ return multiple ? Array.from(el.selectedOptions, (opt) => opt.value) : el.value;
679
+ }
680
+ function _attr_details_or_dialog_open_default(scope, nodeAccessor, open) {
681
+ scope.H && (scope[nodeAccessor].open = normalizeBoolProp(open));
645
682
  }
646
683
  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);
684
+ let normalizedOpen = scope["G" /* ControlledValue */ + nodeAccessor] = normalizeBoolProp(open);
685
+ scope["E" /* ControlledHandler */ + nodeAccessor] = openChange, scope["F" /* ControlledType */ + nodeAccessor] = openChange ? 4 /* DetailsOrDialogOpen */ : 5 /* None */, openChange && !scope.H ? scope[nodeAccessor].open = normalizedOpen : _attr_details_or_dialog_open_default(scope, nodeAccessor, normalizedOpen);
648
686
  }
649
687
  function _attr_details_or_dialog_open_script(scope, nodeAccessor) {
650
- let el = scope[nodeAccessor], hasChanged = () => el.open !== scope["G" /* ControlledValue */ + nodeAccessor];
651
- syncControllable(
652
- el,
653
- el.tagName === "DIALOG" ? "close" : "toggle",
654
- hasChanged,
655
- () => {
656
- let openChange = scope["E" /* ControlledHandler */ + nodeAccessor];
657
- if (openChange && hasChanged()) {
658
- let newValue = el.open;
659
- el.open = !newValue, openChange(newValue), run();
660
- }
688
+ let el = scope[nodeAccessor];
689
+ new MutationObserver(() => {
690
+ let openChange = scope["E" /* ControlledHandler */ + nodeAccessor];
691
+ if (openChange && el.open === !scope["G" /* ControlledValue */ + nodeAccessor]) {
692
+ let newValue = el.open;
693
+ el.open = !newValue, openChange(newValue), run();
661
694
  }
662
- );
663
- }
664
- var inputType = "";
665
- function setValueAndUpdateSelection(el, value) {
666
- if (el.value !== value) {
667
- let updatedPosition = resolveCursorPosition(
668
- inputType,
669
- el.getRootNode().activeElement === el && el.selectionStart,
670
- el.value,
671
- el.value = value
672
- );
673
- ~updatedPosition && el.setSelectionRange(updatedPosition, updatedPosition);
674
- }
675
- }
676
- function setCheckboxValue(scope, nodeAccessor, type, checked, checkedChange) {
677
- scope["E" /* ControlledHandler */ + nodeAccessor] = checkedChange, checkedChange ? (scope["F" /* ControlledType */ + nodeAccessor] = type, scope[nodeAccessor].checked = checked) : (scope["F" /* ControlledType */ + nodeAccessor] = 5 /* None */, scope[nodeAccessor].defaultChecked = checked);
695
+ }).observe(el, { attributes: !0, attributeFilter: ["open"] });
678
696
  }
679
- var controllableDelegate = createDelegator();
680
- function syncControllable(el, event, hasChanged, onChange) {
681
- el._ || (controllableDelegate(el, event, handleChange), el.form && controllableDelegate(el.form, "reset", handleFormReset), isResuming && hasChanged(el) && queueMicrotask(onChange)), el._ = onChange;
697
+ function syncControllableFormInput(el, hasChanged, onChange) {
698
+ el._ = onChange, controllableDelegate(el, "input", handleChange), el.form && controllableDelegate(el.form, "reset", handleFormReset), isResuming && hasChanged(el) && queueMicrotask(onChange);
682
699
  }
683
700
  function handleChange(ev) {
684
701
  ev.target._?.(ev);
@@ -717,9 +734,6 @@ function updateList(arr, val, push2) {
717
734
  let index = arr.indexOf(val);
718
735
  return (push2 ? !~index && [...arr, val] : ~index && arr.slice(0, index).concat(arr.slice(index + 1))) || arr;
719
736
  }
720
- function toValueProp(it) {
721
- return it.value;
722
- }
723
737
 
724
738
  // src/dom/dom.ts
725
739
  function _to_text(value) {
@@ -749,7 +763,7 @@ function _attr_style_items(element, items) {
749
763
  _attr_style_item(element, key, items[key]);
750
764
  }
751
765
  function _attr_style_item(element, name, value) {
752
- element.style.setProperty(name, value || value === 0 ? value + "" : "");
766
+ element.style.setProperty(name, _to_text(value));
753
767
  }
754
768
  function _attr_nonce(scope, nodeAccessor) {
755
769
  _attr(scope[nodeAccessor], "nonce", scope.$.cspNonce);
@@ -895,7 +909,7 @@ function _attrs_script(scope, nodeAccessor) {
895
909
  }
896
910
  function _html(scope, value, accessor) {
897
911
  let firstChild = scope[accessor], parentNode = firstChild.parentNode, lastChild = scope["H" /* DynamicHTMLLastChild */ + accessor] || firstChild, newContent = parseHTML(
898
- value || value === 0 ? value + "" : "",
912
+ _to_text(value),
899
913
  parentNode.namespaceURI
900
914
  );
901
915
  insertChildNodes(
@@ -1563,22 +1577,29 @@ export {
1563
1577
  _attr_class_items,
1564
1578
  _attr_content,
1565
1579
  _attr_details_or_dialog_open as _attr_details_open,
1580
+ _attr_details_or_dialog_open_default as _attr_details_open_default,
1566
1581
  _attr_details_or_dialog_open_script as _attr_details_open_script,
1567
1582
  _attr_details_or_dialog_open as _attr_dialog_open,
1583
+ _attr_details_or_dialog_open_default as _attr_dialog_open_default,
1568
1584
  _attr_details_or_dialog_open_script as _attr_dialog_open_script,
1569
1585
  _attr_input_checked,
1570
1586
  _attr_input_checkedValue,
1587
+ _attr_input_checkedValue_default,
1571
1588
  _attr_input_checkedValue_script,
1589
+ _attr_input_checked_default,
1572
1590
  _attr_input_checked_script,
1573
1591
  _attr_input_value,
1592
+ _attr_input_value_default,
1574
1593
  _attr_input_value_script,
1575
1594
  _attr_nonce,
1576
1595
  _attr_select_value,
1596
+ _attr_select_value_default,
1577
1597
  _attr_select_value_script,
1578
1598
  _attr_style,
1579
1599
  _attr_style_item,
1580
1600
  _attr_style_items,
1581
1601
  _attr_input_value as _attr_textarea_value,
1602
+ _attr_input_value_default as _attr_textarea_value_default,
1582
1603
  _attr_input_value_script as _attr_textarea_value_script,
1583
1604
  _attrs,
1584
1605
  _attrs_content,
@@ -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;