Skip to content

Commit 0a01701

Browse files
authored
Allow any in HTML template literals (#28)
2 parents a0e2c5b + 225a287 commit 0a01701

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+
if (index >= components.length) return acc + str;
36+
const component = components[index - 1];
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)