@mono-lit/helper 0.0.6 → 0.0.8

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 (162) hide show
  1. package/dist/{control-tooltip-C3rA_nSH.js → control-tooltip-CoPD37_h.js} +20 -11
  2. package/dist/{data-source-options-Cz9fVLK8.js → data-source-options-BM4r4PRw.js} +26 -9
  3. package/dist/{data-source-options-QjuI73g8.js → data-source-options-fxT5QIX4.js} +26 -9
  4. package/dist/{data-source-read-FxqzQkk2.js → data-source-read-BL266IW0.js} +25 -3
  5. package/dist/{data-source-read-i6CYSUEl.js → data-source-read-HyBCRg1t.js} +25 -3
  6. package/dist/{excel-BPdDt06G.js → excel-DtRpxmxs.js} +1 -1
  7. package/dist/{export-DgomqI_3.js → export-ixRdCS2y.js} +1 -1
  8. package/dist/export.js +3 -3
  9. package/dist/{field-tooltip-FyMi9vNM.js → field-tooltip-Csk4s2ve.js} +2 -3
  10. package/dist/field-tooltip-addon-B32dizW_.js +22 -0
  11. package/dist/{control-tooltip-7vegYmq3.js → field-tooltip-addon-CWCp19mJ.js} +36 -12
  12. package/dist/{field-tooltip.css_raw-DEctHXKm.js → field-tooltip.css_raw-U5UeTa2d.js} +3 -4
  13. package/dist/{field-validation-CHHQi1zl.js → field-validation-CFmUmuDx.js} +1 -1
  14. package/dist/field-validation.css_raw-Cx6SGrfP.js +178 -0
  15. package/dist/{form-control-core-rW2WvOcb.js → form-control-core-BbiACMtL.js} +1 -1
  16. package/dist/{hydration-flush-9AJE8FRl.js → hydration-flush-BaE9gN3C.js} +67 -17
  17. package/dist/index.js +10 -10
  18. package/dist/{index.node-tTkISFn2.js → index.node-CLqE8F8P.js} +5 -5
  19. package/dist/index.node.js +10 -10
  20. package/dist/input.css_raw-Br-T8RWv.js +5 -0
  21. package/dist/{light-slots-BnBR29E7.js → light-slots-B5Ck0t_E.js} +1 -1
  22. package/dist/{light-slots-Cb6e-LU3.js → light-slots-_no0r2Z-.js} +1 -1
  23. package/dist/mono-button-CLkHg3WW.js +871 -0
  24. package/dist/{mono-button.shadow-CIBGisyo.js → mono-button.shadow-DqZMpcqY.js} +1 -1
  25. package/dist/{mono-data-chart-ChkelNT7.js → mono-data-chart-NKPdAgVq.js} +2 -2
  26. package/dist/{mono-data-dropdown-DxpUUk2y.js → mono-data-dropdown-DUXo_jxd.js} +72 -6
  27. package/dist/{mono-data-grid-8jmeIXUU.js → mono-data-grid-Bb00QM72.js} +129 -18
  28. package/dist/{mono-data-grid-KDpu4d4_.js → mono-data-grid-Bkr-e1-i.js} +130 -19
  29. package/dist/{mono-element-Bc9wElPy.js → mono-element-CKcT0rwv.js} +1 -1
  30. package/dist/{mono-form-controller-BkMR8g14.js → mono-form-controller-BrA10erm.js} +12 -1
  31. package/dist/{mono-ui-KOBJcnXk.js → mono-ui-kvLVIf1V.js} +43 -15
  32. package/dist/{popup-portal-C8ttHDRX.js → popup-portal-CINuVjNY.js} +53 -6
  33. package/dist/src/components/accordion/mono-accordion.d.ts +0 -1
  34. package/dist/src/components/alert/mono-alert.d.ts +0 -1
  35. package/dist/src/components/breadcrumb/mono-breadcrumb-list.d.ts +0 -1
  36. package/dist/src/components/breadcrumb/mono-breadcrumb.d.ts +0 -1
  37. package/dist/src/components/button/mono-button-dropdown.d.ts +0 -1
  38. package/dist/src/components/button/mono-button.d.ts +0 -1
  39. package/dist/src/components/card/mono-card.d.ts +0 -1
  40. package/dist/src/components/chart/mono-chart-presets.d.ts +0 -4
  41. package/dist/src/components/chart/mono-chart.d.ts +0 -1
  42. package/dist/src/components/checkbox/mono-checkbox.d.ts +0 -1
  43. package/dist/src/components/chip/mono-chip.d.ts +0 -1
  44. package/dist/src/components/date/mono-date.d.ts +0 -1
  45. package/dist/src/components/drawer/mono-drawer.d.ts +0 -1
  46. package/dist/src/components/dropdown/mono-dropdown.d.ts +0 -1
  47. package/dist/src/components/dropdown-table/mono-dropdown-table.d.ts +0 -1
  48. package/dist/src/components/file-upload/mono-file-upload.d.ts +0 -1
  49. package/dist/src/components/filter/mono-filter-builder.d.ts +0 -1
  50. package/dist/src/components/input/mono-input.d.ts +0 -1
  51. package/dist/src/components/menu/mono-menu.d.ts +0 -1
  52. package/dist/src/components/modal/mono-modal.d.ts +0 -1
  53. package/dist/src/components/nav/mono-nav.d.ts +0 -1
  54. package/dist/src/components/otp/mono-otp.d.ts +0 -1
  55. package/dist/src/components/radio/mono-radio.d.ts +0 -1
  56. package/dist/src/components/rich-text-editor/mono-rich-text-editor.d.ts +0 -1
  57. package/dist/src/components/select/mono-select.d.ts +0 -1
  58. package/dist/src/components/sidebar/mono-sidebar.d.ts +0 -1
  59. package/dist/src/components/slider/mono-slider.d.ts +0 -1
  60. package/dist/src/components/switch/mono-switch.d.ts +0 -1
  61. package/dist/src/components/table/column-autosize.d.ts +23 -1
  62. package/dist/src/components/table/mono-data-grid.d.ts +6 -0
  63. package/dist/src/components/table/mono-table-checkbox.d.ts +0 -1
  64. package/dist/src/components/table/mono-table-detail.d.ts +0 -1
  65. package/dist/src/components/table/mono-table-empty.d.ts +0 -1
  66. package/dist/src/components/table/mono-table-error.d.ts +0 -1
  67. package/dist/src/components/table/mono-table-info.d.ts +0 -1
  68. package/dist/src/components/table/mono-table-loading.d.ts +0 -1
  69. package/dist/src/components/table/mono-table-page-size.d.ts +0 -1
  70. package/dist/src/components/table/mono-table-paging-group.d.ts +0 -1
  71. package/dist/src/components/table/mono-table-paging.d.ts +0 -1
  72. package/dist/src/components/table/mono-table-search.d.ts +0 -1
  73. package/dist/src/components/table/mono-table-sort.d.ts +0 -1
  74. package/dist/src/components/table/mono-table-summary.d.ts +0 -1
  75. package/dist/src/components/table/mono-table-th.d.ts +0 -1
  76. package/dist/src/components/table/table-controller-core.d.ts +2 -0
  77. package/dist/src/components/tabs/mono-tabs.d.ts +0 -1
  78. package/dist/src/components/tag-input/mono-tag-input.d.ts +0 -1
  79. package/dist/src/components/textarea/mono-textarea.d.ts +0 -1
  80. package/dist/src/components/tooltip/field-tooltip-addon.d.ts +5 -0
  81. package/dist/src/composables/popup-portal.d.ts +24 -1
  82. package/dist/src/utils/data-source-read.d.ts +10 -1
  83. package/dist/{styles-BODNpZV1.js → styles-D-ergrfR.js} +1 -1
  84. package/dist/{tooltip-Drekihf5.js → tooltip-Cu5IrDS9.js} +1 -2
  85. package/dist/tooltip.js +2 -3
  86. package/dist/ui/accordion.js +4 -11
  87. package/dist/ui/alert.js +3 -10
  88. package/dist/ui/breadcrumb.js +4 -14
  89. package/dist/ui/button-dropdown.js +22 -15
  90. package/dist/ui/button.js +1 -1
  91. package/dist/ui/card.js +4 -11
  92. package/dist/ui/chart.js +4 -23
  93. package/dist/ui/checkbox.js +4 -11
  94. package/dist/ui/chip.js +6 -9
  95. package/dist/ui/date.js +5 -12
  96. package/dist/ui/drawer.js +5 -12
  97. package/dist/ui/dropdown-table.js +89 -37
  98. package/dist/ui/dropdown.js +34 -21
  99. package/dist/ui/file-upload.js +4 -11
  100. package/dist/ui/filter.js +3 -10
  101. package/dist/ui/form.js +1 -1
  102. package/dist/ui/index.css +3840 -3840
  103. package/dist/ui/input.js +6 -13
  104. package/dist/ui/menu.js +4 -11
  105. package/dist/ui/modal.js +6 -13
  106. package/dist/ui/nav.js +4 -11
  107. package/dist/ui/otp.js +6 -13
  108. package/dist/ui/radio.js +4 -11
  109. package/dist/ui/rich-text-editor.js +4 -11
  110. package/dist/ui/select.js +12 -14
  111. package/dist/ui/shadow/accordion.js +1 -1
  112. package/dist/ui/shadow/alert.js +1 -1
  113. package/dist/ui/shadow/breadcrumb.js +1 -1
  114. package/dist/ui/shadow/button-dropdown.js +21 -7
  115. package/dist/ui/shadow/button.js +1 -1
  116. package/dist/ui/shadow/card.js +1 -1
  117. package/dist/ui/shadow/chart.js +3 -3
  118. package/dist/ui/shadow/checkbox.js +2 -2
  119. package/dist/ui/shadow/chip.js +1 -1
  120. package/dist/ui/shadow/date.js +4 -4
  121. package/dist/ui/shadow/drawer.js +2 -2
  122. package/dist/ui/shadow/dropdown-table.js +159 -34
  123. package/dist/ui/shadow/dropdown.js +31 -11
  124. package/dist/ui/shadow/file-upload.js +2 -2
  125. package/dist/ui/shadow/filter.js +1 -1
  126. package/dist/ui/shadow/input.js +5 -5
  127. package/dist/ui/shadow/menu.js +1 -1
  128. package/dist/ui/shadow/modal.js +3 -3
  129. package/dist/ui/shadow/nav.js +1 -1
  130. package/dist/ui/shadow/otp.js +5 -5
  131. package/dist/ui/shadow/radio.js +2 -2
  132. package/dist/ui/shadow/rich-text-editor.js +2 -2
  133. package/dist/ui/shadow/select.js +11 -6
  134. package/dist/ui/shadow/sidebar.js +2 -2
  135. package/dist/ui/shadow/slider.js +4 -4
  136. package/dist/ui/shadow/switch.js +2 -2
  137. package/dist/ui/shadow/table.js +84 -20
  138. package/dist/ui/shadow/tabs.js +1 -1
  139. package/dist/ui/shadow/tag-input.js +117 -21
  140. package/dist/ui/shadow/textarea.js +4 -4
  141. package/dist/ui/sidebar.js +4 -11
  142. package/dist/ui/slider.js +5 -12
  143. package/dist/ui/switch.js +4 -11
  144. package/dist/ui/table.js +85 -64
  145. package/dist/ui/tabs.js +4 -11
  146. package/dist/ui/tag-input.js +118 -29
  147. package/dist/ui/textarea.js +6 -13
  148. package/dist/ui/theme/luma.css +495 -495
  149. package/dist/ui/theme/lyra.css +495 -495
  150. package/dist/ui/theme/maia.css +495 -495
  151. package/dist/ui/theme/mira.css +495 -495
  152. package/dist/ui/theme/nova.css +495 -495
  153. package/dist/ui/theme/one.css +742 -742
  154. package/dist/ui/theme/rhea.css +495 -495
  155. package/dist/ui/theme/sera.css +495 -495
  156. package/dist/ui/theme/vega.css +495 -495
  157. package/package.json +2 -2
  158. package/dist/field-validation.css_raw-B3Iu33rS.js +0 -178
  159. package/dist/input.css_raw-CQu2fAsU.js +0 -5
  160. package/dist/mono-button-Cy5-Y0At.js +0 -878
  161. package/dist/tooltip-loader-3U9FTOXj.js +0 -20
  162. package/dist/tooltip-loader-Dcp9AUZn.js +0 -23
@@ -1,13 +1,13 @@
1
- import { C as monoPendingGrace, _ as buildSizeStyle, a as __decorate, c as defineHybridPropAlias, d as optionalNumberConverter, f as customElement, i as withShadowUtilityStyles, l as defineHybridPropAliases, r as toShadowCss, s as booleanStringConverter, t as flushSsrHydration, u as numberStringConverter, v as toCssSize } from "../../hydration-flush-9AJE8FRl.js";
1
+ import { C as monoPendingGrace, _ as buildSizeStyle, a as __decorate, c as defineHybridPropAlias, d as optionalNumberConverter, f as customElement, i as withShadowUtilityStyles, l as defineHybridPropAliases, r as toShadowCss, s as booleanStringConverter, t as flushSsrHydration, u as numberStringConverter, v as toCssSize } from "../../hydration-flush-BaE9gN3C.js";
2
2
  import { t as dispatchMonoEvent } from "../../mono-event-BPku9HpS.js";
3
3
  import { n as detachEventHandlers, t as applyProps } from "../../element-props-xvw0EB7H.js";
4
- import { t as MonoFormControlCore } from "../../form-control-core-rW2WvOcb.js";
4
+ import { t as MonoFormControlCore } from "../../form-control-core-BbiACMtL.js";
5
5
  import { a as closeIcon, i as chevronIcon, n as caretIcon } from "../../field-icons-t8rXRCKs.js";
6
- import { n as FieldTooltipController, t as field_tooltip_css_raw_default } from "../../field-tooltip.css_raw-DEctHXKm.js";
7
- import { n as label_position_css_raw_default, r as FieldValidationController, t as field_validation_css_raw_default } from "../../field-validation.css_raw-B3Iu33rS.js";
8
- import { n as applyPopupPlacement, r as computePopupPlacement, t as PopupPortalController } from "../../popup-portal-C8ttHDRX.js";
6
+ import { n as FieldTooltipController, t as field_tooltip_css_raw_default } from "../../field-tooltip.css_raw-U5UeTa2d.js";
7
+ import { n as label_position_css_raw_default, r as FieldValidationController, t as field_validation_css_raw_default } from "../../field-validation.css_raw-Cx6SGrfP.js";
8
+ import { n as applyPopupPlacement, r as computePopupPlacement, t as PopupPortalController } from "../../popup-portal-CINuVjNY.js";
9
9
  import { t as createNotifier } from "../../notifier-BIrqUzRh.js";
10
- import { t as monoDataGrid } from "../../mono-data-grid-KDpu4d4_.js";
10
+ import { t as monoDataGrid } from "../../mono-data-grid-Bkr-e1-i.js";
11
11
  import { n as resolveChipLimit, r as visibleChipCap, t as ChipStripController } from "../../chip-strip-bNfLn52Z.js";
12
12
  import { LitElement, html, isServer, nothing, unsafeCSS } from "lit";
13
13
  import { property } from "lit/decorators.js";
@@ -145,9 +145,16 @@ const MonoDropdownTableCore = (superClass) => {
145
145
  this._reflectSelection();
146
146
  };
147
147
  this._onViewportChange = () => {
148
- if (this._isOpen) this._positionPanel();
149
- if (this._moreOpen) this._positionMorePanel();
148
+ if (!this._isOpen && !this._moreOpen || this._viewportFrame) return;
149
+ this._viewportFrame = requestAnimationFrame(() => {
150
+ this._viewportFrame = 0;
151
+ if (this._isOpen) this._positionPanel();
152
+ if (this._moreOpen) this._positionMorePanel();
153
+ });
150
154
  };
155
+ this._viewportBound = false;
156
+ this._viewportFrame = 0;
157
+ this._docBound = false;
151
158
  this._wasOpen = false;
152
159
  this._lastSelectedCount = 0;
153
160
  this._searchFocused = false;
@@ -400,14 +407,7 @@ const MonoDropdownTableCore = (superClass) => {
400
407
  super.connectedCallback();
401
408
  this._subscribe();
402
409
  this._wireDropdown();
403
- if (!isServer) {
404
- document.addEventListener("pointerdown", this._onDocPointer, true);
405
- document.addEventListener("keydown", this._onDocKey, true);
406
- if (this._isShadowHost) {
407
- window.addEventListener("scroll", this._onViewportChange, true);
408
- window.addEventListener("resize", this._onViewportChange);
409
- }
410
- }
410
+ if (!isServer) this._syncViewportListeners();
411
411
  }
