@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.
@@ -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
- if (this.#viewTransitionRequested &&
265
- typeof document.startViewTransition === "function") {
266
- this.#viewTransitionRequested = false;
267
- await document.startViewTransition(runUpdate).finished;
268
- }
269
- else {
270
- runUpdate();
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
  }
@@ -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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"}
@@ -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":"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"}
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, present, unreachable } from "@bodil/core/assert";
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: context.kind === "accessor",
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 = present(options.name);
94
- const attributeValue = toAttribute(value, present(options.type));
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,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAe,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAGvC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAW7C,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAsBzD,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,IAAmB;IAC3D,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,MAAM;YACP,OAAO,GAAG,KAAe,EAAE,CAAC;QAChC,KAAK,OAAO;YACR,OAAQ,KAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1C,KAAK,MAAM;YACP,OAAO,KAAe,CAAC;QAC3B;YACI,WAAW,EAAE,CAAC;IACtB,CAAC;AACL,CAAC;AASD,MAAM,UAAU,aAAa,CACzB,KAAoB,EACpB,IAAmB;IAEnB,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,MAAM,CAAC,CAAC,CAAC;YACV,MAAM,GAAG,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvD,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,SAAS,CACf,2BAA2B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CACnE,CAAC;YACN,CAAC;YACD,OAAO,GAAG,CAAC;QACf,CAAC;QACD,KAAK,OAAO;YACR,OAAO,KAAK,KAAK,IAAI,CAAC;QAC1B,KAAK,MAAM;YACP,OAAO,KAAK,IAAI,SAAS,CAAC;QAC9B;YACI,WAAW,EAAE,CAAC;IACtB,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7F,CAAC;AA2CD,MAAM,UAAU,eAAe,CAC3B,cAAyF,EACzF,OAA2C;IAE3C,YAAY;IACZ,OAAO,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAuBD,MAAM,UAAU,eAAe,CAC3B,cAAyF,EACzF,OAA2C;IAE3C,YAAY;IACZ,OAAO,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAuBD,MAAM,UAAU,SAAS,CACrB,cAAkE,EAClE,OAAyC;IAEzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,YAAY;QACZ,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CACH,KAAqC,EACrC,OAAwC,EACrC,EAAE;QACL,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,IAAI,SAAS,CACf,mBAAmB,OAAO,OAAO,CAAC,IAAI,qBAAqB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAC7F,CAAC;QACN,CAAC;QAED,MAAM,OAAO,GAAoB;YAC7B,GAAG;gBACC,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,OAAO,CAAC,IAAI;gBACtB,QAAQ,EAAE,OAAO,CAAC,IAAI,KAAK,UAAU;gBACrC,OAAO,EAAE,OAAO,CAAC,IAAI,KAAK,UAAU;gBACpC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC;YACD,GAAG,CAAE,cAAmC,IAAI,EAAE,CAAC;SAClD,CAAC;QACF,IAAI,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiC,CAAC;QAC9E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1D,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC1D,MAAM,IAAI,SAAS,CACf,yBAAyB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,4CAA4C,CACpG,CAAC;YACN,CAAC;QACL,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEjC,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9B,OAAO,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,KAA2C,CAAC,CAAC;QACnF,CAAC;QAED,oEAAoE;QACpE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,SAAS,CACf,uEAAuE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CACzG,CAAC;QACN,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,SAAS,CACf,sEAAsE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CACxG,CAAC;QACN,CAAC;IACL,CAAC,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CAClB,MAAS,EACT,OAAwB,EACxB,KAAQ,EACR,QAAiB,KAAK;IAEtB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,IAAI,KAAK,IAAI,cAAc,KAAK,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACpD,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,CACb,OAAwB,EACxB,OAA4C,EAC5C,KAAyC;IAEzC,IAAI,SAAS,GAAc,IAAI,CAAC;IAChC,MAAM,IAAI,GAAG,SAAS,IAAI,CAAU,KAAQ;QACxC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;IAEF,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAC3B,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,CACpC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE;YAC5B,MAAM,EAAE,MAAM,CAAC,EAAE;SACpB,CAAC,CACc,CAAC;QACzB,OAAO;YACH,GAAG;gBACC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YAC9B,CAAC;YACD,GAAG,CAAC,QAAW;gBACX,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC3B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBAClB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAC3C,CAAC;YACL,CAAC;YACD,IAAI;SACP,CAAC;IACN,CAAC;IACD,OAAO;QACH,GAAG;YACC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,GAAG,CAAC,QAAW;YACX,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC/B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC3C,CAAC;QACL,CAAC;QACD,IAAI;KACP,CAAC;AACN,CAAC"}
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({ reflect: false })];
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
- #wibble = (__runInitializers(this, _movieStar_extraInitializers), "Joe");
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":"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"}
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
- 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): void;
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
@@ -1 +1 @@
1
- {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../src/emitter.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,cAAe,SAAQ,WAAW;IAG3C,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,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;IAC9B,CAAC;CACJ"}
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 findSlot(root: Component, slot: string | undefined): HTMLSlotElement | null;
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 findSlot(root, slot) {
4
- const slotSelector = `slot${slot !== undefined ? `[name=${slot}]` : ":not([name])"}`;
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":"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"}
1
+ {"version":3,"file":"slot.js","sourceRoot":"","sources":["../src/slot.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bodil/dom",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "DOM and web component tools",
5
5
  "homepage": "https://codeberg.org/bodil/dom",
6
6
  "repository": {
@@ -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
- if (
360
- this.#viewTransitionRequested &&
361
- typeof document.startViewTransition === "function"
362
- ) {
363
- this.#viewTransitionRequested = false;
364
- await document.startViewTransition(runUpdate).finished;
365
- } else {
366
- runUpdate();
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 = false;
14
- @attribute({ name: "wolp", reactive: false }) accessor welp: string | undefined = "Joe";
15
- @attribute({ reflect: false }) accessor hide: string | undefined = "no";
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, present, unreachable } from "@bodil/core/assert";
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: context.kind === "accessor",
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 = present(options.name);
259
- const attributeValue = toAttribute(value, present(options.type));
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 findSlot(root: Component, slot: string | undefined): HTMLSlotElement | null {
23
- const slotSelector = `slot${slot !== undefined ? `[name=${slot}]` : ":not([name])"}`;
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