@joist/element 4.0.0-next.1 → 4.0.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -23
- package/package.json +1 -1
- package/src/lib/attr.test.ts +85 -20
- package/src/lib/attr.ts +61 -34
- package/src/lib/element.test.ts +70 -8
- package/src/lib/element.ts +61 -39
- package/src/lib/listen.ts +10 -4
- package/src/lib/metadata.ts +10 -3
- package/src/lib/result.ts +12 -16
- package/src/lib/tags.ts +9 -66
- package/src/lib.ts +1 -3
- package/target/lib/attr.d.ts +4 -1
- package/target/lib/attr.js +49 -28
- package/target/lib/attr.js.map +1 -1
- package/target/lib/attr.test.js +148 -24
- package/target/lib/attr.test.js.map +1 -1
- package/target/lib/element.d.ts +6 -1
- package/target/lib/element.js +47 -31
- package/target/lib/element.js.map +1 -1
- package/target/lib/element.test.js +131 -17
- package/target/lib/element.test.js.map +1 -1
- package/target/lib/listen.d.ts +2 -1
- package/target/lib/listen.js +6 -3
- package/target/lib/listen.js.map +1 -1
- package/target/lib/metadata.d.ts +11 -3
- package/target/lib/metadata.js +0 -1
- package/target/lib/metadata.js.map +1 -1
- package/target/lib/result.d.ts +6 -3
- package/target/lib/result.js +7 -4
- package/target/lib/result.js.map +1 -1
- package/target/lib/tags.d.ts +5 -17
- package/target/lib/tags.js +5 -11
- package/target/lib/tags.js.map +1 -1
- package/target/lib.d.ts +1 -3
- package/target/lib.js +1 -3
- package/target/lib.js.map +1 -1
- package/src/lib/shadow.test.ts +0 -40
- package/src/lib/shadow.ts +0 -16
- package/src/lib/tag-name.test.ts +0 -13
- package/src/lib/tag-name.ts +0 -10
- package/target/lib/shadow.d.ts +0 -2
- package/target/lib/shadow.js +0 -10
- package/target/lib/shadow.js.map +0 -1
- package/target/lib/shadow.test.d.ts +0 -1
- package/target/lib/shadow.test.js +0 -69
- package/target/lib/shadow.test.js.map +0 -1
- 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/src/lib/tags.ts
CHANGED
|
@@ -1,57 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
* NOTE: TemplateStringsArray can be used to cache via a WeakMap.
|
|
3
|
-
*
|
|
4
|
-
* function html(strs: TemplateStringsArray) {
|
|
5
|
-
* return strs
|
|
6
|
-
* }
|
|
7
|
-
*
|
|
8
|
-
* class Foo {
|
|
9
|
-
* hello = html`world`;
|
|
10
|
-
* }
|
|
11
|
-
*
|
|
12
|
-
* // these will be the same instance of TemplateStringsArray
|
|
13
|
-
* new Foo().hello === new Foo().hello
|
|
14
|
-
*/
|
|
1
|
+
import { JoistShadowResult } from './result.js';
|
|
15
2
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
type MathTags = keyof MathMLElementTagNameMap;
|
|
21
|
-
|
|
22
|
-
export const htmlTemplateCache = new WeakMap<TemplateStringsArray, HTMLTemplateElement>();
|
|
23
|
-
|
|
24
|
-
export class HTMLResult extends ShadowResult {
|
|
25
|
-
query<K extends Tags>(selectors: K): HTMLElementTagNameMap[K] | null;
|
|
26
|
-
query<K extends SVGTags>(selectors: K): SVGElementTagNameMap[K] | null;
|
|
27
|
-
query<K extends MathTags>(selectors: K): MathMLElementTagNameMap[K] | null;
|
|
28
|
-
query<E extends Element = Element>(selectors: string): E | null;
|
|
29
|
-
query<K extends Tags>(query: K) {
|
|
30
|
-
return this.shadow.querySelector<K>(query);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
queryAll<K extends Tags>(selectors: K): NodeListOf<HTMLElementTagNameMap[K]>;
|
|
34
|
-
queryAll<K extends SVGTags>(selectors: K): NodeListOf<SVGElementTagNameMap[K]>;
|
|
35
|
-
queryAll<K extends MathTags>(selectors: K): NodeListOf<MathMLElementTagNameMap[K]>;
|
|
36
|
-
queryAll<E extends Element = Element>(selectors: string): NodeListOf<E>;
|
|
37
|
-
queryAll<K extends Tags>(query: K) {
|
|
38
|
-
return this.shadow.querySelectorAll<K>(query);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* THe HTMLTemplateElement itself will be cached but a new instance of the result returned
|
|
43
|
-
*/
|
|
44
|
-
apply(root: ShadowRoot): void {
|
|
45
|
-
let template: HTMLTemplateElement;
|
|
46
|
-
|
|
47
|
-
if (htmlTemplateCache.has(this.strings)) {
|
|
48
|
-
template = htmlTemplateCache.get(this.strings) as HTMLTemplateElement;
|
|
49
|
-
} else {
|
|
50
|
-
template = document.createElement('template');
|
|
51
|
-
|
|
52
|
-
template.innerHTML = concat(this.strings);
|
|
53
|
-
htmlTemplateCache.set(this.strings, template);
|
|
54
|
-
}
|
|
3
|
+
export class HTMLResult extends JoistShadowResult {
|
|
4
|
+
setup(root: ShadowRoot): void {
|
|
5
|
+
let template = document.createElement('template');
|
|
6
|
+
template.innerHTML = concat(this.strings);
|
|
55
7
|
|
|
56
8
|
root.append(template.content.cloneNode(true));
|
|
57
9
|
}
|
|
@@ -61,19 +13,10 @@ export function html(strings: TemplateStringsArray, ...values: any[]): HTMLResul
|
|
|
61
13
|
return new HTMLResult(strings, ...values);
|
|
62
14
|
}
|
|
63
15
|
|
|
64
|
-
export
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
let sheet: CSSStyleSheet;
|
|
69
|
-
|
|
70
|
-
if (styleSheetCache.has(this.strings)) {
|
|
71
|
-
sheet = styleSheetCache.get(this.strings) as CSSStyleSheet;
|
|
72
|
-
} else {
|
|
73
|
-
sheet = new CSSStyleSheet();
|
|
74
|
-
|
|
75
|
-
sheet.replaceSync(concat(this.strings));
|
|
76
|
-
}
|
|
16
|
+
export class CSSResult extends JoistShadowResult {
|
|
17
|
+
setup(root: ShadowRoot): void {
|
|
18
|
+
let sheet = new CSSStyleSheet();
|
|
19
|
+
sheet.replaceSync(concat(this.strings));
|
|
77
20
|
|
|
78
21
|
root.adoptedStyleSheets = [...root.adoptedStyleSheets, sheet];
|
|
79
22
|
}
|
package/src/lib.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { JoistShadowResult as TemplateResult } from './lib/result.js';
|
|
2
2
|
export { css, html, HTMLResult, CSSResult } from './lib/tags.js';
|
|
3
|
-
export { shadow } from './lib/shadow.js';
|
|
4
3
|
export { attr } from './lib/attr.js';
|
|
5
4
|
export { listen } from './lib/listen.js';
|
|
6
|
-
export { tagName } from './lib/tag-name.js';
|
|
7
5
|
export { element } from './lib/element.js';
|
package/target/lib/attr.d.ts
CHANGED
|
@@ -1 +1,4 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface AttrOpts {
|
|
2
|
+
observe?: boolean;
|
|
3
|
+
}
|
|
4
|
+
export declare function attr(opts?: AttrOpts): <This extends HTMLElement>({ get, set }: ClassAccessorDecoratorTarget<This, unknown>, ctx: ClassAccessorDecoratorContext<This>) => ClassAccessorDecoratorResult<This, any>;
|
package/target/lib/attr.js
CHANGED
|
@@ -1,35 +1,56 @@
|
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const attr = this.getAttribute(name);
|
|
22
|
-
if (attr !== null) {
|
|
23
|
-
if (attr === '') {
|
|
24
|
-
return true;
|
|
2
|
+
export function attr(opts) {
|
|
3
|
+
return function attrDecorator({ get, set }, ctx) {
|
|
4
|
+
const attrName = parseAttrName(ctx.name);
|
|
5
|
+
const meta = metadataStore.read(ctx.metadata);
|
|
6
|
+
meta.attrs.push({
|
|
7
|
+
propName: ctx.name,
|
|
8
|
+
attrName,
|
|
9
|
+
observe: opts?.observe ?? true
|
|
10
|
+
});
|
|
11
|
+
return {
|
|
12
|
+
set(value) {
|
|
13
|
+
if (value === true) {
|
|
14
|
+
this.setAttribute(attrName, '');
|
|
15
|
+
}
|
|
16
|
+
else if (value === false) {
|
|
17
|
+
this.removeAttribute(attrName);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
this.setAttribute(attrName, String(value));
|
|
25
21
|
}
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
set.call(this, value);
|
|
23
|
+
},
|
|
24
|
+
get() {
|
|
25
|
+
const ogValue = get.call(this);
|
|
26
|
+
const attr = this.getAttribute(attrName);
|
|
27
|
+
if (attr !== null) {
|
|
28
|
+
if (attr === '') {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
if (typeof ogValue === 'number') {
|
|
32
|
+
return Number(attr);
|
|
33
|
+
}
|
|
34
|
+
return attr;
|
|
28
35
|
}
|
|
29
|
-
return
|
|
36
|
+
return ogValue;
|
|
30
37
|
}
|
|
31
|
-
|
|
32
|
-
}
|
|
38
|
+
};
|
|
33
39
|
};
|
|
34
40
|
}
|
|
41
|
+
function parseAttrName(val) {
|
|
42
|
+
let value;
|
|
43
|
+
if (typeof val === 'symbol') {
|
|
44
|
+
if (val.description) {
|
|
45
|
+
value = val.description;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
throw new Error('Cannot handle Symbol property without description');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
value = val;
|
|
53
|
+
}
|
|
54
|
+
return value.toLowerCase().replaceAll(' ', '-');
|
|
55
|
+
}
|
|
35
56
|
//# sourceMappingURL=attr.js.map
|
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;
|
|
1
|
+
{"version":3,"file":"attr.js","sourceRoot":"","sources":["../../src/lib/attr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAM9C,MAAM,UAAU,IAAI,CAAC,IAAe;IAClC,OAAO,SAAS,aAAa,CAC3B,EAAE,GAAG,EAAE,GAAG,EAA+C,EACzD,GAAwC;QAExC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,QAAQ,EAAE,GAAG,CAAC,IAAI;YAClB,QAAQ;YACR,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,IAAI;SAC/B,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,CAAC,KAAc;gBAChB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClC,CAAC;qBAAM,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;oBAC3B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;gBACjC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBAED,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;YACD,GAAG;gBACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAEzC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAElB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;wBAChB,OAAO,IAAI,CAAC;oBACd,CAAC;oBAGD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;wBAChC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtB,CAAC;oBAGD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAGD,OAAO,OAAO,CAAC;YACjB,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,GAAoB;IACzC,IAAI,KAAa,CAAC;IAElB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YACpB,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC"}
|
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,98 @@ describe('@attr()', () => {
|
|
|
156
187
|
expect(el.hasAttribute('value3')).to.be.false;
|
|
157
188
|
expect(el.hasAttribute('value4')).to.be.true;
|
|
158
189
|
});
|
|
190
|
+
it('should normalize attribute names', async () => {
|
|
191
|
+
const value3 = Symbol('Value from SYMBOL');
|
|
192
|
+
let MyElement = (() => {
|
|
193
|
+
var _a;
|
|
194
|
+
let _classDecorators = [element({
|
|
195
|
+
tagName: 'attr-test-4'
|
|
196
|
+
})];
|
|
197
|
+
let _classDescriptor;
|
|
198
|
+
let _classExtraInitializers = [];
|
|
199
|
+
let _classThis;
|
|
200
|
+
let _classSuper = HTMLElement;
|
|
201
|
+
let _Value1_decorators;
|
|
202
|
+
let _Value1_initializers = [];
|
|
203
|
+
let _Value1_extraInitializers = [];
|
|
204
|
+
let _member_decorators;
|
|
205
|
+
let _member_initializers = [];
|
|
206
|
+
let _member_extraInitializers = [];
|
|
207
|
+
let _member_decorators_1;
|
|
208
|
+
let _member_initializers_1 = [];
|
|
209
|
+
let _member_extraInitializers_1 = [];
|
|
210
|
+
var MyElement = class extends _classSuper {
|
|
211
|
+
static { _classThis = this; }
|
|
212
|
+
static {
|
|
213
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
214
|
+
__esDecorate(this, null, _Value1_decorators, { kind: "accessor", name: "Value1", static: false, private: false, access: { has: obj => "Value1" in obj, get: obj => obj.Value1, set: (obj, value) => { obj.Value1 = value; } }, metadata: _metadata }, _Value1_initializers, _Value1_extraInitializers);
|
|
215
|
+
__esDecorate(this, null, _member_decorators, { kind: "accessor", name: 'Value 2', static: false, private: false, access: { has: obj => 'Value 2' in obj, get: obj => obj['Value 2'], set: (obj, value) => { obj['Value 2'] = value; } }, metadata: _metadata }, _member_initializers, _member_extraInitializers);
|
|
216
|
+
__esDecorate(this, null, _member_decorators_1, { kind: "accessor", name: _a, static: false, private: false, access: { has: obj => _a in obj, get: obj => obj[_a], set: (obj, value) => { obj[_a] = value; } }, metadata: _metadata }, _member_initializers_1, _member_extraInitializers_1);
|
|
217
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
218
|
+
MyElement = _classThis = _classDescriptor.value;
|
|
219
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
220
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
221
|
+
}
|
|
222
|
+
#Value1_accessor_storage = __runInitializers(this, _Value1_initializers, 'hello');
|
|
223
|
+
get Value1() { return this.#Value1_accessor_storage; }
|
|
224
|
+
set Value1(value) { this.#Value1_accessor_storage = value; }
|
|
225
|
+
#_a_accessor_storage = (__runInitializers(this, _Value1_extraInitializers), __runInitializers(this, _member_initializers, 0));
|
|
226
|
+
get ['Value 2']() { return this.#_a_accessor_storage; }
|
|
227
|
+
set ['Value 2'](value) { this.#_a_accessor_storage = value; }
|
|
228
|
+
#_b_accessor_storage = (__runInitializers(this, _member_extraInitializers), __runInitializers(this, _member_initializers_1, true));
|
|
229
|
+
get [(_Value1_decorators = [attr()], _member_decorators = [attr()], _member_decorators_1 = [attr()], _a = __propKey(value3))]() { return this.#_b_accessor_storage; }
|
|
230
|
+
set [_a](value) { this.#_b_accessor_storage = value; }
|
|
231
|
+
constructor() {
|
|
232
|
+
super(...arguments);
|
|
233
|
+
__runInitializers(this, _member_extraInitializers_1);
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
return MyElement = _classThis;
|
|
237
|
+
})();
|
|
238
|
+
const el = await fixture(html `<attr-test-4></attr-test-4>`);
|
|
239
|
+
expect([...el.attributes].map((attr) => attr.name)).to.deep.equal([
|
|
240
|
+
'value1',
|
|
241
|
+
'value-2',
|
|
242
|
+
'value-from-symbol'
|
|
243
|
+
]);
|
|
244
|
+
});
|
|
245
|
+
it('should throw an error for symbols with no description', async () => {
|
|
246
|
+
expect(() => {
|
|
247
|
+
const value = Symbol();
|
|
248
|
+
let MyElement = (() => {
|
|
249
|
+
var _a;
|
|
250
|
+
let _classDecorators = [element({
|
|
251
|
+
tagName: 'attr-test-4'
|
|
252
|
+
})];
|
|
253
|
+
let _classDescriptor;
|
|
254
|
+
let _classExtraInitializers = [];
|
|
255
|
+
let _classThis;
|
|
256
|
+
let _classSuper = HTMLElement;
|
|
257
|
+
let _member_decorators;
|
|
258
|
+
let _member_initializers = [];
|
|
259
|
+
let _member_extraInitializers = [];
|
|
260
|
+
var MyElement = class extends _classSuper {
|
|
261
|
+
static { _classThis = this; }
|
|
262
|
+
static {
|
|
263
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
264
|
+
__esDecorate(this, null, _member_decorators, { kind: "accessor", name: _a, static: false, private: false, access: { has: obj => _a in obj, get: obj => obj[_a], set: (obj, value) => { obj[_a] = value; } }, metadata: _metadata }, _member_initializers, _member_extraInitializers);
|
|
265
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
266
|
+
MyElement = _classThis = _classDescriptor.value;
|
|
267
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
268
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
269
|
+
}
|
|
270
|
+
#_a_accessor_storage = __runInitializers(this, _member_initializers, true);
|
|
271
|
+
get [(_member_decorators = [attr()], _a = __propKey(value))]() { return this.#_a_accessor_storage; }
|
|
272
|
+
set [_a](value) { this.#_a_accessor_storage = value; }
|
|
273
|
+
constructor() {
|
|
274
|
+
super(...arguments);
|
|
275
|
+
__runInitializers(this, _member_extraInitializers);
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
return MyElement = _classThis;
|
|
279
|
+
})();
|
|
280
|
+
new MyElement();
|
|
281
|
+
}).to.throw('Cannot handle Symbol property without description');
|
|
282
|
+
});
|
|
159
283
|
});
|
|
160
284
|
//# sourceMappingURL=attr.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attr.test.js","sourceRoot":"","sources":["../../src/lib/attr.test.ts"],"names":[],"mappings":";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":";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,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YAIlD,SAAS;oCAHd,OAAO,CAAC;oBACP,OAAO,EAAE,aAAa;iBACvB,CAAC;;;;8BACsB,WAAW;;;;;;;;;;;;;iCAAnB,SAAQ,WAAW;;;;0CAChC,IAAI,EAAE;0CAGN,IAAI,EAAE;0CAGN,IAAI,EAAE;0CAGN,IAAI,EAAE;oBARP,uKAAS,MAAM,6BAAN,MAAM,uFAAO;oBAGtB,uKAAS,MAAM,6BAAN,MAAM,uFAAK;oBAGpB,uKAAS,MAAM,6BAAN,MAAM,uFAAS;oBAGxB,uKAAS,MAAM,6BAAN,MAAM,uFAAW;oBAX5B,6KAYC;;;oBAZK,uDAAS;;gBAEb,yEAAkB,GAAG,EAAC;gBAAtB,IAAS,MAAM,4CAAO;gBAAtB,IAAS,MAAM,kDAAO;gBAGtB,8HAAkB,CAAC,GAAC;gBAApB,IAAS,MAAM,4CAAK;gBAApB,IAAS,MAAM,kDAAK;gBAGpB,8HAAkB,KAAK,GAAC;gBAAxB,IAAS,MAAM,4CAAS;gBAAxB,IAAS,MAAM,kDAAS;gBAGxB,8HAAkB,OAAO,GAAC;gBAA1B,IAAS,MAAM,4CAAW;gBAA1B,IAAS,MAAM,kDAAW;;;;;;;;QAG5B,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,IAAI,CAAA,8DAA8D,CACnE,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAIpD,SAAS;oCAHd,OAAO,CAAC;oBACP,OAAO,EAAE,aAAa;iBACvB,CAAC;;;;8BACsB,WAAW;;;;;;;;;;iCAAnB,SAAQ,WAAW;;;;0CAChC,IAAI,EAAE;0CAGN,IAAI,EAAE;0CAGN,IAAI,EAAE;oBALP,uKAAS,MAAM,6BAAN,MAAM,uFAAa;oBAG5B,uKAAS,MAAM,6BAAN,MAAM,uFAAQ;oBAGvB,uKAAS,MAAM,6BAAN,MAAM,uFAAM;oBARvB,6KASC;;;oBATK,uDAAS;;gBAEb,yEAAkB,SAAS,EAAC;gBAA5B,IAAS,MAAM,4CAAa;gBAA5B,IAAS,MAAM,kDAAa;gBAG5B,8HAAkB,IAAI,GAAC;gBAAvB,IAAS,MAAM,4CAAQ;gBAAvB,IAAS,MAAM,kDAAQ;gBAGvB,8HAAkB,EAAE,GAAC;gBAArB,IAAS,MAAM,4CAAM;gBAArB,IAAS,MAAM,kDAAM;;;;;;;;QAGvB,MAAM,EAAE,GAAG,MAAM,OAAO,CAAY,IAAI,CAAA,6BAA6B,CAAC,CAAC;QAEvE,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAIzD,SAAS;oCAHd,OAAO,CAAC;oBACP,OAAO,EAAE,aAAa;iBACvB,CAAC;;;;8BACsB,WAAW;;;;;;;;;;;;;iCAAnB,SAAQ,WAAW;;;;0CAChC,IAAI,EAAE;0CAGN,IAAI,EAAE;0CAGN,IAAI,EAAE;0CAGN,IAAI,EAAE;oBARP,uKAAS,MAAM,6BAAN,MAAM,uFAAW;oBAG1B,uKAAS,MAAM,6BAAN,MAAM,uFAAK;oBAGpB,uKAAS,MAAM,6BAAN,MAAM,uFAAQ;oBAGvB,uKAAS,MAAM,6BAAN,MAAM,uFAAS;oBAX1B,6KAYC;;;oBAZK,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;gBAGvB,8HAAkB,KAAK,GAAC;gBAAxB,IAAS,MAAM,4CAAS;gBAAxB,IAAS,MAAM,kDAAS;;;;;;;;QAG1B,MAAM,EAAE,GAAG,MAAM,OAAO,CAAY,IAAI,CAAA,6BAA6B,CAAC,CAAC;QAEvE,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC;QACpB,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC;QAChB,EAAE,CAAC,MAAM,GAAG,KAAK,CAAC;QAClB,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC;QAEjB,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,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAKrC,SAAS;;oCAHd,OAAO,CAAC;oBACP,OAAO,EAAE,aAAa;iBACvB,CAAC;;;;8BACsB,WAAW;;;;;;;;;;iCAAnB,SAAQ,WAAW;;;;oBAEjC,uKAAS,MAAM,6BAAN,MAAM,uFAAW;oBAG1B,iTAAyB;oBAGzB,2RAAyB;oBAR3B,6KASC;;;oBATK,uDAAS;;gBAEb,yEAAkB,OAAO,EAAC;gBAA1B,IAAS,MAAM,4CAAW;gBAA1B,IAAS,MAAM,kDAAW;gBAG1B,0HAAuB,CAAC,GAAC;gBAAzB,IAAS,CAAC,SAAS,CAAC,wCAAK;gBAAzB,IAAS,CAAC,SAAS,CAAC,8CAAK;gBAGzB,4HAAoB,IAAI,GAAC;gBAAzB,IAAS,wBAPR,IAAI,EAAE,yBAGN,IAAI,EAAE,2BAGN,IAAI,EAAE,kBACG,MAAM,GAAC,wCAAQ;gBAAzB,IAAS,IAAQ,8CAAQ;;;;;;;;QAG3B,MAAM,EAAE,GAAG,MAAM,OAAO,CAAY,IAAI,CAAA,6BAA6B,CAAC,CAAC;QAEvE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAChE,QAAQ;YACR,SAAS;YACT,mBAAmB;SACpB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,CAAC,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC;gBAKjB,SAAS;;wCAHd,OAAO,CAAC;wBACP,OAAO,EAAE,aAAa;qBACvB,CAAC;;;;kCACsB,WAAW;;;;qCAAnB,SAAQ,WAAW;;;;wBAEjC,qRAAwB;wBAF1B,6KAGC;;;wBAHK,uDAAS;;oBAEb,qEAAmB,IAAI,EAAC;oBAAxB,IAAS,wBADR,IAAI,EAAE,kBACG,KAAK,GAAC,wCAAQ;oBAAxB,IAAS,IAAO,8CAAQ;;;;;;;;YAG1B,IAAI,SAAS,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/target/lib/element.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { ShadowResult } from './result.js';
|
|
2
|
+
export interface ElementOpts<T> {
|
|
3
|
+
tagName?: string;
|
|
4
|
+
shadow?: Array<ShadowResult | ((el: T) => void)>;
|
|
5
|
+
}
|
|
6
|
+
export declare function element<Target extends CustomElementConstructor, Instance extends InstanceType<Target>>(opts?: ElementOpts<Instance>): (Base: Target, ctx: ClassDecoratorContext<Target>) => {
|
|
2
7
|
new (...args: any[]): {
|
|
3
8
|
connectedCallback(): void;
|
|
4
9
|
accessKey: string;
|
package/target/lib/element.js
CHANGED
|
@@ -1,41 +1,57 @@
|
|
|
1
1
|
import { metadataStore } from './metadata.js';
|
|
2
|
-
export function element(
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
return class JoistElement extends Base {
|
|
13
|
-
static observedAttributes = [...meta.attrs];
|
|
14
|
-
constructor(...args) {
|
|
15
|
-
super(...args);
|
|
16
|
-
const root = this.shadowRoot || this;
|
|
17
|
-
for (let [event, listener] of meta.listeners) {
|
|
18
|
-
root.addEventListener(event, listener.bind(this));
|
|
2
|
+
export function element(opts) {
|
|
3
|
+
return function elementDecorator(Base, ctx) {
|
|
4
|
+
const meta = metadataStore.read(ctx.metadata);
|
|
5
|
+
ctx.addInitializer(function () {
|
|
6
|
+
if (opts?.tagName) {
|
|
7
|
+
if (!customElements.get(opts.tagName)) {
|
|
8
|
+
customElements.define(opts.tagName, this);
|
|
9
|
+
}
|
|
19
10
|
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
11
|
+
});
|
|
12
|
+
return class JoistElement extends Base {
|
|
13
|
+
static observedAttributes = meta.attrs
|
|
14
|
+
.filter(({ observe }) => observe)
|
|
15
|
+
.map(({ attrName }) => attrName);
|
|
16
|
+
constructor(...args) {
|
|
17
|
+
super(...args);
|
|
18
|
+
if (opts?.shadow) {
|
|
19
|
+
this.attachShadow({ mode: 'open' });
|
|
20
|
+
for (let res of opts.shadow) {
|
|
21
|
+
if (typeof res === 'function') {
|
|
22
|
+
res(this);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
res.run(this);
|
|
28
26
|
}
|
|
29
27
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
}
|
|
29
|
+
for (let [event, { cb, root }] of meta.listeners) {
|
|
30
|
+
root(this).addEventListener(event, cb.bind(this));
|
|
33
31
|
}
|
|
34
32
|
}
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
connectedCallback() {
|
|
34
|
+
reflectAttributeValues(this, meta.attrs);
|
|
35
|
+
if (super.connectedCallback) {
|
|
36
|
+
super.connectedCallback();
|
|
37
|
+
}
|
|
37
38
|
}
|
|
38
|
-
}
|
|
39
|
+
};
|
|
39
40
|
};
|
|
40
41
|
}
|
|
42
|
+
function reflectAttributeValues(el, attrs) {
|
|
43
|
+
for (let { propName, attrName } of attrs) {
|
|
44
|
+
const value = Reflect.get(el, propName);
|
|
45
|
+
if (value !== null && value !== undefined && value !== '') {
|
|
46
|
+
if (typeof value === 'boolean') {
|
|
47
|
+
if (value === true) {
|
|
48
|
+
el.setAttribute(attrName, '');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
el.setAttribute(attrName, String(value));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
41
57
|
//# sourceMappingURL=element.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/lib/element.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/lib/element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,aAAa,EAAE,MAAM,eAAe,CAAC;AAQvD,MAAM,UAAU,OAAO,CAGrB,IAA4B;IAC5B,OAAO,SAAS,gBAAgB,CAAC,IAAY,EAAE,GAAkC;QAC/E,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9C,GAAG,CAAC,cAAc,CAAC;YACjB,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,YAAa,SAAQ,IAAI;YACpC,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK;iBACnC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC;iBAChC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;YAEnC,YAAY,GAAG,IAAW;gBACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;gBAEf,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;oBAEpC,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBAC5B,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;4BAC9B,GAAG,CAAC,IAA2B,CAAC,CAAC;wBACnC,CAAC;6BAAM,CAAC;4BACN,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAChB,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjD,IAAI,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,iBAAiB;gBACf,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEzC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAC5B,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,EAAe,EAAE,KAAgB;IAC/D,KAAK,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,KAAK,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAGxC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YAC1D,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAEnB,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;iBAAM,CAAC;gBAEN,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|