@mono-lit/helper 0.0.6 → 0.0.7

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 (161) 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-CS0w0wlO.js} +26 -9
  3. package/dist/{data-source-options-QjuI73g8.js → data-source-options-lDR-g9Eb.js} +26 -9
  4. package/dist/{data-source-read-FxqzQkk2.js → data-source-read-Cp_h7NIf.js} +5 -2
  5. package/dist/{data-source-read-i6CYSUEl.js → data-source-read-DTJ_Mnez.js} +5 -2
  6. package/dist/{excel-BPdDt06G.js → excel-DtRpxmxs.js} +1 -1
  7. package/dist/{export-DgomqI_3.js → export-D27RJa1w.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-Mg0Snp0t.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-BAH9Zb3p.js} +2 -2
  26. package/dist/{mono-data-dropdown-DxpUUk2y.js → mono-data-dropdown-BsY5IuIo.js} +72 -6
  27. package/dist/{mono-data-grid-KDpu4d4_.js → mono-data-grid-CZFjpnOD.js} +125 -18
  28. package/dist/{mono-data-grid-8jmeIXUU.js → mono-data-grid-kV4jYu2g.js} +124 -17
  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/{styles-BODNpZV1.js → styles-D-ergrfR.js} +1 -1
  83. package/dist/{tooltip-Drekihf5.js → tooltip-Cu5IrDS9.js} +1 -2
  84. package/dist/tooltip.js +2 -3
  85. package/dist/ui/accordion.js +4 -11
  86. package/dist/ui/alert.js +3 -10
  87. package/dist/ui/breadcrumb.js +4 -14
  88. package/dist/ui/button-dropdown.js +22 -15
  89. package/dist/ui/button.js +1 -1
  90. package/dist/ui/card.js +4 -11
  91. package/dist/ui/chart.js +4 -23
  92. package/dist/ui/checkbox.js +4 -11
  93. package/dist/ui/chip.js +6 -9
  94. package/dist/ui/date.js +5 -12
  95. package/dist/ui/drawer.js +5 -12
  96. package/dist/ui/dropdown-table.js +89 -37
  97. package/dist/ui/dropdown.js +34 -21
  98. package/dist/ui/file-upload.js +4 -11
  99. package/dist/ui/filter.js +3 -10
  100. package/dist/ui/form.js +1 -1
  101. package/dist/ui/index.css +3840 -3840
  102. package/dist/ui/input.js +6 -13
  103. package/dist/ui/menu.js +4 -11
  104. package/dist/ui/modal.js +6 -13
  105. package/dist/ui/nav.js +4 -11
  106. package/dist/ui/otp.js +6 -13
  107. package/dist/ui/radio.js +4 -11
  108. package/dist/ui/rich-text-editor.js +4 -11
  109. package/dist/ui/select.js +12 -14
  110. package/dist/ui/shadow/accordion.js +1 -1
  111. package/dist/ui/shadow/alert.js +1 -1
  112. package/dist/ui/shadow/breadcrumb.js +1 -1
  113. package/dist/ui/shadow/button-dropdown.js +21 -7
  114. package/dist/ui/shadow/button.js +1 -1
  115. package/dist/ui/shadow/card.js +1 -1
  116. package/dist/ui/shadow/chart.js +3 -3
  117. package/dist/ui/shadow/checkbox.js +2 -2
  118. package/dist/ui/shadow/chip.js +1 -1
  119. package/dist/ui/shadow/date.js +4 -4
  120. package/dist/ui/shadow/drawer.js +2 -2
  121. package/dist/ui/shadow/dropdown-table.js +159 -34
  122. package/dist/ui/shadow/dropdown.js +31 -11
  123. package/dist/ui/shadow/file-upload.js +2 -2
  124. package/dist/ui/shadow/filter.js +1 -1
  125. package/dist/ui/shadow/input.js +5 -5
  126. package/dist/ui/shadow/menu.js +1 -1
  127. package/dist/ui/shadow/modal.js +3 -3
  128. package/dist/ui/shadow/nav.js +1 -1
  129. package/dist/ui/shadow/otp.js +5 -5
  130. package/dist/ui/shadow/radio.js +2 -2
  131. package/dist/ui/shadow/rich-text-editor.js +2 -2
  132. package/dist/ui/shadow/select.js +11 -6
  133. package/dist/ui/shadow/sidebar.js +2 -2
  134. package/dist/ui/shadow/slider.js +4 -4
  135. package/dist/ui/shadow/switch.js +2 -2
  136. package/dist/ui/shadow/table.js +84 -20
  137. package/dist/ui/shadow/tabs.js +1 -1
  138. package/dist/ui/shadow/tag-input.js +117 -21
  139. package/dist/ui/shadow/textarea.js +4 -4
  140. package/dist/ui/sidebar.js +4 -11
  141. package/dist/ui/slider.js +5 -12
  142. package/dist/ui/switch.js +4 -11
  143. package/dist/ui/table.js +85 -64
  144. package/dist/ui/tabs.js +4 -11
  145. package/dist/ui/tag-input.js +118 -29
  146. package/dist/ui/textarea.js +6 -13
  147. package/dist/ui/theme/luma.css +495 -495
  148. package/dist/ui/theme/lyra.css +495 -495
  149. package/dist/ui/theme/maia.css +495 -495
  150. package/dist/ui/theme/mira.css +495 -495
  151. package/dist/ui/theme/nova.css +495 -495
  152. package/dist/ui/theme/one.css +742 -742
  153. package/dist/ui/theme/rhea.css +495 -495
  154. package/dist/ui/theme/sera.css +495 -495
  155. package/dist/ui/theme/vega.css +495 -495
  156. package/package.json +2 -2
  157. package/dist/field-validation.css_raw-B3Iu33rS.js +0 -178
  158. package/dist/input.css_raw-CQu2fAsU.js +0 -5
  159. package/dist/mono-button-Cy5-Y0At.js +0 -878
  160. package/dist/tooltip-loader-3U9FTOXj.js +0 -20
  161. package/dist/tooltip-loader-Dcp9AUZn.js +0 -23
@@ -1,9 +1,9 @@
1
- import { a as __decorate, c as defineHybridPropAlias, f as customElement, i as withShadowUtilityStyles, l as defineHybridPropAliases, r as toShadowCss, s as booleanStringConverter, t as flushSsrHydration, v as toCssSize } from "../../hydration-flush-9AJE8FRl.js";
1
+ import { a as __decorate, c as defineHybridPropAlias, f as customElement, i as withShadowUtilityStyles, l as defineHybridPropAliases, r as toShadowCss, s as booleanStringConverter, t as flushSsrHydration, v as toCssSize } from "../../hydration-flush-BaE9gN3C.js";
2
2
  import { t as dispatchMonoEvent } from "../../mono-event-BPku9HpS.js";
3
3
  import { n as cssPart } from "../../css-class-B6Tc_MAx.js";
4
4
  import { a as parseFormat, t as applyFormat } from "../../input-format-GrRCJBqV.js";
5
- import { t as MonoFormControlCore } from "../../form-control-core-rW2WvOcb.js";
6
- import { n as FieldTooltipController, t as field_tooltip_css_raw_default } from "../../field-tooltip.css_raw-DEctHXKm.js";
5
+ import { t as MonoFormControlCore } from "../../form-control-core-BbiACMtL.js";
6
+ import { n as FieldTooltipController, t as field_tooltip_css_raw_default } from "../../field-tooltip.css_raw-U5UeTa2d.js";
7
7
  import { LitElement, html, isServer, nothing, unsafeCSS } from "lit";
8
8
  import { property, state } from "lit/decorators.js";
9
9
  import { ifDefined } from "lit/directives/if-defined.js";
