@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.
- package/dist/{control-tooltip-C3rA_nSH.js → control-tooltip-CoPD37_h.js} +20 -11
- package/dist/{data-source-options-Cz9fVLK8.js → data-source-options-CS0w0wlO.js} +26 -9
- package/dist/{data-source-options-QjuI73g8.js → data-source-options-lDR-g9Eb.js} +26 -9
- package/dist/{data-source-read-FxqzQkk2.js → data-source-read-Cp_h7NIf.js} +5 -2
- package/dist/{data-source-read-i6CYSUEl.js → data-source-read-DTJ_Mnez.js} +5 -2
- package/dist/{excel-BPdDt06G.js → excel-DtRpxmxs.js} +1 -1
- package/dist/{export-DgomqI_3.js → export-D27RJa1w.js} +1 -1
- package/dist/export.js +3 -3
- package/dist/{field-tooltip-FyMi9vNM.js → field-tooltip-Csk4s2ve.js} +2 -3
- package/dist/field-tooltip-addon-B32dizW_.js +22 -0
- package/dist/{control-tooltip-7vegYmq3.js → field-tooltip-addon-CWCp19mJ.js} +36 -12
- package/dist/{field-tooltip.css_raw-DEctHXKm.js → field-tooltip.css_raw-U5UeTa2d.js} +3 -4
- package/dist/{field-validation-CHHQi1zl.js → field-validation-CFmUmuDx.js} +1 -1
- package/dist/field-validation.css_raw-Cx6SGrfP.js +178 -0
- package/dist/{form-control-core-rW2WvOcb.js → form-control-core-BbiACMtL.js} +1 -1
- package/dist/{hydration-flush-9AJE8FRl.js → hydration-flush-BaE9gN3C.js} +67 -17
- package/dist/index.js +10 -10
- package/dist/{index.node-tTkISFn2.js → index.node-Mg0Snp0t.js} +5 -5
- package/dist/index.node.js +10 -10
- package/dist/input.css_raw-Br-T8RWv.js +5 -0
- package/dist/{light-slots-BnBR29E7.js → light-slots-B5Ck0t_E.js} +1 -1
- package/dist/{light-slots-Cb6e-LU3.js → light-slots-_no0r2Z-.js} +1 -1
- package/dist/mono-button-CLkHg3WW.js +871 -0
- package/dist/{mono-button.shadow-CIBGisyo.js → mono-button.shadow-DqZMpcqY.js} +1 -1
- package/dist/{mono-data-chart-ChkelNT7.js → mono-data-chart-BAH9Zb3p.js} +2 -2
- package/dist/{mono-data-dropdown-DxpUUk2y.js → mono-data-dropdown-BsY5IuIo.js} +72 -6
- package/dist/{mono-data-grid-KDpu4d4_.js → mono-data-grid-CZFjpnOD.js} +125 -18
- package/dist/{mono-data-grid-8jmeIXUU.js → mono-data-grid-kV4jYu2g.js} +124 -17
- package/dist/{mono-element-Bc9wElPy.js → mono-element-CKcT0rwv.js} +1 -1
- package/dist/{mono-form-controller-BkMR8g14.js → mono-form-controller-BrA10erm.js} +12 -1
- package/dist/{mono-ui-KOBJcnXk.js → mono-ui-kvLVIf1V.js} +43 -15
- package/dist/{popup-portal-C8ttHDRX.js → popup-portal-CINuVjNY.js} +53 -6
- package/dist/src/components/accordion/mono-accordion.d.ts +0 -1
- package/dist/src/components/alert/mono-alert.d.ts +0 -1
- package/dist/src/components/breadcrumb/mono-breadcrumb-list.d.ts +0 -1
- package/dist/src/components/breadcrumb/mono-breadcrumb.d.ts +0 -1
- package/dist/src/components/button/mono-button-dropdown.d.ts +0 -1
- package/dist/src/components/button/mono-button.d.ts +0 -1
- package/dist/src/components/card/mono-card.d.ts +0 -1
- package/dist/src/components/chart/mono-chart-presets.d.ts +0 -4
- package/dist/src/components/chart/mono-chart.d.ts +0 -1
- package/dist/src/components/checkbox/mono-checkbox.d.ts +0 -1
- package/dist/src/components/chip/mono-chip.d.ts +0 -1
- package/dist/src/components/date/mono-date.d.ts +0 -1
- package/dist/src/components/drawer/mono-drawer.d.ts +0 -1
- package/dist/src/components/dropdown/mono-dropdown.d.ts +0 -1
- package/dist/src/components/dropdown-table/mono-dropdown-table.d.ts +0 -1
- package/dist/src/components/file-upload/mono-file-upload.d.ts +0 -1
- package/dist/src/components/filter/mono-filter-builder.d.ts +0 -1
- package/dist/src/components/input/mono-input.d.ts +0 -1
- package/dist/src/components/menu/mono-menu.d.ts +0 -1
- package/dist/src/components/modal/mono-modal.d.ts +0 -1
- package/dist/src/components/nav/mono-nav.d.ts +0 -1
- package/dist/src/components/otp/mono-otp.d.ts +0 -1
- package/dist/src/components/radio/mono-radio.d.ts +0 -1
- package/dist/src/components/rich-text-editor/mono-rich-text-editor.d.ts +0 -1
- package/dist/src/components/select/mono-select.d.ts +0 -1
- package/dist/src/components/sidebar/mono-sidebar.d.ts +0 -1
- package/dist/src/components/slider/mono-slider.d.ts +0 -1
- package/dist/src/components/switch/mono-switch.d.ts +0 -1
- package/dist/src/components/table/column-autosize.d.ts +23 -1
- package/dist/src/components/table/mono-data-grid.d.ts +6 -0
- package/dist/src/components/table/mono-table-checkbox.d.ts +0 -1
- package/dist/src/components/table/mono-table-detail.d.ts +0 -1
- package/dist/src/components/table/mono-table-empty.d.ts +0 -1
- package/dist/src/components/table/mono-table-error.d.ts +0 -1
- package/dist/src/components/table/mono-table-info.d.ts +0 -1
- package/dist/src/components/table/mono-table-loading.d.ts +0 -1
- package/dist/src/components/table/mono-table-page-size.d.ts +0 -1
- package/dist/src/components/table/mono-table-paging-group.d.ts +0 -1
- package/dist/src/components/table/mono-table-paging.d.ts +0 -1
- package/dist/src/components/table/mono-table-search.d.ts +0 -1
- package/dist/src/components/table/mono-table-sort.d.ts +0 -1
- package/dist/src/components/table/mono-table-summary.d.ts +0 -1
- package/dist/src/components/table/mono-table-th.d.ts +0 -1
- package/dist/src/components/table/table-controller-core.d.ts +2 -0
- package/dist/src/components/tabs/mono-tabs.d.ts +0 -1
- package/dist/src/components/tag-input/mono-tag-input.d.ts +0 -1
- package/dist/src/components/textarea/mono-textarea.d.ts +0 -1
- package/dist/src/components/tooltip/field-tooltip-addon.d.ts +5 -0
- package/dist/src/composables/popup-portal.d.ts +24 -1
- package/dist/{styles-BODNpZV1.js → styles-D-ergrfR.js} +1 -1
- package/dist/{tooltip-Drekihf5.js → tooltip-Cu5IrDS9.js} +1 -2
- package/dist/tooltip.js +2 -3
- package/dist/ui/accordion.js +4 -11
- package/dist/ui/alert.js +3 -10
- package/dist/ui/breadcrumb.js +4 -14
- package/dist/ui/button-dropdown.js +22 -15
- package/dist/ui/button.js +1 -1
- package/dist/ui/card.js +4 -11
- package/dist/ui/chart.js +4 -23
- package/dist/ui/checkbox.js +4 -11
- package/dist/ui/chip.js +6 -9
- package/dist/ui/date.js +5 -12
- package/dist/ui/drawer.js +5 -12
- package/dist/ui/dropdown-table.js +89 -37
- package/dist/ui/dropdown.js +34 -21
- package/dist/ui/file-upload.js +4 -11
- package/dist/ui/filter.js +3 -10
- package/dist/ui/form.js +1 -1
- package/dist/ui/index.css +3840 -3840
- package/dist/ui/input.js +6 -13
- package/dist/ui/menu.js +4 -11
- package/dist/ui/modal.js +6 -13
- package/dist/ui/nav.js +4 -11
- package/dist/ui/otp.js +6 -13
- package/dist/ui/radio.js +4 -11
- package/dist/ui/rich-text-editor.js +4 -11
- package/dist/ui/select.js +12 -14
- package/dist/ui/shadow/accordion.js +1 -1
- package/dist/ui/shadow/alert.js +1 -1
- package/dist/ui/shadow/breadcrumb.js +1 -1
- package/dist/ui/shadow/button-dropdown.js +21 -7
- package/dist/ui/shadow/button.js +1 -1
- package/dist/ui/shadow/card.js +1 -1
- package/dist/ui/shadow/chart.js +3 -3
- package/dist/ui/shadow/checkbox.js +2 -2
- package/dist/ui/shadow/chip.js +1 -1
- package/dist/ui/shadow/date.js +4 -4
- package/dist/ui/shadow/drawer.js +2 -2
- package/dist/ui/shadow/dropdown-table.js +159 -34
- package/dist/ui/shadow/dropdown.js +31 -11
- package/dist/ui/shadow/file-upload.js +2 -2
- package/dist/ui/shadow/filter.js +1 -1
- package/dist/ui/shadow/input.js +5 -5
- package/dist/ui/shadow/menu.js +1 -1
- package/dist/ui/shadow/modal.js +3 -3
- package/dist/ui/shadow/nav.js +1 -1
- package/dist/ui/shadow/otp.js +5 -5
- package/dist/ui/shadow/radio.js +2 -2
- package/dist/ui/shadow/rich-text-editor.js +2 -2
- package/dist/ui/shadow/select.js +11 -6
- package/dist/ui/shadow/sidebar.js +2 -2
- package/dist/ui/shadow/slider.js +4 -4
- package/dist/ui/shadow/switch.js +2 -2
- package/dist/ui/shadow/table.js +84 -20
- package/dist/ui/shadow/tabs.js +1 -1
- package/dist/ui/shadow/tag-input.js +117 -21
- package/dist/ui/shadow/textarea.js +4 -4
- package/dist/ui/sidebar.js +4 -11
- package/dist/ui/slider.js +5 -12
- package/dist/ui/switch.js +4 -11
- package/dist/ui/table.js +85 -64
- package/dist/ui/tabs.js +4 -11
- package/dist/ui/tag-input.js +118 -29
- package/dist/ui/textarea.js +6 -13
- package/dist/ui/theme/luma.css +495 -495
- package/dist/ui/theme/lyra.css +495 -495
- package/dist/ui/theme/maia.css +495 -495
- package/dist/ui/theme/mira.css +495 -495
- package/dist/ui/theme/nova.css +495 -495
- package/dist/ui/theme/one.css +742 -742
- package/dist/ui/theme/rhea.css +495 -495
- package/dist/ui/theme/sera.css +495 -495
- package/dist/ui/theme/vega.css +495 -495
- package/package.json +2 -2
- package/dist/field-validation.css_raw-B3Iu33rS.js +0 -178
- package/dist/input.css_raw-CQu2fAsU.js +0 -5
- package/dist/mono-button-Cy5-Y0At.js +0 -878
- package/dist/tooltip-loader-3U9FTOXj.js +0 -20
- package/dist/tooltip-loader-Dcp9AUZn.js +0 -23
package/dist/ui/shadow/slider.js
CHANGED
|
@@ -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-
|
|
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-
|
|
6
|
-
import { n as FieldTooltipController, t as field_tooltip_css_raw_default } from "../../field-tooltip.css_raw-
|
|
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
|
package/dist/ui/shadow/switch.js
CHANGED
|
@@ -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-
|
|
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-
|
|
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";
|
package/dist/ui/shadow/table.js
CHANGED
|
@@ -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-
|
|
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-
|
|
7
|
-
import { t as PopupPortalController } from "../../popup-portal-
|
|
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-
|
|
10
|
-
import { n as captureLightSlots, r as placeLightSlots } from "../../light-slots-
|
|
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-
|
|
13
|
-
import { h as monoArraySource } from "../../data-source-options-
|
|
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.
|
|
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
|
-
|
|
1809
|
-
|
|
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
|
-
|
|
2299
|
-
|
|
2300
|
-
sizer.
|
|
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
|
-
|
|
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
|
|
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?.();
|
package/dist/ui/shadow/tabs.js
CHANGED
|
@@ -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-
|
|
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-
|
|
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-
|
|
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-
|
|
6
|
-
import { n as label_position_css_raw_default, r as FieldValidationController, t as field_validation_css_raw_default } from "../../field-validation.css_raw-
|
|
7
|
-
import { t as PopupPortalController } from "../../popup-portal-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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)
|
|
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
|
-
|
|
760
|
-
|
|
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.
|
|
1104
|
-
|
|
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-
|
|
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-
|
|
4
|
-
import { n as FieldTooltipController, t as field_tooltip_css_raw_default } from "../../field-tooltip.css_raw-
|
|
5
|
-
import { n as label_position_css_raw_default, r as FieldValidationController, t as field_validation_css_raw_default } from "../../field-validation.css_raw-
|
|
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";
|