@ixfx/components 0.5.7 → 0.5.9

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 (77) hide show
  1. package/bundle/index.d.ts +44 -1
  2. package/bundle/index.d.ts.map +1 -1
  3. package/bundle/index.js +154 -35
  4. package/bundle/index.js.map +1 -1
  5. package/dist/ac-text.d.ts +1 -1
  6. package/dist/ac-text.d.ts.map +1 -1
  7. package/dist/ac-text.js +3 -1
  8. package/dist/ac-text.js.map +1 -1
  9. package/dist/{button-CU8eLcxB.js → button-dwmqCXHM.js} +11 -1
  10. package/dist/button-dwmqCXHM.js.map +1 -0
  11. package/dist/button.d.ts +2 -1
  12. package/dist/button.d.ts.map +1 -1
  13. package/dist/button.js +1 -1
  14. package/dist/{colour-picker-Bb795sjX.js → colour-picker-DGso9ZOp.js} +2 -2
  15. package/dist/{colour-picker-Bb795sjX.js.map → colour-picker-DGso9ZOp.js.map} +1 -1
  16. package/dist/colour-picker.d.ts +1 -1
  17. package/dist/colour-picker.js +1 -1
  18. package/dist/crumbs.d.ts +6 -2
  19. package/dist/crumbs.d.ts.map +1 -1
  20. package/dist/crumbs.js +5 -1
  21. package/dist/crumbs.js.map +1 -1
  22. package/dist/{icon-BUwP1CZ1.d.ts → icon-DpA9x2Ve.d.ts} +2 -2
  23. package/dist/icon-DpA9x2Ve.d.ts.map +1 -0
  24. package/dist/icons.d.ts +2 -2
  25. package/dist/incr-search.d.ts +1 -1
  26. package/dist/{index-RqMh1i-O.d.ts → index-BtGFYfaK.d.ts} +2 -2
  27. package/dist/{index-RqMh1i-O.d.ts.map → index-BtGFYfaK.d.ts.map} +1 -1
  28. package/dist/{index-BUB5SICW.d.ts → index-CoqtMSd9.d.ts} +2 -2
  29. package/dist/{index-BUB5SICW.d.ts.map → index-CoqtMSd9.d.ts.map} +1 -1
  30. package/dist/{index-Cxwxtj6g.d.ts → index-D9u_Q7-b.d.ts} +2 -2
  31. package/dist/{index-Cxwxtj6g.d.ts.map → index-D9u_Q7-b.d.ts.map} +1 -1
  32. package/dist/{index-BKAlRgbq.d.ts → index-D_ftz_IT.d.ts} +2 -2
  33. package/dist/{index-BKAlRgbq.d.ts.map → index-D_ftz_IT.d.ts.map} +1 -1
  34. package/dist/{index-B1UKcA7l.d.ts → index-DfEkTGvT.d.ts} +3 -3
  35. package/dist/{index-B1UKcA7l.d.ts.map → index-DfEkTGvT.d.ts.map} +1 -1
  36. package/dist/index.d.ts +13 -12
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +27 -7
  39. package/dist/index.js.map +1 -1
  40. package/dist/{labelled-input-base-Dp_9KP0G.d.ts → labelled-input-base-DiTme1JO.d.ts} +2 -2
  41. package/dist/{labelled-input-base-Dp_9KP0G.d.ts.map → labelled-input-base-DiTme1JO.d.ts.map} +1 -1
  42. package/dist/labelled-radial-input.d.ts +2 -2
  43. package/dist/labelled-radial-input.d.ts.map +1 -1
  44. package/dist/labelled-range-input.d.ts +1 -1
  45. package/dist/{menu-item-BttvL89f.js → menu-item-BBTZnjAR.js} +2 -2
  46. package/dist/{menu-item-BttvL89f.js.map → menu-item-BBTZnjAR.js.map} +1 -1
  47. package/dist/{menu-item-CQ4Qg731.d.ts → menu-item-DSyf9f_L.d.ts} +2 -2
  48. package/dist/{menu-item-CQ4Qg731.d.ts.map → menu-item-DSyf9f_L.d.ts.map} +1 -1
  49. package/dist/{menu-BYyeCAF7.js → menu-nuOIUD9K.js} +2 -2
  50. package/dist/{menu-BYyeCAF7.js.map → menu-nuOIUD9K.js.map} +1 -1
  51. package/dist/menu.d.ts +2 -2
  52. package/dist/menu.js +2 -2
  53. package/dist/miller.d.ts +5 -1
  54. package/dist/miller.d.ts.map +1 -1
  55. package/dist/miller.js +4 -0
  56. package/dist/miller.js.map +1 -1
  57. package/dist/panel.d.ts +1 -1
  58. package/dist/panel.d.ts.map +1 -1
  59. package/dist/panel.js +1 -2
  60. package/dist/panel.js.map +1 -1
  61. package/dist/{tab-list-VtWT-_FG.d.ts → tab-list-BohmbvqF.d.ts} +2 -2
  62. package/dist/{tab-list-VtWT-_FG.d.ts.map → tab-list-BohmbvqF.d.ts.map} +1 -1
  63. package/dist/tabs.d.ts +1 -1
  64. package/dist/{tree-BnvzhsAw.js → tree-CL-txefQ.js} +92 -10
  65. package/dist/tree-CL-txefQ.js.map +1 -0
  66. package/dist/{tree-component-DCmmKZ4j.d.ts → tree-component-DQ9vzdy5.d.ts} +9 -1
  67. package/dist/{tree-component-DCmmKZ4j.d.ts.map → tree-component-DQ9vzdy5.d.ts.map} +1 -1
  68. package/dist/tree.d.ts +28 -2
  69. package/dist/tree.d.ts.map +1 -1
  70. package/dist/tree.js +1 -1
  71. package/docs-user/ac-text.md +8 -0
  72. package/docs-user/tree.md +53 -0
  73. package/docs-user/vertical-list.md +23 -0
  74. package/package.json +1 -1
  75. package/dist/button-CU8eLcxB.js.map +0 -1
  76. package/dist/icon-BUwP1CZ1.d.ts.map +0 -1
  77. package/dist/tree-BnvzhsAw.js.map +0 -1