@@ -1011,7 +1011,7 @@ const MonoSliderCore = (superClass) => {
1011
1011
 
1012
1012
  //#endregion
1013
1013
  //#region \0raw:C:\Users\VCT-DEV\Desktop\libs\packages\helper\src\components\slider\slider.css?raw.js
1014
- var slider_css_raw_default = "/* =========================================================================\n mono-slider — a multi-thumb slider drawn in the look of Basecoat's range\n (basecoat-css@1.0.2 components/range.css + each style's `input[type='range']`),\n the same look `<mono-input type=\"range\">` has.\n\n Styled by ATTRIBUTE, like mono-input:\n\n <div mono-slider mono-size mono-color mono-type=\"vertical\"\n mono-validation-state mono-value-tooltip=\"always|never\"\n mono-track-gap mono-marks-labelled mono-disabled mono-readonly mono-dragging>\n <div mono-label-row><label mono-label>…</label><span mono-slider-value>20 – 80</span></div>\n <div mono-slider-field>\n <div mono-slider-control> the pointer target\n <div mono-slider-track> the rail; it holds the pieces\n <span mono-slider-piece mono-filled? mono-cut-start? mono-cut-end? style=\"--a;--b\">\n <div mono-slider-marks><span mono-slider-mark mono-active? style=\"--p\">\n <span mono-slider-mark-label>\n <div mono-slider-thumb role=\"slider\" mono-active? mono-dragging? style=\"--p\">\n <span mono-slider-tooltip>\n <div mono-message-wrap><div mono-message=\"helper|valid|invalid|warning\">\n\n GEOMETRY. `--p` / `--a` / `--b` are 0–1 positions (unitless). A thumb's CENTRE travels\n from half a thumb in to half a thumb short of the end — exactly where a native range\n thumb sits — so the slider lines up with `<mono-input type=\"range\">` under every flavor.\n The track is cut into pieces at every thumb: that is what lets a piece be filled or not\n (`fill`), and what lets `track-gap` cut the track back around each thumb (M3 style).\n\n KNOBS. Every look value resolves `--mono-slider-x` → `--mono-input-range-x` → vega,\n so the eight Basecoat styles and ONE (which write the input-range knobs in\n flavors/*.css) restyle the slider with no slider entries of their own — the\n \"flavor via public knobs\" pattern (filter.css). Slider-only knobs: --mono-slider-\n {length, track-gap, accent, mark-size, mark-color, mark-active-color, mark-label-*,\n tooltip-bg, tooltip-color, tooltip-radius, tooltip-font-*}.\n\n The track/thumb rules cite Basecoat; marks, tooltips, track gaps, multiple\n thumbs and the vertical type are EXTENSIONs.\n ========================================================================= */\n\nmono-slider {\n display: block;\n}\n\n[mono-slider] {\n /* ── palette ─────────────────────────────────────────────────────────── */\n --_mono-slider-text: var(--mono-slider-color, var(--foreground));\n --_mono-slider-muted: var(--mono-slider-muted, var(--muted-foreground));\n /* the fill + thumb colour: the `color` prop, a validation state outranks it */\n --_mono-slider-accent: var(--mono-slider-accent, var(--_mono-slider-accent-preset, var(--primary)));\n /* the hover / focus halo: Basecoat's ring-ring/50 (the role colour for a non-primary `color`) */\n --_mono-slider-ring-color: var(--mono-slider-ring-color, var(--_mono-slider-ring-preset, var(--ring)));\n --_mono-slider-ring-c: color-mix(in oklab, var(--_mono-slider-ring-color) var(--mono-slider-ring-alpha, var(--mono-ring-alpha, 50%)), transparent);\n\n /* ── geometry: md here, `size` multiplies ────────────────────────────── */\n --_mono-slider-scale: 1;\n --_mono-slider-track-h: round(nearest, calc(var(--mono-slider-track-height, var(--mono-input-range-track-height, 0.375rem)) * var(--_mono-slider-scale)), 1px);\n /* along = the thumb's size in the direction of travel, across = the other one */\n --_mono-slider-across: round(nearest, calc(var(--mono-slider-thumb-size, var(--mono-input-range-thumb-size, 1rem)) * var(--_mono-slider-scale)), 1px);\n --_mono-slider-along: round(nearest, calc(var(--mono-slider-thumb-width, var(--mono-input-range-thumb-width, var(--mono-slider-thumb-size, var(--mono-input-range-thumb-size, 1rem)))) * var(--_mono-slider-scale)), 1px);\n --_mono-slider-box: max(round(nearest, calc(var(--mono-slider-height, var(--mono-input-range-height, 1.25rem)) * var(--_mono-slider-scale)), 1px), var(--_mono-slider-across));\n --_mono-slider-track-radius: var(--mono-slider-track-radius, var(--mono-input-range-track-radius, 9999px));\n --_mono-slider-track-bg: var(--mono-slider-track-bg, var(--mono-input-range-track-bg, var(--muted)));\n --_mono-slider-fill: var(--mono-slider-fill, var(--mono-input-range-fill, currentColor));\n --_mono-slider-cut: calc(var(--_mono-slider-track-gap, 0px) + var(--_mono-slider-along) / 2);\n\n /* basecoat@1.0.2 styles/vega.css .field — flex w-full flex-col gap-3 (the input range's gap) */\n display: flex;\n flex-direction: column;\n gap: var(--mono-slider-gap, var(--mono-input-range-gap, var(--mono-input-gap, calc(var(--mono-spacing) * 3))));\n width: 100%;\n font-family: inherit;\n color: var(--_mono-slider-text);\n}\n\n[mono-slider],\n:where([mono-slider]) *,\n:where([mono-slider]) *::before,\n:where([mono-slider]) *::after {\n box-sizing: border-box;\n}\n\n/* the shadow build renders every region and marks an empty one */\n[mono-slider] [mono-empty] {\n display: none;\n}\n\n[mono-slider][mono-size=\"xs\"] { --_mono-slider-scale: 0.75; }\n[mono-slider][mono-size=\"sm\"] { --_mono-slider-scale: 0.875; }\n[mono-slider][mono-size=\"lg\"] { --_mono-slider-scale: 1.125; }\n[mono-slider][mono-size=\"xl\"] { --_mono-slider-scale: 1.25; }\n[mono-slider][mono-size=\"xxl\"] { --_mono-slider-scale: 1.375; }\n\n/* ── colours: the accent + halo per role (primary is Basecoat's --primary / --ring) ── */\n[mono-slider][mono-color=\"secondary\"] { --_mono-slider-accent-preset: var(--muted-foreground); --_mono-slider-ring-preset: var(--muted-foreground); }\n[mono-slider][mono-color=\"success\"] { --_mono-slider-accent-preset: var(--success); --_mono-slider-ring-preset: var(--success); }\n[mono-slider][mono-color=\"danger\"] { --_mono-slider-accent-preset: var(--destructive); --_mono-slider-ring-preset: var(--destructive); }\n[mono-slider][mono-color=\"warning\"] { --_mono-slider-accent-preset: var(--warning); --_mono-slider-ring-preset: var(--warning); }\n[mono-slider][mono-color=\"info\"] { --_mono-slider-accent-preset: var(--info); --_mono-slider-ring-preset: var(--info); }\n[mono-slider][mono-color=\"teal\"] { --_mono-slider-accent-preset: var(--teal); --_mono-slider-ring-preset: var(--teal); }\n[mono-slider][mono-color=\"purple\"] { --_mono-slider-accent-preset: var(--purple); --_mono-slider-ring-preset: var(--purple); }\n[mono-slider][mono-color=\"neutral\"] { --_mono-slider-accent-preset: var(--neutral); --_mono-slider-ring-preset: var(--neutral); }\n[mono-slider][mono-color=\"dark\"] { --_mono-slider-accent-preset: var(--dark); --_mono-slider-ring-preset: var(--dark); }\n\n/* a validation state recolours the fill + thumb (after the colours, so it wins) */\n[mono-slider][mono-validation-state=\"invalid\"] { --_mono-slider-accent-preset: var(--destructive); --_mono-slider-ring-preset: var(--destructive); }\n[mono-slider][mono-validation-state=\"valid\"] { --_mono-slider-accent-preset: var(--success); --_mono-slider-ring-preset: var(--success); }\n[mono-slider][mono-validation-state=\"warning\"] { --_mono-slider-accent-preset: var(--warning); --_mono-slider-ring-preset: var(--warning); }\n\n/* =========================================\n Label row — the label, and the value at its end (EJI ONE `.eji-range__row`)\n ========================================= */\n\n/* basecoat@1.0.2 styles/vega.css .field > label, .label — flex items-center gap-2 text-sm\n leading-none font-medium select-none; the row spans so the value can end it */\n:where([mono-slider]) > [mono-label-row] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: calc(var(--mono-spacing) * 4);\n min-width: 0;\n}\n\n:where([mono-slider]) [mono-label] {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: var(--mono-input-label-gap, calc(var(--mono-spacing) * 2));\n font-size: var(--mono-slider-label-font-size, var(--mono-input-range-label-font-size, var(--mono-input-label-font-size, var(--mono-text-sm))));\n line-height: var(--mono-slider-label-line-height, var(--mono-input-range-label-line-height, var(--mono-input-label-line-height, 1)));\n font-weight: var(--mono-slider-label-font-weight, var(--mono-input-range-label-font-weight, var(--mono-input-label-font-weight, var(--mono-label-font-weight, var(--mono-font-weight-medium)))));\n color: var(--mono-slider-label-color, var(--mono-input-range-label-color, var(--_mono-slider-text)));\n user-select: none;\n}\n\n:where([mono-slider]) [mono-required-mark] {\n color: var(--destructive);\n}\n\n/* the label ⓘ (`tooltip` prop) — same as mono-input's */\n:where([mono-slider]) [mono-label] > [mono-label-tooltip] {\n display: inline-flex;\n flex: none;\n align-items: center;\n justify-content: center;\n font-size: var(--mono-input-label-tooltip-size, 1.1em);\n color: var(--mono-input-label-tooltip-color, currentColor);\n opacity: var(--mono-input-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 &:is(:hover, :focus-visible) {\n opacity: 1;\n }\n &:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 2px;\n }\n & > [mono-icon] {\n width: 1em;\n height: 1em;\n }\n}\n\n/* EXTENSION — the value readout (EJI ONE `.eji-range__val`); tabular so it does not shimmer */\n:where([mono-slider]) [mono-slider-value] {\n flex: none;\n font-family: var(--mono-slider-value-font-family, var(--mono-input-range-value-font-family, inherit));\n font-size: var(--mono-slider-value-font-size, var(--mono-input-range-value-font-size, var(--mono-slider-label-font-size, var(--mono-input-range-label-font-size, var(--mono-input-label-font-size, var(--mono-text-sm))))));\n font-weight: var(--mono-slider-value-font-weight, var(--mono-input-range-value-font-weight, var(--mono-font-weight-medium)));\n line-height: var(--mono-slider-label-line-height, var(--mono-input-range-label-line-height, var(--mono-input-label-line-height, 1)));\n font-variant-numeric: tabular-nums;\n color: var(--mono-slider-value-color, var(--mono-input-range-value-color, var(--_mono-slider-muted)));\n white-space: nowrap;\n user-select: none;\n}\n\n/* no label: the readout follows the control, in reserved room */\n:where([mono-slider]) > [mono-slider-field] > [mono-slider-value] {\n min-width: var(--mono-slider-value-min-width, var(--mono-input-range-value-min-width, 3ch));\n text-align: end;\n}\n\n/* =========================================\n Field + control\n ========================================= */\n\n:where([mono-slider]) > [mono-slider-field] {\n display: flex;\n align-items: center;\n gap: calc(var(--mono-spacing) * 3);\n min-width: 0;\n}\n\n/* basecoat@1.0.2 components/range.css .field > input[type='range'], .input[type='range'] — flex appearance-none\n items-center p-0 outline-none disabled:pointer-events-none disabled:opacity-50 */\n/* basecoat@1.0.2 styles/vega.css .field > input[type='range'], .input[type='range'] — h-5 (the box), --slider-track-height,\n --slider-thumb-size; mono: the box also grows to fit a taller thumb */\n:where([mono-slider]) [mono-slider-control] {\n position: relative;\n flex: 1 1 auto;\n min-width: 0;\n height: var(--_mono-slider-box);\n color: var(--_mono-slider-accent);\n cursor: pointer;\n touch-action: none;\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n}\n\n/* room for mark labels under the track */\n[mono-slider][mono-marks-labelled] [mono-slider-control] {\n margin-block-end: calc(var(--mono-slider-mark-label-gap, calc(var(--mono-spacing) * 1.5)) + var(--mono-slider-mark-label-line-height, 1rem));\n}\n\n/* =========================================\n Track — the rail, cut into pieces at every thumb\n ========================================= */\n\n/* basecoat@1.0.2 styles/vega.css :is(.field > input[type='range'], .input[type='range'])::-webkit-slider-runnable-track — bg-muted h-1.5\n rounded-full (+ components/range.css: the --primary / --muted gradient stop, here one piece each) */\n:where([mono-slider]) [mono-slider-track] {\n position: absolute;\n inset-inline: 0;\n top: 50%;\n height: var(--_mono-slider-track-h);\n margin-top: calc(var(--_mono-slider-track-h) / -2);\n}\n\n:where([mono-slider]) [mono-slider-piece] {\n /* piece ends: a thumb centre, or the very end of the rail */\n --_x0: calc(var(--_mono-slider-along) / 2 + (100% - var(--_mono-slider-along)) * var(--a));\n --_x1: calc(var(--_mono-slider-along) / 2 + (100% - var(--_mono-slider-along)) * var(--b));\n --_cs: 0px;\n --_ce: 0px;\n position: absolute;\n inset-block: 0;\n inset-inline-start: calc(var(--_x0) + var(--_cs));\n inline-size: max(0px, calc(var(--_x1) - var(--_x0) - var(--_cs) - var(--_ce)));\n border-radius: var(--_mono-slider-track-radius);\n background: var(--_mono-slider-track-bg);\n}\n:where([mono-slider]) [mono-slider-piece]:not([mono-cut-start]) { --_x0: 0%; }\n:where([mono-slider]) [mono-slider-piece]:not([mono-cut-end]) { --_x1: 100%; }\n:where([mono-slider]) [mono-slider-piece][mono-filled] {\n background: var(--_mono-slider-fill);\n}\n\n/* joins at a thumb are square unless `track-gap` opens them (then each piece is a\n whole rounded bar, Material 3's look) */\n[mono-slider]:not([mono-track-gap]) [mono-slider-piece][mono-cut-start] {\n border-start-start-radius: 0;\n border-end-start-radius: 0;\n}\n[mono-slider]:not([mono-track-gap]) [mono-slider-piece][mono-cut-end] {\n border-start-end-radius: 0;\n border-end-end-radius: 0;\n}\n[mono-slider][mono-track-gap] [mono-slider-piece][mono-cut-start] { --_cs: var(--_mono-slider-cut); }\n[mono-slider][mono-track-gap] [mono-slider-piece][mono-cut-end] { --_ce: var(--_mono-slider-cut); }\n\n/* =========================================\n Thumb\n ========================================= */\n\n/* basecoat@1.0.2 styles/vega.css :is(.field > input[type='range'], .input[type='range'])::-webkit-slider-thumb — border-primary ring-ring/50\n size-4 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4;\n mono: the three box-shadow slots of mono-input's range — a resting ring, the halo, the shadow */\n:where([mono-slider]) [mono-slider-thumb] {\n --_halo: 0 0 #0000;\n position: absolute;\n z-index: 1;\n top: 50%;\n inset-inline-start: calc(var(--_mono-slider-along) / 2 + (100% - var(--_mono-slider-along)) * var(--p));\n width: var(--_mono-slider-along);\n height: var(--_mono-slider-across);\n margin-top: calc(var(--_mono-slider-across) / -2);\n margin-inline-start: calc(var(--_mono-slider-along) / -2);\n border: var(--mono-slider-thumb-border-width, var(--mono-input-range-thumb-border-width, 1px)) solid\n var(--mono-slider-thumb-border-color, var(--mono-input-range-thumb-border-color, currentColor));\n border-radius: var(--mono-slider-thumb-radius, var(--mono-input-range-thumb-radius, 9999px));\n background: var(--mono-slider-thumb-bg, var(--mono-input-range-thumb-bg, #fff));\n box-shadow:\n 0 0 0 var(--mono-slider-thumb-ring-width, var(--mono-input-range-thumb-ring-width, 0px))\n var(--mono-slider-thumb-ring-color, var(--mono-input-range-thumb-ring-color, transparent)),\n var(--_halo),\n var(--mono-slider-thumb-shadow, var(--mono-input-range-thumb-shadow, var(--mono-shadow-sm)));\n outline: none;\n transition-property: color, box-shadow, background-color, border-color;\n transition-timing-function: var(--mono-ease);\n transition-duration: var(--mono-duration);\n}\n\n/* the last-touched thumb rides on top, so a stack lifts the one being moved */\n:where([mono-slider]) [mono-slider-thumb][mono-active] {\n z-index: 2;\n}\n\n/* focus-visible:ring-4 focus-visible:outline-hidden; a drag keeps the halo on */\n:where([mono-slider]) [mono-slider-thumb]:is(:focus-visible, [mono-dragging]) {\n --_halo: 0 0 0 var(--mono-slider-ring-width, var(--mono-input-range-ring-width, 4px)) var(--_mono-slider-ring-c);\n}\n\n/* hover:ring-4 */\n@media (hover: hover) {\n [mono-slider]:not([mono-disabled], [mono-readonly]) [mono-slider-thumb]:hover:not(:focus-visible, [mono-dragging]) {\n --_halo: 0 0 0 var(--mono-slider-hover-ring-width, var(--mono-input-range-hover-ring-width, var(--mono-slider-ring-width, var(--mono-input-range-ring-width, 4px)))) var(--_mono-slider-ring-c);\n }\n}\n\n/* =========================================\n EXTENSION — marks\n ========================================= */\n\n:where([mono-slider]) [mono-slider-marks] {\n position: absolute;\n inset: 0;\n pointer-events: none;\n}\n\n:where([mono-slider]) [mono-slider-mark] {\n --_size: var(--mono-slider-mark-size, max(4px, calc(var(--_mono-slider-track-h) * 0.5)));\n position: absolute;\n top: 50%;\n inset-inline-start: calc(var(--_mono-slider-along) / 2 + (100% - var(--_mono-slider-along)) * var(--p));\n width: var(--_size);\n height: var(--_size);\n margin-top: calc(var(--_size) / -2);\n margin-inline-start: calc(var(--_size) / -2);\n border-radius: 9999px;\n background: var(--mono-slider-mark-color, color-mix(in oklab, var(--_mono-slider-muted) 55%, transparent));\n}\n\n:where([mono-slider]) [mono-slider-mark][mono-active] {\n background: var(--mono-slider-mark-active-color, color-mix(in oklab, var(--primary-foreground) 85%, transparent));\n}\n\n:where([mono-slider]) [mono-slider-mark-label] {\n position: absolute;\n top: calc(var(--_mono-slider-box) / 2 + var(--mono-slider-mark-label-gap, calc(var(--mono-spacing) * 1.5)));\n left: 50%;\n translate: -50% 0;\n font-size: var(--mono-slider-mark-label-font-size, var(--mono-text-xs));\n line-height: var(--mono-slider-mark-label-line-height, 1rem);\n font-weight: var(--mono-slider-mark-label-font-weight, var(--mono-font-weight-normal));\n color: var(--mono-slider-mark-label-color, var(--_mono-slider-muted));\n white-space: nowrap;\n}\n\n/* =========================================\n EXTENSION — the value bubble on each thumb (shadcn's tooltip: bg-foreground text-background)\n ========================================= */\n\n:where([mono-slider]) [mono-slider-tooltip] {\n position: absolute;\n left: 50%;\n bottom: calc(100% + var(--mono-slider-tooltip-offset, calc(var(--mono-spacing) * 2)));\n translate: -50% 0;\n padding: calc(var(--mono-spacing) * 0.5) calc(var(--mono-spacing) * 2);\n border-radius: var(--mono-slider-tooltip-radius, var(--mono-radius-md));\n background: var(--mono-slider-tooltip-bg, var(--foreground));\n color: var(--mono-slider-tooltip-color, var(--background));\n font-family: var(--mono-slider-tooltip-font-family, inherit);\n font-size: var(--mono-slider-tooltip-font-size, var(--mono-text-xs));\n line-height: var(--mono-slider-tooltip-line-height, 1rem);\n font-weight: var(--mono-slider-tooltip-font-weight, var(--mono-font-weight-medium));\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition: opacity var(--mono-duration) var(--mono-ease), visibility var(--mono-duration);\n\n /* the arrow */\n &::after {\n content: '';\n position: absolute;\n top: 100%;\n left: 50%;\n width: 0.5rem;\n height: 0.25rem;\n translate: -50% 0;\n background: inherit;\n clip-path: polygon(0 0, 100% 0, 50% 100%);\n }\n}\n\n/* `value-tooltip=\"always\"`: the bubbles are permanent, so the label row must not sit under them */\n[mono-slider][mono-value-tooltip=\"always\"]:not([mono-type=\"vertical\"]) [mono-slider-control] {\n margin-block-start: max(0px, calc(var(--mono-slider-tooltip-line-height, 1rem) + var(--mono-spacing) * 3 + var(--mono-slider-tooltip-offset, calc(var(--mono-spacing) * 2)) - (var(--_mono-slider-box) - var(--_mono-slider-across)) / 2));\n}\n\n/* `value-tooltip=\"auto\"`: on focus, while dragging, and on hover */\n:where([mono-slider]) [mono-slider-thumb]:is(:focus-visible, [mono-dragging]) > [mono-slider-tooltip],\n[mono-slider][mono-value-tooltip=\"always\"] [mono-slider-tooltip] {\n opacity: 1;\n visibility: visible;\n}\n@media (hover: hover) {\n [mono-slider]:not([mono-disabled]) [mono-slider-thumb]:hover > [mono-slider-tooltip] {\n opacity: 1;\n visibility: visible;\n }\n}\n\n/* =========================================\n EXTENSION — type=\"vertical\": the same parts with the axes swapped, min at the bottom\n ========================================= */\n\n[mono-slider][mono-type=\"vertical\"] {\n width: auto;\n}\n\n[mono-slider][mono-type=\"vertical\"] > [mono-slider-field] {\n flex-direction: column;\n align-items: flex-start;\n}\n\n[mono-slider][mono-type=\"vertical\"] [mono-slider-control] {\n flex: none;\n width: var(--_mono-slider-box);\n height: var(--_mono-slider-length, var(--mono-slider-length, 200px));\n}\n\n[mono-slider][mono-type=\"vertical\"][mono-marks-labelled] [mono-slider-control] {\n margin-block-end: 0;\n}\n\n[mono-slider][mono-type=\"vertical\"] [mono-slider-track] {\n inset-inline: auto;\n inset-block: 0;\n left: 50%;\n top: 0;\n width: var(--_mono-slider-track-h);\n height: auto;\n margin-top: 0;\n margin-left: calc(var(--_mono-slider-track-h) / -2);\n}\n\n[mono-slider][mono-type=\"vertical\"] [mono-slider-piece] {\n --_x0: calc(var(--_mono-slider-along) / 2 + (100% - var(--_mono-slider-along)) * var(--a));\n --_x1: calc(var(--_mono-slider-along) / 2 + (100% - var(--_mono-slider-along)) * var(--b));\n inset-block: auto;\n inset-inline: 0;\n bottom: calc(var(--_x0) + var(--_cs));\n inline-size: auto;\n block-size: max(0px, calc(var(--_x1) - var(--_x0) - var(--_cs) - var(--_ce)));\n}\n[mono-slider][mono-type=\"vertical\"] [mono-slider-piece]:not([mono-cut-start]) { --_x0: 0%; }\n[mono-slider][mono-type=\"vertical\"] [mono-slider-piece]:not([mono-cut-end]) { --_x1: 100%; }\n/* vertical joins: the piece's START is its bottom, its END its top */\n[mono-slider][mono-type=\"vertical\"]:not([mono-track-gap]) [mono-slider-piece][mono-cut-start] {\n border-radius: var(--_mono-slider-track-radius);\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n[mono-slider][mono-type=\"vertical\"]:not([mono-track-gap]) [mono-slider-piece][mono-cut-end] {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n[mono-slider][mono-type=\"vertical\"]:not([mono-track-gap]) [mono-slider-piece][mono-cut-start][mono-cut-end] {\n border-radius: 0;\n}\n\n[mono-slider][mono-type=\"vertical\"] [mono-slider-thumb],\n[mono-slider][mono-type=\"vertical\"] [mono-slider-mark] {\n /* the logical reset goes FIRST: written after `left` it would reset it too */\n inset-inline-start: auto;\n top: auto;\n left: 50%;\n bottom: calc(var(--_mono-slider-along) / 2 + (100% - var(--_mono-slider-along)) * var(--p));\n margin: 0;\n}\n[mono-slider][mono-type=\"vertical\"] [mono-slider-thumb] {\n width: var(--_mono-slider-across);\n height: var(--_mono-slider-along);\n margin-left: calc(var(--_mono-slider-across) / -2);\n margin-bottom: calc(var(--_mono-slider-along) / -2);\n}\n[mono-slider][mono-type=\"vertical\"] [mono-slider-mark] {\n margin-left: calc(var(--_size) / -2);\n margin-bottom: calc(var(--_size) / -2);\n}\n[mono-slider][mono-type=\"vertical\"] [mono-slider-mark-label] {\n top: 50%;\n left: calc(var(--_mono-slider-box) / 2 + var(--mono-slider-mark-label-gap, calc(var(--mono-spacing) * 2)));\n translate: 0 -50%;\n}\n[mono-slider][mono-type=\"vertical\"] [mono-slider-tooltip] {\n left: auto;\n right: calc(100% + var(--mono-slider-tooltip-offset, calc(var(--mono-spacing) * 2)));\n bottom: 50%;\n translate: 0 50%;\n\n &::after {\n top: 50%;\n left: 100%;\n width: 0.25rem;\n height: 0.5rem;\n translate: 0 -50%;\n clip-path: polygon(0 0, 100% 50%, 0 100%);\n }\n}\n\n/* =========================================\n States\n ========================================= */\n\n/* in-data-[disabled=true]:opacity-50 */\n[mono-slider][mono-disabled] > :is([mono-label-row], [mono-slider-field]) {\n opacity: 0.5;\n}\n[mono-slider][mono-disabled] [mono-slider-control] {\n pointer-events: none;\n cursor: not-allowed;\n}\n\n[mono-slider][mono-readonly] [mono-slider-control] {\n cursor: default;\n}\n\n[mono-slider][mono-dragging] [mono-slider-control] {\n cursor: grabbing;\n}\n\n/* =========================================\n Message — helper / validation text (mono-input's)\n ========================================= */\n\n:where([mono-slider]) > [mono-message-wrap]:not(:has([mono-message]:not([mono-empty]))) {\n display: none;\n}\n\n:where([mono-slider]) [mono-message] {\n font-size: var(--mono-input-message-font-size, var(--mono-text-sm));\n line-height: var(--mono-input-message-line-height, var(--mono-leading-normal));\n color: var(--_mono-slider-muted);\n}\n:where([mono-slider]) [mono-message=\"invalid\"] { color: var(--destructive); }\n:where([mono-slider]) [mono-message=\"valid\"] { color: var(--success); }\n:where([mono-slider]) [mono-message=\"warning\"] { color: var(--warning); }\n\n[mono-slider][mono-validation-state=\"invalid\"] [mono-label] {\n color: var(--destructive);\n}\n\n@media (prefers-reduced-motion: reduce) {\n :where([mono-slider]) :is([mono-slider-thumb], [mono-slider-tooltip]) {\n transition: none;\n }\n}\n";
1014
+ var slider_css_raw_default = "/* =========================================================================\r\n mono-slider — a multi-thumb slider drawn in the look of Basecoat's range\r\n (basecoat-css@1.0.2 components/range.css + each style's `input[type='range']`),\r\n the same look `<mono-input type=\"range\">` has.\r\n\r\n Styled by ATTRIBUTE, like mono-input:\r\n\r\n <div mono-slider mono-size mono-color mono-type=\"vertical\"\r\n mono-validation-state mono-value-tooltip=\"always|never\"\r\n mono-track-gap mono-marks-labelled mono-disabled mono-readonly mono-dragging>\r\n <div mono-label-row><label mono-label>…</label><span mono-slider-value>20 – 80</span></div>\r\n <div mono-slider-field>\r\n <div mono-slider-control> the pointer target\r\n <div mono-slider-track> the rail; it holds the pieces\r\n <span mono-slider-piece mono-filled? mono-cut-start? mono-cut-end? style=\"--a;--b\">\r\n <div mono-slider-marks><span mono-slider-mark mono-active? style=\"--p\">\r\n <span mono-slider-mark-label>\r\n <div mono-slider-thumb role=\"slider\" mono-active? mono-dragging? style=\"--p\">\r\n <span mono-slider-tooltip>\r\n <div mono-message-wrap><div mono-message=\"helper|valid|invalid|warning\">\r\n\r\n GEOMETRY. `--p` / `--a` / `--b` are 0–1 positions (unitless). A thumb's CENTRE travels\r\n from half a thumb in to half a thumb short of the end — exactly where a native range\r\n thumb sits — so the slider lines up with `<mono-input type=\"range\">` under every flavor.\r\n The track is cut into pieces at every thumb: that is what lets a piece be filled or not\r\n (`fill`), and what lets `track-gap` cut the track back around each thumb (M3 style).\r\n\r\n KNOBS. Every look value resolves `--mono-slider-x` → `--mono-input-range-x` → vega,\r\n so the eight Basecoat styles and ONE (which write the input-range knobs in\r\n flavors/*.css) restyle the slider with no slider entries of their own — the\r\n \"flavor via public knobs\" pattern (filter.css). Slider-only knobs: --mono-slider-\r\n {length, track-gap, accent, mark-size, mark-color, mark-active-color, mark-label-*,\r\n tooltip-bg, tooltip-color, tooltip-radius, tooltip-font-*}.\r\n\r\n The track/thumb rules cite Basecoat; marks, tooltips, track gaps, multiple\r\n thumbs and the vertical type are EXTENSIONs.\r\n ========================================================================= */\r\n\r\nmono-slider {\r\n display: block;\r\n}\r\n\r\n[mono-slider] {\r\n /* ── palette ─────────────────────────────────────────────────────────── */\r\n --_mono-slider-text: var(--mono-slider-color, var(--foreground));\r\n --_mono-slider-muted: var(--mono-slider-muted, var(--muted-foreground));\r\n /* the fill + thumb colour: the `color` prop, a validation state outranks it */\r\n --_mono-slider-accent: var(--mono-slider-accent, var(--_mono-slider-accent-preset, var(--primary)));\r\n /* the hover / focus halo: Basecoat's ring-ring/50 (the role colour for a non-primary `color`) */\r\n --_mono-slider-ring-color: var(--mono-slider-ring-color, var(--_mono-slider-ring-preset, var(--ring)));\r\n --_mono-slider-ring-c: color-mix(in oklab, var(--_mono-slider-ring-color) var(--mono-slider-ring-alpha, var(--mono-ring-alpha, 50%)), transparent);\r\n\r\n /* ── geometry: md here, `size` multiplies ────────────────────────────── */\r\n --_mono-slider-scale: 1;\r\n --_mono-slider-track-h: round(nearest, calc(var(--mono-slider-track-height, var(--mono-input-range-track-height, 0.375rem)) * var(--_mono-slider-scale)), 1px);\r\n /* along = the thumb's size in the direction of travel, across = the other one */\r\n --_mono-slider-across: round(nearest, calc(var(--mono-slider-thumb-size, var(--mono-input-range-thumb-size, 1rem)) * var(--_mono-slider-scale)), 1px);\r\n --_mono-slider-along: round(nearest, calc(var(--mono-slider-thumb-width, var(--mono-input-range-thumb-width, var(--mono-slider-thumb-size, var(--mono-input-range-thumb-size, 1rem)))) * var(--_mono-slider-scale)), 1px);\r\n --_mono-slider-box: max(round(nearest, calc(var(--mono-slider-height, var(--mono-input-range-height, 1.25rem)) * var(--_mono-slider-scale)), 1px), var(--_mono-slider-across));\r\n --_mono-slider-track-radius: var(--mono-slider-track-radius, var(--mono-input-range-track-radius, 9999px));\r\n --_mono-slider-track-bg: var(--mono-slider-track-bg, var(--mono-input-range-track-bg, var(--muted)));\r\n --_mono-slider-fill: var(--mono-slider-fill, var(--mono-input-range-fill, currentColor));\r\n --_mono-slider-cut: calc(var(--_mono-slider-track-gap, 0px) + var(--_mono-slider-along) / 2);\r\n\r\n /* basecoat@1.0.2 styles/vega.css .field — flex w-full flex-col gap-3 (the input range's gap) */\r\n display: flex;\r\n flex-direction: column;\r\n gap: var(--mono-slider-gap, var(--mono-input-range-gap, var(--mono-input-gap, calc(var(--mono-spacing) * 3))));\r\n width: 100%;\r\n font-family: inherit;\r\n color: var(--_mono-slider-text);\r\n}\r\n\r\n[mono-slider],\r\n:where([mono-slider]) *,\r\n:where([mono-slider]) *::before,\r\n:where([mono-slider]) *::after {\r\n box-sizing: border-box;\r\n}\r\n\r\n/* the shadow build renders every region and marks an empty one */\r\n[mono-slider] [mono-empty] {\r\n display: none;\r\n}\r\n\r\n[mono-slider][mono-size=\"xs\"] { --_mono-slider-scale: 0.75; }\r\n[mono-slider][mono-size=\"sm\"] { --_mono-slider-scale: 0.875; }\r\n[mono-slider][mono-size=\"lg\"] { --_mono-slider-scale: 1.125; }\r\n[mono-slider][mono-size=\"xl\"] { --_mono-slider-scale: 1.25; }\r\n[mono-slider][mono-size=\"xxl\"] { --_mono-slider-scale: 1.375; }\r\n\r\n/* ── colours: the accent + halo per role (primary is Basecoat's --primary / --ring) ── */\r\n[mono-slider][mono-color=\"secondary\"] { --_mono-slider-accent-preset: var(--muted-foreground); --_mono-slider-ring-preset: var(--muted-foreground); }\r\n[mono-slider][mono-color=\"success\"] { --_mono-slider-accent-preset: var(--success); --_mono-slider-ring-preset: var(--success); }\r\n[mono-slider][mono-color=\"danger\"] { --_mono-slider-accent-preset: var(--destructive); --_mono-slider-ring-preset: var(--destructive); }\r\n[mono-slider][mono-color=\"warning\"] { --_mono-slider-accent-preset: var(--warning); --_mono-slider-ring-preset: var(--warning); }\r\n[mono-slider][mono-color=\"info\"] { --_mono-slider-accent-preset: var(--info); --_mono-slider-ring-preset: var(--info); }\r\n[mono-slider][mono-color=\"teal\"] { --_mono-slider-accent-preset: var(--teal); --_mono-slider-ring-preset: var(--teal); }\r\n[mono-slider][mono-color=\"purple\"] { --_mono-slider-accent-preset: var(--purple); --_mono-slider-ring-preset: var(--purple); }\r\n[mono-slider][mono-color=\"neutral\"] { --_mono-slider-accent-preset: var(--neutral); --_mono-slider-ring-preset: var(--neutral); }\r\n[mono-slider][mono-color=\"dark\"] { --_mono-slider-accent-preset: var(--dark); --_mono-slider-ring-preset: var(--dark); }\r\n\r\n/* a validation state recolours the fill + thumb (after the colours, so it wins) */\r\n[mono-slider][mono-validation-state=\"invalid\"] { --_mono-slider-accent-preset: var(--destructive); --_mono-slider-ring-preset: var(--destructive); }\r\n[mono-slider][mono-validation-state=\"valid\"] { --_mono-slider-accent-preset: var(--success); --_mono-slider-ring-preset: var(--success); }\r\n[mono-slider][mono-validation-state=\"warning\"] { --_mono-slider-accent-preset: var(--warning); --_mono-slider-ring-preset: var(--warning); }\r\n\r\n/* =========================================\r\n Label row — the label, and the value at its end (EJI ONE `.eji-range__row`)\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css .field > label, .label — flex items-center gap-2 text-sm\r\n leading-none font-medium select-none; the row spans so the value can end it */\r\n:where([mono-slider]) > [mono-label-row] {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: calc(var(--mono-spacing) * 4);\r\n min-width: 0;\r\n}\r\n\r\n:where([mono-slider]) [mono-label] {\r\n display: flex;\r\n align-items: center;\r\n min-width: 0;\r\n gap: var(--mono-input-label-gap, calc(var(--mono-spacing) * 2));\r\n font-size: var(--mono-slider-label-font-size, var(--mono-input-range-label-font-size, var(--mono-input-label-font-size, var(--mono-text-sm))));\r\n line-height: var(--mono-slider-label-line-height, var(--mono-input-range-label-line-height, var(--mono-input-label-line-height, 1)));\r\n font-weight: var(--mono-slider-label-font-weight, var(--mono-input-range-label-font-weight, var(--mono-input-label-font-weight, var(--mono-label-font-weight, var(--mono-font-weight-medium)))));\r\n color: var(--mono-slider-label-color, var(--mono-input-range-label-color, var(--_mono-slider-text)));\r\n user-select: none;\r\n}\r\n\r\n:where([mono-slider]) [mono-required-mark] {\r\n color: var(--destructive);\r\n}\r\n\r\n/* the label ⓘ (`tooltip` prop) — same as mono-input's */\r\n:where([mono-slider]) [mono-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-input-label-tooltip-size, 1.1em);\r\n color: var(--mono-input-label-tooltip-color, currentColor);\r\n opacity: var(--mono-input-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 &:is(:hover, :focus-visible) {\r\n opacity: 1;\r\n }\r\n &:focus-visible {\r\n outline: 2px solid currentColor;\r\n outline-offset: 2px;\r\n }\r\n & > [mono-icon] {\r\n width: 1em;\r\n height: 1em;\r\n }\r\n}\r\n\r\n/* EXTENSION — the value readout (EJI ONE `.eji-range__val`); tabular so it does not shimmer */\r\n:where([mono-slider]) [mono-slider-value] {\r\n flex: none;\r\n font-family: var(--mono-slider-value-font-family, var(--mono-input-range-value-font-family, inherit));\r\n font-size: var(--mono-slider-value-font-size, var(--mono-input-range-value-font-size, var(--mono-slider-label-font-size, var(--mono-input-range-label-font-size, var(--mono-input-label-font-size, var(--mono-text-sm))))));\r\n font-weight: var(--mono-slider-value-font-weight, var(--mono-input-range-value-font-weight, var(--mono-font-weight-medium)));\r\n line-height: var(--mono-slider-label-line-height, var(--mono-input-range-label-line-height, var(--mono-input-label-line-height, 1)));\r\n font-variant-numeric: tabular-nums;\r\n color: var(--mono-slider-value-color, var(--mono-input-range-value-color, var(--_mono-slider-muted)));\r\n white-space: nowrap;\r\n user-select: none;\r\n}\r\n\r\n/* no label: the readout follows the control, in reserved room */\r\n:where([mono-slider]) > [mono-slider-field] > [mono-slider-value] {\r\n min-width: var(--mono-slider-value-min-width, var(--mono-input-range-value-min-width, 3ch));\r\n text-align: end;\r\n}\r\n\r\n/* =========================================\r\n Field + control\r\n ========================================= */\r\n\r\n:where([mono-slider]) > [mono-slider-field] {\r\n display: flex;\r\n align-items: center;\r\n gap: calc(var(--mono-spacing) * 3);\r\n min-width: 0;\r\n}\r\n\r\n/* basecoat@1.0.2 components/range.css .field > input[type='range'], .input[type='range'] — flex appearance-none\r\n items-center p-0 outline-none disabled:pointer-events-none disabled:opacity-50 */\r\n/* basecoat@1.0.2 styles/vega.css .field > input[type='range'], .input[type='range'] — h-5 (the box), --slider-track-height,\r\n --slider-thumb-size; mono: the box also grows to fit a taller thumb */\r\n:where([mono-slider]) [mono-slider-control] {\r\n position: relative;\r\n flex: 1 1 auto;\r\n min-width: 0;\r\n height: var(--_mono-slider-box);\r\n color: var(--_mono-slider-accent);\r\n cursor: pointer;\r\n touch-action: none;\r\n user-select: none;\r\n -webkit-tap-highlight-color: transparent;\r\n}\r\n\r\n/* room for mark labels under the track */\r\n[mono-slider][mono-marks-labelled] [mono-slider-control] {\r\n margin-block-end: calc(var(--mono-slider-mark-label-gap, calc(var(--mono-spacing) * 1.5)) + var(--mono-slider-mark-label-line-height, 1rem));\r\n}\r\n\r\n/* =========================================\r\n Track — the rail, cut into pieces at every thumb\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css :is(.field > input[type='range'], .input[type='range'])::-webkit-slider-runnable-track — bg-muted h-1.5\r\n rounded-full (+ components/range.css: the --primary / --muted gradient stop, here one piece each) */\r\n:where([mono-slider]) [mono-slider-track] {\r\n position: absolute;\r\n inset-inline: 0;\r\n top: 50%;\r\n height: var(--_mono-slider-track-h);\r\n margin-top: calc(var(--_mono-slider-track-h) / -2);\r\n}\r\n\r\n:where([mono-slider]) [mono-slider-piece] {\r\n /* piece ends: a thumb centre, or the very end of the rail */\r\n --_x0: calc(var(--_mono-slider-along) / 2 + (100% - var(--_mono-slider-along)) * var(--a));\r\n --_x1: calc(var(--_mono-slider-along) / 2 + (100% - var(--_mono-slider-along)) * var(--b));\r\n --_cs: 0px;\r\n --_ce: 0px;\r\n position: absolute;\r\n inset-block: 0;\r\n inset-inline-start: calc(var(--_x0) + var(--_cs));\r\n inline-size: max(0px, calc(var(--_x1) - var(--_x0) - var(--_cs) - var(--_ce)));\r\n border-radius: var(--_mono-slider-track-radius);\r\n background: var(--_mono-slider-track-bg);\r\n}\r\n:where([mono-slider]) [mono-slider-piece]:not([mono-cut-start]) { --_x0: 0%; }\r\n:where([mono-slider]) [mono-slider-piece]:not([mono-cut-end]) { --_x1: 100%; }\r\n:where([mono-slider]) [mono-slider-piece][mono-filled] {\r\n background: var(--_mono-slider-fill);\r\n}\r\n\r\n/* joins at a thumb are square unless `track-gap` opens them (then each piece is a\r\n whole rounded bar, Material 3's look) */\r\n[mono-slider]:not([mono-track-gap]) [mono-slider-piece][mono-cut-start] {\r\n border-start-start-radius: 0;\r\n border-end-start-radius: 0;\r\n}\r\n[mono-slider]:not([mono-track-gap]) [mono-slider-piece][mono-cut-end] {\r\n border-start-end-radius: 0;\r\n border-end-end-radius: 0;\r\n}\r\n[mono-slider][mono-track-gap] [mono-slider-piece][mono-cut-start] { --_cs: var(--_mono-slider-cut); }\r\n[mono-slider][mono-track-gap] [mono-slider-piece][mono-cut-end] { --_ce: var(--_mono-slider-cut); }\r\n\r\n/* =========================================\r\n Thumb\r\n ========================================= */\r\n\r\n/* basecoat@1.0.2 styles/vega.css :is(.field > input[type='range'], .input[type='range'])::-webkit-slider-thumb — border-primary ring-ring/50\r\n size-4 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4;\r\n mono: the three box-shadow slots of mono-input's range — a resting ring, the halo, the shadow */\r\n:where([mono-slider]) [mono-slider-thumb] {\r\n --_halo: 0 0 #0000;\r\n position: absolute;\r\n z-index: 1;\r\n top: 50%;\r\n inset-inline-start: calc(var(--_mono-slider-along) / 2 + (100% - var(--_mono-slider-along)) * var(--p));\r\n width: var(--_mono-slider-along);\r\n height: var(--_mono-slider-across);\r\n margin-top: calc(var(--_mono-slider-across) / -2);\r\n margin-inline-start: calc(var(--_mono-slider-along) / -2);\r\n border: var(--mono-slider-thumb-border-width, var(--mono-input-range-thumb-border-width, 1px)) solid\r\n var(--mono-slider-thumb-border-color, var(--mono-input-range-thumb-border-color, currentColor));\r\n border-radius: var(--mono-slider-thumb-radius, var(--mono-input-range-thumb-radius, 9999px));\r\n background: var(--mono-slider-thumb-bg, var(--mono-input-range-thumb-bg, #fff));\r\n box-shadow:\r\n 0 0 0 var(--mono-slider-thumb-ring-width, var(--mono-input-range-thumb-ring-width, 0px))\r\n var(--mono-slider-thumb-ring-color, var(--mono-input-range-thumb-ring-color, transparent)),\r\n var(--_halo),\r\n var(--mono-slider-thumb-shadow, var(--mono-input-range-thumb-shadow, var(--mono-shadow-sm)));\r\n outline: none;\r\n transition-property: color, box-shadow, background-color, border-color;\r\n transition-timing-function: var(--mono-ease);\r\n transition-duration: var(--mono-duration);\r\n}\r\n\r\n/* the last-touched thumb rides on top, so a stack lifts the one being moved */\r\n:where([mono-slider]) [mono-slider-thumb][mono-active] {\r\n z-index: 2;\r\n}\r\n\r\n/* focus-visible:ring-4 focus-visible:outline-hidden; a drag keeps the halo on */\r\n:where([mono-slider]) [mono-slider-thumb]:is(:focus-visible, [mono-dragging]) {\r\n --_halo: 0 0 0 var(--mono-slider-ring-width, var(--mono-input-range-ring-width, 4px)) var(--_mono-slider-ring-c);\r\n}\r\n\r\n/* hover:ring-4 */\r\n@media (hover: hover) {\r\n [mono-slider]:not([mono-disabled], [mono-readonly]) [mono-slider-thumb]:hover:not(:focus-visible, [mono-dragging]) {\r\n --_halo: 0 0 0 var(--mono-slider-hover-ring-width, var(--mono-input-range-hover-ring-width, var(--mono-slider-ring-width, var(--mono-input-range-ring-width, 4px)))) var(--_mono-slider-ring-c);\r\n }\r\n}\r\n\r\n/* =========================================\r\n EXTENSION — marks\r\n ========================================= */\r\n\r\n:where([mono-slider]) [mono-slider-marks] {\r\n position: absolute;\r\n inset: 0;\r\n pointer-events: none;\r\n}\r\n\r\n:where([mono-slider]) [mono-slider-mark] {\r\n --_size: var(--mono-slider-mark-size, max(4px, calc(var(--_mono-slider-track-h) * 0.5)));\r\n position: absolute;\r\n top: 50%;\r\n inset-inline-start: calc(var(--_mono-slider-along) / 2 + (100% - var(--_mono-slider-along)) * var(--p));\r\n width: var(--_size);\r\n height: var(--_size);\r\n margin-top: calc(var(--_size) / -2);\r\n margin-inline-start: calc(var(--_size) / -2);\r\n border-radius: 9999px;\r\n background: var(--mono-slider-mark-color, color-mix(in oklab, var(--_mono-slider-muted) 55%, transparent));\r\n}\r\n\r\n:where([mono-slider]) [mono-slider-mark][mono-active] {\r\n background: var(--mono-slider-mark-active-color, color-mix(in oklab, var(--primary-foreground) 85%, transparent));\r\n}\r\n\r\n:where([mono-slider]) [mono-slider-mark-label] {\r\n position: absolute;\r\n top: calc(var(--_mono-slider-box) / 2 + var(--mono-slider-mark-label-gap, calc(var(--mono-spacing) * 1.5)));\r\n left: 50%;\r\n translate: -50% 0;\r\n font-size: var(--mono-slider-mark-label-font-size, var(--mono-text-xs));\r\n line-height: var(--mono-slider-mark-label-line-height, 1rem);\r\n font-weight: var(--mono-slider-mark-label-font-weight, var(--mono-font-weight-normal));\r\n color: var(--mono-slider-mark-label-color, var(--_mono-slider-muted));\r\n white-space: nowrap;\r\n}\r\n\r\n/* =========================================\r\n EXTENSION — the value bubble on each thumb (shadcn's tooltip: bg-foreground text-background)\r\n ========================================= */\r\n\r\n:where([mono-slider]) [mono-slider-tooltip] {\r\n position: absolute;\r\n left: 50%;\r\n bottom: calc(100% + var(--mono-slider-tooltip-offset, calc(var(--mono-spacing) * 2)));\r\n translate: -50% 0;\r\n padding: calc(var(--mono-spacing) * 0.5) calc(var(--mono-spacing) * 2);\r\n border-radius: var(--mono-slider-tooltip-radius, var(--mono-radius-md));\r\n background: var(--mono-slider-tooltip-bg, var(--foreground));\r\n color: var(--mono-slider-tooltip-color, var(--background));\r\n font-family: var(--mono-slider-tooltip-font-family, inherit);\r\n font-size: var(--mono-slider-tooltip-font-size, var(--mono-text-xs));\r\n line-height: var(--mono-slider-tooltip-line-height, 1rem);\r\n font-weight: var(--mono-slider-tooltip-font-weight, var(--mono-font-weight-medium));\r\n font-variant-numeric: tabular-nums;\r\n white-space: nowrap;\r\n pointer-events: none;\r\n opacity: 0;\r\n visibility: hidden;\r\n transition: opacity var(--mono-duration) var(--mono-ease), visibility var(--mono-duration);\r\n\r\n /* the arrow */\r\n &::after {\r\n content: '';\r\n position: absolute;\r\n top: 100%;\r\n left: 50%;\r\n width: 0.5rem;\r\n height: 0.25rem;\r\n translate: -50% 0;\r\n background: inherit;\r\n clip-path: polygon(0 0, 100% 0, 50% 100%);\r\n }\r\n}\r\n\r\n/* `value-tooltip=\"always\"`: the bubbles are permanent, so the label row must not sit under them */\r\n[mono-slider][mono-value-tooltip=\"always\"]:not([mono-type=\"vertical\"]) [mono-slider-control] {\r\n margin-block-start: max(0px, calc(var(--mono-slider-tooltip-line-height, 1rem) + var(--mono-spacing) * 3 + var(--mono-slider-tooltip-offset, calc(var(--mono-spacing) * 2)) - (var(--_mono-slider-box) - var(--_mono-slider-across)) / 2));\r\n}\r\n\r\n/* `value-tooltip=\"auto\"`: on focus, while dragging, and on hover */\r\n:where([mono-slider]) [mono-slider-thumb]:is(:focus-visible, [mono-dragging]) > [mono-slider-tooltip],\r\n[mono-slider][mono-value-tooltip=\"always\"] [mono-slider-tooltip] {\r\n opacity: 1;\r\n visibility: visible;\r\n}\r\n@media (hover: hover) {\r\n [mono-slider]:not([mono-disabled]) [mono-slider-thumb]:hover > [mono-slider-tooltip] {\r\n opacity: 1;\r\n visibility: visible;\r\n }\r\n}\r\n\r\n/* =========================================\r\n EXTENSION — type=\"vertical\": the same parts with the axes swapped, min at the bottom\r\n ========================================= */\r\n\r\n[mono-slider][mono-type=\"vertical\"] {\r\n width: auto;\r\n}\r\n\r\n[mono-slider][mono-type=\"vertical\"] > [mono-slider-field] {\r\n flex-direction: column;\r\n align-items: flex-start;\r\n}\r\n\r\n[mono-slider][mono-type=\"vertical\"] [mono-slider-control] {\r\n flex: none;\r\n width: var(--_mono-slider-box);\r\n height: var(--_mono-slider-length, var(--mono-slider-length, 200px));\r\n}\r\n\r\n[mono-slider][mono-type=\"vertical\"][mono-marks-labelled] [mono-slider-control] {\r\n margin-block-end: 0;\r\n}\r\n\r\n[mono-slider][mono-type=\"vertical\"] [mono-slider-track] {\r\n inset-inline: auto;\r\n inset-block: 0;\r\n left: 50%;\r\n top: 0;\r\n width: var(--_mono-slider-track-h);\r\n height: auto;\r\n margin-top: 0;\r\n margin-left: calc(var(--_mono-slider-track-h) / -2);\r\n}\r\n\r\n[mono-slider][mono-type=\"vertical\"] [mono-slider-piece] {\r\n --_x0: calc(var(--_mono-slider-along) / 2 + (100% - var(--_mono-slider-along)) * var(--a));\r\n --_x1: calc(var(--_mono-slider-along) / 2 + (100% - var(--_mono-slider-along)) * var(--b));\r\n inset-block: auto;\r\n inset-inline: 0;\r\n bottom: calc(var(--_x0) + var(--_cs));\r\n inline-size: auto;\r\n block-size: max(0px, calc(var(--_x1) - var(--_x0) - var(--_cs) - var(--_ce)));\r\n}\r\n[mono-slider][mono-type=\"vertical\"] [mono-slider-piece]:not([mono-cut-start]) { --_x0: 0%; }\r\n[mono-slider][mono-type=\"vertical\"] [mono-slider-piece]:not([mono-cut-end]) { --_x1: 100%; }\r\n/* vertical joins: the piece's START is its bottom, its END its top */\r\n[mono-slider][mono-type=\"vertical\"]:not([mono-track-gap]) [mono-slider-piece][mono-cut-start] {\r\n border-radius: var(--_mono-slider-track-radius);\r\n border-bottom-left-radius: 0;\r\n border-bottom-right-radius: 0;\r\n}\r\n[mono-slider][mono-type=\"vertical\"]:not([mono-track-gap]) [mono-slider-piece][mono-cut-end] {\r\n border-top-left-radius: 0;\r\n border-top-right-radius: 0;\r\n}\r\n[mono-slider][mono-type=\"vertical\"]:not([mono-track-gap]) [mono-slider-piece][mono-cut-start][mono-cut-end] {\r\n border-radius: 0;\r\n}\r\n\r\n[mono-slider][mono-type=\"vertical\"] [mono-slider-thumb],\r\n[mono-slider][mono-type=\"vertical\"] [mono-slider-mark] {\r\n /* the logical reset goes FIRST: written after `left` it would reset it too */\r\n inset-inline-start: auto;\r\n top: auto;\r\n left: 50%;\r\n bottom: calc(var(--_mono-slider-along) / 2 + (100% - var(--_mono-slider-along)) * var(--p));\r\n margin: 0;\r\n}\r\n[mono-slider][mono-type=\"vertical\"] [mono-slider-thumb] {\r\n width: var(--_mono-slider-across);\r\n height: var(--_mono-slider-along);\r\n margin-left: calc(var(--_mono-slider-across) / -2);\r\n margin-bottom: calc(var(--_mono-slider-along) / -2);\r\n}\r\n[mono-slider][mono-type=\"vertical\"] [mono-slider-mark] {\r\n margin-left: calc(var(--_size) / -2);\r\n margin-bottom: calc(var(--_size) / -2);\r\n}\r\n[mono-slider][mono-type=\"vertical\"] [mono-slider-mark-label] {\r\n top: 50%;\r\n left: calc(var(--_mono-slider-box) / 2 + var(--mono-slider-mark-label-gap, calc(var(--mono-spacing) * 2)));\r\n translate: 0 -50%;\r\n}\r\n[mono-slider][mono-type=\"vertical\"] [mono-slider-tooltip] {\r\n left: auto;\r\n right: calc(100% + var(--mono-slider-tooltip-offset, calc(var(--mono-spacing) * 2)));\r\n bottom: 50%;\r\n translate: 0 50%;\r\n\r\n &::after {\r\n top: 50%;\r\n left: 100%;\r\n width: 0.25rem;\r\n height: 0.5rem;\r\n translate: 0 -50%;\r\n clip-path: polygon(0 0, 100% 50%, 0 100%);\r\n }\r\n}\r\n\r\n/* =========================================\r\n States\r\n ========================================= */\r\n\r\n/* in-data-[disabled=true]:opacity-50 */\r\n[mono-slider][mono-disabled] > :is([mono-label-row], [mono-slider-field]) {\r\n opacity: 0.5;\r\n}\r\n[mono-slider][mono-disabled] [mono-slider-control] {\r\n pointer-events: none;\r\n cursor: not-allowed;\r\n}\r\n\r\n[mono-slider][mono-readonly] [mono-slider-control] {\r\n cursor: default;\r\n}\r\n\r\n[mono-slider][mono-dragging] [mono-slider-control] {\r\n cursor: grabbing;\r\n}\r\n\r\n/* =========================================\r\n Message — helper / validation text (mono-input's)\r\n ========================================= */\r\n\r\n:where([mono-slider]) > [mono-message-wrap]:not(:has([mono-message]:not([mono-empty]))) {\r\n display: none;\r\n}\r\n\r\n:where([mono-slider]) [mono-message] {\r\n font-size: var(--mono-input-message-font-size, var(--mono-text-sm));\r\n line-height: var(--mono-input-message-line-height, var(--mono-leading-normal));\r\n color: var(--_mono-slider-muted);\r\n}\r\n:where([mono-slider]) [mono-message=\"invalid\"] { color: var(--destructive); }\r\n:where([mono-slider]) [mono-message=\"valid\"] { color: var(--success); }\r\n:where([mono-slider]) [mono-message=\"warning\"] { color: var(--warning); }\r\n\r\n[mono-slider][mono-validation-state=\"invalid\"] [mono-label] {\r\n color: var(--destructive);\r\n}\r\n\r\n@media (prefers-reduced-motion: reduce) {\r\n :where([mono-slider]) :is([mono-slider-thumb], [mono-slider-tooltip]) {\r\n transition: none;\r\n }\r\n}\r\n";
1015
1015
 
1016
1016
  //#endregion
1017
1017
  //#region src/components/slider/mono-slider.shadow.ts
@@ -1,6 +1,6 @@
1
- import { a as __decorate, c as defineHybridPropAlias, f as customElement, i as withShadowUtilityStyles, l as defineHybridPropAliases, r as toShadowCss, s as booleanStringConverter, t as flushSsrHydration } from "../../hydration-flush-9AJE8FRl.js";
1
+ import { a as __decorate, c as defineHybridPropAlias, f as customElement, i as withShadowUtilityStyles, l as defineHybridPropAliases, r as toShadowCss, s as booleanStringConverter, t as flushSsrHydration } from "../../hydration-flush-BaE9gN3C.js";
2
2
  import { t as dispatchMonoEvent } from "../../mono-event-BPku9HpS.js";
3
- import { t as MonoFormControlCore } from "../../form-control-core-rW2WvOcb.js";
3
+ import { t as MonoFormControlCore } from "../../form-control-core-BbiACMtL.js";
4
4
  import { LitElement, html, isServer, nothing, unsafeCSS } from "lit";
5
5
  import { property, state } from "lit/decorators.js";
6
6
  import { ifDefined } from "lit/directives/if-defined.js";
@@ -1,16 +1,16 @@
1
- import { C as monoPendingGrace, S as monoPendingActive, _ as buildSizeStyle, a as __decorate, c as defineHybridPropAlias, f as customElement, g as cssLengthToPx, h as ColumnAutoSize, l as defineHybridPropAliases, m as startMonoSizeAttributes, n as adoptIconStyles, r as toShadowCss, s as booleanStringConverter, t as flushSsrHydration, u as numberStringConverter, w as monoPhantomOptions, y as monoApplyPhantomOptions } from "../../hydration-flush-9AJE8FRl.js";
1
+ import { C as monoPendingGrace, S as monoPendingActive, _ as buildSizeStyle, a as __decorate, c as defineHybridPropAlias, f as customElement, g as cssLengthToPx, h as ColumnAutoSize, l as defineHybridPropAliases, m as startMonoSizeAttributes, n as adoptIconStyles, r as toShadowCss, s as booleanStringConverter, t as flushSsrHydration, u as numberStringConverter, w as monoPhantomOptions, y as monoApplyPhantomOptions } from "../../hydration-flush-BaE9gN3C.js";
2
2
  import { t as dispatchMonoEvent } from "../../mono-event-BPku9HpS.js";
3
3
  import { t as isIconifyClass } from "../../icon-BM9N-jOt.js";
4
4
  import { n as cssPart } from "../../css-class-B6Tc_MAx.js";
5
5
  import { n as detachEventHandlers, t as applyProps } from "../../element-props-xvw0EB7H.js";
6
- import { t as input_css_raw_default } from "../../input.css_raw-CQu2fAsU.js";
7
- import { t as PopupPortalController } from "../../popup-portal-C8ttHDRX.js";
6
+ import { t as input_css_raw_default } from "../../input.css_raw-Br-T8RWv.js";
7
+ import { t as PopupPortalController } from "../../popup-portal-CINuVjNY.js";
8
8
  import { C as resolveSearchEntries, S as plainSearchColumns, _ as expandWildcard, b as isWildcardPattern, c as resolveErrorMessages, f as mergeSearchFields, l as setErrorMessages, n as describeError, r as errorStatus, s as normalizeError, t as DEFAULT_ERROR_MESSAGES, x as normalizeSearchExpr } from "../../normalize-error-BmLbgANw.js";
9
- import { a as seedFromRanges, i as minimize, n as buildDateTree, o as setAllChecked, r as checkState, s as setChecked, t as monoDataGrid } from "../../mono-data-grid-KDpu4d4_.js";
10
- import { n as captureLightSlots, r as placeLightSlots } from "../../light-slots-Cb6e-LU3.js";
9
+ import { a as seedFromRanges, i as minimize, n as buildDateTree, o as setAllChecked, r as checkState, s as setChecked, t as monoDataGrid } from "../../mono-data-grid-CZFjpnOD.js";
10
+ import { n as captureLightSlots, r as placeLightSlots } from "../../light-slots-_no0r2Z-.js";
11
11
  import { t as checkbox_css_raw_default } from "../../checkbox.css_raw-AYtSbUtY.js";
12
- import { a as buildGroups, c as isGroupNode, o as collectGroupPaths, s as flattenLeaves } from "../../data-source-read-i6CYSUEl.js";
13
- import { h as monoArraySource } from "../../data-source-options-Cz9fVLK8.js";
12
+ import { a as buildGroups, c as isGroupNode, o as collectGroupPaths, s as flattenLeaves } from "../../data-source-read-DTJ_Mnez.js";
13
+ import { h as monoArraySource } from "../../data-source-options-CS0w0wlO.js";
14
14
  import { LitElement, html, isServer, nothing, unsafeCSS } from "lit";
15
15
  import { property, query, state } from "lit/decorators.js";
16
16
  import { ifDefined } from "lit/directives/if-defined.js";
@@ -70,13 +70,32 @@ const MonoTableControllerCore = (superClass) => {
70
70
  _subscribe() {
71
71
  this._off?.();
72
72
  detachEventHandlers(this);
73
+ this._lastStateKey = void 0;
73
74
  this._off = this.dataGrid?.subscribe(() => {
75
+ if (this._stateUnchanged()) return;
74
76
  this._scheduleApplyProps();
75
77
  this.requestUpdate();
76
78
  });
77
79
  this._scheduleApplyProps();
78
80
  }
79
81
  /**
82
+ * What this element renders from the CONTROLLER, as a flat list — or `undefined` (the
83
+ * default) for "re-render on every notify", which is what every element did.
84
+ *
85
+ * An element that defines it skips a notify whose key equals the last one. Worth it for the
86
+ * per-row elements: every `<mono-table-checkbox>` re-rendered on every notify (a load flag, a
87
+ * summary, another row's tick), N updates for a change that moves one box. Its own props are
88
+ * unaffected — a Lit property change still updates it the normal way.
89
+ */
90
+ _stateKey() {}
91
+ _stateUnchanged() {
92
+ const key = this._stateKey();
93
+ if (!key) return false;
94
+ const last = this._lastStateKey;
95
+ this._lastStateKey = key;
96
+ return !!last && last.length === key.length && key.every((v, i) => Object.is(v, last[i]));
97
+ }
98
+ /**
80
99
  * Drive the apply from `update()` as well as `_subscribe()`.
81
100
  *
82
101
  * `mono-table-paging` and `mono-table-loading` REPLACE `_subscribe` without
@@ -1707,7 +1726,7 @@ const MonoTablePagingCore = (superClass) => {
1707
1726
  this._off?.();
1708
1727
  this._off = this.dataGrid?.subscribe(() => {
1709
1728
  this.requestUpdate();
1710
- if (this.type === "virtual-scroll") this._recomputeWindow();
1729
+ if (this.type === "virtual-scroll") this._scheduleScroll();
1711
1730
  });
1712
1731
  }
1713
1732
  _scrollActive() {
@@ -1805,8 +1824,11 @@ const MonoTablePagingCore = (superClass) => {
1805
1824
  const rh = Math.max(1, Number(this.rowHeight) || 44);
1806
1825
  const over = Math.max(0, Math.floor(Number(this.overscan) || 0));
1807
1826
  const loaded = grid.loadedCount;
1808
- let start = Math.floor(el.scrollTop / rh) - over;
1809
- let end = Math.ceil((el.scrollTop + el.clientHeight) / rh) + over;
1827
+ const first = Math.floor(el.scrollTop / rh);
1828
+ const last = Math.ceil((el.scrollTop + el.clientHeight) / rh);
1829
+ const stride = Math.max(1, over);
1830
+ let start = Math.floor(first / stride) * stride - over;
1831
+ let end = Math.ceil(last / stride) * stride + over;
1810
1832
  start = Math.max(0, start);
1811
1833
  end = Math.min(loaded, Math.max(start, end));
1812
1834
  const padTop = start * rh;
@@ -2246,6 +2268,8 @@ const MonoTableThCore = (superClass) => {
2246
2268
  this._tree = [];
2247
2269
  this._expanded = /* @__PURE__ */ new Set();
2248
2270
  this._exclusiveWarned = false;
2271
+ this._lastLoaded = 0;
2272
+ this._sizeSig = [];
2249
2273
  this._seededSort = false;
2250
2274
  this._filterOpen = false;
2251
2275
  this._values = [];
@@ -2275,6 +2299,7 @@ const MonoTableThCore = (superClass) => {
2275
2299
  disconnectedCallback() {
2276
2300
  this.dataGrid?.unregisterColumn(this);
2277
2301
  this._autoSize?.stop();
2302
+ this._sizeSig = [];
2278
2303
  super.disconnectedCallback();
2279
2304
  }
2280
2305
  willUpdate(changed) {
@@ -2294,14 +2319,33 @@ const MonoTableThCore = (superClass) => {
2294
2319
  */
2295
2320
  _syncWidth(cell) {
2296
2321
  if (String(this.width ?? "").trim().toLowerCase() === "auto") {
2322
+ const fresh = !this._autoSize;
2297
2323
  const sizer = this._autoSize ??= new ColumnAutoSize(this);
2298
- sizer.min = cssLengthToPx(this.minWidth ?? null, cell);
2299
- sizer.max = cssLengthToPx(this.maxWidth ?? null, cell);
2300
- sizer.schedule();
2324
+ const grid = this.dataGrid;
2325
+ const loaded = grid?.loadedCount ?? 0;
2326
+ if (loaded < this._lastLoaded) sizer.resetFloor();
2327
+ this._lastLoaded = loaded;
2328
+ const sig = [
2329
+ this.minWidth,
2330
+ this.maxWidth,
2331
+ grid?.scrollMode,
2332
+ loaded,
2333
+ this.caption,
2334
+ cell.closest("table")
2335
+ ];
2336
+ const moved = sig.length !== this._sizeSig.length || sig.some((v, i) => !Object.is(v, this._sizeSig[i]));
2337
+ if (fresh || moved) {
2338
+ this._sizeSig = sig;
2339
+ sizer.min = cssLengthToPx(this.minWidth ?? null, cell);
2340
+ sizer.max = cssLengthToPx(this.maxWidth ?? null, cell);
2341
+ sizer.growOnly = grid?.scrollMode === "virtual";
2342
+ sizer.schedule();
2343
+ }
2301
2344
  } else {
2302
2345
  if (this._autoSize) {
2303
2346
  this._autoSize.stop(true);
2304
2347
  this._autoSize = void 0;
2348
+ this._sizeSig = [];
2305
2349
  }
2306
2350
  if (this.width != null && this.width !== "") cell.style.width = toCssSize(this.width);
2307
2351
  }
@@ -2713,8 +2757,7 @@ const MonoTableThCore = (superClass) => {
2713
2757
  * the table body — the checkbox still carries the RAW value, so
2714
2758
  * `setColumnFilter` keeps matching the real data.
2715
2759
  */
2716
- _display(value) {
2717
- const map = this.dataGrid?.columnMap?.(this.field);
2760
+ _display(value, map = this.dataGrid?.columnMap?.(this.field)) {
2718
2761
  if (map) try {
2719
2762
  const mapped = map(value, { [this.field]: value }, 0);
2720
2763
  if (mapped != null && mapped !== "") return String(mapped);
@@ -2734,7 +2777,8 @@ const MonoTableThCore = (superClass) => {
2734
2777
  _filteredValues() {
2735
2778
  const q = this._search.trim().toLowerCase();
2736
2779
  if (!q) return this._values;
2737
- return this._values.filter((v) => this._display(v.value).toLowerCase().includes(q));
2780
+ const map = this.dataGrid?.columnMap?.(this.field);
2781
+ return this._values.filter((v) => this._display(v.value, map).toLowerCase().includes(q));
2738
2782
  }
2739
2783
  _toggleValue(key, on) {
2740
2784
  const next = new Set(this._checked);
@@ -2853,10 +2897,12 @@ const MonoTableThCore = (superClass) => {
2853
2897
  `;
2854
2898
  }
2855
2899
  _renderFilterPanel() {
2856
- const list = this._filteredValues();
2900
+ const open = this._filterOpen;
2901
+ const list = open ? this._filteredValues() : [];
2902
+ const map = open ? this.dataGrid?.columnMap?.(this.field) : void 0;
2857
2903
  const allChecked = list.length > 0 && list.every((v) => this._checked.has(String(v.value)));
2858
2904
  const multi = this._filterMulti;
2859
- const filteredColumns = this.dataGrid?.filteredColumns?.() ?? [];
2905
+ const filteredColumns = open ? this.dataGrid?.filteredColumns?.() ?? [] : [];
2860
2906
  const otherFiltered = filteredColumns.filter((f) => f !== this.field).length;
2861
2907
  const clearAllCount = otherFiltered + (filteredColumns.includes(this.field) ? 1 : 0);
2862
2908
  return html`
@@ -2880,7 +2926,7 @@ const MonoTableThCore = (superClass) => {
2880
2926
  </div>
2881
2927
  `}
2882
2928
  <div class="mono-th-filter-list" mono-th-filter-list>
2883
- ${this._valuesLoading ? html`<div class="mono-th-filter-msg" mono-th-filter-msg><span class="mono-th-filter-spin" mono-th-filter-spin></span>Loading…</div>` : this._valuesError ? this._renderMessage("Failed to load values.") : this._hf.date ? this._tree.length === 0 ? this._renderMessage("No values.") : this._renderDateTree() : list.length === 0 ? this._renderMessage("No values.") : html`
2929
+ ${!open ? nothing : this._valuesLoading ? html`<div class="mono-th-filter-msg" mono-th-filter-msg><span class="mono-th-filter-spin" mono-th-filter-spin></span>Loading…</div>` : this._valuesError ? this._renderMessage("Failed to load values.") : this._hf.date ? this._tree.length === 0 ? this._renderMessage("No values.") : this._renderDateTree() : list.length === 0 ? this._renderMessage("No values.") : html`
2884
2930
  <label class="mono-th-check mono-th-check-all" mono-th-check mono-th-check-all>
2885
2931
  <input
2886
2932
  type="checkbox"
@@ -2901,7 +2947,7 @@ const MonoTableThCore = (superClass) => {
2901
2947
  @change=${(e) => this._toggleValue(key, e.target.checked)}
2902
2948
  />
2903
2949
  <span class="mono-th-check-box" mono-th-check-box></span>
2904
- <span class="mono-th-check-label" mono-th-check-label>${this._display(v.value)}</span>
2950
+ <span class="mono-th-check-label" mono-th-check-label>${this._display(v.value, map)}</span>
2905
2951
  <span class="mono-th-check-count" mono-th-check-count>${v.count}</span>
2906
2952
  </label>
2907
2953
  `;
@@ -4629,6 +4675,24 @@ const MonoTableCheckboxCore = (superClass) => {
4629
4675
  if (this._checked) row?.setAttribute("mono-selected", "");
4630
4676
  else row?.removeAttribute("mono-selected");
4631
4677
  }
4678
+ /**
4679
+ * All this box draws from the controller: ticked, mixed (select-all), and the drain's
4680
+ * `pending`. A notify that moves none of them — another row's tick, a load flag, a summary —
4681
+ * no longer re-renders every row's checkbox (see the base's `_stateKey`).
4682
+ */
4683
+ _stateKey() {
4684
+ return this.type === "all" ? [
4685
+ this.type,
4686
+ this._checked,
4687
+ this._indeterminate,
4688
+ this._pending
4689
+ ] : [
4690
+ this.type,
4691
+ this._checked,
4692
+ this._pending,
4693
+ this.item
4694
+ ];
4695
+ }
4632
4696
  /** Whether this box is ticked right now. */
4633
4697
  get _checked() {
4634
4698
  const check = this.dataGrid?.check?.();
@@ -1,4 +1,4 @@
1
- import { a as __decorate, f as customElement, i as withShadowUtilityStyles, l as defineHybridPropAliases, o as arrayHasChanged, r as toShadowCss, s as booleanStringConverter, t as flushSsrHydration } from "../../hydration-flush-9AJE8FRl.js";
1
+ import { a as __decorate, f as customElement, i as withShadowUtilityStyles, l as defineHybridPropAliases, o as arrayHasChanged, r as toShadowCss, s as booleanStringConverter, t as flushSsrHydration } from "../../hydration-flush-BaE9gN3C.js";
2
2
  import { t as dispatchMonoEvent } from "../../mono-event-BPku9HpS.js";
3
3
  import { LitElement, html, isServer, nothing, unsafeCSS } from "lit";
4
4
  import { ref } from "lit/directives/ref.js";
@@ -1,14 +1,14 @@
1
- import { _ as buildSizeStyle, a as __decorate, f as customElement, i as withShadowUtilityStyles, l as defineHybridPropAliases, o as arrayHasChanged, r as toShadowCss, s as booleanStringConverter, t as flushSsrHydration, v as toCssSize } from "../../hydration-flush-9AJE8FRl.js";
1
+ import { _ as buildSizeStyle, a as __decorate, f as customElement, i as withShadowUtilityStyles, l as defineHybridPropAliases, o as arrayHasChanged, r as toShadowCss, s as booleanStringConverter, t as flushSsrHydration, v as toCssSize } from "../../hydration-flush-BaE9gN3C.js";
2
2
  import { t as dispatchMonoEvent } from "../../mono-event-BPku9HpS.js";
3
- import { t as MonoFormControlCore } from "../../form-control-core-rW2WvOcb.js";
3
+ import { t as MonoFormControlCore } from "../../form-control-core-BbiACMtL.js";
4
4
  import { c as spinnerIcon, i as chevronIcon, n as caretIcon, s as refreshIcon } from "../../field-icons-t8rXRCKs.js";
5
- import { n as FieldTooltipController, t as field_tooltip_css_raw_default } from "../../field-tooltip.css_raw-DEctHXKm.js";
6
- 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";
7
- import { t as PopupPortalController } from "../../popup-portal-C8ttHDRX.js";
5
+ import { n as FieldTooltipController, t as field_tooltip_css_raw_default } from "../../field-tooltip.css_raw-U5UeTa2d.js";
6
+ 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";
7
+ import { t as PopupPortalController } from "../../popup-portal-CINuVjNY.js";
8
8
  import { a as errorTitle, d as MonoSourceSearch, i as errorText, m as searchRowPredicate, n as describeError, p as resolveSearchFields } from "../../normalize-error-BmLbgANw.js";
9
- import { t as LateSlotWatcher } from "../../light-slots-Cb6e-LU3.js";
9
+ import { t as LateSlotWatcher } from "../../light-slots-_no0r2Z-.js";
10
10
  import { t as checkbox_css_raw_default } from "../../checkbox.css_raw-AYtSbUtY.js";
11
- import { r as readAllRows } from "../../data-source-read-i6CYSUEl.js";
11
+ import { r as readAllRows } from "../../data-source-read-DTJ_Mnez.js";
12
12
  import { n as unwrapReactive, r as unwrapReactiveDeep } from "../../reactive-Dtd-esHO.js";
13
13
  import { n as resolveChipLimit, r as visibleChipCap, t as ChipStripController } from "../../chip-strip-bNfLn52Z.js";
14
14
  import { t as chip_css_raw_default } from "../../chip.css_raw-ChfRSHLO.js";
@@ -149,6 +149,12 @@ const MonoTagInputCore = (superClass) => {
149
149
  this._listboxId = `${this._inputId}-listbox`;
150
150
  this._lateListSlot = new LateSlotWatcher(this, "list", () => this._onLateListSlot());
151
151
  this._lateSelectAllSlot = new LateSlotWatcher(this, "select-all", () => this._onLateSelectAllSlot());
152
+ this._docListenersBound = false;
153
+ this._filteredMemo = null;
154
+ this._filteredMemoOn = false;
155
+ this._selectedSetFor = null;
156
+ this._selectedSetLen = -1;
157
+ this._selectedSetMemo = /* @__PURE__ */ new Set();
152
158
  this._sourceSearch = new MonoSourceSearch();
153
159
  this._searchVersion = 0;
154
160
  this._appliedQuery = "";
@@ -168,6 +174,8 @@ const MonoTagInputCore = (superClass) => {
168
174
  this._ds.retry(clearSearch ? () => this._pushSearch("") : void 0);
169
175
  };
170
176
  this._selectedItemCache = /* @__PURE__ */ new Map();
177
+ this._leafIndexKey = [];
178
+ this._leafIndexMemo = /* @__PURE__ */ new Map();
171
179
  this._handleDocumentClick = (event) => {
172
180
  if (this.stayOpen) return;
173
181
  if (!this._open && !this._moreOpen) return;
@@ -474,9 +482,7 @@ const MonoTagInputCore = (superClass) => {
474
482
  this._lateListSlot.start();
475
483
  this._lateSelectAllSlot.start();
476
484
  if (isServer) return;
477
- document.addEventListener("click", this._handleDocumentClick, true);
478
- document.addEventListener("focusin", this._handleDocumentFocusIn, true);
479
- document.addEventListener("keydown", this._handleDocumentKeydown);
485
+ if (this._open || this._moreOpen) this._bindDocumentListeners();
480
486
  }
481
487
  disconnectedCallback() {
482
488
  if (this._searchTimer) {
@@ -487,14 +493,32 @@ const MonoTagInputCore = (superClass) => {
487
493
  this._lateListSlot.stop();
488
494
  this._lateSelectAllSlot.stop();
489
495
  this._stopWatchingListChrome();
490
- if (!isServer) {
491
- document.removeEventListener("click", this._handleDocumentClick, true);
492
- document.removeEventListener("focusin", this._handleDocumentFocusIn, true);
493
- document.removeEventListener("keydown", this._handleDocumentKeydown);
494
- }
496
+ if (!isServer) this._unbindDocumentListeners();
495
497
  super.disconnectedCallback();
496
498
  }
499
+ /**
500
+ * Outside-dismiss listeners, bound while a panel is OPEN (the list or the "+N more") rather
501
+ * than on connect — select's rule, same reasoning: all three handlers bail when both panels are
502
+ * closed, so the only cost they carried at rest was dispatch, three `document` listeners per
503
+ * field (two capture-phase) in the path of every click, focus move and keystroke.
504
+ */
505
+ _bindDocumentListeners() {
506
+ if (this._docListenersBound) return;
507
+ this._docListenersBound = true;
508
+ document.addEventListener("click", this._handleDocumentClick, true);
509
+ document.addEventListener("focusin", this._handleDocumentFocusIn, true);
510
+ document.addEventListener("keydown", this._handleDocumentKeydown);
511
+ }
512
+ _unbindDocumentListeners() {
513
+ if (!this._docListenersBound) return;
514
+ this._docListenersBound = false;
515
+ document.removeEventListener("click", this._handleDocumentClick, true);
516
+ document.removeEventListener("focusin", this._handleDocumentFocusIn, true);
517
+ document.removeEventListener("keydown", this._handleDocumentKeydown);
518
+ }
497
519
  willUpdate(changed) {
520
+ this._filteredMemo = null;
521
+ this._filteredMemoOn = true;
498
522
  for (const key of [
499
523
  "disabled",
500
524
  "loading",
@@ -540,7 +564,12 @@ const MonoTagInputCore = (superClass) => {
540
564
  updated(changed) {
541
565
  super.updated(changed);
542
566
  this._syncListEntries();
543
- if (isServer) return;
567
+ if (isServer) {
568
+ this._endFilteredMemo();
569
+ return;
570
+ }
571
+ if (this._open || this._moreOpen) this._bindDocumentListeners();
572
+ else this._unbindDocumentListeners();
544
573
  this._rememberSelected(this._selectedValues);
545
574
  if (changed.has("_open")) {
546
575
  this._cursorPending = this._open;
@@ -557,6 +586,11 @@ const MonoTagInputCore = (superClass) => {
557
586
  this._measuredChipCount = this._renderedChipCount;
558
587
  this._chipStrip.invalidate();
559
588
  }
589
+ this._endFilteredMemo();
590
+ }
591
+ _endFilteredMemo() {
592
+ this._filteredMemoOn = false;
593
+ this._filteredMemo = null;
560
594
  }
561
595
  _setCssClass(value) {
562
596
  if (value == null) {
@@ -756,8 +790,25 @@ const MonoTagInputCore = (superClass) => {
756
790
  return "default";
757
791
  }
758
792
  _isSelected(item) {
759
- const value = this._resolveItemValue(item);
760
- return this._selectedValues.some((v) => this._isSameValue(v, value));
793
+ return this._selectedSet.has(unwrapReactive(this._resolveItemValue(item)));
794
+ }
795
+ /**
796
+ * The selection as a Set of RAW values — `_isSameValue`'s rule (identity after
797
+ * `unwrapReactive`) as an O(1) lookup.
798
+ *
799
+ * `_isSelected` runs per row, from the option render, the list entries, the group
800
+ * headers and the "All" row — a `.some()` over the selection there made every render
801
+ * O(rows × selected), which after a select-all of a thousand rows is millions of
802
+ * comparisons per keystroke. Rebuilt when `value` is replaced (or resized in place).
803
+ */
804
+ get _selectedSet() {
805
+ const values = this._selectedValues;
806
+ if (values !== this._selectedSetFor || values.length !== this._selectedSetLen) {
807
+ this._selectedSetFor = values;
808
+ this._selectedSetLen = values.length;
809
+ this._selectedSetMemo = new Set(values.map((v) => unwrapReactive(v)));
810
+ }
811
+ return this._selectedSetMemo;
761
812
  }
762
813
  /** Whether `search-value` names anything explicitly (vs falling back). */
763
814
  get _hasSearchValue() {
@@ -918,6 +969,18 @@ const MonoTagInputCore = (superClass) => {
918
969
  _close() {
919
970
  this._open = false;
920
971
  this._resetSearch();
972
+ this._pruneSelectedCache();
973
+ }
974
+ /**
975
+ * Drop remembered rows no current value needs, once the cache has outgrown the selection — it
976
+ * only ever grew (every value ever picked, every row a select-all drained). On close, with
977
+ * slack, so toggling a few tags never thrashes it.
978
+ */
979
+ _pruneSelectedCache() {
980
+ const values = this._selectedValues;
981
+ if (this._selectedItemCache.size <= values.length * 2 + 200) return;
982
+ const keep = new Set(values.map((v) => this._cacheKey(v)).filter((k) => k !== void 0));
983
+ for (const k of this._selectedItemCache.keys()) if (!keep.has(k)) this._selectedItemCache.delete(k);
921
984
  }
922
985
  /** Debounce a server search for the current input text. */
923
986
  _scheduleSearch() {
@@ -1100,8 +1163,10 @@ const MonoTagInputCore = (superClass) => {
1100
1163
  return index >= 0 ? index : 0;
1101
1164
  }
1102
1165
  get _filteredItems() {
1103
- if (this._grouped) return this._groupRows().filter((r) => r.kind === "item").map((r) => r.item);
1104
- return this._visibleItems.filter((item) => this._searchMatches(item));
1166
+ if (this._filteredMemoOn && this._filteredMemo) return this._filteredMemo;
1167
+ const out = this._grouped ? this._groupRows().filter((r) => r.kind === "item").map((r) => r.item) : this._visibleItems.filter((item) => this._searchMatches(item));
1168
+ if (this._filteredMemoOn) this._filteredMemo = out;
1169
+ return out;
1105
1170
  }
1106
1171
  /**
1107
1172
  * The selection limits in force: `chip.max` / `chip.min` pin, the element's
@@ -1216,7 +1281,37 @@ const MonoTagInputCore = (superClass) => {
1216
1281
  }
1217
1282
  /** Look a value up in the currently loaded rows only. */
1218
1283
  _findLoadedItem(value) {
1219
- return this._leafItems.find((item) => this._isSameValue(this._resolveItemValue(item), value));
1284
+ if (value == null) return this._leafItems.find((item) => this._isSameValue(this._resolveItemValue(item), value));
1285
+ return this._leafIndex.get(unwrapReactive(value));
1286
+ }
1287
+ /**
1288
+ * Loaded leaf rows by RAW resolved value (first one wins, like the `.find()` it replaces).
1289
+ *
1290
+ * Every chip resolves its row through `_findLoadedItem` — `_resolvedValues` alone runs
1291
+ * 4–5 times a render, plus a label lookup per chip — and each was a linear scan of the
1292
+ * loaded rows: O(selected × loaded) per pass. Rebuilt when the source array, its length,
1293
+ * or the key / grouping config changes.
1294
+ */
1295
+ get _leafIndex() {
1296
+ const src = this._ds.sourceItems;
1297
+ const key = [
1298
+ src,
1299
+ Array.isArray(src) ? src.length : -1,
1300
+ this.keyValue,
1301
+ this._grouped,
1302
+ this.group,
1303
+ this.groupItems
1304
+ ];
1305
+ if (key.length !== this._leafIndexKey.length || key.some((v, i) => !Object.is(v, this._leafIndexKey[i]))) {
1306
+ const map = /* @__PURE__ */ new Map();
1307
+ for (const item of this._leafItems) {
1308
+ const v = unwrapReactive(this._resolveItemValue(item));
1309
+ if (v != null && !map.has(v)) map.set(v, item);
1310
+ }
1311
+ this._leafIndexMemo = map;
1312
+ this._leafIndexKey = key;
1313
+ }
1314
+ return this._leafIndexMemo;
1220
1315
  }
1221
1316
  _getItemByValue(value) {
1222
1317
  const loaded = this._findLoadedItem(value);
@@ -2247,6 +2342,7 @@ const MonoTagInputCore = (superClass) => {
2247
2342
  * back fresh row objects under the same keys, and a consumer reading `e.item.Nama` must see them.
2248
2343
  */
2249
2344
  _syncListEntries() {
2345
+ if (!this.dataForm || !this.keyForm) return;
2250
2346
  const next = this._listEntries();
2251
2347
  const prev = this._publishedEntries;
2252
2348
  let same = prev.length === next.length;
@@ -1,8 +1,8 @@
1
- import { _ as buildSizeStyle, a as __decorate, f as customElement, i as withShadowUtilityStyles, l as defineHybridPropAliases, r as toShadowCss, s as booleanStringConverter, t as flushSsrHydration } from "../../hydration-flush-9AJE8FRl.js";
1
+ import { _ as buildSizeStyle, a as __decorate, f as customElement, i as withShadowUtilityStyles, l as defineHybridPropAliases, r as toShadowCss, s as booleanStringConverter, t as flushSsrHydration } from "../../hydration-flush-BaE9gN3C.js";
2
2
  import { t as dispatchMonoEvent } from "../../mono-event-BPku9HpS.js";
3
- import { t as MonoFormControlCore } from "../../form-control-core-rW2WvOcb.js";
4
- import { n as FieldTooltipController, t as field_tooltip_css_raw_default } from "../../field-tooltip.css_raw-DEctHXKm.js";
5
- 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";
3
+ import { t as MonoFormControlCore } from "../../form-control-core-BbiACMtL.js";
4
+ import { n as FieldTooltipController, t as field_tooltip_css_raw_default } from "../../field-tooltip.css_raw-U5UeTa2d.js";
5
+ 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";
6
6
  import { LitElement, html, isServer, nothing, unsafeCSS } from "lit";
7
7
  import { property, query, state } from "lit/decorators.js";
8
8
  import { ifDefined } from "lit/directives/if-defined.js";