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.
@@ -976,18 +976,33 @@ function _el(id, accessor) {
976
976
  }
977
977
 
978
978
  // src/dom/controllable.ts
979
+ var inputType = "";
980
+ var controllableDelegate = createDelegator();
981
+ function _attr_input_checked_default(scope, nodeAccessor, checked) {
982
+ const el = scope[nodeAccessor];
983
+ const normalizedChecked = normalizeBoolProp(checked);
984
+ if (el.defaultChecked !== normalizedChecked) {
985
+ const restoreValue = scope["#Creating" /* Creating */] ? normalizedChecked : el.checked;
986
+ el.defaultChecked = normalizedChecked;
987
+ if (restoreValue !== normalizedChecked) {
988
+ el.checked = restoreValue;
989
+ }
990
+ }
991
+ }
979
992
  function _attr_input_checked(scope, nodeAccessor, checked, checkedChange) {
980
- setCheckboxValue(
981
- scope,
982
- nodeAccessor,
983
- 0 /* InputChecked */,
984
- normalizeBoolProp(checked),
985
- checkedChange
986
- );
993
+ const el = scope[nodeAccessor];
994
+ const normalizedChecked = normalizeBoolProp(checked);
995
+ scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = checkedChange;
996
+ scope["ControlledType:" /* ControlledType */ + nodeAccessor] = checkedChange ? 0 /* InputChecked */ : 5 /* None */;
997
+ if (checkedChange && !scope["#Creating" /* Creating */]) {
998
+ el.checked = normalizedChecked;
999
+ } else {
1000
+ _attr_input_checked_default(scope, nodeAccessor, normalizedChecked);
1001
+ }
987
1002
  }