package/bundle/index.js CHANGED
@@ -1121,6 +1121,28 @@ const themeFallbacks = i$3`
1121
1121
  }
1122
1122
  `;
1123
1123
  //#endregion
1124
+ //#region src/styles/popup.ts
1125
+ /**
1126
+ * Canonical surface styles for floating popup elements (menus, dropdowns,
1127
+ * colour picker, tooltips). Apply by adding `popupSurfaceStyles` to a
1128
+ * component's `static styles` array and the class `popup-surface` to the
1129
+ * popup container element - or to the host itself (via `this.classList.add`)
1130
+ * when the component's host element is the popup container.
1131
+ *
1132
+ * Intentionally omitted (remain per-component): positioning, padding,
1133
+ * dimensions, z-index, and open/close animations.
1134
+ */
1135
+ const popupSurfaceStyles = i$3`
1136
+ .popup-surface,
1137
+ :host(.popup-surface) {
1138
+ background: var(--surface-5);
1139
+ border: 1px solid var(--surface-6);
1140
+ border-radius: var(--radius-l);
1141
+ box-shadow: var(--shadow-m);
1142
+ color: var(--surface-5-text);
1143
+ }
1144
+ `;
1145
+ //#endregion
1124
1146
  //#region src/util/custom-elements.ts
