@joist/element 3.9.1 → 4.0.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,11 +13,10 @@ npm i @joist/element
13
13
  ```TS
14
14
  import { tagName, shadow, css, html, attr, listen, element } from '@joist/element';
15
15
 
16
- @element
16
+ @element({
17
+ tagName: 'my-element'
18
+ })
17
19
  export class MyElement extends HTMLElement {
18
- // define a custom element
19
- @tagName static tagName = 'my-element';
20
-
21
20
  // apply styles to shadow dom
22
21
  @shadow styles = css`
23
22
  :host {
@@ -32,7 +31,7 @@ export class MyElement extends HTMLElement {
32
31
  `;
33
32
 
34
33
  // define attributes
35
- @attr accessor value = 0;
34
+ @attr() accessor value = 0;
36
35
 
37
36
  // listen for events
38
37
  @listen('click') onClick() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joist/element",
3
- "version": "3.9.1",
3
+ "version": "4.0.0-next.2",
4
4
  "type": "module",
5
5
  "main": "./target/lib.js",
6
6
  "module": "./target/lib.js",
@@ -1,20 +1,29 @@
1
1
  import { expect, fixture, html } from '@open-wc/testing';
2
2
 
3
3
  import { attr } from './attr.js';
4
+ import { element } from './element.js';
4
5
 
5
6
  describe('@attr()', () => {
6
7
  it('should read and parse the correct values', async () => {
8
+ @element({
9
+ tagName: 'attr-test-1'
10
+ })
7
11
  class MyElement extends HTMLElement {
8
- @attr accessor value1 = 100; // no attribute
9
- @attr accessor value2 = 0; // number
10
- @attr accessor value3 = false; // boolean
11
- @attr accessor value4 = 'hello'; // string
12
- }
12
+ @attr()
13
+ accessor value1 = 100; // no attribute
14
+
15
+ @attr()
16
+ accessor value2 = 0; // number
17
+
18
+ @attr()
19
+ accessor value3 = false; // boolean
13
20
 
14
- customElements.define('attr-test-2', MyElement);
21
+ @attr()
22
+ accessor value4 = 'hello'; // string
23
+ }
15
24
 
16
25
  const el = await fixture<MyElement>(
17
- html`<attr-test-2 value2="2" value3 value4="world"></attr-test-2>`
26
+ html`<attr-test-1 value2="2" value3 value4="world"></attr-test-1>`
18
27
  );
19
28
 
20
29
  expect(el.value1).to.equal(100);
@@ -24,15 +33,21 @@ describe('@attr()', () => {
24
33
  });
25
34
 
26
35
  it('should not write falsy props to attributes', async () => {
36
+ @element({
37
+ tagName: 'attr-test-2'
38
+ })
27
39
  class MyElement extends HTMLElement {
28
- @attr accessor value1 = undefined;
29
- @attr accessor value2 = null;
30
- @attr accessor value3 = '';
31
- }
40
+ @attr()
41
+ accessor value1 = undefined;
32
42
 
33
- customElements.define('attr-test-3', MyElement);
43
+ @attr()
44
+ accessor value2 = null;
34
45
 
35
- const el = await fixture<MyElement>(html`<attr-test-3></attr-test-3>`);
46
+ @attr()
47
+ accessor value3 = '';
48
+ }
49
+
50
+ const el = await fixture<MyElement>(html`<attr-test-2></attr-test-2>`);
36
51
 
37
52
  expect(el.hasAttribute('value1')).to.be.false;
38
53
  expect(el.hasAttribute('value2')).to.be.false;
@@ -40,16 +55,24 @@ describe('@attr()', () => {
40
55
  });
41
56
 
42
57
  it('should update attributes when props are changed', async () => {
58
+ @element({
59
+ tagName: 'attr-test-3'
60
+ })
43
61
  class MyElement extends HTMLElement {
44
- @attr accessor value1 = 'hello'; // no attribute
45
- @attr accessor value2 = 0; // number
46
- @attr accessor value3 = true; // boolean
47
- @attr accessor value4 = false; // boolean
48
- }
62
+ @attr()
63
+ accessor value1 = 'hello'; // no attribute
49
64
 
50
- customElements.define('attr-test-4', MyElement);
65
+ @attr()
66
+ accessor value2 = 0; // number
51
67
 
52
- const el = await fixture<MyElement>(html`<attr-test-4></attr-test-4>`);
68
+ @attr()
69
+ accessor value3 = true; // boolean
70
+
71
+ @attr()
72
+ accessor value4 = false; // boolean
73
+ }
74
+
75
+ const el = await fixture<MyElement>(html`<attr-test-3></attr-test-3>`);
53
76
 
54
77
  el.value1 = 'world';
55
78
  el.value2 = 100;
@@ -61,4 +84,30 @@ describe('@attr()', () => {
61
84
  expect(el.hasAttribute('value3')).to.be.false;
62
85
  expect(el.hasAttribute('value4')).to.be.true;
63
86
  });
87
+
88
+ it('should normalize attribute names', async () => {
89
+ const value3 = Symbol('Value from SYMBOL');
90
+
91
+ @element({
92
+ tagName: 'attr-test-4'
93
+ })
94
+ class MyElement extends HTMLElement {
95
+ @attr()
96
+ accessor Value1 = 'hello';
97
+
98
+ @attr()
99
+ accessor ['Value 2'] = 0;
100
+
101
+ @attr()
102
+ accessor [value3] = true;
103
+ }
104
+
105
+ const el = await fixture<MyElement>(html`<attr-test-4></attr-test-4>`);
106
+
107
+ expect([...el.attributes].map((attr) => attr.name)).to.deep.equal([
108
+ 'value1',
109
+ 'value-2',
110
+ 'value-from-symbol'
111
+ ]);
112
+ });
64
113
  });
package/src/lib/attr.ts CHANGED
@@ -1,46 +1,65 @@
1
1
  import { metadataStore } from './metadata.js';
2
2
 
3
- export function attr<This extends HTMLElement>(
4
- { get, set }: ClassAccessorDecoratorTarget<This, unknown>,
5
- ctx: ClassAccessorDecoratorContext<This>
6
- ): ClassAccessorDecoratorResult<This, any> {
7
- const name = String(ctx.name);
8
- const meta = metadataStore.read(ctx.metadata);
9
- meta.attrs.push(name);
10
-
11
- return {
12
- set(value: unknown) {
13
- if (value === true) {
14
- this.setAttribute(name, '');
15
- } else if (value === false) {
16
- this.removeAttribute(name);
17
- } else {
18
- this.setAttribute(name, String(value));
19
- }
3
+ export function attr() {
4
+ return <This extends HTMLElement>(
5
+ { get, set }: ClassAccessorDecoratorTarget<This, unknown>,
6
+ ctx: ClassAccessorDecoratorContext<This>
7
+ ): ClassAccessorDecoratorResult<This, any> => {
8
+ const attrName = parseAttrName(ctx.name);
9
+ const meta = metadataStore.read(ctx.metadata);
20
10
 
21
- set.call(this, value);
22
- },
23
- get() {
24
- const ogValue = get.call(this);
25
- const attr = this.getAttribute(name);
11
+ meta.attrs.push({ propName: ctx.name, attrName });
26
12
 
27
- if (attr !== null) {
28
- // treat as boolean
29
- if (attr === '') {
30
- return true;
13
+ return {
14
+ set(value: unknown) {
15
+ if (value === true) {
16
+ this.setAttribute(attrName, '');
17
+ } else if (value === false) {
18
+ this.removeAttribute(attrName);
19
+ } else {
20
+ this.setAttribute(attrName, String(value));
31
21
  }
32
22
 
33
- // treat as number
34
- if (typeof ogValue === 'number') {
35
- return Number(attr);
23
+ set.call(this, value);
24
+ },
25
+ get() {
26
+ const ogValue = get.call(this);
27
+ const attr = this.getAttribute(attrName);
28
+
29
+ if (attr !== null) {
30
+ // treat as boolean
31
+ if (attr === '') {
32
+ return true;
33
+ }
34
+
35
+ // treat as number
36
+ if (typeof ogValue === 'number') {
37
+ return Number(attr);
38
+ }
39
+
40
+ // treat as string
41
+ return attr;
36
42
  }
37
43
 
38
- // treat as string
39
- return attr;
44
+ // no readable value return original
45
+ return ogValue;
40
46
  }
47
+ };
48
+ };
49
+ }
50
+
51
+ function parseAttrName(val: string | symbol): string {
52
+ let value: string;
41
53
 
42
- // no readable value return original
43
- return ogValue;
54
+ if (typeof val === 'symbol') {
55
+ if (val.description) {
56
+ value = val.description;
57
+ } else {
58
+ throw new Error('Cannot handle Symbol property without description');
44
59
  }
45
- };
60
+ } else {
61
+ value = val;
62
+ }
63
+
64
+ return value.toLowerCase().replaceAll(' ', '-');
46
65
  }
@@ -2,17 +2,21 @@ import { expect, fixture, html } from '@open-wc/testing';
2
2
 
3
3
  import { attr } from './attr.js';
4
4
  import { element } from './element.js';
5
- import { tagName } from './tag-name.js';
6
5
 
7
6
  describe('@element()', () => {
8
7
  it('should write default value to attribute', async () => {
9
- @element
8
+ @element({
9
+ tagName: 'element-1'
10
+ })
10
11
  class MyElement extends HTMLElement {
11
- @tagName static tag = 'element-1';
12
+ @attr()
13
+ accessor value1 = 'hello'; // no attribute
12
14
 
13
- @attr accessor value1 = 'hello'; // no attribute
14
- @attr accessor value2 = 0; // number
15
- @attr accessor value3 = true; // boolean
15
+ @attr()
16
+ accessor value2 = 0; // number
17
+
18
+ @attr()
19
+ accessor value3 = true; // boolean
16
20
  }
17
21
 
18
22
  const el = await fixture<MyElement>(html`<element-1></element-1>`);
@@ -21,4 +25,26 @@ describe('@element()', () => {
21
25
  expect(el.getAttribute('value2')).to.equal('0');
22
26
  expect(el.getAttribute('value3')).to.equal('');
23
27
  });
28
+
29
+ it('should register attributes', async () => {
30
+ @element({
31
+ tagName: 'element-2'
32
+ })
33
+ class MyElement extends HTMLElement {
34
+ @attr()
35
+ accessor value1 = 'hello'; // no attribute
36
+
37
+ @attr()
38
+ accessor value2 = 0; // number
39
+
40
+ @attr()
41
+ accessor value3 = true; // boolean
42
+ }
43
+
44
+ expect(Reflect.get(MyElement, 'observedAttributes')).to.deep.equal([
45
+ 'value1',
46
+ 'value2',
47
+ 'value3'
48
+ ]);
49
+ });
24
50
  });
@@ -1,55 +1,60 @@
1
1
  import { metadataStore } from './metadata.js';
2
2
 
3
- export function element<Target extends CustomElementConstructor>(
4
- Base: Target,
5
- ctx: ClassDecoratorContext<Target>
6
- ) {
7
- const meta = metadataStore.read(ctx.metadata);
8
-
9
- ctx.addInitializer(function (this: Target) {
10
- if (meta.tagName) {
11
- const val = meta.tagName(this);
12
-
13
- if (!customElements.get(val)) {
14
- customElements.define(val, this);
3
+ export interface ElementOpts {
4
+ tagName?: string;
5
+ }
6
+
7
+ export function element(opts?: ElementOpts) {
8
+ return <Target extends CustomElementConstructor>(
9
+ Base: Target,
10
+ ctx: ClassDecoratorContext<Target>
11
+ ) => {
12
+ const meta = metadataStore.read(ctx.metadata);
13
+
14
+ ctx.addInitializer(function (this: Target) {
15
+ if (opts?.tagName) {
16
+ if (!customElements.get(opts.tagName)) {
17
+ customElements.define(opts.tagName, this);
18
+ }
15
19
  }
16
- }
17
- });
20
+ });
21
+
22
+ return class JoistElement extends Base {
23
+ // make all attrs observable
24
+ static observedAttributes = meta.attrs.map(({ attrName }) => attrName);
18
25
 
19
- return class JoistElement extends Base {
20
- // make all attrs observable
21
- static observedAttributes = [...meta.attrs];
22
- constructor(...args: any[]) {
23
- super(...args);
26
+ constructor(...args: any[]) {
27
+ super(...args);
24
28
 
25
- const root = this.shadowRoot || this;
29
+ const root = this.shadowRoot || this;
26
30
 
27
- for (let [event, listener] of meta.listeners) {
28
- root.addEventListener(event, listener.bind(this));
31
+ for (let [event, listener] of meta.listeners) {
32
+ root.addEventListener(event, listener.bind(this));
33
+ }
29
34
  }
30
- }
31
-
32
- connectedCallback() {
33
- for (let attr of meta.attrs) {
34
- const value = Reflect.get(this, attr);
35
-
36
- // reflect values back to attributes
37
- if (value !== null && value !== undefined && value !== '') {
38
- if (typeof value === 'boolean') {
39
- if (value === true) {
40
- // set boolean attribute
41
- this.setAttribute(attr, '');
35
+
36
+ connectedCallback() {
37
+ for (let { propName, attrName } of meta.attrs) {
38
+ const value = Reflect.get(this, propName);
39
+
40
+ // reflect values back to attributes
41
+ if (value !== null && value !== undefined && value !== '') {
42
+ if (typeof value === 'boolean') {
43
+ if (value === true) {
44
+ // set boolean attribute
45
+ this.setAttribute(attrName, '');
46
+ }
47
+ } else {
48
+ // set key/value attribute
49
+ this.setAttribute(attrName, String(value));
42
50
  }
43
- } else {
44
- // set key/value attribute
45
- this.setAttribute(attr, String(value));
46
51
  }
47
52
  }
48
- }
49
53
 
50
- if (super.connectedCallback) {
51
- super.connectedCallback();
54
+ if (super.connectedCallback) {
55
+ super.connectedCallback();
56
+ }
52
57
  }
53
- }
58
+ };
54
59
  };
55
60
  }
@@ -1,8 +1,12 @@
1
1
  (Symbol as any).metadata ??= Symbol('Symbol.metadata');
2
2
 
3
+ export interface AttrDef {
4
+ propName: string | symbol;
5
+ attrName: string;
6
+ }
7
+
3
8
  export class ElementMetadata {
4
- attrs: string[] = [];
5
- tagName?: (val: any) => string;
9
+ attrs: AttrDef[] = [];
6
10
  listeners = new Map<string, (e: Event) => void>();
7
11
  }
8
12
 
package/src/lib.ts CHANGED
@@ -3,5 +3,4 @@ export { css, html, HTMLResult, CSSResult } from './lib/tags.js';
3
3
  export { shadow } from './lib/shadow.js';
4
4
  export { attr } from './lib/attr.js';
5
5
  export { listen } from './lib/listen.js';
6
- export { tagName } from './lib/tag-name.js';
7
6
  export { element } from './lib/element.js';
@@ -1 +1 @@
1
- export declare function attr<This extends HTMLElement>({ get, set }: ClassAccessorDecoratorTarget<This, unknown>, ctx: ClassAccessorDecoratorContext<This>): ClassAccessorDecoratorResult<This, any>;
1
+ export declare function attr(): <This extends HTMLElement>({ get, set }: ClassAccessorDecoratorTarget<This, unknown>, ctx: ClassAccessorDecoratorContext<This>) => ClassAccessorDecoratorResult<This, any>;
@@ -1,35 +1,52 @@
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() {
3
+ return ({ get, set }, ctx) => {
4
+ const attrName = parseAttrName(ctx.name);
5
+ const meta = metadataStore.read(ctx.metadata);
6
+ meta.attrs.push({ propName: ctx.name, attrName });
7
+ return {
8
+ set(value) {
9
+ if (value === true) {
10
+ this.setAttribute(attrName, '');
11
+ }
12
+ else if (value === false) {
13
+ this.removeAttribute(attrName);
14
+ }
15
+ else {
16
+ this.setAttribute(attrName, String(value));
25
17
  }
26
- if (typeof ogValue === 'number') {
27
- return Number(attr);
18
+ set.call(this, value);
19
+ },
20
+ get() {
21
+ const ogValue = get.call(this);
22
+ const attr = this.getAttribute(attrName);
23
+ if (attr !== null) {
24
+ if (attr === '') {
25
+ return true;
26
+ }
27
+ if (typeof ogValue === 'number') {
28
+ return Number(attr);
29
+ }
30
+ return attr;
28
31
  }
29
- return attr;
32
+ return ogValue;
30
33
  }
31
- return ogValue;
32
- }
34
+ };
33
35
  };
34
36
  }
37
+ function parseAttrName(val) {
38
+ let value;
39
+ if (typeof val === 'symbol') {
40
+ if (val.description) {
41
+ value = val.description;
42
+ }
43
+ else {
44
+ throw new Error('Cannot handle Symbol property without description');
45
+ }
46
+ }
47
+ else {
48
+ value = val;
49
+ }
50
+ return value.toLowerCase().replaceAll(' ', '-');
51
+ }
35
52
  //# 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;AAE9C,MAAM,UAAU,IAAI;IAClB,OAAO,CACL,EAAE,GAAG,EAAE,GAAG,EAA+C,EACzD,GAAwC,EACC,EAAE;QAC3C,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,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAElD,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,60 @@ 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
+ });
159
245
  });
160
246
  //# 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,7 @@
1
- export declare function element<Target extends CustomElementConstructor>(Base: Target, ctx: ClassDecoratorContext<Target>): {
1
+ export interface ElementOpts {
2
+ tagName?: string;
3
+ }
4
+ export declare function element(opts?: ElementOpts): <Target extends CustomElementConstructor>(Base: Target, ctx: ClassDecoratorContext<Target>) => {
2
5
  new (...args: any[]): {
3
6
  connectedCallback(): void;
4
7
  accessKey: string;
@@ -1,41 +1,42 @@
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);
2
+ export function element(opts) {
3
+ return (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
+ }
9
10
  }
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));
11
+ });
12
+ return class JoistElement extends Base {
13
+ static observedAttributes = meta.attrs.map(({ attrName }) => attrName);
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));
19
+ }
19
20
  }
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, '');
21
+ connectedCallback() {
22
+ for (let { propName, attrName } of meta.attrs) {
23
+ const value = Reflect.get(this, propName);
24
+ if (value !== null && value !== undefined && value !== '') {
25
+ if (typeof value === 'boolean') {
26
+ if (value === true) {
27
+ this.setAttribute(attrName, '');
28
+ }
29
+ }
30
+ else {
31
+ this.setAttribute(attrName, String(value));
28
32
  }
29
- }
30
- else {
31
- this.setAttribute(attr, String(value));
32
33
  }
33
34
  }
35
+ if (super.connectedCallback) {
36
+ super.connectedCallback();
37
+ }
34
38
  }
35
- if (super.connectedCallback) {
36
- super.connectedCallback();
37
- }
38
- }
39
+ };
39
40
  };
40
41
  }
41
42
  //# 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,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAM9C,MAAM,UAAU,OAAO,CAAC,IAAkB;IACxC,OAAO,CACL,IAAY,EACZ,GAAkC,EAClC,EAAE;QACF,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;YAEpC,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;YAEvE,YAAY,GAAG,IAAW;gBACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;gBAEf,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;gBAErC,KAAK,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC7C,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,iBAAiB;gBACf,KAAK,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAG1C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;wBAC1D,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;4BAC/B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gCAEnB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;4BAClC,CAAC;wBACH,CAAC;6BAAM,CAAC;4BAEN,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC7C,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAC5B,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -2,18 +2,16 @@ import { __esDecorate, __runInitializers } from "tslib";
2
2
  import { expect, fixture, html } from '@open-wc/testing';
3
3
  import { attr } from './attr.js';
4
4
  import { element } from './element.js';
5
- import { tagName } from './tag-name.js';
6
5
  describe('@element()', () => {
7
6
  it('should write default value to attribute', async () => {
8
7
  let MyElement = (() => {
9
- let _classDecorators = [element];
8
+ let _classDecorators = [element({
9
+ tagName: 'element-1'
10
+ })];
10
11
  let _classDescriptor;
11
12
  let _classExtraInitializers = [];
12
13
  let _classThis;
13
14
  let _classSuper = HTMLElement;
14
- let _static_tag_decorators;
15
- let _static_tag_initializers = [];
16
- let _static_tag_extraInitializers = [];
17
15
  let _value1_decorators;
18
16
  let _value1_initializers = [];
19
17
  let _value1_extraInitializers = [];
@@ -27,19 +25,17 @@ describe('@element()', () => {
27
25
  static { _classThis = this; }
28
26
  static {
29
27
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
30
- _static_tag_decorators = [tagName];
31
- _value1_decorators = [attr];
32
- _value2_decorators = [attr];
33
- _value3_decorators = [attr];
28
+ _value1_decorators = [attr()];
29
+ _value2_decorators = [attr()];
30
+ _value3_decorators = [attr()];
34
31
  __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);
35
32
  __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);
36
33
  __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);
37
- __esDecorate(null, null, _static_tag_decorators, { kind: "field", name: "tag", static: true, private: false, access: { has: obj => "tag" in obj, get: obj => obj.tag, set: (obj, value) => { obj.tag = value; } }, metadata: _metadata }, _static_tag_initializers, _static_tag_extraInitializers);
38
34
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
39
35
  MyElement = _classThis = _classDescriptor.value;
40
36
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
37
+ __runInitializers(_classThis, _classExtraInitializers);
41
38
  }
42
- static tag = __runInitializers(_classThis, _static_tag_initializers, 'element-1');
43
39
  #value1_accessor_storage = __runInitializers(this, _value1_initializers, 'hello');
44
40
  get value1() { return this.#value1_accessor_storage; }
45
41
  set value1(value) { this.#value1_accessor_storage = value; }
@@ -53,10 +49,6 @@ describe('@element()', () => {
53
49
  super(...arguments);
54
50
  __runInitializers(this, _value3_extraInitializers);
55
51
  }
56
- static {
57
- __runInitializers(_classThis, _static_tag_extraInitializers);
58
- __runInitializers(_classThis, _classExtraInitializers);
59
- }
60
52
  };
61
53
  return MyElement = _classThis;
62
54
  })();
@@ -65,5 +57,60 @@ describe('@element()', () => {
65
57
  expect(el.getAttribute('value2')).to.equal('0');
66
58
  expect(el.getAttribute('value3')).to.equal('');
67
59
  });
60
+ it('should register attributes', async () => {
61
+ let MyElement = (() => {
62
+ let _classDecorators = [element({
63
+ tagName: 'element-2'
64
+ })];
65
+ let _classDescriptor;
66
+ let _classExtraInitializers = [];
67
+ let _classThis;
68
+ let _classSuper = HTMLElement;
69
+ let _value1_decorators;
70
+ let _value1_initializers = [];
71
+ let _value1_extraInitializers = [];
72
+ let _value2_decorators;
73
+ let _value2_initializers = [];
74
+ let _value2_extraInitializers = [];
75
+ let _value3_decorators;
76
+ let _value3_initializers = [];
77
+ let _value3_extraInitializers = [];
78
+ var MyElement = class extends _classSuper {
79
+ static { _classThis = this; }
80
+ static {
81
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
82
+ _value1_decorators = [attr()];
83
+ _value2_decorators = [attr()];
84
+ _value3_decorators = [attr()];
85
+ __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);
86
+ __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);
87
+ __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);
88
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
89
+ MyElement = _classThis = _classDescriptor.value;
90
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
91
+ __runInitializers(_classThis, _classExtraInitializers);
92
+ }
93
+ #value1_accessor_storage = __runInitializers(this, _value1_initializers, 'hello');
94
+ get value1() { return this.#value1_accessor_storage; }
95
+ set value1(value) { this.#value1_accessor_storage = value; }
96
+ #value2_accessor_storage = (__runInitializers(this, _value1_extraInitializers), __runInitializers(this, _value2_initializers, 0));
97
+ get value2() { return this.#value2_accessor_storage; }
98
+ set value2(value) { this.#value2_accessor_storage = value; }
99
+ #value3_accessor_storage = (__runInitializers(this, _value2_extraInitializers), __runInitializers(this, _value3_initializers, true));
100
+ get value3() { return this.#value3_accessor_storage; }
101
+ set value3(value) { this.#value3_accessor_storage = value; }
102
+ constructor() {
103
+ super(...arguments);
104
+ __runInitializers(this, _value3_extraInitializers);
105
+ }
106
+ };
107
+ return MyElement = _classThis;
108
+ })();
109
+ expect(Reflect.get(MyElement, 'observedAttributes')).to.deep.equal([
110
+ 'value1',
111
+ 'value2',
112
+ 'value3'
113
+ ]);
114
+ });
68
115
  });
69
116
  //# sourceMappingURL=element.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"element.test.js","sourceRoot":"","sources":["../../src/lib/element.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YAEjD,SAAS;oCADd,OAAO;;;;8BACgB,WAAW;;;;;;;;;;;;;iCAAnB,SAAQ,WAAW;;;;8CAChC,OAAO;0CAEP,IAAI;0CACJ,IAAI;0CACJ,IAAI;oBAFC,uKAAS,MAAM,6BAAN,MAAM,uFAAW;oBAC1B,uKAAS,MAAM,6BAAN,MAAM,uFAAK;oBACpB,uKAAS,MAAM,6BAAN,MAAM,uFAAQ;oBAJpB,iKAAO,GAAG,6BAAH,GAAG,+FAAe;oBADpC,6KAMC;;;;gBALU,MAAM,CAAC,GAAG,2DAAG,WAAW,EAAC;gBAE5B,yEAAkB,OAAO,EAAC;gBAA1B,IAAS,MAAM,4CAAW;gBAA1B,IAAS,MAAM,kDAAW;gBAC1B,8HAAkB,CAAC,GAAC;gBAApB,IAAS,MAAM,4CAAK;gBAApB,IAAS,MAAM,kDAAK;gBACpB,8HAAkB,IAAI,GAAC;gBAAvB,IAAS,MAAM,4CAAQ;gBAAvB,IAAS,MAAM,kDAAQ;;;;;;;oBALzB,uDAAS;;;;;QAQf,MAAM,EAAE,GAAG,MAAM,OAAO,CAAY,IAAI,CAAA,yBAAyB,CAAC,CAAC;QAEnE,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"element.test.js","sourceRoot":"","sources":["../../src/lib/element.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YAIjD,SAAS;oCAHd,OAAO,CAAC;oBACP,OAAO,EAAE,WAAW;iBACrB,CAAC;;;;8BACsB,WAAW;;;;;;;;;;iCAAnB,SAAQ,WAAW;;;;0CAChC,IAAI,EAAE;0CAGN,IAAI,EAAE;0CAGN,IAAI,EAAE;oBALP,uKAAS,MAAM,6BAAN,MAAM,uFAAW;oBAG1B,uKAAS,MAAM,6BAAN,MAAM,uFAAK;oBAGpB,uKAAS,MAAM,6BAAN,MAAM,uFAAQ;oBARzB,6KASC;;;oBATK,uDAAS;;gBAEb,yEAAkB,OAAO,EAAC;gBAA1B,IAAS,MAAM,4CAAW;gBAA1B,IAAS,MAAM,kDAAW;gBAG1B,8HAAkB,CAAC,GAAC;gBAApB,IAAS,MAAM,4CAAK;gBAApB,IAAS,MAAM,kDAAK;gBAGpB,8HAAkB,IAAI,GAAC;gBAAvB,IAAS,MAAM,4CAAQ;gBAAvB,IAAS,MAAM,kDAAQ;;;;;;;;QAGzB,MAAM,EAAE,GAAG,MAAM,OAAO,CAAY,IAAI,CAAA,yBAAyB,CAAC,CAAC;QAEnE,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAIpC,SAAS;oCAHd,OAAO,CAAC;oBACP,OAAO,EAAE,WAAW;iBACrB,CAAC;;;;8BACsB,WAAW;;;;;;;;;;iCAAnB,SAAQ,WAAW;;;;0CAChC,IAAI,EAAE;0CAGN,IAAI,EAAE;0CAGN,IAAI,EAAE;oBALP,uKAAS,MAAM,6BAAN,MAAM,uFAAW;oBAG1B,uKAAS,MAAM,6BAAN,MAAM,uFAAK;oBAGpB,uKAAS,MAAM,6BAAN,MAAM,uFAAQ;oBARzB,6KASC;;;oBATK,uDAAS;;gBAEb,yEAAkB,OAAO,EAAC;gBAA1B,IAAS,MAAM,4CAAW;gBAA1B,IAAS,MAAM,kDAAW;gBAG1B,8HAAkB,CAAC,GAAC;gBAApB,IAAS,MAAM,4CAAK;gBAApB,IAAS,MAAM,kDAAK;gBAGpB,8HAAkB,IAAI,GAAC;gBAAvB,IAAS,MAAM,4CAAQ;gBAAvB,IAAS,MAAM,kDAAQ;;;;;;;;QAGzB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACjE,QAAQ;YACR,QAAQ;YACR,QAAQ;SACT,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,6 +1,9 @@
1
+ export interface AttrDef {
2
+ propName: string | symbol;
3
+ attrName: string;
4
+ }
1
5
  export declare class ElementMetadata {
2
- attrs: string[];
3
- tagName?: (val: any) => string;
6
+ attrs: AttrDef[];
4
7
  listeners: Map<string, (e: Event) => void>;
5
8
  }
6
9
  export declare class MetadataStore extends WeakMap<object, ElementMetadata> {
@@ -1,7 +1,6 @@
1
1
  Symbol.metadata ??= Symbol('Symbol.metadata');
2
2
  export class ElementMetadata {
3
3
  attrs = [];
4
- tagName;
5
4
  listeners = new Map();
6
5
  }
7
6
  export class MetadataStore extends WeakMap {
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/lib/metadata.ts"],"names":[],"mappings":"AAAC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEvD,MAAM,OAAO,eAAe;IAC1B,KAAK,GAAa,EAAE,CAAC;IACrB,OAAO,CAAwB;IAC/B,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;CACnD;AAED,MAAM,OAAO,aAAc,SAAQ,OAAgC;IACjE,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,eAAe,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/lib/metadata.ts"],"names":[],"mappings":"AAAC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAOvD,MAAM,OAAO,eAAe;IAC1B,KAAK,GAAc,EAAE,CAAC;IACtB,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;CACnD;AAED,MAAM,OAAO,aAAc,SAAQ,OAAgC;IACjE,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,eAAe,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
package/target/lib.d.ts CHANGED
@@ -3,5 +3,4 @@ export { css, html, HTMLResult, CSSResult } from './lib/tags.js';
3
3
  export { shadow } from './lib/shadow.js';
4
4
  export { attr } from './lib/attr.js';
5
5
  export { listen } from './lib/listen.js';
6
- export { tagName } from './lib/tag-name.js';
7
6
  export { element } from './lib/element.js';
package/target/lib.js CHANGED
@@ -3,6 +3,5 @@ export { css, html, HTMLResult, CSSResult } from './lib/tags.js';
3
3
  export { shadow } from './lib/shadow.js';
4
4
  export { attr } from './lib/attr.js';
5
5
  export { listen } from './lib/listen.js';
6
- export { tagName } from './lib/tag-name.js';
7
6
  export { element } from './lib/element.js';
8
7
  //# 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,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,kBAAkB,CAAC"}
@@ -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 +0,0 @@
1
- export declare function tagName<This extends typeof HTMLElement>(_val: unknown, ctx: ClassFieldDecoratorContext<This, string>): void;
@@ -1,6 +0,0 @@
1
- import { metadataStore } from './metadata.js';
2
- export function tagName(_val, ctx) {
3
- const metadata = metadataStore.read(ctx.metadata);
4
- metadata.tagName = ctx.access.get;
5
- }
6
- //# sourceMappingURL=tag-name.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tag-name.js","sourceRoot":"","sources":["../../src/lib/tag-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,UAAU,OAAO,CACrB,IAAa,EACb,GAA6C;IAE7C,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAElD,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;AACpC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,36 +0,0 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
2
- import { element } from './element.js';
3
- import { tagName } from './tag-name.js';
4
- describe('tag-name', () => {
5
- it('should define a custom element', async () => {
6
- let MyElement = (() => {
7
- let _classDecorators = [element];
8
- let _classDescriptor;
9
- let _classExtraInitializers = [];
10
- let _classThis;
11
- let _classSuper = HTMLElement;
12
- let _static_tagName_decorators;
13
- let _static_tagName_initializers = [];
14
- let _static_tagName_extraInitializers = [];
15
- var MyElement = class extends _classSuper {
16
- static { _classThis = this; }
17
- static {
18
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
19
- _static_tagName_decorators = [tagName];
20
- __esDecorate(null, null, _static_tagName_decorators, { kind: "field", name: "tagName", static: true, private: false, access: { has: obj => "tagName" in obj, get: obj => obj.tagName, set: (obj, value) => { obj.tagName = value; } }, metadata: _metadata }, _static_tagName_initializers, _static_tagName_extraInitializers);
21
- __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
22
- MyElement = _classThis = _classDescriptor.value;
23
- if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
24
- }
25
- static tagName = __runInitializers(_classThis, _static_tagName_initializers, 'tn-test-1');
26
- static {
27
- __runInitializers(_classThis, _static_tagName_extraInitializers);
28
- __runInitializers(_classThis, _classExtraInitializers);
29
- }
30
- };
31
- return MyElement = _classThis;
32
- })();
33
- return customElements.whenDefined(MyElement.tagName);
34
- });
35
- });
36
- //# sourceMappingURL=tag-name.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tag-name.test.js","sourceRoot":"","sources":["../../src/lib/tag-name.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAExC,SAAS;oCADd,OAAO;;;;8BACgB,WAAW;;;;iCAAnB,SAAQ,WAAW;;;;kDAChC,OAAO;oBAAC,6KAAO,OAAO,6BAAP,OAAO,uGAAe;oBADxC,6KAEC;;;;gBADU,MAAM,CAAC,OAAO,+DAAG,WAAW,EAAC;;;oBADlC,uDAAS;;;;;QAIf,OAAO,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}