@joist/element 4.0.0-next.1 → 4.0.0-next.3

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 (52) hide show
  1. package/README.md +20 -23
  2. package/package.json +1 -1
  3. package/src/lib/attr.test.ts +85 -20
  4. package/src/lib/attr.ts +61 -34
  5. package/src/lib/element.test.ts +70 -8
  6. package/src/lib/element.ts +61 -39
  7. package/src/lib/listen.ts +10 -4
  8. package/src/lib/metadata.ts +10 -3
  9. package/src/lib/result.ts +12 -16
  10. package/src/lib/tags.ts +9 -66
  11. package/src/lib.ts +1 -3
  12. package/target/lib/attr.d.ts +4 -1
  13. package/target/lib/attr.js +49 -28
  14. package/target/lib/attr.js.map +1 -1
  15. package/target/lib/attr.test.js +148 -24
  16. package/target/lib/attr.test.js.map +1 -1
  17. package/target/lib/element.d.ts +6 -1
  18. package/target/lib/element.js +47 -31
  19. package/target/lib/element.js.map +1 -1
  20. package/target/lib/element.test.js +131 -17
  21. package/target/lib/element.test.js.map +1 -1
  22. package/target/lib/listen.d.ts +2 -1
  23. package/target/lib/listen.js +6 -3
  24. package/target/lib/listen.js.map +1 -1
  25. package/target/lib/metadata.d.ts +11 -3
  26. package/target/lib/metadata.js +0 -1
  27. package/target/lib/metadata.js.map +1 -1
  28. package/target/lib/result.d.ts +6 -3
  29. package/target/lib/result.js +7 -4
  30. package/target/lib/result.js.map +1 -1
  31. package/target/lib/tags.d.ts +5 -17
  32. package/target/lib/tags.js +5 -11
  33. package/target/lib/tags.js.map +1 -1
  34. package/target/lib.d.ts +1 -3
  35. package/target/lib.js +1 -3
  36. package/target/lib.js.map +1 -1
  37. package/src/lib/shadow.test.ts +0 -40
  38. package/src/lib/shadow.ts +0 -16
  39. package/src/lib/tag-name.test.ts +0 -13
  40. package/src/lib/tag-name.ts +0 -10
  41. package/target/lib/shadow.d.ts +0 -2
  42. package/target/lib/shadow.js +0 -10
  43. package/target/lib/shadow.js.map +0 -1
  44. package/target/lib/shadow.test.d.ts +0 -1
  45. package/target/lib/shadow.test.js +0 -69
  46. package/target/lib/shadow.test.js.map +0 -1
  47. package/target/lib/tag-name.d.ts +0 -1
  48. package/target/lib/tag-name.js +0 -6
  49. package/target/lib/tag-name.js.map +0 -1
  50. package/target/lib/tag-name.test.d.ts +0 -1
  51. package/target/lib/tag-name.test.js +0 -36
  52. package/target/lib/tag-name.test.js.map +0 -1
package/src/lib/tags.ts CHANGED
@@ -1,57 +1,9 @@
1
- /**
2
- * NOTE: TemplateStringsArray can be used to cache via a WeakMap.
3
- *
4
- * function html(strs: TemplateStringsArray) {
5
- * return strs
6
- * }
7
- *
8
- * class Foo {
9
- * hello = html`world`;
10
- * }
11
- *
12
- * // these will be the same instance of TemplateStringsArray
13
- * new Foo().hello === new Foo().hello
14
- */
1
+ import { JoistShadowResult } from './result.js';
15
2
 
