@joist/element 4.0.0-next.4 → 4.0.0-next.6

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 (56) hide show
  1. package/README.md +2 -2
  2. package/package.json +4 -3
  3. package/src/lib/attr.test.ts +107 -98
  4. package/src/lib/attr.ts +2 -2
  5. package/src/lib/element.test.ts +84 -80
  6. package/src/lib/element.ts +5 -13
  7. package/src/lib/lifecycle.test.ts +31 -0
  8. package/src/lib/lifecycle.ts +9 -0
  9. package/src/lib/listen.ts +1 -1
  10. package/src/lib/metadata.ts +1 -0
  11. package/src/lib/query.test.ts +43 -44
  12. package/src/lib/query.ts +1 -1
  13. package/src/lib/result.ts +2 -22
  14. package/src/lib/tags.ts +28 -13
  15. package/src/lib/template.test.ts +65 -0
  16. package/src/lib/template.ts +132 -0
  17. package/src/lib.ts +3 -2
  18. package/target/lib/attr.d.ts +1 -1
  19. package/target/lib/attr.js +1 -1
  20. package/target/lib/attr.js.map +1 -1
  21. package/target/lib/attr.test.js +258 -252
  22. package/target/lib/attr.test.js.map +1 -1
  23. package/target/lib/element.d.ts +2 -5
  24. package/target/lib/element.js +3 -9
  25. package/target/lib/element.js.map +1 -1
  26. package/target/lib/element.test.js +181 -179
  27. package/target/lib/element.test.js.map +1 -1
  28. package/target/lib/lifecycle.d.ts +1 -0
  29. package/target/lib/lifecycle.js +8 -0
  30. package/target/lib/lifecycle.js.map +1 -0
  31. package/target/lib/lifecycle.test.d.ts +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 +1 -1
  35. package/target/lib/listen.js.map +1 -1
  36. package/target/lib/metadata.d.ts +1 -0
  37. package/target/lib/metadata.js +1 -0
  38. package/target/lib/metadata.js.map +1 -1
  39. package/target/lib/query.d.ts +1 -1
  40. package/target/lib/query.test.js +72 -74
  41. package/target/lib/query.test.js.map +1 -1
  42. package/target/lib/result.d.ts +2 -9
  43. package/target/lib/result.js +1 -14
  44. package/target/lib/result.js.map +1 -1
  45. package/target/lib/tags.d.ts +11 -7
  46. package/target/lib/tags.js +20 -11
  47. package/target/lib/tags.js.map +1 -1
  48. package/target/lib/template.d.ts +6 -0
  49. package/target/lib/template.js +91 -0
  50. package/target/lib/template.js.map +1 -0
  51. package/target/lib/template.test.d.ts +1 -0
  52. package/target/lib/template.test.js +47 -0
  53. package/target/lib/template.test.js.map +1 -0
  54. package/target/lib.d.ts +3 -2
  55. package/target/lib.js +3 -2
  56. package/target/lib.js.map +1 -1
@@ -1,80 +1,78 @@
1
1
  import { __esDecorate, __runInitializers } from "tslib";
2
- import { expect } from '@open-wc/testing';
2
+ import { expect } from 'chai';
3
3
  import { element } from './element.js';
4
4
  import { query } from './query.js';
5
5
  import { html } from './tags.js';