988
1003
  function _attr_input_checked_script(scope, nodeAccessor) {
989
1004
  const el = scope[nodeAccessor];
990
- syncControllable(el, "input", hasCheckboxChanged, () => {
1005
+ syncControllableFormInput(el, hasCheckboxChanged, () => {
991
1006
  const checkedChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
992
1007
  if (checkedChange) {
993
1008
  const newValue = el.checked;
@@ -997,20 +1012,48 @@ function _attr_input_checked_script(scope, nodeAccessor) {
997
1012
  }
998
1013
  });
999
1014
  }
1000
- function _attr_input_checkedValue(scope, nodeAccessor, checkedValue, checkedValueChange, value) {
1001
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = checkedValue;
1002
- _attr(scope[nodeAccessor], "value", value);
1003
- setCheckboxValue(
1015
+ function _attr_input_checkedValue_default(scope, nodeAccessor, checkedValue, value) {
1016
+ const multiple = Array.isArray(checkedValue);
1017
+ const normalizedValue = normalizeStrProp(value);
1018
+ const normalizedCheckedValue = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
1019
+ _attr(scope[nodeAccessor], "value", normalizedValue);
1020
+ _attr_input_checked_default(
1004
1021
  scope,
1005
1022
  nodeAccessor,
1006
- 1 /* InputCheckedValue */,
1007
- Array.isArray(checkedValue) ? checkedValue.includes(value) : checkedValue === value,
1008
- checkedValueChange
1023
+ multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue
1009
1024
  );
1010
1025
  }
1026
+ function _attr_input_checkedValue(scope, nodeAccessor, checkedValue, checkedValueChange, value) {
1027
+ const el = scope[nodeAccessor];
1028
+ const multiple = Array.isArray(checkedValue);
1029
+ const normalizedValue = normalizeStrProp(value);
1030
+ const normalizedCheckedValue = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
1031
+ _attr(el, "value", normalizedValue);
1032
+ scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = checkedValueChange;
1033
+ scope["ControlledType:" /* ControlledType */ + nodeAccessor] = checkedValueChange ? 1 /* InputCheckedValue */ : 5 /* None */;
1034
+ if (checkedValueChange && !scope["#Creating" /* Creating */]) {
1035
+ el.checked = multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue;
1036
+ } else {
1037
+ _attr_input_checkedValue_default(
1038
+ scope,
1039
+ nodeAccessor,
1040
+ normalizedCheckedValue,
1041
+ normalizedValue
1042
+ );
1043
+ }
1044
+ }
1011
1045
  function _attr_input_checkedValue_script(scope, nodeAccessor) {
1012
1046
  const el = scope[nodeAccessor];
1013
- syncControllable(el, "input", hasCheckboxChanged, () => {
1047
+ if (isResuming && el.defaultChecked) {
1048
+ if (scope["ControlledValue:" /* ControlledValue */ + nodeAccessor]) {
1049
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor].push(
1050
+ el.value
1051
+ );
1052
+ } else {
1053
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = el.value;
1054
+ }
1055
+ }
1056
+ syncControllableFormInput(el, hasCheckboxChanged, () => {
1014
1057
  const checkedValueChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1015
1058
  if (checkedValueChange) {
1016
1059
  const oldValue = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
@@ -1031,21 +1074,25 @@ function _attr_input_checkedValue_script(scope, nodeAccessor) {
1031
1074
  }
1032
1075
  });
1033
1076
  }
1077
+ function _attr_input_value_default(scope, nodeAccessor, value) {
1078
+ const el = scope[nodeAccessor];
1079
+ const normalizedValue = normalizeStrProp(value);
1080
+ if (el.defaultValue !== normalizedValue) {
1081
+ const restoreValue = scope["#Creating" /* Creating */] ? normalizedValue : el.value;
1082
+ el.defaultValue = normalizedValue;
1083
+ setInputValue(el, restoreValue);
1084
+ }
1085
+ }
1034
1086
  function _attr_input_value(scope, nodeAccessor, value, valueChange) {
1035
1087
  const el = scope[nodeAccessor];
1036
1088
  const normalizedValue = normalizeStrProp(value);
1037
1089
  scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = valueChange;
1038
- if (valueChange) {
1039
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 2 /* InputValue */;
1040
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = value;
1041
- if (el.isConnected) {
1042
- setValueAndUpdateSelection(el, normalizedValue);
1043
- } else {
1044
- el.defaultValue = normalizedValue;
1045
- }
1090
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizedValue;
1091
+ scope["ControlledType:" /* ControlledType */ + nodeAccessor] = valueChange ? 2 /* InputValue */ : 5 /* None */;
1092
+ if (valueChange && !scope["#Creating" /* Creating */]) {
1093
+ setInputValue(el, normalizedValue);
1046
1094
  } else {
1047
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 5 /* None */;
1048
- el.defaultValue = normalizedValue;
1095
+ _attr_input_value_default(scope, nodeAccessor, normalizedValue);
1049
1096
  }
1050
1097
  }
1051
1098
  function _attr_input_value_script(scope, nodeAccessor) {
@@ -1053,151 +1100,154 @@ function _attr_input_value_script(scope, nodeAccessor) {
1053
1100
  if (isResuming) {
1054
1101
  scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = el.defaultValue;
1055
1102
  }
1056
- syncControllable(el, "input", hasValueChanged, (ev) => {
1103
+ syncControllableFormInput(el, hasValueChanged, (ev) => {
1057
1104
  const valueChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1058
1105
  if (valueChange) {
1059
1106
  inputType = ev?.inputType;
1060
1107
  valueChange(el.value);
1061
1108
  run();
1062
- setValueAndUpdateSelection(
1063
- el,
1064
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor]
1065
- );
1109
+ setInputValue(el, scope["ControlledValue:" /* ControlledValue */ + nodeAccessor]);
1066
1110
  inputType = "";
1067
1111
  }
1068
1112
  });
1069
1113
  }
1114
+ function setInputValue(el, value) {
1115
+ if (el.value !== value) {
1116
+ const updatedPosition = resolveCursorPosition(
1117
+ inputType,
1118
+ el.getRootNode().activeElement === el && el.selectionStart,
1119
+ el.value,
1120
+ el.value = value
1121
+ );
1122
+ if (~updatedPosition) {
1123
+ el.setSelectionRange(updatedPosition, updatedPosition);
1124
+ }
1125
+ }
1126
+ }
1127
+ function _attr_select_value_default(scope, nodeAccessor, value) {
1128
+ let restoreValue;
1129
+ const el = scope[nodeAccessor];
1130
+ const existing = !scope["#Creating" /* Creating */];
1131
+ const multiple = Array.isArray(value);
1132
+ const normalizedValue = multiple ? value.map(normalizeStrProp) : normalizeStrProp(value);
1133
+ pendingEffects.unshift(() => {
1134
+ for (const opt of el.options) {
1135
+ const selected = multiple ? normalizedValue.includes(opt.value) : opt.value === normalizedValue;
1136
+ if (opt.defaultSelected !== selected) {
1137
+ if (existing) {
1138
+ restoreValue ??= getSelectValue(el, multiple);
1139
+ }
1140
+ opt.defaultSelected = selected;
1141
+ }
1142
+ }
1143
+ if (restoreValue !== void 0) {
1144
+ setSelectValue(el, restoreValue, multiple);
1145
+ }
1146
+ }, scope);
1147
+ }
1070
1148
  function _attr_select_value(scope, nodeAccessor, value, valueChange) {
1149
+ const el = scope[nodeAccessor];
1150
+ const existing = !scope["#Creating" /* Creating */];
1151
+ const multiple = Array.isArray(value);
1152
+ const normalizedValue = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = multiple ? value.map(normalizeStrProp) : normalizeStrProp(value);
1071
1153
  scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = valueChange;
1072
- if (valueChange) {
1073
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 3 /* SelectValue */;
1074
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = value;
1154
+ scope["ControlledType:" /* ControlledType */ + nodeAccessor] = valueChange ? 3 /* SelectValue */ : 5 /* None */;
1155
+ if (valueChange && existing) {
1156
+ pendingEffects.unshift(
1157
+ () => setSelectValue(el, normalizedValue, multiple),
1158
+ scope
1159
+ );
1075
1160
  } else {
1076
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 5 /* None */;
1077
- }
1078
- pendingEffects.unshift(
1079
- () => setSelectOptions(
1080
- scope[nodeAccessor],
1081
- value,
1082
- valueChange
1083
- ),
1084
- scope
1085
- );
1161
+ _attr_select_value_default(scope, nodeAccessor, normalizedValue);
1162
+ }
1086
1163
  }
1087
1164
  function _attr_select_value_script(scope, nodeAccessor) {
1088
1165
  const el = scope[nodeAccessor];
1089
1166
  const onChange = () => {
1090
1167
  const valueChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1091
1168
  if (valueChange) {
1092
- const newValue = Array.isArray(
1093
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor]
1094
- ) ? Array.from(el.selectedOptions, toValueProp) : el.value;
1095
- setSelectOptions(
1096
- el,
1097
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor],
1098
- valueChange
1099
- );
1169
+ const oldValue = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1170
+ const multiple = Array.isArray(oldValue);
1171
+ const newValue = getSelectValue(el, multiple);
1172
+ setSelectValue(el, oldValue, multiple);
1100
1173
  valueChange(newValue);
1101
1174
  run();
1102
1175
  }
1103
1176
  };
1104
- if (!el._) {
1105
- new MutationObserver(() => {
1106
- const value = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1107
- if (Array.isArray(value) ? value.length !== el.selectedOptions.length || value.some((value2, i) => value2 != el.selectedOptions[i].value) : el.value != value) {
1108
- onChange();
1177
+ if (isResuming) {
1178
+ if (el.multiple) {
1179
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = [];
1180
+ for (const opt of el.options) {
1181
+ if (opt.defaultSelected) {
1182
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor].push(opt.value);
1183
+ }
1109
1184
  }
1110
- }).observe(el, {
1111
- childList: true,
1112
- subtree: true
1113
- });
1185
+ } else {
1186
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = "";
1187
+ for (const opt of el.options) {
1188
+ if (opt.defaultSelected) {
1189
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = opt.value;
1190
+ break;
1191
+ }
1192
+ }
1193
+ }
1114
1194
  }
1115
- syncControllable(el, "input", hasSelectChanged, onChange);
1195
+ syncControllableFormInput(el, hasSelectChanged, onChange);
1196
+ new MutationObserver(() => {
1197
+ const value = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1198
+ if (Array.isArray(value) ? value.length !== el.selectedOptions.length || value.some((value2, i) => value2 != el.selectedOptions[i].value) : el.value !== value) {
1199
+ onChange();
1200
+ }
1201
+ }).observe(el, { childList: true, subtree: true });
1116
1202
  }
1117
- function setSelectOptions(el, value, valueChange) {
1118
- if (Array.isArray(value)) {
1203
+ function setSelectValue(el, value, multiple) {
1204
+ if (multiple) {
1119
1205
  for (const opt of el.options) {
1120
- const selected = value.includes(opt.value);
1121
- if (valueChange) {
1122
- opt.selected = selected;
1123
- } else {
1124
- opt.defaultSelected = selected;
1125
- }
1206
+ opt.selected = value.includes(opt.value);
1126
1207
  }
1127
1208
  } else {
1128
- const normalizedValue = normalizeStrProp(value);
1129
- if (valueChange) {
1130
- el.value = normalizedValue;
1131
- } else {
1132
- for (const opt of el.options) {
1133
- opt.defaultSelected = opt.value === normalizedValue;
1134
- }
1135
- }
1209
+ el.value = value;
1210
+ }
1211
+ }
1212
+ function getSelectValue(el, multiple) {
1213
+ return multiple ? Array.from(el.selectedOptions, (opt) => opt.value) : el.value;
1214
+ }
1215
+ function _attr_details_or_dialog_open_default(scope, nodeAccessor, open) {
1216
+ if (scope["#Creating" /* Creating */]) {
1217
+ scope[nodeAccessor].open = normalizeBoolProp(open);
1136
1218
  }
1137
1219
  }
1138
1220
  function _attr_details_or_dialog_open(scope, nodeAccessor, open, openChange) {
1221
+ const normalizedOpen = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizeBoolProp(open);
1139
1222
  scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = openChange;
1140
- if (openChange) {
1141
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 4 /* DetailsOrDialogOpen */;
1223
+ scope["ControlledType:" /* ControlledType */ + nodeAccessor] = openChange ? 4 /* DetailsOrDialogOpen */ : 5 /* None */;
1224
+ if (openChange && !scope["#Creating" /* Creating */]) {
1225
+ scope[nodeAccessor].open = normalizedOpen;
1142
1226
  } else {
1143
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 5 /* None */;
1227
+ _attr_details_or_dialog_open_default(scope, nodeAccessor, normalizedOpen);
1144
1228
  }
1145
- scope[nodeAccessor].open = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizeBoolProp(open);
1146
1229
  }
1147
1230
  function _attr_details_or_dialog_open_script(scope, nodeAccessor) {
1148
1231
  const el = scope[nodeAccessor];
1149
- const hasChanged = () => el.open !== scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1150
- syncControllable(
1151
- el,
1152
- el.tagName === "DIALOG" ? "close" : "toggle",
1153
- hasChanged,
1154
- () => {
1155
- const openChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1156
- if (openChange && hasChanged()) {
1157
- const newValue = el.open;
1158
- el.open = !newValue;
1159
- openChange(newValue);
1160
- run();
1161
- }
1162
- }
1163
- );
1164
- }
1165
- var inputType = "";
1166
- function setValueAndUpdateSelection(el, value) {
1167
- if (el.value !== value) {
1168
- const updatedPosition = resolveCursorPosition(
1169
- inputType,
1170
- el.getRootNode().activeElement === el && el.selectionStart,
1171
- el.value,
1172
- el.value = value
1173
- );
1174
- if (~updatedPosition) {
1175
- el.setSelectionRange(updatedPosition, updatedPosition);
1232
+ new MutationObserver(() => {
1233
+ const openChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1234
+ if (openChange && el.open === !scope["ControlledValue:" /* ControlledValue */ + nodeAccessor]) {
1235
+ const newValue = el.open;
1236
+ el.open = !newValue;
1237
+ openChange(newValue);
1238
+ run();
1176
1239
  }
1177
- }
1240
+ }).observe(el, { attributes: true, attributeFilter: ["open"] });
1178
1241
  }
1179
- function setCheckboxValue(scope, nodeAccessor, type, checked, checkedChange) {
1180
- scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = checkedChange;
1181
- if (checkedChange) {
1182
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = type;
1183
- scope[nodeAccessor].checked = checked;
1184
- } else {
1185
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 5 /* None */;
1186
- scope[nodeAccessor].defaultChecked = checked;
1242
+ function syncControllableFormInput(el, hasChanged, onChange) {
1243
+ el._ = onChange;
1244
+ controllableDelegate(el, "input", handleChange);
1245
+ if (el.form) {
1246
+ controllableDelegate(el.form, "reset", handleFormReset);
1187
1247
  }
1188
- }
1189
- var controllableDelegate = createDelegator();
1190
- function syncControllable(el, event, hasChanged, onChange) {
1191
- if (!el._) {
1192
- controllableDelegate(el, event, handleChange);
1193
- if (el.form) {
1194
- controllableDelegate(el.form, "reset", handleFormReset);
1195
- }
1196
- if (isResuming && hasChanged(el)) {
1197
- queueMicrotask(onChange);
1198
- }
1248
+ if (isResuming && hasChanged(el)) {
1249
+ queueMicrotask(onChange);
1199
1250
  }
1200
- el._ = onChange;
1201
1251
  }
1202
1252
  function handleChange(ev) {
1203
1253
  ev.target._?.(ev);
@@ -1243,9 +1293,6 @@ function updateList(arr, val, push2) {
1243
1293
  const index = arr.indexOf(val);
1244
1294
  return (push2 ? !~index && [...arr, val] : ~index && arr.slice(0, index).concat(arr.slice(index + 1))) || arr;
1245
1295
  }
1246
- function toValueProp(it) {
1247
- return it.value;
1248
- }
1249
1296
 
1250
1297
  // src/dom/dom.ts
1251
1298
  function _to_text(value) {
@@ -1283,7 +1330,7 @@ function _attr_style_items(element, items) {
1283
1330
  }
1284
1331
  }
1285
1332
  function _attr_style_item(element, name, value) {
1286
- element.style.setProperty(name, value || value === 0 ? value + "" : "");
1333
+ element.style.setProperty(name, _to_text(value));
1287
1334
  }
1288
1335
  function _attr_nonce(scope, nodeAccessor) {
1289
1336
  _attr(scope[nodeAccessor], "nonce", scope["$global" /* Global */].cspNonce);
@@ -1473,7 +1520,7 @@ function _html(scope, value, accessor) {
1473
1520
  const parentNode = firstChild.parentNode;
1474
1521
  const lastChild = scope["DynamicHTMLLastChild:" /* DynamicHTMLLastChild */ + accessor] || firstChild;
1475
1522
  const newContent = parseHTML(
1476
- value || value === 0 ? value + "" : "",
1523
+ _to_text(value),
1477
1524
  parentNode.namespaceURI
1478
1525
  );
1479
1526
  insertChildNodes(
@@ -2554,22 +2601,29 @@ export {
2554
2601
  _attr_class_items,
2555
2602
  _attr_content,
2556
2603
  _attr_details_or_dialog_open as _attr_details_open,
2604
+ _attr_details_or_dialog_open_default as _attr_details_open_default,
2557
2605
  _attr_details_or_dialog_open_script as _attr_details_open_script,
2558
2606
  _attr_details_or_dialog_open as _attr_dialog_open,
2607
+ _attr_details_or_dialog_open_default as _attr_dialog_open_default,
2559
2608
  _attr_details_or_dialog_open_script as _attr_dialog_open_script,
2560
2609
  _attr_input_checked,
2561
2610
  _attr_input_checkedValue,
2611
+ _attr_input_checkedValue_default,
2562
2612
  _attr_input_checkedValue_script,
2613
+ _attr_input_checked_default,
2563
2614
  _attr_input_checked_script,
2564
2615
  _attr_input_value,
2616
+ _attr_input_value_default,
2565
2617
  _attr_input_value_script,
2566
2618
  _attr_nonce,
2567
2619
  _attr_select_value,
2620
+ _attr_select_value_default,
2568
2621
  _attr_select_value_script,
2569
2622
  _attr_style,
2570
2623
  _attr_style_item,
2571
2624
  _attr_style_items,
2572
2625
  _attr_input_value as _attr_textarea_value,
2626
+ _attr_input_value_default as _attr_textarea_value_default,
2573
2627
  _attr_input_value_script as _attr_textarea_value_script,
2574
2628
  _attrs,
2575
2629
  _attrs_content,
@@ -2879,8 +2879,8 @@ function _attr_style(value) {
2879
2879
  return stringAttr("style", styleValue(value));
2880
2880
  }
2881
2881
  function _attr_option_value(value) {
2882
- const selectedValue = getContext(kSelectedValue);
2883
- return _attr("value", value) + (!isVoid(value) && (Array.isArray(selectedValue) ? selectedValue.includes(value) : selectedValue === value) ? " selected" : "");
2882
+ const valueAttr = _attr("value", value);
2883
+ return normalizedValueMatches(getContext(kSelectedValue), value) ? valueAttr + " selected" : valueAttr;
2884
2884
  }
2885
2885
  var kSelectedValue = /* @__PURE__ */ Symbol("selectedValue");
2886
2886
  function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content) {
@@ -2889,7 +2889,7 @@ function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content)
2889
2889
  3 /* SelectValue */,
2890
2890
  scopeId,
2891
2891
  nodeAccessor,
2892
- value,
2892
+ void 0,
2893
2893
  valueChange
2894
2894
  );
2895
2895
  }
@@ -2931,33 +2931,44 @@ function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange) {
2931
2931
  checkedChange
2932
2932
  );
2933
2933
  }
2934
- return _attr("checked", checked);
2934
+ return normalizeBoolAttrValue(checked) ? " checked" : "";
2935
2935
  }
2936
2936
  function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value) {
2937
- const multiple = Array.isArray(checkedValue);
2938
2937
  const valueAttr = _attr("value", value);
2939
2938
  if (checkedValueChange) {
2940
2939
  writeControlledScope(
2941
2940
  1 /* InputCheckedValue */,
2942
2941
  scopeId,
2943
2942
  nodeAccessor,
2944
- checkedValue,
2943
+ getCheckedValueRef(checkedValue),
2945
2944
  checkedValueChange
2946
2945
  );
2947
2946
  }
2948
- return (multiple ? checkedValue.includes(value) : checkedValue === value) ? valueAttr + " checked" : valueAttr;
2947
+ return normalizedValueMatches(checkedValue, value) ? valueAttr + " checked" : valueAttr;
2948
+ }
2949
+ var checkedValuesRefs = /* @__PURE__ */ new WeakMap();
2950
+ function getCheckedValueRef(checkedValue) {
2951
+ if (Array.isArray(checkedValue)) {
2952
+ let ref = checkedValuesRefs.get(checkedValue);
2953
+ if (!ref) {
2954
+ ref = [];
2955
+ checkedValuesRefs.set(checkedValue, ref);
2956
+ }
2957
+ return ref;
2958
+ }
2949
2959
  }
2950
2960
  function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange) {
2961
+ const normalizedOpen = normalizeBoolAttrValue(open);
2951
2962
  if (openChange) {
2952
2963
  writeControlledScope(
2953
2964
  4 /* DetailsOrDialogOpen */,
2954
2965
  scopeId,
2955
2966
  nodeAccessor,
2956
- open,
2967
+ normalizedOpen,
2957
2968
  openChange
2958
2969
  );
2959
2970
  }
2960
- return _attr("open", open);
2971
+ return normalizedOpen ? " open" : "";
2961
2972
  }
2962
2973
  function _attr_nonce() {
2963
2974
  return getChunk().boundary.state.nonceAttr;
@@ -3120,6 +3131,27 @@ function escapeDoubleQuotedAttrValue(value) {
3120
3131
  function replaceUnsafeDoubleQuoteAttrChar(match) {
3121
3132
  return match === '"' ? """ : "&";
3122
3133
  }
3134
+ function normalizedValueMatches(a, b) {
3135
+ const value = normalizeStrAttrValue(b);
3136
+ if (Array.isArray(a)) {
3137
+ for (const item of a) {
3138
+ if (normalizeStrAttrValue(item) === value) {
3139
+ return true;
3140
+ }
3141
+ }
3142
+ } else if (normalizeStrAttrValue(a) === value) {
3143
+ return true;
3144
+ }
3145
+ return false;
3146
+ }
3147
+ function normalizeStrAttrValue(value) {
3148
+ return value && value !== true || value === 0 ? value + "" : "";
3149
+ }
3150
+ function normalizeBoolAttrValue(value) {
3151
+ if (value != null && value !== false) {
3152
+ return true;
3153
+ }
3154
+ }
3123
3155
 
3124
3156
  // src/common/compat-meta.ts
3125
3157
  var prefix = true ? "$compat_" : "$C_";
@@ -2786,8 +2786,8 @@ function _attr_style(value) {
2786
2786
  return stringAttr("style", styleValue(value));
2787
2787
  }
2788
2788
  function _attr_option_value(value) {
2789
- const selectedValue = getContext(kSelectedValue);
2790
- return _attr("value", value) + (!isVoid(value) && (Array.isArray(selectedValue) ? selectedValue.includes(value) : selectedValue === value) ? " selected" : "");
2789
+ const valueAttr = _attr("value", value);
2790
+ return normalizedValueMatches(getContext(kSelectedValue), value) ? valueAttr + " selected" : valueAttr;
2791
2791
  }
2792
2792
  var kSelectedValue = /* @__PURE__ */ Symbol("selectedValue");
2793
2793
  function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content) {
@@ -2796,7 +2796,7 @@ function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content)
2796
2796
  3 /* SelectValue */,
2797
2797
  scopeId,
2798
2798
  nodeAccessor,
2799
- value,
2799
+ void 0,
2800
2800
  valueChange
2801
2801
  );
2802
2802
  }
@@ -2838,33 +2838,44 @@ function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange) {
2838
2838
  checkedChange
2839
2839
  );
2840
2840
  }
2841
- return _attr("checked", checked);
2841
+ return normalizeBoolAttrValue(checked) ? " checked" : "";
2842
2842
  }
2843
2843
  function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value) {
2844
- const multiple = Array.isArray(checkedValue);
2845
2844
  const valueAttr = _attr("value", value);
2846
2845
  if (checkedValueChange) {
2847
2846
  writeControlledScope(
2848
2847
  1 /* InputCheckedValue */,
2849
2848
  scopeId,
2850
2849
  nodeAccessor,
2851
- checkedValue,
2850
+ getCheckedValueRef(checkedValue),
2852
2851
  checkedValueChange
2853
2852
  );
2854
2853
  }
2855
- return (multiple ? checkedValue.includes(value) : checkedValue === value) ? valueAttr + " checked" : valueAttr;
2854
+ return normalizedValueMatches(checkedValue, value) ? valueAttr + " checked" : valueAttr;
2855
+ }
2856
+ var checkedValuesRefs = /* @__PURE__ */ new WeakMap();
2857
+ function getCheckedValueRef(checkedValue) {
2858
+ if (Array.isArray(checkedValue)) {
2859
+ let ref = checkedValuesRefs.get(checkedValue);
2860
+ if (!ref) {
2861
+ ref = [];
2862
+ checkedValuesRefs.set(checkedValue, ref);
2863
+ }
2864
+ return ref;
2865
+ }
2856
2866
  }
2857
2867
  function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange) {
2868
+ const normalizedOpen = normalizeBoolAttrValue(open);
2858
2869
  if (openChange) {
2859
2870
  writeControlledScope(
2860
2871
  4 /* DetailsOrDialogOpen */,
2861
2872
  scopeId,
2862
2873
  nodeAccessor,
2863
- open,
2874
+ normalizedOpen,
2864
2875
  openChange
2865
2876
  );
2866
2877
  }
2867
- return _attr("open", open);
2878
+ return normalizedOpen ? " open" : "";
2868
2879
  }
2869
2880
  function _attr_nonce() {
2870
2881
  return getChunk().boundary.state.nonceAttr;
@@ -3027,6 +3038,27 @@ function escapeDoubleQuotedAttrValue(value) {
3027
3038
  function replaceUnsafeDoubleQuoteAttrChar(match) {
3028
3039
  return match === '"' ? """ : "&";
3029
3040
  }
3041
+ function normalizedValueMatches(a, b) {
3042
+ const value = normalizeStrAttrValue(b);
3043
+ if (Array.isArray(a)) {
3044
+ for (const item of a) {
3045
+ if (normalizeStrAttrValue(item) === value) {
3046
+ return true;
3047
+ }
3048
+ }
3049
+ } else if (normalizeStrAttrValue(a) === value) {
3050
+ return true;
3051
+ }
3052
+ return false;
3053
+ }
3054
+ function normalizeStrAttrValue(value) {
3055
+ return value && value !== true || value === 0 ? value + "" : "";
3056
+ }
3057
+ function normalizeBoolAttrValue(value) {
3058
+ if (value != null && value !== false) {
3059
+ return true;
3060
+ }
3061
+ }
3030
3062
 
3031
3063
  // src/common/compat-meta.ts
3032
3064
  var prefix = true ? "$compat_" : "$C_";
@@ -1,12 +1,16 @@
1
1
  import { type Accessor, type Scope } from "../common/types";
2
+ export declare function _attr_input_checked_default(scope: Scope, nodeAccessor: Accessor, checked: boolean): void;
2
3
  export declare function _attr_input_checked(scope: Scope, nodeAccessor: Accessor, checked: unknown, checkedChange: unknown): void;
3
4
  export declare function _attr_input_checked_script(scope: Scope, nodeAccessor: Accessor): void;
5
+ export declare function _attr_input_checkedValue_default(scope: Scope, nodeAccessor: Accessor, checkedValue: unknown, value: unknown): void;
4
6
  export declare function _attr_input_checkedValue(scope: Scope, nodeAccessor: Accessor, checkedValue: unknown, checkedValueChange: unknown, value: unknown): void;
5
7
  export declare function _attr_input_checkedValue_script(scope: Scope, nodeAccessor: Accessor): void;
8
+ export declare function _attr_input_value_default(scope: Scope, nodeAccessor: Accessor, value: unknown): void;
6
9
  export declare function _attr_input_value(scope: Scope, nodeAccessor: Accessor, value: unknown, valueChange: unknown): void;
7
10
  export declare function _attr_input_value_script(scope: Scope, nodeAccessor: Accessor): void;
8
- export { _attr_input_value as _attr_textarea_value, _attr_input_value_script as _attr_textarea_value_script, };
11
+ export declare function _attr_select_value_default(scope: Scope, nodeAccessor: Accessor, value: unknown): void;
9
12
  export declare function _attr_select_value(scope: Scope, nodeAccessor: Accessor, value: unknown, valueChange: unknown): void;
10
13
  export declare function _attr_select_value_script(scope: Scope, nodeAccessor: Accessor): void;
14
+ export declare function _attr_details_or_dialog_open_default(scope: Scope, nodeAccessor: Accessor, open: unknown): void;
11
15
  export declare function _attr_details_or_dialog_open(scope: Scope, nodeAccessor: Accessor, open: unknown, openChange: unknown): void;
12
16
  export declare function _attr_details_or_dialog_open_script(scope: Scope, nodeAccessor: Accessor): void;