412
412
  disconnectedCallback() {
413
413
  this._off?.();
@@ -418,8 +418,12 @@ const MonoDropdownTableCore = (superClass) => {
418
418
  if (!isServer) {
419
419
  document.removeEventListener("pointerdown", this._onDocPointer, true);
420
420
  document.removeEventListener("keydown", this._onDocKey, true);
421
+ this._docBound = false;
421
422
  window.removeEventListener("scroll", this._onViewportChange, true);
422
423
  window.removeEventListener("resize", this._onViewportChange);
424
+ if (this._viewportFrame) cancelAnimationFrame(this._viewportFrame);
425
+ this._viewportFrame = 0;
426
+ this._viewportBound = false;
423
427
  }
424
428
  super.disconnectedCallback();
425
429
  }
@@ -550,11 +554,9 @@ const MonoDropdownTableCore = (superClass) => {
550
554
  get _rowScope() {
551
555
  return this.renderRoot === this ? this._popup.panelRoot : this;
552
556
  }
553
- _reflectSelection() {
557
+ _reflectSelection(rows = this._rowEls()) {
554
558
  const dd = this._dd;
555
- const root = this._rowScope;
556
- if (!dd || !root?.querySelectorAll) return;
557
- const rows = Array.from(root.querySelectorAll("[data-row-key]"));
559
+ if (!dd) return;
558
560
  if ((this._focusZone === "list" || this._activeRowKey != null) && rows.length && !rows.some((el) => el.getAttribute("data-row-key") === this._activeRowKey)) this._activeRowKey = rows[0].getAttribute("data-row-key");
559
561
  rows.forEach((el) => {
560
562
  const key = el.getAttribute("data-row-key");
@@ -565,15 +567,27 @@ const MonoDropdownTableCore = (superClass) => {
565
567
  el.toggleAttribute("mono-selected", on);
566
568
  el.toggleAttribute("mono-dd-selected", on);
567
569
  el.toggleAttribute("mono-dd-active", active);
568
- if (on) el.setAttribute("aria-selected", "true");
569
- else el.removeAttribute("aria-selected");
570
+ if (on !== el.hasAttribute("aria-selected")) {
571
+ if (on) el.setAttribute("aria-selected", "true");
572
+ else el.removeAttribute("aria-selected");
573
+ }
570
574
  });
571
575
  }
572
576
  /** Re-reflect after the consumer's Vue re-renders rows (paging/search). */
573
577
  _observePanel() {
574
578
  const root = this._rowScope;
575
579
  if (!root || this._panelObserver) return;
576
- this._panelObserver = new MutationObserver(() => this._reflectSelection());
580
+ const touchesRows = (nodes) => {
581
+ for (const n of Array.from(nodes)) {
582
+ if (n.nodeType !== 1) continue;
583
+ const el = n;
584
+ if (el.matches("[data-row-key]") || el.querySelector("[data-row-key]")) return true;
585
+ }
586
+ return false;
587
+ };
588
+ this._panelObserver = new MutationObserver((records) => {
589
+ if (records.some((r) => touchesRows(r.addedNodes) || touchesRows(r.removedNodes))) this._reflectSelection();
590
+ });
577
591
  this._panelObserver.observe(root, {
578
592
  childList: true,
579
593
  subtree: true
@@ -628,9 +642,52 @@ const MonoDropdownTableCore = (superClass) => {
628
642
  });
629
643
  applyPopupPlacement(panel, placement, true);
630
644
  }
645
+ /**
646
+ * Outside-dismiss listeners, both builds, bound while a panel is OPEN only (select's rule).
647
+ * Both handlers bail when the list and "+N more" panels are closed, so at rest they cost
648
+ * only dispatch — two capture-phase `document` listeners per field.
649
+ */
650
+ _syncDocListeners() {
651
+ const want = this.isConnected && (this._isOpen || this._moreOpen);
652
+ if (want === this._docBound) return;
653
+ this._docBound = want;
654
+ if (want) {
655
+ document.addEventListener("pointerdown", this._onDocPointer, true);
656
+ document.addEventListener("keydown", this._onDocKey, true);
657
+ } else {
658
+ document.removeEventListener("pointerdown", this._onDocPointer, true);
659
+ document.removeEventListener("keydown", this._onDocKey, true);
660
+ }
661
+ }
662
+ /**
663
+ * Shadow build only, and only while a panel is OPEN — the popup controller's rule. They used
664
+ * to be bound at connect for every shadow instance: a capture-phase, non-passive `scroll`
665
+ * listener on `window` per field, open or not, which also keeps the page's scrolling off the
666
+ * compositor thread.
667
+ */
668
+ _syncViewportListeners() {
669
+ if (isServer) return;
670
+ this._syncDocListeners();
671
+ const want = this._isShadowHost && this.isConnected && (this._isOpen || this._moreOpen);
672
+ if (want === this._viewportBound) return;
673
+ if (want) {
674
+ window.addEventListener("scroll", this._onViewportChange, {
675
+ capture: true,
676
+ passive: true
677
+ });
678
+ window.addEventListener("resize", this._onViewportChange, { passive: true });
679
+ } else {
680
+ window.removeEventListener("scroll", this._onViewportChange, true);
681
+ window.removeEventListener("resize", this._onViewportChange);
682
+ if (this._viewportFrame) cancelAnimationFrame(this._viewportFrame);
683
+ this._viewportFrame = 0;
684
+ }
685
+ this._viewportBound = want;
686
+ }
631
687
  updated(changed) {
632
688
  super.updated(changed);
633
689
  if (isServer) return;
690
+ this._syncViewportListeners();
634
691
  if (this._isOpen) {
635
692
  this._observePanel();
636
693
  this._reflectSelection();
@@ -731,18 +788,20 @@ const MonoDropdownTableCore = (superClass) => {
731
788
  _panelEl() {
732
789
  return (this._popup.panelRoot ?? this.renderRoot)?.querySelector?.(".mono-dropdown-table-panel") ?? null;
733
790
  }
734
- _setActiveRow(key, reveal = false) {
791
+ /** `rows`: the caller's own `_rowEls()` — one query per arrow key, not three. */
792
+ _setActiveRow(key, reveal = false, rows = this._rowEls()) {
735
793
  this._activeRowKey = key;
736
- this._reflectSelection();
794
+ this._reflectSelection(rows);
737
795
  if (!reveal || key == null) return;
738
- this._rowEls().find((r) => r.getAttribute("data-row-key") === key)?.scrollIntoView?.({ block: "nearest" });
796
+ rows.find((r) => r.getAttribute("data-row-key") === key)?.scrollIntoView?.({ block: "nearest" });
739
797
  }
740
798
  _moveActiveRow(delta) {
741
- const keys = this._rowEls().map((r) => r.getAttribute("data-row-key") ?? "");
799
+ const rows = this._rowEls();
800
+ const keys = rows.map((r) => r.getAttribute("data-row-key") ?? "");
742
801
  if (!keys.length) return;
743
802
  const i = this._activeRowKey == null ? -1 : keys.indexOf(this._activeRowKey);
744
803
  const next = i < 0 ? delta > 0 ? 0 : keys.length - 1 : Math.min(Math.max(i + delta, 0), keys.length - 1);
745
- this._setActiveRow(keys[next], true);
804
+ this._setActiveRow(keys[next], true, rows);
746
805
  }
747
806
  /** Move the keyboard into the row list, highlighting the first row. */
748
807
  _enterList() {
@@ -1282,7 +1341,7 @@ const MonoDropdownTableCore = (superClass) => {
1282
1341
 
1283
1342
  //#endregion
1284
1343
  //#region \0raw:C:\Users\VCT-DEV\Desktop\libs\packages\helper\src\components\dropdown-table\dropdown-table.css?raw.js
1285
- var dropdown_table_css_raw_default = "/* LEGACY CLASS ALIASES — every `[mono-x]` below is wrapped as `:is([mono-x], .legacy)`\n by `scripts/legacy-class-alias.mjs` (`.mono-dropdown-table-region.body`,\n `tr.mono-dd-row-selected`, …), so host CSS and hand-written markup on the pre-port\n class contract keep painting. Author with the attribute only; re-run the script. */\n/* =========================================================================\n mono-dropdown-table — a dropdown whose panel is a native `<table>` for\n picking row(s). An EXTENSION: Basecoat has no table picker, so the FIELD is\n the multi-select combobox's chip box (`.combobox-chips` + `.combobox-chip`,\n basecoat-css@1.0.2, vega style) on the `.field` / `.label` chrome, and the\n PANEL is the combobox's `[data-popover]` holding a ported `<table mono-table>`\n instead of a listbox — so the rows are the table's own rows.\n\n Styled by ATTRIBUTE, like Basecoat — and the attributes mirror the element's\n props one for one, so hand-written markup reads like the Lit / Vue tag:\n\n <mono-dropdown-table size=\"sm\" color=\"danger\" label=\"Owner\" clearable multiple>\n <div mono-dropdown-table mono-size=\"sm\" mono-color=\"danger\" mono-clearable mono-multiple>\n <label mono-dd-label>Owner</label>\n <div mono-dd-control>\n <div mono-dd-trigger role=\"combobox\">\n <span mono-dd-value>\n <div mono-dd-chip mono-dd-removable><span mono-dd-chip-main><span mono-dd-chip-content>\n <span mono-dd-chip-label>Ada</span><button mono-dd-chip-close>…</button></span></span></div>\n </span>\n <span mono-dd-actions><span mono-dd-arrow>…</span></span>\n </div>\n </div>\n <div mono-dd-panel><div mono-dd-region=\"body\"><table mono-table>…</table></div></div>\n </div>\n\n An absent attribute is the prop's default (`:not([mono-size])` = md,\n `:not([mono-color])` = primary, `:not([mono-variant])` = outlined). The element\n renders these attributes on its wrapper (both builds) plus the STATES\n `mono-open` / `mono-more-open` / `mono-has-value` / `mono-side`; the old\n classes (`.mono-dropdown-table.sm.open`) are still emitted as inert hooks until\n 2.0 but no rule here reads them. The chips are NOT `.mono-chip`s any more: they\n are Basecoat combobox chips painted here, and chip.css never sees them.\n\n THE PARTS ARE FAMILY-UNIQUE (`mono-dd-*`), never the bare `mono-chip` /\n `mono-panel` / `mono-actions` the field components use: the panel holds a whole\n `<table mono-table>` whose cells may carry a consumer's `<mono-chip>`, and a\n `[mono-dropdown-table] [mono-chip]` rule would repaint it.\n\n Selector map (ours ≡ upstream):\n [mono-dropdown-table] ≡ .field (gap-3, as margins) + .combobox (position: relative)\n [mono-dropdown-table] > [mono-dd-label] ≡ .field > label / .label\n [mono-dd-trigger] ≡ .combobox-chips (min-h-9 gap-1.5 rounded-md border-input px-1.5 py-1.5 text-sm shadow-xs)\n [mono-dd-value] ≡ the chip row; EXTENSION: the single value / placeholder text\n [mono-dd-chip] > [mono-dd-chip-main] ≡ .combobox-chip (h-5.5 gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium)\n [mono-dd-chip] [mono-dd-chip-close] ≡ .combobox-chip-remove (-ms-1 opacity-50 hover:100, svg size-3.5)\n [mono-dd-chip][mono-dd-more] ≡ EXTENSION (the \"+N more\" counter chip, same box)\n [mono-dd-actions] > [mono-dd-arrow] > svg ≡ .combobox-trigger-icon (size-4 text-muted-foreground)\n [mono-dd-actions] > [mono-dd-clear] ≡ .combobox [data-clear] (size-6, painted as .btn[data-variant='ghost'])\n [mono-dd-actions] > [mono-dd-scroll] ≡ EXTENSION (the inline strip's ‹ › pager, same box)\n [mono-dd-panel] ≡ .combobox [data-popover] (bg-popover ring-1 rounded-md shadow-md); EXTENSION: a flex column of regions\n [mono-dd-region=\"search|body|foot\"] ≡ EXTENSION (search box / the scrolling table / the pager)\n [mono-dd-more] ≡ [data-popover] holding the overflow chips\n [mono-table] tbody tr[mono-selected] ≡ .table tr data-[state=selected] — the TABLE's own rule paints it\n [mono-table] tbody tr[mono-dd-active] ≡ .combobox [role='option'].active (bg-muted) — the keyboard cursor\n [mono-dd-message=\"…\"] ≡ .field > p / .field [role='alert']\n [mono-validation-state=\"invalid\"] ≡ .combobox-chips:has([aria-invalid=true]) + .field[data-invalid]\n [mono-validation-state=\"valid|warning\"] ≡ EXTENSION (the invalid pattern in --success / --warning)\n [mono-size=\"xs|sm|lg|xl|xxl\"] ≡ EXTENSION (the --mono-control-height-* ladder)\n [mono-variant=\"filled\"] ≡ EXTENSION (luma's .combobox-chips)\n [mono-variant=\"underlined\"] ≡ EXTENSION (sera's .combobox-chips: bottom edge only, no ring)\n\n FLAVORS: the field IS the tag-input's chip box and the panel IS its popover, so\n every metric here resolves `--mono-dropdown-table-<k>` → `--mono-tag-input-<k>`\n → the base, through the SAME per-size chains tag-input.css uses — a flavour\n that retunes the tag-input retunes this field for free, and no flavour file\n carries a dropdown-table entry. Every fallback is vega's value.\n\n THE PANELS ARE PORTALED (light build): [mono-dd-panel] and [mono-dd-more]\n move into a `<div data-mono-popup-portal>` under <body> while open, and the\n portal mirrors the wrapper's class AND mono-* attributes, so every rule here\n is scoped under `[mono-dropdown-table]` and never relies on the panel being\n inside the field. The shadow build keeps its panel in the shadow root and\n SLOTS the consumer's light-DOM `<table>` into it — the row rules therefore\n come in two forms: the portaled table, and the slotted one under the host.\n ========================================================================= */\n\nmono-dropdown-table {\n display: block;\n width: 100%;\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) {\n /* ── palette: each slot is a public knob over the tag-input's, over a Basecoat token ── */\n --_mono-dropdown-table-text: var(--mono-dropdown-table-text, var(--mono-tag-input-text, var(--foreground)));\n --_mono-dropdown-table-placeholder: var(--mono-dropdown-table-placeholder, var(--mono-tag-input-placeholder, var(--muted-foreground)));\n --_mono-dropdown-table-muted: var(--mono-dropdown-table-muted, var(--mono-tag-input-muted, var(--muted-foreground)));\n --_mono-dropdown-table-primary: var(--mono-dropdown-table-primary, var(--mono-tag-input-primary, var(--ring)));\n --_mono-dropdown-table-secondary: var(--mono-dropdown-table-secondary, var(--mono-tag-input-secondary, var(--muted-foreground)));\n --_mono-dropdown-table-success: var(--mono-dropdown-table-success, var(--mono-tag-input-success, var(--success)));\n --_mono-dropdown-table-danger: var(--mono-dropdown-table-danger, var(--mono-tag-input-danger, var(--destructive)));\n --_mono-dropdown-table-warning: var(--mono-dropdown-table-warning, var(--mono-tag-input-warning, var(--warning)));\n --_mono-dropdown-table-info: var(--mono-dropdown-table-info, var(--mono-tag-input-info, var(--info)));\n --_mono-dropdown-table-teal: var(--mono-dropdown-table-teal, var(--mono-tag-input-teal, var(--teal)));\n --_mono-dropdown-table-purple: var(--mono-dropdown-table-purple, var(--mono-tag-input-purple, var(--purple)));\n --_mono-dropdown-table-neutral: var(--mono-dropdown-table-neutral, var(--mono-tag-input-neutral, var(--neutral)));\n --_mono-dropdown-table-dark: var(--mono-dropdown-table-dark, var(--mono-tag-input-dark, var(--dark)));\n --_mono-dropdown-table-valid: var(--mono-dropdown-table-valid, var(--mono-tag-input-valid, var(--success)));\n --_mono-dropdown-table-invalid: var(--mono-dropdown-table-invalid, var(--mono-tag-input-invalid, var(--destructive)));\n\n /* ── the painted result — three tiers, base = .combobox-chips (vega) ──── */\n --_mono-dropdown-table-ring-color: var(--mono-dropdown-table-ring-color, var(--mono-dropdown-table-focus-color, var(--_mono-dropdown-table-ring-color-preset, var(--_mono-dropdown-table-primary))));\n --_mono-dropdown-table-ring-width: var(--mono-dropdown-table-ring-width, var(--mono-tag-input-ring-width, var(--_mono-dropdown-table-ring-width-preset, var(--mono-ring-width))));\n --_mono-dropdown-table-ring-alpha: var(--mono-dropdown-table-ring-alpha, var(--mono-tag-input-ring-alpha, var(--mono-ring-alpha)));\n --_mono-dropdown-table-border-color: var(--mono-dropdown-table-rest-border, var(--mono-dropdown-table-border-color, var(--mono-dropdown-table-border, var(--mono-tag-input-rest-border, var(--mono-tag-input-border-color, var(--mono-tag-input-border, var(--_mono-dropdown-table-border-color-preset, var(--input))))))));\n --_mono-dropdown-table-bg: var(--mono-dropdown-table-bg, var(--mono-dropdown-table-surface, var(--mono-tag-input-bg, var(--mono-tag-input-surface, var(--_mono-dropdown-table-bg-preset, var(--mono-mode-surface))))));\n --_mono-dropdown-table-shadow: var(--mono-dropdown-table-shadow, var(--mono-tag-input-shadow, var(--_mono-dropdown-table-shadow-preset, 0 0 #0000)));\n --_mono-dropdown-table-icon: var(--mono-dropdown-table-icon-size, var(--mono-tag-input-icon-size, calc(var(--mono-spacing) * 4)));\n\n /* ── md metrics live on the unqualified root ON PURPOSE: hand-written\n `<div mono-dropdown-table>` that names no size renders exactly like\n size=\"md\". basecoat@1.0.2 styles/vega.css .combobox-chips — min-h-9\n gap-1.5 rounded-md px-1.5 py-1.5 text-sm; .combobox-chip h-5.5 ── */\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-md, var(--mono-tag-input-height-md, var(--mono-control-height-md)));\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-md, var(--mono-tag-input-radius-md, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-md, var(--mono-tag-input-padding-x-md, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, calc(var(--mono-spacing) * 1.5))))));\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-md, var(--mono-tag-input-padding-y-md, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, calc(var(--mono-spacing) * 1.5)))));\n --_mono-dropdown-table-gap: var(--mono-dropdown-table-chip-gap, var(--mono-tag-input-chip-gap, calc(var(--mono-spacing) * 1.5)));\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-md, var(--mono-tag-input-font-md, var(--mono-text-sm)));\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-md, var(--mono-tag-input-line-height-md, var(--mono-text-sm--lh)))));\n /* Same cap as tag-input's (see tag-input.css): one row of chips never outgrows the field's height. */\n --_mono-dropdown-table-chip-fit: calc(var(--_mono-dropdown-table-height) - 2 * var(--_mono-dropdown-table-padding-y) - 2 * var(--mono-border-width));\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-md, var(--mono-tag-input-chip-height-md, min(calc(var(--mono-spacing) * 5.5), var(--_mono-dropdown-table-chip-fit))));\n --_mono-dropdown-table-chip-font-size: var(--mono-dropdown-table-chip-font-size, var(--mono-tag-input-chip-font-size, var(--mono-text-xs)));\n --_mono-dropdown-table-chip-line-height: var(--mono-dropdown-table-chip-line-height, var(--mono-tag-input-chip-line-height, var(--mono-text-xs--lh)));\n --_mono-dropdown-table-action: calc(var(--mono-spacing) * 6);\n --_mono-dropdown-table-clear-glyph: calc(var(--mono-spacing) * 3.5);\n\n /* basecoat@1.0.2 styles/vega.css .field — flex w-full flex-col gap-3; mono:\n BLOCK flow with the gap as margins (see tag-input.css) */\n --_mono-dropdown-table-gap-y: var(--mono-dropdown-table-gap, var(--mono-tag-input-gap, calc(var(--mono-spacing) * 3)));\n position: relative;\n display: block;\n width: 100%;\n font-family: inherit;\n color: var(--_mono-dropdown-table-text);\n}\n\n/* The page's global `* { box-sizing: border-box }` does NOT cross the shadow\n boundary; without this the trigger's `min-height` would be its CONTENT height\n there (40px → 56px). Rewrites to `:host, :host *` in the shadow sheet. */\nmono-dropdown-table,\nmono-dropdown-table *,\n:is([mono-dropdown-table],.mono-dropdown-table),\n:is([mono-dropdown-table],.mono-dropdown-table) *,\n:is([mono-dropdown-table],.mono-dropdown-table) *::before,\n:is([mono-dropdown-table],.mono-dropdown-table) *::after {\n box-sizing: border-box;\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is(:is([mono-dd-label],.mono-dropdown-table-label), :is([mono-dd-message],.mono-dropdown-table-message))[mono-empty] {\n display: none;\n}\n\n/* =========================================\n Sizes — an EMPTY field's painted height IS the token (tests/perf/field-heights);\n a second row of chips grows it. The same chains as tag-input.css, one tier up.\n ========================================= */\n\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-size=\"xs\"],:where(.mono-dropdown-table.xs)) {\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-xs, var(--mono-tag-input-height-xs, var(--mono-control-height-xs)));\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-xs, var(--mono-tag-input-radius-xs, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-xs, var(--mono-tag-input-padding-x-xs, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, var(--mono-spacing))))));\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-xs, var(--mono-tag-input-padding-y-xs, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, calc(var(--mono-spacing) * 0.5)))));\n --_mono-dropdown-table-gap: var(--mono-dropdown-table-chip-gap, var(--mono-tag-input-chip-gap, var(--mono-spacing)));\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-xs, var(--mono-tag-input-font-xs, var(--mono-text-xs)));\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-xs, var(--mono-tag-input-line-height-xs, var(--mono-text-xs--lh)))));\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-xs, var(--mono-tag-input-chip-height-xs, min(calc(var(--mono-spacing) * 4.5), var(--_mono-dropdown-table-chip-fit))));\n --_mono-dropdown-table-icon: var(--mono-dropdown-table-icon-size, var(--mono-tag-input-icon-size, calc(var(--mono-spacing) * 3.5)));\n --_mono-dropdown-table-action: calc(var(--mono-spacing) * 4);\n --_mono-dropdown-table-clear-glyph: calc(var(--mono-spacing) * 3);\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-size=\"sm\"],:where(.mono-dropdown-table.sm)) {\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-sm, var(--mono-tag-input-height-sm, var(--mono-control-height-sm)));\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-sm, var(--mono-tag-input-radius-sm, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-sm, var(--mono-tag-input-padding-x-sm, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, var(--mono-spacing))))));\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-sm, var(--mono-tag-input-padding-y-sm, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, var(--mono-spacing)))));\n --_mono-dropdown-table-gap: var(--mono-dropdown-table-chip-gap, var(--mono-tag-input-chip-gap, var(--mono-spacing)));\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-sm, var(--mono-tag-input-font-sm, var(--mono-dropdown-table-font-md, var(--mono-tag-input-font-md, var(--mono-text-sm)))));\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-sm, var(--mono-tag-input-line-height-sm, var(--mono-text-sm--lh)))));\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-sm, var(--mono-tag-input-chip-height-sm, min(calc(var(--mono-spacing) * 5), var(--_mono-dropdown-table-chip-fit))));\n --_mono-dropdown-table-action: calc(var(--mono-spacing) * 5);\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-size=\"lg\"],:where(.mono-dropdown-table.lg)) {\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-lg, var(--mono-tag-input-height-lg, var(--mono-control-height-lg)));\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-lg, var(--mono-tag-input-radius-lg, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-lg, var(--mono-tag-input-padding-x-lg, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, calc(var(--mono-spacing) * 1.5))))));\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-lg, var(--mono-tag-input-padding-y-lg, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, calc(var(--mono-spacing) * 1.5)))));\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-lg, var(--mono-tag-input-font-lg, var(--mono-dropdown-table-font-md, var(--mono-tag-input-font-md, var(--mono-text-sm)))));\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-lg, var(--mono-tag-input-line-height-lg, var(--mono-text-sm--lh)))));\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-lg, var(--mono-tag-input-chip-height-lg, min(calc(var(--mono-spacing) * 6), var(--_mono-dropdown-table-chip-fit))));\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-size=\"xl\"],:where(.mono-dropdown-table.xl)) {\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-xl, var(--mono-tag-input-height-xl, var(--mono-control-height-xl)));\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-xl, var(--mono-tag-input-radius-xl, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-xl, var(--mono-tag-input-padding-x-xl, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, calc(var(--mono-spacing) * 2))))));\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-xl, var(--mono-tag-input-padding-y-xl, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, calc(var(--mono-spacing) * 2)))));\n --_mono-dropdown-table-gap: var(--mono-dropdown-table-chip-gap, var(--mono-tag-input-chip-gap, calc(var(--mono-spacing) * 2)));\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-xl, var(--mono-tag-input-font-xl, var(--mono-text-base)));\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-xl, var(--mono-tag-input-line-height-xl, var(--mono-text-base--lh)))));\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-xl, var(--mono-tag-input-chip-height-xl, min(calc(var(--mono-spacing) * 6.5), var(--_mono-dropdown-table-chip-fit))));\n --_mono-dropdown-table-chip-font-size: var(--mono-dropdown-table-chip-font-size, var(--mono-tag-input-chip-font-size, var(--mono-text-sm)));\n --_mono-dropdown-table-chip-line-height: var(--mono-dropdown-table-chip-line-height, var(--mono-tag-input-chip-line-height, var(--mono-text-sm--lh)));\n --_mono-dropdown-table-icon: var(--mono-dropdown-table-icon-size, var(--mono-tag-input-icon-size, calc(var(--mono-spacing) * 5)));\n --_mono-dropdown-table-action: calc(var(--mono-spacing) * 7);\n --_mono-dropdown-table-clear-glyph: calc(var(--mono-spacing) * 4);\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-size=\"xxl\"],:where(.mono-dropdown-table.xxl)) {\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-xxl, var(--mono-tag-input-height-xxl, var(--mono-control-height-xxl)));\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-xxl, var(--mono-tag-input-radius-xxl, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-xxl, var(--mono-tag-input-padding-x-xxl, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, calc(var(--mono-spacing) * 2.5))))));\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-xxl, var(--mono-tag-input-padding-y-xxl, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, calc(var(--mono-spacing) * 2)))));\n --_mono-dropdown-table-gap: var(--mono-dropdown-table-chip-gap, var(--mono-tag-input-chip-gap, calc(var(--mono-spacing) * 2)));\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-xxl, var(--mono-tag-input-font-xxl, var(--mono-text-lg)));\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-xxl, var(--mono-tag-input-line-height-xxl, var(--mono-text-lg--lh)))));\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-xxl, var(--mono-tag-input-chip-height-xxl, min(calc(var(--mono-spacing) * 7), var(--_mono-dropdown-table-chip-fit))));\n --_mono-dropdown-table-chip-font-size: var(--mono-dropdown-table-chip-font-size, var(--mono-tag-input-chip-font-size, var(--mono-text-sm)));\n --_mono-dropdown-table-chip-line-height: var(--mono-dropdown-table-chip-line-height, var(--mono-tag-input-chip-line-height, var(--mono-text-sm--lh)));\n --_mono-dropdown-table-icon: var(--mono-dropdown-table-icon-size, var(--mono-tag-input-icon-size, calc(var(--mono-spacing) * 5)));\n --_mono-dropdown-table-action: calc(var(--mono-spacing) * 8);\n --_mono-dropdown-table-clear-glyph: calc(var(--mono-spacing) * 4);\n}\n\n/* =========================================\n Variants — each writes only `*-preset` slots, read from the dropdown-table's\n knob first and the tag-input's second (a flavour writes the latter)\n ========================================= */\n\n/* basecoat@1.0.2 styles/vega.css .combobox-chips — rounded-md border border-input\n bg-transparent shadow-xs (dark:bg-input/30 via --mono-mode-surface) */\n:is([mono-dropdown-table],.mono-dropdown-table):is(:not([mono-variant]), :is([mono-variant=\"outlined\"],:where(.mono-dropdown-table.outlined))) {\n --_mono-dropdown-table-bg-preset: var(--mono-dropdown-table-outline-bg, var(--mono-tag-input-outline-bg));\n --_mono-dropdown-table-border-color-preset: var(--mono-dropdown-table-outline-border-color, var(--mono-tag-input-outline-border-color));\n --_mono-dropdown-table-side-border-color-preset: var(--mono-dropdown-table-outline-side-border-color, var(--mono-tag-input-outline-side-border-color));\n --_mono-dropdown-table-shadow-preset: var(--mono-dropdown-table-outline-shadow, var(--mono-tag-input-outline-shadow, var(--mono-shadow-xs)));\n --_mono-dropdown-table-ring-width-preset: var(--mono-dropdown-table-outline-ring-width, var(--mono-tag-input-outline-ring-width));\n --_mono-dropdown-table-radius-preset: var(--mono-dropdown-table-outline-radius, var(--mono-tag-input-outline-radius));\n --_mono-dropdown-table-padding-x-preset: var(--mono-dropdown-table-outline-padding-x, var(--mono-tag-input-outline-padding-x));\n}\n\n/* EXTENSION — filled ≡ basecoat@1.0.2 styles/luma.css .combobox-chips */\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-variant=\"filled\"],:where(.mono-dropdown-table.filled)) {\n --_mono-dropdown-table-bg-preset: var(--mono-dropdown-table-filled-bg, var(--mono-tag-input-filled-bg, color-mix(in oklab, var(--input) 50%, transparent)));\n --_mono-dropdown-table-border-color-preset: transparent;\n --_mono-dropdown-table-shadow-preset: 0 0 #0000;\n}\n\n/* EXTENSION — underlined ≡ basecoat@1.0.2 styles/sera.css .combobox-chips */\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-variant=\"underlined\"],:where(.mono-dropdown-table.underlined)) {\n --_mono-dropdown-table-bg-preset: transparent;\n --_mono-dropdown-table-side-border-color-preset: transparent;\n --_mono-dropdown-table-shadow-preset: 0 0 #0000;\n --_mono-dropdown-table-ring-width-preset: 0px;\n --_mono-dropdown-table-radius-preset: 0;\n --_mono-dropdown-table-padding-x-preset: 0;\n}\n\n/* =========================================\n Colours — the `color` prop is the FOCUS colour (ring + focused border)\n ========================================= */\n\n:is([mono-dropdown-table],.mono-dropdown-table):is(:not([mono-color]), :is([mono-color=\"primary\"],:where(.mono-dropdown-table.primary))) {\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-primary);\n}\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"secondary\"],:where(.mono-dropdown-table.secondary)) {\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-secondary);\n}\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"success\"],:where(.mono-dropdown-table.success)) {\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-success);\n}\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"danger\"],:where(.mono-dropdown-table.danger)) {\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-danger);\n}\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"warning\"],:where(.mono-dropdown-table.warning)) {\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-warning);\n}\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"info\"],:where(.mono-dropdown-table.info)) {\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-info);\n}\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"teal\"],:where(.mono-dropdown-table.teal)) {\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-teal);\n}\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"purple\"],:where(.mono-dropdown-table.purple)) {\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-purple);\n}\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"neutral\"],:where(.mono-dropdown-table.neutral)) {\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-neutral);\n}\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"dark\"],:where(.mono-dropdown-table.dark)) {\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-dark);\n}\n\n/* =========================================\n Label\n ========================================= */\n\n/* basecoat@1.0.2 styles/vega.css .field > label, .label — flex items-center\n gap-2 text-sm leading-none font-medium select-none w-fit */\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-label],.mono-dropdown-table-label) {\n display: flex;\n align-items: center;\n width: fit-content;\n margin: 0 0 var(--_mono-dropdown-table-gap-y);\n gap: var(--mono-dropdown-table-label-gap, var(--mono-tag-input-label-gap, calc(var(--mono-spacing) * 2)));\n font-size: var(--mono-dropdown-table-label-font-size, var(--mono-tag-input-label-font-size, var(--mono-text-sm)));\n line-height: var(--mono-dropdown-table-label-line-height, var(--mono-tag-input-label-line-height, 1));\n font-weight: var(--mono-dropdown-table-label-font-weight, var(--mono-tag-input-label-font-weight, var(--mono-label-font-weight, var(--mono-font-weight-medium))));\n text-transform: var(--mono-dropdown-table-label-text-transform, var(--mono-tag-input-label-text-transform, none));\n letter-spacing: var(--mono-dropdown-table-label-letter-spacing, var(--mono-tag-input-label-letter-spacing, normal));\n color: var(--_mono-dropdown-table-text);\n user-select: none;\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-disabled],.disabled) > :is([mono-dd-label],.mono-dropdown-table-label) {\n opacity: 0.5;\n pointer-events: none;\n}\n\n/* basecoat@1.0.2 styles/vega.css .field — data-invalid:text-destructive */\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-validation-state=\"invalid\"],:where(.mono-dropdown-table.is-invalid)) > :is([mono-dd-label],.mono-dropdown-table-label) {\n color: var(--_mono-dropdown-table-invalid);\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-required-mark],.mono-dropdown-table-required) {\n color: var(--_mono-dropdown-table-danger);\n}\n\n/* `tooltip` prop — the info icon at the end of the label row (the label's\n flex gap spaces it). `pointer-events` is restored because a disabled field\n switches its label's off, and a disabled field is exactly where the reason\n is worth a hover. Knobs: --mono-dropdown-table-label-tooltip-size / -color / -opacity. */\n:where(:is([mono-dropdown-table],.mono-dropdown-table)) > :is([mono-dd-label],.mono-dropdown-table-label) > [mono-label-tooltip] {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n font-size: var(--mono-dropdown-table-label-tooltip-size, 1.1em);\n color: var(--mono-dropdown-table-label-tooltip-color, currentColor);\n opacity: var(--mono-dropdown-table-label-tooltip-opacity, 0.6);\n border-radius: 9999px;\n cursor: help;\n pointer-events: auto;\n outline: none;\n transition: opacity 150ms ease;\n}\n\n:where(:is([mono-dropdown-table],.mono-dropdown-table)) > :is([mono-dd-label],.mono-dropdown-table-label) > [mono-label-tooltip]:is(:hover, :focus-visible) {\n opacity: 1;\n}\n\n:where(:is([mono-dropdown-table],.mono-dropdown-table)) > :is([mono-dd-label],.mono-dropdown-table-label) > [mono-label-tooltip]:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 2px;\n}\n\n:where(:is([mono-dropdown-table],.mono-dropdown-table)) > :is([mono-dd-label],.mono-dropdown-table-label) > [mono-label-tooltip] > [mono-icon] {\n width: 1em;\n height: 1em;\n}\n\n/* =========================================\n The field — the chip box (role=\"combobox\"; the search box lives in the panel)\n ========================================= */\n\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-control],.mono-dropdown-table-control) {\n position: relative;\n}\n\n/* The control is a grid/flex item in a host layout; once the value stops\n wrapping (inline strip) its automatic minimum is the full strip — pin it. */\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-control],.mono-dropdown-table-control):is([mono-inline],.is-inline) {\n min-width: 0;\n}\n\n/* basecoat@1.0.2 components/combobox.css .combobox-chips — flex w-full min-w-0\n flex-wrap items-center */\n/* basecoat@1.0.2 styles/vega.css .combobox-chips — min-h-9 gap-1.5 rounded-md\n border border-input bg-transparent bg-clip-padding px-1.5 py-1.5 text-sm\n shadow-xs transition-[color,box-shadow] focus-within:border-ring\n focus-within:ring-3 focus-within:ring-ring/50 has-[[aria-invalid=true]]:…;\n mono: one row — the value area wraps INSIDE it and the actions stay centred */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\n --_mono-dropdown-table-bc: var(--_mono-dropdown-table-border-color);\n --_mono-dropdown-table-side-bc: var(--mono-dropdown-table-side-border-color, var(--mono-tag-input-side-border-color, var(--_mono-dropdown-table-side-border-color-preset, var(--_mono-dropdown-table-bc))));\n --_mono-dropdown-table-ring: 0 0 #0000;\n\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--_mono-dropdown-table-gap);\n width: 100%;\n min-width: 0;\n min-height: var(--_mono-dropdown-table-height);\n padding-block: var(--_mono-dropdown-table-padding-y);\n padding-inline: var(--_mono-dropdown-table-padding-x);\n outline-style: none;\n border: var(--mono-border-width) solid var(--_mono-dropdown-table-bc);\n border-top-color: var(--_mono-dropdown-table-side-bc);\n border-inline-color: var(--_mono-dropdown-table-side-bc);\n border-radius: var(--_mono-dropdown-table-radius);\n background: var(--_mono-dropdown-table-bg);\n background-clip: padding-box;\n color: var(--_mono-dropdown-table-text);\n box-shadow: var(--_mono-dropdown-table-ring), var(--_mono-dropdown-table-shadow);\n font-family: inherit;\n font-size: var(--_mono-dropdown-table-font-size);\n line-height: var(--_mono-dropdown-table-line-height);\n cursor: pointer;\n transition-property: color, box-shadow, border-color, background-color;\n transition-timing-function: var(--mono-ease);\n transition-duration: var(--mono-duration);\n}\n\n/* focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50 — and\n the OPEN state, which keeps the ring while the keyboard is in the panel */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-trigger],.mono-dropdown-table-trigger):focus-visible,\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-open],.open) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\n --_mono-dropdown-table-bc: var(--_mono-dropdown-table-ring-color);\n --_mono-dropdown-table-ring: 0 0 0 var(--_mono-dropdown-table-ring-width) color-mix(in oklab, var(--_mono-dropdown-table-ring-color) var(--_mono-dropdown-table-ring-alpha), transparent);\n}\n\n/* basecoat@1.0.2 styles/vega.css .combobox-chips — has-[[aria-invalid=true]]:border-destructive\n has-[[aria-invalid=true]]:ring-3 has-[[aria-invalid=true]]:ring-destructive/20 */\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-validation-state=\"invalid\"],:where(.mono-dropdown-table.is-invalid)) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\n --_mono-dropdown-table-bc: var(--mono-mode-invalid-border);\n --_mono-dropdown-table-ring: 0 0 0 var(--_mono-dropdown-table-ring-width) var(--mono-mode-invalid-ring);\n}\n\n/* EXTENSION — valid / warning are the invalid pattern in the role's colour */\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-validation-state=\"valid\"],:where(.mono-dropdown-table.is-valid)) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\n --_mono-dropdown-table-bc: color-mix(in oklab, var(--_mono-dropdown-table-valid) var(--mono-mode-state-border-alpha), transparent);\n --_mono-dropdown-table-ring: 0 0 0 var(--_mono-dropdown-table-ring-width) color-mix(in oklab, var(--_mono-dropdown-table-valid) var(--mono-mode-state-ring-alpha), transparent);\n}\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-validation-state=\"warning\"],:where(.mono-dropdown-table.is-warning)) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\n --_mono-dropdown-table-bc: color-mix(in oklab, var(--_mono-dropdown-table-warning) var(--mono-mode-state-border-alpha), transparent);\n --_mono-dropdown-table-ring: 0 0 0 var(--_mono-dropdown-table-ring-width) color-mix(in oklab, var(--_mono-dropdown-table-warning) var(--mono-mode-state-ring-alpha), transparent);\n}\n\n/* EXTENSION — readonly: a muted surface */\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-readonly],.readonly) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\n background: var(--mono-dropdown-table-readonly-bg, var(--mono-tag-input-readonly-bg, var(--muted)));\n cursor: default;\n}\n\n/* .combobox-chips > input:disabled — opacity-50 (on the box, so the chips fade\n with it). The strip's ‹ › pager opts back in so the chips can still be read. */\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-disabled],.disabled) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\n opacity: 0.5;\n pointer-events: none;\n cursor: not-allowed;\n background: var(--mono-dropdown-table-disabled-bg, var(--mono-tag-input-disabled-bg, var(--_mono-dropdown-table-bg)));\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-disabled],.disabled) :is([mono-dd-scroll],.mono-dropdown-table-scroll):not(:is([mono-idle],.is-idle)) {\n pointer-events: auto;\n cursor: pointer;\n}\n\n/* ── the value area: chips (multi) or one line of text ────────────────── */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-value],.mono-dropdown-table-value) {\n flex: 1 1 auto;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--_mono-dropdown-table-gap);\n min-width: 0;\n /* the chip row is the box's height; an empty value never exceeds it */\n min-height: var(--_mono-dropdown-table-chip-height);\n overflow: hidden;\n color: var(--_mono-dropdown-table-text);\n}\n\n/* EXTENSION — a text value (single select, or the placeholder) sits where a\n `.select` puts its text (px-3), not where a chip does (px-1.5): the inset is\n what keeps this field's text in line with a `<mono-select>` beside it. */\n:is([mono-dropdown-table],.mono-dropdown-table):not([mono-multiple][mono-has-value]) :is([mono-dd-value],.mono-dropdown-table-value) {\n padding-inline-start: var(--mono-dropdown-table-text-inset, calc(var(--mono-spacing) * 1.5));\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-value],.mono-dropdown-table-value):is([mono-dd-placeholder],.mono-dropdown-table-placeholder) {\n color: var(--_mono-dropdown-table-placeholder);\n white-space: nowrap;\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-value],.mono-dropdown-table-value) > span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* =========================================\n Chips\n ========================================= */\n\n/* basecoat@1.0.2 components/combobox.css .combobox-chip — inline-flex w-fit\n shrink-0 items-center whitespace-nowrap */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) {\n display: inline-flex;\n width: fit-content;\n max-width: 100%;\n flex-shrink: 0;\n align-items: center;\n white-space: nowrap;\n vertical-align: middle;\n line-height: 1;\n}\n\n/* basecoat@1.0.2 styles/vega.css .combobox-chip — h-5.5 gap-1 rounded-sm bg-muted\n px-1.5 text-xs font-medium text-foreground, has-[>.combobox-chip-remove]:pe-0 */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) > [mono-dd-chip-main] {\n display: inline-flex;\n align-items: center;\n height: var(--_mono-dropdown-table-chip-height);\n max-width: 100%;\n gap: var(--mono-dropdown-table-chip-content-gap, var(--mono-tag-input-chip-content-gap, var(--mono-spacing)));\n margin: 0;\n padding-inline: var(--mono-dropdown-table-chip-padding-x, var(--mono-tag-input-chip-padding-x, calc(var(--mono-spacing) * 1.5)));\n border: 0;\n border-radius: var(--mono-dropdown-table-chip-radius, var(--mono-tag-input-chip-radius, var(--mono-radius-sm)));\n background: var(--mono-dropdown-table-chip-bg, var(--mono-tag-input-chip-bg, var(--muted)));\n color: var(--mono-dropdown-table-chip-color, var(--mono-tag-input-chip-color, var(--_mono-dropdown-table-text)));\n font-family: inherit;\n font-size: var(--_mono-dropdown-table-chip-font-size);\n line-height: var(--_mono-dropdown-table-chip-line-height);\n font-weight: var(--mono-dropdown-table-chip-font-weight, var(--mono-tag-input-chip-font-weight, var(--mono-font-weight-medium)));\n text-decoration: none;\n cursor: default;\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-removable] > [mono-dd-chip-main] {\n padding-inline-end: 0;\n}\n\n/* EXTENSION — `chip.rounded`: the chip's own corner scale over the combobox\n chip's rounded-sm (the same words `<mono-chip rounded>` takes) */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"none\"] > [mono-dd-chip-main] { border-radius: 0; }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"xs\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-xs); }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"sm\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-sm); }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"md\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-md); }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"lg\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-lg); }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"xl\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-xl); }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"xxl\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-2xl); }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"full\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-full); }\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-content] {\n display: inline-flex;\n align-items: center;\n gap: inherit;\n min-width: 0;\n max-width: 100%;\n height: 100%;\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-label] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* EXTENSION — `chip.dot`: a coloured dot before the label (the badge's dot idiom) */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-dot] {\n flex: 0 0 auto;\n width: calc(var(--mono-spacing) * 1.5);\n height: calc(var(--mono-spacing) * 1.5);\n border-radius: var(--mono-radius-full);\n background: currentColor;\n}\n\n/* EXTENSION — `chip.color` pins a hue: the tonal pattern (bg-x/10 text-x, dark 20).\n Without one the chips follow the field's `color` — the ring colour — the way\n they always did here. */\n:is([mono-dropdown-table],.mono-dropdown-table):not(:is(:not([mono-color]), :is([mono-color=\"primary\"],:where(.mono-dropdown-table.primary)))) :is([mono-dd-chip],.mono-dropdown-table-chip):not([mono-dd-chip-color]) > [mono-dd-chip-main] {\n background: color-mix(in oklab, var(--_mono-dropdown-table-ring-color) var(--mono-mode-tint), transparent);\n color: var(--_mono-dropdown-table-ring-color);\n}\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"primary\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--primary) var(--mono-mode-tint), transparent); color: var(--primary); }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"secondary\"] > [mono-dd-chip-main] { background: var(--secondary); color: var(--secondary-foreground); }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"success\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--success) var(--mono-mode-tint), transparent); color: var(--success); }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"danger\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--destructive) var(--mono-mode-tint), transparent); color: var(--destructive); }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"warning\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--warning) var(--mono-mode-tint), transparent); color: var(--warning); }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"info\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--info) var(--mono-mode-tint), transparent); color: var(--info); }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"teal\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--teal) var(--mono-mode-tint), transparent); color: var(--teal); }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"purple\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--purple) var(--mono-mode-tint), transparent); color: var(--purple); }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"neutral\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--neutral) var(--mono-mode-tint), transparent); color: var(--neutral); }\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"dark\"] > [mono-dd-chip-main] { background: var(--dark); color: var(--dark-foreground); }\n\n/* basecoat@1.0.2 components/combobox.css .combobox-chip-remove — inline-flex\n shrink-0 items-center justify-center */\n/* basecoat@1.0.2 styles/vega.css .combobox-chip-remove — -ms-1 opacity-50\n hover:opacity-100, svg size-3.5 */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-close] {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n /* explicit: the element still carries chip.css's `.chip-close` class as a hook,\n which pins a 1rem box — the raw markup has no such class */\n width: auto;\n height: 100%;\n min-width: 0;\n margin: 0;\n transform: none;\n margin-inline-start: calc(var(--mono-spacing) * -1);\n padding: 0 var(--mono-spacing);\n border: 0;\n border-radius: inherit;\n background: transparent;\n color: inherit;\n font: inherit;\n line-height: 1;\n opacity: 0.5;\n cursor: pointer;\n outline-style: none;\n transition-property: opacity;\n transition-timing-function: var(--mono-ease);\n transition-duration: var(--mono-duration);\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-close]:focus-visible {\n opacity: 1;\n}\n\n@media (hover: hover) {\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-close]:hover {\n opacity: 1;\n }\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-close] > :is(svg, .mono-icon, :is([mono-icon],.mono-icon)) {\n display: block;\n width: calc(var(--mono-spacing) * 3.5);\n height: calc(var(--mono-spacing) * 3.5);\n pointer-events: none;\n}\n\n/* EXTENSION — the \"+N more\" counter chip is a control */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip):is([mono-dd-more],.mono-dropdown-table-more) > [mono-dd-chip-main] {\n cursor: pointer;\n outline-style: none;\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip):is([mono-dd-more],.mono-dropdown-table-more) > [mono-dd-chip-main]:focus-visible {\n box-shadow: 0 0 0 var(--_mono-dropdown-table-ring-width) color-mix(in oklab, var(--_mono-dropdown-table-ring-color) var(--_mono-dropdown-table-ring-alpha), transparent);\n}\n\n@media (hover: hover) {\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip):is([mono-dd-more],.mono-dropdown-table-more) > [mono-dd-chip-main]:hover {\n background: var(--mono-mode-surface-hover);\n }\n}\n\n/* ── the inline chip strip (`chip.behaviour: 'inline'`) ──────────────────\n One line that never grows: the value stops wrapping, the chips live in their\n own strip, and the strip absorbs the overflow instead of the field.\n\n `overflow-x: hidden` — NOT `auto` — is the whole scroll contract. Hidden still\n honours a programmatic `scrollLeft`, so `ChipStripController` can page the\n strip while the browser paints no scrollbar and refuses to scroll it from the\n wheel, a click-drag or the arrow keys. */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-value],.mono-dropdown-table-value):is([mono-inline],.is-inline) {\n flex-wrap: nowrap;\n}\n\n/* Two attributes deliberately: the strip is a direct `span` child of the value\n area, so the `[mono-dd-value] > span` ellipsis rule above matches it too. */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-value],.mono-dropdown-table-value) > :is([mono-dd-chip-strip],.mono-dropdown-table-chip-strip) {\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n gap: var(--_mono-dropdown-table-gap);\n flex: 0 1 auto;\n min-width: 0;\n overflow-x: hidden;\n overflow-y: hidden;\n text-overflow: clip;\n /* NO `scroll-behavior: smooth` — see ChipStripController (one scroll event per\n frame would reposition every open popup). */\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip-strip],.mono-dropdown-table-chip-strip) > * {\n flex-shrink: 0;\n}\n\n/* =========================================\n Actions — ‹ › pager, clear, caret\n ========================================= */\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-actions],.mono-dropdown-table-actions) {\n display: flex;\n align-items: center;\n gap: var(--mono-spacing);\n flex: 0 0 auto;\n line-height: 1;\n /* The row's buttons are size-6 — 2px taller than a chip — and they sit IN the\n flex row (centred beside a wrapping value, unlike tag-input's pinned corner),\n so on their own they would floor the field 2px above the token. A negative\n block margin folds that back: the row costs exactly one chip height. */\n margin-block: calc((var(--_mono-dropdown-table-chip-height) - var(--_mono-dropdown-table-action)) / 2);\n}\n\n/* basecoat@1.0.2 components/combobox.css .combobox [data-clear] — size-6 border-0\n bg-transparent p-0 text-current; the caret ≡ .combobox-trigger-icon (size-4\n text-muted-foreground), the pager the same box. Painted as .btn[data-variant='ghost']. */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-clear],.mono-dropdown-table-clear),\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-arrow],.mono-dropdown-table-arrow),\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-scroll],.mono-dropdown-table-scroll) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n width: var(--_mono-dropdown-table-action);\n height: var(--_mono-dropdown-table-action);\n margin: 0;\n padding: 0;\n border: 0;\n border-radius: var(--mono-dropdown-table-clear-radius, var(--mono-tag-input-clear-radius, calc(var(--radius) - 5px)));\n background: transparent;\n color: var(--_mono-dropdown-table-muted);\n font: inherit;\n line-height: 1;\n cursor: pointer;\n outline-style: none;\n transition-property: color, background-color, transform;\n transition-timing-function: var(--mono-ease);\n transition-duration: var(--mono-duration);\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is(:is([mono-dd-clear],.mono-dropdown-table-clear), :is([mono-dd-arrow],.mono-dropdown-table-arrow), :is([mono-dd-scroll],.mono-dropdown-table-scroll)) > :is(svg, .mono-icon, :is([mono-icon],.mono-icon)) {\n display: block;\n width: var(--_mono-dropdown-table-icon);\n height: var(--_mono-dropdown-table-icon);\n pointer-events: none;\n transition-property: transform;\n transition-timing-function: var(--mono-ease);\n transition-duration: var(--mono-duration);\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-clear],.mono-dropdown-table-clear) > :is(svg, .mono-icon, :is([mono-icon],.mono-icon)) {\n width: var(--_mono-dropdown-table-clear-glyph);\n height: var(--_mono-dropdown-table-clear-glyph);\n}\n\n/* basecoat@1.0.2 styles/vega.css .btn[data-variant='ghost'] — hover:bg-muted hover:text-foreground */\n@media (hover: hover) {\n :is([mono-dropdown-table],.mono-dropdown-table) :is(:is([mono-dd-clear],.mono-dropdown-table-clear), :is([mono-dd-arrow],.mono-dropdown-table-arrow), :is([mono-dd-scroll],.mono-dropdown-table-scroll)):hover {\n background: var(--mono-mode-ghost-hover);\n color: var(--_mono-dropdown-table-text);\n }\n}\n\n/* EXTENSION — the caret turns while the panel is open */\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-open],.open) :is([mono-dd-arrow],.mono-dropdown-table-arrow) > :is(svg, .mono-icon, :is([mono-icon],.mono-icon)) {\n transform: rotate(180deg);\n}\n\n/* At an end of the strip the pager keeps its box but disappears — hiding it with\n `display: none` would shrink the row and shove the strip sideways mid-click. */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-scroll],.mono-dropdown-table-scroll):is([mono-idle],.is-idle) {\n visibility: hidden;\n pointer-events: none;\n}\n\n/* =========================================\n The \"+N more\" overflow panel — a popover holding the overflow chips\n ========================================= */\n\n/* basecoat@1.0.2 styles/vega.css .combobox [data-popover] — bg-popover ring-1\n ring-foreground/10 rounded-md shadow-md; EXTENSION: p-1.5 gap-1.5 flex-wrap.\n Portaled to <body> and placed `fixed` from the \"+N more\" chip by its own\n popup controller in the light build; in the shadow build `_positionMorePanel`\n runs the same math in place — the absolute rule is the pre-placement fallback. */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-more],.mono-dropdown-table-more) {\n position: absolute;\n top: calc(100% + calc(var(--mono-spacing) * 1.5));\n left: 0;\n z-index: var(--mono-popup-z, 1000);\n display: none;\n flex-wrap: wrap;\n align-items: flex-start;\n gap: var(--_mono-dropdown-table-gap);\n max-width: 20rem;\n /* `--mono-popup-avail-h` = the room left on the side the panel opened on. */\n max-height: min(14rem, var(--mono-popup-avail-h, 100vh));\n overflow: auto;\n /* Portaled + anchored: a chained scroll would drag this panel off-screen. */\n overscroll-behavior: contain;\n padding: calc(var(--mono-spacing) * 1.5);\n border-radius: var(--mono-dropdown-table-dropdown-radius, var(--mono-tag-input-dropdown-radius, var(--mono-radius-md)));\n background: var(--mono-dropdown-table-dropdown-bg, var(--mono-tag-input-dropdown-bg, var(--popover)));\n color: var(--mono-dropdown-table-dropdown-color, var(--mono-tag-input-dropdown-color, var(--popover-foreground)));\n box-shadow: var(--mono-dropdown-table-dropdown-ring, var(--mono-tag-input-dropdown-ring, 0 0 0 1px color-mix(in oklab, var(--foreground) 10%, transparent))), var(--mono-dropdown-table-dropdown-shadow, var(--mono-tag-input-dropdown-shadow, var(--mono-shadow-md)));\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-more-open],.more-open) :is([mono-dd-more],.mono-dropdown-table-more) {\n display: flex;\n}\n\n/* =========================================\n The panel — sized by the `dropdown` prop, NOT the field\n ========================================= */\n\n/* basecoat@1.0.2 components/popover.css [data-popover] — absolute z-50 overflow;\n mono: `display: none` while closed, `position: fixed` (the popup controller\n sets top/left), `--mono-popup-z` from the shared stack */\n/* basecoat@1.0.2 styles/vega.css .combobox [data-popover] — bg-popover\n text-popover-foreground ring-foreground/10 rounded-md p-0 shadow-md ring-1;\n EXTENSION: a flex column of three regions, the middle one scrolling */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-panel],.mono-dropdown-table-panel) {\n display: none;\n position: fixed;\n z-index: var(--mono-popup-z, 1000);\n flex-direction: column;\n width: max-content;\n min-width: var(--mono-dropdown-table-dropdown-min-width, 18rem);\n max-width: min(90vw, 60rem);\n /* Two independent caps, combined so neither can clobber the other:\n --_mono-dropdown-table-panel-max-h the consumer's `:dropdown.prop=\"{ maxHeight }\"` (else 60vh)\n --mono-popup-avail-h the room actually left between the field and the\n viewport edge on the side the panel opened on */\n max-height: min(var(--_mono-dropdown-table-panel-max-h, 60vh), var(--mono-popup-avail-h, 100vh));\n overflow: hidden;\n isolation: isolate;\n border-radius: var(--mono-dropdown-table-dropdown-radius, var(--mono-tag-input-dropdown-radius, var(--mono-radius-md)));\n background: var(--mono-dropdown-table-dropdown-bg, var(--mono-tag-input-dropdown-bg, var(--popover)));\n color: var(--mono-dropdown-table-dropdown-color, var(--mono-tag-input-dropdown-color, var(--popover-foreground)));\n box-shadow: var(--mono-dropdown-table-dropdown-ring, var(--mono-tag-input-dropdown-ring, 0 0 0 1px color-mix(in oklab, var(--foreground) 10%, transparent))), var(--mono-dropdown-table-dropdown-shadow, var(--mono-tag-input-dropdown-shadow, var(--mono-shadow-md)));\n font-size: var(--_mono-dropdown-table-font-size);\n line-height: var(--_mono-dropdown-table-line-height);\n outline-style: none;\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-open],.open) :is([mono-dd-panel],.mono-dropdown-table-panel) {\n display: flex;\n}\n\n/* The panel is a container; its own ring would just outline the whole popup. */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-panel],.mono-dropdown-table-panel):focus,\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-panel],.mono-dropdown-table-panel):focus-visible {\n outline: none;\n}\n\n/* EXTENSION — the search box above the rows, the pager below, on hairlines */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"search\"],:where(.mono-dropdown-table-region.search)) {\n flex: 0 0 auto;\n padding: var(--mono-dropdown-table-region-padding, calc(var(--mono-spacing) * 2));\n border-bottom: var(--mono-border-width) solid var(--border);\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"body\"],:where(.mono-dropdown-table-region.body)) {\n flex: 1 1 auto;\n /* `min-height: 0` lets the body shrink below its content height inside the flex\n column — without it the region floors at its intrinsic size and the panel\n overflows its own max-height instead of scrolling the table. */\n min-height: 0;\n overflow: auto;\n overscroll-behavior: contain;\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"foot\"],:where(.mono-dropdown-table-region.foot)) {\n flex: 0 0 auto;\n padding: var(--mono-dropdown-table-region-padding, calc(var(--mono-spacing) * 2));\n border-top: var(--mono-border-width) solid var(--border);\n}\n\n/* light: a region with nothing captured is `:empty`; shadow: regions wrap a\n `<slot>` (never `:empty`), so the element marks an unassigned one `mono-empty` */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region],.mono-dropdown-table-region):empty,\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region],.mono-dropdown-table-region)[mono-empty] {\n display: none;\n}\n\n/* =========================================\n The rows — the ported table's own rows, in TWO contexts\n -----------------------------------------\n light: the captured `<table mono-table>` inside the (portaled) body region;\n shadow: the SLOTTED table — a light-DOM child of the host, so the host tag is\n the scope (these rules reach it from the page sheet, not the shadow one).\n\n A picked row is the TABLE's `mono-selected` row (the element sets it, the same\n attribute `<mono-table-checkbox>` sets), so the table's own wash + rail paint\n it and a flavour that retunes `--mono-table-selected-bg` retunes it here. The\n keyboard cursor is Basecoat's `.active` option — the `--muted` row, like hover.\n ========================================= */\n\n/* basecoat@1.0.2 styles/vega.css .table tr — hover:bg-muted/50; the table ships\n with hover off, the picker turns it on through the table's PUBLIC knob */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"body\"],:where(.mono-dropdown-table-region.body)),\nmono-shadow-dropdown-table {\n --mono-table-hover-bg: var(--mono-dropdown-table-row-hover-bg, color-mix(in oklab, var(--muted) 50%, var(--mono-table-surface, var(--background))));\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"body\"],:where(.mono-dropdown-table-region.body)) :is([mono-table],.mono-table) tbody tr[data-row-key],\nmono-shadow-dropdown-table :is([mono-table],.mono-table) tbody tr[data-row-key] {\n cursor: pointer;\n}\n\n/* basecoat@1.0.2 styles/vega.css .select:not(select) [role='option'].active, .select:not(select) [role='option']:focus-visible — bg-muted text-foreground\n Written the way table.css asks a row state to be written:\n the row-colour variable AND the paint, so a pinned cell follows. */\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"body\"],:where(.mono-dropdown-table-region.body)) :is([mono-table],.mono-table) tbody tr:is([mono-dd-active],.mono-dd-row-active),\nmono-shadow-dropdown-table :is([mono-table],.mono-table) tbody tr:is([mono-dd-active],.mono-dd-row-active) {\n --_mono-table-row-bg: var(--mono-dropdown-table-row-active-bg, var(--mono-tag-input-option-active-bg, var(--muted)));\n background: var(--_mono-table-row-bg);\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"body\"],:where(.mono-dropdown-table-region.body)) :is([mono-table],.mono-table) tbody tr:is([mono-selected],.mono-dd-row-selected) > td,\nmono-shadow-dropdown-table :is([mono-table],.mono-table) tbody tr:is([mono-selected],.mono-dd-row-selected) > td {\n font-weight: var(--mono-font-weight-medium);\n}\n\n/* =========================================\n Message\n ========================================= */\n\n/* basecoat@1.0.2 styles/vega.css .fieldset legend + p, .field > p, .field section > p */\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-message],.mono-dropdown-table-message) {\n display: block;\n margin-top: var(--_mono-dropdown-table-gap-y);\n font-size: var(--mono-dropdown-table-message-font-size, var(--mono-tag-input-message-font-size, var(--mono-text-sm)));\n line-height: var(--mono-dropdown-table-message-line-height, var(--mono-tag-input-message-line-height, var(--mono-leading-normal)));\n font-weight: var(--mono-font-weight-normal);\n text-align: start;\n color: var(--_mono-dropdown-table-muted);\n}\n\n/* basecoat@1.0.2 styles/vega.css .field [role=\"alert\"] — text-destructive text-sm */\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-message=\"invalid\"],:where(.mono-dropdown-table-message.invalid)) {\n color: var(--_mono-dropdown-table-invalid);\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-message=\"valid\"],:where(.mono-dropdown-table-message.valid)) {\n color: var(--_mono-dropdown-table-valid);\n}\n\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-message=\"warning\"],:where(.mono-dropdown-table-message.warning)) {\n color: var(--_mono-dropdown-table-warning);\n}\n\n@media (prefers-reduced-motion: reduce) {\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-trigger],.mono-dropdown-table-trigger),\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-clear],.mono-dropdown-table-clear),\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-arrow],.mono-dropdown-table-arrow),\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-scroll],.mono-dropdown-table-scroll),\n :is([mono-dropdown-table],.mono-dropdown-table) [mono-dd-chip-close] {\n transition: none;\n }\n}\n\n/* =========================================\n label-position — the slots form/label-position.css reads\n (top / notched / left / right; public knobs: --mono-dropdown-table-label-width,\n -label-side-gap, -label-notch-font-size, -label-notch-bg)\n ========================================= */\n\n[mono-dropdown-table][mono-label-position] {\n --_mono-lp-width: var(--mono-dropdown-table-label-width, auto);\n --_mono-lp-gap: var(--mono-dropdown-table-label-side-gap, calc(var(--mono-spacing) * 3));\n --_mono-lp-height: var(--_mono-dropdown-table-height);\n --_mono-lp-box-min: var(--_mono-dropdown-table-height);\n /* + the single-value text inset (multi chips start at the padding) */\n --_mono-lp-padding-x: calc(var(--_mono-dropdown-table-padding-x) + var(--mono-dropdown-table-text-inset, calc(var(--mono-spacing) * 1.5)));\n --_mono-lp-padding-y: var(--_mono-dropdown-table-padding-y);\n --_mono-lp-font: var(--mono-dropdown-table-label-notch-font-size, var(--mono-text-xs));\n --_mono-lp-notch-bg: var(--mono-dropdown-table-label-notch-bg, var(--background));\n --_mono-lp-field-bg: var(--_mono-dropdown-table-bg);\n}\n";
1344
+ var dropdown_table_css_raw_default = "/* LEGACY CLASS ALIASES — every `[mono-x]` below is wrapped as `:is([mono-x], .legacy)`\r\n by `scripts/legacy-class-alias.mjs` (`.mono-dropdown-table-region.body`,\r\n `tr.mono-dd-row-selected`, …), so host CSS and hand-written markup on the pre-port\r\n class contract keep painting. Author with the attribute only; re-run the script. */\r\n/* =========================================================================\r\n mono-dropdown-table — a dropdown whose panel is a native `<table>` for\r\n picking row(s). An EXTENSION: Basecoat has no table picker, so the FIELD is\r\n the multi-select combobox's chip box (`.combobox-chips` + `.combobox-chip`,\r\n basecoat-css@1.0.2, vega style) on the `.field` / `.label` chrome, and the\r\n PANEL is the combobox's `[data-popover]` holding a ported `<table mono-table>`\r\n instead of a listbox — so the rows are the table's own rows.\r\n\r\n Styled by ATTRIBUTE, like Basecoat — and the attributes mirror the element's\r\n props one for one, so hand-written markup reads like the Lit / Vue tag:\r\n\r\n <mono-dropdown-table size=\"sm\" color=\"danger\" label=\"Owner\" clearable multiple>\r\n <div mono-dropdown-table mono-size=\"sm\" mono-color=\"danger\" mono-clearable mono-multiple>\r\n <label mono-dd-label>Owner</label>\r\n <div mono-dd-control>\r\n <div mono-dd-trigger role=\"combobox\">\r\n <span mono-dd-value>\r\n <div mono-dd-chip mono-dd-removable><span mono-dd-chip-main><span mono-dd-chip-content>\r\n <span mono-dd-chip-label>Ada</span><button mono-dd-chip-close>…</button></span></span></div>\r\n </span>\r\n <span mono-dd-actions><span mono-dd-arrow>…</span></span>\r\n </div>\r\n </div>\r\n <div mono-dd-panel><div mono-dd-region=\"body\"><table mono-table>…</table></div></div>\r\n </div>\r\n\r\n An absent attribute is the prop's default (`:not([mono-size])` = md,\r\n `:not([mono-color])` = primary, `:not([mono-variant])` = outlined). The element\r\n renders these attributes on its wrapper (both builds) plus the STATES\r\n `mono-open` / `mono-more-open` / `mono-has-value` / `mono-side`; the old\r\n classes (`.mono-dropdown-table.sm.open`) are still emitted as inert hooks until\r\n 2.0 but no rule here reads them. The chips are NOT `.mono-chip`s any more: they\r\n are Basecoat combobox chips painted here, and chip.css never sees them.\r\n\r\n THE PARTS ARE FAMILY-UNIQUE (`mono-dd-*`), never the bare `mono-chip` /\r\n `mono-panel` / `mono-actions` the field components use: the panel holds a whole\r\n `<table mono-table>` whose cells may carry a consumer's `<mono-chip>`, and a\r\n `[mono-dropdown-table] [mono-chip]` rule would repaint it.\r\n\r\n Selector map (ours ≡ upstream):\r\n [mono-dropdown-table] ≡ .field (gap-3, as margins) + .combobox (position: relative)\r\n [mono-dropdown-table] > [mono-dd-label] ≡ .field > label / .label\r\n [mono-dd-trigger] ≡ .combobox-chips (min-h-9 gap-1.5 rounded-md border-input px-1.5 py-1.5 text-sm shadow-xs)\r\n [mono-dd-value] ≡ the chip row; EXTENSION: the single value / placeholder text\r\n [mono-dd-chip] > [mono-dd-chip-main] ≡ .combobox-chip (h-5.5 gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium)\r\n [mono-dd-chip] [mono-dd-chip-close] ≡ .combobox-chip-remove (-ms-1 opacity-50 hover:100, svg size-3.5)\r\n [mono-dd-chip][mono-dd-more] ≡ EXTENSION (the \"+N more\" counter chip, same box)\r\n [mono-dd-actions] > [mono-dd-arrow] > svg ≡ .combobox-trigger-icon (size-4 text-muted-foreground)\r\n [mono-dd-actions] > [mono-dd-clear] ≡ .combobox [data-clear] (size-6, painted as .btn[data-variant='ghost'])\r\n [mono-dd-actions] > [mono-dd-scroll] ≡ EXTENSION (the inline strip's ‹ › pager, same box)\r\n [mono-dd-panel] ≡ .combobox [data-popover] (bg-popover ring-1 rounded-md shadow-md); EXTENSION: a flex column of regions\r\n [mono-dd-region=\"search|body|foot\"] ≡ EXTENSION (search box / the scrolling table / the pager)\r\n [mono-dd-more] ≡ [data-popover] holding the overflow chips\r\n [mono-table] tbody tr[mono-selected] ≡ .table tr data-[state=selected] — the TABLE's own rule paints it\r\n [mono-table] tbody tr[mono-dd-active] ≡ .combobox [role='option'].active (bg-muted) — the keyboard cursor\r\n [mono-dd-message=\"…\"] ≡ .field > p / .field [role='alert']\r\n [mono-validation-state=\"invalid\"] ≡ .combobox-chips:has([aria-invalid=true]) + .field[data-invalid]\r\n [mono-validation-state=\"valid|warning\"] ≡ EXTENSION (the invalid pattern in --success / --warning)\r\n [mono-size=\"xs|sm|lg|xl|xxl\"] ≡ EXTENSION (the --mono-control-height-* ladder)\r\n [mono-variant=\"filled\"] ≡ EXTENSION (luma's .combobox-chips)\r\n [mono-variant=\"underlined\"] ≡ EXTENSION (sera's .combobox-chips: bottom edge only, no ring)\r\n\r\n FLAVORS: the field IS the tag-input's chip box and the panel IS its popover, so\r\n every metric here resolves `--mono-dropdown-table-<k>` → `--mono-tag-input-<k>`\r\n → the base, through the SAME per-size chains tag-input.css uses — a flavour\r\n that retunes the tag-input retunes this field for free, and no flavour file\r\n carries a dropdown-table entry. Every fallback is vega's value.\r\n\r\n THE PANELS ARE PORTALED (light build): [mono-dd-panel] and [mono-dd-more]\r\n move into a `<div data-mono-popup-portal>` under <body> while open, and the\r\n portal mirrors the wrapper's class AND mono-* attributes, so every rule here\r\n is scoped under `[mono-dropdown-table]` and never relies on the panel being\r\n inside the field. The shadow build keeps its panel in the shadow root and\r\n SLOTS the consumer's light-DOM `<table>` into it — the row rules therefore\r\n come in two forms: the portaled table, and the slotted one under the host.\r\n ========================================================================= */\r\n\r\nmono-dropdown-table {\r\n display: block;\r\n width: 100%;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) {\r\n /* ── palette: each slot is a public knob over the tag-input's, over a Basecoat token ── */\r\n --_mono-dropdown-table-text: var(--mono-dropdown-table-text, var(--mono-tag-input-text, var(--foreground)));\r\n --_mono-dropdown-table-placeholder: var(--mono-dropdown-table-placeholder, var(--mono-tag-input-placeholder, var(--muted-foreground)));\r\n --_mono-dropdown-table-muted: var(--mono-dropdown-table-muted, var(--mono-tag-input-muted, var(--muted-foreground)));\r\n --_mono-dropdown-table-primary: var(--mono-dropdown-table-primary, var(--mono-tag-input-primary, var(--ring)));\r\n --_mono-dropdown-table-secondary: var(--mono-dropdown-table-secondary, var(--mono-tag-input-secondary, var(--muted-foreground)));\r\n --_mono-dropdown-table-success: var(--mono-dropdown-table-success, var(--mono-tag-input-success, var(--success)));\r\n --_mono-dropdown-table-danger: var(--mono-dropdown-table-danger, var(--mono-tag-input-danger, var(--destructive)));\r\n --_mono-dropdown-table-warning: var(--mono-dropdown-table-warning, var(--mono-tag-input-warning, var(--warning)));\r\n --_mono-dropdown-table-info: var(--mono-dropdown-table-info, var(--mono-tag-input-info, var(--info)));\r\n --_mono-dropdown-table-teal: var(--mono-dropdown-table-teal, var(--mono-tag-input-teal, var(--teal)));\r\n --_mono-dropdown-table-purple: var(--mono-dropdown-table-purple, var(--mono-tag-input-purple, var(--purple)));\r\n --_mono-dropdown-table-neutral: var(--mono-dropdown-table-neutral, var(--mono-tag-input-neutral, var(--neutral)));\r\n --_mono-dropdown-table-dark: var(--mono-dropdown-table-dark, var(--mono-tag-input-dark, var(--dark)));\r\n --_mono-dropdown-table-valid: var(--mono-dropdown-table-valid, var(--mono-tag-input-valid, var(--success)));\r\n --_mono-dropdown-table-invalid: var(--mono-dropdown-table-invalid, var(--mono-tag-input-invalid, var(--destructive)));\r\n\r\n /* ── the painted result — three tiers, base = .combobox-chips (vega) ──── */\r\n --_mono-dropdown-table-ring-color: var(--mono-dropdown-table-ring-color, var(--mono-dropdown-table-focus-color, var(--_mono-dropdown-table-ring-color-preset, var(--_mono-dropdown-table-primary))));\r\n --_mono-dropdown-table-ring-width: var(--mono-dropdown-table-ring-width, var(--mono-tag-input-ring-width, var(--_mono-dropdown-table-ring-width-preset, var(--mono-ring-width))));\r\n --_mono-dropdown-table-ring-alpha: var(--mono-dropdown-table-ring-alpha, var(--mono-tag-input-ring-alpha, var(--mono-ring-alpha)));\r\n --_mono-dropdown-table-border-color: var(--mono-dropdown-table-rest-border, var(--mono-dropdown-table-border-color, var(--mono-dropdown-table-border, var(--mono-tag-input-rest-border, var(--mono-tag-input-border-color, var(--mono-tag-input-border, var(--_mono-dropdown-table-border-color-preset, var(--input))))))));\r\n --_mono-dropdown-table-bg: var(--mono-dropdown-table-bg, var(--mono-dropdown-table-surface, var(--mono-tag-input-bg, var(--mono-tag-input-surface, var(--_mono-dropdown-table-bg-preset, var(--mono-mode-surface))))));\r\n --_mono-dropdown-table-shadow: var(--mono-dropdown-table-shadow, var(--mono-tag-input-shadow, var(--_mono-dropdown-table-shadow-preset, 0 0 #0000)));\r\n --_mono-dropdown-table-icon: var(--mono-dropdown-table-icon-size, var(--mono-tag-input-icon-size, calc(var(--mono-spacing) * 4)));\r\n\r\n /* ── md metrics live on the unqualified root ON PURPOSE: hand-written\r\n `<div mono-dropdown-table>` that names no size renders exactly like\r\n size=\"md\". basecoat@1.0.2 styles/vega.css .combobox-chips — min-h-9\r\n gap-1.5 rounded-md px-1.5 py-1.5 text-sm; .combobox-chip h-5.5 ── */\r\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-md, var(--mono-tag-input-height-md, var(--mono-control-height-md)));\r\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-md, var(--mono-tag-input-radius-md, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\r\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-md, var(--mono-tag-input-padding-x-md, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, calc(var(--mono-spacing) * 1.5))))));\r\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-md, var(--mono-tag-input-padding-y-md, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, calc(var(--mono-spacing) * 1.5)))));\r\n --_mono-dropdown-table-gap: var(--mono-dropdown-table-chip-gap, var(--mono-tag-input-chip-gap, calc(var(--mono-spacing) * 1.5)));\r\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-md, var(--mono-tag-input-font-md, var(--mono-text-sm)));\r\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-md, var(--mono-tag-input-line-height-md, var(--mono-text-sm--lh)))));\r\n /* Same cap as tag-input's (see tag-input.css): one row of chips never outgrows the field's height. */\r\n --_mono-dropdown-table-chip-fit: calc(var(--_mono-dropdown-table-height) - 2 * var(--_mono-dropdown-table-padding-y) - 2 * var(--mono-border-width));\r\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-md, var(--mono-tag-input-chip-height-md, min(calc(var(--mono-spacing) * 5.5), var(--_mono-dropdown-table-chip-fit))));\r\n --_mono-dropdown-table-chip-font-size: var(--mono-dropdown-table-chip-font-size, var(--mono-tag-input-chip-font-size, var(--mono-text-xs)));\r\n --_mono-dropdown-table-chip-line-height: var(--mono-dropdown-table-chip-line-height, var(--mono-tag-input-chip-line-height, var(--mono-text-xs--lh)));\r\n --_mono-dropdown-table-action: calc(var(--mono-spacing) * 6);\r\n --_mono-dropdown-table-clear-glyph: calc(var(--mono-spacing) * 3.5);\r\n\r\n /* basecoat@1.0.2 styles/vega.css .field — flex w-full flex-col gap-3; mono:\r\n BLOCK flow with the gap as margins (see tag-input.css) */\r\n --_mono-dropdown-table-gap-y: var(--mono-dropdown-table-gap, var(--mono-tag-input-gap, calc(var(--mono-spacing) * 3)));\r\n position: relative;\r\n display: block;\r\n width: 100%;\r\n font-family: inherit;\r\n color: var(--_mono-dropdown-table-text);\r\n}\r\n\r\n/* The page's global `* { box-sizing: border-box }` does NOT cross the shadow\r\n boundary; without this the trigger's `min-height` would be its CONTENT height\r\n there (40px → 56px). Rewrites to `:host, :host *` in the shadow sheet. */\r\nmono-dropdown-table,\r\nmono-dropdown-table *,\r\n:is([mono-dropdown-table],.mono-dropdown-table),\r\n:is([mono-dropdown-table],.mono-dropdown-table) *,\r\n:is([mono-dropdown-table],.mono-dropdown-table) *::before,\r\n:is([mono-dropdown-table],.mono-dropdown-table) *::after {\r\n box-sizing: border-box;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is(:is([mono-dd-label],.mono-dropdown-table-label), :is([mono-dd-message],.mono-dropdown-table-message))[mono-empty] {\r\n display: none;\r\n}\r\n\r\n/* =========================================\r\n Sizes — an EMPTY field's painted height IS the token (tests/perf/field-heights);\r\n a second row of chips grows it. The same chains as tag-input.css, one tier up.\r\n ========================================= */\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-size=\"xs\"],:where(.mono-dropdown-table.xs)) {\r\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-xs, var(--mono-tag-input-height-xs, var(--mono-control-height-xs)));\r\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-xs, var(--mono-tag-input-radius-xs, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\r\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-xs, var(--mono-tag-input-padding-x-xs, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, var(--mono-spacing))))));\r\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-xs, var(--mono-tag-input-padding-y-xs, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, calc(var(--mono-spacing) * 0.5)))));\r\n --_mono-dropdown-table-gap: var(--mono-dropdown-table-chip-gap, var(--mono-tag-input-chip-gap, var(--mono-spacing)));\r\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-xs, var(--mono-tag-input-font-xs, var(--mono-text-xs)));\r\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-xs, var(--mono-tag-input-line-height-xs, var(--mono-text-xs--lh)))));\r\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-xs, var(--mono-tag-input-chip-height-xs, min(calc(var(--mono-spacing) * 4.5), var(--_mono-dropdown-table-chip-fit))));\r\n --_mono-dropdown-table-icon: var(--mono-dropdown-table-icon-size, var(--mono-tag-input-icon-size, calc(var(--mono-spacing) * 3.5)));\r\n --_mono-dropdown-table-action: calc(var(--mono-spacing) * 4);\r\n --_mono-dropdown-table-clear-glyph: calc(var(--mono-spacing) * 3);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-size=\"sm\"],:where(.mono-dropdown-table.sm)) {\r\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-sm, var(--mono-tag-input-height-sm, var(--mono-control-height-sm)));\r\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-sm, var(--mono-tag-input-radius-sm, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\r\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-sm, var(--mono-tag-input-padding-x-sm, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, var(--mono-spacing))))));\r\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-sm, var(--mono-tag-input-padding-y-sm, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, var(--mono-spacing)))));\r\n --_mono-dropdown-table-gap: var(--mono-dropdown-table-chip-gap, var(--mono-tag-input-chip-gap, var(--mono-spacing)));\r\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-sm, var(--mono-tag-input-font-sm, var(--mono-dropdown-table-font-md, var(--mono-tag-input-font-md, var(--mono-text-sm)))));\r\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-sm, var(--mono-tag-input-line-height-sm, var(--mono-text-sm--lh)))));\r\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-sm, var(--mono-tag-input-chip-height-sm, min(calc(var(--mono-spacing) * 5), var(--_mono-dropdown-table-chip-fit))));\r\n --_mono-dropdown-table-action: calc(var(--mono-spacing) * 5);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-size=\"lg\"],:where(.mono-dropdown-table.lg)) {\r\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-lg, var(--mono-tag-input-height-lg, var(--mono-control-height-lg)));\r\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-lg, var(--mono-tag-input-radius-lg, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\r\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-lg, var(--mono-tag-input-padding-x-lg, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, calc(var(--mono-spacing) * 1.5))))));\r\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-lg, var(--mono-tag-input-padding-y-lg, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, calc(var(--mono-spacing) * 1.5)))));\r\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-lg, var(--mono-tag-input-font-lg, var(--mono-dropdown-table-font-md, var(--mono-tag-input-font-md, var(--mono-text-sm)))));\r\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-lg, var(--mono-tag-input-line-height-lg, var(--mono-text-sm--lh)))));\r\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-lg, var(--mono-tag-input-chip-height-lg, min(calc(var(--mono-spacing) * 6), var(--_mono-dropdown-table-chip-fit))));\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-size=\"xl\"],:where(.mono-dropdown-table.xl)) {\r\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-xl, var(--mono-tag-input-height-xl, var(--mono-control-height-xl)));\r\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-xl, var(--mono-tag-input-radius-xl, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\r\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-xl, var(--mono-tag-input-padding-x-xl, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, calc(var(--mono-spacing) * 2))))));\r\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-xl, var(--mono-tag-input-padding-y-xl, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, calc(var(--mono-spacing) * 2)))));\r\n --_mono-dropdown-table-gap: var(--mono-dropdown-table-chip-gap, var(--mono-tag-input-chip-gap, calc(var(--mono-spacing) * 2)));\r\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-xl, var(--mono-tag-input-font-xl, var(--mono-text-base)));\r\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-xl, var(--mono-tag-input-line-height-xl, var(--mono-text-base--lh)))));\r\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-xl, var(--mono-tag-input-chip-height-xl, min(calc(var(--mono-spacing) * 6.5), var(--_mono-dropdown-table-chip-fit))));\r\n --_mono-dropdown-table-chip-font-size: var(--mono-dropdown-table-chip-font-size, var(--mono-tag-input-chip-font-size, var(--mono-text-sm)));\r\n --_mono-dropdown-table-chip-line-height: var(--mono-dropdown-table-chip-line-height, var(--mono-tag-input-chip-line-height, var(--mono-text-sm--lh)));\r\n --_mono-dropdown-table-icon: var(--mono-dropdown-table-icon-size, var(--mono-tag-input-icon-size, calc(var(--mono-spacing) * 5)));\r\n --_mono-dropdown-table-action: calc(var(--mono-spacing) * 7);\r\n --_mono-dropdown-table-clear-glyph: calc(var(--mono-spacing) * 4);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-size=\"xxl\"],:where(.mono-dropdown-table.xxl)) {\r\n --_mono-dropdown-table-height: var(--mono-dropdown-table-height-xxl, var(--mono-tag-input-height-xxl, var(--mono-control-height-xxl)));\r\n --_mono-dropdown-table-radius: var(--mono-dropdown-table-radius-xxl, var(--mono-tag-input-radius-xxl, var(--_mono-dropdown-table-radius-preset, var(--mono-dropdown-table-radius, var(--mono-tag-input-radius, var(--mono-radius-md))))));\r\n --_mono-dropdown-table-padding-x: var(--mono-dropdown-table-padding-x-xxl, var(--mono-tag-input-padding-x-xxl, var(--mono-dropdown-table-padding-x, var(--mono-tag-input-padding-x, var(--_mono-dropdown-table-padding-x-preset, calc(var(--mono-spacing) * 2.5))))));\r\n --_mono-dropdown-table-padding-y: var(--mono-dropdown-table-padding-y-xxl, var(--mono-tag-input-padding-y-xxl, var(--mono-dropdown-table-padding-y, var(--mono-tag-input-padding-y, calc(var(--mono-spacing) * 2)))));\r\n --_mono-dropdown-table-gap: var(--mono-dropdown-table-chip-gap, var(--mono-tag-input-chip-gap, calc(var(--mono-spacing) * 2)));\r\n --_mono-dropdown-table-font-size: var(--mono-dropdown-table-font-xxl, var(--mono-tag-input-font-xxl, var(--mono-text-lg)));\r\n --_mono-dropdown-table-line-height: var(--mono-dropdown-table-line-height, var(--mono-tag-input-line-height, var(--mono-dropdown-table-line-height-xxl, var(--mono-tag-input-line-height-xxl, var(--mono-text-lg--lh)))));\r\n --_mono-dropdown-table-chip-height: var(--mono-dropdown-table-chip-height-xxl, var(--mono-tag-input-chip-height-xxl, min(calc(var(--mono-spacing) * 7), var(--_mono-dropdown-table-chip-fit))));\r\n --_mono-dropdown-table-chip-font-size: var(--mono-dropdown-table-chip-font-size, var(--mono-tag-input-chip-font-size, var(--mono-text-sm)));\r\n --_mono-dropdown-table-chip-line-height: var(--mono-dropdown-table-chip-line-height, var(--mono-tag-input-chip-line-height, var(--mono-text-sm--lh)));\r\n --_mono-dropdown-table-icon: var(--mono-dropdown-table-icon-size, var(--mono-tag-input-icon-size, calc(var(--mono-spacing) * 5)));\r\n --_mono-dropdown-table-action: calc(var(--mono-spacing) * 8);\r\n --_mono-dropdown-table-clear-glyph: calc(var(--mono-spacing) * 4);\r\n}\r\n\r\n/* =========================================\r\n Variants — each writes only `*-preset` slots, read from the dropdown-table's\r\n knob first and the tag-input's second (a flavour writes the latter)\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .combobox-chips — rounded-md border border-input\r\n bg-transparent shadow-xs (dark:bg-input/30 via --mono-mode-surface) */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is(:not([mono-variant]), :is([mono-variant=\"outlined\"],:where(.mono-dropdown-table.outlined))) {\r\n --_mono-dropdown-table-bg-preset: var(--mono-dropdown-table-outline-bg, var(--mono-tag-input-outline-bg));\r\n --_mono-dropdown-table-border-color-preset: var(--mono-dropdown-table-outline-border-color, var(--mono-tag-input-outline-border-color));\r\n --_mono-dropdown-table-side-border-color-preset: var(--mono-dropdown-table-outline-side-border-color, var(--mono-tag-input-outline-side-border-color));\r\n --_mono-dropdown-table-shadow-preset: var(--mono-dropdown-table-outline-shadow, var(--mono-tag-input-outline-shadow, var(--mono-shadow-xs)));\r\n --_mono-dropdown-table-ring-width-preset: var(--mono-dropdown-table-outline-ring-width, var(--mono-tag-input-outline-ring-width));\r\n --_mono-dropdown-table-radius-preset: var(--mono-dropdown-table-outline-radius, var(--mono-tag-input-outline-radius));\r\n --_mono-dropdown-table-padding-x-preset: var(--mono-dropdown-table-outline-padding-x, var(--mono-tag-input-outline-padding-x));\r\n}\r\n\r\n/* EXTENSION — filled ≡ basecoat@1.0.2 styles/luma.css .combobox-chips */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-variant=\"filled\"],:where(.mono-dropdown-table.filled)) {\r\n --_mono-dropdown-table-bg-preset: var(--mono-dropdown-table-filled-bg, var(--mono-tag-input-filled-bg, color-mix(in oklab, var(--input) 50%, transparent)));\r\n --_mono-dropdown-table-border-color-preset: transparent;\r\n --_mono-dropdown-table-shadow-preset: 0 0 #0000;\r\n}\r\n\r\n/* EXTENSION — underlined ≡ basecoat@1.0.2 styles/sera.css .combobox-chips */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-variant=\"underlined\"],:where(.mono-dropdown-table.underlined)) {\r\n --_mono-dropdown-table-bg-preset: transparent;\r\n --_mono-dropdown-table-side-border-color-preset: transparent;\r\n --_mono-dropdown-table-shadow-preset: 0 0 #0000;\r\n --_mono-dropdown-table-ring-width-preset: 0px;\r\n --_mono-dropdown-table-radius-preset: 0;\r\n --_mono-dropdown-table-padding-x-preset: 0;\r\n}\r\n\r\n/* =========================================\r\n Colours — the `color` prop is the FOCUS colour (ring + focused border)\r\n ========================================= */\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is(:not([mono-color]), :is([mono-color=\"primary\"],:where(.mono-dropdown-table.primary))) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-primary);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"secondary\"],:where(.mono-dropdown-table.secondary)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-secondary);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"success\"],:where(.mono-dropdown-table.success)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-success);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"danger\"],:where(.mono-dropdown-table.danger)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-danger);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"warning\"],:where(.mono-dropdown-table.warning)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-warning);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"info\"],:where(.mono-dropdown-table.info)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-info);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"teal\"],:where(.mono-dropdown-table.teal)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-teal);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"purple\"],:where(.mono-dropdown-table.purple)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-purple);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"neutral\"],:where(.mono-dropdown-table.neutral)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-neutral);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-color=\"dark\"],:where(.mono-dropdown-table.dark)) {\r\n --_mono-dropdown-table-ring-color-preset: var(--_mono-dropdown-table-dark);\r\n}\r\n\r\n/* =========================================\r\n Label\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .field > label, .label — flex items-center\r\n gap-2 text-sm leading-none font-medium select-none w-fit */\r\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-label],.mono-dropdown-table-label) {\r\n display: flex;\r\n align-items: center;\r\n width: fit-content;\r\n margin: 0 0 var(--_mono-dropdown-table-gap-y);\r\n gap: var(--mono-dropdown-table-label-gap, var(--mono-tag-input-label-gap, calc(var(--mono-spacing) * 2)));\r\n font-size: var(--mono-dropdown-table-label-font-size, var(--mono-tag-input-label-font-size, var(--mono-text-sm)));\r\n line-height: var(--mono-dropdown-table-label-line-height, var(--mono-tag-input-label-line-height, 1));\r\n font-weight: var(--mono-dropdown-table-label-font-weight, var(--mono-tag-input-label-font-weight, var(--mono-label-font-weight, var(--mono-font-weight-medium))));\r\n text-transform: var(--mono-dropdown-table-label-text-transform, var(--mono-tag-input-label-text-transform, none));\r\n letter-spacing: var(--mono-dropdown-table-label-letter-spacing, var(--mono-tag-input-label-letter-spacing, normal));\r\n color: var(--_mono-dropdown-table-text);\r\n user-select: none;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-disabled],.disabled) > :is([mono-dd-label],.mono-dropdown-table-label) {\r\n opacity: 0.5;\r\n pointer-events: none;\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .field — data-invalid:text-destructive */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-validation-state=\"invalid\"],:where(.mono-dropdown-table.is-invalid)) > :is([mono-dd-label],.mono-dropdown-table-label) {\r\n color: var(--_mono-dropdown-table-invalid);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-required-mark],.mono-dropdown-table-required) {\r\n color: var(--_mono-dropdown-table-danger);\r\n}\r\n\r\n/* `tooltip` prop — the info icon at the end of the label row (the label's\r\n flex gap spaces it). `pointer-events` is restored because a disabled field\r\n switches its label's off, and a disabled field is exactly where the reason\r\n is worth a hover. Knobs: --mono-dropdown-table-label-tooltip-size / -color / -opacity. */\r\n:where(:is([mono-dropdown-table],.mono-dropdown-table)) > :is([mono-dd-label],.mono-dropdown-table-label) > [mono-label-tooltip] {\r\n display: inline-flex;\r\n flex: none;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: var(--mono-dropdown-table-label-tooltip-size, 1.1em);\r\n color: var(--mono-dropdown-table-label-tooltip-color, currentColor);\r\n opacity: var(--mono-dropdown-table-label-tooltip-opacity, 0.6);\r\n border-radius: 9999px;\r\n cursor: help;\r\n pointer-events: auto;\r\n outline: none;\r\n transition: opacity 150ms ease;\r\n}\r\n\r\n:where(:is([mono-dropdown-table],.mono-dropdown-table)) > :is([mono-dd-label],.mono-dropdown-table-label) > [mono-label-tooltip]:is(:hover, :focus-visible) {\r\n opacity: 1;\r\n}\r\n\r\n:where(:is([mono-dropdown-table],.mono-dropdown-table)) > :is([mono-dd-label],.mono-dropdown-table-label) > [mono-label-tooltip]:focus-visible {\r\n outline: 2px solid currentColor;\r\n outline-offset: 2px;\r\n}\r\n\r\n:where(:is([mono-dropdown-table],.mono-dropdown-table)) > :is([mono-dd-label],.mono-dropdown-table-label) > [mono-label-tooltip] > [mono-icon] {\r\n width: 1em;\r\n height: 1em;\r\n}\r\n\r\n/* =========================================\r\n The field — the chip box (role=\"combobox\"; the search box lives in the panel)\r\n ========================================= */\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-control],.mono-dropdown-table-control) {\r\n position: relative;\r\n}\r\n\r\n/* The control is a grid/flex item in a host layout; once the value stops\r\n wrapping (inline strip) its automatic minimum is the full strip — pin it. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-control],.mono-dropdown-table-control):is([mono-inline],.is-inline) {\r\n min-width: 0;\r\n}\r\n\r\n/* basecoat@1.0.2 components/combobox.css .combobox-chips — flex w-full min-w-0\r\n flex-wrap items-center */\r\n/* basecoat@1.0.2 styles/vega.css .combobox-chips — min-h-9 gap-1.5 rounded-md\r\n border border-input bg-transparent bg-clip-padding px-1.5 py-1.5 text-sm\r\n shadow-xs transition-[color,box-shadow] focus-within:border-ring\r\n focus-within:ring-3 focus-within:ring-ring/50 has-[[aria-invalid=true]]:…;\r\n mono: one row — the value area wraps INSIDE it and the actions stay centred */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\r\n --_mono-dropdown-table-bc: var(--_mono-dropdown-table-border-color);\r\n --_mono-dropdown-table-side-bc: var(--mono-dropdown-table-side-border-color, var(--mono-tag-input-side-border-color, var(--_mono-dropdown-table-side-border-color-preset, var(--_mono-dropdown-table-bc))));\r\n --_mono-dropdown-table-ring: 0 0 #0000;\r\n\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n gap: var(--_mono-dropdown-table-gap);\r\n width: 100%;\r\n min-width: 0;\r\n min-height: var(--_mono-dropdown-table-height);\r\n padding-block: var(--_mono-dropdown-table-padding-y);\r\n padding-inline: var(--_mono-dropdown-table-padding-x);\r\n outline-style: none;\r\n border: var(--mono-border-width) solid var(--_mono-dropdown-table-bc);\r\n border-top-color: var(--_mono-dropdown-table-side-bc);\r\n border-inline-color: var(--_mono-dropdown-table-side-bc);\r\n border-radius: var(--_mono-dropdown-table-radius);\r\n background: var(--_mono-dropdown-table-bg);\r\n background-clip: padding-box;\r\n color: var(--_mono-dropdown-table-text);\r\n box-shadow: var(--_mono-dropdown-table-ring), var(--_mono-dropdown-table-shadow);\r\n font-family: inherit;\r\n font-size: var(--_mono-dropdown-table-font-size);\r\n line-height: var(--_mono-dropdown-table-line-height);\r\n cursor: pointer;\r\n transition-property: color, box-shadow, border-color, background-color;\r\n transition-timing-function: var(--mono-ease);\r\n transition-duration: var(--mono-duration);\r\n}\r\n\r\n/* focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50 — and\r\n the OPEN state, which keeps the ring while the keyboard is in the panel */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-trigger],.mono-dropdown-table-trigger):focus-visible,\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-open],.open) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\r\n --_mono-dropdown-table-bc: var(--_mono-dropdown-table-ring-color);\r\n --_mono-dropdown-table-ring: 0 0 0 var(--_mono-dropdown-table-ring-width) color-mix(in oklab, var(--_mono-dropdown-table-ring-color) var(--_mono-dropdown-table-ring-alpha), transparent);\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .combobox-chips — has-[[aria-invalid=true]]:border-destructive\r\n has-[[aria-invalid=true]]:ring-3 has-[[aria-invalid=true]]:ring-destructive/20 */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-validation-state=\"invalid\"],:where(.mono-dropdown-table.is-invalid)) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\r\n --_mono-dropdown-table-bc: var(--mono-mode-invalid-border);\r\n --_mono-dropdown-table-ring: 0 0 0 var(--_mono-dropdown-table-ring-width) var(--mono-mode-invalid-ring);\r\n}\r\n\r\n/* EXTENSION — valid / warning are the invalid pattern in the role's colour */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-validation-state=\"valid\"],:where(.mono-dropdown-table.is-valid)) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\r\n --_mono-dropdown-table-bc: color-mix(in oklab, var(--_mono-dropdown-table-valid) var(--mono-mode-state-border-alpha), transparent);\r\n --_mono-dropdown-table-ring: 0 0 0 var(--_mono-dropdown-table-ring-width) color-mix(in oklab, var(--_mono-dropdown-table-valid) var(--mono-mode-state-ring-alpha), transparent);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-validation-state=\"warning\"],:where(.mono-dropdown-table.is-warning)) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\r\n --_mono-dropdown-table-bc: color-mix(in oklab, var(--_mono-dropdown-table-warning) var(--mono-mode-state-border-alpha), transparent);\r\n --_mono-dropdown-table-ring: 0 0 0 var(--_mono-dropdown-table-ring-width) color-mix(in oklab, var(--_mono-dropdown-table-warning) var(--mono-mode-state-ring-alpha), transparent);\r\n}\r\n\r\n/* EXTENSION — readonly: a muted surface */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-readonly],.readonly) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\r\n background: var(--mono-dropdown-table-readonly-bg, var(--mono-tag-input-readonly-bg, var(--muted)));\r\n cursor: default;\r\n}\r\n\r\n/* .combobox-chips > input:disabled — opacity-50 (on the box, so the chips fade\r\n with it). The strip's ‹ › pager opts back in so the chips can still be read. */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-disabled],.disabled) :is([mono-dd-trigger],.mono-dropdown-table-trigger) {\r\n opacity: 0.5;\r\n pointer-events: none;\r\n cursor: not-allowed;\r\n background: var(--mono-dropdown-table-disabled-bg, var(--mono-tag-input-disabled-bg, var(--_mono-dropdown-table-bg)));\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-disabled],.disabled) :is([mono-dd-scroll],.mono-dropdown-table-scroll):not(:is([mono-idle],.is-idle)) {\r\n pointer-events: auto;\r\n cursor: pointer;\r\n}\r\n\r\n/* ── the value area: chips (multi) or one line of text ────────────────── */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-value],.mono-dropdown-table-value) {\r\n flex: 1 1 auto;\r\n display: flex;\r\n flex-wrap: wrap;\r\n align-items: center;\r\n gap: var(--_mono-dropdown-table-gap);\r\n min-width: 0;\r\n /* the chip row is the box's height; an empty value never exceeds it */\r\n min-height: var(--_mono-dropdown-table-chip-height);\r\n overflow: hidden;\r\n color: var(--_mono-dropdown-table-text);\r\n}\r\n\r\n/* EXTENSION — a text value (single select, or the placeholder) sits where a\r\n `.select` puts its text (px-3), not where a chip does (px-1.5): the inset is\r\n what keeps this field's text in line with a `<mono-select>` beside it. */\r\n:is([mono-dropdown-table],.mono-dropdown-table):not([mono-multiple][mono-has-value]) :is([mono-dd-value],.mono-dropdown-table-value) {\r\n padding-inline-start: var(--mono-dropdown-table-text-inset, calc(var(--mono-spacing) * 1.5));\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-value],.mono-dropdown-table-value):is([mono-dd-placeholder],.mono-dropdown-table-placeholder) {\r\n color: var(--_mono-dropdown-table-placeholder);\r\n white-space: nowrap;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-value],.mono-dropdown-table-value) > span {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n/* =========================================\r\n Chips\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/combobox.css .combobox-chip — inline-flex w-fit\r\n shrink-0 items-center whitespace-nowrap */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) {\r\n display: inline-flex;\r\n width: fit-content;\r\n max-width: 100%;\r\n flex-shrink: 0;\r\n align-items: center;\r\n white-space: nowrap;\r\n vertical-align: middle;\r\n line-height: 1;\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .combobox-chip — h-5.5 gap-1 rounded-sm bg-muted\r\n px-1.5 text-xs font-medium text-foreground, has-[>.combobox-chip-remove]:pe-0 */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) > [mono-dd-chip-main] {\r\n display: inline-flex;\r\n align-items: center;\r\n height: var(--_mono-dropdown-table-chip-height);\r\n max-width: 100%;\r\n gap: var(--mono-dropdown-table-chip-content-gap, var(--mono-tag-input-chip-content-gap, var(--mono-spacing)));\r\n margin: 0;\r\n padding-inline: var(--mono-dropdown-table-chip-padding-x, var(--mono-tag-input-chip-padding-x, calc(var(--mono-spacing) * 1.5)));\r\n border: 0;\r\n border-radius: var(--mono-dropdown-table-chip-radius, var(--mono-tag-input-chip-radius, var(--mono-radius-sm)));\r\n background: var(--mono-dropdown-table-chip-bg, var(--mono-tag-input-chip-bg, var(--muted)));\r\n color: var(--mono-dropdown-table-chip-color, var(--mono-tag-input-chip-color, var(--_mono-dropdown-table-text)));\r\n font-family: inherit;\r\n font-size: var(--_mono-dropdown-table-chip-font-size);\r\n line-height: var(--_mono-dropdown-table-chip-line-height);\r\n font-weight: var(--mono-dropdown-table-chip-font-weight, var(--mono-tag-input-chip-font-weight, var(--mono-font-weight-medium)));\r\n text-decoration: none;\r\n cursor: default;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-removable] > [mono-dd-chip-main] {\r\n padding-inline-end: 0;\r\n}\r\n\r\n/* EXTENSION — `chip.rounded`: the chip's own corner scale over the combobox\r\n chip's rounded-sm (the same words `<mono-chip rounded>` takes) */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"none\"] > [mono-dd-chip-main] { border-radius: 0; }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"xs\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-xs); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"sm\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-sm); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"md\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-md); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"lg\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-lg); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"xl\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-xl); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"xxl\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-2xl); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-rounded=\"full\"] > [mono-dd-chip-main] { border-radius: var(--mono-radius-full); }\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-content] {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: inherit;\r\n min-width: 0;\r\n max-width: 100%;\r\n height: 100%;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-label] {\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n}\r\n\r\n/* EXTENSION — `chip.dot`: a coloured dot before the label (the badge's dot idiom) */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-dot] {\r\n flex: 0 0 auto;\r\n width: calc(var(--mono-spacing) * 1.5);\r\n height: calc(var(--mono-spacing) * 1.5);\r\n border-radius: var(--mono-radius-full);\r\n background: currentColor;\r\n}\r\n\r\n/* EXTENSION — `chip.color` pins a hue: the tonal pattern (bg-x/10 text-x, dark 20).\r\n Without one the chips follow the field's `color` — the ring colour — the way\r\n they always did here. */\r\n:is([mono-dropdown-table],.mono-dropdown-table):not(:is(:not([mono-color]), :is([mono-color=\"primary\"],:where(.mono-dropdown-table.primary)))) :is([mono-dd-chip],.mono-dropdown-table-chip):not([mono-dd-chip-color]) > [mono-dd-chip-main] {\r\n background: color-mix(in oklab, var(--_mono-dropdown-table-ring-color) var(--mono-mode-tint), transparent);\r\n color: var(--_mono-dropdown-table-ring-color);\r\n}\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"primary\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--primary) var(--mono-mode-tint), transparent); color: var(--primary); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"secondary\"] > [mono-dd-chip-main] { background: var(--secondary); color: var(--secondary-foreground); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"success\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--success) var(--mono-mode-tint), transparent); color: var(--success); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"danger\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--destructive) var(--mono-mode-tint), transparent); color: var(--destructive); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"warning\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--warning) var(--mono-mode-tint), transparent); color: var(--warning); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"info\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--info) var(--mono-mode-tint), transparent); color: var(--info); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"teal\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--teal) var(--mono-mode-tint), transparent); color: var(--teal); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"purple\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--purple) var(--mono-mode-tint), transparent); color: var(--purple); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"neutral\"] > [mono-dd-chip-main] { background: color-mix(in oklab, var(--neutral) var(--mono-mode-tint), transparent); color: var(--neutral); }\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip)[mono-dd-chip-color=\"dark\"] > [mono-dd-chip-main] { background: var(--dark); color: var(--dark-foreground); }\r\n\r\n/* basecoat@1.0.2 components/combobox.css .combobox-chip-remove — inline-flex\r\n shrink-0 items-center justify-center */\r\n/* basecoat@1.0.2 styles/vega.css .combobox-chip-remove — -ms-1 opacity-50\r\n hover:opacity-100, svg size-3.5 */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-close] {\r\n display: inline-flex;\r\n flex-shrink: 0;\r\n align-items: center;\r\n justify-content: center;\r\n /* explicit: the element still carries chip.css's `.chip-close` class as a hook,\r\n which pins a 1rem box — the raw markup has no such class */\r\n width: auto;\r\n height: 100%;\r\n min-width: 0;\r\n margin: 0;\r\n transform: none;\r\n margin-inline-start: calc(var(--mono-spacing) * -1);\r\n padding: 0 var(--mono-spacing);\r\n border: 0;\r\n border-radius: inherit;\r\n background: transparent;\r\n color: inherit;\r\n font: inherit;\r\n line-height: 1;\r\n opacity: 0.5;\r\n cursor: pointer;\r\n outline-style: none;\r\n transition-property: opacity;\r\n transition-timing-function: var(--mono-ease);\r\n transition-duration: var(--mono-duration);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-close]:focus-visible {\r\n opacity: 1;\r\n}\r\n\r\n@media (hover: hover) {\r\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-close]:hover {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip) [mono-dd-chip-close] > :is(svg, .mono-icon, :is([mono-icon],.mono-icon)) {\r\n display: block;\r\n width: calc(var(--mono-spacing) * 3.5);\r\n height: calc(var(--mono-spacing) * 3.5);\r\n pointer-events: none;\r\n}\r\n\r\n/* EXTENSION — the \"+N more\" counter chip is a control */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip):is([mono-dd-more],.mono-dropdown-table-more) > [mono-dd-chip-main] {\r\n cursor: pointer;\r\n outline-style: none;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip):is([mono-dd-more],.mono-dropdown-table-more) > [mono-dd-chip-main]:focus-visible {\r\n box-shadow: 0 0 0 var(--_mono-dropdown-table-ring-width) color-mix(in oklab, var(--_mono-dropdown-table-ring-color) var(--_mono-dropdown-table-ring-alpha), transparent);\r\n}\r\n\r\n@media (hover: hover) {\r\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip],.mono-dropdown-table-chip):is([mono-dd-more],.mono-dropdown-table-more) > [mono-dd-chip-main]:hover {\r\n background: var(--mono-mode-surface-hover);\r\n }\r\n}\r\n\r\n/* ── the inline chip strip (`chip.behaviour: 'inline'`) ──────────────────\r\n One line that never grows: the value stops wrapping, the chips live in their\r\n own strip, and the strip absorbs the overflow instead of the field.\r\n\r\n `overflow-x: hidden` — NOT `auto` — is the whole scroll contract. Hidden still\r\n honours a programmatic `scrollLeft`, so `ChipStripController` can page the\r\n strip while the browser paints no scrollbar and refuses to scroll it from the\r\n wheel, a click-drag or the arrow keys. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-value],.mono-dropdown-table-value):is([mono-inline],.is-inline) {\r\n flex-wrap: nowrap;\r\n}\r\n\r\n/* Two attributes deliberately: the strip is a direct `span` child of the value\r\n area, so the `[mono-dd-value] > span` ellipsis rule above matches it too. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-value],.mono-dropdown-table-value) > :is([mono-dd-chip-strip],.mono-dropdown-table-chip-strip) {\r\n display: flex;\r\n flex-wrap: nowrap;\r\n align-items: center;\r\n gap: var(--_mono-dropdown-table-gap);\r\n flex: 0 1 auto;\r\n min-width: 0;\r\n overflow-x: hidden;\r\n overflow-y: hidden;\r\n text-overflow: clip;\r\n /* NO `scroll-behavior: smooth` — see ChipStripController (one scroll event per\r\n frame would reposition every open popup). */\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-chip-strip],.mono-dropdown-table-chip-strip) > * {\r\n flex-shrink: 0;\r\n}\r\n\r\n/* =========================================\r\n Actions — ‹ › pager, clear, caret\r\n ========================================= */\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-actions],.mono-dropdown-table-actions) {\r\n display: flex;\r\n align-items: center;\r\n gap: var(--mono-spacing);\r\n flex: 0 0 auto;\r\n line-height: 1;\r\n /* The row's buttons are size-6 — 2px taller than a chip — and they sit IN the\r\n flex row (centred beside a wrapping value, unlike tag-input's pinned corner),\r\n so on their own they would floor the field 2px above the token. A negative\r\n block margin folds that back: the row costs exactly one chip height. */\r\n margin-block: calc((var(--_mono-dropdown-table-chip-height) - var(--_mono-dropdown-table-action)) / 2);\r\n}\r\n\r\n/* basecoat@1.0.2 components/combobox.css .combobox [data-clear] — size-6 border-0\r\n bg-transparent p-0 text-current; the caret ≡ .combobox-trigger-icon (size-4\r\n text-muted-foreground), the pager the same box. Painted as .btn[data-variant='ghost']. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-clear],.mono-dropdown-table-clear),\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-arrow],.mono-dropdown-table-arrow),\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-scroll],.mono-dropdown-table-scroll) {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex: 0 0 auto;\r\n width: var(--_mono-dropdown-table-action);\r\n height: var(--_mono-dropdown-table-action);\r\n margin: 0;\r\n padding: 0;\r\n border: 0;\r\n border-radius: var(--mono-dropdown-table-clear-radius, var(--mono-tag-input-clear-radius, calc(var(--radius) - 5px)));\r\n background: transparent;\r\n color: var(--_mono-dropdown-table-muted);\r\n font: inherit;\r\n line-height: 1;\r\n cursor: pointer;\r\n outline-style: none;\r\n transition-property: color, background-color, transform;\r\n transition-timing-function: var(--mono-ease);\r\n transition-duration: var(--mono-duration);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is(:is([mono-dd-clear],.mono-dropdown-table-clear), :is([mono-dd-arrow],.mono-dropdown-table-arrow), :is([mono-dd-scroll],.mono-dropdown-table-scroll)) > :is(svg, .mono-icon, :is([mono-icon],.mono-icon)) {\r\n display: block;\r\n width: var(--_mono-dropdown-table-icon);\r\n height: var(--_mono-dropdown-table-icon);\r\n pointer-events: none;\r\n transition-property: transform;\r\n transition-timing-function: var(--mono-ease);\r\n transition-duration: var(--mono-duration);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-clear],.mono-dropdown-table-clear) > :is(svg, .mono-icon, :is([mono-icon],.mono-icon)) {\r\n width: var(--_mono-dropdown-table-clear-glyph);\r\n height: var(--_mono-dropdown-table-clear-glyph);\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .btn[data-variant='ghost'] — hover:bg-muted hover:text-foreground */\r\n@media (hover: hover) {\r\n :is([mono-dropdown-table],.mono-dropdown-table) :is(:is([mono-dd-clear],.mono-dropdown-table-clear), :is([mono-dd-arrow],.mono-dropdown-table-arrow), :is([mono-dd-scroll],.mono-dropdown-table-scroll)):hover {\r\n background: var(--mono-mode-ghost-hover);\r\n color: var(--_mono-dropdown-table-text);\r\n }\r\n}\r\n\r\n/* EXTENSION — the caret turns while the panel is open */\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-open],.open) :is([mono-dd-arrow],.mono-dropdown-table-arrow) > :is(svg, .mono-icon, :is([mono-icon],.mono-icon)) {\r\n transform: rotate(180deg);\r\n}\r\n\r\n/* At an end of the strip the pager keeps its box but disappears — hiding it with\r\n `display: none` would shrink the row and shove the strip sideways mid-click. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-scroll],.mono-dropdown-table-scroll):is([mono-idle],.is-idle) {\r\n visibility: hidden;\r\n pointer-events: none;\r\n}\r\n\r\n/* =========================================\r\n The \"+N more\" overflow panel — a popover holding the overflow chips\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .combobox [data-popover] — bg-popover ring-1\r\n ring-foreground/10 rounded-md shadow-md; EXTENSION: p-1.5 gap-1.5 flex-wrap.\r\n Portaled to <body> and placed `fixed` from the \"+N more\" chip by its own\r\n popup controller in the light build; in the shadow build `_positionMorePanel`\r\n runs the same math in place — the absolute rule is the pre-placement fallback. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-more],.mono-dropdown-table-more) {\r\n position: absolute;\r\n top: calc(100% + calc(var(--mono-spacing) * 1.5));\r\n left: 0;\r\n z-index: var(--mono-popup-z, 1000);\r\n display: none;\r\n flex-wrap: wrap;\r\n align-items: flex-start;\r\n gap: var(--_mono-dropdown-table-gap);\r\n max-width: 20rem;\r\n /* `--mono-popup-avail-h` = the room left on the side the panel opened on. */\r\n max-height: min(14rem, var(--mono-popup-avail-h, 100vh));\r\n overflow: auto;\r\n /* Portaled + anchored: a chained scroll would drag this panel off-screen. */\r\n overscroll-behavior: contain;\r\n padding: calc(var(--mono-spacing) * 1.5);\r\n border-radius: var(--mono-dropdown-table-dropdown-radius, var(--mono-tag-input-dropdown-radius, var(--mono-radius-md)));\r\n background: var(--mono-dropdown-table-dropdown-bg, var(--mono-tag-input-dropdown-bg, var(--popover)));\r\n color: var(--mono-dropdown-table-dropdown-color, var(--mono-tag-input-dropdown-color, var(--popover-foreground)));\r\n box-shadow: var(--mono-dropdown-table-dropdown-ring, var(--mono-tag-input-dropdown-ring, 0 0 0 1px color-mix(in oklab, var(--foreground) 10%, transparent))), var(--mono-dropdown-table-dropdown-shadow, var(--mono-tag-input-dropdown-shadow, var(--mono-shadow-md)));\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-more-open],.more-open) :is([mono-dd-more],.mono-dropdown-table-more) {\r\n display: flex;\r\n}\r\n\r\n/* =========================================\r\n The panel — sized by the `dropdown` prop, NOT the field\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/popover.css [data-popover] — absolute z-50 overflow;\r\n mono: `display: none` while closed, `position: fixed` (the popup controller\r\n sets top/left), `--mono-popup-z` from the shared stack */\r\n/* basecoat@1.0.2 styles/vega.css .combobox [data-popover] — bg-popover\r\n text-popover-foreground ring-foreground/10 rounded-md p-0 shadow-md ring-1;\r\n EXTENSION: a flex column of three regions, the middle one scrolling */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-panel],.mono-dropdown-table-panel) {\r\n display: none;\r\n position: fixed;\r\n z-index: var(--mono-popup-z, 1000);\r\n flex-direction: column;\r\n width: max-content;\r\n min-width: var(--mono-dropdown-table-dropdown-min-width, 18rem);\r\n max-width: min(90vw, 60rem);\r\n /* Two independent caps, combined so neither can clobber the other:\r\n --_mono-dropdown-table-panel-max-h the consumer's `:dropdown.prop=\"{ maxHeight }\"` (else 60vh)\r\n --mono-popup-avail-h the room actually left between the field and the\r\n viewport edge on the side the panel opened on */\r\n max-height: min(var(--_mono-dropdown-table-panel-max-h, 60vh), var(--mono-popup-avail-h, 100vh));\r\n overflow: hidden;\r\n isolation: isolate;\r\n border-radius: var(--mono-dropdown-table-dropdown-radius, var(--mono-tag-input-dropdown-radius, var(--mono-radius-md)));\r\n background: var(--mono-dropdown-table-dropdown-bg, var(--mono-tag-input-dropdown-bg, var(--popover)));\r\n color: var(--mono-dropdown-table-dropdown-color, var(--mono-tag-input-dropdown-color, var(--popover-foreground)));\r\n box-shadow: var(--mono-dropdown-table-dropdown-ring, var(--mono-tag-input-dropdown-ring, 0 0 0 1px color-mix(in oklab, var(--foreground) 10%, transparent))), var(--mono-dropdown-table-dropdown-shadow, var(--mono-tag-input-dropdown-shadow, var(--mono-shadow-md)));\r\n font-size: var(--_mono-dropdown-table-font-size);\r\n line-height: var(--_mono-dropdown-table-line-height);\r\n outline-style: none;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table):is([mono-open],.open) :is([mono-dd-panel],.mono-dropdown-table-panel) {\r\n display: flex;\r\n}\r\n\r\n/* The panel is a container; its own ring would just outline the whole popup. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-panel],.mono-dropdown-table-panel):focus,\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-panel],.mono-dropdown-table-panel):focus-visible {\r\n outline: none;\r\n}\r\n\r\n/* EXTENSION — the search box above the rows, the pager below, on hairlines */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"search\"],:where(.mono-dropdown-table-region.search)) {\r\n flex: 0 0 auto;\r\n padding: var(--mono-dropdown-table-region-padding, calc(var(--mono-spacing) * 2));\r\n border-bottom: var(--mono-border-width) solid var(--border);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"body\"],:where(.mono-dropdown-table-region.body)) {\r\n flex: 1 1 auto;\r\n /* `min-height: 0` lets the body shrink below its content height inside the flex\r\n column — without it the region floors at its intrinsic size and the panel\r\n overflows its own max-height instead of scrolling the table. */\r\n min-height: 0;\r\n overflow: auto;\r\n overscroll-behavior: contain;\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"foot\"],:where(.mono-dropdown-table-region.foot)) {\r\n flex: 0 0 auto;\r\n padding: var(--mono-dropdown-table-region-padding, calc(var(--mono-spacing) * 2));\r\n border-top: var(--mono-border-width) solid var(--border);\r\n}\r\n\r\n/* light: a region with nothing captured is `:empty`; shadow: regions wrap a\r\n `<slot>` (never `:empty`), so the element marks an unassigned one `mono-empty` */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region],.mono-dropdown-table-region):empty,\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region],.mono-dropdown-table-region)[mono-empty] {\r\n display: none;\r\n}\r\n\r\n/* =========================================\r\n The rows — the ported table's own rows, in TWO contexts\r\n -----------------------------------------\r\n light: the captured `<table mono-table>` inside the (portaled) body region;\r\n shadow: the SLOTTED table — a light-DOM child of the host, so the host tag is\r\n the scope (these rules reach it from the page sheet, not the shadow one).\r\n\r\n A picked row is the TABLE's `mono-selected` row (the element sets it, the same\r\n attribute `<mono-table-checkbox>` sets), so the table's own wash + rail paint\r\n it and a flavour that retunes `--mono-table-selected-bg` retunes it here. The\r\n keyboard cursor is Basecoat's `.active` option — the `--muted` row, like hover.\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .table tr — hover:bg-muted/50; the table ships\r\n with hover off, the picker turns it on through the table's PUBLIC knob */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"body\"],:where(.mono-dropdown-table-region.body)),\r\nmono-shadow-dropdown-table {\r\n --mono-table-hover-bg: var(--mono-dropdown-table-row-hover-bg, color-mix(in oklab, var(--muted) 50%, var(--mono-table-surface, var(--background))));\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"body\"],:where(.mono-dropdown-table-region.body)) :is([mono-table],.mono-table) tbody tr[data-row-key],\r\nmono-shadow-dropdown-table :is([mono-table],.mono-table) tbody tr[data-row-key] {\r\n cursor: pointer;\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .select:not(select) [role='option'].active, .select:not(select) [role='option']:focus-visible — bg-muted text-foreground\r\n Written the way table.css asks a row state to be written:\r\n the row-colour variable AND the paint, so a pinned cell follows. */\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"body\"],:where(.mono-dropdown-table-region.body)) :is([mono-table],.mono-table) tbody tr:is([mono-dd-active],.mono-dd-row-active),\r\nmono-shadow-dropdown-table :is([mono-table],.mono-table) tbody tr:is([mono-dd-active],.mono-dd-row-active) {\r\n --_mono-table-row-bg: var(--mono-dropdown-table-row-active-bg, var(--mono-tag-input-option-active-bg, var(--muted)));\r\n background: var(--_mono-table-row-bg);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-region=\"body\"],:where(.mono-dropdown-table-region.body)) :is([mono-table],.mono-table) tbody tr:is([mono-selected],.mono-dd-row-selected) > td,\r\nmono-shadow-dropdown-table :is([mono-table],.mono-table) tbody tr:is([mono-selected],.mono-dd-row-selected) > td {\r\n font-weight: var(--mono-font-weight-medium);\r\n}\r\n\r\n/* =========================================\r\n Message\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .fieldset legend + p, .field > p, .field section > p */\r\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-message],.mono-dropdown-table-message) {\r\n display: block;\r\n margin-top: var(--_mono-dropdown-table-gap-y);\r\n font-size: var(--mono-dropdown-table-message-font-size, var(--mono-tag-input-message-font-size, var(--mono-text-sm)));\r\n line-height: var(--mono-dropdown-table-message-line-height, var(--mono-tag-input-message-line-height, var(--mono-leading-normal)));\r\n font-weight: var(--mono-font-weight-normal);\r\n text-align: start;\r\n color: var(--_mono-dropdown-table-muted);\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .field [role=\"alert\"] — text-destructive text-sm */\r\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-message=\"invalid\"],:where(.mono-dropdown-table-message.invalid)) {\r\n color: var(--_mono-dropdown-table-invalid);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-message=\"valid\"],:where(.mono-dropdown-table-message.valid)) {\r\n color: var(--_mono-dropdown-table-valid);\r\n}\r\n\r\n:is([mono-dropdown-table],.mono-dropdown-table) > :is([mono-dd-message=\"warning\"],:where(.mono-dropdown-table-message.warning)) {\r\n color: var(--_mono-dropdown-table-warning);\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-trigger],.mono-dropdown-table-trigger),\r\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-clear],.mono-dropdown-table-clear),\r\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-arrow],.mono-dropdown-table-arrow),\r\n :is([mono-dropdown-table],.mono-dropdown-table) :is([mono-dd-scroll],.mono-dropdown-table-scroll),\r\n :is([mono-dropdown-table],.mono-dropdown-table) [mono-dd-chip-close] {\r\n transition: none;\r\n }\r\n}\r\n\r\n/* =========================================\r\n label-position — the slots form/label-position.css reads\r\n (top / notched / left / right; public knobs: --mono-dropdown-table-label-width,\r\n -label-side-gap, -label-notch-font-size, -label-notch-bg)\r\n ========================================= */\r\n\r\n[mono-dropdown-table][mono-label-position] {\r\n --_mono-lp-width: var(--mono-dropdown-table-label-width, auto);\r\n --_mono-lp-gap: var(--mono-dropdown-table-label-side-gap, calc(var(--mono-spacing) * 3));\r\n --_mono-lp-height: var(--_mono-dropdown-table-height);\r\n --_mono-lp-box-min: var(--_mono-dropdown-table-height);\r\n /* + the single-value text inset (multi chips start at the padding) */\r\n --_mono-lp-padding-x: calc(var(--_mono-dropdown-table-padding-x) + var(--mono-dropdown-table-text-inset, calc(var(--mono-spacing) * 1.5)));\r\n --_mono-lp-padding-y: var(--_mono-dropdown-table-padding-y);\r\n --_mono-lp-font: var(--mono-dropdown-table-label-notch-font-size, var(--mono-text-xs));\r\n --_mono-lp-notch-bg: var(--mono-dropdown-table-label-notch-bg, var(--background));\r\n --_mono-lp-field-bg: var(--_mono-dropdown-table-bg);\r\n}\r\n";
1286
1345
 
