@aurodesignsystem-dev/auro-formkit 0.0.0-pr1576.8 → 0.0.0-pr1577.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/components/combobox/demo/customize.md +0 -40
  2. package/components/combobox/demo/customize.min.js +62 -365
  3. package/components/combobox/demo/getting-started.min.js +62 -365
  4. package/components/combobox/demo/index.min.js +62 -365
  5. package/components/combobox/dist/index.js +35 -53
  6. package/components/combobox/dist/registered.js +35 -53
  7. package/components/counter/demo/customize.min.js +9 -0
  8. package/components/counter/demo/index.min.js +9 -0
  9. package/components/counter/dist/index.js +9 -0
  10. package/components/counter/dist/registered.js +9 -0
  11. package/components/datepicker/demo/customize.min.js +9 -0
  12. package/components/datepicker/demo/index.min.js +9 -0
  13. package/components/datepicker/dist/index.js +9 -0
  14. package/components/datepicker/dist/registered.js +9 -0
  15. package/components/dropdown/demo/customize.min.js +9 -0
  16. package/components/dropdown/demo/getting-started.min.js +9 -0
  17. package/components/dropdown/demo/index.min.js +9 -0
  18. package/components/dropdown/dist/index.js +9 -0
  19. package/components/dropdown/dist/registered.js +9 -0
  20. package/components/form/demo/customize.min.js +89 -365
  21. package/components/form/demo/getting-started.min.js +89 -365
  22. package/components/form/demo/index.min.js +89 -365
  23. package/components/form/demo/registerDemoDeps.min.js +89 -365
  24. package/components/menu/demo/customize.md +0 -50
  25. package/components/menu/demo/index.min.js +27 -312
  26. package/components/menu/dist/auro-menu-utils.d.ts +0 -30
  27. package/components/menu/dist/auro-menu.d.ts +0 -23
  28. package/components/menu/dist/index.js +27 -312
  29. package/components/menu/dist/registered.js +27 -312
  30. package/components/select/demo/customize.md +0 -72
  31. package/components/select/demo/customize.min.js +36 -312
  32. package/components/select/demo/getting-started.min.js +36 -312
  33. package/components/select/demo/index.min.js +36 -312
  34. package/components/select/dist/index.js +9 -0
  35. package/components/select/dist/registered.js +9 -0
  36. package/custom-elements.json +1510 -1613
  37. package/package.json +1 -1
