vintage-frames 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,16 @@
1
- import { vfElement as e } from "../define.js";
2
- import { ScaleController as t } from "../scale.js";
3
- import n from "../_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorate.js";
4
- import { VfPositioned as r } from "../position.js";
5
- import { vfBase as i } from "../styles/recipes/host.js";
6
- import { vfFocusRing as a } from "../styles/recipes/focus.js";
7
- import { emit as o } from "../events.js";
1
+ import { emit as e } from "../events.js";
2
+ import { vfElement as t } from "../define.js";
3
+ import { ScaleController as n } from "../scale.js";
4
+ import r from "../_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorate.js";
5
+ import { VfPositioned as i } from "../position.js";
6
+ import { vfBase as a } from "../styles/recipes/host.js";
7
+ import { vfFocusRing as o } from "../styles/recipes/focus.js";
8
8
  import { LitElement as s, css as c, html as l } from "lit";
9
9
  import { property as u } from "lit/decorators.js";
10
10
  //#region src/components/vf-list-item.ts
11
- var d = class extends r(s) {
11
+ var d = class extends i(s) {
12
12
  static {
13
- this.styles = [i, c`
13
+ this.styles = [a, c`
14
14
  :host {
15
15
  display: flex;
16
16
  align-items: center;
@@ -48,7 +48,7 @@ var d = class extends r(s) {
48
48
  across selected rows while Space still acts on it. */
49
49
  :host(:focus) {
50
50
  --vf-focus-offset: -1px;
51
- ${a}
51
+ ${o}
52
52
  }
53
53
  :host([selected]) {
54
54
  background: var(--vf-highlight, #000);
@@ -75,25 +75,25 @@ var d = class extends r(s) {
75
75
  }
76
76
  #e;
77
77
  constructor() {
78
- super(), this.scale = new t(this), this.value = "", this.selected = !1, this.disabled = !1, this.listDisabled = !1, this.#e = this.attachInternals(), this.#e.role = "option";
78
+ super(), this.scale = new n(this), this.value = "", this.selected = !1, this.disabled = !1, this.listDisabled = !1, this.#e = this.attachInternals(), this.#e.role = "option";
79
79
  }
80
80
  connectedCallback() {
81
81
  super.connectedCallback(), this.hasAttribute("tabindex") || (this.tabIndex = -1);
82
82
  }
83
- updated(e) {
84
- e.has("selected") && (this.#e.ariaSelected = this.selected ? "true" : "false"), (e.has("disabled") || e.has("listDisabled")) && (this.#e.ariaDisabled = this.disabled || this.listDisabled ? "true" : null), e.has("disabled") && e.get("disabled") !== void 0 && o(this, "vf-list-item-disabled-change", { item: this }, { composed: !1 });
83
+ updated(t) {
84
+ t.has("selected") && (this.#e.ariaSelected = this.selected ? "true" : "false"), (t.has("disabled") || t.has("listDisabled")) && (this.#e.ariaDisabled = this.disabled || this.listDisabled ? "true" : null), t.has("disabled") && t.get("disabled") !== void 0 && e(this, "vf-list-item-disabled-change", { item: this }, { composed: !1 });
85
85
  }
86
86
  render() {
87
87
  return l`<slot name="icon"></slot
88
88
  ><span class="text" part="text"><slot></slot></span>`;
89
89
  }
90
90
  };
91
- n([u()], d.prototype, "value", void 0), n([u({
91
+ r([u()], d.prototype, "value", void 0), r([u({
92
92
  type: Boolean,
93
93
  reflect: !0
94
- })], d.prototype, "selected", void 0), n([u({
94
+ })], d.prototype, "selected", void 0), r([u({
95
95
  type: Boolean,
96
96
  reflect: !0
97
- })], d.prototype, "disabled", void 0), n([u({ attribute: !1 })], d.prototype, "listDisabled", void 0), d = n([e("vf-list-item")], d);
97
+ })], d.prototype, "disabled", void 0), r([u({ attribute: !1 })], d.prototype, "listDisabled", void 0), d = r([t("vf-list-item")], d);
98
98
  //#endregion
99
99
  export { d as VfListItem };
@@ -1,23 +1,23 @@
1
- import { vfElement as e } from "../define.js";
2
- import { ScaleController as t } from "../scale.js";
3
- import n from "../_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorate.js";
4
- import { VfPositioned as r } from "../position.js";
5
- import { vfBase as i } from "../styles/recipes/host.js";
6
- import { vfFocusRing as a } from "../styles/recipes/focus.js";
7
- import { vfScrollRail as o } from "../styles/recipes/scroll-rail.js";
8
- import { GridSnapController as s } from "../grid-snap.js";
9
- import { emit as c } from "../events.js";
1
+ import { emit as e } from "../events.js";
2
+ import { vfElement as t } from "../define.js";
3
+ import { ScaleController as n } from "../scale.js";
4
+ import r from "../_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorate.js";
5
+ import { VfPositioned as i } from "../position.js";
6
+ import { vfBase as a } from "../styles/recipes/host.js";
7
+ import { vfFocusRing as o } from "../styles/recipes/focus.js";
8
+ import { vfScrollRail as s } from "../styles/recipes/scroll-rail.js";
9
+ import { GridSnapController as c } from "../grid-snap.js";
10
10
  import { ScrollStateController as l } from "../scroll-state.js";
11
11
  import { ScrollRailController as u, renderScrollRail as d } from "../scroll-rail.js";
12
12
  import { TypeAheadBuffer as f } from "../type-ahead.js";
13
13
  import { LitElement as p, css as m, html as h, nothing as g } from "lit";
14
14
  import { property as _, query as v, queryAssignedElements as y, state as b } from "lit/decorators.js";
15
15
  //#region src/components/vf-list.ts
16
- var x = (e, t) => e.length === t.length && e.every((e, n) => e === t[n]), S = class extends r(p) {
16
+ var x = (e, t) => e.length === t.length && e.every((e, n) => e === t[n]), S = class extends i(p) {
17
17
  static {
18
18
  this.styles = [
19
- i,
20
- o,
19
+ a,
20
+ s,
21
21
  m`
22
22
  :host {
23
23
  display: block;
@@ -66,7 +66,7 @@ var x = (e, t) => e.length === t.length && e.every((e, n) => e === t[n]), S = cl
66
66
  render()); the ring keeps that stop visible, inset to stay in-box. */
67
67
  .list:focus-visible {
68
68
  --vf-focus-offset: -2px;
69
- ${a}
69
+ ${o}
70
70
  }
71
71
  `
72
72
  ];
@@ -77,7 +77,7 @@ var x = (e, t) => e.length === t.length && e.every((e, n) => e === t[n]), S = cl
77
77
  #r;
78
78
  #i;
79
79
  constructor() {
80
- super(), this.scale = new t(this), this.gridSnap = new s(this), this.scrollState = new l(this, () => this.viewport, () => this.content, (e) => {
80
+ super(), this.scale = new n(this), this.gridSnap = new c(this), this.scrollState = new l(this, () => this.viewport, () => this.content, (e) => {
81
81
  this._scrollable = e.x || e.y;
82
82
  }), this.rail = new u(this, {
83
83
  getScroll: () => this.viewport,
@@ -192,15 +192,15 @@ var x = (e, t) => e.length === t.length && e.every((e, n) => e === t[n]), S = cl
192
192
  this.#s(e, !1);
193
193
  }
194
194
  }
195
- #s(e, t) {
196
- let n = this._items, r = this.multiple ? e : e.slice(0, 1), i = n.filter((e) => e.selected).map((e) => e.value);
197
- for (let e of n) e.selected = r.includes(e.value) && !e.disabled;
198
- let a = n.filter((e) => e.selected).map((e) => e.value);
199
- this.#r = [...a];
200
- let o = a[0] ?? "";
201
- this.value !== o && (this.value = o), x(this.values, a) || (this.values = a), this.#c(), t && !x(i, a) && c(this, "vf-change", {
195
+ #s(t, n) {
196
+ let r = this._items, i = this.multiple ? t : t.slice(0, 1), a = r.filter((e) => e.selected).map((e) => e.value);
197
+ for (let e of r) e.selected = i.includes(e.value) && !e.disabled;
198
+ let o = r.filter((e) => e.selected).map((e) => e.value);
199
+ this.#r = [...o];
200
+ let s = o[0] ?? "";
201
+ this.value !== s && (this.value = s), x(this.values, o) || (this.values = o), this.#c(), n && !x(a, o) && e(this, "vf-change", {
202
202
  value: this.value,
203
- values: [...a]
203
+ values: [...o]
204
204
  });
205
205
  }
206
206
  #c() {
@@ -242,15 +242,15 @@ var x = (e, t) => e.length === t.length && e.every((e, n) => e === t[n]), S = cl
242
242
  !t || t.disabled || (t.focus(), t.scrollIntoView({ block: "nearest" }));
243
243
  }
244
244
  };
245
- n([v(".list")], S.prototype, "viewport", void 0), n([v(".list-content")], S.prototype, "content", void 0), n([b()], S.prototype, "_scrollable", void 0), n([_({
245
+ r([v(".list")], S.prototype, "viewport", void 0), r([v(".list-content")], S.prototype, "content", void 0), r([b()], S.prototype, "_scrollable", void 0), r([_({
246
246
  type: Boolean,
247
247
  reflect: !0
248
- })], S.prototype, "multiple", void 0), n([_()], S.prototype, "value", void 0), n([_({ attribute: !1 })], S.prototype, "values", void 0), n([_({
248
+ })], S.prototype, "multiple", void 0), r([_()], S.prototype, "value", void 0), r([_({ attribute: !1 })], S.prototype, "values", void 0), r([_({
249
249
  type: Boolean,
250
250
  reflect: !0
251
- })], S.prototype, "disabled", void 0), n([_()], S.prototype, "label", void 0), n([y({
251
+ })], S.prototype, "disabled", void 0), r([_()], S.prototype, "label", void 0), r([y({
252
252
  selector: "vf-list-item",
253
253
  flatten: !0
254
- })], S.prototype, "_items", void 0), S = n([e("vf-list")], S);
254
+ })], S.prototype, "_items", void 0), S = r([t("vf-list")], S);
255
255
  //#endregion
256
256
  export { S as VfList };
@@ -43,6 +43,14 @@ export declare class VfMenuBar extends VfMenuBar_base {
43
43
  * mask was.
44
44
  */
45
45
  rounded: boolean;
46
+ /**
47
+ * Makes every slotted menu's item `shortcut`s live key equivalents — one
48
+ * declaration for the whole bar, the way MenuKey() answered for every menu
49
+ * at once. See `vf-menu.shortcuts` (the per-menu grant) and
50
+ * `vf-menu-item.shortcut` for the claim contract. Off by default: key
51
+ * equivalents are page-global, and only *the* menu bar should own them.
52
+ */
53
+ shortcuts: boolean;
46
54
  private _menus;
47
55
  connectedCallback(): void;
48
56
  disconnectedCallback(): void;
@@ -13,7 +13,7 @@ import { property as h, queryAssignedElements as g } from "lit/decorators.js";
13
13
  //#region src/components/vf-menu-bar.ts
14
14
  var _ = class extends r(d) {
15
15
  constructor(...e) {
16
- super(...e), this.scale = new t(this), this.gridSnap = new a(this), this.label = "", this.rounded = !1, this.#e = null, this.#t = this.attachInternals(), this.#n = new l(), this.#r = null, this.#i = new o(this, () => [[
16
+ super(...e), this.scale = new t(this), this.gridSnap = new a(this), this.label = "", this.rounded = !1, this.shortcuts = !1, this.#e = null, this.#t = this.attachInternals(), this.#n = new l(), this.#r = null, this.#i = new o(this, () => [[
17
17
  document,
18
18
  "pointerdown",
19
19
  this.#h,
@@ -228,7 +228,10 @@ var _ = class extends r(d) {
228
228
  n([h()], _.prototype, "label", void 0), n([h({
229
229
  type: Boolean,
230
230
  reflect: !0
231
- })], _.prototype, "rounded", void 0), n([g({
231
+ })], _.prototype, "rounded", void 0), n([h({
232
+ type: Boolean,
233
+ reflect: !0
234
+ })], _.prototype, "shortcuts", void 0), n([g({
232
235
  selector: "vf-menu",
233
236
  flatten: !0
234
237
  })], _.prototype, "_menus", void 0), _ = n([e("vf-menu-bar")], _);
@@ -62,12 +62,18 @@ export declare class VfMenuItem extends VfMenuItem_base {
62
62
  */
63
63
  checkable: boolean;
64
64
  /**
65
- * Keyboard shortcut text, e.g. `"⌘H"`, drawn left-aligned in the panel's
66
- * shared shortcut column. Display only in the
67
- * visual sense the span is `aria-hidden` so the glyphs never concatenate
68
- * into the item's accessible name ("Print… place of interest sign P")
69
- * while the host mirrors it as `aria-keyshortcuts` ("Meta+H"), so AT
70
- * announces it *as* a shortcut. A consumer's own `aria-keyshortcuts` wins.
65
+ * Keyboard shortcut, e.g. `"⌘H"`, drawn left-aligned in the panel's
66
+ * shared shortcut column. The span is `aria-hidden` so the glyphs never
67
+ * concatenate into the item's accessible name ("Print… place of interest
68
+ * sign P") the host mirrors it as `aria-keyshortcuts` ("Meta+H") instead,
69
+ * so AT announces it *as* a shortcut. A consumer's own `aria-keyshortcuts`
70
+ * wins.
71
+ *
72
+ * Inside a `vf-menu`/`vf-menu-bar` that declares `shortcuts`, this is a
73
+ * LIVE key equivalent, not a legend: a matching keydown anywhere on the
74
+ * page activates the item — menu open or not — claiming the stroke with
75
+ * `preventDefault()` (see the document keydown handler below for the full
76
+ * contract).
71
77
  */
72
78
  shortcut: string;
73
79
  /**
@@ -1,11 +1,11 @@
1
- import { vfElement as e } from "../define.js";
2
- import { ScaleController as t } from "../scale.js";
3
- import n from "../_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorate.js";
4
- import { VfPositioned as r } from "../position.js";
5
- import { vfDisplay as i } from "../styles/recipes/display-face.js";
6
- import { vfBase as a } from "../styles/recipes/host.js";
7
- import { releaseAfterGesture as o } from "../document-listeners.js";
8
- import { deferActivation as s, emit as c } from "../events.js";
1
+ import { deferActivation as e, emit as t } from "../events.js";
2
+ import { vfElement as n } from "../define.js";
3
+ import { ScaleController as r } from "../scale.js";
4
+ import i from "../_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorate.js";
5
+ import { VfPositioned as a } from "../position.js";
6
+ import { vfDisplay as o } from "../styles/recipes/display-face.js";
7
+ import { vfBase as s } from "../styles/recipes/host.js";
8
+ import { releaseAfterGesture as c } from "../document-listeners.js";
9
9
  import { runSelectionBlink as l } from "../motion.js";
10
10
  import { CHECKMARK as u, glyphSvg as d } from "../glyphs.js";
11
11
  import { LitElement as f, css as p, html as m, nothing as h } from "lit";
@@ -24,11 +24,24 @@ function b(e) {
24
24
  let r = t.join("");
25
25
  return r ? [...n, r].join("+") : "";
26
26
  }
27
- var x = class extends r(f) {
27
+ function x(e, t) {
28
+ let n = [...t.trim()], r = {
29
+ Meta: !1,
30
+ Control: !1,
31
+ Alt: !1,
32
+ Shift: !1
33
+ };
34
+ for (; n.length > 0 && y.has(n[0]);) r[y.get(n.shift())] = !0;
35
+ let i = n.join("");
36
+ if (!i || !r.Meta && !r.Control && !r.Alt && [...i].length === 1) return !1;
37
+ let a = r.Meta ? e.metaKey || e.ctrlKey : !e.metaKey, o = r.Control ? e.ctrlKey : r.Meta || !e.ctrlKey;
38
+ return a && o && e.altKey === r.Alt && e.shiftKey === r.Shift && e.key.toLowerCase() === i.toLowerCase();
39
+ }
40
+ var S = class extends a(f) {
28
41
  static {
29
42
  this.styles = [
30
- a,
31
- i,
43
+ s,
44
+ o,
32
45
  p`
33
46
  :host {
34
47
  display: block;
@@ -161,19 +174,21 @@ var x = class extends r(f) {
161
174
  #r;
162
175
  #i;
163
176
  constructor() {
164
- super(), this.scale = new t(this), this.disabled = !1, this.checked = !1, this.active = !1, this.checkable = !1, this.shortcut = "", this._blinkPhase = null, this.#t = !1, this.#n = !1, this.#r = this.attachInternals(), this.#i = !1, this.addEventListener("keydown", this.#u), this.addEventListener("pointerdown", this.#c), this.addEventListener("click", this.#l);
177
+ super(), this.scale = new r(this), this.disabled = !1, this.checked = !1, this.active = !1, this.checkable = !1, this.shortcut = "", this._blinkPhase = null, this.#t = !1, this.#n = !1, this.#r = this.attachInternals(), this.#i = !1, this.#d = (e) => {
178
+ e.defaultPrevented || e.isComposing || this.disabled || !this.shortcut || this.closest("vf-menu[shortcuts], vf-menu-bar[shortcuts]") && x(e, this.shortcut) && (e.preventDefault(), !(e.repeat || this.#t) && (t(this, "vf-menu-flash-request", { item: this }, { composed: !1 }), this.activate()));
179
+ }, this.addEventListener("keydown", this.#u), this.addEventListener("pointerdown", this.#c), this.addEventListener("click", this.#l);
165
180
  }
166
181
  get #a() {
167
182
  return this.checkable || this.#n;
168
183
  }
169
184
  connectedCallback() {
170
- super.connectedCallback(), this.#s(), this.#o(), this.hasAttribute("tabindex") || (this.tabIndex = -1);
185
+ super.connectedCallback(), this.#s(), this.#o(), this.hasAttribute("tabindex") || (this.tabIndex = -1), document.addEventListener("keydown", this.#d);
171
186
  }
172
187
  disconnectedCallback() {
173
- super.disconnectedCallback(), this.#d();
188
+ super.disconnectedCallback(), document.removeEventListener("keydown", this.#d), this.#f();
174
189
  }
175
190
  updated(e) {
176
- e.has("disabled") && (this.#r.ariaDisabled = this.disabled ? "true" : null, this.disabled && this.#d()), e.has("checked") && this.checked && (this.#n = !0), (e.has("checked") || e.has("checkable")) && this.#s(), e.has("shortcut") && this.#o();
191
+ e.has("disabled") && (this.#r.ariaDisabled = this.disabled ? "true" : null, this.disabled && this.#f()), e.has("checked") && this.checked && (this.#n = !0), (e.has("checked") || e.has("checkable")) && this.#s(), e.has("shortcut") && this.#o();
177
192
  }
178
193
  #o() {
179
194
  this.#r.ariaKeyShortcuts = b(this.shortcut) || null;
@@ -201,53 +216,56 @@ var x = class extends r(f) {
201
216
  `;
202
217
  }
203
218
  #c() {
204
- this.#i = this.closest("vf-menu") !== null, this.#i && o(() => {
219
+ this.#i = this.closest("vf-menu") !== null, this.#i && c(() => {
205
220
  this.#i = !1;
206
221
  });
207
222
  }
208
- #l(e) {
223
+ #l(t) {
209
224
  if (this.#i) {
210
225
  this.#i = !1;
211
226
  return;
212
227
  }
213
- s(this, e, () => this.activate());
228
+ e(this, t, () => this.activate());
214
229
  }
215
230
  #u(e) {
216
231
  (e.key === "Enter" || e.key === " ") && (e.preventDefault(), e.stopPropagation(), this.activate());
217
232
  }
233
+ #d;
218
234
  activate() {
219
235
  if (this.disabled || this.#t) return;
220
236
  this.#t = !0;
221
237
  let e = l((e) => {
222
238
  this._blinkPhase = e ? "on" : "off";
223
239
  }, () => {
224
- this._blinkPhase = null, this.#t = !1, this.#e = void 0, this.#f();
240
+ this._blinkPhase = null, this.#t = !1, this.#e = void 0, this.#p();
225
241
  });
226
242
  this.#t && (this.#e = e);
227
243
  }
228
- #d() {
244
+ #f() {
229
245
  this.#t && (this.#e?.cancel(), this.#e = void 0, this.#t = !1, this._blinkPhase = null);
230
246
  }
231
- #f() {
247
+ #p() {
232
248
  let e = this.value ?? (this.textContent ?? "").trim();
233
- c(this, "vf-menu-select", {
249
+ t(this, "vf-menu-select", {
234
250
  value: e,
235
251
  item: this
236
- }), c(this, "vf-menu-close-request", { item: this }, { composed: !1 });
252
+ });
253
+ let n = this.closest("vf-menu");
254
+ (!n || n.hasAttribute("open")) && t(this, "vf-menu-close-request", { item: this }, { composed: !1 });
237
255
  }
238
256
  };
239
- n([g({
257
+ i([g({
240
258
  type: Boolean,
241
259
  reflect: !0
242
- })], x.prototype, "disabled", void 0), n([g({
260
+ })], S.prototype, "disabled", void 0), i([g({
243
261
  type: Boolean,
244
262
  reflect: !0
245
- })], x.prototype, "checked", void 0), n([g({
263
+ })], S.prototype, "checked", void 0), i([g({
246
264
  type: Boolean,
247
265
  reflect: !0
248
- })], x.prototype, "active", void 0), n([g({
266
+ })], S.prototype, "active", void 0), i([g({
249
267
  type: Boolean,
250
268
  reflect: !0
251
- })], x.prototype, "checkable", void 0), n([g()], x.prototype, "shortcut", void 0), n([g()], x.prototype, "value", void 0), n([_()], x.prototype, "_blinkPhase", void 0), x = n([e("vf-menu-item")], x);
269
+ })], S.prototype, "checkable", void 0), i([g()], S.prototype, "shortcut", void 0), i([g()], S.prototype, "value", void 0), i([_()], S.prototype, "_blinkPhase", void 0), S = i([n("vf-menu-item")], S);
252
270
  //#endregion
253
- export { x as VfMenuItem };
271
+ export { S as VfMenuItem };
@@ -29,7 +29,8 @@ declare const VfMenu_base: (new (...args: any[]) => import("../position.js").VfP
29
29
  * icon for the Apple menu. Keep the `label` attribute set too: it stays the
30
30
  * menu's accessible name (the bar item's `aria-label` and the panel's) when
31
31
  * the visible title is an image.
32
- * @csspart label - The menu title in the bar (inverts while open).
32
+ * @csspart label - The menu title in the bar (inverts while open; flashes
33
+ * when a closed menu's item is activated by its key equivalent).
33
34
  * @csspart panel - The dropped `.vf-panel` containing the items.
34
35
  * @cssprop [--vf-menubar-height=20px] - `vf-menu-bar`
35
36
  * @cssprop [--vf-menu-row-height=16px] - `vf-menu-item` row pitch; the panel
@@ -53,6 +54,16 @@ export declare class VfMenu extends VfMenu_base {
53
54
  * `vf-menu-bar` when present, otherwise by the menu itself.
54
55
  */
55
56
  open: boolean;
57
+ /**
58
+ * Makes the items' `shortcut`s live key equivalents: a matching keydown
59
+ * anywhere on the page activates the item — menu open or not — and a
60
+ * closed menu answers by flashing its bar title, MenuKey's acknowledgment.
61
+ * Off by default because key equivalents are page-global and a page may
62
+ * hold several menus of which only one is *the* menu bar; on a bar, declare
63
+ * it there once for every menu in it. The full claim contract lives on
64
+ * `vf-menu-item.shortcut`.
65
+ */
66
+ shortcuts: boolean;
56
67
  /**
57
68
  * The bar label's tabindex. A parent `vf-menu-bar` owns a roving tabindex
58
69
  * across its menus and sets this to 0 on the active menu, -1 on the rest,
@@ -77,6 +88,8 @@ export declare class VfMenu extends VfMenu_base {
77
88
  * src/menu-press.ts), so it wants the box, not the element.
78
89
  */
79
90
  get labelRect(): DOMRect | null;
91
+ /** `true` while the key-equivalent flash paints the title inverted. */
92
+ private _flashOn;
80
93
  connectedCallback(): void;
81
94
  disconnectedCallback(): void;
82
95
  protected updated(changed: Map<PropertyKey, unknown>): void;