@marko/runtime-tags 6.1.17 → 6.1.19
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 +9 -14
- package/dist/debug/dom.mjs +9 -14
- package/dist/debug/html.js +23 -20
- package/dist/debug/html.mjs +23 -20
- package/dist/dom/compat.d.ts +1 -0
- package/dist/dom/event.d.ts +1 -1
- package/dist/dom.js +9 -13
- package/dist/dom.mjs +9 -13
- package/dist/html/attrs.d.ts +6 -6
- package/dist/html.js +23 -20
- package/dist/html.mjs +23 -20
- package/dist/translator/index.js +50 -31
- package/dist/translator/visitors/tag/dynamic-tag.d.ts +10 -0
- package/package.json +1 -1
package/dist/debug/dom.js
CHANGED
|
@@ -230,19 +230,12 @@ function push(opt, item) {
|
|
|
230
230
|
}
|
|
231
231
|
//#endregion
|
|
232
232
|
//#region src/dom/event.ts
|
|
233
|
-
const defaultDelegator = /* @__PURE__ */ createDelegator();
|
|
234
233
|
function _on(element, type, handler) {
|
|
235
234
|
assertHandlerIsFunction("on" + type[0].toUpperCase() + type.slice(1), handler);
|
|
236
|
-
if (element["$" + type] === void 0)
|
|
235
|
+
if (element["$" + type] === void 0) delegate(type, handleDelegated);
|
|
237
236
|
element["$" + type] = handler || null;
|
|
238
237
|
}
|
|
239
|
-
|
|
240
|
-
function createDelegator() {
|
|
241
|
-
const kEvents = Symbol();
|
|
242
|
-
return function ensureDelegated(node, type, handler) {
|
|
243
|
-
((node = node.getRootNode())[kEvents] ||= {})[type] ||= (node.addEventListener(type, handler, true), 1);
|
|
244
|
-
};
|
|
245
|
-
}
|
|
238
|
+
const delegate = (type, handler) => handler[type] ||= (document.addEventListener(type, handler, true), 1);
|
|
246
239
|
function handleDelegated(ev) {
|
|
247
240
|
let target = !rendering && ev.target;
|
|
248
241
|
Object.defineProperty(ev, "currentTarget", {
|
|
@@ -867,7 +860,6 @@ function _el(id, accessor) {
|
|
|
867
860
|
//#endregion
|
|
868
861
|
//#region src/dom/controllable.ts
|
|
869
862
|
let inputType = "";
|
|
870
|
-
const controllableDelegate = /* @__PURE__ */ createDelegator();
|
|
871
863
|
function _attr_input_checked_default(scope, nodeAccessor, checked) {
|
|
872
864
|
const el = scope[nodeAccessor];
|
|
873
865
|
const normalizedChecked = isNotVoid(checked);
|
|
@@ -927,7 +919,7 @@ function _attr_input_checkedValue_script(scope, nodeAccessor) {
|
|
|
927
919
|
const oldValue = scope["ControlledValue:" + nodeAccessor];
|
|
928
920
|
const newValue = Array.isArray(oldValue) ? updateList(oldValue, el.value, el.checked) : el.checked ? el.value : void 0;
|
|
929
921
|
if (el.name && el.type[0] === "r") {
|
|
930
|
-
for (const radio of
|
|
922
|
+
for (const radio of document.querySelectorAll(`[type=radio][name=${CSS.escape(el.name)}]`)) if (radio.form === el.form) radio.checked = Array.isArray(oldValue) ? oldValue.includes(radio.value) : oldValue === radio.value;
|
|
931
923
|
} else el.checked = !el.checked;
|
|
932
924
|
checkedValueChange(newValue);
|
|
933
925
|
run();
|
|
@@ -969,7 +961,7 @@ function _attr_input_value_script(scope, nodeAccessor) {
|
|
|
969
961
|
}
|
|
970
962
|
function setInputValue(el, value) {
|
|
971
963
|
if (el.value !== value) {
|
|
972
|
-
const updatedPosition = resolveCursorPosition(inputType,
|
|
964
|
+
const updatedPosition = resolveCursorPosition(inputType, document.activeElement === el && el.selectionStart, el.value, el.value = value);
|
|
973
965
|
if (~updatedPosition) el.setSelectionRange(updatedPosition, updatedPosition);
|
|
974
966
|
}
|
|
975
967
|
}
|
|
@@ -1076,8 +1068,8 @@ function _attr_details_or_dialog_open_script(scope, nodeAccessor) {
|
|
|
1076
1068
|
}
|
|
1077
1069
|
function syncControllableFormInput(el, hasChanged, onChange) {
|
|
1078
1070
|
el._ = onChange;
|
|
1079
|
-
|
|
1080
|
-
if (el.form)
|
|
1071
|
+
delegate("input", handleChange);
|
|
1072
|
+
if (el.form) delegate("reset", handleFormReset);
|
|
1081
1073
|
if (isResuming && hasChanged(el)) queueMicrotask(onChange);
|
|
1082
1074
|
}
|
|
1083
1075
|
function handleChange(ev) {
|
|
@@ -1900,6 +1892,9 @@ const compat = {
|
|
|
1900
1892
|
getStartNode(branch) {
|
|
1901
1893
|
return branch["#StartNode"];
|
|
1902
1894
|
},
|
|
1895
|
+
getEndNode(branch) {
|
|
1896
|
+
return branch["#EndNode"];
|
|
1897
|
+
},
|
|
1903
1898
|
setScopeNodes(branch, startNode, endNode) {
|
|
1904
1899
|
branch["#StartNode"] = startNode;
|
|
1905
1900
|
branch["#EndNode"] = endNode;
|
package/dist/debug/dom.mjs
CHANGED
|
@@ -228,19 +228,12 @@ function push(opt, item) {
|
|
|
228
228
|
}
|
|
229
229
|
//#endregion
|
|
230
230
|
//#region src/dom/event.ts
|
|
231
|
-
const defaultDelegator = /* @__PURE__ */ createDelegator();
|
|
232
231
|
function _on(element, type, handler) {
|
|
233
232
|
assertHandlerIsFunction("on" + type[0].toUpperCase() + type.slice(1), handler);
|
|
234
|
-
if (element["$" + type] === void 0)
|
|
233
|
+
if (element["$" + type] === void 0) delegate(type, handleDelegated);
|
|
235
234
|
element["$" + type] = handler || null;
|
|
236
235
|
}
|
|
237
|
-
|
|
238
|
-
function createDelegator() {
|
|
239
|
-
const kEvents = Symbol();
|
|
240
|
-
return function ensureDelegated(node, type, handler) {
|
|
241
|
-
((node = node.getRootNode())[kEvents] ||= {})[type] ||= (node.addEventListener(type, handler, true), 1);
|
|
242
|
-
};
|
|
243
|
-
}
|
|
236
|
+
const delegate = (type, handler) => handler[type] ||= (document.addEventListener(type, handler, true), 1);
|
|
244
237
|
function handleDelegated(ev) {
|
|
245
238
|
let target = !rendering && ev.target;
|
|
246
239
|
Object.defineProperty(ev, "currentTarget", {
|
|
@@ -865,7 +858,6 @@ function _el(id, accessor) {
|
|
|
865
858
|
//#endregion
|
|
866
859
|
//#region src/dom/controllable.ts
|
|
867
860
|
let inputType = "";
|
|
868
|
-
const controllableDelegate = /* @__PURE__ */ createDelegator();
|
|
869
861
|
function _attr_input_checked_default(scope, nodeAccessor, checked) {
|
|
870
862
|
const el = scope[nodeAccessor];
|
|
871
863
|
const normalizedChecked = isNotVoid(checked);
|
|
@@ -925,7 +917,7 @@ function _attr_input_checkedValue_script(scope, nodeAccessor) {
|
|
|
925
917
|
const oldValue = scope["ControlledValue:" + nodeAccessor];
|
|
926
918
|
const newValue = Array.isArray(oldValue) ? updateList(oldValue, el.value, el.checked) : el.checked ? el.value : void 0;
|
|
927
919
|
if (el.name && el.type[0] === "r") {
|
|
928
|
-
for (const radio of
|
|
920
|
+
for (const radio of document.querySelectorAll(`[type=radio][name=${CSS.escape(el.name)}]`)) if (radio.form === el.form) radio.checked = Array.isArray(oldValue) ? oldValue.includes(radio.value) : oldValue === radio.value;
|
|
929
921
|
} else el.checked = !el.checked;
|
|
930
922
|
checkedValueChange(newValue);
|
|
931
923
|
run();
|
|
@@ -967,7 +959,7 @@ function _attr_input_value_script(scope, nodeAccessor) {
|
|
|
967
959
|
}
|
|
968
960
|
function setInputValue(el, value) {
|
|
969
961
|
if (el.value !== value) {
|
|
970
|
-
const updatedPosition = resolveCursorPosition(inputType,
|
|
962
|
+
const updatedPosition = resolveCursorPosition(inputType, document.activeElement === el && el.selectionStart, el.value, el.value = value);
|
|
971
963
|
if (~updatedPosition) el.setSelectionRange(updatedPosition, updatedPosition);
|
|
972
964
|
}
|
|
973
965
|
}
|
|
@@ -1074,8 +1066,8 @@ function _attr_details_or_dialog_open_script(scope, nodeAccessor) {
|
|
|
1074
1066
|
}
|
|
1075
1067
|
function syncControllableFormInput(el, hasChanged, onChange) {
|
|
1076
1068
|
el._ = onChange;
|
|
1077
|
-
|
|
1078
|
-
if (el.form)
|
|
1069
|
+
delegate("input", handleChange);
|
|
1070
|
+
if (el.form) delegate("reset", handleFormReset);
|
|
1079
1071
|
if (isResuming && hasChanged(el)) queueMicrotask(onChange);
|
|
1080
1072
|
}
|
|
1081
1073
|
function handleChange(ev) {
|
|
@@ -1898,6 +1890,9 @@ const compat = {
|
|
|
1898
1890
|
getStartNode(branch) {
|
|
1899
1891
|
return branch["#StartNode"];
|
|
1900
1892
|
},
|
|
1893
|
+
getEndNode(branch) {
|
|
1894
|
+
return branch["#EndNode"];
|
|
1895
|
+
},
|
|
1901
1896
|
setScopeNodes(branch, startNode, endNode) {
|
|
1902
1897
|
branch["#StartNode"] = startNode;
|
|
1903
1898
|
branch["#EndNode"] = endNode;
|
package/dist/debug/html.js
CHANGED
|
@@ -2475,29 +2475,29 @@ function _attr_option_value(value) {
|
|
|
2475
2475
|
}
|
|
2476
2476
|
const kSelectedValue = Symbol("selectedValue");
|
|
2477
2477
|
const kSelectedValueMatched = Symbol("selectedValueMatched");
|
|
2478
|
-
function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content) {
|
|
2479
|
-
if (valueChange) writeControlledScope(3, scopeId, nodeAccessor, void 0, valueChange);
|
|
2478
|
+
function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content, serializeType) {
|
|
2479
|
+
if (valueChange) writeControlledScope(3, scopeId, nodeAccessor, void 0, valueChange, serializeType);
|
|
2480
2480
|
if (content) if (valueChange) {
|
|
2481
2481
|
const matched = { value: false };
|
|
2482
2482
|
withContext(kSelectedValue, value, () => withContext(kSelectedValueMatched, matched, content));
|
|
2483
2483
|
if (!matched.value && (Array.isArray(value) ? value.some((v) => normalizeStrAttrValue(v) !== "") : normalizeStrAttrValue(value) !== "")) console.error("A controlled `<select>`'s `value` has no matching `<option>`:", value);
|
|
2484
2484
|
} else withContext(kSelectedValue, value, content);
|
|
2485
2485
|
}
|
|
2486
|
-
function _attr_textarea_value(scopeId, nodeAccessor, value, valueChange) {
|
|
2487
|
-
if (valueChange) writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange);
|
|
2486
|
+
function _attr_textarea_value(scopeId, nodeAccessor, value, valueChange, serializeType) {
|
|
2487
|
+
if (valueChange) writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange, serializeType);
|
|
2488
2488
|
return _escape(value);
|
|
2489
2489
|
}
|
|
2490
|
-
function _attr_input_value(scopeId, nodeAccessor, value, valueChange) {
|
|
2491
|
-
if (valueChange) writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange);
|
|
2490
|
+
function _attr_input_value(scopeId, nodeAccessor, value, valueChange, serializeType) {
|
|
2491
|
+
if (valueChange) writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange, serializeType);
|
|
2492
2492
|
return _attr("value", value);
|
|
2493
2493
|
}
|
|
2494
|
-
function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange) {
|
|
2495
|
-
if (checkedChange) writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange);
|
|
2494
|
+
function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange, serializeType) {
|
|
2495
|
+
if (checkedChange) writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange, serializeType);
|
|
2496
2496
|
return isNotVoid(checked) ? " checked" : "";
|
|
2497
2497
|
}
|
|
2498
|
-
function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value) {
|
|
2498
|
+
function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value, serializeType) {
|
|
2499
2499
|
const valueAttr = _attr("value", value);
|
|
2500
|
-
if (checkedValueChange) writeControlledScope(1, scopeId, nodeAccessor, getCheckedValueRef(checkedValue), checkedValueChange);
|
|
2500
|
+
if (checkedValueChange) writeControlledScope(1, scopeId, nodeAccessor, getCheckedValueRef(checkedValue), checkedValueChange, serializeType);
|
|
2501
2501
|
return normalizedValueMatches(checkedValue, value) ? valueAttr + " checked" : valueAttr;
|
|
2502
2502
|
}
|
|
2503
2503
|
const checkedValuesRefs = /* @__PURE__ */ new WeakMap();
|
|
@@ -2511,9 +2511,9 @@ function getCheckedValueRef(checkedValue) {
|
|
|
2511
2511
|
return ref;
|
|
2512
2512
|
}
|
|
2513
2513
|
}
|
|
2514
|
-
function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange) {
|
|
2514
|
+
function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange, serializeType) {
|
|
2515
2515
|
const normalizedOpen = isNotVoid(open);
|
|
2516
|
-
if (openChange) writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen || void 0, openChange);
|
|
2516
|
+
if (openChange) writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen || void 0, openChange, serializeType);
|
|
2517
2517
|
return normalizedOpen ? " open" : "";
|
|
2518
2518
|
}
|
|
2519
2519
|
function _attr_nonce() {
|
|
@@ -2529,9 +2529,9 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
|
|
|
2529
2529
|
switch (tagName) {
|
|
2530
2530
|
case "input":
|
|
2531
2531
|
assertExclusiveAttrs(data);
|
|
2532
|
-
if (data.checkedChange) result += _attr_input_checked(scopeId, nodeAccessor, data.checked, data.checkedChange);
|
|
2533
|
-
else if ("checkedValue" in data || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value);
|
|
2534
|
-
else if (data.valueChange) result += _attr_input_value(scopeId, nodeAccessor, data.value, data.valueChange);
|
|
2532
|
+
if (data.checkedChange) result += _attr_input_checked(scopeId, nodeAccessor, data.checked, data.checkedChange, 1);
|
|
2533
|
+
else if ("checkedValue" in data || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value, 1);
|
|
2534
|
+
else if (data.valueChange) result += _attr_input_value(scopeId, nodeAccessor, data.value, data.valueChange, 1);
|
|
2535
2535
|
else break;
|
|
2536
2536
|
skip = /^(?:value|checked(?:Value)?)(?:Change)?$|[\s/>"'=]/;
|
|
2537
2537
|
break;
|
|
@@ -2548,7 +2548,7 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
|
|
|
2548
2548
|
case "details":
|
|
2549
2549
|
case "dialog":
|
|
2550
2550
|
if (data.openChange) {
|
|
2551
|
-
result += _attr_details_or_dialog_open(scopeId, nodeAccessor, data.open, data.openChange);
|
|
2551
|
+
result += _attr_details_or_dialog_open(scopeId, nodeAccessor, data.open, data.openChange, 1);
|
|
2552
2552
|
skip = /^open(?:Change)?$|[\s/>"'=]/;
|
|
2553
2553
|
}
|
|
2554
2554
|
break;
|
|
@@ -2594,12 +2594,15 @@ function _attrs_partial_content(data, skip, nodeAccessor, scopeId, tagName, seri
|
|
|
2594
2594
|
_html(`${_attrs_partial(data, skip, nodeAccessor, scopeId, tagName)}>`);
|
|
2595
2595
|
_attr_content(nodeAccessor, scopeId, data?.content, serializeReason);
|
|
2596
2596
|
}
|
|
2597
|
-
function writeControlledScope(type, scopeId, nodeAccessor, value, valueChange) {
|
|
2597
|
+
function writeControlledScope(type, scopeId, nodeAccessor, value, valueChange, serializeType) {
|
|
2598
2598
|
assertHandlerIsFunction("valueChange", valueChange);
|
|
2599
|
-
writeScope(scopeId, {
|
|
2599
|
+
writeScope(scopeId, serializeType ? {
|
|
2600
2600
|
["ControlledType:" + nodeAccessor]: type,
|
|
2601
2601
|
["ControlledValue:" + nodeAccessor]: value,
|
|
2602
2602
|
["ControlledHandler:" + nodeAccessor]: valueChange
|
|
2603
|
+
} : {
|
|
2604
|
+
["ControlledValue:" + nodeAccessor]: value,
|
|
2605
|
+
["ControlledHandler:" + nodeAccessor]: valueChange
|
|
2603
2606
|
});
|
|
2604
2607
|
}
|
|
2605
2608
|
function stringAttr(name, value) {
|
|
@@ -2665,10 +2668,10 @@ let _dynamic_tag = (scopeId, accessor, tag, inputOrArgs, content, inputIsArgs, s
|
|
|
2665
2668
|
const renderContent = content || normalizeDynamicRenderer(input.content);
|
|
2666
2669
|
if (renderer === "textarea") {
|
|
2667
2670
|
if (renderContent) throw new Error("A dynamic tag rendering a `<textarea>` cannot have `content` and must use the `value` attribute instead.");
|
|
2668
|
-
_html(_attr_textarea_value(branchId, `#${renderer}/0`, input.value, input.valueChange));
|
|
2671
|
+
_html(_attr_textarea_value(branchId, `#${renderer}/0`, input.value, input.valueChange, 1));
|
|
2669
2672
|
} else if (renderContent) {
|
|
2670
2673
|
if (typeof renderContent !== "function") throw new Error(`Body content is not supported for the \`<${renderer}>\` tag.`);
|
|
2671
|
-
if (renderer === "select" && ("value" in input || "valueChange" in input)) _attr_select_value(branchId, `#${renderer}/0`, input.value, input.valueChange, renderContent);
|
|
2674
|
+
if (renderer === "select" && ("value" in input || "valueChange" in input)) _attr_select_value(branchId, `#${renderer}/0`, input.value, input.valueChange, renderContent, 1);
|
|
2672
2675
|
else _dynamic_tag(branchId, `#${renderer}/0`, renderContent, void 0, 0, void 0, serializeReason);
|
|
2673
2676
|
}
|
|
2674
2677
|
_html(`</${renderer}>`);
|
package/dist/debug/html.mjs
CHANGED
|
@@ -2473,29 +2473,29 @@ function _attr_option_value(value) {
|
|
|
2473
2473
|
}
|
|
2474
2474
|
const kSelectedValue = Symbol("selectedValue");
|
|
2475
2475
|
const kSelectedValueMatched = Symbol("selectedValueMatched");
|
|
2476
|
-
function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content) {
|
|
2477
|
-
if (valueChange) writeControlledScope(3, scopeId, nodeAccessor, void 0, valueChange);
|
|
2476
|
+
function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content, serializeType) {
|
|
2477
|
+
if (valueChange) writeControlledScope(3, scopeId, nodeAccessor, void 0, valueChange, serializeType);
|
|
2478
2478
|
if (content) if (valueChange) {
|
|
2479
2479
|
const matched = { value: false };
|
|
2480
2480
|
withContext(kSelectedValue, value, () => withContext(kSelectedValueMatched, matched, content));
|
|
2481
2481
|
if (!matched.value && (Array.isArray(value) ? value.some((v) => normalizeStrAttrValue(v) !== "") : normalizeStrAttrValue(value) !== "")) console.error("A controlled `<select>`'s `value` has no matching `<option>`:", value);
|
|
2482
2482
|
} else withContext(kSelectedValue, value, content);
|
|
2483
2483
|
}
|
|
2484
|
-
function _attr_textarea_value(scopeId, nodeAccessor, value, valueChange) {
|
|
2485
|
-
if (valueChange) writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange);
|
|
2484
|
+
function _attr_textarea_value(scopeId, nodeAccessor, value, valueChange, serializeType) {
|
|
2485
|
+
if (valueChange) writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange, serializeType);
|
|
2486
2486
|
return _escape(value);
|
|
2487
2487
|
}
|
|
2488
|
-
function _attr_input_value(scopeId, nodeAccessor, value, valueChange) {
|
|
2489
|
-
if (valueChange) writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange);
|
|
2488
|
+
function _attr_input_value(scopeId, nodeAccessor, value, valueChange, serializeType) {
|
|
2489
|
+
if (valueChange) writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange, serializeType);
|
|
2490
2490
|
return _attr("value", value);
|
|
2491
2491
|
}
|
|
2492
|
-
function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange) {
|
|
2493
|
-
if (checkedChange) writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange);
|
|
2492
|
+
function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange, serializeType) {
|
|
2493
|
+
if (checkedChange) writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange, serializeType);
|
|
2494
2494
|
return isNotVoid(checked) ? " checked" : "";
|
|
2495
2495
|
}
|
|
2496
|
-
function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value) {
|
|
2496
|
+
function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value, serializeType) {
|
|
2497
2497
|
const valueAttr = _attr("value", value);
|
|
2498
|
-
if (checkedValueChange) writeControlledScope(1, scopeId, nodeAccessor, getCheckedValueRef(checkedValue), checkedValueChange);
|
|
2498
|
+
if (checkedValueChange) writeControlledScope(1, scopeId, nodeAccessor, getCheckedValueRef(checkedValue), checkedValueChange, serializeType);
|
|
2499
2499
|
return normalizedValueMatches(checkedValue, value) ? valueAttr + " checked" : valueAttr;
|
|
2500
2500
|
}
|
|
2501
2501
|
const checkedValuesRefs = /* @__PURE__ */ new WeakMap();
|
|
@@ -2509,9 +2509,9 @@ function getCheckedValueRef(checkedValue) {
|
|
|
2509
2509
|
return ref;
|
|
2510
2510
|
}
|
|
2511
2511
|
}
|
|
2512
|
-
function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange) {
|
|
2512
|
+
function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange, serializeType) {
|
|
2513
2513
|
const normalizedOpen = isNotVoid(open);
|
|
2514
|
-
if (openChange) writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen || void 0, openChange);
|
|
2514
|
+
if (openChange) writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen || void 0, openChange, serializeType);
|
|
2515
2515
|
return normalizedOpen ? " open" : "";
|
|
2516
2516
|
}
|
|
2517
2517
|
function _attr_nonce() {
|
|
@@ -2527,9 +2527,9 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
|
|
|
2527
2527
|
switch (tagName) {
|
|
2528
2528
|
case "input":
|
|
2529
2529
|
assertExclusiveAttrs(data);
|
|
2530
|
-
if (data.checkedChange) result += _attr_input_checked(scopeId, nodeAccessor, data.checked, data.checkedChange);
|
|
2531
|
-
else if ("checkedValue" in data || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value);
|
|
2532
|
-
else if (data.valueChange) result += _attr_input_value(scopeId, nodeAccessor, data.value, data.valueChange);
|
|
2530
|
+
if (data.checkedChange) result += _attr_input_checked(scopeId, nodeAccessor, data.checked, data.checkedChange, 1);
|
|
2531
|
+
else if ("checkedValue" in data || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value, 1);
|
|
2532
|
+
else if (data.valueChange) result += _attr_input_value(scopeId, nodeAccessor, data.value, data.valueChange, 1);
|
|
2533
2533
|
else break;
|
|
2534
2534
|
skip = /^(?:value|checked(?:Value)?)(?:Change)?$|[\s/>"'=]/;
|
|
2535
2535
|
break;
|
|
@@ -2546,7 +2546,7 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
|
|
|
2546
2546
|
case "details":
|
|
2547
2547
|
case "dialog":
|
|
2548
2548
|
if (data.openChange) {
|
|
2549
|
-
result += _attr_details_or_dialog_open(scopeId, nodeAccessor, data.open, data.openChange);
|
|
2549
|
+
result += _attr_details_or_dialog_open(scopeId, nodeAccessor, data.open, data.openChange, 1);
|
|
2550
2550
|
skip = /^open(?:Change)?$|[\s/>"'=]/;
|
|
2551
2551
|
}
|
|
2552
2552
|
break;
|
|
@@ -2592,12 +2592,15 @@ function _attrs_partial_content(data, skip, nodeAccessor, scopeId, tagName, seri
|
|
|
2592
2592
|
_html(`${_attrs_partial(data, skip, nodeAccessor, scopeId, tagName)}>`);
|
|
2593
2593
|
_attr_content(nodeAccessor, scopeId, data?.content, serializeReason);
|
|
2594
2594
|
}
|
|
2595
|
-
function writeControlledScope(type, scopeId, nodeAccessor, value, valueChange) {
|
|
2595
|
+
function writeControlledScope(type, scopeId, nodeAccessor, value, valueChange, serializeType) {
|
|
2596
2596
|
assertHandlerIsFunction("valueChange", valueChange);
|
|
2597
|
-
writeScope(scopeId, {
|
|
2597
|
+
writeScope(scopeId, serializeType ? {
|
|
2598
2598
|
["ControlledType:" + nodeAccessor]: type,
|
|
2599
2599
|
["ControlledValue:" + nodeAccessor]: value,
|
|
2600
2600
|
["ControlledHandler:" + nodeAccessor]: valueChange
|
|
2601
|
+
} : {
|
|
2602
|
+
["ControlledValue:" + nodeAccessor]: value,
|
|
2603
|
+
["ControlledHandler:" + nodeAccessor]: valueChange
|
|
2601
2604
|
});
|
|
2602
2605
|
}
|
|
2603
2606
|
function stringAttr(name, value) {
|
|
@@ -2663,10 +2666,10 @@ let _dynamic_tag = (scopeId, accessor, tag, inputOrArgs, content, inputIsArgs, s
|
|
|
2663
2666
|
const renderContent = content || normalizeDynamicRenderer(input.content);
|
|
2664
2667
|
if (renderer === "textarea") {
|
|
2665
2668
|
if (renderContent) throw new Error("A dynamic tag rendering a `<textarea>` cannot have `content` and must use the `value` attribute instead.");
|
|
2666
|
-
_html(_attr_textarea_value(branchId, `#${renderer}/0`, input.value, input.valueChange));
|
|
2669
|
+
_html(_attr_textarea_value(branchId, `#${renderer}/0`, input.value, input.valueChange, 1));
|
|
2667
2670
|
} else if (renderContent) {
|
|
2668
2671
|
if (typeof renderContent !== "function") throw new Error(`Body content is not supported for the \`<${renderer}>\` tag.`);
|
|
2669
|
-
if (renderer === "select" && ("value" in input || "valueChange" in input)) _attr_select_value(branchId, `#${renderer}/0`, input.value, input.valueChange, renderContent);
|
|
2672
|
+
if (renderer === "select" && ("value" in input || "valueChange" in input)) _attr_select_value(branchId, `#${renderer}/0`, input.value, input.valueChange, renderContent, 1);
|
|
2670
2673
|
else _dynamic_tag(branchId, `#${renderer}/0`, renderContent, void 0, 0, void 0, serializeReason);
|
|
2671
2674
|
}
|
|
2672
2675
|
_html(`</${renderer}>`);
|
package/dist/dom/compat.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export declare const compat: {
|
|
|
10
10
|
setRendererId(renderer: any, id: unknown): void;
|
|
11
11
|
isRenderer(renderer: any): any;
|
|
12
12
|
getStartNode(branch: any): any;
|
|
13
|
+
getEndNode(branch: any): any;
|
|
13
14
|
setScopeNodes(branch: any, startNode: Node, endNode: Node): void;
|
|
14
15
|
runComponentEffects(this: any): void;
|
|
15
16
|
runComponentDestroy(this: any): void;
|
package/dist/dom/event.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
type EventNames = keyof GlobalEventHandlersEventMap;
|
|
2
2
|
export declare function _on<T extends EventNames, H extends false | null | undefined | ((ev: GlobalEventHandlersEventMap[T], target: Element) => void)>(element: Element, type: T, handler: H): void;
|
|
3
|
-
export declare
|
|
3
|
+
export declare const delegate: (type: string, handler: EventListener) => any;
|
|
4
4
|
export {};
|
package/dist/dom.js
CHANGED
|
@@ -4,7 +4,7 @@ let empty = [], rest = Symbol(), toDelimitedString = function toDelimitedString(
|
|
|
4
4
|
else if (Array.isArray(val)) for (let v of val) part = toDelimitedString(v, delimiter, stringify), part && (str += sep + part, sep = delimiter);
|
|
5
5
|
else for (let name in val) part = stringify(name, val[name]), part && (str += sep + part, sep = delimiter);
|
|
6
6
|
return str;
|
|
7
|
-
}, decodeAccessor = (num) => (num + (num < 26 ? 10 : num < 962 ? 334 : 11998)).toString(36),
|
|
7
|
+
}, decodeAccessor = (num) => (num + (num < 26 ? 10 : num < 962 ? 334 : 11998)).toString(36), delegate = (type, handler) => handler[type] ||= (document.addEventListener(type, handler, !0), 1), R = /[^\p{L}\p{N}]/gu, parsers = {}, nextScopeId = 1e6, collectingScopes, destroyNestedScopes = function destroyNestedScopes(scope) {
|
|
8
8
|
scope.H = 0, scope.D?.forEach(destroyNestedScopes), scope.B?.forEach(resetControllers);
|
|
9
9
|
}, isScheduled, channel, _return = (scope, value) => scope.T?.(value), _var_change = (scope, value) => scope.U?.(value), tagIdsByGlobal = /* @__PURE__ */ new WeakMap(), walker = /* @__PURE__ */ document.createTreeWalker(document), walkInternal = function walkInternal(currentWalkIndex, walkCodes, scope) {
|
|
10
10
|
let value, currentMultiplier, storedMultiplier = 0, currentScopeIndex = 0;
|
|
@@ -20,7 +20,7 @@ let empty = [], rest = Symbol(), toDelimitedString = function toDelimitedString(
|
|
|
20
20
|
for (value = 10 * currentMultiplier + value - 107; value--;) walker.parentNode();
|
|
21
21
|
walker.nextSibling();
|
|
22
22
|
} else storedMultiplier = currentMultiplier * 10 + value - 117;
|
|
23
|
-
}, cloneCache = {}, registeredValues = {}, curRenders, branchesEnabled, embedRenders, readyIds, isResuming, inputType = "",
|
|
23
|
+
}, cloneCache = {}, registeredValues = {}, curRenders, branchesEnabled, embedRenders, readyIds, isResuming, inputType = "", _dynamic_tag = function(nodeAccessor, getContent, getTagVar, inputIsArgs) {
|
|
24
24
|
nodeAccessor = decodeAccessor(nodeAccessor);
|
|
25
25
|
let childScopeAccessor = "A" + nodeAccessor, rendererAccessor = "D" + nodeAccessor;
|
|
26
26
|
return enableBranches(), (scope, newRenderer, getInput) => {
|
|
@@ -74,6 +74,9 @@ let empty = [], rest = Symbol(), toDelimitedString = function toDelimitedString(
|
|
|
74
74
|
getStartNode(branch) {
|
|
75
75
|
return branch.S;
|
|
76
76
|
},
|
|
77
|
+
getEndNode(branch) {
|
|
78
|
+
return branch.K;
|
|
79
|
+
},
|
|
77
80
|
setScopeNodes(branch, startNode, endNode) {
|
|
78
81
|
branch.S = startNode, branch.K = endNode;
|
|
79
82
|
},
|
|
@@ -179,14 +182,7 @@ function push(opt, item) {
|
|
|
179
182
|
//#endregion
|
|
180
183
|
//#region src/dom/event.ts
|
|
181
184
|
function _on(element, type, handler) {
|
|
182
|
-
element["$" + type] === void 0 &&
|
|
183
|
-
}
|
|
184
|
-
/* @__NO_SIDE_EFFECTS__ */
|
|
185
|
-
function createDelegator() {
|
|
186
|
-
let kEvents = Symbol();
|
|
187
|
-
return function(node, type, handler) {
|
|
188
|
-
((node = node.getRootNode())[kEvents] ||= {})[type] ||= (node.addEventListener(type, handler, !0), 1);
|
|
189
|
-
};
|
|
185
|
+
element["$" + type] === void 0 && delegate(type, handleDelegated), element["$" + type] = handler || null;
|
|
190
186
|
}
|
|
191
187
|
function handleDelegated(ev) {
|
|
192
188
|
let target = !rendering && ev.target;
|
|
@@ -574,7 +570,7 @@ function _attr_input_checkedValue_script(scope, nodeAccessor) {
|
|
|
574
570
|
let checkedValueChange = scope["E" + nodeAccessor];
|
|
575
571
|
if (checkedValueChange) {
|
|
576
572
|
let oldValue = scope["G" + nodeAccessor], newValue = Array.isArray(oldValue) ? updateList(oldValue, el.value, el.checked) : el.checked ? el.value : void 0;
|
|
577
|
-
if (el.name && el.type[0] === "r") for (let radio of
|
|
573
|
+
if (el.name && el.type[0] === "r") for (let radio of document.querySelectorAll(`[type=radio][name=${CSS.escape(el.name)}]`)) radio.form === el.form && (radio.checked = Array.isArray(oldValue) ? oldValue.includes(radio.value) : oldValue === radio.value);
|
|
578
574
|
else el.checked = !el.checked;
|
|
579
575
|
checkedValueChange(newValue), run();
|
|
580
576
|
}
|
|
@@ -600,7 +596,7 @@ function _attr_input_value_script(scope, nodeAccessor) {
|
|
|
600
596
|
}
|
|
601
597
|
function setInputValue(el, value) {
|
|
602
598
|
if (el.value !== value) {
|
|
603
|
-
let updatedPosition = resolveCursorPosition(inputType,
|
|
599
|
+
let updatedPosition = resolveCursorPosition(inputType, document.activeElement === el && el.selectionStart, el.value, el.value = value);
|
|
604
600
|
~updatedPosition && el.setSelectionRange(updatedPosition, updatedPosition);
|
|
605
601
|
}
|
|
606
602
|
}
|
|
@@ -672,7 +668,7 @@ function _attr_details_or_dialog_open_script(scope, nodeAccessor) {
|
|
|
672
668
|
});
|
|
673
669
|
}
|
|
674
670
|
function syncControllableFormInput(el, hasChanged, onChange) {
|
|
675
|
-
el._ = onChange,
|
|
671
|
+
el._ = onChange, delegate("input", handleChange), el.form && delegate("reset", handleFormReset), isResuming && hasChanged(el) && queueMicrotask(onChange);
|
|
676
672
|
}
|
|
677
673
|
function handleChange(ev) {
|
|
678
674
|
ev.target._?.(ev);
|
package/dist/dom.mjs
CHANGED
|
@@ -4,7 +4,7 @@ let empty = [], rest = Symbol(), toDelimitedString = function toDelimitedString(
|
|
|
4
4
|
else if (Array.isArray(val)) for (let v of val) part = toDelimitedString(v, delimiter, stringify), part && (str += sep + part, sep = delimiter);
|
|
5
5
|
else for (let name in val) part = stringify(name, val[name]), part && (str += sep + part, sep = delimiter);
|
|
6
6
|
return str;
|
|
7
|
-
}, decodeAccessor = (num) => (num + (num < 26 ? 10 : num < 962 ? 334 : 11998)).toString(36),
|
|
7
|
+
}, decodeAccessor = (num) => (num + (num < 26 ? 10 : num < 962 ? 334 : 11998)).toString(36), delegate = (type, handler) => handler[type] ||= (document.addEventListener(type, handler, !0), 1), R = /[^\p{L}\p{N}]/gu, parsers = {}, nextScopeId = 1e6, collectingScopes, destroyNestedScopes = function destroyNestedScopes(scope) {
|
|
8
8
|
scope.H = 0, scope.D?.forEach(destroyNestedScopes), scope.B?.forEach(resetControllers);
|
|
9
9
|
}, isScheduled, channel, _return = (scope, value) => scope.T?.(value), _var_change = (scope, value) => scope.U?.(value), tagIdsByGlobal = /* @__PURE__ */ new WeakMap(), walker = /* @__PURE__ */ document.createTreeWalker(document), walkInternal = function walkInternal(currentWalkIndex, walkCodes, scope) {
|
|
10
10
|
let value, currentMultiplier, storedMultiplier = 0, currentScopeIndex = 0;
|
|
@@ -20,7 +20,7 @@ let empty = [], rest = Symbol(), toDelimitedString = function toDelimitedString(
|
|
|
20
20
|
for (value = 10 * currentMultiplier + value - 107; value--;) walker.parentNode();
|
|
21
21
|
walker.nextSibling();
|
|
22
22
|
} else storedMultiplier = currentMultiplier * 10 + value - 117;
|
|
23
|
-
}, cloneCache = {}, registeredValues = {}, curRenders, branchesEnabled, embedRenders, readyIds, isResuming, inputType = "",
|
|
23
|
+
}, cloneCache = {}, registeredValues = {}, curRenders, branchesEnabled, embedRenders, readyIds, isResuming, inputType = "", _dynamic_tag = function(nodeAccessor, getContent, getTagVar, inputIsArgs) {
|
|
24
24
|
nodeAccessor = decodeAccessor(nodeAccessor);
|
|
25
25
|
let childScopeAccessor = "A" + nodeAccessor, rendererAccessor = "D" + nodeAccessor;
|
|
26
26
|
return enableBranches(), (scope, newRenderer, getInput) => {
|
|
@@ -74,6 +74,9 @@ let empty = [], rest = Symbol(), toDelimitedString = function toDelimitedString(
|
|
|
74
74
|
getStartNode(branch) {
|
|
75
75
|
return branch.S;
|
|
76
76
|
},
|
|
77
|
+
getEndNode(branch) {
|
|
78
|
+
return branch.K;
|
|
79
|
+
},
|
|
77
80
|
setScopeNodes(branch, startNode, endNode) {
|
|
78
81
|
branch.S = startNode, branch.K = endNode;
|
|
79
82
|
},
|
|
@@ -178,14 +181,7 @@ function push(opt, item) {
|
|
|
178
181
|
//#endregion
|
|
179
182
|
//#region src/dom/event.ts
|
|
180
183
|
function _on(element, type, handler) {
|
|
181
|
-
element["$" + type] === void 0 &&
|
|
182
|
-
}
|
|
183
|
-
/* @__NO_SIDE_EFFECTS__ */
|
|
184
|
-
function createDelegator() {
|
|
185
|
-
let kEvents = Symbol();
|
|
186
|
-
return function(node, type, handler) {
|
|
187
|
-
((node = node.getRootNode())[kEvents] ||= {})[type] ||= (node.addEventListener(type, handler, !0), 1);
|
|
188
|
-
};
|
|
184
|
+
element["$" + type] === void 0 && delegate(type, handleDelegated), element["$" + type] = handler || null;
|
|
189
185
|
}
|
|
190
186
|
function handleDelegated(ev) {
|
|
191
187
|
let target = !rendering && ev.target;
|
|
@@ -573,7 +569,7 @@ function _attr_input_checkedValue_script(scope, nodeAccessor) {
|
|
|
573
569
|
let checkedValueChange = scope["E" + nodeAccessor];
|
|
574
570
|
if (checkedValueChange) {
|
|
575
571
|
let oldValue = scope["G" + nodeAccessor], newValue = Array.isArray(oldValue) ? updateList(oldValue, el.value, el.checked) : el.checked ? el.value : void 0;
|
|
576
|
-
if (el.name && el.type[0] === "r") for (let radio of
|
|
572
|
+
if (el.name && el.type[0] === "r") for (let radio of document.querySelectorAll(`[type=radio][name=${CSS.escape(el.name)}]`)) radio.form === el.form && (radio.checked = Array.isArray(oldValue) ? oldValue.includes(radio.value) : oldValue === radio.value);
|
|
577
573
|
else el.checked = !el.checked;
|
|
578
574
|
checkedValueChange(newValue), run();
|
|
579
575
|
}
|
|
@@ -599,7 +595,7 @@ function _attr_input_value_script(scope, nodeAccessor) {
|
|
|
599
595
|
}
|
|
600
596
|
function setInputValue(el, value) {
|
|
601
597
|
if (el.value !== value) {
|
|
602
|
-
let updatedPosition = resolveCursorPosition(inputType,
|
|
598
|
+
let updatedPosition = resolveCursorPosition(inputType, document.activeElement === el && el.selectionStart, el.value, el.value = value);
|
|
603
599
|
~updatedPosition && el.setSelectionRange(updatedPosition, updatedPosition);
|
|
604
600
|
}
|
|
605
601
|
}
|
|
@@ -671,7 +667,7 @@ function _attr_details_or_dialog_open_script(scope, nodeAccessor) {
|
|
|
671
667
|
});
|
|
672
668
|
}
|
|
673
669
|
function syncControllableFormInput(el, hasChanged, onChange) {
|
|
674
|
-
el._ = onChange,
|
|
670
|
+
el._ = onChange, delegate("input", handleChange), el.form && delegate("reset", handleFormReset), isResuming && hasChanged(el) && queueMicrotask(onChange);
|
|
675
671
|
}
|
|
676
672
|
function handleChange(ev) {
|
|
677
673
|
ev.target._?.(ev);
|
package/dist/html/attrs.d.ts
CHANGED
|
@@ -2,12 +2,12 @@ import { type Accessor } from "../common/types";
|
|
|
2
2
|
export declare function _attr_class(value: unknown): string;
|
|
3
3
|
export declare function _attr_style(value: unknown): string;
|
|
4
4
|
export declare function _attr_option_value(value: unknown): string;
|
|
5
|
-
export declare function _attr_select_value(scopeId: number, nodeAccessor: Accessor, value: unknown, valueChange: unknown, content?: () => void): void;
|
|
6
|
-
export declare function _attr_textarea_value(scopeId: number, nodeAccessor: Accessor, value: unknown, valueChange: unknown): string;
|
|
7
|
-
export declare function _attr_input_value(scopeId: number, nodeAccessor: Accessor, value: unknown, valueChange: unknown): string;
|
|
8
|
-
export declare function _attr_input_checked(scopeId: number, nodeAccessor: Accessor, checked: unknown, checkedChange: unknown): "" | " checked";
|
|
9
|
-
export declare function _attr_input_checkedValue(scopeId: number, nodeAccessor: Accessor, checkedValue: unknown, checkedValueChange: unknown, value: unknown): string;
|
|
10
|
-
export declare function _attr_details_or_dialog_open(scopeId: number, nodeAccessor: Accessor, open: unknown, openChange: unknown): "" | " open";
|
|
5
|
+
export declare function _attr_select_value(scopeId: number, nodeAccessor: Accessor, value: unknown, valueChange: unknown, content?: () => void, serializeType?: 1): void;
|
|
6
|
+
export declare function _attr_textarea_value(scopeId: number, nodeAccessor: Accessor, value: unknown, valueChange: unknown, serializeType?: 1): string;
|
|
7
|
+
export declare function _attr_input_value(scopeId: number, nodeAccessor: Accessor, value: unknown, valueChange: unknown, serializeType?: 1): string;
|
|
8
|
+
export declare function _attr_input_checked(scopeId: number, nodeAccessor: Accessor, checked: unknown, checkedChange: unknown, serializeType?: 1): "" | " checked";
|
|
9
|
+
export declare function _attr_input_checkedValue(scopeId: number, nodeAccessor: Accessor, checkedValue: unknown, checkedValueChange: unknown, value: unknown, serializeType?: 1): string;
|
|
10
|
+
export declare function _attr_details_or_dialog_open(scopeId: number, nodeAccessor: Accessor, open: unknown, openChange: unknown, serializeType?: 1): "" | " open";
|
|
11
11
|
export declare function _attr_nonce(): string;
|
|
12
12
|
export declare function _attr(name: string, value: unknown): string;
|
|
13
13
|
export declare function _attrs(data: Record<string, unknown>, nodeAccessor: Accessor, scopeId: number, tagName: string): string;
|
package/dist/html.js
CHANGED
|
@@ -247,10 +247,10 @@ let empty = [], rest = Symbol(), toDelimitedString = function toDelimitedString(
|
|
|
247
247
|
let input = (inputIsArgs ? inputOrArgs[0] : inputOrArgs) || {};
|
|
248
248
|
if (rendered = !0, _scope_id(), _html(`<${renderer}${_attrs(input, "a", branchId, renderer)}>`), !voidElementsReg.test(renderer)) {
|
|
249
249
|
let renderContent = content || normalizeDynamicRenderer(input.content);
|
|
250
|
-
if (renderer === "textarea") _html(_attr_textarea_value(branchId, "a", input.value, input.valueChange));
|
|
250
|
+
if (renderer === "textarea") _html(_attr_textarea_value(branchId, "a", input.value, input.valueChange, 1));
|
|
251
251
|
else if (renderContent) {
|
|
252
252
|
if (typeof renderContent != "function") throw Error(`Body content is not supported for the \`<${renderer}>\` tag.`);
|
|
253
|
-
renderer === "select" && ("value" in input || "valueChange" in input) ? _attr_select_value(branchId, "a", input.value, input.valueChange, renderContent) : _dynamic_tag(branchId, "a", renderContent, void 0, 0, void 0, serializeReason);
|
|
253
|
+
renderer === "select" && ("value" in input || "valueChange" in input) ? _attr_select_value(branchId, "a", input.value, input.valueChange, renderContent, 1) : _dynamic_tag(branchId, "a", renderContent, void 0, 0, void 0, serializeReason);
|
|
254
254
|
}
|
|
255
255
|
_html(`</${renderer}>`);
|
|
256
256
|
}
|
|
@@ -1614,21 +1614,21 @@ function _attr_option_value(value) {
|
|
|
1614
1614
|
let valueAttr = _attr("value", value);
|
|
1615
1615
|
return normalizedValueMatches(getContext(kSelectedValue), value) ? valueAttr + " selected" : valueAttr;
|
|
1616
1616
|
}
|
|
1617
|
-
function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content) {
|
|
1618
|
-
valueChange && writeControlledScope(3, scopeId, nodeAccessor, void 0, valueChange), content && withContext(kSelectedValue, value, content);
|
|
1617
|
+
function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content, serializeType) {
|
|
1618
|
+
valueChange && writeControlledScope(3, scopeId, nodeAccessor, void 0, valueChange, serializeType), content && withContext(kSelectedValue, value, content);
|
|
1619
1619
|
}
|
|
1620
|
-
function _attr_textarea_value(scopeId, nodeAccessor, value, valueChange) {
|
|
1621
|
-
return valueChange && writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange), _escape(value);
|
|
1620
|
+
function _attr_textarea_value(scopeId, nodeAccessor, value, valueChange, serializeType) {
|
|
1621
|
+
return valueChange && writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange, serializeType), _escape(value);
|
|
1622
1622
|
}
|
|
1623
|
-
function _attr_input_value(scopeId, nodeAccessor, value, valueChange) {
|
|
1624
|
-
return valueChange && writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange), _attr("value", value);
|
|
1623
|
+
function _attr_input_value(scopeId, nodeAccessor, value, valueChange, serializeType) {
|
|
1624
|
+
return valueChange && writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange, serializeType), _attr("value", value);
|
|
1625
1625
|
}
|
|
1626
|
-
function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange) {
|
|
1627
|
-
return checkedChange && writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange), isNotVoid(checked) ? " checked" : "";
|
|
1626
|
+
function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange, serializeType) {
|
|
1627
|
+
return checkedChange && writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange, serializeType), isNotVoid(checked) ? " checked" : "";
|
|
1628
1628
|
}
|
|
1629
|
-
function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value) {
|
|
1629
|
+
function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value, serializeType) {
|
|
1630
1630
|
let valueAttr = _attr("value", value);
|
|
1631
|
-
return checkedValueChange && writeControlledScope(1, scopeId, nodeAccessor, getCheckedValueRef(checkedValue), checkedValueChange), normalizedValueMatches(checkedValue, value) ? valueAttr + " checked" : valueAttr;
|
|
1631
|
+
return checkedValueChange && writeControlledScope(1, scopeId, nodeAccessor, getCheckedValueRef(checkedValue), checkedValueChange, serializeType), normalizedValueMatches(checkedValue, value) ? valueAttr + " checked" : valueAttr;
|
|
1632
1632
|
}
|
|
1633
1633
|
function getCheckedValueRef(checkedValue) {
|
|
1634
1634
|
if (Array.isArray(checkedValue)) {
|
|
@@ -1636,9 +1636,9 @@ function getCheckedValueRef(checkedValue) {
|
|
|
1636
1636
|
return ref || (ref = [], checkedValuesRefs.set(checkedValue, ref)), ref;
|
|
1637
1637
|
}
|
|
1638
1638
|
}
|
|
1639
|
-
function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange) {
|
|
1639
|
+
function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange, serializeType) {
|
|
1640
1640
|
let normalizedOpen = isNotVoid(open);
|
|
1641
|
-
return openChange && writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen || void 0, openChange), normalizedOpen ? " open" : "";
|
|
1641
|
+
return openChange && writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen || void 0, openChange, serializeType), normalizedOpen ? " open" : "";
|
|
1642
1642
|
}
|
|
1643
1643
|
function _attr_nonce() {
|
|
1644
1644
|
return getChunk().boundary.state.nonceAttr;
|
|
@@ -1650,9 +1650,9 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
|
|
|
1650
1650
|
let result = "", skip = /[\s/>"'=]/, events;
|
|
1651
1651
|
switch (tagName) {
|
|
1652
1652
|
case "input":
|
|
1653
|
-
if (data.checkedChange) result += _attr_input_checked(scopeId, nodeAccessor, data.checked, data.checkedChange);
|
|
1654
|
-
else if ("checkedValue" in data || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value);
|
|
1655
|
-
else if (data.valueChange) result += _attr_input_value(scopeId, nodeAccessor, data.value, data.valueChange);
|
|
1653
|
+
if (data.checkedChange) result += _attr_input_checked(scopeId, nodeAccessor, data.checked, data.checkedChange, 1);
|
|
1654
|
+
else if ("checkedValue" in data || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value, 1);
|
|
1655
|
+
else if (data.valueChange) result += _attr_input_value(scopeId, nodeAccessor, data.value, data.valueChange, 1);
|
|
1656
1656
|
else break;
|
|
1657
1657
|
skip = /^(?:value|checked(?:Value)?)(?:Change)?$|[\s/>"'=]/;
|
|
1658
1658
|
break;
|
|
@@ -1665,7 +1665,7 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
|
|
|
1665
1665
|
break;
|
|
1666
1666
|
case "details":
|
|
1667
1667
|
case "dialog":
|
|
1668
|
-
data.openChange && (result += _attr_details_or_dialog_open(scopeId, nodeAccessor, data.open, data.openChange), skip = /^open(?:Change)?$|[\s/>"'=]/);
|
|
1668
|
+
data.openChange && (result += _attr_details_or_dialog_open(scopeId, nodeAccessor, data.open, data.openChange, 1), skip = /^open(?:Change)?$|[\s/>"'=]/);
|
|
1669
1669
|
break;
|
|
1670
1670
|
}
|
|
1671
1671
|
for (let name in data) {
|
|
@@ -1698,11 +1698,14 @@ function _attrs_partial(data, skip, nodeAccessor, scopeId, tagName) {
|
|
|
1698
1698
|
function _attrs_partial_content(data, skip, nodeAccessor, scopeId, tagName, serializeReason) {
|
|
1699
1699
|
_html(`${_attrs_partial(data, skip, nodeAccessor, scopeId, tagName)}>`), _attr_content(nodeAccessor, scopeId, data?.content, serializeReason);
|
|
1700
1700
|
}
|
|
1701
|
-
function writeControlledScope(type, scopeId, nodeAccessor, value, valueChange) {
|
|
1702
|
-
writeScope(scopeId, {
|
|
1701
|
+
function writeControlledScope(type, scopeId, nodeAccessor, value, valueChange, serializeType) {
|
|
1702
|
+
writeScope(scopeId, serializeType ? {
|
|
1703
1703
|
["F" + nodeAccessor]: type,
|
|
1704
1704
|
["G" + nodeAccessor]: value,
|
|
1705
1705
|
["E" + nodeAccessor]: valueChange
|
|
1706
|
+
} : {
|
|
1707
|
+
["G" + nodeAccessor]: value,
|
|
1708
|
+
["E" + nodeAccessor]: valueChange
|
|
1706
1709
|
});
|
|
1707
1710
|
}
|
|
1708
1711
|
function stringAttr(name, value) {
|
package/dist/html.mjs
CHANGED
|
@@ -247,10 +247,10 @@ let empty = [], rest = Symbol(), toDelimitedString = function toDelimitedString(
|
|
|
247
247
|
let input = (inputIsArgs ? inputOrArgs[0] : inputOrArgs) || {};
|
|
248
248
|
if (rendered = !0, _scope_id(), _html(`<${renderer}${_attrs(input, "a", branchId, renderer)}>`), !voidElementsReg.test(renderer)) {
|
|
249
249
|
let renderContent = content || normalizeDynamicRenderer(input.content);
|
|
250
|
-
if (renderer === "textarea") _html(_attr_textarea_value(branchId, "a", input.value, input.valueChange));
|
|
250
|
+
if (renderer === "textarea") _html(_attr_textarea_value(branchId, "a", input.value, input.valueChange, 1));
|
|
251
251
|
else if (renderContent) {
|
|
252
252
|
if (typeof renderContent != "function") throw Error(`Body content is not supported for the \`<${renderer}>\` tag.`);
|
|
253
|
-
renderer === "select" && ("value" in input || "valueChange" in input) ? _attr_select_value(branchId, "a", input.value, input.valueChange, renderContent) : _dynamic_tag(branchId, "a", renderContent, void 0, 0, void 0, serializeReason);
|
|
253
|
+
renderer === "select" && ("value" in input || "valueChange" in input) ? _attr_select_value(branchId, "a", input.value, input.valueChange, renderContent, 1) : _dynamic_tag(branchId, "a", renderContent, void 0, 0, void 0, serializeReason);
|
|
254
254
|
}
|
|
255
255
|
_html(`</${renderer}>`);
|
|
256
256
|
}
|
|
@@ -1613,21 +1613,21 @@ function _attr_option_value(value) {
|
|
|
1613
1613
|
let valueAttr = _attr("value", value);
|
|
1614
1614
|
return normalizedValueMatches(getContext(kSelectedValue), value) ? valueAttr + " selected" : valueAttr;
|
|
1615
1615
|
}
|
|
1616
|
-
function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content) {
|
|
1617
|
-
valueChange && writeControlledScope(3, scopeId, nodeAccessor, void 0, valueChange), content && withContext(kSelectedValue, value, content);
|
|
1616
|
+
function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content, serializeType) {
|
|
1617
|
+
valueChange && writeControlledScope(3, scopeId, nodeAccessor, void 0, valueChange, serializeType), content && withContext(kSelectedValue, value, content);
|
|
1618
1618
|
}
|
|
1619
|
-
function _attr_textarea_value(scopeId, nodeAccessor, value, valueChange) {
|
|
1620
|
-
return valueChange && writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange), _escape(value);
|
|
1619
|
+
function _attr_textarea_value(scopeId, nodeAccessor, value, valueChange, serializeType) {
|
|
1620
|
+
return valueChange && writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange, serializeType), _escape(value);
|
|
1621
1621
|
}
|
|
1622
|
-
function _attr_input_value(scopeId, nodeAccessor, value, valueChange) {
|
|
1623
|
-
return valueChange && writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange), _attr("value", value);
|
|
1622
|
+
function _attr_input_value(scopeId, nodeAccessor, value, valueChange, serializeType) {
|
|
1623
|
+
return valueChange && writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange, serializeType), _attr("value", value);
|
|
1624
1624
|
}
|
|
1625
|
-
function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange) {
|
|
1626
|
-
return checkedChange && writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange), isNotVoid(checked) ? " checked" : "";
|
|
1625
|
+
function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange, serializeType) {
|
|
1626
|
+
return checkedChange && writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange, serializeType), isNotVoid(checked) ? " checked" : "";
|
|
1627
1627
|
}
|
|
1628
|
-
function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value) {
|
|
1628
|
+
function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value, serializeType) {
|
|
1629
1629
|
let valueAttr = _attr("value", value);
|
|
1630
|
-
return checkedValueChange && writeControlledScope(1, scopeId, nodeAccessor, getCheckedValueRef(checkedValue), checkedValueChange), normalizedValueMatches(checkedValue, value) ? valueAttr + " checked" : valueAttr;
|
|
1630
|
+
return checkedValueChange && writeControlledScope(1, scopeId, nodeAccessor, getCheckedValueRef(checkedValue), checkedValueChange, serializeType), normalizedValueMatches(checkedValue, value) ? valueAttr + " checked" : valueAttr;
|
|
1631
1631
|
}
|
|
1632
1632
|
function getCheckedValueRef(checkedValue) {
|
|
1633
1633
|
if (Array.isArray(checkedValue)) {
|
|
@@ -1635,9 +1635,9 @@ function getCheckedValueRef(checkedValue) {
|
|
|
1635
1635
|
return ref || (ref = [], checkedValuesRefs.set(checkedValue, ref)), ref;
|
|
1636
1636
|
}
|
|
1637
1637
|
}
|
|
1638
|
-
function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange) {
|
|
1638
|
+
function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange, serializeType) {
|
|
1639
1639
|
let normalizedOpen = isNotVoid(open);
|
|
1640
|
-
return openChange && writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen || void 0, openChange), normalizedOpen ? " open" : "";
|
|
1640
|
+
return openChange && writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen || void 0, openChange, serializeType), normalizedOpen ? " open" : "";
|
|
1641
1641
|
}
|
|
1642
1642
|
function _attr_nonce() {
|
|
1643
1643
|
return getChunk().boundary.state.nonceAttr;
|
|
@@ -1649,9 +1649,9 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
|
|
|
1649
1649
|
let result = "", skip = /[\s/>"'=]/, events;
|
|
1650
1650
|
switch (tagName) {
|
|
1651
1651
|
case "input":
|
|
1652
|
-
if (data.checkedChange) result += _attr_input_checked(scopeId, nodeAccessor, data.checked, data.checkedChange);
|
|
1653
|
-
else if ("checkedValue" in data || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value);
|
|
1654
|
-
else if (data.valueChange) result += _attr_input_value(scopeId, nodeAccessor, data.value, data.valueChange);
|
|
1652
|
+
if (data.checkedChange) result += _attr_input_checked(scopeId, nodeAccessor, data.checked, data.checkedChange, 1);
|
|
1653
|
+
else if ("checkedValue" in data || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value, 1);
|
|
1654
|
+
else if (data.valueChange) result += _attr_input_value(scopeId, nodeAccessor, data.value, data.valueChange, 1);
|
|
1655
1655
|
else break;
|
|
1656
1656
|
skip = /^(?:value|checked(?:Value)?)(?:Change)?$|[\s/>"'=]/;
|
|
1657
1657
|
break;
|
|
@@ -1664,7 +1664,7 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
|
|
|
1664
1664
|
break;
|
|
1665
1665
|
case "details":
|
|
1666
1666
|
case "dialog":
|
|
1667
|
-
data.openChange && (result += _attr_details_or_dialog_open(scopeId, nodeAccessor, data.open, data.openChange), skip = /^open(?:Change)?$|[\s/>"'=]/);
|
|
1667
|
+
data.openChange && (result += _attr_details_or_dialog_open(scopeId, nodeAccessor, data.open, data.openChange, 1), skip = /^open(?:Change)?$|[\s/>"'=]/);
|
|
1668
1668
|
break;
|
|
1669
1669
|
}
|
|
1670
1670
|
for (let name in data) {
|
|
@@ -1697,11 +1697,14 @@ function _attrs_partial(data, skip, nodeAccessor, scopeId, tagName) {
|
|
|
1697
1697
|
function _attrs_partial_content(data, skip, nodeAccessor, scopeId, tagName, serializeReason) {
|
|
1698
1698
|
_html(`${_attrs_partial(data, skip, nodeAccessor, scopeId, tagName)}>`), _attr_content(nodeAccessor, scopeId, data?.content, serializeReason);
|
|
1699
1699
|
}
|
|
1700
|
-
function writeControlledScope(type, scopeId, nodeAccessor, value, valueChange) {
|
|
1701
|
-
writeScope(scopeId, {
|
|
1700
|
+
function writeControlledScope(type, scopeId, nodeAccessor, value, valueChange, serializeType) {
|
|
1701
|
+
writeScope(scopeId, serializeType ? {
|
|
1702
1702
|
["F" + nodeAccessor]: type,
|
|
1703
1703
|
["G" + nodeAccessor]: value,
|
|
1704
1704
|
["E" + nodeAccessor]: valueChange
|
|
1705
|
+
} : {
|
|
1706
|
+
["G" + nodeAccessor]: value,
|
|
1707
|
+
["E" + nodeAccessor]: valueChange
|
|
1705
1708
|
});
|
|
1706
1709
|
}
|
|
1707
1710
|
function stringAttr(name, value) {
|
package/dist/translator/index.js
CHANGED
|
@@ -1348,7 +1348,6 @@ function analyzeTagNameType(tag, allowDynamic) {
|
|
|
1348
1348
|
extra.tagNameType = 2;
|
|
1349
1349
|
extra.tagNameDynamic = true;
|
|
1350
1350
|
extra.featureType = "class";
|
|
1351
|
-
((0, _marko_compiler_babel_utils.getProgram)().node.extra ??= {}).needsCompat = true;
|
|
1352
1351
|
} else if (!childFile) {
|
|
1353
1352
|
extra.tagNameType = 2;
|
|
1354
1353
|
extra.tagNameDynamic = true;
|
|
@@ -2018,25 +2017,25 @@ function _attr_option_value(value) {
|
|
|
2018
2017
|
return valueAttr;
|
|
2019
2018
|
}
|
|
2020
2019
|
const kSelectedValue = Symbol("selectedValue");
|
|
2021
|
-
function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content) {
|
|
2022
|
-
if (valueChange) writeControlledScope(3, scopeId, nodeAccessor, void 0, valueChange);
|
|
2020
|
+
function _attr_select_value(scopeId, nodeAccessor, value, valueChange, content, serializeType) {
|
|
2021
|
+
if (valueChange) writeControlledScope(3, scopeId, nodeAccessor, void 0, valueChange, serializeType);
|
|
2023
2022
|
if (content) withContext(kSelectedValue, value, content);
|
|
2024
2023
|
}
|
|
2025
|
-
function _attr_textarea_value(scopeId, nodeAccessor, value, valueChange) {
|
|
2026
|
-
if (valueChange) writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange);
|
|
2024
|
+
function _attr_textarea_value(scopeId, nodeAccessor, value, valueChange, serializeType) {
|
|
2025
|
+
if (valueChange) writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange, serializeType);
|
|
2027
2026
|
return _escape(value);
|
|
2028
2027
|
}
|
|
2029
|
-
function _attr_input_value(scopeId, nodeAccessor, value, valueChange) {
|
|
2030
|
-
if (valueChange) writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange);
|
|
2028
|
+
function _attr_input_value(scopeId, nodeAccessor, value, valueChange, serializeType) {
|
|
2029
|
+
if (valueChange) writeControlledScope(2, scopeId, nodeAccessor, void 0, valueChange, serializeType);
|
|
2031
2030
|
return _attr("value", value);
|
|
2032
2031
|
}
|
|
2033
|
-
function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange) {
|
|
2034
|
-
if (checkedChange) writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange);
|
|
2032
|
+
function _attr_input_checked(scopeId, nodeAccessor, checked, checkedChange, serializeType) {
|
|
2033
|
+
if (checkedChange) writeControlledScope(0, scopeId, nodeAccessor, void 0, checkedChange, serializeType);
|
|
2035
2034
|
return isNotVoid(checked) ? " checked" : "";
|
|
2036
2035
|
}
|
|
2037
|
-
function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value) {
|
|
2036
|
+
function _attr_input_checkedValue(scopeId, nodeAccessor, checkedValue, checkedValueChange, value, serializeType) {
|
|
2038
2037
|
const valueAttr = _attr("value", value);
|
|
2039
|
-
if (checkedValueChange) writeControlledScope(1, scopeId, nodeAccessor, getCheckedValueRef(checkedValue), checkedValueChange);
|
|
2038
|
+
if (checkedValueChange) writeControlledScope(1, scopeId, nodeAccessor, getCheckedValueRef(checkedValue), checkedValueChange, serializeType);
|
|
2040
2039
|
return normalizedValueMatches(checkedValue, value) ? valueAttr + " checked" : valueAttr;
|
|
2041
2040
|
}
|
|
2042
2041
|
const checkedValuesRefs = /* @__PURE__ */ new WeakMap();
|
|
@@ -2050,9 +2049,9 @@ function getCheckedValueRef(checkedValue) {
|
|
|
2050
2049
|
return ref;
|
|
2051
2050
|
}
|
|
2052
2051
|
}
|
|
2053
|
-
function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange) {
|
|
2052
|
+
function _attr_details_or_dialog_open(scopeId, nodeAccessor, open, openChange, serializeType) {
|
|
2054
2053
|
const normalizedOpen = isNotVoid(open);
|
|
2055
|
-
if (openChange) writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen || void 0, openChange);
|
|
2054
|
+
if (openChange) writeControlledScope(4, scopeId, nodeAccessor, normalizedOpen || void 0, openChange, serializeType);
|
|
2056
2055
|
return normalizedOpen ? " open" : "";
|
|
2057
2056
|
}
|
|
2058
2057
|
function _attr(name, value) {
|
|
@@ -2064,9 +2063,9 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
|
|
|
2064
2063
|
let events;
|
|
2065
2064
|
switch (tagName) {
|
|
2066
2065
|
case "input":
|
|
2067
|
-
if (data.checkedChange) result += _attr_input_checked(scopeId, nodeAccessor, data.checked, data.checkedChange);
|
|
2068
|
-
else if ("checkedValue" in data || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value);
|
|
2069
|
-
else if (data.valueChange) result += _attr_input_value(scopeId, nodeAccessor, data.value, data.valueChange);
|
|
2066
|
+
if (data.checkedChange) result += _attr_input_checked(scopeId, nodeAccessor, data.checked, data.checkedChange, 1);
|
|
2067
|
+
else if ("checkedValue" in data || data.checkedValueChange) result += _attr_input_checkedValue(scopeId, nodeAccessor, data.checkedValue, data.checkedValueChange, data.value, 1);
|
|
2068
|
+
else if (data.valueChange) result += _attr_input_value(scopeId, nodeAccessor, data.value, data.valueChange, 1);
|
|
2070
2069
|
else break;
|
|
2071
2070
|
skip = /^(?:value|checked(?:Value)?)(?:Change)?$|[\s/>"'=]/;
|
|
2072
2071
|
break;
|
|
@@ -2083,7 +2082,7 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
|
|
|
2083
2082
|
case "details":
|
|
2084
2083
|
case "dialog":
|
|
2085
2084
|
if (data.openChange) {
|
|
2086
|
-
result += _attr_details_or_dialog_open(scopeId, nodeAccessor, data.open, data.openChange);
|
|
2085
|
+
result += _attr_details_or_dialog_open(scopeId, nodeAccessor, data.open, data.openChange, 1);
|
|
2087
2086
|
skip = /^open(?:Change)?$|[\s/>"'=]/;
|
|
2088
2087
|
}
|
|
2089
2088
|
break;
|
|
@@ -2110,11 +2109,14 @@ function _attrs(data, nodeAccessor, scopeId, tagName) {
|
|
|
2110
2109
|
}
|
|
2111
2110
|
return result;
|
|
2112
2111
|
}
|
|
2113
|
-
function writeControlledScope(type, scopeId, nodeAccessor, value, valueChange) {
|
|
2114
|
-
writeScope(scopeId, {
|
|
2112
|
+
function writeControlledScope(type, scopeId, nodeAccessor, value, valueChange, serializeType) {
|
|
2113
|
+
writeScope(scopeId, serializeType ? {
|
|
2115
2114
|
["ControlledType:" + nodeAccessor]: type,
|
|
2116
2115
|
["ControlledValue:" + nodeAccessor]: value,
|
|
2117
2116
|
["ControlledHandler:" + nodeAccessor]: valueChange
|
|
2117
|
+
} : {
|
|
2118
|
+
["ControlledValue:" + nodeAccessor]: value,
|
|
2119
|
+
["ControlledHandler:" + nodeAccessor]: valueChange
|
|
2118
2120
|
});
|
|
2119
2121
|
}
|
|
2120
2122
|
function stringAttr(name, value) {
|
|
@@ -2176,10 +2178,10 @@ let _dynamic_tag = (scopeId, accessor, tag, inputOrArgs, content, inputIsArgs, s
|
|
|
2176
2178
|
_html(`<${renderer}${_attrs(input, "a", branchId, renderer)}>`);
|
|
2177
2179
|
if (!voidElementsReg.test(renderer)) {
|
|
2178
2180
|
const renderContent = content || normalizeDynamicRenderer(input.content);
|
|
2179
|
-
if (renderer === "textarea") _html(_attr_textarea_value(branchId, "a", input.value, input.valueChange));
|
|
2181
|
+
if (renderer === "textarea") _html(_attr_textarea_value(branchId, "a", input.value, input.valueChange, 1));
|
|
2180
2182
|
else if (renderContent) {
|
|
2181
2183
|
if (typeof renderContent !== "function") throw new Error(`Body content is not supported for the \`<${renderer}>\` tag.`);
|
|
2182
|
-
if (renderer === "select" && ("value" in input || "valueChange" in input)) _attr_select_value(branchId, "a", input.value, input.valueChange, renderContent);
|
|
2184
|
+
if (renderer === "select" && ("value" in input || "valueChange" in input)) _attr_select_value(branchId, "a", input.value, input.valueChange, renderContent, 1);
|
|
2183
2185
|
else _dynamic_tag(branchId, "a", renderContent, void 0, 0, void 0, serializeReason);
|
|
2184
2186
|
}
|
|
2185
2187
|
_html(`</${renderer}>`);
|
|
@@ -4419,7 +4421,8 @@ var native_tag_default = {
|
|
|
4419
4421
|
tag.insertBefore(_marko_compiler.types.variableDeclaration("const", [_marko_compiler.types.variableDeclarator(spreadIdentifier, spreadExpression)]));
|
|
4420
4422
|
htmlSelectArgs.set(tag.node, {
|
|
4421
4423
|
value: _marko_compiler.types.memberExpression(spreadIdentifier, _marko_compiler.types.identifier("value")),
|
|
4422
|
-
valueChange: _marko_compiler.types.memberExpression(spreadIdentifier, _marko_compiler.types.identifier("valueChange"))
|
|
4424
|
+
valueChange: _marko_compiler.types.memberExpression(spreadIdentifier, _marko_compiler.types.identifier("valueChange")),
|
|
4425
|
+
serializeType: _marko_compiler.types.numericLiteral(1)
|
|
4423
4426
|
});
|
|
4424
4427
|
spreadExpression = spreadIdentifier;
|
|
4425
4428
|
}
|
|
@@ -4436,7 +4439,7 @@ var native_tag_default = {
|
|
|
4436
4439
|
valueChange = _marko_compiler.types.memberExpression(spreadIdentifier, _marko_compiler.types.identifier("valueChange"));
|
|
4437
4440
|
spreadExpression = spreadIdentifier;
|
|
4438
4441
|
}
|
|
4439
|
-
if (valueChange) writeAtStartOfBody = callRuntime("_attr_textarea_value", getScopeIdIdentifier(tagSection), visitAccessor, value, valueChange);
|
|
4442
|
+
if (valueChange) writeAtStartOfBody = callRuntime("_attr_textarea_value", getScopeIdIdentifier(tagSection), visitAccessor, value, valueChange, staticControllable ? void 0 : _marko_compiler.types.numericLiteral(1));
|
|
4440
4443
|
else if (value) writeAtStartOfBody = callRuntime("_escape", value);
|
|
4441
4444
|
}
|
|
4442
4445
|
for (const attr of staticAttrs) {
|
|
@@ -4496,7 +4499,7 @@ var native_tag_default = {
|
|
|
4496
4499
|
if (selectArgs) {
|
|
4497
4500
|
if (!tagExtra[kSkipEndTag]) write`</${tagName}>`;
|
|
4498
4501
|
flushInto(tag);
|
|
4499
|
-
tag.insertBefore(_marko_compiler.types.expressionStatement(callRuntime("_attr_select_value", getScopeIdIdentifier(tagSection), nodeBinding && getScopeAccessorLiteral(nodeBinding), selectArgs.value, selectArgs.valueChange, _marko_compiler.types.arrowFunctionExpression([], _marko_compiler.types.blockStatement(tag.node.body.body)))));
|
|
4502
|
+
tag.insertBefore(_marko_compiler.types.expressionStatement(callRuntime("_attr_select_value", getScopeIdIdentifier(tagSection), nodeBinding && getScopeAccessorLiteral(nodeBinding), selectArgs.value, selectArgs.valueChange, _marko_compiler.types.arrowFunctionExpression([], _marko_compiler.types.blockStatement(tag.node.body.body)), selectArgs.serializeType)));
|
|
4500
4503
|
} else if (isTextOnly) {
|
|
4501
4504
|
for (const child of tag.node.body.body) if (_marko_compiler.types.isMarkoText(child)) write`${child.value}`;
|
|
4502
4505
|
else if (_marko_compiler.types.isMarkoPlaceholder(child)) write`${callRuntime(getTextOnlyEscapeHelper(tagName), child.value)}`;
|
|
@@ -8770,12 +8773,28 @@ var dynamic_tag_default = {
|
|
|
8770
8773
|
const tagExtra = node.extra;
|
|
8771
8774
|
const nodeBinding = tagExtra[kDOMBinding];
|
|
8772
8775
|
const isClassAPI = tagExtra.featureType === "class";
|
|
8776
|
+
const tagsSerializeReason = getSerializeReason(tagSection, nodeBinding);
|
|
8777
|
+
const serializeReason = tagsSerializeReason;
|
|
8773
8778
|
let tagExpression = node.name;
|
|
8774
|
-
if (
|
|
8775
|
-
|
|
8776
|
-
|
|
8777
|
-
|
|
8778
|
-
|
|
8779
|
+
if (isClassAPI) {
|
|
8780
|
+
const classTagTemplate = (0, _marko_compiler_babel_utils.getTagTemplate)(tag);
|
|
8781
|
+
const classFile = classTagTemplate ? (0, _marko_compiler_babel_utils.loadFileForTag)(tag) : void 0;
|
|
8782
|
+
const classHydration = classFile?.metadata.marko.classHydration;
|
|
8783
|
+
if (!isOutputHTML() && isOptimize() && classTagTemplate && !tagsSerializeReason && !classHydration) {
|
|
8784
|
+
tag.remove();
|
|
8785
|
+
return;
|
|
8786
|
+
}
|
|
8787
|
+
((0, _marko_compiler_babel_utils.getProgram)().node.extra ??= {}).needsCompat = true;
|
|
8788
|
+
if (_marko_compiler.types.isStringLiteral(tagExpression)) tagExpression = (0, _marko_compiler_babel_utils.importDefault)(tag.hub.file, getTagRelativePath(tag), tagExpression.value);
|
|
8789
|
+
if (classTagTemplate) {
|
|
8790
|
+
const preserveBoundary = !tagsSerializeReason && (classHydration === "descendant" || classHydration === "self" && !!classFile?.metadata.marko.hasComponentBrowser);
|
|
8791
|
+
if (isOutputHTML() ? serializeReason || classHydration : serializeReason) (0, _marko_compiler_babel_utils.getProgram)().node.body.push(isOutputHTML() ? _marko_compiler.types.markoScriptlet([_marko_compiler.types.expressionStatement(_marko_compiler.types.callExpression((0, _marko_compiler_babel_utils.importNamed)(tag.hub.file, getCompatRuntimeFile(), "s"), [
|
|
8792
|
+
_marko_compiler.types.stringLiteral((0, _marko_compiler_babel_utils.loadFileForTag)(tag).metadata.marko.id),
|
|
8793
|
+
_marko_compiler.types.identifier(tagExpression.name),
|
|
8794
|
+
...preserveBoundary ? [_marko_compiler.types.stringLiteral("preserve")] : []
|
|
8795
|
+
]))], true) : _marko_compiler.types.expressionStatement(callRuntime("_resume", _marko_compiler.types.stringLiteral((0, _marko_compiler_babel_utils.loadFileForTag)(tag).metadata.marko.id), _marko_compiler.types.identifier(tagExpression.name))));
|
|
8796
|
+
} else (0, _marko_compiler_babel_utils.getProgram)().node.body.push(_marko_compiler.types.markoScriptlet([_marko_compiler.types.expressionStatement(_marko_compiler.types.assignmentExpression("??=", _marko_compiler.types.memberExpression(_marko_compiler.types.identifier(tagExpression.name), _marko_compiler.types.identifier("_")), _marko_compiler.types.identifier(tagExpression.name)))], true));
|
|
8797
|
+
} else if (_marko_compiler.types.isStringLiteral(tagExpression)) tagExpression = (0, _marko_compiler_babel_utils.importDefault)(tag.hub.file, getTagRelativePath(tag), tagExpression.value);
|
|
8779
8798
|
const { properties, statements } = translateAttrs(tag, void 0, void 0, void 0, isClassAPI ? "renderBody" : "content");
|
|
8780
8799
|
const args = [];
|
|
8781
8800
|
let hasTagArgs = false;
|
|
@@ -8793,7 +8812,7 @@ var dynamic_tag_default = {
|
|
|
8793
8812
|
if (isOutputHTML()) {
|
|
8794
8813
|
flushInto(tag);
|
|
8795
8814
|
writeHTMLResumeStatements(tag.get("body"));
|
|
8796
|
-
const serializeArg = getSerializeGuard(tagSection,
|
|
8815
|
+
const serializeArg = getSerializeGuard(tagSection, serializeReason, true);
|
|
8797
8816
|
const dynamicTagExpr = hasTagArgs ? callRuntime("_dynamic_tag", getScopeIdIdentifier(tagSection), getScopeAccessorLiteral(nodeBinding), tagExpression, _marko_compiler.types.arrayExpression(args), _marko_compiler.types.numericLiteral(0), _marko_compiler.types.numericLiteral(1), serializeArg) : callRuntime("_dynamic_tag", getScopeIdIdentifier(tagSection), getScopeAccessorLiteral(nodeBinding), tagExpression, args[0], args[1] || (serializeArg ? _marko_compiler.types.numericLiteral(0) : void 0), serializeArg ? _marko_compiler.types.numericLiteral(0) : void 0, serializeArg);
|
|
8798
8817
|
if (node.var) {
|
|
8799
8818
|
const dynamicScopeIdentifier = generateUidIdentifier(tag.get("name").toString() + "_scope");
|
|
@@ -8826,7 +8845,7 @@ var dynamic_tag_default = {
|
|
|
8826
8845
|
const argsOrInput = hasTagArgs ? _marko_compiler.types.arrayExpression(args) : args[0];
|
|
8827
8846
|
if (!_marko_compiler.types.isObjectExpression(argsOrInput) || argsOrInput.properties.length) signal.extraArgs = [_marko_compiler.types.arrowFunctionExpression([], statements.length ? _marko_compiler.types.blockStatement(statements.concat(_marko_compiler.types.returnStatement(argsOrInput))) : argsOrInput)];
|
|
8828
8847
|
}
|
|
8829
|
-
enableDynamicTagResume(tag);
|
|
8848
|
+
if (!isClassAPI) enableDynamicTagResume(tag);
|
|
8830
8849
|
addValue(section, tagExtra.referencedBindings, signal, tagExpression);
|
|
8831
8850
|
tag.remove();
|
|
8832
8851
|
}
|
|
@@ -3,6 +3,16 @@ import { type Binding } from "../../util/references";
|
|
|
3
3
|
import { type Section } from "../../util/sections";
|
|
4
4
|
declare const kDOMBinding: unique symbol;
|
|
5
5
|
declare const kChildOffsetScopeBinding: unique symbol;
|
|
6
|
+
declare enum ClassHydration {
|
|
7
|
+
Self = "self",
|
|
8
|
+
Descendant = "descendant"
|
|
9
|
+
}
|
|
10
|
+
declare module "@marko/compiler" {
|
|
11
|
+
interface MarkoMeta {
|
|
12
|
+
classHydration?: ClassHydration;
|
|
13
|
+
hasComponentBrowser?: boolean;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
6
16
|
declare module "@marko/compiler/dist/types" {
|
|
7
17
|
interface MarkoTagExtra {
|
|
8
18
|
[kDOMBinding]?: Binding;
|