1125
1147
  function getRegistry() {
1126
1148
  if (typeof customElements === `undefined`) return void 0;
@@ -1555,7 +1577,7 @@ let AcTextElement = class AcTextElement extends i {
1555
1577
  const showEmpty = !this._isLoading && this._results.length === 0;
1556
1578
  return b`
1557
1579
  <div
1558
- class="popup"
1580
+ class="popup popup-surface"
1559
1581
  popover="manual"
1560
1582
  role="listbox"
1561
1583
  aria-label="Suggestions"
@@ -1595,6 +1617,7 @@ let AcTextElement = class AcTextElement extends i {
1595
1617
  this.styles = [
1596
1618
  themeFallbacks,
1597
1619
  tickledStyles,
1620
+ popupSurfaceStyles,
1598
1621
  i$3`
1599
1622
  :host {
1600
1623
  display: block;
@@ -3085,6 +3108,9 @@ const buttonStyles = i$3`
3085
3108
 
3086
3109
  .button-label {
3087
3110
  white-space: nowrap;
3111
+ }
3112
+
3113
+ :host([has-icon]) .button-label {
3088
3114
  display: var(--ixfx-button-hide-label, inline);
3089
3115
  }
3090
3116
 
@@ -3113,6 +3139,7 @@ let ButtonElement = class ButtonElement extends i {
3113
3139
  this.disabled = false;
3114
3140
  this.hideIcon = false;
3115
3141
  this.hideLabel = false;
3142
+ this.hasIcon = false;
3116
3143
  this.subtle = false;
3117
3144
  }
3118
3145
  _renderIcon() {
@@ -3122,6 +3149,7 @@ let ButtonElement = class ButtonElement extends i {
3122
3149
  return b`<ixfx-icon class="button-icon" name="${this.icon}"></ixfx-icon>`;
3123
3150
  }
3124
3151
  render() {
3152
+ this.hasIcon = !this.hideIcon && !!this.icon;
3125
3153
  const label = this.hideLabel ? A : b`<span class="button-label"><slot></slot></span>`;
3126
3154
  return b`<button ?disabled=${this.disabled}>${this._renderIcon()}${label}</button>`;
3127
3155
  }
@@ -3141,6 +3169,11 @@ __decorate([property({
3141
3169
  attribute: `hide-label`,
3142
3170
  reflect: true
3143
3171
  })], ButtonElement.prototype, "hideLabel", void 0);
3172
+ __decorate([property({
3173
+ type: Boolean,
3174
+ attribute: `has-icon`,
3175
+ reflect: true
3176
+ })], ButtonElement.prototype, "hasIcon", void 0);
3144
3177
  __decorate([property({
3145
3178
  type: Boolean,
3146
3179
  reflect: true
@@ -3482,28 +3515,6 @@ __decorate([state()], RadioGroup.prototype, "_icons", void 0);
3482
3515
  __decorate([query(`slot`)], RadioGroup.prototype, "_slot", void 0);
3483
3516
  RadioGroup = __decorate([safeCustomElement(`ixfx-radio-group`)], RadioGroup);
3484
3517
  //#endregion
3485
- //#region src/styles/popup.ts
3486
- /**
3487
- * Canonical surface styles for floating popup elements (menus, dropdowns,
3488
- * colour picker, tooltips). Apply by adding `popupSurfaceStyles` to a
3489
- * component's `static styles` array and the class `popup-surface` to the
3490
- * popup container element - or to the host itself (via `this.classList.add`)
3491
- * when the component's host element is the popup container.
3492
- *
3493
- * Intentionally omitted (remain per-component): positioning, padding,
3494
- * dimensions, z-index, and open/close animations.
3495
- */
3496
- const popupSurfaceStyles = i$3`
3497
- .popup-surface,
3498
- :host(.popup-surface) {
3499
- background: var(--surface-5);
3500
- border: 1px solid var(--surface-6);
3501
- border-radius: var(--radius-l);
3502
- box-shadow: var(--shadow-m);
3503
- color: var(--surface-5-text);
3504
- }
3505
- `;
3506
- //#endregion
3507
3518
  //#region src/menu/menu-container.ts
3508
3519
  let MenuContainer = class MenuContainer extends i {
3509
3520
  constructor(..._args) {
@@ -7181,6 +7192,10 @@ let CrumbNavigationElement = class CrumbNavigationElement extends i {
7181
7192
  clearSelection() {
7182
7193
  if (this.root) this.#setSelected(this.root);
7183
7194
  }
7195
+ /** Not implemented on crumb-navigation. */
7196
+ selectAll() {}
7197
+ /** Not implemented on crumb-navigation. */
7198
+ deselectAll() {}
7184
7199
  getNodes() {
7185
7200
  if (!this.root) return [];
7186
7201
  const result = [];
@@ -10127,11 +10142,10 @@ let PanelElement = class PanelElement extends i {
10127
10142
 
10128
10143
  .content-inner {
10129
10144
  box-shadow: var(--deboss-3);
10130
-
10131
10145
  min-height: 0;
10132
10146
  min-width: 0;
10133
10147
  overflow: hidden;
10134
- padding: var(--space-m);
10148
+ padding: var(--space-s);
10135
10149
  transform: translateY(-100%);
10136
10150
  transition: transform var(--transition, 0.2s ease-out);
10137
10151
  }
@@ -10473,6 +10487,7 @@ let TreeBaseElement = class TreeBaseElement extends i {
10473
10487
  this.interactionMode = `standard`;
10474
10488
  this._selectedNodes = /* @__PURE__ */ new Set();
10475
10489
  this.disableKeyboardNavigation = false;
10490
+ this.registry = void 0;
10476
10491
  this._expandedKeys = /* @__PURE__ */ new Set();
10477
10492
  this.tickled = new TickledController(this, {
10478
10493
  getItems: () => {
@@ -10490,6 +10505,11 @@ let TreeBaseElement = class TreeBaseElement extends i {
10490
10505
  this.#onKeyDown = (event) => {
10491
10506
  const nodes = this.#getAllNodes();
10492
10507
  if (nodes.length === 0) return;
10508
+ if ((event.ctrlKey || event.metaKey) && event.key === `a`) {
10509
+ event.preventDefault();
10510
+ this.selectAll();
10511
+ return;
10512
+ }
10493
10513
  if ([
10494
10514
  `ArrowDown`,
10495
10515
  `ArrowUp`,
@@ -10607,6 +10627,7 @@ let TreeBaseElement = class TreeBaseElement extends i {
10607
10627
  #pendingController;
10608
10628
  #modelUnsubscribe;
10609
10629
  #anchor;
10630
+ #ownedRegistry;
10610
10631
  #config;
10611
10632
  updated(changedProps) {
10612
10633
  if (changedProps.has(`root`) && this.root) {
@@ -10646,11 +10667,31 @@ let TreeBaseElement = class TreeBaseElement extends i {
10646
10667
  connectedCallback() {
10647
10668
  super.connectedCallback();
10648
10669
  this.setAttribute(`data-input-mode`, `mouse`);
10670
+ const registry = this.#ownedRegistry = createCommandRegistry();
10671
+ registry.register({
10672
+ id: `select-all`,
10673
+ label: `Select All`,
10674
+ description: `Select all visible items`,
10675
+ execute: () => this.selectAll()
10676
+ });
10677
+ registry.register({
10678
+ id: `deselect-all`,
10679
+ label: `Deselect All`,
10680
+ description: `Clear all selection`,
10681
+ execute: () => this.deselectAll()
10682
+ });
10683
+ this.registry = registry;
10649
10684
  }
10650
10685
  disconnectedCallback() {
10651
10686
  super.disconnectedCallback();
10652
10687
  this.#modelUnsubscribe?.();
10653
10688
  this.#modelUnsubscribe = void 0;
10689
+ if (this.#ownedRegistry) {
10690
+ this.#ownedRegistry.unregister(`select-all`);
10691
+ this.#ownedRegistry.unregister(`deselect-all`);
10692
+ this.#ownedRegistry = void 0;
10693
+ this.registry = void 0;
10694
+ }
10654
10695
  }
10655
10696
  getConfig() {
10656
10697
  return { ...this.#config };
@@ -10686,6 +10727,32 @@ let TreeBaseElement = class TreeBaseElement extends i {
10686
10727
  this.#dispatchSelect(prev);
10687
10728
  this.requestUpdate();
10688
10729
  }
10730
+ selectAll() {
10731
+ const prev = new Set(this._selectedNodes);
10732
+ if (this.interactionMode === `checked`) for (const { node } of this.#getAllNodes()) {
10733
+ if (!this.#canSelect(node)) continue;
10734
+ this.#applyCheckedToggle(node, true);
10735
+ }
10736
+ else {
10737
+ for (const { node } of this.#getAllNodes()) {
10738
+ if (!this.#canSelect(node)) continue;
10739
+ this._selectedNodes.add(node);
10740
+ }
10741
+ this.selectedNode = [...this._selectedNodes].at(-1);
10742
+ }
10743
+ this.#dispatchSelect(prev);
10744
+ this.requestUpdate();
10745
+ }
10746
+ deselectAll() {
10747
+ const prev = new Set(this._selectedNodes);
10748
+ if (this.interactionMode === `checked`) for (const { node } of this.#getAllNodes()) {
10749
+ if (!this.#canSelect(node)) continue;
10750
+ this.#applyCheckedToggle(node, false);
10751
+ }
10752
+ else this.#clearSelectionInternal();
10753
+ this.#dispatchSelect(prev);
10754
+ this.requestUpdate();
10755
+ }
10689
10756
  navigateTo(keys) {
10690
10757
  if (!this.root?.children) return false;
10691
10758
  this.#abortPending();
@@ -11356,6 +11423,7 @@ __decorate([property({
11356
11423
  type: Boolean,
11357
11424
  attribute: `disable-keyboard-navigation`
11358
11425
  })], TreeBaseElement.prototype, "disableKeyboardNavigation", void 0);
11426
+ __decorate([property({ attribute: false })], TreeBaseElement.prototype, "registry", void 0);
11359
11427
  __decorate([state()], TreeBaseElement.prototype, "_expandedKeys", void 0);
11360
11428
  __decorate([state()], TreeBaseElement.prototype, "_focusedDepth", void 0);
11361
11429
  TreeBaseElement = __decorate([safeCustomElement(`ixfx-tree-base`)], TreeBaseElement);
@@ -11401,18 +11469,33 @@ let TreeListElement = class TreeListElement extends TreeBaseElement {
11401
11469
  `;
11402
11470
  if (this.interactionMode === `checked`) {
11403
11471
  const state = computeCheckboxState$1(node, this._selectedNodes);
11404
- return b`
11405
- <input
11406
- type="checkbox"
11407
- class="tree-checkbox"
11408
- .checked=${state === `checked`}
11409
- .indeterminate=${state === `indeterminate`}
11410
- aria-label="Select ${node.item.label}"
11411
- @click=${(e) => this._handleCheckboxClick(e, node, depth)}
11412
- />${caretAndLabel}`;
11472
+ return b`${this.#renderCheckbox(node, depth, state)}${caretAndLabel}`;
11413
11473
  }
11414
11474
  return caretAndLabel;
11415
11475
  }
11476
+ #renderCheckbox(node, depth, state) {
11477
+ const onClick = (e) => this._handleCheckboxClick(e, node, depth);
11478
+ if (this.checkboxRenderer) return b`
11479
+ <span
11480
+ class="tree-checkbox tree-checkbox-custom"
11481
+ part="checkbox"
11482
+ role="checkbox"
11483
+ tabindex="-1"
11484
+ aria-checked=${state === `indeterminate` ? `mixed` : state === `checked` ? `true` : `false`}
11485
+ aria-label="Select ${node.item.label}"
11486
+ @click=${onClick}
11487
+ >${this.checkboxRenderer(state)}</span>`;
11488
+ return b`
11489
+ <input
11490
+ type="checkbox"
11491
+ class="tree-checkbox"
11492
+ part="checkbox"
11493
+ .checked=${state === `checked`}
11494
+ .indeterminate=${state === `indeterminate`}
11495
+ aria-label="Select ${node.item.label}"
11496
+ @click=${onClick}
11497
+ />`;
11498
+ }
11416
11499
  _renderNode(node, depth) {
11417
11500
  const selected = this._isSelected(node);
11418
11501
  const tickled = this._isFocused(node);
@@ -11491,6 +11574,17 @@ let TreeListElement = class TreeListElement extends TreeBaseElement {
11491
11574
  pointer-events: auto;
11492
11575
  }
11493
11576
 
11577
+ .tree-checkbox-custom {
11578
+ display: inline-flex;
11579
+ align-items: center;
11580
+ justify-content: center;
11581
+ /* Reserves a click target even when the renderer returns empty content
11582
+ (e.g. the "nothing when unchecked" subtle style) — without an explicit
11583
+ size the empty span collapses to 0×0 and becomes unclickable. */
11584
+ width: var(--tree-checkbox-size, 14px);
11585
+ height: var(--tree-checkbox-size, 14px);
11586
+ }
11587
+
11494
11588
  /* In checked mode the checkbox communicates selection state —
11495
11589
  suppress the row highlight so it doesn't double-signal */
11496
11590
  :host([interaction-mode="checked"]) .item.selected {
@@ -11512,6 +11606,7 @@ let TreeListElement = class TreeListElement extends TreeBaseElement {
11512
11606
  ];
11513
11607
  }
11514
11608
  };
11609
+ __decorate([property({ attribute: false })], TreeListElement.prototype, "checkboxRenderer", void 0);
11515
11610
  TreeListElement = __decorate([safeCustomElement(`ixfx-tree-list`)], TreeListElement);
11516
11611
  //#endregion
11517
11612
  //#region src/grouped-item-lister/tree-list-adapter.ts
@@ -11689,6 +11784,7 @@ let VerticalListElement = class VerticalListElement extends i {
11689
11784
  this._searchVisible = false;
11690
11785
  this._searchQuery = ``;
11691
11786
  this.#customWrappers = /* @__PURE__ */ new Map();
11787
+ this.#wrappedElements = /* @__PURE__ */ new Set();
11692
11788
  this.tickled = new TickledController(this, {
11693
11789
  getItems: () => this._getVisibleItems().map((el) => ({
11694
11790
  id: el,
@@ -11797,6 +11893,7 @@ let VerticalListElement = class VerticalListElement extends i {
11797
11893
  #search;
11798
11894
  #selectionAnchor;
11799
11895
  #customWrappers;
11896
+ #wrappedElements;
11800
11897
  connectedCallback() {
11801
11898
  super.connectedCallback();
11802
11899
  if (!this.hasAttribute(`tabindex`)) this.tabIndex = 0;
@@ -11923,6 +12020,20 @@ let VerticalListElement = class VerticalListElement extends i {
11923
12020
  selectAll() {
11924
12021
  if ((this.selectionMode === `multiple` || isMultiMode(this.interactionMode)) && this.selectionMode !== `none`) this._selectAll();
11925
12022
  }
12023
+ *selectedFilter(kind) {
12024
+ const wanted = (el) => {
12025
+ switch (kind) {
12026
+ case `selected`: return el.hasAttribute(`data-selected`);
12027
+ case `checked`: return el.hasAttribute(`data-checked`);
12028
+ case `either`: return el.hasAttribute(`data-selected`) || el.hasAttribute(`data-checked`);
12029
+ }
12030
+ };
12031
+ for (const el of this.querySelectorAll(ITEM_SELECTOR)) {
12032
+ if (this.#wrappedElements.has(el)) continue;
12033
+ if (el.hidden) continue;
12034
+ if (wanted(el)) yield el;
12035
+ }
12036
+ }
11926
12037
  _replaceSelection(item) {
11927
12038
  if (this.selectionMode === `none`) return;
11928
12039
  if (!this._isCheckable(item)) return;
@@ -12028,6 +12139,7 @@ let VerticalListElement = class VerticalListElement extends i {
12028
12139
  }
12029
12140
  _getVisibleItems() {
12030
12141
  return Array.from(this.querySelectorAll(ITEM_SELECTOR)).filter((el) => {
12142
+ if (this.#wrappedElements.has(el)) return false;
12031
12143
  if (el.hidden) return false;
12032
12144
  if (this.filterPredicate && !this.filterPredicate(el)) return false;
12033
12145
  return true;
@@ -12039,6 +12151,7 @@ let VerticalListElement = class VerticalListElement extends i {
12039
12151
  }
12040
12152
  _syncItemStates() {
12041
12153
  for (const el of this.querySelectorAll(ITEM_SELECTOR)) {
12154
+ if (this.#wrappedElements.has(el)) continue;
12042
12155
  const item = this.#customWrappers.get(el) ?? el;
12043
12156
  el.toggleAttribute(`data-tickled`, this.tickled.isTickled(el));
12044
12157
  el.toggleAttribute(`data-selected`, this._selectedItems.has(el));
@@ -12061,9 +12174,10 @@ let VerticalListElement = class VerticalListElement extends i {
12061
12174
  if (key !== null) wrapper.setAttribute(`data-key`, key);
12062
12175
  if (label !== null) wrapper.setAttribute(`data-search-label`, label);
12063
12176
  inner.removeAttribute(`data-list-item`);
12064
- this.insertBefore(wrapper, inner);
12065
12177
  wrapper.appendChild(inner);
12178
+ this.replaceChild(wrapper, inner);
12066
12179
  this.#customWrappers.set(wrapper, inner);
12180
+ this.#wrappedElements.add(inner);
12067
12181
  }
12068
12182
  else {
12069
12183
  for (const [wrapper, inner] of this.#customWrappers) {
@@ -12073,6 +12187,7 @@ let VerticalListElement = class VerticalListElement extends i {
12073
12187
  wrapper.remove();
12074
12188
  }
12075
12189
  this.#customWrappers.clear();
12190
+ this.#wrappedElements.clear();
12076
12191
  }
12077
12192
  for (const el of this.querySelectorAll(`li`)) {
12078
12193
  const existing = el.querySelector(`.ixfx-list-checkbox`);
@@ -15960,6 +16075,10 @@ let MillerBaseElement = class MillerBaseElement extends i {
15960
16075
  if (prev.size > 0) this.#dispatchSelectEvent(prev);
15961
16076
  this.requestUpdate();
15962
16077
  }
16078
+ /** Not implemented on miller-list. */
16079
+ selectAll() {}
16080
+ /** Not implemented on miller-list. */
16081
+ deselectAll() {}
15963
16082
  /**
15964
16083
  * Select or deselect a single node by key.
15965
16084
  * In `checked` interactionMode this also recursively selects/deselects all loaded descendants.