@marko/runtime-tags 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/debug/dom.js CHANGED
@@ -1105,18 +1105,30 @@ function _attr_input_checked_script(scope, nodeAccessor) {
1105
1105
  });
1106
1106
  }
1107
1107
  function _attr_input_checkedValue(scope, nodeAccessor, checkedValue, checkedValueChange, value) {
1108
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = checkedValue;
1109
- _attr(scope[nodeAccessor], "value", value);
1108
+ const multiple = Array.isArray(checkedValue);
1109
+ const normalizedValue = normalizeStrProp(value);
1110
+ const normalizedCheckedValue = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
1111
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizedCheckedValue;
1112
+ _attr(scope[nodeAccessor], "value", normalizedValue);
1110
1113
  setCheckboxValue(
1111
1114
  scope,
1112
1115
  nodeAccessor,
1113
1116
  1 /* InputCheckedValue */,
1114
- Array.isArray(checkedValue) ? checkedValue.includes(value) : checkedValue === value,
1117
+ multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue,
1115
1118
  checkedValueChange
1116
1119
  );
1117
1120
  }
1118
1121
  function _attr_input_checkedValue_script(scope, nodeAccessor) {
1119
1122
  const el = scope[nodeAccessor];
1123
+ if (isResuming && el.defaultChecked) {
1124
+ if (scope["ControlledValue:" /* ControlledValue */ + nodeAccessor]) {
1125
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor].push(
1126
+ el.value
1127
+ );
1128
+ } else {
1129
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = el.value;
1130
+ }
1131
+ }
1120
1132
  syncControllable(el, "input", hasCheckboxChanged, () => {
1121
1133
  const checkedValueChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1122
1134
  if (checkedValueChange) {
@@ -1144,7 +1156,7 @@ function _attr_input_value(scope, nodeAccessor, value, valueChange) {
1144
1156
  scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = valueChange;
1145
1157
  if (valueChange) {
1146
1158
  scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 2 /* InputValue */;
1147
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = value;
1159
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizedValue;
1148
1160
  if (el.isConnected) {
1149
1161
  setValueAndUpdateSelection(el, normalizedValue);
1150
1162
  } else {
@@ -1175,17 +1187,18 @@ function _attr_input_value_script(scope, nodeAccessor) {
1175
1187
  });
1176
1188
  }
1177
1189
  function _attr_select_value(scope, nodeAccessor, value, valueChange) {
1190
+ const normalizedValue = Array.isArray(value) ? value.map(normalizeStrProp) : normalizeStrProp(value);
1178
1191
  scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = valueChange;
1179
1192
  if (valueChange) {
1180
1193
  scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 3 /* SelectValue */;
1181
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = value;
1194
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizedValue;
1182
1195
  } else {
1183
1196
  scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 5 /* None */;
1184
1197
  }
1185
1198
  pendingEffects.unshift(
1186
1199
  () => setSelectOptions(
1187
1200
  scope[nodeAccessor],
1188
- value,
1201
+ normalizedValue,
1189
1202
  valueChange
1190
1203
  ),
1191
1204
  scope
@@ -1196,22 +1209,35 @@ function _attr_select_value_script(scope, nodeAccessor) {
1196
1209
  const onChange = () => {
1197
1210
  const valueChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1198
1211
  if (valueChange) {
1199
- const newValue = Array.isArray(
1200
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor]
1201
- ) ? Array.from(el.selectedOptions, toValueProp) : el.value;
1202
- setSelectOptions(
1203
- el,
1204
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor],
1205
- valueChange
1206
- );
1212
+ const oldValue = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1213
+ const newValue = Array.isArray(oldValue) ? Array.from(el.selectedOptions, toValueProp) : el.value;
1214
+ setSelectOptions(el, oldValue, valueChange);
1207
1215
  valueChange(newValue);
1208
1216
  run();
1209
1217
  }
1210
1218
  };
1219
+ if (isResuming) {
1220
+ if (el.multiple) {
1221
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = [];
1222
+ for (const opt of el.options) {
1223
+ if (opt.defaultSelected) {
1224
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor].push(opt.value);
1225
+ }
1226
+ }
1227
+ } else {
1228
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = "";
1229
+ for (const opt of el.options) {
1230
+ if (opt.defaultSelected) {
1231
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = opt.value;
1232
+ break;
1233
+ }
1234
+ }
1235
+ }
1236
+ }
1211
1237
  if (!el._) {
1212
1238
  new MutationObserver(() => {
1213
1239
  const value = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1214
- if (Array.isArray(value) ? value.length !== el.selectedOptions.length || value.some((value2, i) => value2 != el.selectedOptions[i].value) : el.value != value) {
1240
+ if (Array.isArray(value) ? value.length !== el.selectedOptions.length || value.some((value2, i) => value2 != el.selectedOptions[i].value) : el.value !== value) {
1215
1241
  onChange();
1216
1242
  }
1217
1243
  }).observe(el, {
@@ -1232,28 +1258,23 @@ function setSelectOptions(el, value, valueChange) {
1232
1258
  }
1233
1259
  }
1234
1260
  } else {
1235
- const normalizedValue = normalizeStrProp(value);
1236
1261
  if (valueChange) {
1237
- el.value = normalizedValue;
1262
+ el.value = value;
1238
1263
  } else {
1239
1264
  for (const opt of el.options) {
1240
- opt.defaultSelected = opt.value === normalizedValue;
1265
+ opt.defaultSelected = opt.value === value;
1241
1266
  }
1242
1267
  }
1243
1268
  }
1244
1269
  }
1245
1270
  function _attr_details_or_dialog_open(scope, nodeAccessor, open, openChange) {
1246
1271
  scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = openChange;
1247
- if (openChange) {
1248
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 4 /* DetailsOrDialogOpen */;
1249
- } else {
1250
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 5 /* None */;
1251
- }
1272
+ scope["ControlledType:" /* ControlledType */ + nodeAccessor] = openChange ? 4 /* DetailsOrDialogOpen */ : 5 /* None */;
1252
1273
  scope[nodeAccessor].open = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizeBoolProp(open);
1253
1274
  }
1254
1275
  function _attr_details_or_dialog_open_script(scope, nodeAccessor) {
1255
1276
  const el = scope[nodeAccessor];
1256
- const hasChanged = () => el.open !== scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1277
+ const hasChanged = () => el.open === !scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1257
1278
  syncControllable(
1258
1279
  el,
1259
1280
  el.tagName === "DIALOG" ? "close" : "toggle",
@@ -998,18 +998,30 @@ function _attr_input_checked_script(scope, nodeAccessor) {
998
998
  });
999
999
  }
1000
1000
  function _attr_input_checkedValue(scope, nodeAccessor, checkedValue, checkedValueChange, value) {
1001
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = checkedValue;
1002
- _attr(scope[nodeAccessor], "value", value);
1001
+ const multiple = Array.isArray(checkedValue);
1002
+ const normalizedValue = normalizeStrProp(value);
1003
+ const normalizedCheckedValue = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
1004
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizedCheckedValue;
1005
+ _attr(scope[nodeAccessor], "value", normalizedValue);
1003
1006
  setCheckboxValue(
1004
1007
  scope,
1005
1008
  nodeAccessor,
1006
1009
  1 /* InputCheckedValue */,
1007
- Array.isArray(checkedValue) ? checkedValue.includes(value) : checkedValue === value,
1010
+ multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue,
1008
1011
  checkedValueChange
1009
1012
  );
1010
1013
  }
1011
1014
  function _attr_input_checkedValue_script(scope, nodeAccessor) {
1012
1015
  const el = scope[nodeAccessor];
1016
+ if (isResuming && el.defaultChecked) {
1017
+ if (scope["ControlledValue:" /* ControlledValue */ + nodeAccessor]) {
1018
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor].push(
1019
+ el.value
1020
+ );
1021
+ } else {
1022
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = el.value;
1023
+ }
1024
+ }
1013
1025
  syncControllable(el, "input", hasCheckboxChanged, () => {
1014
1026
  const checkedValueChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1015
1027
  if (checkedValueChange) {
@@ -1037,7 +1049,7 @@ function _attr_input_value(scope, nodeAccessor, value, valueChange) {
1037
1049
  scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = valueChange;
1038
1050
  if (valueChange) {
1039
1051
  scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 2 /* InputValue */;
1040
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = value;
1052
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizedValue;
1041
1053
  if (el.isConnected) {
1042
1054
  setValueAndUpdateSelection(el, normalizedValue);
1043
1055
  } else {
@@ -1068,17 +1080,18 @@ function _attr_input_value_script(scope, nodeAccessor) {
1068
1080
  });
1069
1081
  }
1070
1082
  function _attr_select_value(scope, nodeAccessor, value, valueChange) {
1083
+ const normalizedValue = Array.isArray(value) ? value.map(normalizeStrProp) : normalizeStrProp(value);
1071
1084
  scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = valueChange;
1072
1085
  if (valueChange) {
1073
1086
  scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 3 /* SelectValue */;
1074
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = value;
1087
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizedValue;
1075
1088
  } else {
1076
1089
  scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 5 /* None */;
1077
1090
  }
1078
1091
  pendingEffects.unshift(
1079
1092
  () => setSelectOptions(
1080
1093
  scope[nodeAccessor],
1081
- value,
1094
+ normalizedValue,
1082
1095
  valueChange
1083
1096
  ),
1084
1097
  scope
@@ -1089,22 +1102,35 @@ function _attr_select_value_script(scope, nodeAccessor) {
1089
1102
  const onChange = () => {
1090
1103
  const valueChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1091
1104
  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
- );
1105
+ const oldValue = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1106
+ const newValue = Array.isArray(oldValue) ? Array.from(el.selectedOptions, toValueProp) : el.value;
1107
+ setSelectOptions(el, oldValue, valueChange);
1100
1108
  valueChange(newValue);
1101
1109
  run();
1102
1110
  }
1103
1111
  };
1112
+ if (isResuming) {
1113
+ if (el.multiple) {
1114
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = [];
1115
+ for (const opt of el.options) {
1116
+ if (opt.defaultSelected) {
1117
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor].push(opt.value);
1118
+ }
1119
+ }
1120
+ } else {
1121
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = "";
1122
+ for (const opt of el.options) {
1123
+ if (opt.defaultSelected) {
1124
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = opt.value;
1125
+ break;
1126
+ }
1127
+ }
1128
+ }
1129
+ }
1104
1130
  if (!el._) {
1105
1131
  new MutationObserver(() => {
1106
1132
  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) {
1133
+ if (Array.isArray(value) ? value.length !== el.selectedOptions.length || value.some((value2, i) => value2 != el.selectedOptions[i].value) : el.value !== value) {
1108
1134
  onChange();
1109
1135
  }
1110
1136
  }).observe(el, {
@@ -1125,28 +1151,23 @@ function setSelectOptions(el, value, valueChange) {
1125
1151
  }
1126
1152
  }
1127
1153
  } else {
1128
- const normalizedValue = normalizeStrProp(value);
1129
1154
  if (valueChange) {
1130
- el.value = normalizedValue;
1155
+ el.value = value;
1131
1156
  } else {
1132
1157
  for (const opt of el.options) {
1133
- opt.defaultSelected = opt.value === normalizedValue;
1158
+ opt.defaultSelected = opt.value === value;
1134
1159
  }
1135
1160
  }
1136
1161
  }
1137
1162
  }
1138
1163
  function _attr_details_or_dialog_open(scope, nodeAccessor, open, openChange) {
1139
1164
  scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = openChange;
1140
- if (openChange) {
1141
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 4 /* DetailsOrDialogOpen */;
1142
- } else {
1143
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 5 /* None */;
1144
- }
1165
+ scope["ControlledType:" /* ControlledType */ + nodeAccessor] = openChange ? 4 /* DetailsOrDialogOpen */ : 5 /* None */;
1145
1166
  scope[nodeAccessor].open = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizeBoolProp(open);
1146
1167
  }
1147
1168
  function _attr_details_or_dialog_open_script(scope, nodeAccessor) {
1148
1169
  const el = scope[nodeAccessor];
1149
- const hasChanged = () => el.open !== scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1170
+ const hasChanged = () => el.open === !scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1150
1171
  syncControllable(
1151
1172
  el,
1152
1173
  el.tagName === "DIALOG" ? "close" : "toggle",
@@ -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_";
package/dist/dom.js CHANGED
@@ -661,17 +661,20 @@ function _attr_input_checked_script(scope, nodeAccessor) {
661
661
  });
662
662
  }
663
663
  function _attr_input_checkedValue(scope, nodeAccessor, checkedValue, checkedValueChange, value) {
664
- scope["G" /* ControlledValue */ + nodeAccessor] = checkedValue, _attr(scope[nodeAccessor], "value", value), setCheckboxValue(
664
+ let multiple = Array.isArray(checkedValue), normalizedValue = normalizeStrProp(value), normalizedCheckedValue = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
665
+ scope["G" /* ControlledValue */ + nodeAccessor] = normalizedCheckedValue, _attr(scope[nodeAccessor], "value", normalizedValue), setCheckboxValue(
665
666
  scope,
666
667
  nodeAccessor,
667
668
  1 /* InputCheckedValue */,
668
- Array.isArray(checkedValue) ? checkedValue.includes(value) : checkedValue === value,
669
+ multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue,
669
670
  checkedValueChange
670
671
  );
671
672
  }
672
673
  function _attr_input_checkedValue_script(scope, nodeAccessor) {
673
674
  let el = scope[nodeAccessor];
674
- syncControllable(el, "input", hasCheckboxChanged, () => {
675
+ isResuming && el.defaultChecked && (scope["G" /* ControlledValue */ + nodeAccessor] ? scope["G" /* ControlledValue */ + nodeAccessor].push(
676
+ el.value
677
+ ) : scope["G" /* ControlledValue */ + nodeAccessor] = el.value), syncControllable(el, "input", hasCheckboxChanged, () => {
675
678
  let checkedValueChange = scope["E" /* ControlledHandler */ + nodeAccessor];
676
679
  if (checkedValueChange) {
677
680
  let oldValue = scope["G" /* ControlledValue */ + nodeAccessor], newValue = Array.isArray(oldValue) ? updateList(oldValue, el.value, el.checked) : el.checked ? el.value : void 0;
@@ -688,7 +691,7 @@ function _attr_input_checkedValue_script(scope, nodeAccessor) {
688
691
  }
689
692
  function _attr_input_value(scope, nodeAccessor, value, valueChange) {
690
693
  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);
694
+ 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);
692
695
  }
693
696
  function _attr_input_value_script(scope, nodeAccessor) {
694
697
  let el = scope[nodeAccessor];
@@ -701,10 +704,11 @@ function _attr_input_value_script(scope, nodeAccessor) {
701
704
  });
702
705
  }
703
706
  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(
707
+ let normalizedValue = Array.isArray(value) ? value.map(normalizeStrProp) : normalizeStrProp(value);
708
+ 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(
705
709
  () => setSelectOptions(
706
710
  scope[nodeAccessor],
707
- value,
711
+ normalizedValue,
708
712
  valueChange
709
713
  ),
710
714
  scope
@@ -714,19 +718,26 @@ function _attr_select_value_script(scope, nodeAccessor) {
714
718
  let el = scope[nodeAccessor], onChange = () => {
715
719
  let valueChange = scope["E" /* ControlledHandler */ + nodeAccessor];
716
720
  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();
721
+ let oldValue = scope["G" /* ControlledValue */ + nodeAccessor], newValue = Array.isArray(oldValue) ? Array.from(el.selectedOptions, toValueProp) : el.value;
722
+ setSelectOptions(el, oldValue, valueChange), valueChange(newValue), run();
725
723
  }
726
724
  };
725
+ if (isResuming)
726
+ if (el.multiple) {
727
+ scope["G" /* ControlledValue */ + nodeAccessor] = [];
728
+ for (let opt of el.options)
729
+ opt.defaultSelected && scope["G" /* ControlledValue */ + nodeAccessor].push(opt.value);
730
+ } else {
731
+ scope["G" /* ControlledValue */ + nodeAccessor] = "";
732
+ for (let opt of el.options)
733
+ if (opt.defaultSelected) {
734
+ scope["G" /* ControlledValue */ + nodeAccessor] = opt.value;
735
+ break;
736
+ }
737
+ }
727
738
  el._ || new MutationObserver(() => {
728
739
  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();
740
+ (Array.isArray(value) ? value.length !== el.selectedOptions.length || value.some((value2, i) => value2 != el.selectedOptions[i].value) : el.value !== value) && onChange();
730
741
  }).observe(el, {
731
742
  childList: !0,
732
743
  subtree: !0
@@ -738,20 +749,17 @@ function setSelectOptions(el, value, valueChange) {
738
749
  let selected = value.includes(opt.value);
739
750
  valueChange ? opt.selected = selected : opt.defaultSelected = selected;
740
751
  }
741
- else {
742
- let normalizedValue = normalizeStrProp(value);
743
- if (valueChange)
744
- el.value = normalizedValue;
745
- else
746
- for (let opt of el.options)
747
- opt.defaultSelected = opt.value === normalizedValue;
748
- }
752
+ else if (valueChange)
753
+ el.value = value;
754
+ else
755
+ for (let opt of el.options)
756
+ opt.defaultSelected = opt.value === value;
749
757
  }
750
758
  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);
759
+ scope["E" /* ControlledHandler */ + nodeAccessor] = openChange, scope["F" /* ControlledType */ + nodeAccessor] = openChange ? 4 /* DetailsOrDialogOpen */ : 5 /* None */, scope[nodeAccessor].open = scope["G" /* ControlledValue */ + nodeAccessor] = normalizeBoolProp(open);
752
760
  }
753
761
  function _attr_details_or_dialog_open_script(scope, nodeAccessor) {
754
- let el = scope[nodeAccessor], hasChanged = () => el.open !== scope["G" /* ControlledValue */ + nodeAccessor];
762
+ let el = scope[nodeAccessor], hasChanged = () => el.open === !scope["G" /* ControlledValue */ + nodeAccessor];
755
763
  syncControllable(
756
764
  el,
757
765
  el.tagName === "DIALOG" ? "close" : "toggle",