@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
@@ -17,7 +17,6 @@ declare const MonoDrawer_base: Constructor<MonoDrawerCoreInterface> & typeof Lit
17
17
  * `mono-drawer.shadow.ts`; all logic is shared via `MonoDrawerCore`.
18
18
  */
19
19
  export declare class MonoDrawer extends MonoDrawer_base {
20
- static styles: import("lit").CSSResult[];
21
20
  private _portal;
22
21
  private _appliedPortalClasses;
23
22
  private _slotHeader;
@@ -15,7 +15,6 @@ declare const MonoDropdown_base: Constructor<MonoDropdownCoreInterface> & typeof
15
15
  * `<slot>`. Both register `mono-dropdown`, so a document loads only one.
16
16
  */
17
17
  export declare class MonoDropdown extends MonoDropdown_base {
18
- static styles: import("lit").CSSResult[];
19
18
  protected createRenderRoot(): HTMLElement;
20
19
  private _hasBodySlotState;
21
20
  private _slotsCaptured;
@@ -30,7 +30,6 @@ declare const MonoDropdownTable_base: Constructor<MonoDropdownTableCoreInterface
30
30
  * </mono-dropdown-table>
31
31
  */
32
32
  export declare class MonoDropdownTable extends MonoDropdownTable_base {
33
- static styles: import("lit").CSSResult[];
34
33
  protected createRenderRoot(): HTMLElement;
35
34
  private _slotsCaptured;
36
35
  private _slotSearch;
@@ -17,7 +17,6 @@ declare const MonoFileUpload_base: Constructor<MonoFileUploadCoreInterface> & ty
17
17
  * `mono-file-upload`, so a document loads only one.
18
18
  */
19
19
  export declare class MonoFileUpload extends MonoFileUpload_base {
20
- static styles: import("lit").CSSResult[];
21
20
  protected createRenderRoot(): HTMLElement;
22
21
  private _slotsCaptured;
23
22
  private _slots;
@@ -11,7 +11,6 @@ declare const MonoFilterBuilder_base: Constructor<MonoFilterBuilderCoreInterface
11
11
  * the same global `dist/ui/index.css` — so no extra stylesheet is needed here.
12
12
  */
13
13
  export declare class MonoFilterBuilder extends MonoFilterBuilder_base {
14
- static styles: import("lit").CSSResult[];
15
14
  protected createRenderRoot(): HTMLElement;
16
15
  protected renderIcon(name: FilterIconName): TemplateResult;
17
16
  }
@@ -15,7 +15,6 @@ declare const MonoInput_base: Constructor<MonoInputCoreInterface> & typeof LitEl
15
15
  * `<slot>`. Both register `mono-input`, so a document loads only one.
16
16
  */
17
17
  export declare class MonoInput extends MonoInput_base {
18
- static styles: import("lit").CSSResult[];
19
18
  protected createRenderRoot(): HTMLElement;
20
19
  private _slotPrefix;
21
20
  private _slotSuffix;
@@ -13,7 +13,6 @@ declare const MonoMenu_base: Constructor<MonoMenuCoreInterface> & typeof LitElem
13
13
  * lives in `MonoMenuCore`.
14
14
  */
15
15
  export declare class MonoMenu extends MonoMenu_base {
16
- static styles: import("lit").CSSResult[];
17
16
  protected createRenderRoot(): HTMLElement;
18
17
  private _slotsCaptured;
19
18
  private _hasBodySlot;
@@ -17,7 +17,6 @@ declare const MonoModal_base: Constructor<MonoModalCoreInterface> & typeof LitEl
17
17
  * `mono-modal.shadow.ts`; all logic is shared via `MonoModalCore`.
18
18
  */
19
19
  export declare class MonoModal extends MonoModal_base {
20
- static styles: import("lit").CSSResult[];
21
20
  private _portal;
22
21
  private _appliedPortalClasses;
23
22
  private _slotHead;
@@ -17,7 +17,6 @@ declare const MonoNav_base: Constructor<MonoNavCoreInterface> & typeof LitElemen
17
17
  * given document must load only one of the two builds.
18
18
  */
19
19
  export declare class MonoNav extends MonoNav_base {
20
- static styles: import("lit").CSSResult[];
21
20
  protected createRenderRoot(): HTMLElement;
22
21
  private _slotsCaptured;
23
22
  private _slotNodes;
@@ -12,7 +12,6 @@ declare const MonoOtp_base: Constructor<MonoOtpCoreInterface> & typeof LitElemen
12
12
  * build (`mono-shadow-otp`) shares it with native `<slot>`s.
13
13
  */
14
14
  export declare class MonoOtp extends MonoOtp_base {
15
- static styles: import("lit").CSSResult[];
16
15
  protected createRenderRoot(): HTMLElement;
17
16
  private _slots;
18
17
  private _slotObserver?;
@@ -16,7 +16,6 @@ declare const MonoRadio_base: Constructor<MonoRadioCoreInterface> & typeof LitEl
16
16
  * document loads only one.
17
17
  */
18
18
  export declare class MonoRadio extends MonoRadio_base {
19
- static styles: import("lit").CSSResult[];
20
19
  protected createRenderRoot(): HTMLElement;
21
20
  private _slotsCaptured;
22
21
  private _slotLabel;
@@ -16,7 +16,6 @@ declare const MonoRichTextEditor_base: Constructor<MonoRichTextEditorCoreInterfa
16
16
  * `MonoRichTextEditorCore`.
17
17
  */
18
18
  export declare class MonoRichTextEditor extends MonoRichTextEditor_base {
19
- static styles: import("lit").CSSResult[];
20
19
  protected createRenderRoot(): HTMLElement;
21
20
  private _slotsCaptured;
22
21
  private _slotLabel;
@@ -15,7 +15,6 @@ declare const MonoSelect_base: Constructor<MonoSelectCoreInterface> & typeof Lit
15
15
  * register `mono-select`, so a document loads only one build.
16
16
  */
17
17
  export declare class MonoSelect extends MonoSelect_base {
18
- static styles: import("lit").CSSResult[];
19
18
  protected createRenderRoot(): HTMLElement;
20
19
  private _slotsCaptured;
21
20
  private _slotLabel;
@@ -16,7 +16,6 @@ declare const MonoSidebar_base: Constructor<MonoSidebarCoreInterface> & typeof L
16
16
  * Both register `mono-sidebar`, so a document loads only one.
17
17
  */
18
18
  export declare class MonoSidebar extends MonoSidebar_base {
19
- static styles: import("lit").CSSResult[];
20
19
  protected createRenderRoot(): HTMLElement;
21
20
  private _slotsCaptured;
22
21
  private _slotHeader;
@@ -12,7 +12,6 @@ declare const MonoSlider_base: Constructor<MonoSliderCoreInterface> & typeof Lit
12
12
  * `MonoSliderCore`; the shadow build (`mono-shadow-slider`) shares it with native `<slot>`s.
13
13
  */
14
14
  export declare class MonoSlider extends MonoSlider_base {
15
- static styles: import("lit").CSSResult[];
16
15
  protected createRenderRoot(): HTMLElement;
17
16
  private _slotLabel;
18
17
  private _slotHelper;
@@ -16,7 +16,6 @@ declare const MonoSwitch_base: Constructor<MonoSwitchCoreInterface> & typeof Lit
16
16
  * Both register `mono-switch`, so a document loads only one.
17
17
  */
18
18
  export declare class MonoSwitch extends MonoSwitch_base {
19
- static styles: import("lit").CSSResult[];
20
19
  protected createRenderRoot(): HTMLElement;
21
20
  private _slotsCaptured;
22
21
  private _slotLabel;
@@ -53,6 +53,14 @@ export declare class ColumnAutoSize {
53
53
  private readonly host;
54
54
  min?: number;
55
55
  max?: number;
56
+ /**
57
+ * Never shrink — for a virtual-scroll table, whose body holds only the WINDOW of the rows: each
58
+ * window shift measured a different slice, so the column grew and shrank as the list scrolled and
59
+ * every change relaid the whole table. The column settles at the widest value seen instead, until
60
+ * `resetFloor()` (a new result set).
61
+ */
62
+ growOnly: boolean;
63
+ private _floor;
56
64
  private _raf;
57
65
  private _table?;
58
66
  private _observer?;
@@ -64,11 +72,25 @@ export declare class ColumnAutoSize {
64
72
  */
65
73
  private readonly _onFonts;
66
74
  constructor(host: HTMLElement);
75
+ /**
76
+ * Every sizer on the page shares ONE frame callback (`_flush`), which measures all of them
77
+ * first and writes all of them after.
78
+ *
79
+ * Each used to run in its own frame callback, measure-then-write: column A wrote its width,
80
+ * so column B's measurement (`getBoundingClientRect` on header icons, an SVG) forced a
81
+ * synchronous layout of the whole table — one per auto column, per frame.
82
+ */
83
+ private static _queued;
84
+ private static _frame;
85
+ private static _flush;
67
86
  schedule(): void;
87
+ /** Forget the grow-only floor (new rows) and re-measure. */
88
+ resetFloor(): void;
68
89
  /** Stop watching, and hand the column back to whatever width it is given next. */
69
90
  stop(clear?: boolean): void;
70
91
  private _watch;
71
92
  private _unwatch;
72
- private _run;
93
+ /** Measure now (reads only); returns the write to apply after every sizer has measured. */
94
+ private _measure;
73
95
  }
74
96
  //#endregion
@@ -484,6 +484,12 @@ export interface MonoCheckHandle<T = any> {
484
484
  selectAll(): Promise<void>;
485
485
  /** Empty the selection. */
486
486
  clear(): void;
487
+ /**
488
+ * Increments on every selection notify — tick, untick (even a rejected one), page / all
489
+ * select, replace, clear, and the drain's start / end. Compare it to tell "the selection
490
+ * moved" from the grid's other notifies (a load, a virtual-scroll window shift).
491
+ */
492
+ readonly version: number;
487
493
  /** Whether a `selectAll()` drain is in flight. */
488
494
  readonly pending: boolean;
489
495
  /** Every loaded row is selected (and there is at least one). */
@@ -26,7 +26,6 @@ declare const MonoTableCheckbox_base: Constructor<MonoTableCheckboxCoreInterface
26
26
  * table.check().getAll() // [{ Id: 8 }, { Id: 12 }, … ]
27
27
  */
28
28
  export declare class MonoTableCheckbox extends MonoTableCheckbox_base {
29
- static styles: import("lit").CSSResult[];
30
29
  protected createRenderRoot(): HTMLElement;
31
30
  }
32
31
  declare global {
@@ -24,7 +24,6 @@ declare const MonoTableDetail_base: Constructor<MonoTableDetailCoreInterface> &
24
24
  * </tr>
25
25
  */
26
26
  export declare class MonoTableDetail extends MonoTableDetail_base {
27
- static styles: import("lit").CSSResult[];
28
27
  protected createRenderRoot(): HTMLElement;
29
28
  }
30
29
  declare global {
@@ -22,7 +22,6 @@ declare const MonoTableEmpty_base: Constructor<MonoTableEmptyCoreInterface> & ty
22
22
  * INTO the host and would otherwise overwrite it.
23
23
  */
24
24
  export declare class MonoTableEmpty extends MonoTableEmpty_base {
25
- static styles: import("lit").CSSResult[];
26
25
  private _buckets;
27
26
  private _slotsCaptured;
28
27
  protected createRenderRoot(): HTMLElement;
@@ -20,7 +20,6 @@ declare const MonoTableError_base: Constructor<MonoTableErrorCoreInterface> & ty
20
20
  * which is exactly what a light build can use and a shadow one cannot.
21
21
  */
22
22
  export declare class MonoTableError extends MonoTableError_base {
23
- static styles: import("lit").CSSResult[];
24
23
  protected createRenderRoot(): HTMLElement;
25
24
  }
26
25
  declare global {
@@ -11,7 +11,6 @@ declare const MonoTableInfo_base: Constructor<MonoTableInfoCoreInterface> & type
11
11
  * so a document loads only one.
12
12
  */
13
13
  export declare class MonoTableInfo extends MonoTableInfo_base {
14
- static styles: import("lit").CSSResult[];
15
14
  protected createRenderRoot(): HTMLElement;
16
15
  }
17
16
  declare global {
@@ -42,7 +42,6 @@ declare const MonoTableLoading_base: Constructor<MonoTableLoadingCoreInterface>
42
42
  * </div>
43
43
  */
44
44
  export declare class MonoTableLoading extends MonoTableLoading_base {
45
- static styles: import("lit").CSSResult[];
46
45
  protected createRenderRoot(): HTMLElement;
47
46
  }
48
47
  declare global {
@@ -8,7 +8,6 @@ declare const MonoTablePageSize_base: Constructor<MonoTablePageSizeCoreInterface
8
8
  * All logic lives in `MonoTablePageSizeCore`; the shadow build shares the mixin.
9
9
  */
10
10
  export declare class MonoTablePageSize extends MonoTablePageSize_base {
11
- static styles: import("lit").CSSResult[];
12
11
  protected createRenderRoot(): HTMLElement;
13
12
  }
14
13
  declare global {
@@ -12,7 +12,6 @@ declare const MonoTablePagingGroup_base: Constructor<MonoTablePagingGroupCoreInt
12
12
  * <mono-table-paging-group :data-grid.prop="table" :group.prop="node" page-size="5" />
13
13
  */
14
14
  export declare class MonoTablePagingGroup extends MonoTablePagingGroup_base {
15
- static styles: import("lit").CSSResult[];
16
15
  protected createRenderRoot(): HTMLElement;
17
16
  }
18
17
  declare global {
@@ -8,7 +8,6 @@ declare const MonoTablePaging_base: Constructor<MonoTablePagingCoreInterface> &
8
8
  * All logic lives in `MonoTablePagingCore`; the shadow build shares the mixin.
9
9
  */
10
10
  export declare class MonoTablePaging extends MonoTablePaging_base {
11
- static styles: import("lit").CSSResult[];
12
11
  protected createRenderRoot(): HTMLElement;
13
12
  }
14
13
  declare global {
@@ -12,7 +12,6 @@ declare const MonoTableSearch_base: Constructor<MonoTableSearchCoreInterface> &
12
12
  * `dist/ui/index.css` — so no extra stylesheet is needed for the light build.
13
13
  */
14
14
  export declare class MonoTableSearch extends MonoTableSearch_base {
15
- static styles: import("lit").CSSResult[];
16
15
  protected createRenderRoot(): HTMLElement;
17
16
  /**
18
17
  * Light-DOM slot capture (mirrors `mono-dropdown-table`): a real `<slot>` can't
@@ -20,7 +20,6 @@ declare const MonoTableSort_base: Constructor<MonoTableSortCoreInterface> & type
20
20
  * <th><mono-table-sort :data-grid.prop="table" field="Nama">Name</mono-table-sort></th>
21
21
  */
22
22
  export declare class MonoTableSort extends MonoTableSort_base {
23
- static styles: import("lit").CSSResult[];
24
23
  protected createRenderRoot(): HTMLElement;
25
24
  /** The captured label nodes (the element's original light-DOM children). */
26
25
  private _buckets;
@@ -16,7 +16,6 @@ declare const MonoTableSummary_base: Constructor<MonoTableSummaryCoreInterface>
16
16
  * build shares the mixin. Both register the same tag, so a document loads one.
17
17
  */
18
18
  export declare class MonoTableSummary extends MonoTableSummary_base {
19
- static styles: import("lit").CSSResult[];
20
19
  protected createRenderRoot(): HTMLElement;
21
20
  }
22
21
  declare global {
@@ -23,7 +23,6 @@ declare const MonoTableTh_base: Constructor<MonoTableThCoreInterface> & typeof L
23
23
  * :editable.prop="{ type: 'string', editor: 'input-text' }">Name</mono-table-th></th>
24
24
  */
25
25
  export declare class MonoTableTh extends MonoTableTh_base {
26
- static styles: import("lit").CSSResult[];
27
26
  protected createRenderRoot(): HTMLElement;
28
27
  /** The captured label nodes (the element's original light-DOM children). */
29
28
  private _buckets;
@@ -19,6 +19,8 @@ export declare class MonoTableControllerCoreInterface {
19
19
  */
20
20
  protected _propsSlot?: MonoTablePropsSlot;
21
21
  protected _applyControllerProps(): void;
22
+ /** What the element renders from the controller; a notify with an unchanged key is skipped. */
23
+ protected _stateKey(): unknown[] | undefined;
22
24
  }
23
25
  /** The `props` key an element reads — see {@link MonoTableProps}. */
24
26
  export type MonoTablePropsSlot = 'th' | 'sort' | 'summary' | 'search' | 'info' | 'paging' | 'loading' | 'empty' | 'error' | 'pageSize' | 'pagingGroup' | 'detail' | 'checkbox';
@@ -16,7 +16,6 @@ declare const MonoTabs_base: Constructor<MonoTabsCoreInterface> & typeof LitElem
16
16
  * so a document loads only one.
17
17
  */
18
18
  export declare class MonoTabs extends MonoTabs_base {
19
- static styles: import("lit").CSSResult[];
20
19
  protected createRenderRoot(): HTMLElement;
21
20
  private _slotsCaptured;
22
21
  private _slotIcons;
@@ -14,7 +14,6 @@ declare const MonoTagInput_base: Constructor<MonoTagInputCoreInterface> & typeof
14
14
  * `MonoTagInputCore`; both register `mono-tag-input`, so a document loads one.
15
15
  */
16
16
  export declare class MonoTagInput extends MonoTagInput_base {
17
- static styles: import("lit").CSSResult[];
18
17
  protected createRenderRoot(): HTMLElement;
19
18
  private _slotsCaptured;
20
19
  private _slotLabel;
@@ -14,7 +14,6 @@ declare const MonoTextarea_base: Constructor<MonoTextareaCoreInterface> & typeof
14
14
  * `MonoTextareaCore`; both register `mono-textarea`, so a document loads one.
15
15
  */
16
16
  export declare class MonoTextarea extends MonoTextarea_base {
17
- static styles: import("lit").CSSResult[];
18
17
  protected createRenderRoot(): HTMLElement;
19
18
  private _slotsCaptured;
20
19
  private _slotLabel;
@@ -0,0 +1,5 @@
1
+ import { controlMonoTooltip } from "./control-tooltip.js";
2
+ //#region src/components/tooltip/field-tooltip-addon.d.ts
3
+ /** `controlMonoTooltip` once the optional `@floating-ui/dom` peer has loaded; rejects without it. */
4
+ export declare function loadFieldTooltipAddon(): Promise<typeof controlMonoTooltip>;
5
+ //#endregion
@@ -146,7 +146,26 @@ export declare class PopupPortalController implements ReactiveController, PopupL
146
146
  constructor(host: PopupHost, opts: PopupPortalOptions);
147
147
  hostConnected(): void;
148
148
  hostDisconnected(): void;
149
+ /**
150
+ * Position SYNCHRONOUSLY only on the open edge; every later update of an open popup is
151
+ * coalesced into one frame (`scheduleReposition`), and the custom-property carry-over
152
+ * (`_syncPortalVars`, two `getComputedStyle`) runs on the open edge only.
153
+ *
154
+ * `reposition()` is a write-then-read forced layout, and hosts update constantly while open —
155
+ * every keystroke in a search box, every arrow-key cursor move, every controller notify — so
156
+ * running it per update cost one synchronous layout each. A frame callback still runs before
157
+ * that frame paints, so nothing visibly lags; a panel whose content resizes WITHOUT a host
158
+ * update (a consumer re-rendering its rows) is caught by the ResizeObserver instead.
159
+ */
149
160
  hostUpdated(): void;
161
+ /** Whether the last `hostUpdated` saw the popup open — the open edge is the change. */
162
+ private _wasOpen;
163
+ private _sizeObserver;
164
+ /** Reposition when the panel or its anchor changes size while open (content, chips wrapping). */
165
+ private _observeSize;
166
+ private _unobserveSize;
167
+ /** Reposition on the next frame, coalesced with any viewport movement already pending. */
168
+ scheduleReposition(): void;
150
169
  /**
151
170
  * Only relocate to `<body>` when the host renders into light DOM
152
171
  * (`renderRoot === host`). Shadow hosts keep the panel in their shadow root.
@@ -155,7 +174,11 @@ export declare class PopupPortalController implements ReactiveController, PopupL
155
174
  private _ensurePortal;
156
175
  /** Move the panel into the body portal on first open; keep it there after. */
157
176
  private _adopt;
158
- /** Mirror the style-scope element's classes and `mono-*` attributes onto the portal. */
177
+ /**
178
+ * Mirror the style-scope element's classes and `mono-*` attributes onto the portal.
179
+ * `withVars` also carries the custom properties across — a computed-style read, so only on
180
+ * the open edge and on a scope attribute change, not on every host update.
181
+ */
159
182
  private _syncPortalClass;
160
183
  /**
161
184
  * Carry the component's public custom properties across the portal (see
@@ -16,6 +16,11 @@ export interface ReadableDataSource<T = any> {
16
16
  paginate?(value?: boolean): boolean;
17
17
  pageIndex?(value?: number): number;
18
18
  totalCount?(): number;
19
+ /**
20
+ * devextreme's live `_storeLoadOptions`. Where `expand` / `customQueryParams` live — they
21
+ * have no accessor of their own, and the DataSource spreads them into every store request.
22
+ */
23
+ loadOptions?(): Record<string, unknown> | null | undefined;
19
24
  }
20
25
  /** The structural surface of a devextreme store. */
21
26
  export interface ReadableStore {
@@ -41,7 +46,11 @@ export interface ReadAllRowsOptions {
41
46
  * Remote sources only; an array source is filtered by what it holds.
42
47
  */
43
48
  filter?: unknown;
44
- /** Extra load options spread into every chunk request (`expand`, `customQueryParams`, …). */
49
+ /**
50
+ * Extra load options spread into every chunk request (`expand`, `customQueryParams`, …).
51
+ * A DataSource's own `expand` / `customQueryParams` are inherited automatically; keys given
52
+ * here override them.
53
+ */
45
54
  loadOptions?: Record<string, unknown>;
46
55
  }
47
56
  /** A devextreme DataSource: it both loads and holds a current page. */
@@ -20353,4 +20353,4 @@ function toExcelStyle(style) {
20353
20353
  }
20354
20354
 
20355
20355
  //#endregion
20356
- export { flattenInline as a, escapeCellText as c, __exportAll as d, __toESM as f, toExcelStyle as i, stripDirectives as l, combineStyles as n, parseMarkdown as o, mergeStyles as r, encodeDirective as s, DEFAULT_STYLES as t, __commonJSMin as u };
20356
+ export { flattenInline as a, escapeCellText as c, __toESM as d, toExcelStyle as i, stripDirectives as l, combineStyles as n, parseMarkdown as o, mergeStyles as r, encodeDirective as s, DEFAULT_STYLES as t, __commonJSMin as u };
@@ -1,5 +1,4 @@
1
- import { a as hasLiveDocument, i as destroyAllTooltipControllers, r as createTooltipController, u as setMonoTooltipGlobal } from "./control-tooltip-C3rA_nSH.js";
2
- import "./tooltip-loader-Dcp9AUZn.js";
1
+ import { i as hasLiveDocument, n as createTooltipController, r as destroyAllTooltipControllers, u as setMonoTooltipGlobal } from "./control-tooltip-CoPD37_h.js";
3
2
 
4
3
  //#region src/components/tooltip/tooltip-declarative.ts
5
4
  /** The two text attributes — `message` is an alias of `content`. */
package/dist/tooltip.js CHANGED
@@ -1,5 +1,4 @@
1
- import { c as getMonoTooltipGlobal, l as resolveTooltipOptions, o as monoTooltip, s as DEFAULT_TOOLTIP_OPTIONS, t as controlMonoTooltip } from "./control-tooltip-C3rA_nSH.js";
2
- import { t as loadFloatingUi } from "./tooltip-loader-Dcp9AUZn.js";
3
- import { a as resetMonoTooltip, i as readTooltipAttributes, n as createMonoTooltip, r as destroyAllMonoTooltips, t as TOOLTIP_ATTRIBUTE_SELECTOR } from "./tooltip-Drekihf5.js";
1
+ import { a as monoTooltip, c as getMonoTooltipGlobal, l as resolveTooltipOptions, o as loadFloatingUi, s as DEFAULT_TOOLTIP_OPTIONS, t as controlMonoTooltip } from "./control-tooltip-CoPD37_h.js";
2
+ import { a as resetMonoTooltip, i as readTooltipAttributes, n as createMonoTooltip, r as destroyAllMonoTooltips, t as TOOLTIP_ATTRIBUTE_SELECTOR } from "./tooltip-Cu5IrDS9.js";
4
3
 
5
4
  export { DEFAULT_TOOLTIP_OPTIONS, TOOLTIP_ATTRIBUTE_SELECTOR, controlMonoTooltip, createMonoTooltip, destroyAllMonoTooltips, getMonoTooltipGlobal, loadFloatingUi, monoTooltip, readTooltipAttributes, resetMonoTooltip, resolveTooltipOptions };
@@ -1,10 +1,10 @@
1
- import { g as monoHostChildNodes } from "../mono-ui-KOBJcnXk.js";
2
- import { t as customElement } from "../mono-element-Bc9wElPy.js";
1
+ import { g as monoHostChildNodes } from "../mono-ui-kvLVIf1V.js";
2
+ import { t as customElement } from "../mono-element-CKcT0rwv.js";
3
3
  import { a as defineHybridPropAliases, i as defineHybridPropAlias, r as booleanStringConverter, t as __decorate } from "../decorate-DbYFpi8R.js";
4
4
  import { t as dispatchMonoEvent } from "../mono-event-BPku9HpS.js";
5
5
  import { t as isIconifyClass } from "../icon-ClxnYhBG.js";
6
- import { a as parkDetachedNodes, i as guardHostTextContent, s as placeSlotNode } from "../light-slots-BnBR29E7.js";
7
- import { LitElement, html, isServer, nothing, unsafeCSS } from "lit";
6
+ import { a as parkDetachedNodes, i as guardHostTextContent, s as placeSlotNode } from "../light-slots-B5Ck0t_E.js";
7
+ import { LitElement, html, isServer, nothing } from "lit";
8
8
  import { ref } from "lit/directives/ref.js";
9
9
  import { property, query, state } from "lit/decorators.js";
10
10
 
@@ -277,10 +277,6 @@ const MonoAccordionCore = (superClass) => {
277
277
  return MonoAccordionCoreClass;
278
278
  };
279
279
 
280
- //#endregion
281
- //#region \0raw:C:\Users\VCT-DEV\Desktop\libs\packages\helper\src\components\accordion\accordion.css?raw.js
282
- var accordion_css_raw_default = "/* @unocss-include */\r\n\r\n/* =========================================================================\r\n mono-accordion — a port of Basecoat's `.accordion`\r\n (basecoat-css@1.0.2, vega style).\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-accordion size=\"lg\" color=\"success\" model-value>\r\n <div mono-accordion mono-size=\"lg\" mono-color=\"success\" mono-open>\r\n <button mono-head type=\"button\" aria-expanded=\"true\">\r\n <span mono-glyph>…</span>\r\n <span mono-heading>\r\n <span mono-title>Question</span>\r\n <span mono-subtitle>Sub-text</span>\r\n </span>\r\n <span mono-actions>…</span>\r\n <span mono-arrow><svg …></svg></span>\r\n </button>\r\n <div mono-body role=\"region\"><div>…</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). The element writes them on its root — the\r\n host in the light build, an inner root `<div>` in the shadow one — plus the\r\n states `mono-open` and `mono-disabled`. The old classes\r\n (`.mono-accordion.md.primary.open`) are still emitted as inert hooks until\r\n 2.0 but no rule here reads them.\r\n\r\n Selector map (ours ≡ upstream):\r\n [mono-accordion-group] ≡ .accordion (flex w-full flex-col; maia /\r\n mira / luma / rhea add the frame, which is\r\n the `-group-*` knobs below)\r\n [mono-accordion] ≡ .accordion > details (not-last:border-b, and\r\n `open:bg-muted/50` on four flavors)\r\n — EXTENSION when standalone: upstream has no\r\n accordion outside a group, so on its own it\r\n keeps this component's frame (border, radius,\r\n shadow-xs). Inside a group the frame moves to\r\n the group and the item flattens to a divider.\r\n [mono-head] ≡ > summary (relative flex w-full items-start\r\n justify-between border border-transparent\r\n cursor-pointer outline-none, rounded-md py-4\r\n text-left text-sm font-medium hover:underline,\r\n focus-visible:ring-3 ring-ring/50 border-ring)\r\n — DEVIATION: a real <button>, so the row is a\r\n button for a11y rather than a <summary> whose\r\n open state the element would have to fight\r\n [mono-glyph] ≡ EXTENSION (the leading icon chip)\r\n [mono-heading] > [mono-title] ≡ the summary's own text\r\n [mono-subtitle] ≡ EXTENSION (a second line under the title;\r\n `[mono-description]` is its old name, and the\r\n element still renders both)\r\n [mono-actions] ≡ EXTENSION (trailing controls in the row)\r\n [mono-arrow] ≡ summary > svg:last-child (text-muted-foreground\r\n ms-auto size-4, rotate-180 while open)\r\n [mono-body] ≡ details > :not(summary) (overflow-hidden,\r\n pt-0 pb-4 text-sm) — plus the animated\r\n collapse, which upstream's <details> gets free\r\n [mono-size]/[mono-color] ≡ EXTENSION (upstream ships one size, no colour)\r\n [mono-disabled] ≡ details[aria-disabled] > summary\r\n (pointer-events-none opacity-50)\r\n\r\n PART NAMES ARE PATH-SCOPED. `[mono-title]`, `[mono-body]`, `[mono-actions]`\r\n and `[mono-icon]` are also card's, dropdown's and button's part names, and an\r\n accordion BODY is a place consumers put cards and buttons. Every rule here is\r\n therefore written as an explicit child path from the root — `:where([mono-accordion]\r\n > [mono-head] > [mono-heading]) > [mono-title]` — so a nested component's parts\r\n are never reached. The `:where()` keeps that path at (0,1,0), the same weight a\r\n one-attribute rule would have, so a `cssClass` utility still wins by source order.\r\n\r\n FLAVORS set `--mono-accordion-{radius,shadow,pad-x-<size>,pad-y-<size>,\r\n title-font-<size>,body-font-<size>,open-bg,group-radius,group-border-width,\r\n arrow-size,ring-width}`; every fallback here is vega's value\r\n (`node scripts/basecoat-styles.mjs --varying \"accordion\"` prints the matrix).\r\n ========================================================================= */\r\n\r\nmono-accordion {\r\n display: block;\r\n}\r\n\r\n/* =========================================\r\n Root — the item\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .accordion > details — not-last:border-b */\r\n[mono-accordion] {\r\n /* ── the six roles, each a public knob over a Basecoat token ───────────── */\r\n --_mono-accordion-primary: var(--mono-accordion-primary, var(--primary));\r\n --_mono-accordion-secondary: var(--mono-accordion-secondary, var(--secondary-foreground));\r\n --_mono-accordion-success: var(--mono-accordion-success, var(--success));\r\n --_mono-accordion-danger: var(--mono-accordion-danger, var(--destructive));\r\n --_mono-accordion-warning: var(--mono-accordion-warning, var(--warning));\r\n --_mono-accordion-info: var(--mono-accordion-info, var(--info));\r\n --_mono-accordion-teal: var(--mono-accordion-teal, var(--teal));\r\n --_mono-accordion-purple: var(--mono-accordion-purple, var(--purple));\r\n --_mono-accordion-neutral: var(--mono-accordion-neutral, var(--neutral));\r\n --_mono-accordion-dark: var(--mono-accordion-dark, var(--dark));\r\n /* the colour in play — `primary` unless a [mono-color] rule re-points it */\r\n --_mono-accordion-accent: var(--mono-accordion-accent, var(--_mono-accordion-accent-preset, var(--_mono-accordion-primary)));\r\n\r\n /* ── surfaces ──────────────────────────────────────────────────────────── */\r\n --_mono-accordion-bg: var(--mono-accordion-bg, var(--mono-accordion-surface, var(--card)));\r\n --_mono-accordion-text: var(--mono-accordion-text, var(--card-foreground));\r\n --_mono-accordion-border: var(--mono-accordion-border, var(--border));\r\n --_mono-accordion-shadow: var(--mono-accordion-shadow, var(--mono-shadow-xs));\r\n /* `open:bg-muted/50` — vega does NOT tint an open item; maia, mira, luma and\r\n rhea do, and set this knob. `--mono-accordion-head-bg` is the pre-port name,\r\n honoured until 2.0: it tinted the open HEAD, where this tints the open item\r\n (head and body alike), which is what upstream's `open:` variant does. */\r\n /* An OPAQUE fill, not an overlay: it replaces the item's own surface while\r\n open, so a flavor's `bg-muted/50` is written as that mix OVER `--card`.\r\n Defaulting to the item's surface is what makes vega's \"no tint\" a no-op. */\r\n --_mono-accordion-open-bg: var(--mono-accordion-open-bg, var(--mono-accordion-head-bg, var(--_mono-accordion-bg)));\r\n --_mono-accordion-open-border-color: var(--mono-accordion-open-border-color,\r\n color-mix(in oklab, var(--_mono-accordion-accent) 32%, var(--_mono-accordion-border)));\r\n --_mono-accordion-open-shadow: var(--mono-accordion-open-shadow,\r\n 0 3px 14px color-mix(in oklab, var(--_mono-accordion-accent) 9%, transparent));\r\n\r\n /* ── md metrics live on the unqualified root ON PURPOSE ────────────────────\r\n basecoat@1.0.2 styles/vega.css .accordion > details > summary — py-4 text-sm\r\n — DEVIATION: the inline padding is ours. Upstream's summary has none because\r\n its group is edge-to-edge in the page; this item can stand alone inside its\r\n own frame, where text flush against the border reads as a bug. maia / luma /\r\n rhea say `p-4`, which is exactly the value used here. */\r\n --_mono-accordion-pad-x: var(--mono-accordion-pad-x, var(--_mono-accordion-pad-x-preset, var(--mono-accordion-pad-x-md, calc(var(--mono-spacing) * 4))));\r\n --_mono-accordion-pad-y: var(--mono-accordion-pad-y, var(--_mono-accordion-pad-y-preset, var(--mono-accordion-pad-y-md, calc(var(--mono-spacing) * 4))));\r\n --_mono-accordion-radius: var(--mono-accordion-radius, var(--_mono-accordion-radius-preset, var(--mono-accordion-radius-md, var(--mono-radius-md))));\r\n --_mono-accordion-gap: var(--mono-accordion-gap, var(--_mono-accordion-gap-preset, calc(var(--mono-spacing) * 3)));\r\n\r\n /* ── type ──────────────────────────────────────────────────────────────── */\r\n --_mono-accordion-title-font: var(--mono-accordion-title-font, var(--_mono-accordion-title-font-preset, var(--mono-accordion-title-font-md, var(--mono-text-sm))));\r\n --_mono-accordion-title-line-height: var(--mono-accordion-title-line-height, var(--_mono-accordion-title-line-height-preset, var(--mono-text-sm--lh)));\r\n --_mono-accordion-title-weight: var(--mono-accordion-title-weight, var(--mono-font-weight-medium));\r\n /* `hover:underline` — the whole row is the control, so the hover cue is on its\r\n label. A flavor (or a consumer) sets `none` to drop it. */\r\n --_mono-accordion-title-hover-decoration: var(--mono-accordion-title-hover-decoration, underline);\r\n --_mono-accordion-description-font: var(--mono-accordion-description-font, var(--_mono-accordion-description-font-preset, var(--mono-text-xs)));\r\n --_mono-accordion-description-color: var(--mono-accordion-description-color, var(--muted-foreground));\r\n --_mono-accordion-body-font: var(--mono-accordion-body-font, var(--_mono-accordion-body-font-preset, var(--mono-accordion-body-font-md, var(--mono-text-sm))));\r\n --_mono-accordion-body-line-height: var(--mono-accordion-body-line-height, var(--_mono-accordion-body-line-height-preset, var(--mono-text-sm--lh)));\r\n --_mono-accordion-body-color: var(--mono-accordion-body-color, inherit);\r\n\r\n /* ── the chevron — `text-muted-foreground size-4` ──────────────────────── */\r\n --_mono-accordion-arrow-size: var(--mono-accordion-arrow-size, var(--_mono-accordion-arrow-size-preset, calc(var(--mono-spacing) * 4)));\r\n --_mono-accordion-arrow-color: var(--mono-accordion-arrow-color, var(--muted-foreground));\r\n /* EXTENSION: the role reads the open state at a glance. Set it to\r\n `--muted-foreground` for upstream's single-colour chevron. */\r\n --_mono-accordion-arrow-open-color: var(--mono-accordion-arrow-open-color, var(--_mono-accordion-accent));\r\n\r\n /* ── the leading chip (EXTENSION) ──────────────────────────────────────── */\r\n --_mono-accordion-glyph-size: var(--mono-accordion-glyph-size, var(--_mono-accordion-glyph-size-preset, calc(var(--mono-spacing) * 7)));\r\n --_mono-accordion-glyph-radius: var(--mono-accordion-glyph-radius, var(--_mono-accordion-glyph-radius-preset, var(--mono-radius-sm)));\r\n --_mono-accordion-glyph-bg: var(--mono-accordion-glyph-bg, color-mix(in oklab, var(--_mono-accordion-accent) 14%, transparent));\r\n --_mono-accordion-glyph-color: var(--mono-accordion-glyph-color, var(--_mono-accordion-accent));\r\n\r\n /* ── focus — `focus-visible:ring-3 ring-ring/50 border-ring` ───────────── */\r\n --_mono-accordion-ring-color: var(--mono-accordion-ring-color, var(--_mono-accordion-accent));\r\n\r\n /* The head's hover fill. Upstream has none — it underlines the label instead —\r\n so the tint is 0% on vega. A flavor sets the ALPHA (`-head-hover-tint`) and\r\n the wash is built HERE: a flavor writing the colour itself would have to\r\n reference `--_mono-accordion-accent`, which is declared on this element, and\r\n a `:root` declaration that references it is invalid at computed-value time. */\r\n --_mono-accordion-head-hover-bg: var(--mono-accordion-head-hover-bg,\r\n color-mix(in oklab, var(--_mono-accordion-accent) var(--mono-accordion-head-hover-tint, 0%), transparent));\r\n --_mono-accordion-ring-width: var(--mono-accordion-ring-width, var(--mono-ring-width));\r\n /* A slot, so a state can neutralise the resting shadow without `box-shadow: none`. */\r\n --_mono-accordion-ring: 0 0 #0000;\r\n\r\n /* Open/close animation duration, shared by the body collapse and the chevron so\r\n `--mono-accordion-duration: 0s` means a fully instant toggle.\r\n\r\n This is THE lever for a slow open/close. `grid-template-rows: 0fr → 1fr` is the\r\n only animated LAYOUT property in the library, and it re-lays-out the whole slotted\r\n subtree on every frame of the transition, so its cost scales with what is inside\r\n the body — and, because the panel's own height changes, with whatever follows it\r\n in the document too. Measured with ~320-node bodies (Chromium, median of 3), one\r\n open+close cycle: 24.8ms animated vs 3.6ms at `0s` — the animation is ~85% of the\r\n toggle's cost. Set this to `0s` on accordions whose bodies (or whose pages) are\r\n heavy.\r\n\r\n THREE approaches that look like fixes and are NOT. All were built and measured\r\n (Chromium, LayoutDuration + RecalcStyleDuration, min of 9 toggles, two scenarios:\r\n 40 panels with ~320-node bodies, and one small panel above a 2000-row sticky\r\n table). Recorded so nobody spends the afternoon on them again:\r\n\r\n 1. Pin the track to a measured PIXEL height for the transition, so the `fr`\r\n never has to be resolved against content. Landed inside the noise across\r\n three runs (+11%, -2%, -17%) and cost two extra forced layouts per toggle to\r\n measure and release. The per-frame cost is NOT the `fr` resolution — it is\r\n that the row's block size changes at all, which re-lays-out the grid item\r\n however the target size was expressed.\r\n 2. Also give the inner region a definite `height`, so its own constraint space\r\n stops changing and its subtree layout can be cached. No effect either.\r\n 3. Don't animate a layout property at all: snap the box to its final size and\r\n slide the content in on `transform`/`opacity`. A quick CSS prototype looked\r\n like a 50% win, but only because it had no `content-visibility` transition\r\n and so dropped the subtree instantly on close — the close animation was\r\n simply invisible. Made to actually work, it measured 14.6/18.3ms vs\r\n collapse's 20.0/18.4ms on heavy bodies (i.e. unreliable), and 17.4/19.6ms vs\r\n 12.6/12.8ms on the heavy-page scenario — reliably WORSE, because the\r\n transform/opacity pass costs more than the box animation it replaced.\r\n\r\n So `--mono-accordion-duration: 0s` really is the lever, and there is no cleverer\r\n one. Measured against it: heavy bodies 7.0/10.8ms vs 20.0/18.4ms (~45-65% off);\r\n heavy page 11.1/11.7ms vs 12.6/12.8ms (~10% off — on a page like that the\r\n accordion is nearly irrelevant and the page's own weight is the cost). */\r\n --_mono-accordion-duration: var(--mono-accordion-duration, var(--mono-duration));\r\n\r\n display: block;\r\n width: 100%;\r\n font-family: inherit;\r\n color: var(--_mono-accordion-text);\r\n\r\n /* EXTENSION — the standalone frame. Inside a group this is flattened below and\r\n the frame moves to the group, which is upstream's arrangement. */\r\n border: var(--mono-border-width) solid var(--_mono-accordion-border);\r\n border-radius: var(--_mono-accordion-radius);\r\n background: var(--_mono-accordion-bg);\r\n box-shadow: var(--_mono-accordion-shadow);\r\n overflow: hidden;\r\n transition:\r\n border-color var(--mono-duration) var(--mono-ease),\r\n box-shadow var(--mono-duration) var(--mono-ease),\r\n background-color var(--mono-duration) var(--mono-ease);\r\n}\r\n\r\n[mono-accordion],\r\n:where([mono-accordion]) *,\r\n:where([mono-accordion]) *::before,\r\n:where([mono-accordion]) *::after {\r\n box-sizing: border-box;\r\n}\r\n\r\n/* The shadow build renders EVERY region up front (so DSD can project into them\r\n server-side) and marks the ones with nothing in them; the light build renders\r\n only what exists. Hiding them here is what keeps the two builds identical.\r\n\r\n NOT wrapped in `:where()`, unlike the other parts: a region rule is two\r\n attributes strong, so a zero-weight hide would tie and lose on source order. */\r\n[mono-accordion] :is(\r\n [mono-glyph],\r\n [mono-heading],\r\n [mono-title],\r\n [mono-subtitle],\r\n [mono-description],\r\n [mono-actions]\r\n)[mono-empty] {\r\n display: none;\r\n}\r\n\r\n/* =========================================\r\n Group — `.accordion`\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/accordion.css .accordion — flex w-full flex-col\r\n The GROUP is consumer markup — the element renders one item, not the list — so\r\n unlike every part below, its pre-port CLASS is public API and keeps working\r\n beside the attribute until 2.0.\r\n The frame knobs are inert on vega (0 width, no radius) and set by the four\r\n flavors whose `.accordion` says `overflow-hidden rounded-2xl border`. */\r\n:is([mono-accordion-group], .mono-accordion-group) {\r\n --_mono-accordion-group-gap: var(--mono-accordion-group-gap, 0px);\r\n --_mono-accordion-group-radius: var(--mono-accordion-group-radius, 0px);\r\n --_mono-accordion-group-border-width: var(--mono-accordion-group-border-width, 0px);\r\n --_mono-accordion-group-border-color: var(--mono-accordion-group-border-color, var(--border));\r\n\r\n display: flex;\r\n width: 100%;\r\n flex-direction: column;\r\n gap: var(--_mono-accordion-group-gap);\r\n box-sizing: border-box;\r\n border: var(--_mono-accordion-group-border-width) solid var(--_mono-accordion-group-border-color);\r\n border-radius: var(--_mono-accordion-group-radius);\r\n overflow: hidden;\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .accordion > details — not-last:border-b\r\n In a group the ITEM stops being a card: the frame is the group's, and all an\r\n item carries is the hairline to the next one.\r\n\r\n TWO selectors for one rule, because the item is not always a child of the\r\n group. Hand-written markup nests `[mono-accordion]` directly, so the `>`\r\n path matches; the ELEMENT puts a custom-element host in between (light) or a\r\n shadow boundary (shadow), which no selector crosses — so it detects the group\r\n itself and writes `mono-grouped` / `mono-last` on its root. */\r\n:where([mono-accordion-group], .mono-accordion-group) > [mono-accordion],\r\n[mono-accordion][mono-grouped] {\r\n border-width: 0;\r\n border-radius: 0;\r\n box-shadow: none;\r\n}\r\n\r\n/* The divider rides the group's own CHILD, whatever that is — the item itself in\r\n hand-written markup, the custom-element host when the element renders it. That\r\n is what makes `:last-child` reliable: the host is a child of the group in both\r\n builds, where the ITEM is one only in raw markup, and an item that asked \"am I\r\n last?\" itself would answer from however many siblings existed when it rendered. */\r\n:where([mono-accordion-group], .mono-accordion-group)\r\n > :is([mono-accordion], mono-accordion, mono-shadow-accordion) {\r\n border-bottom: var(--mono-border-width) solid var(--mono-accordion-border, var(--border));\r\n}\r\n\r\n:where([mono-accordion-group], .mono-accordion-group)\r\n > :is([mono-accordion], mono-accordion, mono-shadow-accordion):last-child {\r\n border-bottom-width: 0;\r\n}\r\n\r\n/* A group with a GAP has separate boxes again, and a divider would float in the\r\n space between them — so a gap is a consumer's own arrangement, not upstream's,\r\n and they set `--mono-accordion-group-gap` knowing the dividers go with it. */\r\n\r\n/* =========================================\r\n Sizes — EXTENSION: Basecoat ships ONE accordion size; md is its `summary`\r\n ========================================= */\r\n\r\n[mono-accordion][mono-size=\"xs\"] {\r\n --_mono-accordion-pad-x-preset: var(--mono-accordion-pad-x-xs, calc(var(--mono-spacing) * 2.5));\r\n --_mono-accordion-pad-y-preset: var(--mono-accordion-pad-y-xs, calc(var(--mono-spacing) * 2));\r\n --_mono-accordion-radius-preset: var(--mono-accordion-radius-xs, var(--mono-radius-sm));\r\n --_mono-accordion-gap-preset: calc(var(--mono-spacing) * 1.5);\r\n --_mono-accordion-title-font-preset: var(--mono-accordion-title-font-xs, var(--mono-text-xs));\r\n --_mono-accordion-title-line-height-preset: var(--mono-text-xs--lh);\r\n --_mono-accordion-description-font-preset: var(--mono-text-xs);\r\n --_mono-accordion-body-font-preset: var(--mono-accordion-body-font-xs, var(--mono-text-xs));\r\n --_mono-accordion-body-line-height-preset: var(--mono-text-xs--lh);\r\n --_mono-accordion-arrow-size-preset: calc(var(--mono-spacing) * 3);\r\n --_mono-accordion-glyph-size-preset: calc(var(--mono-spacing) * 4.5);\r\n --_mono-accordion-glyph-radius-preset: var(--mono-radius-sm);\r\n}\r\n\r\n[mono-accordion][mono-size=\"sm\"] {\r\n --_mono-accordion-pad-x-preset: var(--mono-accordion-pad-x-sm, calc(var(--mono-spacing) * 3));\r\n --_mono-accordion-pad-y-preset: var(--mono-accordion-pad-y-sm, calc(var(--mono-spacing) * 3));\r\n --_mono-accordion-radius-preset: var(--mono-accordion-radius-sm, var(--mono-radius-md));\r\n --_mono-accordion-gap-preset: calc(var(--mono-spacing) * 2);\r\n --_mono-accordion-title-font-preset: var(--mono-accordion-title-font-sm, var(--mono-text-xs));\r\n --_mono-accordion-title-line-height-preset: var(--mono-text-xs--lh);\r\n --_mono-accordion-description-font-preset: var(--mono-text-xs);\r\n --_mono-accordion-body-font-preset: var(--mono-accordion-body-font-sm, var(--mono-text-xs));\r\n --_mono-accordion-body-line-height-preset: var(--mono-text-xs--lh);\r\n --_mono-accordion-arrow-size-preset: calc(var(--mono-spacing) * 3.5);\r\n --_mono-accordion-glyph-size-preset: calc(var(--mono-spacing) * 6);\r\n}\r\n\r\n[mono-accordion][mono-size=\"lg\"] {\r\n --_mono-accordion-pad-x-preset: var(--mono-accordion-pad-x-lg, calc(var(--mono-spacing) * 5));\r\n --_mono-accordion-pad-y-preset: var(--mono-accordion-pad-y-lg, calc(var(--mono-spacing) * 5));\r\n --_mono-accordion-radius-preset: var(--mono-accordion-radius-lg, var(--mono-radius-lg));\r\n --_mono-accordion-gap-preset: calc(var(--mono-spacing) * 3.5);\r\n --_mono-accordion-title-font-preset: var(--mono-accordion-title-font-lg, var(--mono-text-base));\r\n --_mono-accordion-title-line-height-preset: var(--mono-text-base--lh);\r\n --_mono-accordion-body-font-preset: var(--mono-accordion-body-font-lg, var(--mono-text-sm));\r\n --_mono-accordion-arrow-size-preset: calc(var(--mono-spacing) * 5);\r\n --_mono-accordion-glyph-size-preset: calc(var(--mono-spacing) * 8);\r\n --_mono-accordion-glyph-radius-preset: var(--mono-radius-md);\r\n}\r\n\r\n[mono-accordion][mono-size=\"xl\"] {\r\n --_mono-accordion-pad-x-preset: var(--mono-accordion-pad-x-xl, calc(var(--mono-spacing) * 6));\r\n --_mono-accordion-pad-y-preset: var(--mono-accordion-pad-y-xl, calc(var(--mono-spacing) * 6));\r\n --_mono-accordion-radius-preset: var(--mono-accordion-radius-xl, var(--mono-radius-xl));\r\n --_mono-accordion-gap-preset: calc(var(--mono-spacing) * 4);\r\n --_mono-accordion-title-font-preset: var(--mono-accordion-title-font-xl, var(--mono-text-lg));\r\n --_mono-accordion-title-line-height-preset: var(--mono-text-lg--lh);\r\n --_mono-accordion-description-font-preset: var(--mono-text-sm);\r\n --_mono-accordion-body-font-preset: var(--mono-accordion-body-font-xl, var(--mono-text-base));\r\n --_mono-accordion-body-line-height-preset: var(--mono-text-base--lh);\r\n --_mono-accordion-arrow-size-preset: calc(var(--mono-spacing) * 5.5);\r\n --_mono-accordion-glyph-size-preset: calc(var(--mono-spacing) * 9);\r\n --_mono-accordion-glyph-radius-preset: var(--mono-radius-lg);\r\n}\r\n\r\n[mono-accordion][mono-size=\"xxl\"] {\r\n --_mono-accordion-pad-x-preset: var(--mono-accordion-pad-x-xxl, calc(var(--mono-spacing) * 7));\r\n --_mono-accordion-pad-y-preset: var(--mono-accordion-pad-y-xxl, calc(var(--mono-spacing) * 7));\r\n --_mono-accordion-radius-preset: var(--mono-accordion-radius-xxl, var(--mono-radius-xl));\r\n --_mono-accordion-gap-preset: calc(var(--mono-spacing) * 4.5);\r\n --_mono-accordion-title-font-preset: var(--mono-accordion-title-font-xxl, var(--mono-text-xl));\r\n --_mono-accordion-title-line-height-preset: var(--mono-text-xl--lh);\r\n --_mono-accordion-description-font-preset: var(--mono-text-sm);\r\n --_mono-accordion-body-font-preset: var(--mono-accordion-body-font-xxl, var(--mono-text-lg));\r\n --_mono-accordion-body-line-height-preset: var(--mono-text-lg--lh);\r\n --_mono-accordion-arrow-size-preset: calc(var(--mono-spacing) * 6);\r\n --_mono-accordion-glyph-size-preset: calc(var(--mono-spacing) * 10);\r\n --_mono-accordion-glyph-radius-preset: var(--mono-radius-lg);\r\n}\r\n\r\n/* =========================================\r\n Colours — EXTENSION: the role tints the chevron, the ring and the open edge\r\n ========================================= */\r\n\r\n[mono-accordion][mono-color=\"primary\"] { --_mono-accordion-accent-preset: var(--_mono-accordion-primary); }\r\n[mono-accordion][mono-color=\"secondary\"] { --_mono-accordion-accent-preset: var(--_mono-accordion-secondary); }\r\n[mono-accordion][mono-color=\"success\"] { --_mono-accordion-accent-preset: var(--_mono-accordion-success); }\r\n[mono-accordion][mono-color=\"danger\"] { --_mono-accordion-accent-preset: var(--_mono-accordion-danger); }\r\n[mono-accordion][mono-color=\"warning\"] { --_mono-accordion-accent-preset: var(--_mono-accordion-warning); }\r\n[mono-accordion][mono-color=\"info\"] { --_mono-accordion-accent-preset: var(--_mono-accordion-info); }\r\n[mono-accordion][mono-color=\"teal\"] { --_mono-accordion-accent-preset: var(--_mono-accordion-teal); }\r\n[mono-accordion][mono-color=\"purple\"] { --_mono-accordion-accent-preset: var(--_mono-accordion-purple); }\r\n[mono-accordion][mono-color=\"neutral\"] { --_mono-accordion-accent-preset: var(--_mono-accordion-neutral); }\r\n[mono-accordion][mono-color=\"dark\"] { --_mono-accordion-accent-preset: var(--_mono-accordion-dark); }\r\n\r\n/* =========================================\r\n States\r\n ========================================= */\r\n\r\n[mono-accordion][mono-open] {\r\n border-color: var(--_mono-accordion-open-border-color);\r\n box-shadow: var(--_mono-accordion-open-shadow);\r\n background: var(--_mono-accordion-open-bg);\r\n}\r\n\r\n/* In a group the item has no frame to tint — only the open wash survives. */\r\n:where([mono-accordion-group], .mono-accordion-group) > [mono-accordion][mono-open],\r\n[mono-accordion][mono-grouped][mono-open] {\r\n border-color: var(--_mono-accordion-border);\r\n box-shadow: none;\r\n}\r\n\r\n/* basecoat@1.0.2 components/accordion.css .accordion > details[aria-disabled='true'] > summary, .accordion > details > summary[aria-disabled='true']\r\n — pointer-events-none opacity-50. DEVIATION: 0.6, this component's pre-port\r\n value, and on the whole item rather than the summary alone (the body is\r\n equally unusable). */\r\n[mono-accordion][mono-disabled] {\r\n opacity: 0.6;\r\n pointer-events: none;\r\n cursor: not-allowed;\r\n}\r\n\r\n/* =========================================\r\n Head — `> summary`\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/accordion.css .accordion > details > summary —\r\n relative flex w-full flex-1 cursor-pointer list-none items-start\r\n justify-between border border-transparent transition-all outline-none */\r\n/* basecoat@1.0.2 styles/vega.css .accordion > details > summary — rounded-md py-4\r\n text-left text-sm font-medium hover:underline focus-visible:ring-3\r\n focus-visible:ring-ring/50 focus-visible:border-ring\r\n — DEVIATIONS: a real <button> (so it needs the UA button reset), and\r\n `items-center` rather than `items-start`: this row can carry a glyph chip and\r\n trailing actions, which upstream's text-only summary never does. */\r\n:where([mono-accordion]) > [mono-head] {\r\n position: relative;\r\n display: flex;\r\n width: 100%;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: var(--_mono-accordion-gap);\r\n padding: var(--_mono-accordion-pad-y) var(--_mono-accordion-pad-x);\r\n border: var(--mono-border-width) solid transparent;\r\n border-radius: var(--_mono-accordion-radius);\r\n background: none;\r\n color: inherit;\r\n font: inherit;\r\n text-align: left;\r\n cursor: pointer;\r\n user-select: none;\r\n outline: none;\r\n appearance: none;\r\n box-shadow: var(--_mono-accordion-ring);\r\n transition:\r\n background-color var(--mono-duration) var(--mono-ease),\r\n border-color var(--mono-duration) var(--mono-ease),\r\n box-shadow var(--mono-duration) var(--mono-ease);\r\n}\r\n\r\n[mono-accordion] > [mono-head]:focus-visible {\r\n border-color: var(--_mono-accordion-ring-color);\r\n --_mono-accordion-ring: 0 0 0 var(--_mono-accordion-ring-width)\r\n color-mix(in oklab, var(--_mono-accordion-ring-color) var(--mono-ring-alpha), transparent);\r\n}\r\n\r\n/* `hover:underline` — on the label, which is the only text in upstream's summary. */\r\n@media (hover: hover) {\r\n [mono-accordion] > [mono-head]:hover:not(:disabled) {\r\n background: var(--_mono-accordion-head-hover-bg);\r\n }\r\n\r\n [mono-accordion] > [mono-head]:hover:not(:disabled) [mono-title] {\r\n text-decoration-line: var(--_mono-accordion-title-hover-decoration);\r\n }\r\n}\r\n\r\n[mono-accordion] > [mono-head]:disabled {\r\n pointer-events: none;\r\n cursor: not-allowed;\r\n}\r\n\r\n/* =========================================\r\n Leading chip — EXTENSION\r\n ========================================= */\r\n\r\n:where([mono-accordion] > [mono-head]) > [mono-glyph] {\r\n flex-shrink: 0;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: var(--_mono-accordion-glyph-size);\r\n height: var(--_mono-accordion-glyph-size);\r\n border-radius: var(--_mono-accordion-glyph-radius);\r\n background: var(--_mono-accordion-glyph-bg);\r\n color: var(--_mono-accordion-glyph-color);\r\n line-height: 1;\r\n}\r\n\r\n/* The glyph itself fills the chip at 62% — light: the `[data-mono-slot]`\r\n placeholder the icon is moved into; shadow: the projected icon. \"Icon\" is an\r\n svg OR an element painted by a class (a UnoCSS/Iconify mask span such as\r\n `<span slot=\"icon\" class=\"i-tabler-filter-search\">`), so the shadow rule takes\r\n any slotted element, not just svg. */\r\n[mono-accordion] > [mono-head] > [mono-glyph] > [data-mono-slot=\"icon\"],\r\n[mono-accordion] > [mono-head] > [mono-glyph] > svg,\r\n[mono-accordion] > [mono-head] > [mono-glyph] slot[name=\"icon\"]::slotted(*),\r\n[mono-accordion] > [mono-head] > [mono-glyph] .mono-accordion-iconify {\r\n display: block;\r\n width: 62%;\r\n height: 62%;\r\n}\r\n\r\n/* …and the light build's icon fills that placeholder (chip.css's\r\n `[data-mono-slot=\"icon\"] > *`). It used to lean on a global\r\n `[data-mono-slot='icon'] > svg` rule in chip.css; since the Basecoat port that\r\n rule is scoped to chips, and an unsized inline svg falls back to 300×150. Only\r\n svg was sized here, so a mask span stayed `display: inline` — its icon-class\r\n `width/height: 1em` did not apply and it rendered 0×0. */\r\n[mono-accordion] > [mono-head] > [mono-glyph] > [data-mono-slot=\"icon\"] > *,\r\n[mono-accordion] > [mono-head] > [mono-glyph] .mono-accordion-iconify > svg {\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n/* =========================================\r\n Title + description\r\n ========================================= */\r\n\r\n:where([mono-accordion] > [mono-head]) > [mono-heading] {\r\n flex: 1;\r\n min-width: 0;\r\n display: flex;\r\n flex-direction: column;\r\n gap: calc(var(--mono-spacing) * 0.25);\r\n}\r\n\r\n/* `> slot[name=\"header\"]`: in the shadow build the title/subtitle are the\r\n FALLBACK content of `<slot name=\"header\">`, so they sit one element deeper. */\r\n:where(\r\n [mono-accordion] > [mono-head] > [mono-heading],\r\n [mono-accordion] > [mono-head] > [mono-heading] > slot[name=\"header\"]\r\n) > [mono-title] {\r\n font-size: var(--_mono-accordion-title-font);\r\n line-height: var(--_mono-accordion-title-line-height);\r\n font-weight: var(--_mono-accordion-title-weight);\r\n color: var(--_mono-accordion-text);\r\n}\r\n\r\n:where(\r\n [mono-accordion] > [mono-head] > [mono-heading],\r\n [mono-accordion] > [mono-head] > [mono-heading] > slot[name=\"header\"]\r\n) > :is([mono-subtitle], [mono-description]) {\r\n font-size: var(--_mono-accordion-description-font);\r\n line-height: var(--mono-leading-normal);\r\n color: var(--_mono-accordion-description-color);\r\n}\r\n\r\n:where([mono-accordion] > [mono-head]) > [mono-actions] {\r\n flex-shrink: 0;\r\n display: inline-flex;\r\n align-items: center;\r\n gap: calc(var(--mono-spacing) * 1.5);\r\n}\r\n\r\n/* =========================================\r\n Chevron — `summary > svg:last-child`\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .accordion > details > summary > svg:last-child\r\n — text-muted-foreground ms-auto size-4 */\r\n/* basecoat@1.0.2 components/accordion.css .accordion > details > summary > svg:last-child\r\n — pointer-events-none shrink-0 transition-transform */\r\n:where([mono-accordion] > [mono-head]) > [mono-arrow] {\r\n flex-shrink: 0;\r\n margin-inline-start: auto;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: var(--_mono-accordion-arrow-size);\r\n height: var(--_mono-accordion-arrow-size);\r\n color: var(--_mono-accordion-arrow-color);\r\n pointer-events: none;\r\n transition:\r\n rotate var(--_mono-accordion-duration) var(--mono-ease),\r\n color var(--mono-duration) var(--mono-ease);\r\n}\r\n\r\n[mono-accordion] > [mono-head] > [mono-arrow] > :is(svg, span) {\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n/* basecoat@1.0.2 components/accordion.css .accordion > details[open] > summary > svg:last-child\r\n — rotate-180 */\r\n[mono-accordion][mono-open] > [mono-head] > [mono-arrow] {\r\n rotate: 180deg;\r\n color: var(--_mono-accordion-arrow-open-color);\r\n}\r\n\r\n/* =========================================\r\n Body — `details > :not(summary)`\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 components/accordion.css .accordion > details > :not(summary) — overflow-hidden */\r\n/* basecoat@1.0.2 styles/vega.css .accordion > details > :not(summary) — pt-0 pb-4 text-sm\r\n A <details> collapses for free; a div has to be animated. The\r\n `grid-template-rows: 0fr → 1fr` trick measures the content's natural height\r\n through the grid track and interpolates the row size, with the vertical padding\r\n and the top border collapsing in lockstep so the entrance feels of-a-piece.\r\n `> * { min-height: 0 }` lets grid items shrink below their intrinsic height when\r\n the row is 0fr — without it the body would refuse to collapse. */\r\n:where([mono-accordion]) > [mono-body] {\r\n display: grid;\r\n grid-template-rows: 0fr;\r\n overflow: hidden;\r\n padding: 0 var(--_mono-accordion-pad-x);\r\n font-size: var(--_mono-accordion-body-font);\r\n line-height: var(--_mono-accordion-body-line-height);\r\n color: var(--_mono-accordion-body-color);\r\n border-top: var(--mono-border-width) solid transparent;\r\n\r\n /* Scope this body's layout/paint work to its own box. Measured effect: neutral on\r\n toggle cost, a modest win on the initial layout of a long list of accordions.\r\n (It is NOT what fixes sibling cost — Chrome already does not re-lay-out sibling\r\n subtrees when one accordion animates; that was measured, not assumed.)\r\n `paint` adds no new clipping — `overflow: hidden` above already clips. `layout`\r\n does make this a containing block + stacking context for absolutely positioned\r\n descendants, which is safe here because that same `overflow: hidden` already\r\n confined them, and mono's own popups are moved to a <body> portal. */\r\n contain: layout paint;\r\n\r\n transition:\r\n grid-template-rows var(--_mono-accordion-duration) var(--mono-ease),\r\n padding-top var(--_mono-accordion-duration) var(--mono-ease),\r\n padding-bottom var(--_mono-accordion-duration) var(--mono-ease),\r\n border-top-color var(--mono-duration) var(--mono-ease);\r\n}\r\n\r\n[mono-accordion] > [mono-body] > * {\r\n min-width: 0;\r\n min-height: 0;\r\n}\r\n\r\n/* Shadow build: the body's native <slot>s (`body` + the default one) default to\r\n `display: contents` and so have no box — slotted content would become the grid\r\n items directly (un-targetable by `> * { min-height: 0 }`) and keep the\r\n `grid-template-rows: 0fr → 1fr` track from ever collapsing. They sit in ONE\r\n `[mono-body-slots]` block, the single grid item (like the light build's\r\n <span data-mono-slot=\"body\">), so the open/close collapse works. A bare `slot`\r\n child is kept for markup that still renders one. */\r\n[mono-accordion] > [mono-body] > :is(slot, [mono-body-slots]) {\r\n display: block;\r\n min-width: 0;\r\n min-height: 0;\r\n}\r\n\r\n/* Standalone, the item IS the frame, so the open body is separated from the head\r\n by a hairline the way a card's footer is — EXTENSION, and the reason the top\r\n padding is not upstream's `pt-0` here. */\r\n[mono-accordion][mono-open] > [mono-body] {\r\n grid-template-rows: 1fr;\r\n padding-top: var(--_mono-accordion-pad-y);\r\n padding-bottom: var(--_mono-accordion-pad-y);\r\n border-top-color: var(--_mono-accordion-border);\r\n}\r\n\r\n/* basecoat@1.0.2 styles/vega.css .accordion > details > :not(summary) — pt-0.\r\n In a group the head and its body are one run of text between two dividers,\r\n exactly as upstream renders it, so the top gap and the hairline both go. */\r\n:where([mono-accordion-group], .mono-accordion-group) > [mono-accordion][mono-open] > [mono-body],\r\n[mono-accordion][mono-grouped][mono-open] > [mono-body] {\r\n padding-top: 0;\r\n border-top-color: transparent;\r\n}\r\n\r\n/* A collapsed body is still fully rendered — the `0fr` track only hides it — so\r\n without this every closed accordion keeps its whole slotted subtree in the style,\r\n layout and paint trees. `content-visibility: hidden` drops it entirely.\r\n\r\n What this buys, measured with ~320-node bodies (Chromium, median of 3):\r\n initial layout, 40 panels: 157ms → 18ms, and flat in the panel count\r\n (5 panels: 52ms → 23ms). That is the cost of putting a long list of heavy\r\n accordions on screen at all — e.g. opening a modal that builds N entry forms.\r\n What it does NOT buy: a cheaper toggle. Skipping the subtree means an opening\r\n panel is laid out from scratch, so one open+close costs slightly MORE\r\n (23ms → 31ms at 40 panels). The toggle's real cost is the animation above —\r\n see `--mono-accordion-duration`.\r\n\r\n `allow-discrete` is what makes it safe to animate. Opening flips the property to\r\n `visible` at 0%, so the grid can still measure the content it is expanding to;\r\n closing holds it `visible` until 100%, so the collapse plays out before the content\r\n is dropped. Get that backwards and a closing body vanishes instantly instead of\r\n collapsing.\r\n\r\n Gated behind @supports deliberately. `content-visibility … allow-discrete` inside\r\n the `transition` SHORTHAND is a parse error to a browser without the feature, and a\r\n single bad entry drops the WHOLE declaration — which would take every accordion\r\n transition with it. Inside the guard the shorthand is known to parse, so the list is\r\n restated in full rather than patched with the `transition-behavior` longhand.\r\n Browsers without support keep exactly the previous behaviour.\r\n\r\n Must stay ABOVE the reduced-motion block: @supports adds no specificity, so source\r\n order is the only thing keeping `transition: none` the winner down there. */\r\n@supports (transition-behavior: allow-discrete) {\r\n :where([mono-accordion]) > [mono-body] {\r\n content-visibility: hidden;\r\n /* Must stay `0`, NOT `auto 0`. `content-visibility: hidden` skips this element's\r\n own contents, so its size comes from HERE — and the `auto` keyword's remembered\r\n size is the panel's last OPEN height, which leaves a closed accordion holding\r\n full height with nothing in it. Tried, measured, reverted: a closed body read\r\n 656px instead of collapsing. The scrollbar-stability that `auto` normally buys\r\n does not apply to an element that is itself the skipped one. */\r\n contain-intrinsic-size: 0;\r\n transition:\r\n grid-template-rows var(--_mono-accordion-duration) var(--mono-ease),\r\n padding-top var(--_mono-accordion-duration) var(--mono-ease),\r\n padding-bottom var(--_mono-accordion-duration) var(--mono-ease),\r\n border-top-color var(--mono-duration) var(--mono-ease),\r\n content-visibility var(--_mono-accordion-duration) allow-discrete;\r\n }\r\n\r\n [mono-accordion][mono-open] > [mono-body] {\r\n content-visibility: visible;\r\n }\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n [mono-accordion],\r\n [mono-accordion] > [mono-head],\r\n [mono-accordion] > [mono-head] > [mono-arrow],\r\n [mono-accordion] > [mono-body] {\r\n transition: none;\r\n }\r\n}\r\n";
283
-
284
280
  //#endregion
285
281
  //#region src/components/accordion/mono-accordion.ts
286
282
  let MonoAccordion = class MonoAccordion extends MonoAccordionCore(LitElement) {
@@ -295,9 +291,6 @@ let MonoAccordion = class MonoAccordion extends MonoAccordionCore(LitElement) {
295
291
  this._slotActions = [];
296
292
  this._slotBody = [];
297
293
  }
298
- static {
299
- this.styles = [unsafeCSS(accordion_css_raw_default)];
300
- }
301
294
  createRenderRoot() {
302
295
  return this;
303
296
  }