@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.
Files changed (81) hide show
  1. package/README.md +67 -29
  2. package/package.json +5 -4
  3. package/src/lib/attr.test.ts +122 -48
  4. package/src/lib/attr.ts +61 -34
  5. package/src/lib/element.test.ts +89 -16
  6. package/src/lib/element.ts +74 -38
  7. package/src/lib/lifecycle.test.ts +31 -0
  8. package/src/lib/lifecycle.ts +9 -0
  9. package/src/lib/listen.test.ts +88 -0
  10. package/src/lib/listen.ts +27 -4
  11. package/src/lib/metadata.ts +17 -3
  12. package/src/lib/query.test.ts +53 -0
  13. package/src/lib/query.ts +37 -0
  14. package/src/lib/result.ts +2 -26
  15. package/src/lib/tags.ts +22 -64
  16. package/src/lib/template.test.ts +95 -0
  17. package/src/lib/template.ts +115 -0
  18. package/src/lib.ts +3 -3
  19. package/target/lib/attr.d.ts +4 -1
  20. package/target/lib/attr.js +49 -28
  21. package/target/lib/attr.js.map +1 -1
  22. package/target/lib/attr.test.js +277 -147
  23. package/target/lib/attr.test.js.map +1 -1
  24. package/target/lib/element.d.ts +6 -1
  25. package/target/lib/element.js +58 -29
  26. package/target/lib/element.js.map +1 -1
  27. package/target/lib/element.test.js +186 -64
  28. package/target/lib/element.test.js.map +1 -1
  29. package/target/lib/lifecycle.d.ts +1 -0
  30. package/target/lib/lifecycle.js +8 -0
  31. package/target/lib/lifecycle.js.map +1 -0
  32. package/target/lib/lifecycle.test.js +48 -0
  33. package/target/lib/lifecycle.test.js.map +1 -0
  34. package/target/lib/listen.d.ts +2 -1
  35. package/target/lib/listen.js +21 -3
  36. package/target/lib/listen.js.map +1 -1
  37. package/target/lib/listen.test.js +159 -0
  38. package/target/lib/listen.test.js.map +1 -0
  39. package/target/lib/metadata.d.ts +14 -3
  40. package/target/lib/metadata.js +2 -2
  41. package/target/lib/metadata.js.map +1 -1
  42. package/target/lib/query.d.ts +9 -0
  43. package/target/lib/query.js +24 -0
  44. package/target/lib/query.js.map +1 -0
  45. package/target/lib/query.test.js +78 -0
  46. package/target/lib/query.test.js.map +1 -0
  47. package/target/lib/result.d.ts +2 -8
  48. package/target/lib/result.js +1 -19
  49. package/target/lib/result.js.map +1 -1
  50. package/target/lib/tags.d.ts +10 -20
  51. package/target/lib/tags.js +17 -29
  52. package/target/lib/tags.js.map +1 -1
  53. package/target/lib/template.d.ts +9 -0
  54. package/target/lib/template.js +83 -0
  55. package/target/lib/template.js.map +1 -0
  56. package/target/lib/template.test.d.ts +1 -0
  57. package/target/lib/template.test.js +70 -0
  58. package/target/lib/template.test.js.map +1 -0
  59. package/target/lib.d.ts +3 -3
  60. package/target/lib.js +3 -3
  61. package/target/lib.js.map +1 -1
  62. package/src/lib/shadow.test.ts +0 -40
  63. package/src/lib/shadow.ts +0 -16
  64. package/src/lib/tag-name.test.ts +0 -13
  65. package/src/lib/tag-name.ts +0 -10
  66. package/src/lib/tags.test.ts +0 -28
  67. package/target/lib/shadow.d.ts +0 -2
  68. package/target/lib/shadow.js +0 -10
  69. package/target/lib/shadow.js.map +0 -1
  70. package/target/lib/shadow.test.js +0 -69
  71. package/target/lib/shadow.test.js.map +0 -1
  72. package/target/lib/tag-name.d.ts +0 -1
  73. package/target/lib/tag-name.js +0 -6
  74. package/target/lib/tag-name.js.map +0 -1
  75. package/target/lib/tag-name.test.js +0 -36
  76. package/target/lib/tag-name.test.js.map +0 -1
  77. package/target/lib/tags.test.js +0 -23
  78. package/target/lib/tags.test.js.map +0 -1
  79. /package/target/lib/{shadow.test.d.ts → lifecycle.test.d.ts} +0 -0
  80. /package/target/lib/{tag-name.test.d.ts → listen.test.d.ts} +0 -0
  81. /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"}
