Skip to content

Commit 977e694

Browse files
committed
Allow any in HTML template literals
E.g. `<foo>${null}${123}${component}</foo>`
1 parent a0e2c5b commit 977e694

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

src/DocumentComponent.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,19 @@ export class DocumentComponent extends NodeComponent<DocumentFragment> {
2828
* Template literal tag function that accepts HTML code with components in a
2929
* string literal
3030
*/
31-
public static tag(strings: TemplateStringsArray, ...components: NodeComponent<any>[]): DocumentComponent {
31+
public static tag(strings: TemplateStringsArray, ...components: (any | NodeComponent<any>)[]): DocumentComponent {
3232
const idPrefix = `tag-${crypto.randomUUID()}-`;
33-
const doc = new DocumentComponent(strings.reduce((acc, str, index) => acc + `${str}${index < components.length ? `<slot name="${idPrefix}${index - 1}"></slot>` : ""}`, ""));
34-
for (const [index, component] of components.entries())
33+
const nodes: NodeComponent<any>[] = [];
34+
const doc = new DocumentComponent(strings.reduce((acc, str, index) => {
35+
const component = components[index - 1];
36+
if (component === undefined) return acc + str;
37+
if (component instanceof NodeComponent) {
38+
nodes.push(component);
39+
return acc + `${str}<slot name="${idPrefix}${nodes.length - 1}"></slot>`;
40+
}
41+
return acc + str + String(component);
42+
}, ""));
43+
for (const [index, component] of nodes.entries())
3544
component.slot(idPrefix + index, doc.node);
3645
return doc;
3746
}

src/ElementComponent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ export abstract class ElementComponent<T extends Element> extends NodeComponent<
140140
* // Note the lack of parentheses.
141141
* @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals Template literals (Template strings) - MDN}
142142
*/
143-
public html(strings: TemplateStringsArray, ...components: NodeComponent<any>[]): this {
143+
public html(strings: TemplateStringsArray, ...components: (any | NodeComponent<any>)[]): this {
144144
return this.append(DocumentComponent.tag(strings, ...components));
145145
}
146146

0 commit comments

Comments
 (0)