@@ -5612,6 +5612,15 @@ class AuroDropdown extends AuroElement$2 {
5612
5612
 
5613
5613
  connectedCallback() {
5614
5614
  super.connectedCallback();
5615
+ // Re-register trigger event listeners removed by floater.disconnect() in
5616
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
5617
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
5618
+ // so without this the trigger click/keydown handlers are permanently gone.
5619
+ // Guard on floater.element so this is a no-op on the initial connect
5620
+ // (before firstUpdated() has called configure()).
5621
+ if (this.floater?.element) {
5622
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
5623
+ }
5615
5624
  }
5616
5625
 
5617
5626
  disconnectedCallback() {
@@ -21554,17 +21563,7 @@ class AuroCombobox extends AuroElement {
21554
21563
  return;
21555
21564
  }
21556
21565
 
21557
- // Skip this write during a display-value sync: that path sets the input to
21558
- // the selected option's LABEL, which is not its machine value. When an
21559
- // option's label differs from its value (and especially when several
21560
- // options share a value but render distinct labels — AB#1602086), writing
21561
- // the label back into this.value clobbers the machine value the selection
21562
- // listener just set (this.value = optionSelected.value), collapsing the
21563
- // selection. _syncingBibValue still tracks (that mirrors user-typed text
21564
- // from the fullscreen bib, where value should follow the input).
21565
- if (!this._syncingDisplayValue) {
21566
- this.value = this.input.value;
21567
- }
21566
+ this.value = this.input.value;
21568
21567
 
21569
21568
  // Ignore re-entrant input events caused by programmatic value sets.
21570
21569
  if (this._syncingBibValue || this._syncingDisplayValue) {
@@ -21828,50 +21827,33 @@ class AuroCombobox extends AuroElement {
21828
21827
  }
21829
21828
 
21830
21829
  if (this.input.value !== this.value) {
21831
- // A fresh user selection leaves the input showing the option's LABEL
21832
- // while this.value holds its machine value, so input.value !== this.value
21833
- // is expected whenever label ≠ value. In that case the menu's current
21834
- // selection is authoritative — and when several options share a value it
21835
- // is the ONLY thing that records WHICH same-value option the user picked
21836
- // (the menu tracks it by element identity via `_selectedKey`). Clearing
21837
- // it here drops that key; the ensuing value-only re-resolution then
21838
- // collapses the selection onto the first same-value option (AB#1602086).
21839
- // So only treat the divergence as a stale menu when the selected option
21840
- // does NOT match the new value.
21841
- const menuSelectionMatchesValue =
21842
- this.menu.optionSelected &&
21843
- !Array.isArray(this.menu.optionSelected) &&
21844
- this.menu.optionSelected.value === this.value;
21845
-
21846
- if (!menuSelectionMatchesValue) {
21847
- // Clear menu.value AND menu.optionSelected together. Clearing only
21848
- // menu.value leaves the previously-selected option element pinned
21849
- // as menu.optionSelected; a later auroMenu-selectedOption event
21850
- // would then write its stale .value back into combobox.value
21851
- // (e.g. Tab-after-Backspace re-selecting the prior option).
21852
- if (this.menu.value || this.menu.optionSelected) {
21853
- this.menu.clearSelection();
21854
- }
21830
+ // Clear menu.value AND menu.optionSelected together. Clearing only
21831
+ // menu.value leaves the previously-selected option element pinned
21832
+ // as menu.optionSelected; a later auroMenu-selectedOption event
21833
+ // would then write its stale .value back into combobox.value
21834
+ // (e.g. Tab-after-Backspace re-selecting the prior option).
21835
+ if (this.menu.value || this.menu.optionSelected) {
21836
+ this.menu.clearSelection();
21837
+ }
21855
21838
 
21856
- if (!this.persistInput) {
21857
- this.syncInputValuesAcrossTriggerAndBib(this.value || '');
21858
- }
21839
+ if (!this.persistInput) {
21840
+ this.syncInputValuesAcrossTriggerAndBib(this.value || '');
21841
+ }
21859
21842
 
21860
- // Programmatic value with no matching option: updateFilter will close
21861
- // the bib silently (see line 648 — no noMatchOption + 0 results
21862
- // hides). Announce so screen-reader users hear the request was
21863
- // dropped. Gated on `input.value !== this.value` so this never fires
21864
- // for user typing — that path always reconciles input.value to
21865
- // this.value before updated() runs.
21866
- if (
21867
- this.value &&
21868
- this.menu &&
21869
- this.menu.options &&
21870
- this.menu.options.length > 0 &&
21871
- !this.menu.options.some((opt) => opt.value === this.value)
21872
- ) {
21873
- announceToScreenReader(this._getAnnouncementRoot(), `No matching option for ${this.value}`);
21874
- }
21843
+ // Programmatic value with no matching option: updateFilter will close
21844
+ // the bib silently (see line 648 — no noMatchOption + 0 results
21845
+ // hides). Announce so screen-reader users hear the request was
21846
+ // dropped. Gated on `input.value !== this.value` so this never fires
21847
+ // for user typing — that path always reconciles input.value to
21848
+ // this.value before updated() runs.
21849
+ if (
21850
+ this.value &&
21851
+ this.menu &&
21852
+ this.menu.options &&
21853
+ this.menu.options.length > 0 &&
21854
+ !this.menu.options.some((opt) => opt.value === this.value)
21855
+ ) {
21856
+ announceToScreenReader(this._getAnnouncementRoot(), `No matching option for ${this.value}`);
21875
21857
  }
21876
21858
  }
21877
21859
 
@@ -5612,6 +5612,15 @@ class AuroDropdown extends AuroElement$2 {
5612
5612
 
5613
5613
  connectedCallback() {
5614
5614
  super.connectedCallback();
5615
+ // Re-register trigger event listeners removed by floater.disconnect() in
5616
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
5617
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
5618
+ // so without this the trigger click/keydown handlers are permanently gone.
5619
+ // Guard on floater.element so this is a no-op on the initial connect
5620
+ // (before firstUpdated() has called configure()).
5621
+ if (this.floater?.element) {
5622
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
5623
+ }
5615
5624
  }
5616
5625
 
5617
5626
  disconnectedCallback() {
@@ -21554,17 +21563,7 @@ class AuroCombobox extends AuroElement {
21554
21563
  return;
21555
21564
  }
21556
21565
 
21557
- // Skip this write during a display-value sync: that path sets the input to
21558
- // the selected option's LABEL, which is not its machine value. When an
21559
- // option's label differs from its value (and especially when several
21560
- // options share a value but render distinct labels — AB#1602086), writing
21561
- // the label back into this.value clobbers the machine value the selection
21562
- // listener just set (this.value = optionSelected.value), collapsing the
21563
- // selection. _syncingBibValue still tracks (that mirrors user-typed text
21564
- // from the fullscreen bib, where value should follow the input).
21565
- if (!this._syncingDisplayValue) {
21566
- this.value = this.input.value;
21567
- }
21566
+ this.value = this.input.value;
21568
21567
 
21569
21568
  // Ignore re-entrant input events caused by programmatic value sets.
21570
21569
  if (this._syncingBibValue || this._syncingDisplayValue) {
@@ -21828,50 +21827,33 @@ class AuroCombobox extends AuroElement {
21828
21827
  }
21829
21828
 
21830
21829
  if (this.input.value !== this.value) {
21831
- // A fresh user selection leaves the input showing the option's LABEL
21832
- // while this.value holds its machine value, so input.value !== this.value
21833
- // is expected whenever label ≠ value. In that case the menu's current
21834
- // selection is authoritative — and when several options share a value it
21835
- // is the ONLY thing that records WHICH same-value option the user picked
21836
- // (the menu tracks it by element identity via `_selectedKey`). Clearing
21837
- // it here drops that key; the ensuing value-only re-resolution then
21838
- // collapses the selection onto the first same-value option (AB#1602086).
21839
- // So only treat the divergence as a stale menu when the selected option
21840
- // does NOT match the new value.
21841
- const menuSelectionMatchesValue =
21842
- this.menu.optionSelected &&
21843
- !Array.isArray(this.menu.optionSelected) &&
21844
- this.menu.optionSelected.value === this.value;
21845
-
21846
- if (!menuSelectionMatchesValue) {
21847
- // Clear menu.value AND menu.optionSelected together. Clearing only
21848
- // menu.value leaves the previously-selected option element pinned
21849
- // as menu.optionSelected; a later auroMenu-selectedOption event
21850
- // would then write its stale .value back into combobox.value
21851
- // (e.g. Tab-after-Backspace re-selecting the prior option).
21852
- if (this.menu.value || this.menu.optionSelected) {
21853
- this.menu.clearSelection();
21854
- }
21830
+ // Clear menu.value AND menu.optionSelected together. Clearing only
21831
+ // menu.value leaves the previously-selected option element pinned
21832
+ // as menu.optionSelected; a later auroMenu-selectedOption event
21833
+ // would then write its stale .value back into combobox.value
21834
+ // (e.g. Tab-after-Backspace re-selecting the prior option).
21835
+ if (this.menu.value || this.menu.optionSelected) {
21836
+ this.menu.clearSelection();
21837
+ }
21855
21838
 
21856
- if (!this.persistInput) {
21857
- this.syncInputValuesAcrossTriggerAndBib(this.value || '');
21858
- }
21839
+ if (!this.persistInput) {
21840
+ this.syncInputValuesAcrossTriggerAndBib(this.value || '');
21841
+ }
21859
21842
 
21860
- // Programmatic value with no matching option: updateFilter will close
21861
- // the bib silently (see line 648 — no noMatchOption + 0 results
21862
- // hides). Announce so screen-reader users hear the request was
21863
- // dropped. Gated on `input.value !== this.value` so this never fires
21864
- // for user typing — that path always reconciles input.value to
21865
- // this.value before updated() runs.
21866
- if (
21867
- this.value &&
21868
- this.menu &&
21869
- this.menu.options &&
21870
- this.menu.options.length > 0 &&
21871
- !this.menu.options.some((opt) => opt.value === this.value)
21872
- ) {
21873
- announceToScreenReader(this._getAnnouncementRoot(), `No matching option for ${this.value}`);
21874
- }
21843
+ // Programmatic value with no matching option: updateFilter will close
21844
+ // the bib silently (see line 648 — no noMatchOption + 0 results
21845
+ // hides). Announce so screen-reader users hear the request was
21846
+ // dropped. Gated on `input.value !== this.value` so this never fires
21847
+ // for user typing — that path always reconciles input.value to
21848
+ // this.value before updated() runs.
21849
+ if (
21850
+ this.value &&
21851
+ this.menu &&
21852
+ this.menu.options &&
21853
+ this.menu.options.length > 0 &&
21854
+ !this.menu.options.some((opt) => opt.value === this.value)
21855
+ ) {
21856
+ announceToScreenReader(this._getAnnouncementRoot(), `No matching option for ${this.value}`);
21875
21857
  }
21876
21858
  }
21877
21859
 
@@ -5990,6 +5990,15 @@ class AuroDropdown extends AuroElement$1 {
5990
5990
 
5991
5991
  connectedCallback() {
5992
5992
  super.connectedCallback();
5993
+ // Re-register trigger event listeners removed by floater.disconnect() in
5994
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
5995
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
5996
+ // so without this the trigger click/keydown handlers are permanently gone.
5997
+ // Guard on floater.element so this is a no-op on the initial connect
5998
+ // (before firstUpdated() has called configure()).
5999
+ if (this.floater?.element) {
6000
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
6001
+ }
5993
6002
  }
5994
6003
 
5995
6004
  disconnectedCallback() {
@@ -5990,6 +5990,15 @@ class AuroDropdown extends AuroElement$1 {
5990
5990
 
5991
5991
  connectedCallback() {
5992
5992
  super.connectedCallback();
5993
+ // Re-register trigger event listeners removed by floater.disconnect() in
5994
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
5995
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
5996
+ // so without this the trigger click/keydown handlers are permanently gone.
5997
+ // Guard on floater.element so this is a no-op on the initial connect
5998
+ // (before firstUpdated() has called configure()).
5999
+ if (this.floater?.element) {
6000
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
6001
+ }
5993
6002
  }
5994
6003
 
5995
6004
  disconnectedCallback() {
@@ -5922,6 +5922,15 @@ class AuroDropdown extends AuroElement$1 {
5922
5922
 
5923
5923
  connectedCallback() {
5924
5924
  super.connectedCallback();
5925
+ // Re-register trigger event listeners removed by floater.disconnect() in
5926
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
5927
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
5928
+ // so without this the trigger click/keydown handlers are permanently gone.
5929
+ // Guard on floater.element so this is a no-op on the initial connect
5930
+ // (before firstUpdated() has called configure()).
5931
+ if (this.floater?.element) {
5932
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
5933
+ }
5925
5934
  }
5926
5935
 
5927
5936
  disconnectedCallback() {
@@ -5922,6 +5922,15 @@ class AuroDropdown extends AuroElement$1 {
5922
5922
 
5923
5923
  connectedCallback() {
5924
5924
  super.connectedCallback();
5925
+ // Re-register trigger event listeners removed by floater.disconnect() in
5926
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
5927
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
5928
+ // so without this the trigger click/keydown handlers are permanently gone.
5929
+ // Guard on floater.element so this is a no-op on the initial connect
5930
+ // (before firstUpdated() has called configure()).
5931
+ if (this.floater?.element) {
5932
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
5933
+ }
5925
5934
  }
5926
5935
 
5927
5936
  disconnectedCallback() {
@@ -20174,6 +20174,15 @@ class AuroDropdown extends AuroElement$2 {
20174
20174
 
20175
20175
  connectedCallback() {
20176
20176
  super.connectedCallback();
20177
+ // Re-register trigger event listeners removed by floater.disconnect() in
20178
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
20179
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
20180
+ // so without this the trigger click/keydown handlers are permanently gone.
20181
+ // Guard on floater.element so this is a no-op on the initial connect
20182
+ // (before firstUpdated() has called configure()).
20183
+ if (this.floater?.element) {
20184
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
20185
+ }
20177
20186
  }
20178
20187
 
20179
20188
  disconnectedCallback() {
@@ -20174,6 +20174,15 @@ class AuroDropdown extends AuroElement$2 {
20174
20174
 
20175
20175
  connectedCallback() {
20176
20176
  super.connectedCallback();
20177
+ // Re-register trigger event listeners removed by floater.disconnect() in
20178
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
20179
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
20180
+ // so without this the trigger click/keydown handlers are permanently gone.
20181
+ // Guard on floater.element so this is a no-op on the initial connect
20182
+ // (before firstUpdated() has called configure()).
20183
+ if (this.floater?.element) {
20184
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
20185
+ }
20177
20186
  }
20178
20187
 
20179
20188
  disconnectedCallback() {
@@ -20102,6 +20102,15 @@ class AuroDropdown extends AuroElement$2 {
20102
20102
 
20103
20103
  connectedCallback() {
20104
20104
  super.connectedCallback();
20105
+ // Re-register trigger event listeners removed by floater.disconnect() in
20106
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
20107
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
20108
+ // so without this the trigger click/keydown handlers are permanently gone.
20109
+ // Guard on floater.element so this is a no-op on the initial connect
20110
+ // (before firstUpdated() has called configure()).
20111
+ if (this.floater?.element) {
20112
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
20113
+ }
20105
20114
  }
20106
20115
 
20107
20116
  disconnectedCallback() {
@@ -20102,6 +20102,15 @@ class AuroDropdown extends AuroElement$2 {
20102
20102
 
20103
20103
  connectedCallback() {
20104
20104
  super.connectedCallback();
20105
+ // Re-register trigger event listeners removed by floater.disconnect() in
20106
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
20107
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
20108
+ // so without this the trigger click/keydown handlers are permanently gone.
20109
+ // Guard on floater.element so this is a no-op on the initial connect
20110
+ // (before firstUpdated() has called configure()).
20111
+ if (this.floater?.element) {
20112
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
20113
+ }
20105
20114
  }
20106
20115
 
20107
20116
  disconnectedCallback() {
@@ -4482,6 +4482,15 @@ class AuroDropdown extends AuroElement {
4482
4482
 
4483
4483
  connectedCallback() {
4484
4484
  super.connectedCallback();
4485
+ // Re-register trigger event listeners removed by floater.disconnect() in
4486
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
4487
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
4488
+ // so without this the trigger click/keydown handlers are permanently gone.
4489
+ // Guard on floater.element so this is a no-op on the initial connect
4490
+ // (before firstUpdated() has called configure()).
4491
+ if (this.floater?.element) {
4492
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
4493
+ }
4485
4494
  }
4486
4495
 
4487
4496
  disconnectedCallback() {
@@ -4482,6 +4482,15 @@ class AuroDropdown extends AuroElement {
4482
4482
 
4483
4483
  connectedCallback() {
4484
4484
  super.connectedCallback();
4485
+ // Re-register trigger event listeners removed by floater.disconnect() in
4486
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
4487
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
4488
+ // so without this the trigger click/keydown handlers are permanently gone.
4489
+ // Guard on floater.element so this is a no-op on the initial connect
4490
+ // (before firstUpdated() has called configure()).
4491
+ if (this.floater?.element) {
4492
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
4493
+ }
4485
4494
  }
4486
4495
 
4487
4496
  disconnectedCallback() {
@@ -4509,6 +4509,15 @@ class AuroDropdown extends AuroElement {
4509
4509
 
4510
4510
  connectedCallback() {
4511
4511
  super.connectedCallback();
4512
+ // Re-register trigger event listeners removed by floater.disconnect() in
4513
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
4514
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
4515
+ // so without this the trigger click/keydown handlers are permanently gone.
4516
+ // Guard on floater.element so this is a no-op on the initial connect
4517
+ // (before firstUpdated() has called configure()).
4518
+ if (this.floater?.element) {
4519
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
4520
+ }
4512
4521
  }
4513
4522
 
4514
4523
  disconnectedCallback() {
@@ -4414,6 +4414,15 @@ class AuroDropdown extends AuroElement {
4414
4414
 
4415
4415
  connectedCallback() {
4416
4416
  super.connectedCallback();
4417
+ // Re-register trigger event listeners removed by floater.disconnect() in
4418
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
4419
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
4420
+ // so without this the trigger click/keydown handlers are permanently gone.
4421
+ // Guard on floater.element so this is a no-op on the initial connect
4422
+ // (before firstUpdated() has called configure()).
4423
+ if (this.floater?.element) {
4424
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
4425
+ }
4417
4426
  }
4418
4427
 
4419
4428
  disconnectedCallback() {
@@ -4414,6 +4414,15 @@ class AuroDropdown extends AuroElement {
4414
4414
 
4415
4415
  connectedCallback() {
4416
4416
  super.connectedCallback();
4417
+ // Re-register trigger event listeners removed by floater.disconnect() in
4418
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
4419
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
4420
+ // so without this the trigger click/keydown handlers are permanently gone.
4421
+ // Guard on floater.element so this is a no-op on the initial connect
4422
+ // (before firstUpdated() has called configure()).
4423
+ if (this.floater?.element) {
4424
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
4425
+ }
4417
4426
  }
4418
4427
 
4419
4428
  disconnectedCallback() {