@joist/element 4.2.0 → 4.2.1
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/package.json +1 -1
- package/src/lib/tags.test.ts +99 -0
- package/src/lib/tags.ts +6 -2
- package/target/lib/tags.d.ts +1 -0
- package/target/lib/tags.js +4 -1
- package/target/lib/tags.js.map +1 -1
- package/target/lib/tags.test.d.ts +1 -0
- package/target/lib/tags.test.js +69 -0
- package/target/lib/tags.test.js.map +1 -0
package/package.json
CHANGED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { assert } from "chai";
|
|
2
|
+
import { CSSResult, HTMLResult, css, html } from "./tags.js";
|
|
3
|
+
|
|
4
|
+
describe("tags", () => {
|
|
5
|
+
describe("html", () => {
|
|
6
|
+
it("should create an HTMLResult instance", () => {
|
|
7
|
+
const result = html`<div>Hello</div>`;
|
|
8
|
+
assert.instanceOf(result, HTMLResult);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it("should create a cloneable node", () => {
|
|
12
|
+
const result = html`<div>Hello</div>`;
|
|
13
|
+
const node = result.createNode();
|
|
14
|
+
assert.instanceOf(node, Node);
|
|
15
|
+
assert.equal(node.textContent, "Hello");
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it("should apply HTML to shadow root", () => {
|
|
19
|
+
const div = document.createElement("div");
|
|
20
|
+
const shadow = div.attachShadow({ mode: "open" });
|
|
21
|
+
|
|
22
|
+
const result = html`<div>Hello</div>`;
|
|
23
|
+
result.apply(div);
|
|
24
|
+
|
|
25
|
+
assert.equal(shadow.innerHTML, "<div>Hello</div>");
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it("should not apply HTML if no shadow root", () => {
|
|
29
|
+
const element = document.createElement("div");
|
|
30
|
+
const result = html`<div>Hello</div>`;
|
|
31
|
+
result.apply(element);
|
|
32
|
+
|
|
33
|
+
assert.equal(element.innerHTML, "");
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
describe("css", () => {
|
|
38
|
+
it("should create a CSSResult instance", () => {
|
|
39
|
+
const result = css`div { color: red; }`;
|
|
40
|
+
assert.instanceOf(result, CSSResult);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it("should create a stylesheet with correct content", () => {
|
|
44
|
+
const result = css`div { color: red; }`;
|
|
45
|
+
|
|
46
|
+
const element = document.createElement("div");
|
|
47
|
+
const shadow = element.attachShadow({ mode: "open" });
|
|
48
|
+
result.apply(element);
|
|
49
|
+
|
|
50
|
+
assert.equal(shadow.adoptedStyleSheets.length, 1);
|
|
51
|
+
assert.equal(
|
|
52
|
+
shadow.adoptedStyleSheets[0].cssRules[0].cssText,
|
|
53
|
+
"div { color: red; }",
|
|
54
|
+
);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("should apply CSS to shadow root", () => {
|
|
58
|
+
const element = document.createElement("div");
|
|
59
|
+
const shadow = element.attachShadow({ mode: "open" });
|
|
60
|
+
const result = css`div { color: red; }`;
|
|
61
|
+
result.apply(element);
|
|
62
|
+
|
|
63
|
+
assert.equal(shadow.adoptedStyleSheets.length, 1);
|
|
64
|
+
assert.equal(
|
|
65
|
+
shadow.adoptedStyleSheets[0].cssRules[0].cssText,
|
|
66
|
+
"div { color: red; }",
|
|
67
|
+
);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it("should not apply CSS if no shadow root", () => {
|
|
71
|
+
const element = document.createElement("div");
|
|
72
|
+
const result = css`div { color: red; }`;
|
|
73
|
+
result.apply(element);
|
|
74
|
+
|
|
75
|
+
assert.equal(element.shadowRoot, null);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it("should append to existing style sheets", () => {
|
|
79
|
+
const element = document.createElement("div");
|
|
80
|
+
const shadow = element.attachShadow({ mode: "open" });
|
|
81
|
+
|
|
82
|
+
const sheet1 = css`div { color: red; }`;
|
|
83
|
+
const sheet2 = css`span { color: blue; }`;
|
|
84
|
+
|
|
85
|
+
sheet1.apply(element);
|
|
86
|
+
sheet2.apply(element);
|
|
87
|
+
|
|
88
|
+
assert.equal(shadow.adoptedStyleSheets.length, 2);
|
|
89
|
+
assert.equal(
|
|
90
|
+
shadow.adoptedStyleSheets[0].cssRules[0].cssText,
|
|
91
|
+
"div { color: red; }",
|
|
92
|
+
);
|
|
93
|
+
assert.equal(
|
|
94
|
+
shadow.adoptedStyleSheets[1].cssRules[0].cssText,
|
|
95
|
+
"span { color: blue; }",
|
|
96
|
+
);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
});
|
package/src/lib/tags.ts
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import type { ShadowResult } from "./result.js";
|
|
2
2
|
|
|
3
3
|
export class HTMLResult<T extends HTMLElement> implements ShadowResult {
|
|
4
|
-
#template;
|
|
4
|
+
#template: HTMLTemplateElement;
|
|
5
5
|
|
|
6
6
|
constructor(raw: TemplateStringsArray, ..._values: any[]) {
|
|
7
7
|
this.#template = document.createElement("template");
|
|
8
8
|
this.#template.innerHTML = concat(raw);
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
createNode(): Node {
|
|
12
|
+
return document.importNode(this.#template.content, true);
|
|
13
|
+
}
|
|
14
|
+
|
|
11
15
|
apply(el: T): void {
|
|
12
16
|
if (el.shadowRoot) {
|
|
13
|
-
el.shadowRoot.append(this
|
|
17
|
+
el.shadowRoot.append(this.createNode());
|
|
14
18
|
}
|
|
15
19
|
}
|
|
16
20
|
}
|
package/target/lib/tags.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { ShadowResult } from "./result.js";
|
|
|
2
2
|
export declare class HTMLResult<T extends HTMLElement> implements ShadowResult {
|
|
3
3
|
#private;
|
|
4
4
|
constructor(raw: TemplateStringsArray, ..._values: any[]);
|
|
5
|
+
createNode(): Node;
|
|
5
6
|
apply(el: T): void;
|
|
6
7
|
}
|
|
7
8
|
export declare function html<T extends HTMLElement>(strings: TemplateStringsArray, ...values: any[]): HTMLResult<T>;
|
package/target/lib/tags.js
CHANGED
|
@@ -4,9 +4,12 @@ export class HTMLResult {
|
|
|
4
4
|
this.#template = document.createElement("template");
|
|
5
5
|
this.#template.innerHTML = concat(raw);
|
|
6
6
|
}
|
|
7
|
+
createNode() {
|
|
8
|
+
return document.importNode(this.#template.content, true);
|
|
9
|
+
}
|
|
7
10
|
apply(el) {
|
|
8
11
|
if (el.shadowRoot) {
|
|
9
|
-
el.shadowRoot.append(this
|
|
12
|
+
el.shadowRoot.append(this.createNode());
|
|
10
13
|
}
|
|
11
14
|
}
|
|
12
15
|
}
|
package/target/lib/tags.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/lib/tags.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACrB,SAAS,
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/lib/tags.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACrB,SAAS,CAAsB;IAE/B,YAAY,GAAyB,EAAE,GAAG,OAAc;QACtD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,UAAU;QACR,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,EAAK;QACT,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;YAClB,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,IAAI,CAClB,OAA6B,EAC7B,GAAG,MAAa;IAEhB,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,OAAO,SAAS;IACpB,MAAM,CAAC;IAEP,YAAY,GAAyB,EAAE,GAAG,OAAc;QACtD,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,EAAe;QACnB,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;YAClB,EAAE,CAAC,UAAU,CAAC,kBAAkB,GAAG;gBACjC,GAAG,EAAE,CAAC,UAAU,CAAC,kBAAkB;gBACnC,IAAI,CAAC,MAAM;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,GAAG,CAAC,OAA6B;IAC/C,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,MAAM,CAAC,OAA6B;IAC3C,IAAI,GAAG,GAAG,EAAE,CAAC;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { assert } from "chai";
|
|
2
|
+
import { CSSResult, HTMLResult, css, html } from "./tags.js";
|
|
3
|
+
describe("tags", () => {
|
|
4
|
+
describe("html", () => {
|
|
5
|
+
it("should create an HTMLResult instance", () => {
|
|
6
|
+
const result = html `<div>Hello</div>`;
|
|
7
|
+
assert.instanceOf(result, HTMLResult);
|
|
8
|
+
});
|
|
9
|
+
it("should create a cloneable node", () => {
|
|
10
|
+
const result = html `<div>Hello</div>`;
|
|
11
|
+
const node = result.createNode();
|
|
12
|
+
assert.instanceOf(node, Node);
|
|
13
|
+
assert.equal(node.textContent, "Hello");
|
|
14
|
+
});
|
|
15
|
+
it("should apply HTML to shadow root", () => {
|
|
16
|
+
const div = document.createElement("div");
|
|
17
|
+
const shadow = div.attachShadow({ mode: "open" });
|
|
18
|
+
const result = html `<div>Hello</div>`;
|
|
19
|
+
result.apply(div);
|
|
20
|
+
assert.equal(shadow.innerHTML, "<div>Hello</div>");
|
|
21
|
+
});
|
|
22
|
+
it("should not apply HTML if no shadow root", () => {
|
|
23
|
+
const element = document.createElement("div");
|
|
24
|
+
const result = html `<div>Hello</div>`;
|
|
25
|
+
result.apply(element);
|
|
26
|
+
assert.equal(element.innerHTML, "");
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe("css", () => {
|
|
30
|
+
it("should create a CSSResult instance", () => {
|
|
31
|
+
const result = css `div { color: red; }`;
|
|
32
|
+
assert.instanceOf(result, CSSResult);
|
|
33
|
+
});
|
|
34
|
+
it("should create a stylesheet with correct content", () => {
|
|
35
|
+
const result = css `div { color: red; }`;
|
|
36
|
+
const element = document.createElement("div");
|
|
37
|
+
const shadow = element.attachShadow({ mode: "open" });
|
|
38
|
+
result.apply(element);
|
|
39
|
+
assert.equal(shadow.adoptedStyleSheets.length, 1);
|
|
40
|
+
assert.equal(shadow.adoptedStyleSheets[0].cssRules[0].cssText, "div { color: red; }");
|
|
41
|
+
});
|
|
42
|
+
it("should apply CSS to shadow root", () => {
|
|
43
|
+
const element = document.createElement("div");
|
|
44
|
+
const shadow = element.attachShadow({ mode: "open" });
|
|
45
|
+
const result = css `div { color: red; }`;
|
|
46
|
+
result.apply(element);
|
|
47
|
+
assert.equal(shadow.adoptedStyleSheets.length, 1);
|
|
48
|
+
assert.equal(shadow.adoptedStyleSheets[0].cssRules[0].cssText, "div { color: red; }");
|
|
49
|
+
});
|
|
50
|
+
it("should not apply CSS if no shadow root", () => {
|
|
51
|
+
const element = document.createElement("div");
|
|
52
|
+
const result = css `div { color: red; }`;
|
|
53
|
+
result.apply(element);
|
|
54
|
+
assert.equal(element.shadowRoot, null);
|
|
55
|
+
});
|
|
56
|
+
it("should append to existing style sheets", () => {
|
|
57
|
+
const element = document.createElement("div");
|
|
58
|
+
const shadow = element.attachShadow({ mode: "open" });
|
|
59
|
+
const sheet1 = css `div { color: red; }`;
|
|
60
|
+
const sheet2 = css `span { color: blue; }`;
|
|
61
|
+
sheet1.apply(element);
|
|
62
|
+
sheet2.apply(element);
|
|
63
|
+
assert.equal(shadow.adoptedStyleSheets.length, 2);
|
|
64
|
+
assert.equal(shadow.adoptedStyleSheets[0].cssRules[0].cssText, "div { color: red; }");
|
|
65
|
+
assert.equal(shadow.adoptedStyleSheets[1].cssRules[0].cssText, "span { color: blue; }");
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=tags.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.test.js","sourceRoot":"","sources":["../../src/lib/tags.test.ts"],"names":[],"mappings":"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"}
|