@joist/element 4.7.0 → 4.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/package.json +1 -1
  2. package/target/lib/attr-changed.d.ts +3 -0
  3. package/target/lib/attr-changed.d.ts.map +1 -0
  4. package/target/lib/attr-changed.js +12 -0
  5. package/target/lib/attr-changed.js.map +1 -0
  6. package/target/lib/attr-changed.test.d.ts +2 -0
  7. package/target/lib/attr-changed.test.d.ts.map +1 -0
  8. package/target/lib/attr-changed.test.js +150 -0
  9. package/target/lib/attr-changed.test.js.map +1 -0
  10. package/target/lib/attr.d.ts +7 -0
  11. package/target/lib/attr.d.ts.map +1 -0
  12. package/target/lib/attr.js +66 -0
  13. package/target/lib/attr.js.map +1 -0
  14. package/target/lib/attr.test.d.ts +2 -0
  15. package/target/lib/attr.test.d.ts.map +1 -0
  16. package/target/lib/attr.test.js +520 -0
  17. package/target/lib/attr.test.js.map +1 -0
  18. package/target/lib/define.d.ts +6 -0
  19. package/target/lib/define.d.ts.map +1 -0
  20. package/target/lib/define.js +14 -0
  21. package/target/lib/define.js.map +1 -0
  22. package/target/lib/element.d.ts +12 -0
  23. package/target/lib/element.d.ts.map +1 -0
  24. package/target/lib/element.js +118 -0
  25. package/target/lib/element.js.map +1 -0
  26. package/target/lib/element.test.d.ts +2 -0
  27. package/target/lib/element.test.d.ts.map +1 -0
  28. package/target/lib/element.test.js +365 -0
  29. package/target/lib/element.test.js.map +1 -0
  30. package/target/lib/lifecycle.d.ts +2 -0
  31. package/target/lib/lifecycle.d.ts.map +1 -0
  32. package/target/lib/lifecycle.js +8 -0
  33. package/target/lib/lifecycle.js.map +1 -0
  34. package/target/lib/lifecycle.test.d.ts +2 -0
  35. package/target/lib/lifecycle.test.d.ts.map +1 -0
  36. package/target/lib/lifecycle.test.js +81 -0
  37. package/target/lib/lifecycle.test.js.map +1 -0
  38. package/target/lib/listen.d.ts +3 -0
  39. package/target/lib/listen.d.ts.map +1 -0
  40. package/target/lib/listen.js +26 -0
  41. package/target/lib/listen.js.map +1 -0
  42. package/target/lib/listen.test.d.ts +2 -0
  43. package/target/lib/listen.test.d.ts.map +1 -0
  44. package/target/lib/listen.test.js +305 -0
  45. package/target/lib/listen.test.js.map +1 -0
  46. package/target/lib/metadata.d.ts +31 -0
  47. package/target/lib/metadata.d.ts.map +1 -0
  48. package/target/lib/metadata.js +21 -0
  49. package/target/lib/metadata.js.map +1 -0
  50. package/target/lib/query-all.d.ts +11 -0
  51. package/target/lib/query-all.d.ts.map +1 -0
  52. package/target/lib/query-all.js +40 -0
  53. package/target/lib/query-all.js.map +1 -0
  54. package/target/lib/query-all.test.d.ts +2 -0
  55. package/target/lib/query-all.test.d.ts.map +1 -0
  56. package/target/lib/query-all.test.js +228 -0
  57. package/target/lib/query-all.test.js.map +1 -0
  58. package/target/lib/query.d.ts +11 -0
  59. package/target/lib/query.d.ts.map +1 -0
  60. package/target/lib/query.js +36 -0
  61. package/target/lib/query.js.map +1 -0
  62. package/target/lib/query.test.d.ts +2 -0
  63. package/target/lib/query.test.d.ts.map +1 -0
  64. package/target/lib/query.test.js +221 -0
  65. package/target/lib/query.test.js.map +1 -0
  66. package/target/lib/result.d.ts +4 -0
  67. package/target/lib/result.d.ts.map +1 -0
  68. package/target/lib/result.js +2 -0
  69. package/target/lib/result.js.map +1 -0
  70. package/target/lib/tags.d.ts +15 -0
  71. package/target/lib/tags.d.ts.map +1 -0
  72. package/target/lib/tags.js +44 -0
  73. package/target/lib/tags.js.map +1 -0
  74. package/target/lib/tags.test.d.ts +2 -0
  75. package/target/lib/tags.test.d.ts.map +1 -0
  76. package/target/lib/tags.test.js +93 -0
  77. package/target/lib/tags.test.js.map +1 -0
  78. package/target/lib.d.ts +10 -0
  79. package/target/lib.d.ts.map +1 -0
  80. package/target/lib.js +9 -0
  81. package/target/lib.js.map +1 -0
