@marko/runtime-tags 6.0.146 → 6.0.148

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,36 @@ function _attr_input_checked_script(scope, nodeAccessor) {
1104
1126
  }
1105
1127
  });
1106
1128
  }
1107
- function _attr_input_checkedValue(scope, nodeAccessor, checkedValue, checkedValueChange, value) {
1129
+ function _attr_input_checkedValue_default(scope, nodeAccessor, checkedValue, value) {
1108
1130
  const multiple = Array.isArray(checkedValue);
1109
1131
  const normalizedValue = normalizeStrProp(value);
1110
1132
  const normalizedCheckedValue = multiple ? checkedValue.map(normalizeStrProp) : normalizeStrProp(checkedValue);
1111
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizedCheckedValue;
1112
1133
  _attr(scope[nodeAccessor], "value", normalizedValue);
1113
- setCheckboxValue(
1134
+ _attr_input_checked_default(
1114
1135
  scope,
1115
1136
  nodeAccessor,
1116
- 1 /* InputCheckedValue */,
1117
- multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue,
1118
- checkedValueChange
1137
+ multiple ? normalizedCheckedValue.includes(normalizedValue) : normalizedValue === normalizedCheckedValue
1119
1138
  );
1120
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
+ }
1121
1159
  function _attr_input_checkedValue_script(scope, nodeAccessor) {
1122
1160
  const el = scope[nodeAccessor];
1123
1161
  if (isResuming && el.defaultChecked) {
@@ -1129,7 +1167,7 @@ function _attr_input_checkedValue_script(scope, nodeAccessor) {
1129
1167
  scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = el.value;
1130
1168
  }
1131
1169
  }
1132
- syncControllable(el, "input", hasCheckboxChanged, () => {
1170
+ syncControllableFormInput(el, hasCheckboxChanged, () => {
1133
1171
  const checkedValueChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1134
1172
  if (checkedValueChange) {
1135
1173
  const oldValue = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
@@ -1150,21 +1188,25 @@ function _attr_input_checkedValue_script(scope, nodeAccessor) {
1150
1188
  }
1151
1189
  });
1152
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
+ }
1153
1200
  function _attr_input_value(scope, nodeAccessor, value, valueChange) {
1154
1201
  const el = scope[nodeAccessor];
1155
1202
  const normalizedValue = normalizeStrProp(value);
1156
1203
  scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = valueChange;
1157
- if (valueChange) {
1158
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 2 /* InputValue */;
1159
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizedValue;
1160
- if (el.isConnected) {
1161
- setValueAndUpdateSelection(el, normalizedValue);
1162
- } else {
1163
- el.defaultValue = normalizedValue;
1164
- }
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);
1165
1208
  } else {
1166
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 5 /* None */;
1167
- el.defaultValue = normalizedValue;
1209
+ _attr_input_value_default(scope, nodeAccessor, normalizedValue);
1168
1210
  }
1169
1211
  }
1170
1212
  function _attr_input_value_script(scope, nodeAccessor) {
@@ -1172,37 +1214,66 @@ function _attr_input_value_script(scope, nodeAccessor) {
1172
1214
  if (isResuming) {
1173
1215
  scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = el.defaultValue;
1174
1216
  }
1175
- syncControllable(el, "input", hasValueChanged, (ev) => {
1217
+ syncControllableFormInput(el, hasValueChanged, (ev) => {
1176
1218
  const valueChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1177
1219
  if (valueChange) {
1178
1220
  inputType = ev?.inputType;
1179
1221
  valueChange(el.value);
1180
1222
  run();
1181
- setValueAndUpdateSelection(
1182
- el,
1183
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor]
1184
- );
1223
+ setInputValue(el, scope["ControlledValue:" /* ControlledValue */ + nodeAccessor]);
1185
1224
  inputType = "";
1186
1225
  }
1187
1226
  });
1188
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
+ }
1189
1262
  function _attr_select_value(scope, nodeAccessor, value, valueChange) {
1190
- const normalizedValue = Array.isArray(value) ? value.map(normalizeStrProp) : normalizeStrProp(value);
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);
1191
1267
  scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = valueChange;
1192
- if (valueChange) {
1193
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 3 /* SelectValue */;
1194
- scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizedValue;
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
+ );
1195
1274
  } else {
1196
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 5 /* None */;
1197
- }
1198
- pendingEffects.unshift(
1199
- () => setSelectOptions(
1200
- scope[nodeAccessor],
1201
- normalizedValue,
1202
- valueChange
1203
- ),
1204
- scope
1205
- );
1275
+ _attr_select_value_default(scope, nodeAccessor, normalizedValue);
1276
+ }
1206
1277
  }
1207
1278
  function _attr_select_value_script(scope, nodeAccessor) {
1208
1279
  const el = scope[nodeAccessor];
@@ -1210,8 +1281,9 @@ function _attr_select_value_script(scope, nodeAccessor) {
1210
1281
  const valueChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1211
1282
  if (valueChange) {
1212
1283
  const oldValue = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1213
- const newValue = Array.isArray(oldValue) ? Array.from(el.selectedOptions, toValueProp) : el.value;
1214
- setSelectOptions(el, oldValue, valueChange);
1284
+ const multiple = Array.isArray(oldValue);
1285
+ const newValue = getSelectValue(el, multiple);
1286
+ setSelectValue(el, oldValue, multiple);
1215
1287
  valueChange(newValue);
1216
1288
  run();
1217
1289
  }
@@ -1234,98 +1306,62 @@ function _attr_select_value_script(scope, nodeAccessor) {
1234
1306
  }
1235
1307
  }
1236
1308
  }
1237
- if (!el._) {
1238
- new MutationObserver(() => {
1239
- const value = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1240
- if (Array.isArray(value) ? value.length !== el.selectedOptions.length || value.some((value2, i) => value2 != el.selectedOptions[i].value) : el.value !== value) {
1241
- onChange();
1242
- }
1243
- }).observe(el, {
1244
- childList: true,
1245
- subtree: true
1246
- });
1247
- }
1248
- 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 });
1249
1316
  }