16
- import { ShadowResult } from './result.js';
17
-
18
- type Tags = keyof HTMLElementTagNameMap;
19
- type SVGTags = keyof SVGElementTagNameMap;
20
- type MathTags = keyof MathMLElementTagNameMap;
21
-
22
- export const htmlTemplateCache = new WeakMap<TemplateStringsArray, HTMLTemplateElement>();
23
-
24
- export class HTMLResult extends ShadowResult {
25
- query<K extends Tags>(selectors: K): HTMLElementTagNameMap[K] | null;
26
- query<K extends SVGTags>(selectors: K): SVGElementTagNameMap[K] | null;
27
- query<K extends MathTags>(selectors: K): MathMLElementTagNameMap[K] | null;
28
- query<E extends Element = Element>(selectors: string): E | null;
29
- query<K extends Tags>(query: K) {
30
- return this.shadow.querySelector<K>(query);
31
- }
32
-
33
- queryAll<K extends Tags>(selectors: K): NodeListOf<HTMLElementTagNameMap[K]>;
34
- queryAll<K extends SVGTags>(selectors: K): NodeListOf<SVGElementTagNameMap[K]>;
35
- queryAll<K extends MathTags>(selectors: K): NodeListOf<MathMLElementTagNameMap[K]>;
36
- queryAll<E extends Element = Element>(selectors: string): NodeListOf<E>;
37
- queryAll<K extends Tags>(query: K) {
38
- return this.shadow.querySelectorAll<K>(query);
39
- }
40
-
41
- /**
42
- * THe HTMLTemplateElement itself will be cached but a new instance of the result returned
43
- */
44
- apply(root: ShadowRoot): void {
45
- let template: HTMLTemplateElement;
46
-
47
- if (htmlTemplateCache.has(this.strings)) {
48
- template = htmlTemplateCache.get(this.strings) as HTMLTemplateElement;
49
- } else {
50
- template = document.createElement('template');
51
-
52
- template.innerHTML = concat(this.strings);
53
- htmlTemplateCache.set(this.strings, template);
54
- }
3
+ export class HTMLResult extends JoistShadowResult {
4
+ setup(root: ShadowRoot): void {
5
+ let template = document.createElement('template');
6
+ template.innerHTML = concat(this.strings);
55
7
 
56
8
  root.append(template.content.cloneNode(true));
57
9
  }
@@ -61,19 +13,10 @@ export function html(strings: TemplateStringsArray, ...values: any[]): HTMLResul
61
13
  return new HTMLResult(strings, ...values);
62
14
  }
63
15
 
64
- export const styleSheetCache = new WeakMap<TemplateStringsArray, CSSStyleSheet>();
65
-
66
- export class CSSResult extends ShadowResult {
67
- apply(root: ShadowRoot): void {
68
- let sheet: CSSStyleSheet;
69
-
70
- if (styleSheetCache.has(this.strings)) {
71
- sheet = styleSheetCache.get(this.strings) as CSSStyleSheet;
72
- } else {
73
- sheet = new CSSStyleSheet();
74
-
75
- sheet.replaceSync(concat(this.strings));
76
- }
16
+ export class CSSResult extends JoistShadowResult {
17
+ setup(root: ShadowRoot): void {
18
+ let sheet = new CSSStyleSheet();
19
+ sheet.replaceSync(concat(this.strings));
77
20
 
78
21
  root.adoptedStyleSheets = [...root.adoptedStyleSheets, sheet];
79
22
  }
package/src/lib.ts CHANGED
@@ -1,7 +1,5 @@
1
- export { ShadowResult as TemplateResult } from './lib/result.js';
1
+ export { JoistShadowResult as TemplateResult } from './lib/result.js';
2
2
  export { css, html, HTMLResult, CSSResult } from './lib/tags.js';
3
- export { shadow } from './lib/shadow.js';
4
3
  export { attr } from './lib/attr.js';
5
4
  export { listen } from './lib/listen.js';
6
- export { tagName } from './lib/tag-name.js';
7
5
  export { element } from './lib/element.js';
@@ -1 +1,4 @@
1
- export declare function attr<This extends HTMLElement>({ get, set }: ClassAccessorDecoratorTarget<This, unknown>, ctx: ClassAccessorDecoratorContext<This>): ClassAccessorDecoratorResult<This, any>;
1
+ export interface AttrOpts {
2
+ observe?: boolean;
3
+ }
4
+ export declare function attr(opts?: AttrOpts): <This extends HTMLElement>({ get, set }: ClassAccessorDecoratorTarget<This, unknown>, ctx: ClassAccessorDecoratorContext<This>) => ClassAccessorDecoratorResult<This, any>;
@@ -1,35 +1,56 @@
1
1
  import { metadataStore } from './metadata.js';
2
- export function attr({ get, set }, ctx) {
3
- const name = String(ctx.name);
4
- const meta = metadataStore.read(ctx.metadata);
5
- meta.attrs.push(name);
6
- return {
7
- set(value) {
8
- if (value === true) {
9
- this.setAttribute(name, '');
10
- }
11
- else if (value === false) {
12
- this.removeAttribute(name);
13
- }
14
- else {
15
- this.setAttribute(name, String(value));
16
- }
17
- set.call(this, value);
18
- },
19
- get() {
20
- const ogValue = get.call(this);
21
- const attr = this.getAttribute(name);
22
- if (attr !== null) {
23
- if (attr === '') {
24
- return true;
2
+ export function attr(opts) {
3
+ return function attrDecorator({ get, set }, ctx) {
4
+ const attrName = parseAttrName(ctx.name);
5
+ const meta = metadataStore.read(ctx.metadata);
6
+ meta.attrs.push({
7
+ propName: ctx.name,
8
+ attrName,
9
+ observe: opts?.observe ?? true
10
+ });
11
+ return {
12
+ set(value) {
13
+ if (value === true) {
14
+ this.setAttribute(attrName, '');
15
+ }
16
+ else if (value === false) {
17
+ this.removeAttribute(attrName);
18
+ }
19
+ else {
20
+ this.setAttribute(attrName, String(value));
25
21
  }
26
- if (typeof ogValue === 'number') {
27
- return Number(attr);
22
+ set.call(this, value);
23
+ },
24
+ get() {
25
+ const ogValue = get.call(this);
26
+ const attr = this.getAttribute(attrName);
27
+ if (attr !== null) {
28
+ if (attr === '') {
29
+ return true;
30
+ }
31
+ if (typeof ogValue === 'number') {
32
+ return Number(attr);
33
+ }
34
+ return attr;
28
35
  }
29
- return attr;
36
+ return ogValue;
30
37
  }
31
- return ogValue;
32
- }
38
+ };
33
39
  };
34
40
  }
41
+ function parseAttrName(val) {
42
+ let value;
43
+ if (typeof val === 'symbol') {
44
+ if (val.description) {
45
+ value = val.description;
46
+ }
47
+ else {
48
+ throw new Error('Cannot handle Symbol property without description');
49
+ }
50
+ }
51
+ else {
52
+ value = val;
53
+ }
54
+ return value.toLowerCase().replaceAll(' ', '-');
55
+ }
35
56
  //# sourceMappingURL=attr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attr.js","sourceRoot":"","sources":["../../src/lib/attr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,UAAU,IAAI,CAClB,EAAE,GAAG,EAAE,GAAG,EAA+C,EACzD,GAAwC;IAExC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtB,OAAO;QACL,GAAG,CAAC,KAAc;YAChB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9B,CAAC;iBAAM,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;gBAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACzC,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,GAAG;YACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAErC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAElB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;oBAChB,OAAO,IAAI,CAAC;gBACd,CAAC;gBAGD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAChC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;gBAGD,OAAO,IAAI,CAAC;YACd,CAAC;YAGD,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"attr.js","sourceRoot":"","sources":["../../src/lib/attr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAM9C,MAAM,UAAU,IAAI,CAAC,IAAe;IAClC,OAAO,SAAS,aAAa,CAC3B,EAAE,GAAG,EAAE,GAAG,EAA+C,EACzD,GAAwC;QAExC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,QAAQ,EAAE,GAAG,CAAC,IAAI;YAClB,QAAQ;YACR,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,IAAI;SAC/B,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,CAAC,KAAc;gBAChB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClC,CAAC;qBAAM,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;oBAC3B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;gBACjC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBAED,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;YACD,GAAG;gBACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAEzC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAElB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;wBAChB,OAAO,IAAI,CAAC;oBACd,CAAC;oBAGD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;wBAChC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtB,CAAC;oBAGD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAGD,OAAO,OAAO,CAAC;YACjB,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,GAAoB;IACzC,IAAI,KAAa,CAAC;IAElB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YACpB,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC"}
@@ -1,9 +1,16 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
1
+ import { __esDecorate, __propKey, __runInitializers } from "tslib";
2
2
  import { expect, fixture, html } from '@open-wc/testing';
3
3
  import { attr } from './attr.js';
4
+ import { element } from './element.js';
4
5
  describe('@attr()', () => {
5
6
  it('should read and parse the correct values', async () => {
6
7
  let MyElement = (() => {
8
+ let _classDecorators = [element({
9
+ tagName: 'attr-test-1'
10
+ })];
11
+ let _classDescriptor;
12
+ let _classExtraInitializers = [];
13
+ let _classThis;
7
14
  let _classSuper = HTMLElement;
8
15
  let _value1_decorators;
9
16
  let _value1_initializers = [];
@@ -17,18 +24,22 @@ describe('@attr()', () => {
17
24
  let _value4_decorators;
18
25
  let _value4_initializers = [];
19
26
  let _value4_extraInitializers = [];
20
- return class MyElement extends _classSuper {
27
+ var MyElement = class extends _classSuper {
28
+ static { _classThis = this; }
21
29
  static {
22
30
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
23
- _value1_decorators = [attr];
24
- _value2_decorators = [attr];
25
- _value3_decorators = [attr];
26
- _value4_decorators = [attr];
31
+ _value1_decorators = [attr()];
32
+ _value2_decorators = [attr()];
33
+ _value3_decorators = [attr()];
34
+ _value4_decorators = [attr()];
27
35
  __esDecorate(this, null, _value1_decorators, { kind: "accessor", name: "value1", static: false, private: false, access: { has: obj => "value1" in obj, get: obj => obj.value1, set: (obj, value) => { obj.value1 = value; } }, metadata: _metadata }, _value1_initializers, _value1_extraInitializers);
28
36
  __esDecorate(this, null, _value2_decorators, { kind: "accessor", name: "value2", static: false, private: false, access: { has: obj => "value2" in obj, get: obj => obj.value2, set: (obj, value) => { obj.value2 = value; } }, metadata: _metadata }, _value2_initializers, _value2_extraInitializers);
29
37
  __esDecorate(this, null, _value3_decorators, { kind: "accessor", name: "value3", static: false, private: false, access: { has: obj => "value3" in obj, get: obj => obj.value3, set: (obj, value) => { obj.value3 = value; } }, metadata: _metadata }, _value3_initializers, _value3_extraInitializers);
30
38
  __esDecorate(this, null, _value4_decorators, { kind: "accessor", name: "value4", static: false, private: false, access: { has: obj => "value4" in obj, get: obj => obj.value4, set: (obj, value) => { obj.value4 = value; } }, metadata: _metadata }, _value4_initializers, _value4_extraInitializers);
31
- if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
39
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
40
+ MyElement = _classThis = _classDescriptor.value;
41
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
42
+ __runInitializers(_classThis, _classExtraInitializers);
32
43
  }
33
44
  #value1_accessor_storage = __runInitializers(this, _value1_initializers, 100);
34
45
  get value1() { return this.#value1_accessor_storage; }
@@ -47,9 +58,9 @@ describe('@attr()', () => {
47
58
  __runInitializers(this, _value4_extraInitializers);
48
59
  }
49
60
  };
61
+ return MyElement = _classThis;
50
62
  })();
51
- customElements.define('attr-test-2', MyElement);
52
- const el = await fixture(html `<attr-test-2 value2="2" value3 value4="world"></attr-test-2>`);
63
+ const el = await fixture(html `<attr-test-1 value2="2" value3 value4="world"></attr-test-1>`);
53
64
  expect(el.value1).to.equal(100);
54
65
  expect(el.value2).to.equal(2);
55
66
  expect(el.value3).to.equal(true);
@@ -57,6 +68,12 @@ describe('@attr()', () => {
57
68
  });
58
69
  it('should not write falsy props to attributes', async () => {
59
70
  let MyElement = (() => {
71
+ let _classDecorators = [element({
72
+ tagName: 'attr-test-2'
73
+ })];
74
+ let _classDescriptor;
75
+ let _classExtraInitializers = [];
76
+ let _classThis;
60
77
  let _classSuper = HTMLElement;
61
78
  let _value1_decorators;
62
79
  let _value1_initializers = [];
@@ -67,16 +84,20 @@ describe('@attr()', () => {
67
84
  let _value3_decorators;
68
85
  let _value3_initializers = [];
69
86
  let _value3_extraInitializers = [];
70
- return class MyElement extends _classSuper {
87
+ var MyElement = class extends _classSuper {
88
+ static { _classThis = this; }
71
89
  static {
72
90
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
73
- _value1_decorators = [attr];
74
- _value2_decorators = [attr];
75
- _value3_decorators = [attr];
91
+ _value1_decorators = [attr()];
92
+ _value2_decorators = [attr()];
93
+ _value3_decorators = [attr()];
76
94
  __esDecorate(this, null, _value1_decorators, { kind: "accessor", name: "value1", static: false, private: false, access: { has: obj => "value1" in obj, get: obj => obj.value1, set: (obj, value) => { obj.value1 = value; } }, metadata: _metadata }, _value1_initializers, _value1_extraInitializers);
77
95
  __esDecorate(this, null, _value2_decorators, { kind: "accessor", name: "value2", static: false, private: false, access: { has: obj => "value2" in obj, get: obj => obj.value2, set: (obj, value) => { obj.value2 = value; } }, metadata: _metadata }, _value2_initializers, _value2_extraInitializers);
78
96
  __esDecorate(this, null, _value3_decorators, { kind: "accessor", name: "value3", static: false, private: false, access: { has: obj => "value3" in obj, get: obj => obj.value3, set: (obj, value) => { obj.value3 = value; } }, metadata: _metadata }, _value3_initializers, _value3_extraInitializers);
79
- if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
97
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
98
+ MyElement = _classThis = _classDescriptor.value;
99
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
100
+ __runInitializers(_classThis, _classExtraInitializers);
80
101
  }
81
102
  #value1_accessor_storage = __runInitializers(this, _value1_initializers, undefined);
82
103
  get value1() { return this.#value1_accessor_storage; }
@@ -92,15 +113,21 @@ describe('@attr()', () => {
92
113
  __runInitializers(this, _value3_extraInitializers);
93
114
  }
94
115
  };
116
+ return MyElement = _classThis;
95
117
  })();
96
- customElements.define('attr-test-3', MyElement);
97
- const el = await fixture(html `<attr-test-3></attr-test-3>`);
118
+ const el = await fixture(html `<attr-test-2></attr-test-2>`);
98
119
  expect(el.hasAttribute('value1')).to.be.false;
99
120
  expect(el.hasAttribute('value2')).to.be.false;
100
121
  expect(el.hasAttribute('value3')).to.be.false;
101
122
  });
102
123
  it('should update attributes when props are changed', async () => {
103
124
  let MyElement = (() => {
125
+ let _classDecorators = [element({
126
+ tagName: 'attr-test-3'
127
+ })];
128
+ let _classDescriptor;
129
+ let _classExtraInitializers = [];
130
+ let _classThis;
104
131
  let _classSuper = HTMLElement;
105
132
  let _value1_decorators;
106
133
  let _value1_initializers = [];
@@ -114,18 +141,22 @@ describe('@attr()', () => {
114
141
  let _value4_decorators;
115
142
  let _value4_initializers = [];
116
143
  let _value4_extraInitializers = [];
117
- return class MyElement extends _classSuper {
144
+ var MyElement = class extends _classSuper {
145
+ static { _classThis = this; }
118
146
  static {
119
147
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
120
- _value1_decorators = [attr];
121
- _value2_decorators = [attr];
122
- _value3_decorators = [attr];
123
- _value4_decorators = [attr];
148
+ _value1_decorators = [attr()];
149
+ _value2_decorators = [attr()];
150
+ _value3_decorators = [attr()];
151
+ _value4_decorators = [attr()];
124
152
  __esDecorate(this, null, _value1_decorators, { kind: "accessor", name: "value1", static: false, private: false, access: { has: obj => "value1" in obj, get: obj => obj.value1, set: (obj, value) => { obj.value1 = value; } }, metadata: _metadata }, _value1_initializers, _value1_extraInitializers);
125
153
  __esDecorate(this, null, _value2_decorators, { kind: "accessor", name: "value2", static: false, private: false, access: { has: obj => "value2" in obj, get: obj => obj.value2, set: (obj, value) => { obj.value2 = value; } }, metadata: _metadata }, _value2_initializers, _value2_extraInitializers);
126
154
  __esDecorate(this, null, _value3_decorators, { kind: "accessor", name: "value3", static: false, private: false, access: { has: obj => "value3" in obj, get: obj => obj.value3, set: (obj, value) => { obj.value3 = value; } }, metadata: _metadata }, _value3_initializers, _value3_extraInitializers);
127
155
  __esDecorate(this, null, _value4_decorators, { kind: "accessor", name: "value4", static: false, private: false, access: { has: obj => "value4" in obj, get: obj => obj.value4, set: (obj, value) => { obj.value4 = value; } }, metadata: _metadata }, _value4_initializers, _value4_extraInitializers);
128
- if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
156
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
157
+ MyElement = _classThis = _classDescriptor.value;
158
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
159
+ __runInitializers(_classThis, _classExtraInitializers);
129
160
  }
130
161
  #value1_accessor_storage = __runInitializers(this, _value1_initializers, 'hello');
131
162
  get value1() { return this.#value1_accessor_storage; }
@@ -144,9 +175,9 @@ describe('@attr()', () => {
144
175
  __runInitializers(this, _value4_extraInitializers);
145
176
  }
146
177
  };
178
+ return MyElement = _classThis;
147
179
  })();
148
- customElements.define('attr-test-4', MyElement);
149
- const el = await fixture(html `<attr-test-4></attr-test-4>`);
180
+ const el = await fixture(html `<attr-test-3></attr-test-3>`);
150
181
  el.value1 = 'world';
151
182
  el.value2 = 100;
152
183
  el.value3 = false;
@@ -156,5 +187,98 @@ describe('@attr()', () => {
156
187
  expect(el.hasAttribute('value3')).to.be.false;
157
188
  expect(el.hasAttribute('value4')).to.be.true;
158
189
  });
190
+ it('should normalize attribute names', async () => {
191
+ const value3 = Symbol('Value from SYMBOL');
192
+ let MyElement = (() => {
193
+ var _a;
194
+ let _classDecorators = [element({
195
+ tagName: 'attr-test-4'
196
+ })];
197
+ let _classDescriptor;
198
+ let _classExtraInitializers = [];
199
+ let _classThis;
200
+ let _classSuper = HTMLElement;
201
+ let _Value1_decorators;
202
+ let _Value1_initializers = [];
203
+ let _Value1_extraInitializers = [];
204
+ let _member_decorators;
205
+ let _member_initializers = [];
206
+ let _member_extraInitializers = [];
207
+ let _member_decorators_1;
208
+ let _member_initializers_1 = [];
209
+ let _member_extraInitializers_1 = [];
210
+ var MyElement = class extends _classSuper {
211
+ static { _classThis = this; }
212
+ static {
213
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
214
+ __esDecorate(this, null, _Value1_decorators, { kind: "accessor", name: "Value1", static: false, private: false, access: { has: obj => "Value1" in obj, get: obj => obj.Value1, set: (obj, value) => { obj.Value1 = value; } }, metadata: _metadata }, _Value1_initializers, _Value1_extraInitializers);
215
+ __esDecorate(this, null, _member_decorators, { kind: "accessor", name: 'Value 2', static: false, private: false, access: { has: obj => 'Value 2' in obj, get: obj => obj['Value 2'], set: (obj, value) => { obj['Value 2'] = value; } }, metadata: _metadata }, _member_initializers, _member_extraInitializers);
216
+ __esDecorate(this, null, _member_decorators_1, { kind: "accessor", name: _a, static: false, private: false, access: { has: obj => _a in obj, get: obj => obj[_a], set: (obj, value) => { obj[_a] = value; } }, metadata: _metadata }, _member_initializers_1, _member_extraInitializers_1);
217
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
218
+ MyElement = _classThis = _classDescriptor.value;
219
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
220
+ __runInitializers(_classThis, _classExtraInitializers);
221
+ }
222
+ #Value1_accessor_storage = __runInitializers(this, _Value1_initializers, 'hello');
223
+ get Value1() { return this.#Value1_accessor_storage; }
224
+ set Value1(value) { this.#Value1_accessor_storage = value; }
225
+ #_a_accessor_storage = (__runInitializers(this, _Value1_extraInitializers), __runInitializers(this, _member_initializers, 0));
226
+ get ['Value 2']() { return this.#_a_accessor_storage; }
227
+ set ['Value 2'](value) { this.#_a_accessor_storage = value; }
228
+ #_b_accessor_storage = (__runInitializers(this, _member_extraInitializers), __runInitializers(this, _member_initializers_1, true));
229
+ get [(_Value1_decorators = [attr()], _member_decorators = [attr()], _member_decorators_1 = [attr()], _a = __propKey(value3))]() { return this.#_b_accessor_storage; }
230
+ set [_a](value) { this.#_b_accessor_storage = value; }
231
+ constructor() {
232
+ super(...arguments);
233
+ __runInitializers(this, _member_extraInitializers_1);
234
+ }
235
+ };
236
+ return MyElement = _classThis;
237
+ })();
238
+ const el = await fixture(html `<attr-test-4></attr-test-4>`);
239
+ expect([...el.attributes].map((attr) => attr.name)).to.deep.equal([
240
+ 'value1',
241
+ 'value-2',
242
+ 'value-from-symbol'
243
+ ]);
244
+ });
245
+ it('should throw an error for symbols with no description', async () => {
246
+ expect(() => {
247
+ const value = Symbol();
248
+ let MyElement = (() => {
249
+ var _a;
250
+ let _classDecorators = [element({
251
+ tagName: 'attr-test-4'
252
+ })];
253
+ let _classDescriptor;
254
+ let _classExtraInitializers = [];
255
+ let _classThis;
256
+ let _classSuper = HTMLElement;
257
+ let _member_decorators;
258
+ let _member_initializers = [];
259
+ let _member_extraInitializers = [];
260
+ var MyElement = class extends _classSuper {
261
+ static { _classThis = this; }
262
+ static {
263
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
264
+ __esDecorate(this, null, _member_decorators, { kind: "accessor", name: _a, static: false, private: false, access: { has: obj => _a in obj, get: obj => obj[_a], set: (obj, value) => { obj[_a] = value; } }, metadata: _metadata }, _member_initializers, _member_extraInitializers);
265
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
266
+ MyElement = _classThis = _classDescriptor.value;
267
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
268
+ __runInitializers(_classThis, _classExtraInitializers);
269
+ }
270
+ #_a_accessor_storage = __runInitializers(this, _member_initializers, true);
271
+ get [(_member_decorators = [attr()], _a = __propKey(value))]() { return this.#_a_accessor_storage; }
272
+ set [_a](value) { this.#_a_accessor_storage = value; }
273
+ constructor() {
274
+ super(...arguments);
275
+ __runInitializers(this, _member_extraInitializers);
276
+ }
277
+ };
278
+ return MyElement = _classThis;
279
+ })();
280
+ new MyElement();
281
+ }).to.throw('Cannot handle Symbol property without description');
282
+ });
159
283
  });
160
284
  //# sourceMappingURL=attr.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attr.test.js","sourceRoot":"","sources":["../../src/lib/attr.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attr.test.js","sourceRoot":"","sources":["../../src/lib/attr.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,9 @@
1
- export declare function element<Target extends CustomElementConstructor>(Base: Target, ctx: ClassDecoratorContext<Target>): {
1
+ import { ShadowResult } from './result.js';
2
+ export interface ElementOpts<T> {
3
+ tagName?: string;
4
+ shadow?: Array<ShadowResult | ((el: T) => void)>;
5
+ }
6
+ export declare function element<Target extends CustomElementConstructor, Instance extends InstanceType<Target>>(opts?: ElementOpts<Instance>): (Base: Target, ctx: ClassDecoratorContext<Target>) => {
2
7
  new (...args: any[]): {
3
8
  connectedCallback(): void;
4
9
  accessKey: string;
@@ -1,41 +1,57 @@
1
1
  import { metadataStore } from './metadata.js';
2
- export function element(Base, ctx) {
3
- const meta = metadataStore.read(ctx.metadata);
4
- ctx.addInitializer(function () {
5
- if (meta.tagName) {
6
- const val = meta.tagName(this);
7
- if (!customElements.get(val)) {
8
- customElements.define(val, this);
9
- }
10
- }
11
- });
12
- return class JoistElement extends Base {
13
- static observedAttributes = [...meta.attrs];
14
- constructor(...args) {
15
- super(...args);
16
- const root = this.shadowRoot || this;
17
- for (let [event, listener] of meta.listeners) {
18
- root.addEventListener(event, listener.bind(this));
2
+ export function element(opts) {
3
+ return function elementDecorator(Base, ctx) {
4
+ const meta = metadataStore.read(ctx.metadata);
5
+ ctx.addInitializer(function () {
6
+ if (opts?.tagName) {
7
+ if (!customElements.get(opts.tagName)) {
8
+ customElements.define(opts.tagName, this);
9
+ }
19
10
  }
20
- }
21
- connectedCallback() {
22
- for (let attr of meta.attrs) {
23
- const value = Reflect.get(this, attr);
24
- if (value !== null && value !== undefined && value !== '') {
25
- if (typeof value === 'boolean') {
26
- if (value === true) {
27
- this.setAttribute(attr, '');
11
+ });
12
+ return class JoistElement extends Base {
13
+ static observedAttributes = meta.attrs
14
+ .filter(({ observe }) => observe)
15
+ .map(({ attrName }) => attrName);
16
+ constructor(...args) {
17
+ super(...args);
18
+ if (opts?.shadow) {
19
+ this.attachShadow({ mode: 'open' });
20
+ for (let res of opts.shadow) {
21
+ if (typeof res === 'function') {
22
+ res(this);
23
+ }
24
+ else {
25
+ res.run(this);
28
26
  }
29
27
  }
30
- else {
31
- this.setAttribute(attr, String(value));
32
- }
28
+ }
29
+ for (let [event, { cb, root }] of meta.listeners) {
30
+ root(this).addEventListener(event, cb.bind(this));
33
31
  }
34
32
  }
35
- if (super.connectedCallback) {
36
- super.connectedCallback();
33
+ connectedCallback() {
34
+ reflectAttributeValues(this, meta.attrs);
35
+ if (super.connectedCallback) {
36
+ super.connectedCallback();
37
+ }
37
38
  }
38
- }
39
+ };
39
40
  };
40
41
  }
42
+ function reflectAttributeValues(el, attrs) {
43
+ for (let { propName, attrName } of attrs) {
44
+ const value = Reflect.get(el, propName);
45
+ if (value !== null && value !== undefined && value !== '') {
46
+ if (typeof value === 'boolean') {
47
+ if (value === true) {
48
+ el.setAttribute(attrName, '');
49
+ }
50
+ }
51
+ else {
52
+ el.setAttribute(attrName, String(value));
53
+ }
54
+ }
55
+ }
56
+ }
41
57
  //# sourceMappingURL=element.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/lib/element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,UAAU,OAAO,CACrB,IAAY,EACZ,GAAkC;IAElC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE9C,GAAG,CAAC,cAAc,CAAC;QACjB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE/B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,cAAc,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,YAAa,SAAQ,IAAI;QAEpC,MAAM,CAAC,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAEf,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;YAErC,KAAK,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC7C,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,iBAAiB;YACf,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAGtC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;oBAC1D,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC/B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;4BAEnB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBAC9B,CAAC;oBACH,CAAC;yBAAM,CAAC;wBAEN,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/lib/element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,aAAa,EAAE,MAAM,eAAe,CAAC;AAQvD,MAAM,UAAU,OAAO,CAGrB,IAA4B;IAC5B,OAAO,SAAS,gBAAgB,CAAC,IAAY,EAAE,GAAkC;QAC/E,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9C,GAAG,CAAC,cAAc,CAAC;YACjB,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,YAAa,SAAQ,IAAI;YACpC,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK;iBACnC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC;iBAChC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;YAEnC,YAAY,GAAG,IAAW;gBACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;gBAEf,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;oBAEpC,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBAC5B,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;4BAC9B,GAAG,CAAC,IAA2B,CAAC,CAAC;wBACnC,CAAC;6BAAM,CAAC;4BACN,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAChB,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjD,IAAI,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,iBAAiB;gBACf,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEzC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAC5B,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,EAAe,EAAE,KAAgB;IAC/D,KAAK,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,KAAK,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAGxC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YAC1D,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAEnB,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;iBAAM,CAAC;gBAEN,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}