1287
1346
  //#endregion
1288
1347
  //#region src/components/dropdown-table/mono-dropdown-table.shadow.ts
@@ -1577,8 +1636,22 @@ function monoDataDropdown(source = null, opts = {}) {
1577
1636
  function setOpen(next) {
1578
1637
  if (ctrl.open === next) return;
1579
1638
  ctrl.open = next;
1639
+ if (!next) pruneCache();
1580
1640
  notify();
1581
1641
  }
1642
+ /**
1643
+ * Drop cached rows no current key needs, once the cache has outgrown the selection.
1644
+ *
1645
+ * The cache exists to label chips whose row is not on the loaded page; it only ever grew —
1646
+ * every key ever selected, and after a select-all every drained row — and was cleared only on
1647
+ * `bind()`. Pruned on close, with slack, so toggling a few rows never thrashes it.
1648
+ */
1649
+ function pruneCache() {
1650
+ const keys = currentKeys();
1651
+ if (cache.size <= keys.length * 2 + 200) return;
1652
+ const keep = new Set(keys.map((k) => keyStr(normKey(k))));
1653
+ for (const k of cache.keys()) if (!keep.has(k)) cache.delete(k);
1654
+ }
1582
1655
  function hasStore() {
1583
1656
  const s = grid.dataSource;
1584
1657
  return typeof s?.store === "function" && !!s.store();
@@ -1591,6 +1664,26 @@ function monoDataDropdown(source = null, opts = {}) {
1591
1664
  for (let i = 0; i < arr.length; i += size) out.push(arr.slice(i, i + size));
1592
1665
  return out;
1593
1666
  }
1667
+ /**
1668
+ * `run` over every part, at most `limit` requests in flight — the result order kept.
1669
+ *
1670
+ * A thousand preset keys are twenty `in` chunks (or ~67 OR-chain chunks in the fallback), and
1671
+ * `Promise.all` over them fired every request at once: a burst a backend may throttle or reject,
1672
+ * and that queues behind the browser's per-host connection cap anyway.
1673
+ */
1674
+ async function mapLimited(parts, limit, run) {
1675
+ const out = new Array(parts.length);
1676
+ let next = 0;
1677
+ const worker = async () => {
1678
+ while (next < parts.length) {
1679
+ const i = next++;
1680
+ out[i] = await run(parts[i]);
1681
+ }
1682
+ };
1683
+ await Promise.all(Array.from({ length: Math.min(limit, parts.length) }, worker));
1684
+ return out;
1685
+ }
1686
+ const RESOLVE_CONCURRENCY = 4;
1594
1687
  const selectFields = () => typeof displayExpr === "string" && displayExpr ? [keyExpr, displayExpr] : void 0;
1595
1688
  async function resolveSelected() {
1596
1689
  const missing = currentKeys().filter((k) => !cache.has(keyStr(normKey(k))));
@@ -1600,14 +1693,14 @@ function monoDataDropdown(source = null, opts = {}) {
1600
1693
  const store = s.store();
1601
1694
  let rows = [];
1602
1695
  try {
1603
- rows = (await Promise.all(chunk(missing, 50).map((part) => store.load({
1696
+ rows = (await mapLimited(chunk(missing, 50), RESOLVE_CONCURRENCY, (part) => store.load({
1604
1697
  filter: [
1605
1698
  keyExpr,
1606
1699
  "in",
1607
1700
  part
1608
1701
  ],
1609
1702
  select: selectFields()
1610
- })))).flatMap(storeRows);
1703
+ }))).flatMap(storeRows);
1611
1704
  } catch {
1612
1705
  const orFilter = (arr) => arr.map((v) => [
1613
1706
  keyExpr,
@@ -1618,10 +1711,10 @@ function monoDataDropdown(source = null, opts = {}) {
1618
1711
  "or",
1619
1712
  b
1620
1713
  ] : b, null);
1621
- rows = (await Promise.all(chunk(missing, 15).map((part) => store.load({
1714
+ rows = (await mapLimited(chunk(missing, 15), RESOLVE_CONCURRENCY, (part) => store.load({
1622
1715
  filter: orFilter(part),
1623
1716
  select: selectFields()
1624
- })))).flatMap(storeRows);
1717
+ }))).flatMap(storeRows);
1625
1718
  }
1626
1719
  for (const row of rows) cacheRow(row?.[keyExpr], row);
1627
1720
  } else if (typeof s?.data === "function") {
@@ -1634,7 +1727,39 @@ function monoDataDropdown(source = null, opts = {}) {
1634
1727
  }
1635
1728
  notify();
1636
1729
  }
1637
- const offGrid = grid.subscribe(() => notify());
1730
+ /**
1731
+ * Forward a grid notify only when something THIS controller's readers use has moved.
1732
+ *
1733
+ * Forwarding every one re-rendered the whole `<mono-dropdown-table>` (chips, `selectedItems()`),
1734
+ * repositioned its open panel (a forced layout) and re-reflected the selection onto every row —
1735
+ * for notifies that change none of it, chiefly each virtual-scroll window shift. What the field
1736
+ * reads from the grid: the selection (`check().version` / `pending`), the load state
1737
+ * (`loading` / `hasLoaded` / `error` — the skeleton release), and the rows for chip labels and
1738
+ * key typing — the page array itself, or under virtual scroll (whose `items` is only the window)
1739
+ * the loaded count. Rows a window shift brings in are re-reflected by the panel's own
1740
+ * MutationObserver, not by this notify.
1741
+ */
1742
+ let forwarded = [];
1743
+ const gridSignature = () => {
1744
+ const c = grid.check();
1745
+ return [
1746
+ c.version,
1747
+ c.pending,
1748
+ grid.loading,
1749
+ grid.hasLoaded,
1750
+ grid.error,
1751
+ grid.scrollMode === "virtual" ? grid.loadedCount : grid.items,
1752
+ grid.totalCount,
1753
+ grid.hasMore,
1754
+ grid.pageIndex
1755
+ ];
1756
+ };
1757
+ const offGrid = grid.subscribe(() => {
1758
+ const sig = gridSignature();
1759
+ if (sig.length === forwarded.length && sig.every((v, i) => Object.is(v, forwarded[i]))) return;
1760
+ forwarded = sig;
1761
+ notify();
1762
+ });
1638
1763
  const ctrl = {
1639
1764
  grid,
1640
1765
  /** Alias of {@link grid} — the inner `controlMonoTable`. Preferred in new