1250
- function setSelectOptions(el, value, valueChange) {
1251
- if (Array.isArray(value)) {
1317
+ function setSelectValue(el, value, multiple) {
1318
+ if (multiple) {
1252
1319
  for (const opt of el.options) {
1253
- const selected = value.includes(opt.value);
1254
- if (valueChange) {
1255
- opt.selected = selected;
1256
- } else {
1257
- opt.defaultSelected = selected;
1258
- }
1320
+ opt.selected = value.includes(opt.value);
1259
1321
  }
1260
1322
  } else {
1261
- if (valueChange) {
1262
- el.value = value;
1263
- } else {
1264
- for (const opt of el.options) {
1265
- opt.defaultSelected = opt.value === value;
1266
- }
1267
- }
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);
1268
1332
  }
1269
1333
  }
1270
1334
  function _attr_details_or_dialog_open(scope, nodeAccessor, open, openChange) {
1335
+ const normalizedOpen = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizeBoolProp(open);
1271
1336
  scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = openChange;
1272
1337
  scope["ControlledType:" /* ControlledType */ + nodeAccessor] = openChange ? 4 /* DetailsOrDialogOpen */ : 5 /* None */;
1273
- scope[nodeAccessor].open = scope["ControlledValue:" /* ControlledValue */ + nodeAccessor] = normalizeBoolProp(open);
1338
+ if (openChange && !scope["#Creating" /* Creating */]) {
1339
+ scope[nodeAccessor].open = normalizedOpen;
1340
+ } else {
1341
+ _attr_details_or_dialog_open_default(scope, nodeAccessor, normalizedOpen);
1342
+ }
1274
1343
  }
1275
1344
  function _attr_details_or_dialog_open_script(scope, nodeAccessor) {
1276
1345
  const el = scope[nodeAccessor];
1277
- const hasChanged = () => el.open === !scope["ControlledValue:" /* ControlledValue */ + nodeAccessor];
1278
- syncControllable(
1279
- el,
1280
- el.tagName === "DIALOG" ? "close" : "toggle",
1281
- hasChanged,
1282
- () => {
1283
- const openChange = scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor];
1284
- if (openChange && hasChanged()) {
1285
- const newValue = el.open;
1286
- el.open = !newValue;
1287
- openChange(newValue);
1288
- run();
1289
- }
1290
- }
1291
- );
1292
- }
1293
- var inputType = "";
1294
- function setValueAndUpdateSelection(el, value) {
1295
- if (el.value !== value) {
1296
- const updatedPosition = resolveCursorPosition(
1297
- inputType,
1298
- el.getRootNode().activeElement === el && el.selectionStart,
1299
- el.value,
1300
- el.value = value
1301
- );
1302
- if (~updatedPosition) {
1303
- 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();
1304
1353
  }
1305
- }
1354
+ }).observe(el, { attributes: true, attributeFilter: ["open"] });
1306
1355
  }
