@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 +4 -5
- package/package.json +1 -1
- package/src/lib/attr.test.ts +69 -20
- package/src/lib/attr.ts +53 -34
- package/src/lib/element.test.ts +32 -6
- package/src/lib/element.ts +46 -41
- package/src/lib/metadata.ts +6 -2
- package/src/lib.ts +0 -1
- package/target/lib/attr.d.ts +1 -1
- package/target/lib/attr.js +45 -28
- package/target/lib/attr.js.map +1 -1
- package/target/lib/attr.test.js +110 -24
- package/target/lib/attr.test.js.map +1 -1
- package/target/lib/element.d.ts +4 -1
- package/target/lib/element.js +32 -31
- package/target/lib/element.js.map +1 -1
- package/target/lib/element.test.js +62 -15
- package/target/lib/element.test.js.map +1 -1
- package/target/lib/metadata.d.ts +5 -2
- package/target/lib/metadata.js +0 -1
- package/target/lib/metadata.js.map +1 -1
- package/target/lib.d.ts +0 -1
- package/target/lib.js +0 -1
- package/target/lib.js.map +1 -1
- package/src/lib/tag-name.test.ts +0 -13
- package/src/lib/tag-name.ts +0 -10
- package/target/lib/tag-name.d.ts +0 -1
- package/target/lib/tag-name.js +0 -6
- package/target/lib/tag-name.js.map +0 -1
- package/target/lib/tag-name.test.d.ts +0 -1
- package/target/lib/tag-name.test.js +0 -36
- package/target/lib/tag-name.test.js.map +0 -1
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
package/src/lib/attr.test.ts
CHANGED
|
@@ -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
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
@attr
|
|
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
|
-
|
|
21
|
+
@attr()
|
|
22
|
+
accessor value4 = 'hello'; // string
|
|
23
|
+
}
|
|
15
24
|
|
|
16
25
|
const el = await fixture<MyElement>(
|
|
17
|
-
html`<attr-test-
|
|
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
|
|
29
|
-
|
|
30
|
-
@attr accessor value3 = '';
|
|
31
|
-
}
|
|
40
|
+
@attr()
|
|
41
|
+
accessor value1 = undefined;
|
|
32
42
|
|
|
33
|
-
|
|
43
|
+
@attr()
|
|
44
|
+
accessor value2 = null;
|
|
34
45
|
|
|
35
|
-
|
|
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
|
|
45
|
-
|
|
46
|
-
@attr accessor value3 = true; // boolean
|
|
47
|
-
@attr accessor value4 = false; // boolean
|
|
48
|
-
}
|
|
62
|
+
@attr()
|
|
63
|
+
accessor value1 = 'hello'; // no attribute
|
|
49
64
|
|
|
50
|
-
|
|
65
|
+
@attr()
|
|
66
|
+
accessor value2 = 0; // number
|
|
51
67
|
|
|
52
|
-
|
|
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
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
if (
|
|
30
|
-
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
//
|
|
39
|
-
return
|
|
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
|
-
|
|
43
|
-
|
|
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
|
}
|
package/src/lib/element.test.ts
CHANGED
|
@@ -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
|
-
@
|
|
12
|
+
@attr()
|
|
13
|
+
accessor value1 = 'hello'; // no attribute
|
|
12
14
|
|
|
13
|
-
@attr
|
|
14
|
-
|
|
15
|
-
|
|
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
|
});
|
package/src/lib/element.ts
CHANGED
|
@@ -1,55 +1,60 @@
|
|
|
1
1
|
import { metadataStore } from './metadata.js';
|
|
2
2
|
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
static observedAttributes = [...meta.attrs];
|
|
22
|
-
constructor(...args: any[]) {
|
|
23
|
-
super(...args);
|
|
26
|
+
constructor(...args: any[]) {
|
|
27
|
+
super(...args);
|
|
24
28
|
|
|
25
|
-
|
|
29
|
+
const root = this.shadowRoot || this;
|
|
26
30
|
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
for (let [event, listener] of meta.listeners) {
|
|
32
|
+
root.addEventListener(event, listener.bind(this));
|
|
33
|
+
}
|
|
29
34
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
51
|
-
|
|
54
|
+
if (super.connectedCallback) {
|
|
55
|
+
super.connectedCallback();
|
|
56
|
+
}
|
|
52
57
|
}
|
|
53
|
-
}
|
|
58
|
+
};
|
|
54
59
|
};
|
|
55
60
|
}
|
package/src/lib/metadata.ts
CHANGED
|
@@ -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:
|
|
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';
|
package/target/lib/attr.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function attr<This extends HTMLElement>({ get, set }: ClassAccessorDecoratorTarget<This, unknown>, ctx: ClassAccessorDecoratorContext<This>)
|
|
1
|
+
export declare function attr(): <This extends HTMLElement>({ get, set }: ClassAccessorDecoratorTarget<This, unknown>, ctx: ClassAccessorDecoratorContext<This>) => ClassAccessorDecoratorResult<This, any>;
|
package/target/lib/attr.js
CHANGED
|
@@ -1,35 +1,52 @@
|
|
|
1
1
|
import { metadataStore } from './metadata.js';
|
|
2
|
-
export function attr(
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
27
|
-
|
|
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
|
|
32
|
+
return ogValue;
|
|
30
33
|
}
|
|
31
|
-
|
|
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
|
package/target/lib/attr.js.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/target/lib/attr.test.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":";AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"attr.test.js","sourceRoot":"","sources":["../../src/lib/attr.test.ts"],"names":[],"mappings":"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"}
|
package/target/lib/element.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
export
|
|
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;
|
package/target/lib/element.js
CHANGED
|
@@ -1,41 +1,42 @@
|
|
|
1
1
|
import { metadataStore } from './metadata.js';
|
|
2
|
-
export function element(
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
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;
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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;
|
|
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"}
|
package/target/lib/metadata.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
export interface AttrDef {
|
|
2
|
+
propName: string | symbol;
|
|
3
|
+
attrName: string;
|
|
4
|
+
}
|
|
1
5
|
export declare class ElementMetadata {
|
|
2
|
-
attrs:
|
|
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> {
|
package/target/lib/metadata.js
CHANGED
|
@@ -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;
|
|
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,
|
|
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"}
|
package/src/lib/tag-name.test.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { element } from './element.js';
|
|
2
|
-
import { tagName } from './tag-name.js';
|
|
3
|
-
|
|
4
|
-
describe('tag-name', () => {
|
|
5
|
-
it('should define a custom element', async () => {
|
|
6
|
-
@element
|
|
7
|
-
class MyElement extends HTMLElement {
|
|
8
|
-
@tagName static tagName = 'tn-test-1';
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
return customElements.whenDefined(MyElement.tagName);
|
|
12
|
-
});
|
|
13
|
-
});
|
package/src/lib/tag-name.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { metadataStore } from './metadata.js';
|
|
2
|
-
|
|
3
|
-
export function tagName<This extends typeof HTMLElement>(
|
|
4
|
-
_val: unknown,
|
|
5
|
-
ctx: ClassFieldDecoratorContext<This, string>
|
|
6
|
-
) {
|
|
7
|
-
const metadata = metadataStore.read(ctx.metadata);
|
|
8
|
-
|
|
9
|
-
metadata.tagName = ctx.access.get;
|
|
10
|
-
}
|
package/target/lib/tag-name.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function tagName<This extends typeof HTMLElement>(_val: unknown, ctx: ClassFieldDecoratorContext<This, string>): void;
|
package/target/lib/tag-name.js
DELETED
|
@@ -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"}
|