6
- describe('query', () => {
7
- it('should work', () => {
8
- let MyElement = (() => {
9
- let _classDecorators = [element({
10
- tagName: 'query-test-1',
11
- shadow: [
12
- html `
13
- <form>
14
- <input id="fname" name="fname" />
15
- <input id="lname" name="lname" />
16
- </form>
17
- `
18
- ]
19
- })];
20
- let _classDescriptor;
21
- let _classExtraInitializers = [];
22
- let _classThis;
23
- let _classSuper = HTMLElement;
24
- var MyElement = class extends _classSuper {
25
- static { _classThis = this; }
26
- static {
27
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
28
- __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
29
- MyElement = _classThis = _classDescriptor.value;
30
- if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
31
- __runInitializers(_classThis, _classExtraInitializers);
32
- }
33
- fname = query('#fname');
34
- lname = query('#lname');
35
- };
36
- return MyElement = _classThis;
37
- })();
38
- const el = new MyElement();
39
- expect(el.fname()).to.equal(el.shadowRoot?.querySelector('#fname'));
40
- expect(el.lname()).to.equal(el.shadowRoot?.querySelector('#lname'));
41
- });
42
- it('should patch the selected item', () => {
43
- let MyElement = (() => {
44
- let _classDecorators = [element({
45
- tagName: 'query-test-2',
46
- shadow: [
47
- html `
48
- <form>
49
- <input id="fname" name="fname" />
50
- <input id="lname" name="lname" />
51
- </form>
52
- `
53
- ]
54
- })];
55
- let _classDescriptor;
56
- let _classExtraInitializers = [];
57
- let _classThis;
58
- let _classSuper = HTMLElement;
59
- var MyElement = class extends _classSuper {
60
- static { _classThis = this; }
61
- static {
62
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
63
- __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
64
- MyElement = _classThis = _classDescriptor.value;
65
- if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
66
- __runInitializers(_classThis, _classExtraInitializers);
67
- }
68
- fname = query('#fname');
69
- lname = query('#lname');
70
- };
71
- return MyElement = _classThis;
72
- })();
73
- const el = new MyElement();
74
- el.fname({ value: 'Foo' });
75
- el.lname({ value: 'Bar' });
76
- expect(el.shadowRoot?.querySelector('#fname')?.value).to.equal('Foo');
77
- expect(el.shadowRoot?.querySelector('#lname')?.value).to.equal('Bar');
78
- });
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');
79
77
  });
