@joist/element 3.9.1 → 4.0.0-next.10
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/README.md +67 -29
- package/package.json +5 -4
- package/src/lib/attr.test.ts +122 -48
- package/src/lib/attr.ts +61 -34
- package/src/lib/element.test.ts +89 -16
- package/src/lib/element.ts +74 -38
- package/src/lib/lifecycle.test.ts +31 -0
- package/src/lib/lifecycle.ts +9 -0
- package/src/lib/listen.test.ts +88 -0
- package/src/lib/listen.ts +27 -4
- package/src/lib/metadata.ts +17 -3
- package/src/lib/query.test.ts +53 -0
- package/src/lib/query.ts +37 -0
- package/src/lib/result.ts +2 -26
- package/src/lib/tags.ts +22 -64
- package/src/lib/template.test.ts +95 -0
- package/src/lib/template.ts +115 -0
- package/src/lib.ts +3 -3
- package/target/lib/attr.d.ts +4 -1
- package/target/lib/attr.js +49 -28
- package/target/lib/attr.js.map +1 -1
- package/target/lib/attr.test.js +277 -147
- package/target/lib/attr.test.js.map +1 -1
- package/target/lib/element.d.ts +6 -1
- package/target/lib/element.js +58 -29
- package/target/lib/element.js.map +1 -1
- package/target/lib/element.test.js +186 -64
- package/target/lib/element.test.js.map +1 -1
- package/target/lib/lifecycle.d.ts +1 -0
- package/target/lib/lifecycle.js +8 -0
- package/target/lib/lifecycle.js.map +1 -0
- package/target/lib/lifecycle.test.js +48 -0
- package/target/lib/lifecycle.test.js.map +1 -0
- package/target/lib/listen.d.ts +2 -1
- package/target/lib/listen.js +21 -3
- package/target/lib/listen.js.map +1 -1
- package/target/lib/listen.test.js +159 -0
- package/target/lib/listen.test.js.map +1 -0
- package/target/lib/metadata.d.ts +14 -3
- package/target/lib/metadata.js +2 -2
- package/target/lib/metadata.js.map +1 -1
- package/target/lib/query.d.ts +9 -0
- package/target/lib/query.js +24 -0
- package/target/lib/query.js.map +1 -0
- package/target/lib/query.test.js +78 -0
- package/target/lib/query.test.js.map +1 -0
- package/target/lib/result.d.ts +2 -8
- package/target/lib/result.js +1 -19
- package/target/lib/result.js.map +1 -1
- package/target/lib/tags.d.ts +10 -20
- package/target/lib/tags.js +17 -29
- package/target/lib/tags.js.map +1 -1
- package/target/lib/template.d.ts +9 -0
- package/target/lib/template.js +83 -0
- package/target/lib/template.js.map +1 -0
- package/target/lib/template.test.d.ts +1 -0
- package/target/lib/template.test.js +70 -0
- package/target/lib/template.test.js.map +1 -0
- package/target/lib.d.ts +3 -3
- package/target/lib.js +3 -3
- package/target/lib.js.map +1 -1
- package/src/lib/shadow.test.ts +0 -40
- package/src/lib/shadow.ts +0 -16
- package/src/lib/tag-name.test.ts +0 -13
- package/src/lib/tag-name.ts +0 -10
- package/src/lib/tags.test.ts +0 -28
- package/target/lib/shadow.d.ts +0 -2
- package/target/lib/shadow.js +0 -10
- package/target/lib/shadow.js.map +0 -1
- package/target/lib/shadow.test.js +0 -69
- package/target/lib/shadow.test.js.map +0 -1
- package/target/lib/tag-name.d.ts +0 -1
- package/target/lib/tag-name.js +0 -6
- package/target/lib/tag-name.js.map +0 -1
- package/target/lib/tag-name.test.js +0 -36
- package/target/lib/tag-name.test.js.map +0 -1
- package/target/lib/tags.test.js +0 -23
- package/target/lib/tags.test.js.map +0 -1
- /package/target/lib/{shadow.test.d.ts → lifecycle.test.d.ts} +0 -0
- /package/target/lib/{tag-name.test.d.ts → listen.test.d.ts} +0 -0
- /package/target/lib/{tags.test.d.ts → query.test.d.ts} +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export function query(query) {
|
|
2
|
+
let res = null;
|
|
3
|
+
return function (updates) {
|
|
4
|
+
if (res) {
|
|
5
|
+
return res;
|
|
6
|
+
}
|
|
7
|
+
if (this.shadowRoot) {
|
|
8
|
+
res = this.shadowRoot.querySelector(query);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
res = this.querySelector(query);
|
|
12
|
+
}
|
|
13
|
+
if (!res) {
|
|
14
|
+
throw new Error('could not find element');
|
|
15
|
+
}
|
|
16
|
+
if (updates) {
|
|
17
|
+
for (let update in updates) {
|
|
18
|
+
Reflect.set(res, update, updates[update]);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return res;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/lib/query.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,KAAK,CAAiB,KAAQ;IAC5C,IAAI,GAAG,GAAoC,IAAI,CAAC;IAEhD,OAAO,UAA6B,OAA2C;QAC7E,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAI,KAAK,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,IAAI,CAAC,aAAa,CAAI,KAAK,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
+
import { expect } from 'chai';
|
|
3
|
+
import { element } from './element.js';
|
|
4
|
+
import { query } from './query.js';
|
|
5
|
+
import { html } from './tags.js';
|
|
6
|
+
it('should work', () => {
|
|
7
|
+
let MyElement = (() => {
|
|
8
|
+
let _classDecorators = [element({
|
|
9
|
+
tagName: 'query-test-1',
|
|
10
|
+
shadow: [
|
|
11
|
+
html `
|
|
12
|
+
<form>
|
|
13
|
+
<input id="fname" name="fname" />
|
|
14
|
+
<input id="lname" name="lname" />
|
|
15
|
+
</form>
|
|
16
|
+
`
|
|
17
|
+
]
|
|
18
|
+
})];
|
|
19
|
+
let _classDescriptor;
|
|
20
|
+
let _classExtraInitializers = [];
|
|
21
|
+
let _classThis;
|
|
22
|
+
let _classSuper = HTMLElement;
|
|
23
|
+
var MyElement = class extends _classSuper {
|
|
24
|
+
static { _classThis = this; }
|
|
25
|
+
static {
|
|
26
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
27
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
28
|
+
MyElement = _classThis = _classDescriptor.value;
|
|
29
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
30
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
31
|
+
}
|
|
32
|
+
fname = query('#fname');
|
|
33
|
+
lname = query('#lname');
|
|
34
|
+
};
|
|
35
|
+
return MyElement = _classThis;
|
|
36
|
+
})();
|
|
37
|
+
const el = new MyElement();
|
|
38
|
+
expect(el.fname()).to.equal(el.shadowRoot?.querySelector('#fname'));
|
|
39
|
+
expect(el.lname()).to.equal(el.shadowRoot?.querySelector('#lname'));
|
|
40
|
+
});
|
|
41
|
+
it('should patch the selected item', () => {
|
|
42
|
+
let MyElement = (() => {
|
|
43
|
+
let _classDecorators = [element({
|
|
44
|
+
tagName: 'query-test-2',
|
|
45
|
+
shadow: [
|
|
46
|
+
html `
|
|
47
|
+
<form>
|
|
48
|
+
<input id="fname" name="fname" />
|
|
49
|
+
<input id="lname" name="lname" />
|
|
50
|
+
</form>
|
|
51
|
+
`
|
|
52
|
+
]
|
|
53
|
+
})];
|
|
54
|
+
let _classDescriptor;
|
|
55
|
+
let _classExtraInitializers = [];
|
|
56
|
+
let _classThis;
|
|
57
|
+
let _classSuper = HTMLElement;
|
|
58
|
+
var MyElement = class extends _classSuper {
|
|
59
|
+
static { _classThis = this; }
|
|
60
|
+
static {
|
|
61
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
62
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
63
|
+
MyElement = _classThis = _classDescriptor.value;
|
|
64
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
65
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
66
|
+
}
|
|
67
|
+
fname = query('#fname');
|
|
68
|
+
lname = query('#lname');
|
|
69
|
+
};
|
|
70
|
+
return MyElement = _classThis;
|
|
71
|
+
})();
|
|
72
|
+
const el = new MyElement();
|
|
73
|
+
el.fname({ value: 'Foo' });
|
|
74
|
+
el.lname({ value: 'Bar' });
|
|
75
|
+
expect(el.shadowRoot?.querySelector('#fname')?.value).to.equal('Foo');
|
|
76
|
+
expect(el.shadowRoot?.querySelector('#lname')?.value).to.equal('Bar');
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=query.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.test.js","sourceRoot":"","sources":["../../src/lib/query.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;QAYf,SAAS;gCAXd,OAAO,CAAC;gBACP,OAAO,EAAE,cAAc;gBACvB,MAAM,EAAE;oBACN,IAAI,CAAA;;;;;OAKH;iBACF;aACF,CAAC;;;;0BACsB,WAAW;6BAAnB,SAAQ,WAAW;;;;gBAAnC,6KAGC;;;gBAHK,uDAAS;;YACb,KAAK,GAAG,KAAK,CAAmB,QAAQ,CAAC,CAAC;YAC1C,KAAK,GAAG,KAAK,CAAmB,QAAQ,CAAC,CAAC;;;;IAG5C,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;IAE3B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtE,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAYlC,SAAS;gCAXd,OAAO,CAAC;gBACP,OAAO,EAAE,cAAc;gBACvB,MAAM,EAAE;oBACN,IAAI,CAAA;;;;;OAKH;iBACF;aACF,CAAC;;;;0BACsB,WAAW;6BAAnB,SAAQ,WAAW;;;;gBAAnC,6KAGC;;;gBAHK,uDAAS;;YACb,KAAK,GAAG,KAAK,CAAmB,QAAQ,CAAC,CAAC;YAC1C,KAAK,GAAG,KAAK,CAAmB,QAAQ,CAAC,CAAC;;;;IAG5C,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;IAC3B,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3B,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAE3B,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAmB,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxF,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAmB,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1F,CAAC,CAAC,CAAC"}
|
package/target/lib/result.d.ts
CHANGED
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
strings: TemplateStringsArray;
|
|
4
|
-
values: any[];
|
|
5
|
-
get shadow(): ShadowRoot;
|
|
6
|
-
constructor(raw: TemplateStringsArray, ...values: any[]);
|
|
7
|
-
execute(root: ShadowRoot): void;
|
|
8
|
-
abstract apply(root: ShadowRoot): void;
|
|
1
|
+
export interface ShadowResult<T extends HTMLElement> {
|
|
2
|
+
apply(el: T): void;
|
|
9
3
|
}
|
package/target/lib/result.js
CHANGED
|
@@ -1,20 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
strings;
|
|
3
|
-
values;
|
|
4
|
-
#shadow = undefined;
|
|
5
|
-
get shadow() {
|
|
6
|
-
if (!this.#shadow) {
|
|
7
|
-
throw new Error('ShadowResult has not been applied');
|
|
8
|
-
}
|
|
9
|
-
return this.#shadow;
|
|
10
|
-
}
|
|
11
|
-
constructor(raw, ...values) {
|
|
12
|
-
this.strings = raw;
|
|
13
|
-
this.values = values;
|
|
14
|
-
}
|
|
15
|
-
execute(root) {
|
|
16
|
-
this.#shadow = root;
|
|
17
|
-
this.apply(root);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
1
|
+
export {};
|
|
20
2
|
//# sourceMappingURL=result.js.map
|
package/target/lib/result.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/lib/result.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/lib/result.ts"],"names":[],"mappings":""}
|
package/target/lib/tags.d.ts
CHANGED
|
@@ -1,23 +1,13 @@
|
|
|
1
1
|
import { ShadowResult } from './result.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export declare class HTMLResult extends ShadowResult {
|
|
7
|
-
query<K extends Tags>(selectors: K): HTMLElementTagNameMap[K] | null;
|
|
8
|
-
query<K extends SVGTags>(selectors: K): SVGElementTagNameMap[K] | null;
|
|
9
|
-
query<K extends MathTags>(selectors: K): MathMLElementTagNameMap[K] | null;
|
|
10
|
-
query<E extends Element = Element>(selectors: string): E | null;
|
|
11
|
-
queryAll<K extends Tags>(selectors: K): NodeListOf<HTMLElementTagNameMap[K]>;
|
|
12
|
-
queryAll<K extends SVGTags>(selectors: K): NodeListOf<SVGElementTagNameMap[K]>;
|
|
13
|
-
queryAll<K extends MathTags>(selectors: K): NodeListOf<MathMLElementTagNameMap[K]>;
|
|
14
|
-
queryAll<E extends Element = Element>(selectors: string): NodeListOf<E>;
|
|
15
|
-
apply(root: ShadowRoot): void;
|
|
2
|
+
export declare class HTMLResult<T extends HTMLElement> implements ShadowResult<T> {
|
|
3
|
+
#private;
|
|
4
|
+
constructor(raw: TemplateStringsArray, ..._values: any[]);
|
|
5
|
+
apply(el: T): void;
|
|
16
6
|
}
|
|
17
|
-
export declare function html(strings: TemplateStringsArray, ...values: any[]): HTMLResult
|
|
18
|
-
export declare
|
|
19
|
-
|
|
20
|
-
|
|
7
|
+
export declare function html<T extends HTMLElement>(strings: TemplateStringsArray, ...values: any[]): HTMLResult<T>;
|
|
8
|
+
export declare class CSSResult<T extends HTMLElement> implements ShadowResult<T> {
|
|
9
|
+
#private;
|
|
10
|
+
constructor(raw: TemplateStringsArray, ..._values: any[]);
|
|
11
|
+
apply(el: HTMLElement): void;
|
|
21
12
|
}
|
|
22
|
-
export declare function css(strings: TemplateStringsArray): CSSResult
|
|
23
|
-
export {};
|
|
13
|
+
export declare function css<T extends HTMLElement>(strings: TemplateStringsArray): CSSResult<T>;
|
package/target/lib/tags.js
CHANGED
|
@@ -1,40 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
export class HTMLResult {
|
|
2
|
+
#template;
|
|
3
|
+
constructor(raw, ..._values) {
|
|
4
|
+
this.#template = document.createElement('template');
|
|
5
|
+
this.#template.innerHTML = concat(raw);
|
|
6
6
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
apply(root) {
|
|
11
|
-
let template;
|
|
12
|
-
if (htmlTemplateCache.has(this.strings)) {
|
|
13
|
-
template = htmlTemplateCache.get(this.strings);
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
template = document.createElement('template');
|
|
17
|
-
template.innerHTML = concat(this.strings);
|
|
18
|
-
htmlTemplateCache.set(this.strings, template);
|
|
7
|
+
apply(el) {
|
|
8
|
+
if (el.shadowRoot) {
|
|
9
|
+
el.shadowRoot.append(this.#template.content.cloneNode(true));
|
|
19
10
|
}
|
|
20
|
-
root.append(template.content.cloneNode(true));
|
|
21
11
|
}
|
|
22
12
|
}
|
|
23
13
|
export function html(strings, ...values) {
|
|
24
14
|
return new HTMLResult(strings, ...values);
|
|
25
15
|
}
|
|
26
|
-
export
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
sheet.replaceSync(concat(this.strings));
|
|
16
|
+
export class CSSResult {
|
|
17
|
+
#sheet;
|
|
18
|
+
constructor(raw, ..._values) {
|
|
19
|
+
this.#sheet = new CSSStyleSheet();
|
|
20
|
+
this.#sheet.replaceSync(concat(raw));
|
|
21
|
+
}
|
|
22
|
+
apply(el) {
|
|
23
|
+
if (el.shadowRoot) {
|
|
24
|
+
el.shadowRoot.adoptedStyleSheets = [...el.shadowRoot.adoptedStyleSheets, this.#sheet];
|
|
36
25
|
}
|
|
37
|
-
root.adoptedStyleSheets = [...root.adoptedStyleSheets, sheet];
|
|
38
26
|
}
|
|
39
27
|
}
|
|
40
28
|
export function css(strings) {
|
package/target/lib/tags.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/lib/tags.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/lib/tags.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACrB,SAAS,CAAC;IAEV,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,KAAK,CAAC,EAAK;QACT,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;YAClB,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,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,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,GAAG,CAAwB,OAA6B;IACtE,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,9 @@
|
|
|
1
|
+
type TemplateValueGetter = (key: string) => string;
|
|
2
|
+
export interface TemplateOpts {
|
|
3
|
+
value?: TemplateValueGetter;
|
|
4
|
+
}
|
|
5
|
+
export interface RenderOpts {
|
|
6
|
+
}
|
|
7
|
+
export declare function template(templateOpts?: TemplateOpts): <T extends HTMLElement>(this: T) => void;
|
|
8
|
+
export declare function getTemplateValue(obj: object, key: string): any;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
const TOKEN_PREFIX = '#:';
|
|
2
|
+
class Updates extends Set {
|
|
3
|
+
}
|
|
4
|
+
export function template(templateOpts) {
|
|
5
|
+
let updates = null;
|
|
6
|
+
return function render() {
|
|
7
|
+
if (!updates) {
|
|
8
|
+
updates = findUpdates(this, templateOpts?.value ?? ((key) => getTemplateValue(this, key)));
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
for (let update of updates) {
|
|
12
|
+
update();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function findUpdates(el, getter) {
|
|
18
|
+
const iterator = document.createTreeWalker(el.shadowRoot ?? el, NodeFilter.SHOW_ELEMENT);
|
|
19
|
+
const updates = new Updates();
|
|
20
|
+
while (iterator.nextNode()) {
|
|
21
|
+
const res = trackElement(iterator.currentNode, updates, getter);
|
|
22
|
+
if (res !== null) {
|
|
23
|
+
iterator.currentNode = res;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return updates;
|
|
27
|
+
}
|
|
28
|
+
function trackElement(node, updates, getter) {
|
|
29
|
+
const element = node;
|
|
30
|
+
for (let attr of element.attributes) {
|
|
31
|
+
const nodeValue = attr.value.trim();
|
|
32
|
+
const realAttributeName = attr.name.replace(TOKEN_PREFIX, '');
|
|
33
|
+
let update = null;
|
|
34
|
+
if (attr.name.startsWith(`${TOKEN_PREFIX}bind`)) {
|
|
35
|
+
update = () => {
|
|
36
|
+
const value = getter(attr.value);
|
|
37
|
+
if (element.textContent !== value) {
|
|
38
|
+
element.textContent = getter(attr.value);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
else if (attr.name.startsWith(TOKEN_PREFIX)) {
|
|
43
|
+
const isBooleanAttr = nodeValue.startsWith('!');
|
|
44
|
+
const isPositive = nodeValue.startsWith('!!');
|
|
45
|
+
const propertyKey = nodeValue.replaceAll('!', '');
|
|
46
|
+
if (isBooleanAttr) {
|
|
47
|
+
update = () => {
|
|
48
|
+
let value = isPositive ? !!getter(propertyKey) : !getter(propertyKey);
|
|
49
|
+
if (value) {
|
|
50
|
+
element.setAttribute(realAttributeName, '');
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
element.removeAttribute(realAttributeName);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const realAttribute = document.createAttribute(realAttributeName);
|
|
59
|
+
element.setAttributeNode(realAttribute);
|
|
60
|
+
update = () => {
|
|
61
|
+
const value = getter(nodeValue);
|
|
62
|
+
if (realAttribute.value !== value) {
|
|
63
|
+
realAttribute.value = value;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (update) {
|
|
69
|
+
updates.add(update);
|
|
70
|
+
update();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
export function getTemplateValue(obj, key) {
|
|
76
|
+
const parsed = key.split('.');
|
|
77
|
+
let pointer = obj;
|
|
78
|
+
for (let part of parsed) {
|
|
79
|
+
pointer = pointer[part];
|
|
80
|
+
}
|
|
81
|
+
return pointer;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/lib/template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { assert } from 'chai';
|
|
2
|
+
import { template } from './template.js';
|
|
3
|
+
const TESTS = [
|
|
4
|
+
function comments(el, root) {
|
|
5
|
+
it(`should intialize bindable nodes ${root instanceof ShadowRoot ? '(ShadowDOM)' : '(LightDOM)'}`, () => {
|
|
6
|
+
el.title = 'Hello World';
|
|
7
|
+
el.ariaLabel = 'This is the label';
|
|
8
|
+
el.ariaDescription = 'This is the description';
|
|
9
|
+
root.innerHTML = `
|
|
10
|
+
<span #:bind="title"></span>
|
|
11
|
+
|
|
12
|
+
<ul>
|
|
13
|
+
<li #:bind="ariaLabel"></li>
|
|
14
|
+
<li #:bind="ariaDescription"></li>
|
|
15
|
+
</ul>
|
|
16
|
+
`;
|
|
17
|
+
const render = template().bind(el);
|
|
18
|
+
render();
|
|
19
|
+
assert.equal(root.innerHTML
|
|
20
|
+
.split('\n')
|
|
21
|
+
.map((res) => res.trim())
|
|
22
|
+
.join(''), '<span #:bind="title">Hello World</span><ul><li #:bind="ariaLabel">This is the label</li><li #:bind="ariaDescription">This is the description</li></ul>');
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
function attributes(el, root) {
|
|
26
|
+
it(`should intialize template attributes ${root instanceof ShadowRoot ? '(ShadowDOM)' : '(LightDOM)'}`, () => {
|
|
27
|
+
el.ariaLabel = 'This is the label';
|
|
28
|
+
el.ariaDescription = 'This is the description';
|
|
29
|
+
root.innerHTML = `
|
|
30
|
+
<ul #:aria-label="ariaLabel" #:aria-description="ariaDescription"></ul>
|
|
31
|
+
`;
|
|
32
|
+
const render = template().bind(el);
|
|
33
|
+
render();
|
|
34
|
+
assert.equal(root.innerHTML
|
|
35
|
+
.split('\n')
|
|
36
|
+
.map((res) => res.trim())
|
|
37
|
+
.join(''), '<ul #:aria-label="ariaLabel" #:aria-description="ariaDescription" aria-label="This is the label" aria-description="This is the description"></ul>');
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
function customGetter(el, root) {
|
|
41
|
+
it(`should use custom getter for values ${root instanceof ShadowRoot ? '(ShadowDOM)' : '(LightDOM)'}`, () => {
|
|
42
|
+
const data = {
|
|
43
|
+
title: 'Hello World',
|
|
44
|
+
ariaLabel: 'This is the label',
|
|
45
|
+
ariaDescription: 'This is the description'
|
|
46
|
+
};
|
|
47
|
+
root.innerHTML = `
|
|
48
|
+
<span #:bind="title"></span>
|
|
49
|
+
|
|
50
|
+
<ul>
|
|
51
|
+
<li #:bind="ariaLabel"></li>
|
|
52
|
+
<li #:bind="ariaDescription"></li>
|
|
53
|
+
</ul>
|
|
54
|
+
`;
|
|
55
|
+
const render = template({ value: (key) => data[key] }).bind(el);
|
|
56
|
+
render();
|
|
57
|
+
assert.equal(root.innerHTML
|
|
58
|
+
.split('\n')
|
|
59
|
+
.map((res) => res.trim())
|
|
60
|
+
.join(''), '<span #:bind="title">Hello World</span><ul><li #:bind="ariaLabel">This is the label</li><li #:bind="ariaDescription">This is the description</li></ul>');
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
];
|
|
64
|
+
for (let test of TESTS) {
|
|
65
|
+
const lightEl = document.createElement('div');
|
|
66
|
+
test(lightEl, lightEl);
|
|
67
|
+
const shadowEl = document.createElement('div');
|
|
68
|
+
test(shadowEl, shadowEl.attachShadow({ mode: 'open' }));
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=template.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.test.js","sourceRoot":"","sources":["../../src/lib/template.test.ts"],"names":[],"mappings":"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"}
|
package/target/lib.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { ShadowResult as TemplateResult } from './lib/result.js';
|
|
2
1
|
export { css, html, HTMLResult, CSSResult } from './lib/tags.js';
|
|
3
|
-
export { shadow } from './lib/shadow.js';
|
|
4
2
|
export { attr } from './lib/attr.js';
|
|
5
3
|
export { listen } from './lib/listen.js';
|
|
6
|
-
export { tagName } from './lib/tag-name.js';
|
|
7
4
|
export { element } from './lib/element.js';
|
|
5
|
+
export { query } from './lib/query.js';
|
|
6
|
+
export { template, getTemplateValue } from './lib/template.js';
|
|
7
|
+
export { ready } from './lib/lifecycle.js';
|
package/target/lib.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { ShadowResult as TemplateResult } from './lib/result.js';
|
|
2
1
|
export { css, html, HTMLResult, CSSResult } from './lib/tags.js';
|
|
3
|
-
export { shadow } from './lib/shadow.js';
|
|
4
2
|
export { attr } from './lib/attr.js';
|
|
5
3
|
export { listen } from './lib/listen.js';
|
|
6
|
-
export { tagName } from './lib/tag-name.js';
|
|
7
4
|
export { element } from './lib/element.js';
|
|
5
|
+
export { query } from './lib/query.js';
|
|
6
|
+
export { template, getTemplateValue } from './lib/template.js';
|
|
7
|
+
export { ready } from './lib/lifecycle.js';
|
|
8
8
|
//# sourceMappingURL=lib.js.map
|
package/target/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC"}
|
package/src/lib/shadow.test.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { expect } from '@open-wc/testing';
|
|
2
|
-
|
|
3
|
-
import { css, html } from './tags.js';
|
|
4
|
-
import { shadow } from './shadow.js';
|
|
5
|
-
|
|
6
|
-
describe('template', () => {
|
|
7
|
-
it('should apply a stylesheet', () => {
|
|
8
|
-
class MyElement extends HTMLElement {
|
|
9
|
-
@shadow styles = css`
|
|
10
|
-
:host {
|
|
11
|
-
display: flex;
|
|
12
|
-
}
|
|
13
|
-
`;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
customElements.define('template-1', MyElement);
|
|
17
|
-
|
|
18
|
-
const el = new MyElement();
|
|
19
|
-
|
|
20
|
-
expect(el.shadowRoot!.adoptedStyleSheets.length).to.eq(1);
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it('should apply html', () => {
|
|
24
|
-
class MyElement extends HTMLElement {
|
|
25
|
-
@shadow styles = css`
|
|
26
|
-
:host {
|
|
27
|
-
display: flex;
|
|
28
|
-
}
|
|
29
|
-
`;
|
|
30
|
-
|
|
31
|
-
@shadow template = html`<slot></slot>`;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
customElements.define('template-2', MyElement);
|
|
35
|
-
|
|
36
|
-
const el = new MyElement();
|
|
37
|
-
|
|
38
|
-
expect(el.shadowRoot?.innerHTML).to.eq('<slot></slot>');
|
|
39
|
-
});
|
|
40
|
-
});
|
package/src/lib/shadow.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { ShadowResult } from './result.js';
|
|
2
|
-
|
|
3
|
-
export function shadow<This extends HTMLElement, T extends ShadowResult>(
|
|
4
|
-
_: undefined,
|
|
5
|
-
_ctx: ClassFieldDecoratorContext<This, T>
|
|
6
|
-
) {
|
|
7
|
-
return function (this: This, result: T) {
|
|
8
|
-
if (!this.shadowRoot) {
|
|
9
|
-
this.attachShadow({ mode: 'open' });
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
result.execute(this.shadowRoot!);
|
|
13
|
-
|
|
14
|
-
return result;
|
|
15
|
-
};
|
|
16
|
-
}
|
package/src/lib/tag-name.test.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { element } from './element.js';
|
|
2
|
-
import { tagName } from './tag-name.js';
|
|
3
|
-
|
|
4
|
-
describe('tag-name', () => {
|
|
5
|
-
it('should define a custom element', async () => {
|
|
6
|
-
@element
|
|
7
|
-
class MyElement extends HTMLElement {
|
|
8
|
-
@tagName static tagName = 'tn-test-1';
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
return customElements.whenDefined(MyElement.tagName);
|
|
12
|
-
});
|
|
13
|
-
});
|
package/src/lib/tag-name.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { metadataStore } from './metadata.js';
|
|
2
|
-
|
|
3
|
-
export function tagName<This extends typeof HTMLElement>(
|
|
4
|
-
_val: unknown,
|
|
5
|
-
ctx: ClassFieldDecoratorContext<This, string>
|
|
6
|
-
) {
|
|
7
|
-
const metadata = metadataStore.read(ctx.metadata);
|
|
8
|
-
|
|
9
|
-
metadata.tagName = ctx.access.get;
|
|
10
|
-
}
|
package/src/lib/tags.test.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { expect } from '@open-wc/testing';
|
|
2
|
-
import { css, html, htmlTemplateCache, styleSheetCache } from './tags.js';
|
|
3
|
-
|
|
4
|
-
describe('tags', () => {
|
|
5
|
-
it('should ensure return the same CSSResult', () => {
|
|
6
|
-
class Test {
|
|
7
|
-
styles = css`Hello World`;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
const a = new Test();
|
|
11
|
-
const b = new Test();
|
|
12
|
-
|
|
13
|
-
expect(a.styles.strings).to.equal(b.styles.strings);
|
|
14
|
-
expect(styleSheetCache.get(a.styles.strings)).to.equal(styleSheetCache.get(b.styles.strings));
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
it('should cache the HTMLTemplateElement', () => {
|
|
18
|
-
class Test {
|
|
19
|
-
dom = html`Hello World`;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const a = new Test();
|
|
23
|
-
const b = new Test();
|
|
24
|
-
|
|
25
|
-
expect(a.dom.strings).to.equal(b.dom.strings);
|
|
26
|
-
expect(htmlTemplateCache.get(a.dom.strings)).to.equal(htmlTemplateCache.get(b.dom.strings));
|
|
27
|
-
});
|
|
28
|
-
});
|
package/target/lib/shadow.d.ts
DELETED
package/target/lib/shadow.js
DELETED
package/target/lib/shadow.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shadow.js","sourceRoot":"","sources":["../../src/lib/shadow.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,MAAM,CACpB,CAAY,EACZ,IAAyC;IAEzC,OAAO,UAAsB,MAAS;QACpC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC;QAEjC,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
|