1307
- function setCheckboxValue(scope, nodeAccessor, type, checked, checkedChange) {
1308
- scope["ControlledHandler:" /* ControlledHandler */ + nodeAccessor] = checkedChange;
1309
- if (checkedChange) {
1310
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = type;
1311
- scope[nodeAccessor].checked = checked;
1312
- } else {
1313
- scope["ControlledType:" /* ControlledType */ + nodeAccessor] = 5 /* None */;
1314
- 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);
1315
1361
  }
1316
- }
1317
- var controllableDelegate = createDelegator();
1318
- function syncControllable(el, event, hasChanged, onChange) {
1319
- if (!el._) {
1320
- controllableDelegate(el, event, handleChange);
1321
- if (el.form) {
1322
- controllableDelegate(el.form, "reset", handleFormReset);
1323
- }
1324
- if (isResuming && hasChanged(el)) {
1325
- queueMicrotask(onChange);
1326
- }
1362
+ if (isResuming && hasChanged(el)) {
1363
+ queueMicrotask(onChange);
1327
1364
  }
1328
- el._ = onChange;
1329
1365
  }
1330
1366
  function handleChange(ev) {
1331
1367
  ev.target._?.(ev);
@@ -1371,9 +1407,6 @@ function updateList(arr, val, push2) {
1371
1407
  const index = arr.indexOf(val);
1372
1408
  return (push2 ? !~index && [...arr, val] : ~index && arr.slice(0, index).concat(arr.slice(index + 1))) || arr;
1373
1409
  }
1374
- function toValueProp(it) {
1375
- return it.value;
1376
- }
1377
1410
 
1378
1411
  // src/dom/dom.ts
1379
1412
  function _to_text(value) {
@@ -1411,7 +1444,7 @@ function _attr_style_items(element, items) {
1411
1444
  }
1412
1445
  }
1413
1446
  function _attr_style_item(element, name, value) {
1414
- element.style.setProperty(name, value || value === 0 ? value + "" : "");
1447
+ element.style.setProperty(name, _to_text(value));
1415
1448
  }
1416
1449
  function _attr_nonce(scope, nodeAccessor) {
1417
1450
  _attr(scope[nodeAccessor], "nonce", scope["$global" /* Global */].cspNonce);
@@ -1601,7 +1634,7 @@ function _html(scope, value, accessor) {
1601
1634
  const parentNode = firstChild.parentNode;
1602
1635
  const lastChild = scope["DynamicHTMLLastChild:" /* DynamicHTMLLastChild */ + accessor] || firstChild;
1603
1636
  const newContent = parseHTML(
1604
- value || value === 0 ? value + "" : "",
1637
+ _to_text(value),
1605
1638
  parentNode.namespaceURI
1606
1639
  );
1607
1640
  insertChildNodes(