diff --git a/.changeset/sixty-fans-repair.md b/.changeset/sixty-fans-repair.md
new file mode 100644
index 0000000000..a185e08e94
--- /dev/null
+++ b/.changeset/sixty-fans-repair.md
@@ -0,0 +1,6 @@
+---
+"@marko/runtime-tags": patch
+"@marko/translator-interop-class-tags": patch
+---
+
+Increase specificity of dynamic tag normalization
diff --git a/.sizes.json b/.sizes.json
index 580b1df5e9..ee59d3885f 100644
--- a/.sizes.json
+++ b/.sizes.json
@@ -7,8 +7,8 @@
{
"name": "*",
"total": {
- "min": 19308,
- "brotli": 7346
+ "min": 19360,
+ "brotli": 7338
}
},
{
diff --git a/.sizes/dom.js b/.sizes/dom.js
index 1bac9a48e8..e3761838c1 100644
--- a/.sizes/dom.js
+++ b/.sizes/dom.js
@@ -1,4 +1,4 @@
-// size: 19308 (min) 7346 (brotli)
+// size: 19360 (min) 7338 (brotli)
var empty = [],
rest = Symbol();
function attrTag(attrs) {
@@ -69,7 +69,11 @@ function getEventHandlerName(name) {
return "-" === name[2] ? name.slice(3) : name.slice(2).toLowerCase();
}
function normalizeDynamicRenderer(value) {
- return value ? value.content || value.default || value : void 0;
+ if (value) {
+ if ("string" == typeof value) return value;
+ let normalized = value.content || value.default || value;
+ if ("___id" in normalized) return normalized;
+ }
}
var defaultDelegator = createDelegator();
function _on(element, type, handler) {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/.name-cache.json b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/.name-cache.json
new file mode 100644
index 0000000000..db413faf9a
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/.name-cache.json
@@ -0,0 +1,5 @@
+{
+ "vars": {
+ "props": {}
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/csr-sanitized.expected.md b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/csr-sanitized.expected.md
new file mode 100644
index 0000000000..2dde79321e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/csr-sanitized.expected.md
@@ -0,0 +1,7 @@
+# Render
+```html
+
+
+ Hello
+
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/csr.expected.md b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/csr.expected.md
new file mode 100644
index 0000000000..1f1ba4caad
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/csr.expected.md
@@ -0,0 +1,12 @@
+# Render
+```html
+
+
+ Hello
+
+```
+
+# Mutations
+```
+INSERT div0, div1
+```
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/tags/child.js b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/tags/child.js
new file mode 100644
index 0000000000..342521381e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/tags/child.js
@@ -0,0 +1,7 @@
+export const $template = "";
+export const $walks = /* next(1), replace, out(1) */"D%l";
+export const $setup = () => {};
+import * as _ from "@marko/runtime-tags/debug/dom";
+const $dynamicTag = /* @__PURE__ */_._dynamic_tag("#text/0");
+export const $input = /* @__PURE__ */_._const("input", $dynamicTag);
+export default /* @__PURE__ */_._template("__tests__/tags/child.marko", $template, $walks, $setup, $input);
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/template.hydrate.js b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/template.hydrate.js
new file mode 100644
index 0000000000..3eb9cd79d3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/template.hydrate.js
@@ -0,0 +1 @@
+// size: 0
diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/template.js b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/template.js
new file mode 100644
index 0000000000..933766c133
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/template.js
@@ -0,0 +1,14 @@
+export const $template = `${_child_template}${_child_template}`;
+export const $walks = /* beginChild, _child_walks, endChild, beginChild, _child_walks, endChild */`/${_child_walks}&/${_child_walks}&`;
+import { $setup as _child, $input as _child_input, $template as _child_template, $walks as _child_walks } from "./tags/child.marko";
+import * as _ from "@marko/runtime-tags/debug/dom";
+const $child_content = /* @__PURE__ */_._content("__tests__/template.marko_1_content", "Hello", /* over(1) */"b");
+export function $setup($scope) {
+ _child($scope["#childScope/0"]);
+ _child_input($scope["#childScope/0"], {});
+ _child($scope["#childScope/1"]);
+ _child_input($scope["#childScope/1"], {
+ content: $child_content($scope)
+ });
+}
+export default /* @__PURE__ */_._template("__tests__/template.marko", $template, $walks, $setup);
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/html.expected/tags/child.js b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/html.expected/tags/child.js
new file mode 100644
index 0000000000..0cc5407339
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/html.expected/tags/child.js
@@ -0,0 +1,9 @@
+import * as _ from "@marko/runtime-tags/debug/html";
+export default _._template("__tests__/tags/child.marko", input => {
+ const $serialize = _._get_serialize_reason();
+ const $scope0_id = _._scope_id();
+ _._html("");
+ _._dynamic_tag($scope0_id, "#text/0", input, {}, 0, 0, _._serialize_guard($serialize, /* input */0));
+ _._html("
");
+ _._serialize_guard($serialize, /* input */0) && _._scope($scope0_id, {}, "__tests__/tags/child.marko", 0);
+});
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/html.expected/template.js b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/html.expected/template.js
new file mode 100644
index 0000000000..4698cd08c2
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/html.expected/template.js
@@ -0,0 +1,12 @@
+import _child from "./tags/child.marko";
+import * as _ from "@marko/runtime-tags/debug/html";
+export default _._template("__tests__/template.marko", input => {
+ const $scope0_id = _._scope_id();
+ _child({});
+ _child({
+ content: _._content("__tests__/template.marko_1_content", () => {
+ const $scope1_id = _._scope_id();
+ _._html("Hello");
+ })
+ });
+});
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/resume-sanitized.expected.md b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/resume-sanitized.expected.md
new file mode 100644
index 0000000000..2dde79321e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/resume-sanitized.expected.md
@@ -0,0 +1,7 @@
+# Render
+```html
+
+
+ Hello
+
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/resume.expected.md b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/resume.expected.md
new file mode 100644
index 0000000000..188645878f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/resume.expected.md
@@ -0,0 +1,12 @@
+# Render
+```html
+
+
+
+
+ Hello
+
+
+
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/ssr-sanitized.expected.md b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/ssr-sanitized.expected.md
new file mode 100644
index 0000000000..ad503ca5b6
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/ssr-sanitized.expected.md
@@ -0,0 +1,7 @@
+# Render End
+```html
+
+
+ Hello
+
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/ssr.expected.md b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/ssr.expected.md
new file mode 100644
index 0000000000..0b9a55e3ea
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/ssr.expected.md
@@ -0,0 +1,27 @@
+# Write
+```html
+ Hello
+```
+
+# Render End
+```html
+
+
+
+
+ Hello
+
+
+
+```
+
+# Mutations
+```
+INSERT html
+INSERT html/head
+INSERT html/body
+INSERT html/body/div0
+INSERT html/body/div1
+INSERT html/body/div1/#text
+```
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/tags/child.marko b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/tags/child.marko
new file mode 100644
index 0000000000..f7270cf3d5
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/tags/child.marko
@@ -0,0 +1,2 @@
+div
+ ${input}
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/template.marko b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/template.marko
new file mode 100644
index 0000000000..5e5f13f3a8
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/template.marko
@@ -0,0 +1,2 @@
+
+Hello
\ No newline at end of file
diff --git a/packages/runtime-tags/src/common/helpers.ts b/packages/runtime-tags/src/common/helpers.ts
index 98d4160b6d..225ad82f01 100644
--- a/packages/runtime-tags/src/common/helpers.ts
+++ b/packages/runtime-tags/src/common/helpers.ts
@@ -67,5 +67,11 @@ export function alphaEncode(num: number): string {
export function normalizeDynamicRenderer(
value: any,
): Renderer | string | undefined {
- return value ? value.content || value.default || value : undefined;
+ if (value) {
+ if (typeof value === "string") return value;
+ const normalized = value.content || value.default || value;
+ if ("___id" in normalized) {
+ return normalized;
+ }
+ }
}