@marko/runtime-tags 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/debug/dom.js CHANGED
@@ -29,22 +29,29 @@ __export(dom_exports, {
29
29
  _attr_class_items: () => _attr_class_items,
30
30
  _attr_content: () => _attr_content,
31
31
  _attr_details_open: () => _attr_details_or_dialog_open,
32
+ _attr_details_open_default: () => _attr_details_or_dialog_open_default,
32
33
  _attr_details_open_script: () => _attr_details_or_dialog_open_script,
33
34
  _attr_dialog_open: () => _attr_details_or_dialog_open,
35
+ _attr_dialog_open_default: () => _attr_details_or_dialog_open_default,
34
36
  _attr_dialog_open_script: () => _attr_details_or_dialog_open_script,
35
37
  _attr_input_checked: () => _attr_input_checked,
36
38
  _attr_input_checkedValue: () => _attr_input_checkedValue,
39
+ _attr_input_checkedValue_default: () => _attr_input_checkedValue_default,
37
40
  _attr_input_checkedValue_script: () => _attr_input_checkedValue_script,
41
+ _attr_input_checked_default: () => _attr_input_checked_default,
38
42
  _attr_input_checked_script: () => _attr_input_checked_script,
39
43
  _attr_input_value: () => _attr_input_value,
44
+ _attr_input_value_default: () => _attr_input_value_default,
40
45
  _attr_input_value_script: () => _attr_input_value_script,
41
46
  _attr_nonce: () => _attr_nonce,
42
47
  _attr_select_value: () => _attr_select_value,
48
+ _attr_select_value_default: () => _attr_select_value_default,
43
49
  _attr_select_value_script: () => _attr_select_value_script,
44
50
  _attr_style: () => _attr_style,
45
51
  _attr_style_item: () => _attr_style_item,
46
52
  _attr_style_items: () => _attr_style_items,
47
53
  _attr_textarea_value: () => _attr_input_value,
54
+ _attr_textarea_value_default: () => _attr_input_value_default,
48
55
  _attr_textarea_value_script: () => _attr_input_value_script,
49
56
  _attrs: () => _attrs,
50
57
  _attrs_content: () => _attrs_content,
@@ -1083,18 +1090,33 @@ function _el(id, accessor) {
1083
1090
  }
1084
1091
 
1085
1092
  // src/dom/controllable.ts
1093
+ var inputType = "";
1094
+ var controllableDelegate = createDelegator();
1095
+ function _attr_input_checked_default(scope, nodeAccessor, checked) {
1096
+ const el = scope[nodeAccessor];
1097
+ const normalizedChecked = normalizeBoolProp(checked);
1098
+ if (el.defaultChecked !== normalizedChecked) {
1099
+ const restoreValue = scope["#Creating" /* Creating */] ? normalizedChecked : el.checked;
1100
+ el.defaultChecked = normalizedChecked;
1101
+ if (restoreValue !== normalizedChecked) {
1102
+ el.checked = restoreValue;
1103
+ }
1104
+ }
1105
+ }
1086
1106
  function _attr_input_checked(scope, nodeAccessor, checked, checkedChange) {
1087
- setCheckboxValue(
1088
- scope,
1089
- nodeAccessor,
1090
- 0 /* InputChecked */,
1091
- normalizeBoolProp(checked),
1092
- checkedChange
1093
- );
1107
+ const el = scope[nodeAccessor];
1108
+ const normalizedChecked = normalizeBoolProp(checked);
1109
+ scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = checkedChange;
1110
+ scope["ControlledType:" /* ControlledType */ + nodeAccessor] = checkedChange ? 0 /* InputChecked */ : 5 /* None */;
1111
+ if (checkedChange && !scope["#Creating" /* Creating */]) {
1112
+ el.checked = normalizedChecked;
1113
+ } else {
1114
+ _attr_input_checked_default(scope, nodeAccessor, normalizedChecked);
1115
+ }
1094
1116
  }
1095
1117
  function _attr_input_checked_script(scope, nodeAccessor) {
1096
1118
  const el = scope[nodeAccessor];
1097
- syncControllable(el, "input", hasCheckboxChanged, () => {
1119
+ syncControllableFormInput(el, hasCheckboxChanged, () => {
1098
1120
  const checkedChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1099
1121
  if (checkedChange) {
1100
1122
  const newValue = el.checked;
@@ -1104,20 +1126,48 @@ function _attr_input_checked_script(scope, nodeAccessor) {
1104
1126
  }
1105
1127
  });
1106
1128
  }
1107
- function _attr_input_checkedValue(scope, nodeAccessor, checkedValue, checkedValueChange, value) {
1108
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = checkedValue;
1109
- _attr(scope[nodeAccessor], "value", value);
1110
- setCheckboxValue(
1129
+ function _attr_input_checkedValue_default(scope, nodeAccessor, checkedValue, value) {
1130
+ const multiple = Array.isArray(checkedValue);
1131
+ const normalizedValue = normalizeStrProp(value);
1132
+ const normalizedCheckedValue = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
1133
+ _attr(scope[nodeAccessor], "value", normalizedValue);
1134
+ _attr_input_checked_default(
1111
1135
  scope,
1112
1136
  nodeAccessor,
1113
- 1 /* InputCheckedValue */,
1114
- Array.isArray(checkedValue) ? checkedValue.includes(value) : checkedValue === value,
1115
- checkedValueChange
1137
+ multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue
1116
1138
  );
1117
1139
  }
1140
+ function _attr_input_checkedValue(scope, nodeAccessor, checkedValue, checkedValueChange, value) {
1141
+ const el = scope[nodeAccessor];
1142
+ const multiple = Array.isArray(checkedValue);
1143
+ const normalizedValue = normalizeStrProp(value);
1144
+ const normalizedCheckedValue = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
1145
+ _attr(el, "value", normalizedValue);
1146
+ scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = checkedValueChange;
1147
+ scope["ControlledType:" /* ControlledType */ + nodeAccessor] = checkedValueChange ? 1 /* InputCheckedValue */ : 5 /* None */;
1148
+ if (checkedValueChange && !scope["#Creating" /* Creating */]) {
1149
+ el.checked = multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue;
1150
+ } else {
1151
+ _attr_input_checkedValue_default(
1152
+ scope,
1153
+ nodeAccessor,
1154
+ normalizedCheckedValue,
1155
+ normalizedValue
1156
+ );
1157
+ }
1158
+ }
1118
1159
  function _attr_input_checkedValue_script(scope, nodeAccessor) {
1119
1160
  const el = scope[nodeAccessor];
1120
- syncControllable(el, "input", hasCheckboxChanged, () => {
1161
+ if (isResuming && el.defaultChecked) {
1162
+ if (scope["ControlledValue:" /* ControlledValue */ + nodeAccessor]) {
1163
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor].push(
1164
+ el.value
1165
+ );
1166
+ } else {
1167
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = el.value;
1168
+ }
1169
+ }
1170
+ syncControllableFormInput(el, hasCheckboxChanged, () => {
1121
1171
  const checkedValueChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1122
1172
  if (checkedValueChange) {
1123
1173
  const oldValue = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
@@ -1138,21 +1188,25 @@ function _attr_input_checkedValue_script(scope, nodeAccessor) {
1138
1188
  }
1139
1189
  });
1140
1190
  }
1191
+ function _attr_input_value_default(scope, nodeAccessor, value) {
1192
+ const el = scope[nodeAccessor];
1193
+ const normalizedValue = normalizeStrProp(value);
1194
+ if (el.defaultValue !== normalizedValue) {
1195
+ const restoreValue = scope["#Creating" /* Creating */] ? normalizedValue : el.value;
1196
+ el.defaultValue = normalizedValue;
1197
+ setInputValue(el, restoreValue);
1198
+ }
1199
+ }
1141
1200
  function _attr_input_value(scope, nodeAccessor, value, valueChange) {
1142
1201
  const el = scope[nodeAccessor];
1143
1202
  const normalizedValue = normalizeStrProp(value);
1144
1203
  scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = valueChange;
1145
- if (valueChange) {
1146
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 2 /* InputValue */;
1147
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = value;
1148
- if (el.isConnected) {
1149
- setValueAndUpdateSelection(el, normalizedValue);
1150
- } else {
1151
- el.defaultValue = normalizedValue;
1152
- }
1204
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizedValue;
1205
+ scope["ControlledType:" /* ControlledType */ + nodeAccessor] = valueChange ? 2 /* InputValue */ : 5 /* None */;
1206
+ if (valueChange && !scope["#Creating" /* Creating */]) {
1207
+ setInputValue(el, normalizedValue);
1153
1208
  } else {
1154
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 5 /* None */;
1155
- el.defaultValue = normalizedValue;
1209
+ _attr_input_value_default(scope, nodeAccessor, normalizedValue);
1156
1210
  }
1157
1211
  }
1158
1212
  function _attr_input_value_script(scope, nodeAccessor) {
@@ -1160,151 +1214,154 @@ function _attr_input_value_script(scope, nodeAccessor) {
1160
1214
  if (isResuming) {
1161
1215
  scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = el.defaultValue;
1162
1216
  }
1163
- syncControllable(el, "input", hasValueChanged, (ev) => {
1217
+ syncControllableFormInput(el, hasValueChanged, (ev) => {
1164
1218
  const valueChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1165
1219
  if (valueChange) {
1166
1220
  inputType = ev?.inputType;
1167
1221
  valueChange(el.value);
1168
1222
  run();
1169
- setValueAndUpdateSelection(
1170
- el,
1171
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor]
1172
- );
1223
+ setInputValue(el, scope["ControlledValue:" /* ControlledValue */ + nodeAccessor]);
1173
1224
  inputType = "";
1174
1225
  }
1175
1226
  });
1176
1227
  }
1228
+ function setInputValue(el, value) {
1229
+ if (el.value !== value) {
1230
+ const updatedPosition = resolveCursorPosition(
1231
+ inputType,
1232
+ el.getRootNode().activeElement === el && el.selectionStart,
1233
+ el.value,
1234
+ el.value = value
1235
+ );
1236
+ if (~updatedPosition) {
1237
+ el.setSelectionRange(updatedPosition, updatedPosition);
1238
+ }
1239
+ }
1240
+ }
1241
+ function _attr_select_value_default(scope, nodeAccessor, value) {
1242
+ let restoreValue;
1243
+ const el = scope[nodeAccessor];
1244
+ const existing = !scope["#Creating" /* Creating */];
1245
+ const multiple = Array.isArray(value);
1246
+ const normalizedValue = multiple ? value.map(normalizeStrProp) : normalizeStrProp(value);
1247
+ pendingEffects.unshift(() => {
1248
+ for (const opt of el.options) {
1249
+ const selected = multiple ? normalizedValue.includes(opt.value) : opt.value === normalizedValue;
1250
+ if (opt.defaultSelected !== selected) {
1251
+ if (existing) {
1252
+ restoreValue ??= getSelectValue(el, multiple);
1253
+ }
1254
+ opt.defaultSelected = selected;
1255
+ }
1256
+ }
1257
+ if (restoreValue !== void 0) {
1258
+ setSelectValue(el, restoreValue, multiple);
1259
+ }
1260
+ }, scope);
1261
+ }
1177
1262
  function _attr_select_value(scope, nodeAccessor, value, valueChange) {
1263
+ const el = scope[nodeAccessor];
1264
+ const existing = !scope["#Creating" /* Creating */];
1265
+ const multiple = Array.isArray(value);
1266
+ const normalizedValue = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = multiple ? value.map(normalizeStrProp) : normalizeStrProp(value);
1178
1267
  scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = valueChange;
1179
- if (valueChange) {
1180
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 3 /* SelectValue */;
1181
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = value;
1268
+ scope["ControlledType:" /* ControlledType */ + nodeAccessor] = valueChange ? 3 /* SelectValue */ : 5 /* None */;
1269
+ if (valueChange && existing) {
1270
+ pendingEffects.unshift(
1271
+ () => setSelectValue(el, normalizedValue, multiple),
1272
+ scope
1273
+ );
1182
1274
  } else {
1183
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 5 /* None */;
1184
- }
1185
- pendingEffects.unshift(
1186
- () => setSelectOptions(
1187
- scope[nodeAccessor],
1188
- value,
1189
- valueChange
1190
- ),
1191
- scope
1192
- );
1275
+ _attr_select_value_default(scope, nodeAccessor, normalizedValue);
1276
+ }
1193
1277
  }
1194
1278
  function _attr_select_value_script(scope, nodeAccessor) {
1195
1279
  const el = scope[nodeAccessor];
1196
1280
  const onChange = () => {
1197
1281
  const valueChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1198
1282
  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
- );
1283
+ const oldValue = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1284
+ const multiple = Array.isArray(oldValue);
1285
+ const newValue = getSelectValue(el, multiple);
1286
+ setSelectValue(el, oldValue, multiple);
1207
1287
  valueChange(newValue);
1208
1288
  run();
1209
1289
  }
1210
1290
  };
1211
- if (!el._) {
1212
- new MutationObserver(() => {
1213
- 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) {
1215
- onChange();
1291
+ if (isResuming) {
1292
+ if (el.multiple) {
1293
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = [];
1294
+ for (const opt of el.options) {
1295
+ if (opt.defaultSelected) {
1296
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor].push(opt.value);
1297
+ }
1216
1298
  }
1217
- }).observe(el, {
1218
- childList: true,
1219
- subtree: true
1220
- });
1299
+ } else {
1300
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = "";
1301
+ for (const opt of el.options) {
1302
+ if (opt.defaultSelected) {
1303
+ scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = opt.value;
1304
+ break;
1305
+ }
1306
+ }
1307
+ }
1221
1308
  }
1222
- syncControllable(el, "input", hasSelectChanged, onChange);
1309
+ syncControllableFormInput(el, hasSelectChanged, onChange);
1310
+ new MutationObserver(() => {
1311
+ const value = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1312
+ if (Array.isArray(value) ? value.length !== el.selectedOptions.length || value.some((value2, i) => value2 != el.selectedOptions[i].value) : el.value !== value) {
1313
+ onChange();
1314
+ }
1315
+ }).observe(el, { childList: true, subtree: true });
1223
1316
  }
1224
- function setSelectOptions(el, value, valueChange) {
1225
- if (Array.isArray(value)) {
1317
+ function setSelectValue(el, value, multiple) {
1318
+ if (multiple) {
1226
1319
  for (const opt of el.options) {
1227
- const selected = value.includes(opt.value);
1228
- if (valueChange) {
1229
- opt.selected = selected;
1230
- } else {
1231
- opt.defaultSelected = selected;
1232
- }
1320
+ opt.selected = value.includes(opt.value);
1233
1321
  }
1234
1322
  } else {
1235
- const normalizedValue = normalizeStrProp(value);
1236
- if (valueChange) {
1237
- el.value = normalizedValue;
1238
- } else {
1239
- for (const opt of el.options) {
1240
- opt.defaultSelected = opt.value === normalizedValue;
1241
- }
1242
- }
1323
+ el.value = value;
1324
+ }
1325
+ }
1326
+ function getSelectValue(el, multiple) {
1327
+ return multiple ? Array.from(el.selectedOptions, (opt) => opt.value) : el.value;
1328
+ }
1329
+ function _attr_details_or_dialog_open_default(scope, nodeAccessor, open) {
1330
+ if (scope["#Creating" /* Creating */]) {
1331
+ scope[nodeAccessor].open = normalizeBoolProp(open);
1243
1332
  }
1244
1333
  }
1245
1334
  function _attr_details_or_dialog_open(scope, nodeAccessor, open, openChange) {
1335
+ const normalizedOpen = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizeBoolProp(open);
1246
1336
  scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = openChange;
1247
- if (openChange) {
1248
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 4 /* DetailsOrDialogOpen */;
1337
+ scope["ControlledType:" /* ControlledType */ + nodeAccessor] = openChange ? 4 /* DetailsOrDialogOpen */ : 5 /* None */;
1338
+ if (openChange && !scope["#Creating" /* Creating */]) {
1339
+ scope[nodeAccessor].open = normalizedOpen;
1249
1340
  } else {
1250
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 5 /* None */;
1341
+ _attr_details_or_dialog_open_default(scope, nodeAccessor, normalizedOpen);
1251
1342
  }
1252
- scope[nodeAccessor].open = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizeBoolProp(open);
1253
1343
  }
1254
1344
  function _attr_details_or_dialog_open_script(scope, nodeAccessor) {
1255
1345
  const el = scope[nodeAccessor];
1256
- const hasChanged = () => el.open !== scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1257
- syncControllable(
1258
- el,
1259
- el.tagName === "DIALOG" ? "close" : "toggle",
1260
- hasChanged,
1261
- () => {
1262
- const openChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1263
- if (openChange && hasChanged()) {
1264
- const newValue = el.open;
1265
- el.open = !newValue;
1266
- openChange(newValue);
1267
- run();
1268
- }
1269
- }
1270
- );
1271
- }
1272
- var inputType = "";
1273
- function setValueAndUpdateSelection(el, value) {
1274
- if (el.value !== value) {
1275
- const updatedPosition = resolveCursorPosition(
1276
- inputType,
1277
- el.getRootNode().activeElement === el && el.selectionStart,
1278
- el.value,
1279
- el.value = value
1280
- );
1281
- if (~updatedPosition) {
1282
- el.setSelectionRange(updatedPosition, updatedPosition);
1346
+ new MutationObserver(() => {
1347
+ const openChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1348
+ if (openChange && el.open === !scope["ControlledValue:" /* ControlledValue */ + nodeAccessor]) {
1349
+ const newValue = el.open;
1350
+ el.open = !newValue;
1351
+ openChange(newValue);
1352
+ run();
1283
1353
  }
1284
- }
1354
+ }).observe(el, { attributes: true, attributeFilter: ["open"] });
1285
1355
  }
1286
- function setCheckboxValue(scope, nodeAccessor, type, checked, checkedChange) {
1287
- scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = checkedChange;
1288
- if (checkedChange) {
1289
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = type;
1290
- scope[nodeAccessor].checked = checked;
1291
- } else {
1292
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 5 /* None */;
1293
- scope[nodeAccessor].defaultChecked = checked;
1356
+ function syncControllableFormInput(el, hasChanged, onChange) {
1357
+ el._ = onChange;
1358
+ controllableDelegate(el, "input", handleChange);
1359
+ if (el.form) {
1360
+ controllableDelegate(el.form, "reset", handleFormReset);
1294
1361
  }
1295
- }
1296
- var controllableDelegate = createDelegator();
1297
- function syncControllable(el, event, hasChanged, onChange) {
1298
- if (!el._) {
1299
- controllableDelegate(el, event, handleChange);
1300
- if (el.form) {
1301
- controllableDelegate(el.form, "reset", handleFormReset);
1302
- }
1303
- if (isResuming && hasChanged(el)) {
1304
- queueMicrotask(onChange);
1305
- }
1362
+ if (isResuming && hasChanged(el)) {
1363
+ queueMicrotask(onChange);
1306
1364
  }
1307
- el._ = onChange;
1308
1365
  }
1309
1366
  function handleChange(ev) {
1310
1367
  ev.target._?.(ev);
@@ -1350,9 +1407,6 @@ function updateList(arr, val, push2) {
1350
1407
  const index = arr.indexOf(val);
1351
1408
  return (push2 ? !~index && [...arr, val] : ~index && arr.slice(0, index).concat(arr.slice(index + 1))) || arr;
1352
1409
  }
1353
- function toValueProp(it) {
1354
- return it.value;
1355
- }
1356
1410
 
1357
1411
  // src/dom/dom.ts
1358
1412
  function _to_text(value) {
@@ -1390,7 +1444,7 @@ function _attr_style_items(element, items) {
1390
1444
  }
1391
1445
  }
1392
1446
  function _attr_style_item(element, name, value) {
1393
- element.style.setProperty(name, value || value === 0 ? value + "" : "");
1447
+ element.style.setProperty(name, _to_text(value));
1394
1448
  }
1395
1449
  function _attr_nonce(scope, nodeAccessor) {
1396
1450
  _attr(scope[nodeAccessor], "nonce", scope["$global" /* Global */].cspNonce);
@@ -1580,7 +1634,7 @@ function _html(scope, value, accessor) {
1580
1634
  const parentNode = firstChild.parentNode;
1581
1635
  const lastChild = scope["DynamicHTMLLastChild:" /* DynamicHTMLLastChild */ + accessor] || firstChild;
1582
1636
  const newContent = parseHTML(
1583
- value || value === 0 ? value + "" : "",
1637
+ _to_text(value),
1584
1638
  parentNode.namespaceURI
1585
1639
  );
1586
1640
  insertChildNodes(