@joist/element 4.0.0-next.13 → 4.0.0-next.16
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/package.json +1 -1
- package/src/lib/listen.ts +4 -4
- package/src/lib/metadata.ts +7 -7
- package/src/lib/query.ts +1 -1
- package/src/lib/template.test.ts +30 -2
- package/target/lib/listen.d.ts +1 -1
- package/target/lib/listen.js.map +1 -1
- package/target/lib/metadata.d.ts +7 -7
- package/target/lib/metadata.js.map +1 -1
- package/target/lib/query.js +1 -0
- package/target/lib/query.js.map +1 -1
- package/target/lib/template.test.js +23 -2
- package/target/lib/template.test.js.map +1 -1
package/package.json
CHANGED
package/src/lib/listen.ts
CHANGED
|
@@ -2,16 +2,16 @@ import { ListenerSelector, metadataStore } from './metadata.js';
|
|
|
2
2
|
|
|
3
3
|
export function listen<This extends HTMLElement>(
|
|
4
4
|
event: string,
|
|
5
|
-
selector?: ListenerSelector | string
|
|
5
|
+
selector?: ListenerSelector<This> | string
|
|
6
6
|
) {
|
|
7
7
|
return function listenDecorator(value: (e: any) => void, ctx: ClassMethodDecoratorContext<This>) {
|
|
8
|
-
const metadata = metadataStore.read(ctx.metadata);
|
|
8
|
+
const metadata = metadataStore.read<This>(ctx.metadata);
|
|
9
9
|
|
|
10
|
-
let selectorInternal: ListenerSelector = (el
|
|
10
|
+
let selectorInternal: ListenerSelector<This> = (el) => el.shadowRoot ?? el;
|
|
11
11
|
|
|
12
12
|
if (selector) {
|
|
13
13
|
if (typeof selector === 'string') {
|
|
14
|
-
selectorInternal = (el:
|
|
14
|
+
selectorInternal = (el: This) => {
|
|
15
15
|
if (el.shadowRoot) {
|
|
16
16
|
return el.shadowRoot.querySelector(selector);
|
|
17
17
|
}
|
package/src/lib/metadata.ts
CHANGED
|
@@ -6,22 +6,22 @@ export interface AttrDef {
|
|
|
6
6
|
observe: boolean;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
export type ListenerSelector = (el:
|
|
9
|
+
export type ListenerSelector<T> = (el: T) => Element | ShadowRoot | null;
|
|
10
10
|
|
|
11
|
-
export interface Listener {
|
|
11
|
+
export interface Listener<T> {
|
|
12
12
|
event: string;
|
|
13
13
|
cb: (e: Event) => void;
|
|
14
|
-
selector: ListenerSelector
|
|
14
|
+
selector: ListenerSelector<T>;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
export class ElementMetadata {
|
|
17
|
+
export class ElementMetadata<T> {
|
|
18
18
|
attrs: AttrDef[] = [];
|
|
19
|
-
listeners: Listener[] = [];
|
|
19
|
+
listeners: Listener<T>[] = [];
|
|
20
20
|
onReady = new Set<Function>();
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
export class MetadataStore extends WeakMap<object, ElementMetadata
|
|
24
|
-
read(value: object) {
|
|
23
|
+
export class MetadataStore extends WeakMap<object, ElementMetadata<unknown>> {
|
|
24
|
+
read<T>(value: object): ElementMetadata<T> {
|
|
25
25
|
if (!this.has(value)) {
|
|
26
26
|
this.set(value, new ElementMetadata());
|
|
27
27
|
}
|
package/src/lib/query.ts
CHANGED
package/src/lib/template.test.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { template } from './template.js';
|
|
|
4
4
|
|
|
5
5
|
// Run all tests with both shadow and light dom
|
|
6
6
|
const TESTS = [
|
|
7
|
-
function
|
|
7
|
+
function bindableNodes(el: HTMLElement, root: HTMLElement | ShadowRoot) {
|
|
8
8
|
it(`should intialize bindable nodes ${root instanceof ShadowRoot ? '(ShadowDOM)' : '(LightDOM)'}`, () => {
|
|
9
9
|
el.title = 'Hello World';
|
|
10
10
|
el.ariaLabel = 'This is the label';
|
|
@@ -32,7 +32,7 @@ const TESTS = [
|
|
|
32
32
|
);
|
|
33
33
|
});
|
|
34
34
|
},
|
|
35
|
-
function
|
|
35
|
+
function attributeNodes(el: HTMLElement, root: HTMLElement | ShadowRoot) {
|
|
36
36
|
it(`should intialize template attributes ${root instanceof ShadowRoot ? '(ShadowDOM)' : '(LightDOM)'}`, () => {
|
|
37
37
|
el.ariaLabel = 'This is the label';
|
|
38
38
|
el.ariaDescription = 'This is the description';
|
|
@@ -83,6 +83,34 @@ const TESTS = [
|
|
|
83
83
|
'<span #:bind="title">Hello World</span><ul><li #:bind="ariaLabel">This is the label</li><li #:bind="ariaDescription">This is the description</li></ul>'
|
|
84
84
|
);
|
|
85
85
|
});
|
|
86
|
+
},
|
|
87
|
+
function customPrefix(el: HTMLElement, root: HTMLElement | ShadowRoot) {
|
|
88
|
+
it(`should use custom getter for values ${root instanceof ShadowRoot ? '(ShadowDOM)' : '(LightDOM)'}`, () => {
|
|
89
|
+
el.title = 'Hello World';
|
|
90
|
+
el.ariaLabel = 'This is the label';
|
|
91
|
+
el.ariaDescription = 'This is the description';
|
|
92
|
+
|
|
93
|
+
root.innerHTML = /*html*/ `
|
|
94
|
+
<span x-bind="title"></span>
|
|
95
|
+
|
|
96
|
+
<ul x-aria-label="ariaLabel">
|
|
97
|
+
<li x-bind="ariaLabel"></li>
|
|
98
|
+
<li x-bind="ariaDescription"></li>
|
|
99
|
+
</ul>
|
|
100
|
+
`;
|
|
101
|
+
|
|
102
|
+
const render = template({ tokenPrefix: 'x-' }).bind(el);
|
|
103
|
+
|
|
104
|
+
render();
|
|
105
|
+
|
|
106
|
+
assert.equal(
|
|
107
|
+
root.innerHTML
|
|
108
|
+
.split('\n')
|
|
109
|
+
.map((res) => res.trim())
|
|
110
|
+
.join(''),
|
|
111
|
+
'<span x-bind="title">Hello World</span><ul x-aria-label="ariaLabel" aria-label="This is the label"><li x-bind="ariaLabel">This is the label</li><li x-bind="ariaDescription">This is the description</li></ul>'
|
|
112
|
+
);
|
|
113
|
+
});
|
|
86
114
|
}
|
|
87
115
|
];
|
|
88
116
|
|
package/target/lib/listen.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { ListenerSelector } from './metadata.js';
|
|
2
|
-
export declare function listen<This extends HTMLElement>(event: string, selector?: ListenerSelector | string): (value: (e: any) => void, ctx: ClassMethodDecoratorContext<This>) => void;
|
|
2
|
+
export declare function listen<This extends HTMLElement>(event: string, selector?: ListenerSelector<This> | string): (value: (e: any) => void, ctx: ClassMethodDecoratorContext<This>) => void;
|
package/target/lib/listen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listen.js","sourceRoot":"","sources":["../../src/lib/listen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,aAAa,EAAE,MAAM,eAAe,CAAC;AAEhE,MAAM,UAAU,MAAM,CACpB,KAAa,EACb,
|
|
1
|
+
{"version":3,"file":"listen.js","sourceRoot":"","sources":["../../src/lib/listen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,aAAa,EAAE,MAAM,eAAe,CAAC;AAEhE,MAAM,UAAU,MAAM,CACpB,KAAa,EACb,QAA0C;IAE1C,OAAO,SAAS,eAAe,CAAC,KAAuB,EAAE,GAAsC;QAC7F,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;QAExD,IAAI,gBAAgB,GAA2B,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC;QAE3E,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,gBAAgB,GAAG,CAAC,EAAQ,EAAE,EAAE;oBAC9B,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;wBAClB,OAAO,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAC/C,CAAC;oBAED,OAAO,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACpC,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,gBAAgB,GAAG,QAAQ,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;YACtB,KAAK;YACL,EAAE,EAAE,KAAK;YACT,QAAQ,EAAE,gBAAgB;SAC3B,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
package/target/lib/metadata.d.ts
CHANGED
|
@@ -3,18 +3,18 @@ export interface AttrDef {
|
|
|
3
3
|
attrName: string;
|
|
4
4
|
observe: boolean;
|
|
5
5
|
}
|
|
6
|
-
export type ListenerSelector = (el:
|
|
7
|
-
export interface Listener {
|
|
6
|
+
export type ListenerSelector<T> = (el: T) => Element | ShadowRoot | null;
|
|
7
|
+
export interface Listener<T> {
|
|
8
8
|
event: string;
|
|
9
9
|
cb: (e: Event) => void;
|
|
10
|
-
selector: ListenerSelector
|
|
10
|
+
selector: ListenerSelector<T>;
|
|
11
11
|
}
|
|
12
|
-
export declare class ElementMetadata {
|
|
12
|
+
export declare class ElementMetadata<T> {
|
|
13
13
|
attrs: AttrDef[];
|
|
14
|
-
listeners: Listener[];
|
|
14
|
+
listeners: Listener<T>[];
|
|
15
15
|
onReady: Set<Function>;
|
|
16
16
|
}
|
|
17
|
-
export declare class MetadataStore extends WeakMap<object, ElementMetadata
|
|
18
|
-
read(value: object): ElementMetadata
|
|
17
|
+
export declare class MetadataStore extends WeakMap<object, ElementMetadata<unknown>> {
|
|
18
|
+
read<T>(value: object): ElementMetadata<T>;
|
|
19
19
|
}
|
|
20
20
|
export declare const metadataStore: MetadataStore;
|
|
@@ -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;AAgBvD,MAAM,OAAO,eAAe;IAC1B,KAAK,GAAc,EAAE,CAAC;IACtB,SAAS,
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/lib/metadata.ts"],"names":[],"mappings":"AAAC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAgBvD,MAAM,OAAO,eAAe;IAC1B,KAAK,GAAc,EAAE,CAAC;IACtB,SAAS,GAAkB,EAAE,CAAC;IAC9B,OAAO,GAAG,IAAI,GAAG,EAAY,CAAC;CAC/B;AAED,MAAM,OAAO,aAAc,SAAQ,OAAyC;IAC1E,IAAI,CAAI,KAAa;QACnB,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/query.js
CHANGED
package/target/lib/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/lib/query.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,KAAK,CAAiB,KAAQ;IAC5C,IAAI,GAAG,GAAoC,IAAI,CAAC;IAEhD,OAAO,UAA6B,OAA2C;QAC7E,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAI,KAAK,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,IAAI,CAAC,aAAa,CAAI,KAAK,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/lib/query.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,KAAK,CAAiB,KAAQ;IAC5C,IAAI,GAAG,GAAoC,IAAI,CAAC;IAEhD,OAAO,UAA6B,OAA2C;QAC7E,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAI,KAAK,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,IAAI,CAAC,aAAa,CAAI,KAAK,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBAEzC,GAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { assert } from 'chai';
|
|
2
2
|
import { template } from './template.js';
|
|
3
3
|
const TESTS = [
|
|
4
|
-
function
|
|
4
|
+
function bindableNodes(el, root) {
|
|
5
5
|
it(`should intialize bindable nodes ${root instanceof ShadowRoot ? '(ShadowDOM)' : '(LightDOM)'}`, () => {
|
|
6
6
|
el.title = 'Hello World';
|
|
7
7
|
el.ariaLabel = 'This is the label';
|
|
@@ -22,7 +22,7 @@ const TESTS = [
|
|
|
22
22
|
.join(''), '<span #:bind="title">Hello World</span><ul><li #:bind="ariaLabel">This is the label</li><li #:bind="ariaDescription">This is the description</li></ul>');
|
|
23
23
|
});
|
|
24
24
|
},
|
|
25
|
-
function
|
|
25
|
+
function attributeNodes(el, root) {
|
|
26
26
|
it(`should intialize template attributes ${root instanceof ShadowRoot ? '(ShadowDOM)' : '(LightDOM)'}`, () => {
|
|
27
27
|
el.ariaLabel = 'This is the label';
|
|
28
28
|
el.ariaDescription = 'This is the description';
|
|
@@ -59,6 +59,27 @@ const TESTS = [
|
|
|
59
59
|
.map((res) => res.trim())
|
|
60
60
|
.join(''), '<span #:bind="title">Hello World</span><ul><li #:bind="ariaLabel">This is the label</li><li #:bind="ariaDescription">This is the description</li></ul>');
|
|
61
61
|
});
|
|
62
|
+
},
|
|
63
|
+
function customPrefix(el, root) {
|
|
64
|
+
it(`should use custom getter for values ${root instanceof ShadowRoot ? '(ShadowDOM)' : '(LightDOM)'}`, () => {
|
|
65
|
+
el.title = 'Hello World';
|
|
66
|
+
el.ariaLabel = 'This is the label';
|
|
67
|
+
el.ariaDescription = 'This is the description';
|
|
68
|
+
root.innerHTML = `
|
|
69
|
+
<span x-bind="title"></span>
|
|
70
|
+
|
|
71
|
+
<ul x-aria-label="ariaLabel">
|
|
72
|
+
<li x-bind="ariaLabel"></li>
|
|
73
|
+
<li x-bind="ariaDescription"></li>
|
|
74
|
+
</ul>
|
|
75
|
+
`;
|
|
76
|
+
const render = template({ tokenPrefix: 'x-' }).bind(el);
|
|
77
|
+
render();
|
|
78
|
+
assert.equal(root.innerHTML
|
|
79
|
+
.split('\n')
|
|
80
|
+
.map((res) => res.trim())
|
|
81
|
+
.join(''), '<span x-bind="title">Hello World</span><ul x-aria-label="ariaLabel" aria-label="This is the label"><li x-bind="ariaLabel">This is the label</li><li x-bind="ariaDescription">This is the description</li></ul>');
|
|
82
|
+
});
|
|
62
83
|
}
|
|
63
84
|
];
|
|
64
85
|
for (let test of TESTS) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.test.js","sourceRoot":"","sources":["../../src/lib/template.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,MAAM,KAAK,GAAG;IACZ,SAAS,
|
|
1
|
+
{"version":3,"file":"template.test.js","sourceRoot":"","sources":["../../src/lib/template.test.ts"],"names":[],"mappings":"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"}
|