@bodil/dom 0.1.2 → 0.1.4
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/dist/component.d.ts +27 -9
- package/dist/component.js +40 -16
- package/dist/component.js.map +1 -1
- package/dist/component.test.js +67 -1
- package/dist/component.test.js.map +1 -1
- package/dist/decorators/attribute.js +18 -14
- package/dist/decorators/attribute.js.map +1 -1
- package/dist/decorators/attribute.test.js +15 -6
- package/dist/decorators/attribute.test.js.map +1 -1
- package/dist/emitter.d.ts +74 -1
- package/dist/emitter.js +40 -0
- package/dist/emitter.js.map +1 -1
- package/dist/slot.d.ts +2 -1
- package/dist/slot.js +5 -2
- package/dist/slot.js.map +1 -1
- package/package.json +1 -1
- package/src/component.test.ts +45 -1
- package/src/component.ts +64 -27
- package/src/decorators/attribute.test.ts +14 -5
- package/src/decorators/attribute.ts +18 -15
- package/src/emitter.ts +76 -1
- package/src/slot.ts +6 -2
package/dist/component.d.ts
CHANGED
|
@@ -6,27 +6,24 @@ import { type AttributeConfig } from "./decorators/attribute";
|
|
|
6
6
|
import { EmitterElement } from "./emitter";
|
|
7
7
|
import { type QuerySlotOptions } from "./slot";
|
|
8
8
|
export type { ReactiveController, ReactiveControllerHost } from "lit";
|
|
9
|
-
export { attribute, attributeGetter, attributeSetter, type AttributeOptions, type AttributeGetterSetterOptions, } from "./decorators/attribute";
|
|
9
|
+
export { attribute, attributeGetter, attributeSetter, type AttributeOptions, type AttributeGetterSetterOptions, type AttributeType, } from "./decorators/attribute";
|
|
10
10
|
export { connect, connectEffect, type ConnectFunction, type ConnectFunctionReturnValue, } from "./decorators/connect";
|
|
11
11
|
export { reactive } from "./decorators/reactive";
|
|
12
12
|
export { require } from "./decorators/require";
|
|
13
|
+
export { EmitterElement } from "./emitter";
|
|
14
|
+
export type { CustomEventTypes, Emits, EmitsSuper, ElementEmits } from "./emitter";
|
|
13
15
|
export type { QuerySlotOptions } from "./slot";
|
|
14
|
-
export type { CustomEventTypes } from "./emitter";
|
|
15
16
|
export type UpdateConfig = {
|
|
16
17
|
viewTransition?: boolean;
|
|
17
18
|
};
|
|
18
19
|
declare const finalised: unique symbol;
|
|
19
20
|
export type Deps = Array<typeof HTMLElement>;
|
|
20
|
-
export type Declare<A extends keyof HTMLElementEventMap> = {
|
|
21
|
-
[K in A]: never;
|
|
22
|
-
};
|
|
23
|
-
export type ExtendSuper<C extends Component, A extends keyof HTMLElementEventMap> = {
|
|
24
|
-
[K in keyof C["emits"] | A]: never;
|
|
25
|
-
};
|
|
26
|
-
export type Emits<C> = C extends Component ? keyof C["emits"] : never;
|
|
27
21
|
export type CSSStyleSpec = CSSResult | CSSStyleSheet | string;
|
|
28
22
|
export type CSSStyleSpecArray = Array<CSSStyleSpec | CSSStyleSpecArray>;
|
|
29
23
|
export type CSSStyleSpecDeclaration = CSSStyleSpec | CSSStyleSpecArray;
|
|
24
|
+
export declare class ComponentUpdateLoopError extends Error {
|
|
25
|
+
constructor(message?: string, options?: ErrorOptions);
|
|
26
|
+
}
|
|
30
27
|
export declare abstract class Component extends EmitterElement implements ReactiveControllerHost, Disposable {
|
|
31
28
|
#private;
|
|
32
29
|
static deps: Deps;
|
|
@@ -72,11 +69,32 @@ export declare abstract class Component extends EmitterElement implements Reacti
|
|
|
72
69
|
protected firstInitialised(): void;
|
|
73
70
|
protected render(): unknown;
|
|
74
71
|
[Symbol.dispose](): void;
|
|
72
|
+
/**
|
|
73
|
+
* Attach a {@link Disposable} to the component's connected/disconnected
|
|
74
|
+
* lifecycle state.
|
|
75
|
+
*
|
|
76
|
+
* This causes the {@link Disposable} to be disposed automatically when the
|
|
77
|
+
* component is disconnected. The common pattern for this is for resources,
|
|
78
|
+
* such as event listeners, allocated in {@link Component.connectedCallback}
|
|
79
|
+
* to be registered for automatic deallocation during
|
|
80
|
+
* {@link Component.disconnectedCallback}.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* protected override connectedCallback() {
|
|
84
|
+
* super.connectedCallback();
|
|
85
|
+
* this.useWhileConnected(this.on("click", this.handleClick.bind(this)));
|
|
86
|
+
* }
|
|
87
|
+
*/
|
|
75
88
|
useWhileConnected(disposifiable: undefined): undefined;
|
|
76
89
|
useWhileConnected(disposifiable: null): null;
|
|
77
90
|
useWhileConnected(disposifiable: Disposifiable): Disposable;
|
|
78
91
|
useWhileConnected(disposifiable: Disposifiable | undefined): Disposable | undefined;
|
|
79
92
|
useWhileConnected(disposifiable: Disposifiable | null | undefined): Disposable | null | undefined;
|
|
93
|
+
/**
|
|
94
|
+
* Attach an event listener to an event on this component.
|
|
95
|
+
*
|
|
96
|
+
* @returns A {@link Disposable} to subsequently detach the event listener.
|
|
97
|
+
*/
|
|
80
98
|
on<K extends keyof HTMLElementEventMap>(type: K, callback: (event: HTMLElementEventMap[K]) => void, options?: AddEventListenerOptions | boolean): Disposable;
|
|
81
99
|
/**
|
|
82
100
|
* If an element that is either inside this element's shadow root or is a
|
package/dist/component.js
CHANGED
|
@@ -11,19 +11,23 @@ import { childElements } from "./dom";
|
|
|
11
11
|
import { EmitterElement } from "./emitter";
|
|
12
12
|
import { eventListener } from "./event";
|
|
13
13
|
import { scheduler } from "./scheduler";
|
|
14
|
-
import { findSlot, getOrSetQuery, getOrSetSignal, SlotChangeController, } from "./slot";
|
|
14
|
+
import { findSlot, getOrSetQuery, getOrSetSignal, listsEqual, SlotChangeController, } from "./slot";
|
|
15
15
|
export { attribute, attributeGetter, attributeSetter, } from "./decorators/attribute";
|
|
16
16
|
export { connect, connectEffect, } from "./decorators/connect";
|
|
17
17
|
export { reactive } from "./decorators/reactive";
|
|
18
18
|
export { require } from "./decorators/require";
|
|
19
|
+
export { EmitterElement } from "./emitter";
|
|
19
20
|
Symbol.metadata ??= Symbol.for("Symbol.metadata");
|
|
20
|
-
function listsEqual(as, bs) {
|
|
21
|
-
return as.length === bs.length && as.every((a, index) => Object.is(a, bs[index]));
|
|
22
|
-
}
|
|
23
21
|
const finalised = Symbol("finalised");
|
|
24
22
|
function processCSSStyleSpec(spec) {
|
|
25
23
|
return getCompatibleStyle(typeof spec === "string" ? unsafeCSS(spec) : spec);
|
|
26
24
|
}
|
|
25
|
+
export class ComponentUpdateLoopError extends Error {
|
|
26
|
+
constructor(message, options) {
|
|
27
|
+
super(message, options);
|
|
28
|
+
this.name = "ComponentUpdateLoopError";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
27
31
|
export class Component extends EmitterElement {
|
|
28
32
|
static { this.deps = []; }
|
|
29
33
|
static { this.shadowRootOptions = { mode: "open" }; }
|
|
@@ -37,6 +41,7 @@ export class Component extends EmitterElement {
|
|
|
37
41
|
static { this[_a] = true; }
|
|
38
42
|
#controllers;
|
|
39
43
|
#connectedContext;
|
|
44
|
+
#dirty;
|
|
40
45
|
#isUpdatePending;
|
|
41
46
|
#updateSignal;
|
|
42
47
|
#updateSignalWatcher;
|
|
@@ -106,6 +111,7 @@ export class Component extends EmitterElement {
|
|
|
106
111
|
this.renderOptions = { host: this };
|
|
107
112
|
this.#controllers = new Set();
|
|
108
113
|
this.#connectedContext = new DisposableContext();
|
|
114
|
+
this.#dirty = false;
|
|
109
115
|
this.#isUpdatePending = false;
|
|
110
116
|
this.#updateSignalWatcher = new Signal.subtle.Watcher(() => this.requestUpdate());
|
|
111
117
|
this.#updateResult = Promise.withResolvers();
|
|
@@ -218,6 +224,7 @@ export class Component extends EmitterElement {
|
|
|
218
224
|
return renderRoot;
|
|
219
225
|
}
|
|
220
226
|
requestUpdate(opts) {
|
|
227
|
+
this.#dirty = true;
|
|
221
228
|
if (opts?.viewTransition === true) {
|
|
222
229
|
this.#viewTransitionRequested = true;
|
|
223
230
|
}
|
|
@@ -245,6 +252,9 @@ export class Component extends EmitterElement {
|
|
|
245
252
|
return this.#hasRequiredProperties;
|
|
246
253
|
}
|
|
247
254
|
async performUpdate() {
|
|
255
|
+
if (!this.isConnected || !this.isUpdatePending) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
248
258
|
let didFirstUpdate = false;
|
|
249
259
|
const runUpdate = () => {
|
|
250
260
|
this.#controllers.forEach((c) => c.hostUpdate?.());
|
|
@@ -257,20 +267,29 @@ export class Component extends EmitterElement {
|
|
|
257
267
|
}
|
|
258
268
|
this.updated();
|
|
259
269
|
};
|
|
260
|
-
if (!this.isConnected || !this.isUpdatePending) {
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
270
|
try {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
this
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
+
let count = 0;
|
|
272
|
+
while (this.#dirty) {
|
|
273
|
+
// Retry this.update() until it runs without causing dirtiness.
|
|
274
|
+
// This is to allow render() to react to things like slot
|
|
275
|
+
// queries responding to slots being created.
|
|
276
|
+
this.#dirty = false;
|
|
277
|
+
count++;
|
|
278
|
+
// If it runs dirty too many times, that's an error.
|
|
279
|
+
if (count > 4) {
|
|
280
|
+
throw new ComponentUpdateLoopError(`Component.update() ran dirty ${count} times, ensure you're not accidentally triggering updates inside render()`);
|
|
281
|
+
}
|
|
282
|
+
if (this.#viewTransitionRequested &&
|
|
283
|
+
typeof document.startViewTransition === "function") {
|
|
284
|
+
this.#viewTransitionRequested = false;
|
|
285
|
+
await document.startViewTransition(runUpdate).finished;
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
runUpdate();
|
|
289
|
+
}
|
|
271
290
|
}
|
|
272
|
-
this.#updateResult.resolve(true);
|
|
273
291
|
this.#isUpdatePending = false;
|
|
292
|
+
this.#updateResult.resolve(true);
|
|
274
293
|
if (didFirstUpdate) {
|
|
275
294
|
await this.stabilise();
|
|
276
295
|
this.stabilised();
|
|
@@ -278,8 +297,8 @@ export class Component extends EmitterElement {
|
|
|
278
297
|
}
|
|
279
298
|
}
|
|
280
299
|
catch (e) {
|
|
281
|
-
this.#updateResult.reject(e);
|
|
282
300
|
this.#isUpdatePending = false;
|
|
301
|
+
this.#updateResult.reject(e);
|
|
283
302
|
if (didFirstUpdate) {
|
|
284
303
|
this.#stabilised.reject(e);
|
|
285
304
|
}
|
|
@@ -348,6 +367,11 @@ export class Component extends EmitterElement {
|
|
|
348
367
|
this.#connectedContext.use(disposable);
|
|
349
368
|
return disposable;
|
|
350
369
|
}
|
|
370
|
+
/**
|
|
371
|
+
* Attach an event listener to an event on this component.
|
|
372
|
+
*
|
|
373
|
+
* @returns A {@link Disposable} to subsequently detach the event listener.
|
|
374
|
+
*/
|
|
351
375
|
on(type, callback, options) {
|
|
352
376
|
return eventListener(this, type, callback, options);
|
|
353
377
|
}
|
package/dist/component.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.js","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component.js","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"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"}
|
package/dist/component.test.js
CHANGED
|
@@ -36,7 +36,7 @@ import { html } from "lit";
|
|
|
36
36
|
import { customElement } from "lit/decorators.js";
|
|
37
37
|
import { createRef, ref } from "lit/directives/ref.js";
|
|
38
38
|
import { expect, expectTypeOf, test } from "vitest";
|
|
39
|
-
import { Component } from "./component";
|
|
39
|
+
import { Component, ComponentUpdateLoopError } from "./component";
|
|
40
40
|
test("Component.query", async () => {
|
|
41
41
|
let QueryTestClass = (() => {
|
|
42
42
|
let _classDecorators = [customElement("query-test-class")];
|
|
@@ -138,4 +138,70 @@ test("Component.querySlot", async () => {
|
|
|
138
138
|
expect(t.querySlot({ selector: "div.robert" })).deep.equal([robert]);
|
|
139
139
|
expectTypeOf(t.querySlot({ nodes: true })).toEqualTypeOf();
|
|
140
140
|
});
|
|
141
|
+
test("Component.querySlot signal in render() triggers update", async () => {
|
|
142
|
+
let QuerySlotSignalTestClass = (() => {
|
|
143
|
+
let _classDecorators = [customElement("query-slot-signal-test-class")];
|
|
144
|
+
let _classDescriptor;
|
|
145
|
+
let _classExtraInitializers = [];
|
|
146
|
+
let _classThis;
|
|
147
|
+
let _classSuper = Component;
|
|
148
|
+
var QuerySlotSignalTestClass = class extends _classSuper {
|
|
149
|
+
static { _classThis = this; }
|
|
150
|
+
static {
|
|
151
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
152
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
153
|
+
QuerySlotSignalTestClass = _classThis = _classDescriptor.value;
|
|
154
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
155
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
156
|
+
}
|
|
157
|
+
render() {
|
|
158
|
+
// This query will return empty on the first update, because the
|
|
159
|
+
// slot element hasn't been created yet. We expect render() to be
|
|
160
|
+
// re-run once the slot exists, inside the same update cycle.
|
|
161
|
+
if (this.querySlot({ reactive: true }).get().length === 0) {
|
|
162
|
+
return html `<slot></slot>
|
|
163
|
+
<div class="no-members">no members</div>`;
|
|
164
|
+
}
|
|
165
|
+
return html `<slot></slot>
|
|
166
|
+
<div class="has-members">has members</div>`;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
return QuerySlotSignalTestClass = _classThis;
|
|
170
|
+
})();
|
|
171
|
+
const t = document.createElement("query-slot-signal-test-class");
|
|
172
|
+
document.body.append(t);
|
|
173
|
+
const joe = document.createElement("div");
|
|
174
|
+
joe.classList.add("joe");
|
|
175
|
+
t.append(joe);
|
|
176
|
+
await t.updateComplete;
|
|
177
|
+
expect(t.querySlot({ reactive: true }).get()).deep.equal([joe]);
|
|
178
|
+
expect(t.query("div.has-members")).toBeInstanceOf(HTMLDivElement);
|
|
179
|
+
});
|
|
180
|
+
test("dirty render loop aborts", async () => {
|
|
181
|
+
let DirtyRenderLoopTestClass = (() => {
|
|
182
|
+
let _classDecorators = [customElement("dirty-render-loop-test-class")];
|
|
183
|
+
let _classDescriptor;
|
|
184
|
+
let _classExtraInitializers = [];
|
|
185
|
+
let _classThis;
|
|
186
|
+
let _classSuper = Component;
|
|
187
|
+
var DirtyRenderLoopTestClass = class extends _classSuper {
|
|
188
|
+
static { _classThis = this; }
|
|
189
|
+
static {
|
|
190
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
191
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
192
|
+
DirtyRenderLoopTestClass = _classThis = _classDescriptor.value;
|
|
193
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
194
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
195
|
+
}
|
|
196
|
+
render() {
|
|
197
|
+
this.requestUpdate();
|
|
198
|
+
return html `welp!`;
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
return DirtyRenderLoopTestClass = _classThis;
|
|
202
|
+
})();
|
|
203
|
+
const t = document.createElement("dirty-render-loop-test-class");
|
|
204
|
+
document.body.append(t);
|
|
205
|
+
await expect(t.updateComplete).rejects.toThrowError(ComponentUpdateLoopError);
|
|
206
|
+
});
|
|
141
207
|
//# sourceMappingURL=component.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.test.js","sourceRoot":"","sources":["../src/component.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"component.test.js","sourceRoot":"","sources":["../src/component.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/unified-signatures */
|
|
2
|
-
import { isDeepEqual, isNullish,
|
|
2
|
+
import { isDeepEqual, isNullish, unreachable } from "@bodil/core/assert";
|
|
3
3
|
import { None, Some } from "@bodil/opt";
|
|
4
4
|
import { Signal } from "@bodil/signal";
|
|
5
5
|
import { signalForObject } from "./reactive";
|
|
@@ -61,7 +61,7 @@ export function attribute(valueOrOptions, context) {
|
|
|
61
61
|
type: String,
|
|
62
62
|
property: context.name,
|
|
63
63
|
reactive: context.kind === "accessor",
|
|
64
|
-
reflect:
|
|
64
|
+
reflect: false,
|
|
65
65
|
name: toKebabCase(context.name),
|
|
66
66
|
},
|
|
67
67
|
...(valueOrOptions ?? {}),
|
|
@@ -90,22 +90,15 @@ export function attribute(valueOrOptions, context) {
|
|
|
90
90
|
};
|
|
91
91
|
}
|
|
92
92
|
function syncAttribute(target, options, value, force = false) {
|
|
93
|
-
const key =
|
|
94
|
-
const attributeValue = toAttribute(value,
|
|
93
|
+
const key = options.name;
|
|
94
|
+
const attributeValue = toAttribute(value, options.type);
|
|
95
95
|
if (force || attributeValue !== target.getAttribute(key)) {
|
|
96
96
|
target.setAttributeQuietly(key, attributeValue);
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
function accessor(options, context, value) {
|
|
100
|
-
let initValue = None;
|
|
101
|
-
const init = function init(value) {
|
|
102
|
-
initValue = Some(value);
|
|
103
|
-
if (options.reflect) {
|
|
104
|
-
syncAttribute(this, options, value, true);
|
|
105
|
-
}
|
|
106
|
-
return value;
|
|
107
|
-
};
|
|
108
100
|
if (options.reactive) {
|
|
101
|
+
let initValue = None;
|
|
109
102
|
const getSig = (obj) => signalForObject(obj, context.name, () => Signal(initValue.unwrapExact(), {
|
|
110
103
|
equals: Object.is,
|
|
111
104
|
}));
|
|
@@ -119,7 +112,13 @@ function accessor(options, context, value) {
|
|
|
119
112
|
syncAttribute(this, options, newValue);
|
|
120
113
|
}
|
|
121
114
|
},
|
|
122
|
-
init
|
|
115
|
+
init(value) {
|
|
116
|
+
initValue = Some(value);
|
|
117
|
+
if (options.reflect) {
|
|
118
|
+
syncAttribute(this, options, value, true);
|
|
119
|
+
}
|
|
120
|
+
return value;
|
|
121
|
+
},
|
|
123
122
|
};
|
|
124
123
|
}
|
|
125
124
|
return {
|
|
@@ -132,7 +131,12 @@ function accessor(options, context, value) {
|
|
|
132
131
|
syncAttribute(this, options, newValue);
|
|
133
132
|
}
|
|
134
133
|
},
|
|
135
|
-
init
|
|
134
|
+
init(value) {
|
|
135
|
+
if (options.reflect) {
|
|
136
|
+
syncAttribute(this, options, value, true);
|
|
137
|
+
}
|
|
138
|
+
return value;
|
|
139
|
+
},
|
|
136
140
|
};
|
|
137
141
|
}
|
|
138
142
|
//# sourceMappingURL=attribute.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attribute.js","sourceRoot":"","sources":["../../src/decorators/attribute.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"attribute.js","sourceRoot":"","sources":["../../src/decorators/attribute.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,11 +63,11 @@ test("@attribute", async () => {
|
|
|
63
63
|
static { _classThis = this; }
|
|
64
64
|
static {
|
|
65
65
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
66
|
-
_wibble_decorators = [attribute];
|
|
67
|
-
_wobble_decorators = [attribute({ type: Number })];
|
|
68
|
-
_noMeansNo_decorators = [attribute({ type: Boolean })];
|
|
69
|
-
_welp_decorators = [attribute({ name: "wolp", reactive: false })];
|
|
70
|
-
_hide_decorators = [attribute
|
|
66
|
+
_wibble_decorators = [attribute({ reflect: true })];
|
|
67
|
+
_wobble_decorators = [attribute({ type: Number, reflect: true })];
|
|
68
|
+
_noMeansNo_decorators = [attribute({ type: Boolean, reflect: true })];
|
|
69
|
+
_welp_decorators = [attribute({ name: "wolp", reactive: false, reflect: true })];
|
|
70
|
+
_hide_decorators = [attribute];
|
|
71
71
|
__esDecorate(this, null, _wibble_decorators, { kind: "accessor", name: "wibble", static: false, private: false, access: { has: obj => "wibble" in obj, get: obj => obj.wibble, set: (obj, value) => { obj.wibble = value; } }, metadata: _metadata }, _wibble_initializers, _wibble_extraInitializers);
|
|
72
72
|
__esDecorate(this, null, _wobble_decorators, { kind: "accessor", name: "wobble", static: false, private: false, access: { has: obj => "wobble" in obj, get: obj => obj.wobble, set: (obj, value) => { obj.wobble = value; } }, metadata: _metadata }, _wobble_initializers, _wobble_extraInitializers);
|
|
73
73
|
__esDecorate(this, null, _noMeansNo_decorators, { kind: "accessor", name: "noMeansNo", static: false, private: false, access: { has: obj => "noMeansNo" in obj, get: obj => obj.noMeansNo, set: (obj, value) => { obj.noMeansNo = value; } }, metadata: _metadata }, _noMeansNo_initializers, _noMeansNo_extraInitializers);
|
|
@@ -224,6 +224,9 @@ test("@attribute init ordering", async () => {
|
|
|
224
224
|
let _movieStar_decorators;
|
|
225
225
|
let _movieStar_initializers = [];
|
|
226
226
|
let _movieStar_extraInitializers = [];
|
|
227
|
+
let _foo_decorators;
|
|
228
|
+
let _foo_initializers = [];
|
|
229
|
+
let _foo_extraInitializers = [];
|
|
227
230
|
let _get_wibble_decorators;
|
|
228
231
|
let _set_wibble_decorators;
|
|
229
232
|
var AttributeInitTestClass = class extends _classSuper {
|
|
@@ -231,9 +234,11 @@ test("@attribute init ordering", async () => {
|
|
|
231
234
|
static {
|
|
232
235
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
233
236
|
_movieStar_decorators = [attribute];
|
|
237
|
+
_foo_decorators = [attribute];
|
|
234
238
|
_get_wibble_decorators = [attributeGetter];
|
|
235
239
|
_set_wibble_decorators = [attributeSetter];
|
|
236
240
|
__esDecorate(this, null, _movieStar_decorators, { kind: "accessor", name: "movieStar", static: false, private: false, access: { has: obj => "movieStar" in obj, get: obj => obj.movieStar, set: (obj, value) => { obj.movieStar = value; } }, metadata: _metadata }, _movieStar_initializers, _movieStar_extraInitializers);
|
|
241
|
+
__esDecorate(this, null, _foo_decorators, { kind: "accessor", name: "foo", static: false, private: false, access: { has: obj => "foo" in obj, get: obj => obj.foo, set: (obj, value) => { obj.foo = value; } }, metadata: _metadata }, _foo_initializers, _foo_extraInitializers);
|
|
237
242
|
__esDecorate(this, null, _get_wibble_decorators, { kind: "getter", name: "wibble", static: false, private: false, access: { has: obj => "wibble" in obj, get: obj => obj.wibble }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
238
243
|
__esDecorate(this, null, _set_wibble_decorators, { kind: "setter", name: "wibble", static: false, private: false, access: { has: obj => "wibble" in obj, set: (obj, value) => { obj.wibble = value; } }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
239
244
|
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
@@ -242,7 +247,8 @@ test("@attribute init ordering", async () => {
|
|
|
242
247
|
__runInitializers(_classThis, _classExtraInitializers);
|
|
243
248
|
}
|
|
244
249
|
accessor movieStar = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _movieStar_initializers, "Joe"));
|
|
245
|
-
|
|
250
|
+
accessor foo = (__runInitializers(this, _movieStar_extraInitializers), __runInitializers(this, _foo_initializers, void 0));
|
|
251
|
+
#wibble = (__runInitializers(this, _foo_extraInitializers), "Joe");
|
|
246
252
|
get wibble() {
|
|
247
253
|
return this.#wibble;
|
|
248
254
|
}
|
|
@@ -254,11 +260,14 @@ test("@attribute init ordering", async () => {
|
|
|
254
260
|
})();
|
|
255
261
|
const t = document.createElement("attribute-init-test-class");
|
|
256
262
|
t.setAttribute("movie-star", "Mike");
|
|
263
|
+
t.setAttribute("foo", "bar");
|
|
257
264
|
t.setAttribute("wibble", "Robert");
|
|
258
265
|
document.body.append(t);
|
|
259
266
|
await t.updateComplete;
|
|
260
267
|
expect(t.movieStar).toBe("Mike");
|
|
261
268
|
expect(t.getAttribute("movie-star")).toBe("Mike");
|
|
269
|
+
expect(t.foo).toBe("bar");
|
|
270
|
+
expect(t.getAttribute("foo")).toBe("bar");
|
|
262
271
|
expect(t.wibble).toBe("Robert");
|
|
263
272
|
expect(t.getAttribute("wibble")).toBe("Robert");
|
|
264
273
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attribute.test.js","sourceRoot":"","sources":["../../src/decorators/attribute.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE/D,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;QAEpB,kBAAkB;gCADvB,aAAa,CAAC,sBAAsB,CAAC;;;;0BACL,SAAS;;;;;;;;;;;;;;;;sCAAjB,SAAQ,WAAS;;;;sCACrC,SAAS
|
|
1
|
+
{"version":3,"file":"attribute.test.js","sourceRoot":"","sources":["../../src/decorators/attribute.test.ts"],"names":[],"mappings":"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"}
|
package/dist/emitter.d.ts
CHANGED
|
@@ -1,10 +1,83 @@
|
|
|
1
1
|
export type CustomEventTypes<T extends keyof HTMLElementEventMap> = {
|
|
2
2
|
[Key in T]: HTMLElementEventMap[Key] extends CustomEvent<infer D> ? D : never;
|
|
3
3
|
};
|
|
4
|
+
/**
|
|
5
|
+
* Declare the events that can be emitted.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* class MyElement extends EmitterElement {
|
|
9
|
+
* emits!: Emits<"keydown" | "keyup">;
|
|
10
|
+
* }
|
|
11
|
+
*/
|
|
12
|
+
export type Emits<A extends keyof HTMLElementEventMap> = {
|
|
13
|
+
[K in A]: never;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Declare the events that can be emitted, including the events listed in the
|
|
17
|
+
* provided superclass.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* class MyElement extends MySuperclassElement {
|
|
21
|
+
* emits!: EmitsSuper<MySuperclassElement, "click">;
|
|
22
|
+
* }
|
|
23
|
+
*/
|
|
24
|
+
export type EmitsSuper<C extends EmitterElement, A extends keyof HTMLElementEventMap> = {
|
|
25
|
+
[K in keyof C["emits"] | A]: never;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Given an element type, extract the emitted events for that element.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* class MyElement extends EmitterElement {
|
|
32
|
+
* emits!: Emits<"click" | "change">;
|
|
33
|
+
* }
|
|
34
|
+
* type MyElementEvents = ElementEmits<MyElement>;
|
|
35
|
+
* // resolves to "click" | "change";
|
|
36
|
+
*/
|
|
37
|
+
export type ElementEmits<C> = C extends EmitterElement ? keyof C["emits"] : never;
|
|
38
|
+
/**
|
|
39
|
+
* A subclass of {@link HTMLElement} which declares what events can be emitted
|
|
40
|
+
* by it at the type level. Thus, calling `this.emit()` with an undeclared event
|
|
41
|
+
* name will be a type error.
|
|
42
|
+
*
|
|
43
|
+
* It also offers proper type checking of the data provided to
|
|
44
|
+
* {@link EmitterElement.emit} using the types declared in
|
|
45
|
+
* {@link HTMLElementEventMap}.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* declare global {
|
|
49
|
+
* interface HTMLElementEventMap {
|
|
50
|
+
* "my-event": { name: string; count: number; }
|
|
51
|
+
* }
|
|
52
|
+
* }
|
|
53
|
+
*
|
|
54
|
+
* class MyElement extends EmitterElement {
|
|
55
|
+
* emits!: Emits<"my-event">;
|
|
56
|
+
*
|
|
57
|
+
* handleMyEvent() {
|
|
58
|
+
* this.emit("my-event", { name: "Joe", count: 1337 });
|
|
59
|
+
* }
|
|
60
|
+
* }
|
|
61
|
+
*/
|
|
4
62
|
export declare class EmitterElement extends HTMLElement {
|
|
5
63
|
emits: {
|
|
6
64
|
[K in keyof HTMLElementEventMap]?: never;
|
|
7
65
|
};
|
|
66
|
+
/**
|
|
67
|
+
* Emit a custom event with the given name and detail.
|
|
68
|
+
*
|
|
69
|
+
* Event init options default to `{ bubbles: true, composed: true }`.
|
|
70
|
+
*/
|
|
8
71
|
emit<M extends CustomEventTypes<keyof this["emits"] & keyof HTMLElementEventMap>, K extends Extract<keyof M, string>, D extends M[K]>(name: K, detail?: D, options?: EventInit): CustomEvent<D>;
|
|
9
|
-
|
|
72
|
+
/**
|
|
73
|
+
* Construct an event using the provided name and constructor.
|
|
74
|
+
*
|
|
75
|
+
* The constructor will be called with the name as its first argument,
|
|
76
|
+
* followed by any subsequent arguments provided after the constructor.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* this.emitEvent("click", MouseEvent, { button: 2 });
|
|
80
|
+
* // emits: new MouseEvent("click", { button: 2 });
|
|
81
|
+
*/
|
|
82
|
+
emitEvent<K extends keyof this["emits"] & keyof HTMLElementEventMap, E extends HTMLElementEventMap[K], C extends new (type: string, ...args: Args) => E, Args extends Array<any>>(name: K, constructor: C, ...args: Args): E;
|
|
10
83
|
}
|
package/dist/emitter.js
CHANGED
|
@@ -1,4 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A subclass of {@link HTMLElement} which declares what events can be emitted
|
|
3
|
+
* by it at the type level. Thus, calling `this.emit()` with an undeclared event
|
|
4
|
+
* name will be a type error.
|
|
5
|
+
*
|
|
6
|
+
* It also offers proper type checking of the data provided to
|
|
7
|
+
* {@link EmitterElement.emit} using the types declared in
|
|
8
|
+
* {@link HTMLElementEventMap}.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* declare global {
|
|
12
|
+
* interface HTMLElementEventMap {
|
|
13
|
+
* "my-event": { name: string; count: number; }
|
|
14
|
+
* }
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* class MyElement extends EmitterElement {
|
|
18
|
+
* emits!: Emits<"my-event">;
|
|
19
|
+
*
|
|
20
|
+
* handleMyEvent() {
|
|
21
|
+
* this.emit("my-event", { name: "Joe", count: 1337 });
|
|
22
|
+
* }
|
|
23
|
+
* }
|
|
24
|
+
*/
|
|
1
25
|
export class EmitterElement extends HTMLElement {
|
|
26
|
+
/**
|
|
27
|
+
* Emit a custom event with the given name and detail.
|
|
28
|
+
*
|
|
29
|
+
* Event init options default to `{ bubbles: true, composed: true }`.
|
|
30
|
+
*/
|
|
2
31
|
emit(name, detail, options) {
|
|
3
32
|
const event = new CustomEvent(name, {
|
|
4
33
|
bubbles: true,
|
|
@@ -9,9 +38,20 @@ export class EmitterElement extends HTMLElement {
|
|
|
9
38
|
this.dispatchEvent(event);
|
|
10
39
|
return event;
|
|
11
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Construct an event using the provided name and constructor.
|
|
43
|
+
*
|
|
44
|
+
* The constructor will be called with the name as its first argument,
|
|
45
|
+
* followed by any subsequent arguments provided after the constructor.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* this.emitEvent("click", MouseEvent, { button: 2 });
|
|
49
|
+
* // emits: new MouseEvent("click", { button: 2 });
|
|
50
|
+
*/
|
|
12
51
|
emitEvent(name, constructor, ...args) {
|
|
13
52
|
const event = new constructor(name, ...args);
|
|
14
53
|
this.dispatchEvent(event);
|
|
54
|
+
return event;
|
|
15
55
|
}
|
|
16
56
|
}
|
|
17
57
|
//# sourceMappingURL=emitter.js.map
|
package/dist/emitter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"AAuCA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,cAAe,SAAQ,WAAW;IAG3C;;;;OAIG;IACH,IAAI,CAIF,IAAO,EAAE,MAAU,EAAE,OAAmB;QACtC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE;YAChC,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM;YACN,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;SACrB,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;;;;OASG;IACH,SAAS,CAKP,IAAO,EAAE,WAAc,EAAE,GAAG,IAAU;QACpC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"}
|
package/dist/slot.d.ts
CHANGED
|
@@ -14,7 +14,8 @@ export interface QuerySlotOptions extends AssignedNodesOptions {
|
|
|
14
14
|
/** Create a signal which will update with changes to the slot's contents. */
|
|
15
15
|
reactive?: boolean;
|
|
16
16
|
}
|
|
17
|
-
export declare function
|
|
17
|
+
export declare function listsEqual<A>(as: Array<A>, bs: Array<A>): boolean;
|
|
18
|
+
export declare function findSlot(root: Component, name: string | undefined): HTMLSlotElement | null;
|
|
18
19
|
export declare class SlotChangeController implements ReactiveController {
|
|
19
20
|
private readonly host;
|
|
20
21
|
private readonly slot;
|
package/dist/slot.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { DisposableContext } from "@bodil/core/disposable";
|
|
2
2
|
import { eventListener } from "./event";
|
|
3
|
-
export function
|
|
4
|
-
|
|
3
|
+
export function listsEqual(as, bs) {
|
|
4
|
+
return as.length === bs.length && as.every((a, index) => Object.is(a, bs[index]));
|
|
5
|
+
}
|
|
6
|
+
export function findSlot(root, name) {
|
|
7
|
+
const slotSelector = `slot${name !== undefined ? `[name=${name}]` : ":not([name])"}`;
|
|
5
8
|
return root.renderRoot.querySelector(slotSelector);
|
|
6
9
|
}
|
|
7
10
|
export class SlotChangeController {
|
package/dist/slot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slot.js","sourceRoot":"","sources":["../src/slot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAM3D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAexC,MAAM,UAAU,QAAQ,CAAC,IAAe,EAAE,IAAwB;IAC9D,MAAM,YAAY,GAAG,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;IACrF,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAkB,YAAY,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,OAAO,oBAAoB;IAG7B,YACqB,IAAe,EACf,IAAwB,EACxB,GAA8B,EAC9B,KAA6C;QAH7C,SAAI,GAAJ,IAAI,CAAW;QACf,SAAI,GAAJ,IAAI,CAAoB;QACxB,QAAG,GAAH,GAAG,CAA2B;QAC9B,UAAK,GAAL,KAAK,CAAwC;QANjD,YAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAOhD,CAAC;IAEJ,UAAU,CAAC,IAAqB;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,gBAAgB;QACZ,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,aAAa;QACT,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,WAAW;QACP,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACtF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACL,CAAC;CACJ;AAED,MAAM,UAAU,GAAG,IAAI,OAAO,EAA8C,CAAC;AAE7E,MAAM,UAAU,aAAa,CAAI,GAAW,EAAE,OAAyB,EAAE,MAAe;IACpF,IAAI,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC5B,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;QACxB,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,GAAG,GAAG,SAAS,OAAO,CAAC,QAAQ,IAAI,EAAE,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC;IACpG,IAAI,gBAAgB,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACjC,gBAAgB,GAAG,IAAI,GAAG,EAAE,CAAC;QAC7B,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACtB,KAAK,GAAG,MAAM,EAAE,CAAC;QACjB,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,KAAU,CAAC;AACtB,CAAC;AAED,MAAM,WAAW,GAAG,IAAI,OAAO,EAAiC,CAAC;AAEjE,MAAM,UAAU,cAAc,CAAI,GAAW,EAAE,KAAc,EAAE,MAAe;IAC1E,IAAI,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC3B,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,GAAG,MAAM,EAAE,CAAC;QAClB,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,MAAW,CAAC;AACvB,CAAC"}
|
|
1
|
+
{"version":3,"file":"slot.js","sourceRoot":"","sources":["../src/slot.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/component.test.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { customElement } from "lit/decorators.js";
|
|
|
4
4
|
import { createRef, ref } from "lit/directives/ref.js";
|
|
5
5
|
import { expect, expectTypeOf, test } from "vitest";
|
|
6
6
|
|
|
7
|
-
import { Component } from "./component";
|
|
7
|
+
import { Component, ComponentUpdateLoopError } from "./component";
|
|
8
8
|
|
|
9
9
|
test("Component.query", async () => {
|
|
10
10
|
@customElement("query-test-class")
|
|
@@ -88,3 +88,47 @@ test("Component.querySlot", async () => {
|
|
|
88
88
|
|
|
89
89
|
expectTypeOf(t.querySlot({ nodes: true })).toEqualTypeOf<Array<Node>>();
|
|
90
90
|
});
|
|
91
|
+
|
|
92
|
+
test("Component.querySlot signal in render() triggers update", async () => {
|
|
93
|
+
@customElement("query-slot-signal-test-class")
|
|
94
|
+
class QuerySlotSignalTestClass extends Component {
|
|
95
|
+
render() {
|
|
96
|
+
// This query will return empty on the first update, because the
|
|
97
|
+
// slot element hasn't been created yet. We expect render() to be
|
|
98
|
+
// re-run once the slot exists, inside the same update cycle.
|
|
99
|
+
if (this.querySlot({ reactive: true }).get().length === 0) {
|
|
100
|
+
return html`<slot></slot>
|
|
101
|
+
<div class="no-members">no members</div>`;
|
|
102
|
+
}
|
|
103
|
+
return html`<slot></slot>
|
|
104
|
+
<div class="has-members">has members</div>`;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const t = document.createElement("query-slot-signal-test-class") as QuerySlotSignalTestClass;
|
|
109
|
+
document.body.append(t);
|
|
110
|
+
|
|
111
|
+
const joe = document.createElement("div");
|
|
112
|
+
joe.classList.add("joe");
|
|
113
|
+
t.append(joe);
|
|
114
|
+
|
|
115
|
+
await t.updateComplete;
|
|
116
|
+
|
|
117
|
+
expect(t.querySlot({ reactive: true }).get()).deep.equal([joe]);
|
|
118
|
+
expect(t.query("div.has-members")).toBeInstanceOf(HTMLDivElement);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
test("dirty render loop aborts", async () => {
|
|
122
|
+
@customElement("dirty-render-loop-test-class")
|
|
123
|
+
class DirtyRenderLoopTestClass extends Component {
|
|
124
|
+
render() {
|
|
125
|
+
this.requestUpdate();
|
|
126
|
+
return html`welp!`;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const t = document.createElement("dirty-render-loop-test-class") as DirtyRenderLoopTestClass;
|
|
131
|
+
document.body.append(t);
|
|
132
|
+
|
|
133
|
+
await expect(t.updateComplete).rejects.toThrowError(ComponentUpdateLoopError);
|
|
134
|
+
});
|
package/src/component.ts
CHANGED
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
findSlot,
|
|
29
29
|
getOrSetQuery,
|
|
30
30
|
getOrSetSignal,
|
|
31
|
+
listsEqual,
|
|
31
32
|
SlotChangeController,
|
|
32
33
|
type QuerySlotOptions,
|
|
33
34
|
} from "./slot";
|
|
@@ -39,6 +40,7 @@ export {
|
|
|
39
40
|
attributeSetter,
|
|
40
41
|
type AttributeOptions,
|
|
41
42
|
type AttributeGetterSetterOptions,
|
|
43
|
+
type AttributeType,
|
|
42
44
|
} from "./decorators/attribute";
|
|
43
45
|
export {
|
|
44
46
|
connect,
|
|
@@ -48,8 +50,9 @@ export {
|
|
|
48
50
|
} from "./decorators/connect";
|
|
49
51
|
export { reactive } from "./decorators/reactive";
|
|
50
52
|
export { require } from "./decorators/require";
|
|
53
|
+
export { EmitterElement } from "./emitter";
|
|
54
|
+
export type { CustomEventTypes, Emits, EmitsSuper, ElementEmits } from "./emitter";
|
|
51
55
|
export type { QuerySlotOptions } from "./slot";
|
|
52
|
-
export type { CustomEventTypes } from "./emitter";
|
|
53
56
|
|
|
54
57
|
(Symbol as any).metadata ??= Symbol.for("Symbol.metadata");
|
|
55
58
|
|
|
@@ -57,22 +60,10 @@ export type UpdateConfig = {
|
|
|
57
60
|
viewTransition?: boolean;
|
|
58
61
|
};
|
|
59
62
|
|
|
60
|
-
function listsEqual<A>(as: Array<A>, bs: Array<A>): boolean {
|
|
61
|
-
return as.length === bs.length && as.every((a, index) => Object.is(a, bs[index]));
|
|
62
|
-
}
|
|
63
|
-
|
|
64
63
|
const finalised = Symbol("finalised");
|
|
65
64
|
|
|
66
65
|
export type Deps = Array<typeof HTMLElement>;
|
|
67
66
|
|
|
68
|
-
export type Declare<A extends keyof HTMLElementEventMap> = { [K in A]: never };
|
|
69
|
-
|
|
70
|
-
export type ExtendSuper<C extends Component, A extends keyof HTMLElementEventMap> = {
|
|
71
|
-
[K in keyof C["emits"] | A]: never;
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
export type Emits<C> = C extends Component ? keyof C["emits"] : never;
|
|
75
|
-
|
|
76
67
|
export type CSSStyleSpec = CSSResult | CSSStyleSheet | string;
|
|
77
68
|
export type CSSStyleSpecArray = Array<CSSStyleSpec | CSSStyleSpecArray>;
|
|
78
69
|
export type CSSStyleSpecDeclaration = CSSStyleSpec | CSSStyleSpecArray;
|
|
@@ -81,6 +72,13 @@ function processCSSStyleSpec(spec: CSSStyleSpec) {
|
|
|
81
72
|
return getCompatibleStyle(typeof spec === "string" ? unsafeCSS(spec) : spec);
|
|
82
73
|
}
|
|
83
74
|
|
|
75
|
+
export class ComponentUpdateLoopError extends Error {
|
|
76
|
+
constructor(message?: string, options?: ErrorOptions) {
|
|
77
|
+
super(message, options);
|
|
78
|
+
this.name = "ComponentUpdateLoopError";
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
84
82
|
export abstract class Component
|
|
85
83
|
extends EmitterElement
|
|
86
84
|
implements ReactiveControllerHost, Disposable
|
|
@@ -103,6 +101,7 @@ export abstract class Component
|
|
|
103
101
|
|
|
104
102
|
readonly #controllers = new Set<ReactiveController>();
|
|
105
103
|
readonly #connectedContext = new DisposableContext();
|
|
104
|
+
#dirty = false;
|
|
106
105
|
#isUpdatePending = false;
|
|
107
106
|
#updateSignal?: Signal.Computed<void>;
|
|
108
107
|
readonly #updateSignalWatcher = new Signal.subtle.Watcher(() => this.requestUpdate());
|
|
@@ -308,6 +307,8 @@ export abstract class Component
|
|
|
308
307
|
}
|
|
309
308
|
|
|
310
309
|
requestUpdate(opts?: UpdateConfig) {
|
|
310
|
+
this.#dirty = true;
|
|
311
|
+
|
|
311
312
|
if (opts?.viewTransition === true) {
|
|
312
313
|
this.#viewTransitionRequested = true;
|
|
313
314
|
}
|
|
@@ -339,6 +340,10 @@ export abstract class Component
|
|
|
339
340
|
}
|
|
340
341
|
|
|
341
342
|
protected async performUpdate() {
|
|
343
|
+
if (!this.isConnected || !this.isUpdatePending) {
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
|
|
342
347
|
let didFirstUpdate = false;
|
|
343
348
|
const runUpdate = () => {
|
|
344
349
|
this.#controllers.forEach((c) => c.hostUpdate?.());
|
|
@@ -351,30 +356,40 @@ export abstract class Component
|
|
|
351
356
|
}
|
|
352
357
|
this.updated();
|
|
353
358
|
};
|
|
354
|
-
|
|
355
|
-
if (!this.isConnected || !this.isUpdatePending) {
|
|
356
|
-
return;
|
|
357
|
-
}
|
|
358
359
|
try {
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
360
|
+
let count = 0;
|
|
361
|
+
while (this.#dirty) {
|
|
362
|
+
// Retry this.update() until it runs without causing dirtiness.
|
|
363
|
+
// This is to allow render() to react to things like slot
|
|
364
|
+
// queries responding to slots being created.
|
|
365
|
+
this.#dirty = false;
|
|
366
|
+
count++;
|
|
367
|
+
// If it runs dirty too many times, that's an error.
|
|
368
|
+
if (count > 4) {
|
|
369
|
+
throw new ComponentUpdateLoopError(
|
|
370
|
+
`Component.update() ran dirty ${count} times, ensure you're not accidentally triggering updates inside render()`,
|
|
371
|
+
);
|
|
372
|
+
}
|
|
373
|
+
if (
|
|
374
|
+
this.#viewTransitionRequested &&
|
|
375
|
+
typeof document.startViewTransition === "function"
|
|
376
|
+
) {
|
|
377
|
+
this.#viewTransitionRequested = false;
|
|
378
|
+
await document.startViewTransition(runUpdate).finished;
|
|
379
|
+
} else {
|
|
380
|
+
runUpdate();
|
|
381
|
+
}
|
|
367
382
|
}
|
|
368
|
-
this.#updateResult.resolve(true);
|
|
369
383
|
this.#isUpdatePending = false;
|
|
384
|
+
this.#updateResult.resolve(true);
|
|
370
385
|
if (didFirstUpdate) {
|
|
371
386
|
await this.stabilise();
|
|
372
387
|
this.stabilised();
|
|
373
388
|
this.#stabilised.resolve();
|
|
374
389
|
}
|
|
375
390
|
} catch (e) {
|
|
376
|
-
this.#updateResult.reject(e);
|
|
377
391
|
this.#isUpdatePending = false;
|
|
392
|
+
this.#updateResult.reject(e);
|
|
378
393
|
if (didFirstUpdate) {
|
|
379
394
|
this.#stabilised.reject(e);
|
|
380
395
|
}
|
|
@@ -448,6 +463,22 @@ export abstract class Component
|
|
|
448
463
|
this.remove();
|
|
449
464
|
}
|
|
450
465
|
|
|
466
|
+
/**
|
|
467
|
+
* Attach a {@link Disposable} to the component's connected/disconnected
|
|
468
|
+
* lifecycle state.
|
|
469
|
+
*
|
|
470
|
+
* This causes the {@link Disposable} to be disposed automatically when the
|
|
471
|
+
* component is disconnected. The common pattern for this is for resources,
|
|
472
|
+
* such as event listeners, allocated in {@link Component.connectedCallback}
|
|
473
|
+
* to be registered for automatic deallocation during
|
|
474
|
+
* {@link Component.disconnectedCallback}.
|
|
475
|
+
*
|
|
476
|
+
* @example
|
|
477
|
+
* protected override connectedCallback() {
|
|
478
|
+
* super.connectedCallback();
|
|
479
|
+
* this.useWhileConnected(this.on("click", this.handleClick.bind(this)));
|
|
480
|
+
* }
|
|
481
|
+
*/
|
|
451
482
|
useWhileConnected(disposifiable: undefined): undefined;
|
|
452
483
|
useWhileConnected(disposifiable: null): null;
|
|
453
484
|
useWhileConnected(disposifiable: Disposifiable): Disposable;
|
|
@@ -466,6 +497,11 @@ export abstract class Component
|
|
|
466
497
|
return disposable;
|
|
467
498
|
}
|
|
468
499
|
|
|
500
|
+
/**
|
|
501
|
+
* Attach an event listener to an event on this component.
|
|
502
|
+
*
|
|
503
|
+
* @returns A {@link Disposable} to subsequently detach the event listener.
|
|
504
|
+
*/
|
|
469
505
|
on<K extends keyof HTMLElementEventMap>(
|
|
470
506
|
type: K,
|
|
471
507
|
callback: (event: HTMLElementEventMap[K]) => void,
|
|
@@ -551,6 +587,7 @@ export abstract class Component
|
|
|
551
587
|
options: QuerySlotOptions & { selector: El },
|
|
552
588
|
): Array<HTMLElementDeprecatedTagNameMap[El]>;
|
|
553
589
|
querySlot(options?: QuerySlotOptions): Array<Element>;
|
|
590
|
+
|
|
554
591
|
querySlot(
|
|
555
592
|
options?: QuerySlotOptions,
|
|
556
593
|
):
|
|
@@ -8,11 +8,14 @@ import { attributeGetter, attributeSetter } from "./attribute";
|
|
|
8
8
|
test("@attribute", async () => {
|
|
9
9
|
@customElement("attribute-test-class")
|
|
10
10
|
class AttributeTestClass extends Component {
|
|
11
|
-
@attribute accessor wibble: string | undefined = "Joe";
|
|
12
|
-
@attribute({ type: Number }) accessor wobble: number | undefined = 1;
|
|
13
|
-
@attribute({ type: Boolean }) accessor noMeansNo: boolean | undefined =
|
|
14
|
-
|
|
15
|
-
@attribute({
|
|
11
|
+
@attribute({ reflect: true }) accessor wibble: string | undefined = "Joe";
|
|
12
|
+
@attribute({ type: Number, reflect: true }) accessor wobble: number | undefined = 1;
|
|
13
|
+
@attribute({ type: Boolean, reflect: true }) accessor noMeansNo: boolean | undefined =
|
|
14
|
+
false;
|
|
15
|
+
@attribute({ name: "wolp", reactive: false, reflect: true }) accessor welp:
|
|
16
|
+
| string
|
|
17
|
+
| undefined = "Joe";
|
|
18
|
+
@attribute accessor hide: string | undefined = "no";
|
|
16
19
|
}
|
|
17
20
|
|
|
18
21
|
const t = document.createElement("attribute-test-class") as AttributeTestClass;
|
|
@@ -130,6 +133,8 @@ test("@attribute init ordering", async () => {
|
|
|
130
133
|
class AttributeInitTestClass extends Component {
|
|
131
134
|
@attribute accessor movieStar = "Joe";
|
|
132
135
|
|
|
136
|
+
@attribute accessor foo: string | undefined;
|
|
137
|
+
|
|
133
138
|
#wibble = "Joe";
|
|
134
139
|
@attributeGetter get wibble(): string {
|
|
135
140
|
return this.#wibble;
|
|
@@ -141,6 +146,7 @@ test("@attribute init ordering", async () => {
|
|
|
141
146
|
|
|
142
147
|
const t = document.createElement("attribute-init-test-class") as AttributeInitTestClass;
|
|
143
148
|
t.setAttribute("movie-star", "Mike");
|
|
149
|
+
t.setAttribute("foo", "bar");
|
|
144
150
|
t.setAttribute("wibble", "Robert");
|
|
145
151
|
document.body.append(t);
|
|
146
152
|
await t.updateComplete;
|
|
@@ -148,6 +154,9 @@ test("@attribute init ordering", async () => {
|
|
|
148
154
|
expect(t.movieStar).toBe("Mike");
|
|
149
155
|
expect(t.getAttribute("movie-star")).toBe("Mike");
|
|
150
156
|
|
|
157
|
+
expect(t.foo).toBe("bar");
|
|
158
|
+
expect(t.getAttribute("foo")).toBe("bar");
|
|
159
|
+
|
|
151
160
|
expect(t.wibble).toBe("Robert");
|
|
152
161
|
expect(t.getAttribute("wibble")).toBe("Robert");
|
|
153
162
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/unified-signatures */
|
|
2
2
|
|
|
3
|
-
import { isDeepEqual, isNullish,
|
|
3
|
+
import { isDeepEqual, isNullish, unreachable } from "@bodil/core/assert";
|
|
4
4
|
import { None, Some, type Option } from "@bodil/opt";
|
|
5
5
|
import { Signal } from "@bodil/signal";
|
|
6
6
|
|
|
@@ -211,7 +211,7 @@ export function attribute<C extends Component, T extends string | number | boole
|
|
|
211
211
|
type: String,
|
|
212
212
|
property: context.name,
|
|
213
213
|
reactive: context.kind === "accessor",
|
|
214
|
-
reflect:
|
|
214
|
+
reflect: false,
|
|
215
215
|
name: toKebabCase(context.name),
|
|
216
216
|
},
|
|
217
217
|
...((valueOrOptions as AttributeOptions) ?? {}),
|
|
@@ -255,8 +255,8 @@ function syncAttribute<C extends Component, T>(
|
|
|
255
255
|
value: T,
|
|
256
256
|
force: boolean = false,
|
|
257
257
|
) {
|
|
258
|
-
const key =
|
|
259
|
-
const attributeValue = toAttribute(value,
|
|
258
|
+
const key = options.name;
|
|
259
|
+
const attributeValue = toAttribute(value, options.type);
|
|
260
260
|
if (force || attributeValue !== target.getAttribute(key)) {
|
|
261
261
|
target.setAttributeQuietly(key, attributeValue);
|
|
262
262
|
}
|
|
@@ -267,16 +267,8 @@ function accessor<C extends Component, T>(
|
|
|
267
267
|
context: ClassAccessorDecoratorContext<C, T>,
|
|
268
268
|
value: ClassAccessorDecoratorTarget<C, T>,
|
|
269
269
|
): ClassAccessorDecoratorResult<C, T> {
|
|
270
|
-
let initValue: Option<T> = None;
|
|
271
|
-
const init = function init(this: C, value: T): T {
|
|
272
|
-
initValue = Some(value);
|
|
273
|
-
if (options.reflect) {
|
|
274
|
-
syncAttribute(this, options, value, true);
|
|
275
|
-
}
|
|
276
|
-
return value;
|
|
277
|
-
};
|
|
278
|
-
|
|
279
270
|
if (options.reactive) {
|
|
271
|
+
let initValue: Option<T> = None;
|
|
280
272
|
const getSig = (obj: object) =>
|
|
281
273
|
signalForObject(obj, context.name, () =>
|
|
282
274
|
Signal(initValue.unwrapExact(), {
|
|
@@ -293,7 +285,13 @@ function accessor<C extends Component, T>(
|
|
|
293
285
|
syncAttribute(this, options, newValue);
|
|
294
286
|
}
|
|
295
287
|
},
|
|
296
|
-
init,
|
|
288
|
+
init(this: C, value: T): T {
|
|
289
|
+
initValue = Some(value);
|
|
290
|
+
if (options.reflect) {
|
|
291
|
+
syncAttribute(this, options, value, true);
|
|
292
|
+
}
|
|
293
|
+
return value;
|
|
294
|
+
},
|
|
297
295
|
};
|
|
298
296
|
}
|
|
299
297
|
return {
|
|
@@ -306,6 +304,11 @@ function accessor<C extends Component, T>(
|
|
|
306
304
|
syncAttribute(this, options, newValue);
|
|
307
305
|
}
|
|
308
306
|
},
|
|
309
|
-
init,
|
|
307
|
+
init(this: C, value: T): T {
|
|
308
|
+
if (options.reflect) {
|
|
309
|
+
syncAttribute(this, options, value, true);
|
|
310
|
+
}
|
|
311
|
+
return value;
|
|
312
|
+
},
|
|
310
313
|
};
|
|
311
314
|
}
|
package/src/emitter.ts
CHANGED
|
@@ -2,9 +2,73 @@ export type CustomEventTypes<T extends keyof HTMLElementEventMap> = {
|
|
|
2
2
|
[Key in T]: HTMLElementEventMap[Key] extends CustomEvent<infer D> ? D : never;
|
|
3
3
|
};
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Declare the events that can be emitted.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* class MyElement extends EmitterElement {
|
|
10
|
+
* emits!: Emits<"keydown" | "keyup">;
|
|
11
|
+
* }
|
|
12
|
+
*/
|
|
13
|
+
export type Emits<A extends keyof HTMLElementEventMap> = { [K in A]: never };
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Declare the events that can be emitted, including the events listed in the
|
|
17
|
+
* provided superclass.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* class MyElement extends MySuperclassElement {
|
|
21
|
+
* emits!: EmitsSuper<MySuperclassElement, "click">;
|
|
22
|
+
* }
|
|
23
|
+
*/
|
|
24
|
+
export type EmitsSuper<C extends EmitterElement, A extends keyof HTMLElementEventMap> = {
|
|
25
|
+
[K in keyof C["emits"] | A]: never;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Given an element type, extract the emitted events for that element.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* class MyElement extends EmitterElement {
|
|
33
|
+
* emits!: Emits<"click" | "change">;
|
|
34
|
+
* }
|
|
35
|
+
* type MyElementEvents = ElementEmits<MyElement>;
|
|
36
|
+
* // resolves to "click" | "change";
|
|
37
|
+
*/
|
|
38
|
+
export type ElementEmits<C> = C extends EmitterElement ? keyof C["emits"] : never;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* A subclass of {@link HTMLElement} which declares what events can be emitted
|
|
42
|
+
* by it at the type level. Thus, calling `this.emit()` with an undeclared event
|
|
43
|
+
* name will be a type error.
|
|
44
|
+
*
|
|
45
|
+
* It also offers proper type checking of the data provided to
|
|
46
|
+
* {@link EmitterElement.emit} using the types declared in
|
|
47
|
+
* {@link HTMLElementEventMap}.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* declare global {
|
|
51
|
+
* interface HTMLElementEventMap {
|
|
52
|
+
* "my-event": { name: string; count: number; }
|
|
53
|
+
* }
|
|
54
|
+
* }
|
|
55
|
+
*
|
|
56
|
+
* class MyElement extends EmitterElement {
|
|
57
|
+
* emits!: Emits<"my-event">;
|
|
58
|
+
*
|
|
59
|
+
* handleMyEvent() {
|
|
60
|
+
* this.emit("my-event", { name: "Joe", count: 1337 });
|
|
61
|
+
* }
|
|
62
|
+
* }
|
|
63
|
+
*/
|
|
5
64
|
export class EmitterElement extends HTMLElement {
|
|
6
65
|
emits!: { [K in keyof HTMLElementEventMap]?: never };
|
|
7
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Emit a custom event with the given name and detail.
|
|
69
|
+
*
|
|
70
|
+
* Event init options default to `{ bubbles: true, composed: true }`.
|
|
71
|
+
*/
|
|
8
72
|
emit<
|
|
9
73
|
M extends CustomEventTypes<keyof this["emits"] & keyof HTMLElementEventMap>,
|
|
10
74
|
K extends Extract<keyof M, string>,
|
|
@@ -20,13 +84,24 @@ export class EmitterElement extends HTMLElement {
|
|
|
20
84
|
return event;
|
|
21
85
|
}
|
|
22
86
|
|
|
87
|
+
/**
|
|
88
|
+
* Construct an event using the provided name and constructor.
|
|
89
|
+
*
|
|
90
|
+
* The constructor will be called with the name as its first argument,
|
|
91
|
+
* followed by any subsequent arguments provided after the constructor.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* this.emitEvent("click", MouseEvent, { button: 2 });
|
|
95
|
+
* // emits: new MouseEvent("click", { button: 2 });
|
|
96
|
+
*/
|
|
23
97
|
emitEvent<
|
|
24
98
|
K extends keyof this["emits"] & keyof HTMLElementEventMap,
|
|
25
99
|
E extends HTMLElementEventMap[K],
|
|
26
100
|
C extends new (type: string, ...args: Args) => E,
|
|
27
101
|
Args extends Array<any>,
|
|
28
|
-
>(name: K, constructor: C, ...args: Args) {
|
|
102
|
+
>(name: K, constructor: C, ...args: Args): E {
|
|
29
103
|
const event = new constructor(name, ...args);
|
|
30
104
|
this.dispatchEvent(event);
|
|
105
|
+
return event;
|
|
31
106
|
}
|
|
32
107
|
}
|
package/src/slot.ts
CHANGED
|
@@ -19,8 +19,12 @@ export interface QuerySlotOptions extends AssignedNodesOptions {
|
|
|
19
19
|
reactive?: boolean;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export function
|
|
23
|
-
|
|
22
|
+
export function listsEqual<A>(as: Array<A>, bs: Array<A>): boolean {
|
|
23
|
+
return as.length === bs.length && as.every((a, index) => Object.is(a, bs[index]));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function findSlot(root: Component, name: string | undefined): HTMLSlotElement | null {
|
|
27
|
+
const slotSelector = `slot${name !== undefined ? `[name=${name}]` : ":not([name])"}`;
|
|
24
28
|
return root.renderRoot.querySelector<HTMLSlotElement>(slotSelector);
|
|
25
29
|
}
|
|
26
30
|
|