@@ -0,0 +1,26 @@
1
+ import { metadataStore } from "./metadata.js";
2
+ export function listen(event, selector) {
3
+ return function listenDecorator(value, ctx) {
4
+ const metadata = metadataStore.read(ctx.metadata);
5
+ let selectorInternal = (el) => el.shadowRoot ?? el;
6
+ if (selector) {
7
+ if (typeof selector === "string") {
8
+ selectorInternal = (el) => {
9
+ if (el.shadowRoot) {
10
+ return el.shadowRoot.querySelector(selector);
11
+ }
12
+ return el.querySelector(selector);
13
+ };
14
+ }
15
+ else {
16
+ selectorInternal = selector;
17
+ }
18
+ }
19
+ metadata.listeners.push({
20
+ event,
21
+ cb: value,
22
+ selector: selectorInternal,
23
+ });
24
+ };
25
+ }
26
+ //# sourceMappingURL=listen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listen.js","sourceRoot":"","sources":["../../src/lib/listen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,aAAa,EAAE,MAAM,eAAe,CAAC;AAErE,MAAM,UAAU,MAAM,CACpB,KAAa,EACb,QAA0C;IAE1C,OAAO,SAAS,eAAe,CAC7B,KAAuB,EACvB,GAAsC;QAEtC,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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=listen.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listen.test.d.ts","sourceRoot":"","sources":["../../src/lib/listen.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,305 @@
1
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
2
+ var useValue = arguments.length > 2;
3
+ for (var i = 0; i < initializers.length; i++) {
4
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
5
+ }
6
+ return useValue ? value : void 0;
7
+ };
8
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
9
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
10
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
11
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
12
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
13
+ var _, done = false;
14
+ for (var i = decorators.length - 1; i >= 0; i--) {
15
+ var context = {};
16
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
17
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
18
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
19
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
20
+ if (kind === "accessor") {
21
+ if (result === void 0) continue;
22
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
23
+ if (_ = accept(result.get)) descriptor.get = _;
24
+ if (_ = accept(result.set)) descriptor.set = _;
25
+ if (_ = accept(result.init)) initializers.unshift(_);
26
+ }
27
+ else if (_ = accept(result)) {
28
+ if (kind === "field") initializers.unshift(_);
29
+ else descriptor[key] = _;
30
+ }
31
+ }
32
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
33
+ done = true;
34
+ };
35
+ import { assert } from "chai";
36
+ import { element } from "./element.js";
37
+ import { listen } from "./listen.js";
38
+ describe("@listen()", () => {
39
+ it("should add listener to an outer HTMLElement", (done) => {
40
+ let MyElement = (() => {
41
+ let _classDecorators = [element({
42
+ tagName: "listener-1",
43
+ })];
44
+ let _classDescriptor;
45
+ let _classExtraInitializers = [];
46
+ let _classThis;
47
+ let _classSuper = HTMLElement;
48
+ let _instanceExtraInitializers = [];
49
+ let _onClick_decorators;
50
+ var MyElement = class extends _classSuper {
51
+ static { _classThis = this; }
52
+ static {
53
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
54
+ _onClick_decorators = [listen("click")];
55
+ __esDecorate(this, null, _onClick_decorators, { kind: "method", name: "onClick", static: false, private: false, access: { has: obj => "onClick" in obj, get: obj => obj.onClick }, metadata: _metadata }, null, _instanceExtraInitializers);
56
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
57
+ MyElement = _classThis = _classDescriptor.value;
58
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
59
+ __runInitializers(_classThis, _classExtraInitializers);
60
+ }
61
+ onClick(e) {
62
+ assert.equal(e.type, "click");
63
+ done();
64
+ }
65
+ constructor() {
66
+ super(...arguments);
67
+ __runInitializers(this, _instanceExtraInitializers);
68
+ }
69
+ };
70
+ return MyElement = _classThis;
71
+ })();
72
+ const el = new MyElement();
73
+ document.body.append(el);
74
+ el.dispatchEvent(new Event("click"));
75
+ el.remove();
76
+ });
77
+ it("should add listener to the shadow root if available", (done) => {
78
+ let MyElement = (() => {
79
+ let _classDecorators = [element({
80
+ tagName: "listener-2",
81
+ shadowDom: [],
82
+ })];
83
+ let _classDescriptor;
84
+ let _classExtraInitializers = [];
85
+ let _classThis;
86
+ let _classSuper = HTMLElement;
87
+ let _instanceExtraInitializers = [];
88
+ let _onClick_decorators;
89
+ var MyElement = class extends _classSuper {
90
+ static { _classThis = this; }
91
+ static {
92
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
93
+ _onClick_decorators = [listen("click")];
94
+ __esDecorate(this, null, _onClick_decorators, { kind: "method", name: "onClick", static: false, private: false, access: { has: obj => "onClick" in obj, get: obj => obj.onClick }, metadata: _metadata }, null, _instanceExtraInitializers);
95
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
96
+ MyElement = _classThis = _classDescriptor.value;
97
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
98
+ __runInitializers(_classThis, _classExtraInitializers);
99
+ }
100
+ onClick(e) {
101
+ assert.equal(e.type, "click");
102
+ done();
103
+ }
104
+ constructor() {
105
+ super(...arguments);
106
+ __runInitializers(this, _instanceExtraInitializers);
107
+ }
108
+ };
109
+ return MyElement = _classThis;
110
+ })();
111
+ const el = new MyElement();
112
+ document.body.append(el);
113
+ el.shadowRoot?.dispatchEvent(new Event("click"));
114
+ el.remove();
115
+ });
116
+ it("should restrict argument to an event or an event subtype", (done) => {
117
+ class CustomEvent extends Event {
118
+ test = "Hello World";
119
+ constructor() {
120
+ super("customevent");
121
+ }
122
+ }
123
+ let MyElement = (() => {
124
+ let _classDecorators = [element({
125
+ tagName: "listener-3",
126
+ })];
127
+ let _classDescriptor;
128
+ let _classExtraInitializers = [];
129
+ let _classThis;
130
+ let _classSuper = HTMLElement;
131
+ let _instanceExtraInitializers = [];
132
+ let _onClick_decorators;
133
+ var MyElement = class extends _classSuper {
134
+ static { _classThis = this; }
135
+ static {
136
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
137
+ _onClick_decorators = [listen("customevent")];
138
+ __esDecorate(this, null, _onClick_decorators, { kind: "method", name: "onClick", static: false, private: false, access: { has: obj => "onClick" in obj, get: obj => obj.onClick }, metadata: _metadata }, null, _instanceExtraInitializers);
139
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
140
+ MyElement = _classThis = _classDescriptor.value;
141
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
142
+ __runInitializers(_classThis, _classExtraInitializers);
143
+ }
144
+ onClick(e) {
145
+ assert.equal(e.type, "customevent");
146
+ done();
147
+ }
148
+ constructor() {
149
+ super(...arguments);
150
+ __runInitializers(this, _instanceExtraInitializers);
151
+ }
152
+ };
153
+ return MyElement = _classThis;
154
+ })();
155
+ const el = new MyElement();
156
+ document.body.append(el);
157
+ el.dispatchEvent(new CustomEvent());
158
+ el.remove();
159
+ });
160
+ it("should respect a provided selector function", (done) => {
161
+ let MyElement = (() => {
162
+ let _classDecorators = [element({
163
+ tagName: "listener-4",
164
+ shadowDom: [],
165
+ })];
166
+ let _classDescriptor;
167
+ let _classExtraInitializers = [];
168
+ let _classThis;
169
+ let _classSuper = HTMLElement;
170
+ let _instanceExtraInitializers = [];
171
+ let _onClick_decorators;
172
+ var MyElement = class extends _classSuper {
173
+ static { _classThis = this; }
174
+ static {
175
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
176
+ _onClick_decorators = [listen("click", (host) => host)];
177
+ __esDecorate(this, null, _onClick_decorators, { kind: "method", name: "onClick", static: false, private: false, access: { has: obj => "onClick" in obj, get: obj => obj.onClick }, metadata: _metadata }, null, _instanceExtraInitializers);
178
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
179
+ MyElement = _classThis = _classDescriptor.value;
180
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
181
+ __runInitializers(_classThis, _classExtraInitializers);
182
+ }
183
+ onClick(e) {
184
+ assert.equal(e.type, "click");
185
+ done();
186
+ }
187
+ constructor() {
188
+ super(...arguments);
189
+ __runInitializers(this, _instanceExtraInitializers);
190
+ }
191
+ };
192
+ return MyElement = _classThis;
193
+ })();
194
+ const el = new MyElement();
195
+ document.body.append(el);
196
+ el.dispatchEvent(new Event("click"));
197
+ el.remove();
198
+ });
199
+ });
200
+ it("should remove event listeners during cleanup", () => {
201
+ let clickCount = 0;
202
+ let MyElement = (() => {
203
+ let _classDecorators = [element({
204
+ tagName: "listener-cleanup",
205
+ shadowDom: [],
206
+ })];
207
+ let _classDescriptor;
208
+ let _classExtraInitializers = [];
209
+ let _classThis;
210
+ let _classSuper = HTMLElement;
211
+ let _instanceExtraInitializers = [];
212
+ let _onClick1_decorators;
213
+ let _onClick2_decorators;
214
+ var MyElement = class extends _classSuper {
215
+ static { _classThis = this; }
216
+ static {
217
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
218
+ _onClick1_decorators = [listen("click")];
219
+ _onClick2_decorators = [listen("click")];
220
+ __esDecorate(this, null, _onClick1_decorators, { kind: "method", name: "onClick1", static: false, private: false, access: { has: obj => "onClick1" in obj, get: obj => obj.onClick1 }, metadata: _metadata }, null, _instanceExtraInitializers);
221
+ __esDecorate(this, null, _onClick2_decorators, { kind: "method", name: "onClick2", static: false, private: false, access: { has: obj => "onClick2" in obj, get: obj => obj.onClick2 }, metadata: _metadata }, null, _instanceExtraInitializers);
222
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
223
+ MyElement = _classThis = _classDescriptor.value;
224
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
225
+ __runInitializers(_classThis, _classExtraInitializers);
226
+ }
227
+ onClick1() {
228
+ clickCount++;
229
+ }
230
+ onClick2() {
231
+ clickCount++;
232
+ }
233
+ constructor() {
234
+ super(...arguments);
235
+ __runInitializers(this, _instanceExtraInitializers);
236
+ }
237
+ };
238
+ return MyElement = _classThis;
239
+ })();
240
+ const el = new MyElement();
241
+ document.body.append(el);
242
+ // First click should increment counter
243
+ el.shadowRoot?.dispatchEvent(new Event("click"));
244
+ assert.equal(clickCount, 2);
245
+ // Remove element which should cleanup listeners
246
+ el.remove();
247
+ // Second click after removal should not increment counter
248
+ el.shadowRoot?.dispatchEvent(new Event("click"));
249
+ assert.equal(clickCount, 2);
250
+ });
251
+ it("should not add event listeners multiple times when element is moved", () => {
252
+ let clickCount = 0;
253
+ let MyElement = (() => {
254
+ let _classDecorators = [element({
255
+ tagName: "listener-move",
256
+ shadowDom: [],
257
+ })];
258
+ let _classDescriptor;
259
+ let _classExtraInitializers = [];
260
+ let _classThis;
261
+ let _classSuper = HTMLElement;
262
+ let _instanceExtraInitializers = [];
263
+ let _onClick_decorators;
264
+ var MyElement = class extends _classSuper {
265
+ static { _classThis = this; }
266
+ static {
267
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
268
+ _onClick_decorators = [listen("click")];
269
+ __esDecorate(this, null, _onClick_decorators, { kind: "method", name: "onClick", static: false, private: false, access: { has: obj => "onClick" in obj, get: obj => obj.onClick }, metadata: _metadata }, null, _instanceExtraInitializers);
270
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
271
+ MyElement = _classThis = _classDescriptor.value;
272
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
273
+ __runInitializers(_classThis, _classExtraInitializers);
274
+ }
275
+ onClick() {
276
+ clickCount++;
277
+ }
278
+ constructor() {
279
+ super(...arguments);
280
+ __runInitializers(this, _instanceExtraInitializers);
281
+ }
282
+ };
283
+ return MyElement = _classThis;
284
+ })();
285
+ const el = new MyElement();
286
+ const container1 = document.createElement("div");
287
+ const container2 = document.createElement("div");
288
+ document.body.append(container1);
289
+ document.body.append(container2);
290
+ // Add to first container
291
+ container1.append(el);
292
+ // Click should increment once
293
+ el.shadowRoot?.dispatchEvent(new Event("click"));
294
+ assert.equal(clickCount, 1);
295
+ // Move to second container
296
+ container2.append(el);
297
+ // Click should still only increment once
298
+ el.shadowRoot?.dispatchEvent(new Event("click"));
299
+ assert.equal(clickCount, 2);
300
+ // Cleanup
301
+ el.remove();
302
+ container1.remove();
303
+ container2.remove();
304
+ });
305
+ //# sourceMappingURL=listen.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listen.test.js","sourceRoot":"","sources":["../../src/lib/listen.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export interface AttrDef {
2
+ propName: string | symbol;
3
+ observe: boolean;
4
+ reflect: boolean;
5
+ access: {
6
+ get: () => unknown;
7
+ set: (value: unknown) => void;
8
+ };
9
+ }
10
+ export type ListenerSelector<T> = (el: T) => EventTarget | null;
11
+ export interface Listener<T> {
12
+ event: string;
13
+ cb: (e: Event) => void;
14
+ selector: ListenerSelector<T>;
15
+ }
16
+ export type AttrChangedCallback = (name: string, oldValue: string, newValue: string) => void;
17
+ export declare class AttrMetadata extends Map<string, AttrDef> {
18
+ }
19
+ export declare class AttrChangeMetadata extends Map<string, Set<AttrChangedCallback>> {
20
+ }
21
+ export declare class ElementMetadata<T> {
22
+ attrs: AttrMetadata;
23
+ attrChanges: AttrChangeMetadata;
24
+ listeners: Listener<T>[];
25
+ onReady: Set<() => void>;
26
+ }
27
+ export declare class MetadataStore extends WeakMap<object, ElementMetadata<unknown>> {
28
+ read<T>(value: object): ElementMetadata<T>;
29
+ }
30
+ export declare const metadataStore: MetadataStore;
31
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/lib/metadata.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE;QACN,GAAG,EAAE,MAAM,OAAO,CAAC;QACnB,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;KAC/B,CAAC;CACH;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,KAAK,WAAW,GAAG,IAAI,CAAC;AAEhE,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACvB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;AAE7F,qBAAa,YAAa,SAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;CAAG;AACzD,qBAAa,kBAAmB,SAAQ,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;CAAG;AAEhF,qBAAa,eAAe,CAAC,CAAC;IAC5B,KAAK,EAAE,YAAY,CAAsB;IACzC,WAAW,EAAE,kBAAkB,CAA4B;IAC3D,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAM;IAC9B,OAAO,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,CAAa;CACtC;AAED,qBAAa,aAAc,SAAQ,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IAC1E,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC;CAO3C;AAED,eAAO,MAAM,aAAa,EAAE,aAAmC,CAAC"}
@@ -0,0 +1,21 @@
1
+ Symbol.metadata ??= Symbol("Symbol.metadata");
2
+ export class AttrMetadata extends Map {
3
+ }
4
+ export class AttrChangeMetadata extends Map {
5
+ }
6
+ export class ElementMetadata {
7
+ attrs = new AttrMetadata();
8
+ attrChanges = new AttrChangeMetadata();
9
+ listeners = [];
10
+ onReady = new Set();
11
+ }
12
+ export class MetadataStore extends WeakMap {
13
+ read(value) {
14
+ if (!this.has(value)) {
15
+ this.set(value, new ElementMetadata());
16
+ }
17
+ return this.get(value);
18
+ }
19
+ }
20
+ export const metadataStore = new MetadataStore();
21
+ //# sourceMappingURL=metadata.js.map
@@ -0,0 +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;AAsBvD,MAAM,OAAO,YAAa,SAAQ,GAAoB;CAAG;AACzD,MAAM,OAAO,kBAAmB,SAAQ,GAAqC;CAAG;AAEhF,MAAM,OAAO,eAAe;IAC1B,KAAK,GAAiB,IAAI,YAAY,EAAE,CAAC;IACzC,WAAW,GAAuB,IAAI,kBAAkB,EAAE,CAAC;IAC3D,SAAS,GAAkB,EAAE,CAAC;IAC9B,OAAO,GAAoB,IAAI,GAAG,EAAE,CAAC;CACtC;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,CAA6B,CAAC;IACrD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAkB,IAAI,aAAa,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ type Tags = keyof HTMLElementTagNameMap;
2
+ type SVGTags = keyof SVGElementTagNameMap;
3
+ type MathTags = keyof MathMLElementTagNameMap;
4
+ type NodeUpdate<T extends Node> = Partial<T> | ((node: T) => Partial<T> | null);
5
+ type QueryAllResult<T extends Node> = (updates?: NodeUpdate<T>) => NodeListOf<T>;
6
+ export declare function queryAll<K extends Tags>(selectors: K, root?: HTMLElement | ShadowRoot): QueryAllResult<HTMLElementTagNameMap[K]>;
7
+ export declare function queryAll<K extends SVGTags>(selectors: K, root?: HTMLElement | ShadowRoot): QueryAllResult<SVGElementTagNameMap[K]>;
8
+ export declare function queryAll<K extends MathTags>(selectors: K, root?: HTMLElement | ShadowRoot): QueryAllResult<MathMLElementTagNameMap[K]>;
9
+ export declare function queryAll<E extends HTMLElement = HTMLElement>(selectors: string, root?: HTMLElement | ShadowRoot): QueryAllResult<E>;
10
+ export {};
11
+ //# sourceMappingURL=query-all.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-all.d.ts","sourceRoot":"","sources":["../../src/lib/query-all.ts"],"names":[],"mappings":"AAAA,KAAK,IAAI,GAAG,MAAM,qBAAqB,CAAC;AACxC,KAAK,OAAO,GAAG,MAAM,oBAAoB,CAAC;AAC1C,KAAK,QAAQ,GAAG,MAAM,uBAAuB,CAAC;AAE9C,KAAK,UAAU,CAAC,CAAC,SAAS,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAEhF,KAAK,cAAc,CAAC,CAAC,SAAS,IAAI,IAAI,CACpC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,KACpB,UAAU,CAAC,CAAC,CAAC,CAAC;AAEnB,wBAAgB,QAAQ,CAAC,CAAC,SAAS,IAAI,EACrC,SAAS,EAAE,CAAC,EACZ,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,GAC9B,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,wBAAgB,QAAQ,CAAC,CAAC,SAAS,OAAO,EACxC,SAAS,EAAE,CAAC,EACZ,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,GAC9B,cAAc,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,wBAAgB,QAAQ,CAAC,CAAC,SAAS,QAAQ,EACzC,SAAS,EAAE,CAAC,EACZ,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,GAC9B,cAAc,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,wBAAgB,QAAQ,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAC1D,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,GAC9B,cAAc,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,40 @@
1
+ export function queryAll(query, root) {
2
+ let res = null;
3
+ return function (update) {
4
+ if (res) {
5
+ return patchNodes(res, update);
6
+ }
7
+ if (root) {
8
+ res = root.querySelectorAll(query);
9
+ }
10
+ else if (this.shadowRoot) {
11
+ res = this.shadowRoot.querySelectorAll(query);
12
+ }
13
+ else {
14
+ res = this.querySelectorAll(query);
15
+ }
16
+ if (!res) {
17
+ throw new Error(`could not find ${query}`);
18
+ }
19
+ return patchNodes(res, update);
20
+ };
21
+ }
22
+ function patchNodes(target, update) {
23
+ if (!update) {
24
+ return target;
25
+ }
26
+ for (const node of target) {
27
+ const patch = typeof update === "function" ? update(node) : update;
28
+ if (patch) {
29
+ for (const update in patch) {
30
+ const newValue = patch[update];
31
+ const oldValue = node[update];
32
+ if (newValue !== oldValue) {
33
+ Reflect.set(node, update, newValue);
34
+ }
35
+ }
36
+ }
37
+ }
38
+ return target;
39
+ }
40
+ //# sourceMappingURL=query-all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-all.js","sourceRoot":"","sources":["../../src/lib/query-all.ts"],"names":[],"mappings":"AA0BA,MAAM,UAAU,QAAQ,CACtB,KAAQ,EACR,IAA+B;IAE/B,IAAI,GAAG,GAAgD,IAAI,CAAC;IAE5D,OAAO,UAEL,MAA6C;QAE7C,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,IAAI,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAI,KAAK,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3B,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAI,KAAK,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAI,KAAK,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,MAAqB,EACrB,MAAsB;IAEtB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAEnE,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;gBAE9B,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=query-all.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-all.test.d.ts","sourceRoot":"","sources":["../../src/lib/query-all.test.ts"],"names":[],"mappings":""}