80
78
  //# sourceMappingURL=query.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.test.js","sourceRoot":"","sources":["../../src/lib/query.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;YAYf,SAAS;oCAXd,OAAO,CAAC;oBACP,OAAO,EAAE,cAAc;oBACvB,MAAM,EAAE;wBACN,IAAI,CAAA;;;;;SAKH;qBACF;iBACF,CAAC;;;;8BACsB,WAAW;iCAAnB,SAAQ,WAAW;;;;oBAAnC,6KAGC;;;oBAHK,uDAAS;;gBACb,KAAK,GAAG,KAAK,CAAmB,QAAQ,CAAC,CAAC;gBAC1C,KAAK,GAAG,KAAK,CAAmB,QAAQ,CAAC,CAAC;;;;QAG5C,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;QAE3B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YAYlC,SAAS;oCAXd,OAAO,CAAC;oBACP,OAAO,EAAE,cAAc;oBACvB,MAAM,EAAE;wBACN,IAAI,CAAA;;;;;SAKH;qBACF;iBACF,CAAC;;;;8BACsB,WAAW;iCAAnB,SAAQ,WAAW;;;;oBAAnC,6KAGC;;;oBAHK,uDAAS;;gBACb,KAAK,GAAG,KAAK,CAAmB,QAAQ,CAAC,CAAC;gBAC1C,KAAK,GAAG,KAAK,CAAmB,QAAQ,CAAC,CAAC;;;;QAG5C,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;QAC3B,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3B,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAE3B,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAmB,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxF,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAmB,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
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,10 +1,3 @@
1
- export interface ShadowResult {
2
- run(el: HTMLElement): void;
3
- }
4
- export declare abstract class JoistShadowResult implements ShadowResult {
5
- strings: TemplateStringsArray;
6
- values: any[];
7
- constructor(raw: TemplateStringsArray, ...values: any[]);
8
- run(el: HTMLElement): void;
9
- abstract setup(root: ShadowRoot): void;
1
+ export interface ShadowResult<T extends HTMLElement> {
2
+ apply(el: T): void;
10
3
  }
@@ -1,15 +1,2 @@
1
- export class JoistShadowResult {
2
- strings;
3
- values;
4
- constructor(raw, ...values) {
5
- this.strings = raw;
6
- this.values = values;
7
- }
8
- run(el) {
9
- if (!el.shadowRoot) {
10
- throw new Error('ShadowResult has not been applied');
11
- }
12
- this.setup(el.shadowRoot);
13
- }
14
- }
1
+ export {};
15
2
  //# sourceMappingURL=result.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/lib/result.ts"],"names":[],"mappings":"AAIA,MAAM,OAAgB,iBAAiB;IACrC,OAAO,CAAC;IACR,MAAM,CAAC;IAEP,YAAY,GAAyB,EAAE,GAAG,MAAa;QACrD,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,GAAG,CAAC,EAAe;QACjB,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;CAGF"}
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/lib/result.ts"],"names":[],"mappings":""}
@@ -1,9 +1,13 @@
1
- import { JoistShadowResult } from './result.js';
2
- export declare class HTMLResult extends JoistShadowResult {
3
- setup(root: ShadowRoot): void;
1
+ import { ShadowResult } from './result.js';
2
+ export declare class HTMLResult<T extends HTMLElement> implements ShadowResult<T> {
3
+ #private;
4
+ constructor(raw: TemplateStringsArray, ..._values: any[]);
5
+ apply(el: T): void;
4
6
  }
5
- export declare function html(strings: TemplateStringsArray, ...values: any[]): HTMLResult;
6
- export declare class CSSResult extends JoistShadowResult {
7
- setup(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;
8
12
  }
9
- export declare function css(strings: TemplateStringsArray): CSSResult;
13
+ export declare function css<T extends HTMLElement>(strings: TemplateStringsArray): CSSResult<T>;
@@ -1,19 +1,28 @@
1
- import { JoistShadowResult } from './result.js';
2
- export class HTMLResult extends JoistShadowResult {
3
- setup(root) {
4
- let template = document.createElement('template');
5
- template.innerHTML = concat(this.strings);
6
- root.append(template.content.cloneNode(true));
1
+ export class HTMLResult {
2
+ #template;
3
+ constructor(raw, ..._values) {
4
+ this.#template = document.createElement('template');
5
+ this.#template.innerHTML = concat(raw);
6
+ }
7
+ apply(el) {
8
+ if (el.shadowRoot) {
9
+ el.shadowRoot.append(this.#template.content.cloneNode(true));
10
+ }
7
11
  }
8
12
  }
9
13
  export function html(strings, ...values) {
10
14
  return new HTMLResult(strings, ...values);
11
15
  }
12
- export class CSSResult extends JoistShadowResult {
13
- setup(root) {
14
- let sheet = new CSSStyleSheet();
15
- sheet.replaceSync(concat(this.strings));
16
- root.adoptedStyleSheets = [...root.adoptedStyleSheets, sheet];
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];
25
+ }
17
26
  }
18
27
  }
19
28
  export function css(strings) {
@@ -1 +1 @@
1
- {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/lib/tags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,OAAO,UAAW,SAAQ,iBAAiB;IAC/C,KAAK,CAAC,IAAgB;QACpB,IAAI,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAClD,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1C,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,OAAO,SAAU,SAAQ,iBAAiB;IAC9C,KAAK,CAAC,IAAgB;QACpB,IAAI,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAExC,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,6 @@
1
+ export interface TemplateOpts {
2
+ }
3
+ export interface RenderOpts {
4
+ refresh?: boolean;
5
+ }
6
+ export declare function template(_templateOpts?: TemplateOpts): <T extends HTMLElement>(this: T, renderOpts?: RenderOpts) => void;
@@ -0,0 +1,91 @@
1
+ const TOKEN_PREFIX = '#:';
2
+ class NodeMap extends Map {
3
+ }
4
+ export function template(_templateOpts) {
5
+ let initialized = false;
6
+ const nodes = new NodeMap();
7
+ return function render(renderOpts) {
8
+ if (renderOpts?.refresh) {
9
+ initialized = false;
10
+ nodes.clear();
11
+ }
12
+ if (initialized) {
13
+ return updateNodes(this, nodes);
14
+ }
15
+ initializeNodes(this, nodes);
16
+ initialized = true;
17
+ };
18
+ }
19
+ function initializeNodes(el, nodes) {
20
+ const iterator = document.createTreeWalker(el.shadowRoot || el, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT);
21
+ while (iterator.nextNode()) {
22
+ const res = trackNode(el, iterator.currentNode, nodes);
23
+ if (res !== null) {
24
+ iterator.currentNode = res;
25
+ }
26
+ }
27
+ }
28
+ function updateNodes(el, nodes) {
29
+ for (let [node, prop] of nodes) {
30
+ const value = Reflect.get(el, prop);
31
+ const isAttribute = node.nodeType === Node.ATTRIBUTE_NODE;
32
+ if (isAttribute && isBooleanAttributeNode(node)) {
33
+ manageBooleanAttribute(el, node);
34
+ }
35
+ else if (value !== node.nodeValue) {
36
+ node.nodeValue = value;
37
+ }
38
+ }
39
+ }
40
+ function trackNode(el, node, nodes) {
41
+ switch (node.nodeType) {
42
+ case Node.COMMENT_NODE: {
43
+ const nodeValue = node.nodeValue?.trim();
44
+ if (nodeValue?.startsWith(TOKEN_PREFIX)) {
45
+ if (node.parentNode) {
46
+ const propertyKey = nodeValue.replace(TOKEN_PREFIX, '');
47
+ const textNode = document.createTextNode(Reflect.get(el, propertyKey));
48
+ node.parentNode.replaceChild(textNode, node);
49
+ nodes.set(textNode, propertyKey);
50
+ return textNode;
51
+ }
52
+ }
53
+ break;
54
+ }
55
+ case Node.ELEMENT_NODE: {
56
+ const element = node;
57
+ for (let attr of element.attributes) {
58
+ const nodeValue = attr.value.trim();
59
+ if (isBooleanAttributeNode(attr)) {
60
+ manageBooleanAttribute(el, attr);
61
+ nodes.set(attr, attr.value);
62
+ }
63
+ else if (nodeValue.startsWith(TOKEN_PREFIX)) {
64
+ const propertyKey = nodeValue.replace(TOKEN_PREFIX, '');
65
+ attr.value = Reflect.get(el, propertyKey);
66
+ nodes.set(attr, propertyKey);
67
+ }
68
+ }
69
+ break;
70
+ }
71
+ }
72
+ return null;
73
+ }
74
+ function isBooleanAttributeNode(attr) {
75
+ return attr.name.startsWith(TOKEN_PREFIX);
76
+ }
77
+ function manageBooleanAttribute(el, attr) {
78
+ const realAttributeName = attr.name.replace(TOKEN_PREFIX, '');
79
+ if (attr.ownerElement) {
80
+ let value = attr.value.startsWith('!')
81
+ ? !Reflect.get(el, attr.value.replace('!', ''))
82
+ : Reflect.get(el, attr.value);
83
+ if (value) {
84
+ attr.ownerElement.setAttribute(realAttributeName, '');
85
+ }
86
+ else {
87
+ attr.ownerElement.removeAttribute(realAttributeName);
88
+ }
89
+ }
90
+ }
91
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/lib/template.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,MAAM,OAAQ,SAAQ,GAAiB;CAAG;AAQ1C,MAAM,UAAU,QAAQ,CAAC,aAA4B;IAEnD,IAAI,WAAW,GAAG,KAAK,CAAC;IAGxB,MAAM,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;IAE5B,OAAO,SAAS,MAAM,CAAiC,UAAuB;QAC5E,IAAI,UAAU,EAAE,OAAO,EAAE,CAAC;YACxB,WAAW,GAAG,KAAK,CAAC;YACpB,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;QAGD,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAE7B,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,EAAe,EAAE,KAAc;IACtD,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CACxC,EAAE,CAAC,UAAU,IAAI,EAAE,EACnB,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAClD,CAAC;IAEF,OAAO,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAEvD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAe,EAAE,KAAc;IAClD,KAAK,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAEpC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,cAAc,CAAC;QAE1D,IAAI,WAAW,IAAI,sBAAsB,CAAC,IAAY,CAAC,EAAE,CAAC;YACxD,sBAAsB,CAAC,EAAE,EAAE,IAAY,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;AACH,CAAC;AAKD,SAAS,SAAS,CAAC,EAAe,EAAE,IAAU,EAAE,KAAc;IAC5D,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YACvB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;YAEzC,IAAI,SAAS,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;oBACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;oBAEvE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBAE7C,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;oBAEjC,OAAO,QAAQ,CAAC;gBAClB,CAAC;YACH,CAAC;YAED,MAAM;QACR,CAAC;QAED,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YACvB,MAAM,OAAO,GAAG,IAAe,CAAC;YAEhC,KAAK,IAAI,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAEpC,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,sBAAsB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;oBAEjC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC;qBAAM,IAAI,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC9C,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;oBAExD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;oBAE1C,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;YAED,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAU;IACxC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,sBAAsB,CAAC,EAAe,EAAE,IAAU;IACzD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAE9D,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YACpC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC/C,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAEhC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,47 @@
1
+ import { assert } from 'chai';
2
+ import { template } from './template.js';
3
+ const TESTS = [
4
+ function comments(el, root) {
5
+ it(`should intialize template comments ${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
+ <!--#:title-->
11
+
12
+ <ul>
13
+ <li><!--#:ariaLabel--></li>
14
+ <li><!--#:ariaDescription--></li>
15
+ </ul>
16
+ `;
17
+ const render = template();
18
+ render.call(el);
19
+ assert.equal(root.innerHTML
20
+ .split('\n')
21
+ .map((res) => res.trim())
22
+ .join(''), 'Hello World<ul><li>This is the label</li><li>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();
33
+ render.call(el);
34
+ assert.equal(root.innerHTML
35
+ .split('\n')
36
+ .map((res) => res.trim())
37
+ .join(''), '<ul aria-label="This is the label" aria-description="This is the description"></ul>');
38
+ });
39
+ }
40
+ ];
41
+ for (let test of TESTS) {
42
+ const lightEl = document.createElement('div');
43
+ test(lightEl, lightEl);
44
+ const shadowEl = document.createElement('div');
45
+ test(shadowEl, shadowEl.attachShadow({ mode: 'open' }));
46
+ }
47
+ //# sourceMappingURL=template.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.test.js","sourceRoot":"","sources":["../../src/lib/template.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,MAAM,KAAK,GAAG;IACZ,SAAS,QAAQ,CAAC,EAAe,EAAE,IAA8B;QAC/D,EAAE,CAAC,sCAAsC,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE;YACzG,EAAE,CAAC,KAAK,GAAG,aAAa,CAAC;YACzB,EAAE,CAAC,SAAS,GAAG,mBAAmB,CAAC;YACnC,EAAE,CAAC,eAAe,GAAG,yBAAyB,CAAC;YAE/C,IAAI,CAAC,SAAS,GAAY;;;;;;;OAOzB,CAAC;YAEF,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;YAE1B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,CAAC,KAAK,CACV,IAAI,CAAC,SAAS;iBACX,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;iBACxB,IAAI,CAAC,EAAE,CAAC,EACX,gFAAgF,CACjF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACD,SAAS,UAAU,CAAC,EAAe,EAAE,IAA8B;QACjE,EAAE,CAAC,wCAAwC,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE;YAC3G,EAAE,CAAC,SAAS,GAAG,mBAAmB,CAAC;YACnC,EAAE,CAAC,eAAe,GAAG,yBAAyB,CAAC;YAE/C,IAAI,CAAC,SAAS,GAAY;;OAEzB,CAAC;YAEF,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC;YAE1B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEhB,MAAM,CAAC,KAAK,CACV,IAAI,CAAC,SAAS;iBACX,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;iBACxB,IAAI,CAAC,EAAE,CAAC,EACX,qFAAqF,CACtF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC"}
package/target/lib.d.ts CHANGED
@@ -1,6 +1,7 @@
1
- export { JoistShadowResult as TemplateResult } from './lib/result.js';
2
1
  export { css, html, HTMLResult, CSSResult } from './lib/tags.js';
3
2
  export { attr } from './lib/attr.js';
4
3
  export { listen } from './lib/listen.js';
5
- export { element, LifeCycle } from './lib/element.js';
4
+ export { element } from './lib/element.js';
6
5
  export { query } from './lib/query.js';
6
+ export { template } from './lib/template.js';
7
+ export { ready } from './lib/lifecycle.js';
package/target/lib.js CHANGED
@@ -1,7 +1,8 @@
1
- export { JoistShadowResult as TemplateResult } from './lib/result.js';
2
1
  export { css, html, HTMLResult, CSSResult } from './lib/tags.js';
3
2
  export { attr } from './lib/attr.js';
4
3
  export { listen } from './lib/listen.js';
5
- export { element, LifeCycle } from './lib/element.js';
4
+ export { element } from './lib/element.js';
6
5
  export { query } from './lib/query.js';
6
+ export { template } from './lib/template.js';
7
+ export { ready } from './lib/lifecycle.js';
7
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,iBAAiB,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtE,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,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,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,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC"}