@@ -1,9 +1,3 @@
1
- export declare abstract class ShadowResult {
2
- #private;
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
  }
@@ -1,20 +1,2 @@
1
- export class ShadowResult {
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
@@ -1 +1 @@
1
- {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/lib/result.ts"],"names":[],"mappings":"AAAA,MAAM,OAAgB,YAAY;IAChC,OAAO,CAAuB;IAC9B,MAAM,CAAQ;IAEd,OAAO,GAA2B,SAAS,CAAC;IAE5C,IAAI,MAAM;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,YAAY,GAAyB,EAAE,GAAG,MAAa;QACrD,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,IAAgB;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;CAGF"}
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/lib/result.ts"],"names":[],"mappings":""}
@@ -1,23 +1,13 @@
1
1
  import { ShadowResult } from './result.js';
2
- type Tags = keyof HTMLElementTagNameMap;
3
- type SVGTags = keyof SVGElementTagNameMap;
4
- type MathTags = keyof MathMLElementTagNameMap;
5
- export declare const htmlTemplateCache: WeakMap<TemplateStringsArray, HTMLTemplateElement>;
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 const styleSheetCache: WeakMap<TemplateStringsArray, CSSStyleSheet>;
19
- export declare class CSSResult extends ShadowResult {
20
- apply(root: ShadowRoot): void;
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>;
@@ -1,40 +1,28 @@
1
- import { ShadowResult } from './result.js';
2
- export const htmlTemplateCache = new WeakMap();
3
- export class HTMLResult extends ShadowResult {
4
- query(query) {
5
- return this.shadow.querySelector(query);
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
- queryAll(query) {
8
- return this.shadow.querySelectorAll(query);
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 const styleSheetCache = new WeakMap();
27
- export class CSSResult extends ShadowResult {
28
- apply(root) {
29
- let sheet;
30
- if (styleSheetCache.has(this.strings)) {
31
- sheet = styleSheetCache.get(this.strings);
32
- }
33
- else {
34
- sheet = new CSSStyleSheet();
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) {
@@ -1 +1 @@
1
- {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/lib/tags.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAA6C,CAAC;AAE1F,MAAM,OAAO,UAAW,SAAQ,YAAY;IAK1C,KAAK,CAAiB,KAAQ;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAI,KAAK,CAAC,CAAC;IAC7C,CAAC;IAMD,QAAQ,CAAiB,KAAQ;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAI,KAAK,CAAC,CAAC;IAChD,CAAC;IAKD,KAAK,CAAC,IAAgB;QACpB,IAAI,QAA6B,CAAC;QAElC,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAwB,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAE9C,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;CACF;AAED,MAAM,UAAU,IAAI,CAAC,OAA6B,EAAE,GAAG,MAAa;IAClE,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,EAAuC,CAAC;AAElF,MAAM,OAAO,SAAU,SAAQ,YAAY;IACzC,KAAK,CAAC,IAAgB;QACpB,IAAI,KAAoB,CAAC;QAEzB,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAkB,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;YAE5B,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAChE,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"}
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,YAAY,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
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"}
@@ -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
- }
@@ -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
- });
@@ -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
- }
@@ -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
- });
@@ -1,2 +0,0 @@
1
- import { ShadowResult } from './result.js';
2
- export declare function shadow<This extends HTMLElement, T extends ShadowResult>(_: undefined, _ctx: ClassFieldDecoratorContext<This, T>): (this: This, result: T) => T;
@@ -1,10 +0,0 @@
1
- export function shadow(_, _ctx) {
2
- return function (result) {
3
- if (!this.shadowRoot) {
4
- this.attachShadow({ mode: 'open' });
5
- }
6
- result.execute(this.shadowRoot);
7
- return result;
8
- };
9
- }
10
- //# sourceMappingURL=shadow.js.map
@@ -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"}