@zentauri-ui/zentauri-components 1.7.3 → 1.7.5
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/README.md +10 -6
- package/cli/registry.json +2 -0
- package/dist/{chunk-CL55KGDF.js → chunk-3W224B3M.js} +22 -22
- package/dist/chunk-3W224B3M.js.map +1 -0
- package/dist/{chunk-NZDHSIIC.js → chunk-4OCTFG3W.js} +3 -3
- package/dist/chunk-4OCTFG3W.js.map +1 -0
- package/dist/{chunk-4ZKBLVQX.js → chunk-5565GZ4T.js} +19 -19
- package/dist/chunk-5565GZ4T.js.map +1 -0
- package/dist/{chunk-BTJYXKCW.js → chunk-6HPS3ZOP.js} +15 -15
- package/dist/chunk-6HPS3ZOP.js.map +1 -0
- package/dist/chunk-7XCUMSCJ.mjs +80 -0
- package/dist/chunk-7XCUMSCJ.mjs.map +1 -0
- package/dist/{chunk-QAJOE3HJ.js → chunk-BU2MPXPZ.js} +6 -6
- package/dist/chunk-BU2MPXPZ.js.map +1 -0
- package/dist/{chunk-BC6M42HQ.mjs → chunk-CL3VH223.mjs} +21 -21
- package/dist/chunk-CL3VH223.mjs.map +1 -0
- package/dist/{chunk-QXHS3HHZ.mjs → chunk-D3VZKUMH.mjs} +15 -15
- package/dist/chunk-D3VZKUMH.mjs.map +1 -0
- package/dist/{chunk-EDARAO7X.js → chunk-DFCDLVZA.js} +7 -7
- package/dist/chunk-DFCDLVZA.js.map +1 -0
- package/dist/{chunk-ACGVDY5J.mjs → chunk-EZCYSFML.mjs} +4 -4
- package/dist/chunk-EZCYSFML.mjs.map +1 -0
- package/dist/{chunk-ZYKJC5HH.js → chunk-G66SXATZ.js} +15 -15
- package/dist/chunk-G66SXATZ.js.map +1 -0
- package/dist/{chunk-QBPVJH4P.mjs → chunk-H7WDA6U6.mjs} +5 -5
- package/dist/chunk-H7WDA6U6.mjs.map +1 -0
- package/dist/{chunk-OZMSE44N.mjs → chunk-HLG2YJFZ.mjs} +19 -19
- package/dist/chunk-HLG2YJFZ.mjs.map +1 -0
- package/dist/{chunk-QYLTKBH7.js → chunk-INXWZ4DS.js} +3 -3
- package/dist/chunk-INXWZ4DS.js.map +1 -0
- package/dist/{chunk-QSPXPU72.js → chunk-KTLJEPLF.js} +21 -21
- package/dist/chunk-KTLJEPLF.js.map +1 -0
- package/dist/chunk-LMIL2R4R.js +197 -0
- package/dist/chunk-LMIL2R4R.js.map +1 -0
- package/dist/{chunk-PR4QXFJT.js → chunk-LNYCEPW5.js} +5 -5
- package/dist/chunk-LNYCEPW5.js.map +1 -0
- package/dist/chunk-MEAVYU2Y.mjs +192 -0
- package/dist/chunk-MEAVYU2Y.mjs.map +1 -0
- package/dist/{chunk-P5WLYJ2C.mjs → chunk-NNZXBL7R.mjs} +6 -6
- package/dist/chunk-NNZXBL7R.mjs.map +1 -0
- package/dist/{chunk-HMNIH3KJ.mjs → chunk-ORFI4BCJ.mjs} +3 -3
- package/dist/chunk-ORFI4BCJ.mjs.map +1 -0
- package/dist/{chunk-K7TCW5PJ.js → chunk-PMALYOPA.js} +3 -3
- package/dist/chunk-PMALYOPA.js.map +1 -0
- package/dist/{chunk-WPXQHWPV.js → chunk-PYUZOVLY.js} +4 -4
- package/dist/chunk-PYUZOVLY.js.map +1 -0
- package/dist/{chunk-ITVMSCOJ.mjs → chunk-R2JJTREQ.mjs} +22 -22
- package/dist/chunk-R2JJTREQ.mjs.map +1 -0
- package/dist/chunk-RIHJAEOL.js +107 -0
- package/dist/chunk-RIHJAEOL.js.map +1 -0
- package/dist/{chunk-FHLZH3PB.mjs → chunk-SFRS4EZ5.mjs} +3 -3
- package/dist/chunk-SFRS4EZ5.mjs.map +1 -0
- package/dist/{chunk-KTGV76M3.mjs → chunk-SSJXWD2M.mjs} +3 -3
- package/dist/chunk-SSJXWD2M.mjs.map +1 -0
- package/dist/{chunk-YAO62VH2.js → chunk-UGH23TAH.js} +15 -15
- package/dist/chunk-UGH23TAH.js.map +1 -0
- package/dist/chunk-UPZ5XGUD.mjs +100 -0
- package/dist/chunk-UPZ5XGUD.mjs.map +1 -0
- package/dist/{chunk-4XVNQ7IY.mjs → chunk-UR7TNW45.mjs} +15 -15
- package/dist/chunk-UR7TNW45.mjs.map +1 -0
- package/dist/{chunk-HCGSEPOD.mjs → chunk-UROKWFPX.mjs} +7 -7
- package/dist/chunk-UROKWFPX.mjs.map +1 -0
- package/dist/{chunk-XRDVD2EN.js → chunk-X3O45MPI.js} +3 -3
- package/dist/{chunk-XRDVD2EN.js.map → chunk-X3O45MPI.js.map} +1 -1
- package/dist/{chunk-KEKMMNL5.mjs → chunk-XXRDLZW7.mjs} +3 -3
- package/dist/chunk-XXRDLZW7.mjs.map +1 -0
- package/dist/{chunk-NHQ3S4Y6.mjs → chunk-ZIFMIS7D.mjs} +15 -15
- package/dist/chunk-ZIFMIS7D.mjs.map +1 -0
- package/dist/chunk-ZUT7ZUM7.js +84 -0
- package/dist/chunk-ZUT7ZUM7.js.map +1 -0
- package/dist/design-system/accordion.d.ts +1 -1
- package/dist/design-system/alert.d.ts +5 -5
- package/dist/design-system/badge.d.ts +3 -3
- package/dist/design-system/card.d.ts +2 -2
- package/dist/design-system/checkbox.d.ts +10 -10
- package/dist/design-system/checkbox.d.ts.map +1 -1
- package/dist/design-system/command.d.ts +1 -1
- package/dist/design-system/command.d.ts.map +1 -1
- package/dist/design-system/drawer.d.ts +1 -1
- package/dist/design-system/dropdown.d.ts +31 -31
- package/dist/design-system/dropdown.d.ts.map +1 -1
- package/dist/design-system/file-upload.d.ts +15 -15
- package/dist/design-system/file-upload.d.ts.map +1 -1
- package/dist/design-system/index.d.ts +2 -0
- package/dist/design-system/index.d.ts.map +1 -1
- package/dist/design-system/inputs.d.ts +13 -13
- package/dist/design-system/inputs.d.ts.map +1 -1
- package/dist/design-system/modal.d.ts +1 -1
- package/dist/design-system/modal.d.ts.map +1 -1
- package/dist/design-system/otp-input.d.ts +27 -0
- package/dist/design-system/otp-input.d.ts.map +1 -0
- package/dist/design-system/pagination.d.ts +25 -25
- package/dist/design-system/popover.d.ts +19 -19
- package/dist/design-system/popover.d.ts.map +1 -1
- package/dist/design-system/radio-group.d.ts +10 -10
- package/dist/design-system/radio-group.d.ts.map +1 -1
- package/dist/design-system/scroll-area.d.ts +33 -0
- package/dist/design-system/scroll-area.d.ts.map +1 -0
- package/dist/design-system/select.d.ts +35 -35
- package/dist/design-system/select.d.ts.map +1 -1
- package/dist/design-system/skeleton.d.ts +13 -13
- package/dist/design-system/skeleton.d.ts.map +1 -1
- package/dist/design-system/slider.d.ts +23 -23
- package/dist/design-system/slider.d.ts.map +1 -1
- package/dist/design-system/stepper.d.ts +22 -22
- package/dist/design-system/table.d.ts +13 -13
- package/dist/design-system/tabs.d.ts +4 -4
- package/dist/design-system/tabs.d.ts.map +1 -1
- package/dist/design-system/toast.d.ts +17 -17
- package/dist/design-system/toast.d.ts.map +1 -1
- package/dist/design-system/toggle.d.ts +54 -54
- package/dist/design-system/toggle.d.ts.map +1 -1
- package/dist/design-system/tooltip.d.ts +20 -20
- package/dist/design-system/typography.d.ts +15 -15
- package/dist/ui/accordion/animated.js +7 -7
- package/dist/ui/accordion/animated.mjs +2 -2
- package/dist/ui/accordion.js +9 -9
- package/dist/ui/accordion.mjs +2 -2
- package/dist/ui/alert/animated/alert-animated.d.ts.map +1 -1
- package/dist/ui/alert/animated.js +2 -2
- package/dist/ui/alert/animated.js.map +1 -1
- package/dist/ui/alert/animated.mjs +1 -1
- package/dist/ui/alert/animated.mjs.map +1 -1
- package/dist/ui/alert.js +10 -10
- package/dist/ui/alert.mjs +2 -2
- package/dist/ui/badge/animated.js +2 -2
- package/dist/ui/badge/animated.mjs +1 -1
- package/dist/ui/badge/variants.d.ts +1 -1
- package/dist/ui/badge.js +4 -4
- package/dist/ui/badge.mjs +2 -2
- package/dist/ui/card/animated.js +7 -7
- package/dist/ui/card/animated.mjs +2 -2
- package/dist/ui/card.js +12 -12
- package/dist/ui/card.mjs +2 -2
- package/dist/ui/checkbox/animated.js +4 -4
- package/dist/ui/checkbox/animated.mjs +1 -1
- package/dist/ui/checkbox.js +8 -8
- package/dist/ui/checkbox.mjs +2 -2
- package/dist/ui/command/animated.js +2 -2
- package/dist/ui/command/animated.mjs +1 -1
- package/dist/ui/command.js +15 -15
- package/dist/ui/command.mjs +2 -2
- package/dist/ui/drawer/animated.js +11 -11
- package/dist/ui/drawer/animated.mjs +2 -2
- package/dist/ui/drawer.js +11 -11
- package/dist/ui/drawer.mjs +1 -1
- package/dist/ui/dropdown.js +31 -31
- package/dist/ui/dropdown.js.map +1 -1
- package/dist/ui/dropdown.mjs +31 -31
- package/dist/ui/dropdown.mjs.map +1 -1
- package/dist/ui/dynamic-stepper.js +47 -47
- package/dist/ui/dynamic-stepper.js.map +1 -1
- package/dist/ui/dynamic-stepper.mjs +47 -47
- package/dist/ui/dynamic-stepper.mjs.map +1 -1
- package/dist/ui/file-upload.js +15 -15
- package/dist/ui/file-upload.js.map +1 -1
- package/dist/ui/file-upload.mjs +15 -15
- package/dist/ui/file-upload.mjs.map +1 -1
- package/dist/ui/inputs/animated.js +3 -3
- package/dist/ui/inputs/animated.mjs +1 -1
- package/dist/ui/inputs.js +4 -4
- package/dist/ui/inputs.mjs +2 -2
- package/dist/ui/modal/animated.js +4 -4
- package/dist/ui/modal/animated.mjs +1 -1
- package/dist/ui/modal.js +12 -12
- package/dist/ui/modal.mjs +2 -2
- package/dist/ui/otp-input/index.d.ts +4 -0
- package/dist/ui/otp-input/index.d.ts.map +1 -0
- package/dist/ui/otp-input/otp-input.d.ts +6 -0
- package/dist/ui/otp-input/otp-input.d.ts.map +1 -0
- package/dist/ui/otp-input/types.d.ts +23 -0
- package/dist/ui/otp-input/types.d.ts.map +1 -0
- package/dist/ui/otp-input/variants.d.ts +5 -0
- package/dist/ui/otp-input/variants.d.ts.map +1 -0
- package/dist/ui/otp-input.js +302 -0
- package/dist/ui/otp-input.js.map +1 -0
- package/dist/ui/otp-input.mjs +299 -0
- package/dist/ui/otp-input.mjs.map +1 -0
- package/dist/ui/pagination.js +25 -25
- package/dist/ui/pagination.js.map +1 -1
- package/dist/ui/pagination.mjs +25 -25
- package/dist/ui/pagination.mjs.map +1 -1
- package/dist/ui/popover/animated.js +4 -4
- package/dist/ui/popover/animated.mjs +1 -1
- package/dist/ui/popover.js +7 -7
- package/dist/ui/popover.mjs +1 -1
- package/dist/ui/radio-group/animated.js +7 -7
- package/dist/ui/radio-group/animated.mjs +1 -1
- package/dist/ui/radio-group.js +11 -11
- package/dist/ui/radio-group.mjs +2 -2
- package/dist/ui/scroll-area/index.d.ts +4 -0
- package/dist/ui/scroll-area/index.d.ts.map +1 -0
- package/dist/ui/scroll-area/scroll-area.d.ts +6 -0
- package/dist/ui/scroll-area/scroll-area.d.ts.map +1 -0
- package/dist/ui/scroll-area/types.d.ts +8 -0
- package/dist/ui/scroll-area/types.d.ts.map +1 -0
- package/dist/ui/scroll-area/variants.d.ts +8 -0
- package/dist/ui/scroll-area/variants.d.ts.map +1 -0
- package/dist/ui/scroll-area.js +123 -0
- package/dist/ui/scroll-area.js.map +1 -0
- package/dist/ui/scroll-area.mjs +120 -0
- package/dist/ui/scroll-area.mjs.map +1 -0
- package/dist/ui/search.js +2 -2
- package/dist/ui/search.mjs +1 -1
- package/dist/ui/select.js +35 -35
- package/dist/ui/select.js.map +1 -1
- package/dist/ui/select.mjs +35 -35
- package/dist/ui/select.mjs.map +1 -1
- package/dist/ui/skeleton/animated.js +8 -8
- package/dist/ui/skeleton/animated.mjs +1 -1
- package/dist/ui/skeleton.js +9 -9
- package/dist/ui/skeleton.mjs +1 -1
- package/dist/ui/slider.js +23 -23
- package/dist/ui/slider.js.map +1 -1
- package/dist/ui/slider.mjs +23 -23
- package/dist/ui/slider.mjs.map +1 -1
- package/dist/ui/stepper.js +22 -22
- package/dist/ui/stepper.js.map +1 -1
- package/dist/ui/stepper.mjs +22 -22
- package/dist/ui/stepper.mjs.map +1 -1
- package/dist/ui/table/animated.js +8 -8
- package/dist/ui/table/animated.mjs +2 -2
- package/dist/ui/table.js +14 -14
- package/dist/ui/table.mjs +1 -1
- package/dist/ui/tabs/animated.js +2 -2
- package/dist/ui/tabs/animated.mjs +1 -1
- package/dist/ui/tabs.js +9 -9
- package/dist/ui/tabs.mjs +1 -1
- package/dist/ui/toast/animated.js +7 -7
- package/dist/ui/toast/animated.mjs +1 -1
- package/dist/ui/toast.js +12 -12
- package/dist/ui/toast.mjs +1 -1
- package/dist/ui/toggle/animated.js +4 -4
- package/dist/ui/toggle/animated.mjs +1 -1
- package/dist/ui/toggle.js +4 -4
- package/dist/ui/toggle.mjs +2 -2
- package/dist/ui/tooltip/animated.js +3 -3
- package/dist/ui/tooltip/animated.mjs +1 -1
- package/dist/ui/tooltip.js +7 -7
- package/dist/ui/tooltip.mjs +1 -1
- package/dist/ui/typography.js +15 -15
- package/dist/ui/typography.js.map +1 -1
- package/dist/ui/typography.mjs +15 -15
- package/dist/ui/typography.mjs.map +1 -1
- package/package.json +1 -1
- package/src/design-system/accordion.ts +1 -1
- package/src/design-system/alert.ts +5 -5
- package/src/design-system/badge.ts +3 -3
- package/src/design-system/card.ts +2 -2
- package/src/design-system/checkbox.ts +10 -12
- package/src/design-system/command.ts +1 -1
- package/src/design-system/drawer.ts +1 -1
- package/src/design-system/dropdown.ts +31 -31
- package/src/design-system/dynamic-stepper.ts +47 -47
- package/src/design-system/file-upload.ts +15 -15
- package/src/design-system/index.ts +2 -0
- package/src/design-system/inputs.ts +13 -13
- package/src/design-system/modal.ts +1 -1
- package/src/design-system/otp-input.ts +50 -0
- package/src/design-system/pagination.ts +25 -25
- package/src/design-system/popover.ts +19 -23
- package/src/design-system/radio-group.ts +10 -12
- package/src/design-system/scroll-area.ts +47 -0
- package/src/design-system/select.ts +36 -35
- package/src/design-system/skeleton.ts +20 -13
- package/src/design-system/slider.ts +23 -23
- package/src/design-system/stepper.ts +22 -22
- package/src/design-system/table.ts +13 -13
- package/src/design-system/tabs.ts +5 -4
- package/src/design-system/toast.ts +17 -17
- package/src/design-system/toggle.ts +55 -54
- package/src/design-system/tooltip.ts +20 -20
- package/src/design-system/typography.ts +15 -15
- package/src/ui/alert/animated/alert-animated.tsx +1 -0
- package/src/ui/otp-input/index.ts +9 -0
- package/src/ui/otp-input/otp-input.test.tsx +99 -0
- package/src/ui/otp-input/otp-input.tsx +327 -0
- package/src/ui/otp-input/types.ts +32 -0
- package/src/ui/otp-input/variants.ts +18 -0
- package/src/ui/scroll-area/index.ts +5 -0
- package/src/ui/scroll-area/scroll-area.test.tsx +116 -0
- package/src/ui/scroll-area/scroll-area.tsx +64 -0
- package/src/ui/scroll-area/types.ts +11 -0
- package/src/ui/scroll-area/variants.ts +44 -0
- package/dist/chunk-4XVNQ7IY.mjs.map +0 -1
- package/dist/chunk-4ZKBLVQX.js.map +0 -1
- package/dist/chunk-6QQUQLPB.js +0 -107
- package/dist/chunk-6QQUQLPB.js.map +0 -1
- package/dist/chunk-ACGVDY5J.mjs.map +0 -1
- package/dist/chunk-BC6M42HQ.mjs.map +0 -1
- package/dist/chunk-BTJYXKCW.js.map +0 -1
- package/dist/chunk-CL55KGDF.js.map +0 -1
- package/dist/chunk-EDARAO7X.js.map +0 -1
- package/dist/chunk-EN4VLNBF.js +0 -197
- package/dist/chunk-EN4VLNBF.js.map +0 -1
- package/dist/chunk-FHLZH3PB.mjs.map +0 -1
- package/dist/chunk-HCGSEPOD.mjs.map +0 -1
- package/dist/chunk-HMNIH3KJ.mjs.map +0 -1
- package/dist/chunk-ITVMSCOJ.mjs.map +0 -1
- package/dist/chunk-K6IZANTI.mjs +0 -80
- package/dist/chunk-K6IZANTI.mjs.map +0 -1
- package/dist/chunk-K7TCW5PJ.js.map +0 -1
- package/dist/chunk-KEKMMNL5.mjs.map +0 -1
- package/dist/chunk-KTGV76M3.mjs.map +0 -1
- package/dist/chunk-MTTXLC2V.mjs +0 -100
- package/dist/chunk-MTTXLC2V.mjs.map +0 -1
- package/dist/chunk-NHQ3S4Y6.mjs.map +0 -1
- package/dist/chunk-NZDHSIIC.js.map +0 -1
- package/dist/chunk-OZMSE44N.mjs.map +0 -1
- package/dist/chunk-P5WLYJ2C.mjs.map +0 -1
- package/dist/chunk-PHEUJ4EF.js +0 -84
- package/dist/chunk-PHEUJ4EF.js.map +0 -1
- package/dist/chunk-PMWRJ2KS.mjs +0 -192
- package/dist/chunk-PMWRJ2KS.mjs.map +0 -1
- package/dist/chunk-PR4QXFJT.js.map +0 -1
- package/dist/chunk-QAJOE3HJ.js.map +0 -1
- package/dist/chunk-QBPVJH4P.mjs.map +0 -1
- package/dist/chunk-QSPXPU72.js.map +0 -1
- package/dist/chunk-QXHS3HHZ.mjs.map +0 -1
- package/dist/chunk-QYLTKBH7.js.map +0 -1
- package/dist/chunk-WPXQHWPV.js.map +0 -1
- package/dist/chunk-YAO62VH2.js.map +0 -1
- package/dist/chunk-ZYKJC5HH.js.map +0 -1
package/dist/ui/slider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/design-system/slider.ts","../../src/ui/slider/variants.ts","../../src/ui/slider/slider.tsx"],"names":["cva","createContext","useContext","useRef","useState","useCallback","useMemo","jsx","cn","lo","hi","jsxs"],"mappings":"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","file":"slider.js","sourcesContent":["export const zuiSliderRootBase = \"w-full select-none touch-none\";\n\nexport const zuiSliderRootSizes = {\n sm: \"py-2\",\n md: \"py-2.5\",\n lg: \"py-3\",\n} as const;\n\nexport const zuiSliderTrackBase =\n \"relative h-2 w-full shrink-0 overflow-hidden rounded-full bg-[var(--zui-slider-track-bg,#0000001a)] dark:bg-[var(--zui-slider-track-bg-dark,#ffffff1a)]\";\n\nexport const zuiSliderTrackSizes = {\n sm: \"h-1.5\",\n md: \"h-2\",\n lg: \"h-2.5\",\n} as const;\n\nexport const zuiSliderRangeBase =\n \"absolute h-full rounded-full bg-linear-to-r from-[var(--zui-slider-range-from,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-to-dark,oklch(67.3%_0.182_276.935))]\";\n\nexport const zuiSliderRangeAppearances = {\n default:\n \"from-[var(--zui-slider-range-default-from,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-default-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-default-to-dark,oklch(67.3%_0.182_276.935))]\",\n sky: \"from-[var(--zui-slider-range-sky-from,oklch(68.5%_0.169_237.323))] to-[var(--zui-slider-range-sky-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-sky-to-dark,oklch(67.3%_0.182_276.935))]\",\n rose: \"from-[var(--zui-slider-range-rose-from,oklch(64.5%_0.246_16.439))] to-[var(--zui-slider-range-rose-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-rose-to-dark,oklch(67.3%_0.182_276.935))]\",\n purple:\n \"from-[var(--zui-slider-range-purple-from,oklch(62.7%_0.265_303.9))] to-[var(--zui-slider-range-purple-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-purple-to-dark,oklch(67.3%_0.182_276.935))]\",\n pink: \"from-[var(--zui-slider-range-pink-from,oklch(65.6%_0.241_354.308))] to-[var(--zui-slider-range-pink-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-pink-to-dark,oklch(67.3%_0.182_276.935))]\",\n orange:\n \"from-[var(--zui-slider-range-orange-from,oklch(70.5%_0.213_47.604))] to-[var(--zui-slider-range-orange-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-orange-to-dark,oklch(67.3%_0.182_276.935))]\",\n yellow:\n \"from-[var(--zui-slider-range-yellow-from,oklch(79.5%_0.184_86.047))] to-[var(--zui-slider-range-yellow-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-yellow-to-dark,oklch(67.3%_0.182_276.935))]\",\n teal: \"from-[var(--zui-slider-range-teal-from,oklch(70.4%_0.14_182.503))] to-[var(--zui-slider-range-teal-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-teal-to-dark,oklch(67.3%_0.182_276.935))]\",\n indigo:\n \"from-[var(--zui-slider-range-indigo-from,oklch(58.5%_0.233_277.117))] to-[var(--zui-slider-range-indigo-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-indigo-to-dark,oklch(67.3%_0.182_276.935))]\",\n emerald:\n \"from-[var(--zui-slider-range-emerald-from,oklch(69.6%_0.17_162.48))] to-[var(--zui-slider-range-emerald-to,oklch(60%_0.118_184.704))] dark:to-[var(--zui-slider-range-emerald-to-dark,oklch(77.7%_0.152_181.912))]\",\n amber:\n \"from-[var(--zui-slider-range-amber-from,oklch(76.9%_0.188_70.08))] to-[var(--zui-slider-range-amber-to,oklch(64.6%_0.222_41.116))] dark:to-[var(--zui-slider-range-amber-to-dark,oklch(75%_0.183_55.934))]\",\n gray: \"from-[var(--zui-slider-range-gray-from,oklch(55.1%_0.027_264.364))] to-[var(--zui-slider-range-gray-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gray-to-dark,oklch(67.3%_0.182_276.935))]\",\n violet:\n \"from-[var(--zui-slider-range-violet-from,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-violet-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-violet-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-blue\":\n \"from-[var(--zui-slider-range-gradient-blue-from,oklch(62.3%_0.214_259.815))] to-[var(--zui-slider-range-gradient-blue-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-blue-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-green\":\n \"from-[var(--zui-slider-range-gradient-green-from,oklch(72.3%_0.219_149.579))] to-[var(--zui-slider-range-gradient-green-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-green-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-red\":\n \"from-[var(--zui-slider-range-gradient-red-from,oklch(63.7%_0.237_25.331))] to-[var(--zui-slider-range-gradient-red-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-red-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-yellow\":\n \"from-[var(--zui-slider-range-gradient-yellow-from,oklch(79.5%_0.184_86.047))] to-[var(--zui-slider-range-gradient-yellow-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-yellow-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-purple\":\n \"from-[var(--zui-slider-range-gradient-purple-from,oklch(62.7%_0.265_303.9))] to-[var(--zui-slider-range-gradient-purple-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-purple-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-teal\":\n \"from-[var(--zui-slider-range-gradient-teal-from,oklch(70.4%_0.14_182.503))] to-[var(--zui-slider-range-gradient-teal-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-teal-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-indigo\":\n \"from-[var(--zui-slider-range-gradient-indigo-from,oklch(58.5%_0.233_277.117))] to-[var(--zui-slider-range-gradient-indigo-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-indigo-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-pink\":\n \"from-[var(--zui-slider-range-gradient-pink-from,oklch(65.6%_0.241_354.308))] to-[var(--zui-slider-range-gradient-pink-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-pink-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-orange\":\n \"from-[var(--zui-slider-range-gradient-orange-from,oklch(70.5%_0.213_47.604))] to-[var(--zui-slider-range-gradient-orange-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-orange-to-dark,oklch(67.3%_0.182_276.935))]\",\n} as const;\n\nexport const zuiSliderThumbBase =\n \"block size-4 rounded-full border border-[color:var(--zui-slider-thumb-border,#00000033)] dark:border-[color:var(--zui-slider-thumb-border-dark,#ffffff33)] bg-[var(--zui-slider-thumb-bg,#000000)] dark:bg-[var(--zui-slider-thumb-bg-dark,#ffffff)] shadow-md ring-offset-2 ring-offset-[var(--zui-slider-thumb-ring-offset,oklch(98.4%_0.003_247.858))] dark:ring-offset-[var(--zui-slider-thumb-ring-offset-dark,oklch(12.9%_0.042_264.695))] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--zui-slider-thumb-ring-focus,#00000066)] dark:focus-visible:ring-[var(--zui-slider-thumb-ring-focus-dark,#ffffff66)] disabled:pointer-events-none disabled:opacity-40\";\n\nexport const zuiSliderThumbSizes = {\n sm: \"size-3.5\",\n md: \"size-4\",\n lg: \"size-5\",\n} as const;\n","import { cva } from \"class-variance-authority\";\n\nimport {\n zuiSliderRangeAppearances,\n zuiSliderRangeBase,\n zuiSliderRootBase,\n zuiSliderRootSizes,\n zuiSliderThumbBase,\n zuiSliderThumbSizes,\n zuiSliderTrackBase,\n zuiSliderTrackSizes,\n} from \"../../design-system/slider\";\n\nexport const sliderRootVariants = cva(zuiSliderRootBase, {\n variants: {\n size: zuiSliderRootSizes,\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport const sliderTrackVariants = cva(zuiSliderTrackBase, {\n variants: {\n size: zuiSliderTrackSizes,\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport const sliderRangeVariants = cva(zuiSliderRangeBase, {\n variants: {\n appearance: zuiSliderRangeAppearances,\n },\n defaultVariants: {\n appearance: \"default\",\n },\n});\n\nexport const sliderThumbVariants = cva(zuiSliderThumbBase, {\n variants: {\n size: zuiSliderThumbSizes,\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n","\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type Ref,\n type RefObject,\n} from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nimport type {\n RangeSliderProps,\n SliderCtx,\n SliderProps,\n SliderRangeProps,\n SliderThumbProps,\n SliderTrackProps,\n} from \"./types\";\nimport {\n sliderRangeVariants,\n sliderRootVariants,\n sliderThumbVariants,\n sliderTrackVariants,\n} from \"./variants\";\n\n/**\n * Restricts a numeric value to the inclusive interval [min, max].\n *\n * Values below `min` become `min`; values above `max` become `max`.\n * This is used after pointer math and keyboard deltas so the slider\n * never reports values outside the configured domain.\n *\n * Examples (min = 0, max = 100):\n * - clamp(120, 0, 100) → 100 (capped at max)\n * - clamp(-10, 0, 100) → 0 (raised to min)\n * - clamp(42, 0, 100) → 42 (unchanged)\n */\nconst clamp = (value: number, min: number, max: number) => {\n return Math.min(max, Math.max(min, value));\n};\n\n/**\n * Maps an arbitrary number to the closest value aligned with `step`\n * relative to `min` (the “anchor” of the step grid).\n *\n * How it works:\n * 1. Measure how far `value` is from `min` in “step units”:\n * (value - min) / step\n * 2. Round to the nearest whole number of steps.\n * 3. Reconstruct: min + (rounded steps) * step\n *\n * Example: min = 0, step = 10, value = 23\n * - steps = round((23 - 0) / 10) = round(2.3) = 2\n * - result = 0 + 2 * 10 = 20\n *\n * Note: This does not enforce [min, max]; pair with `clamp` when needed.\n */\nconst snapToStep = (value: number, min: number, step: number) => {\n const steps = Math.round((value - min) / step);\n return min + steps * step;\n};\n\nconst SliderContext = createContext<SliderCtx | null>(null);\n\n/**\n * Reads slider context; throws a descriptive error if a sub-part is used\n * outside `<Slider>` (helps catch invalid composition early).\n */\nconst useSliderContext = (component: string): SliderCtx => {\n const ctx = useContext(SliderContext);\n if (!ctx) {\n throw new Error(`${component} must be used within <Slider>`);\n }\n return ctx;\n};\n\n/**\n * Converts a horizontal pointer position (viewport X) into a slider value\n * in [min, max], snapped to `step`.\n *\n * Pipeline:\n * 1. Read the track’s bounding box so all math uses the same coordinate\n * space as `clientX` (viewport coordinates from pointer events).\n * 2. Compute how far along the track the pointer sits as a ratio in [0, 1]:\n * (clientX - trackLeft) / trackWidth. If width is 0, ratio is 0 to avoid\n * division by zero.\n * 3. Linearly interpolate that ratio into the value domain:\n * raw = min + ratio * (max - min).\n * 4. Clamp `raw` to [min, max], then snap to the nearest valid step so the\n * result always matches discrete thumb positions.\n *\n * Worked example: track left = 100px, width = 200px, min = 0, max = 100,\n * pointer clientX = 150px\n * - ratio = (150 - 100) / 200 = 0.25\n * - raw = 0 + 0.25 * (100 - 0) = 25\n * - After clamp + snap (e.g. step 1), result stays 25\n */\nconst computeValueFromPointer = (\n clientX: number,\n track: HTMLDivElement,\n min: number,\n max: number,\n step: number,\n) => {\n const rect = track.getBoundingClientRect();\n\n const ratio = rect.width === 0 ? 0 : (clientX - rect.left) / rect.width;\n\n const raw = min + ratio * (max - min);\n\n return snapToStep(clamp(raw, min, max), min, step);\n};\n\n/**\n * Root primitive for a single-value slider. Provides context (bounds, value,\n * disabled state, track ref) to `SliderTrack`, `SliderRange`, and `SliderThumb`.\n */\nexport function Slider({\n className,\n size = \"md\",\n min = 0,\n max = 100,\n step = 1,\n value: valueProp,\n defaultValue,\n onValueChange,\n disabled = false,\n appearance = \"default\",\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n children,\n ref,\n ...rest\n}: SliderProps & { ref?: Ref<HTMLDivElement> }) {\n const trackRef = useRef<HTMLDivElement | null>(null);\n const isControlled = valueProp !== undefined;\n\n /**\n * Mode selection (React’s standard controlled/uncontrolled pattern):\n *\n * - Controlled: `value` is passed from the parent. The parent is the source\n * of truth; local state is not updated on drag. Use `onValueChange` to\n * persist updates upward (e.g. into React state or a form library).\n *\n * - Uncontrolled: `value` is omitted. `defaultValue` (or `min` if absent)\n * seeds internal state; drags and keyboard updates write to that state\n * directly. `onValueChange` is still optional for side effects.\n *\n * Examples:\n * - Controlled: `<Slider value={50} onValueChange={setX} />`\n * - Uncontrolled: `<Slider defaultValue={50} />`\n */\n\n const [uncontrolled, setUncontrolled] = useState(defaultValue ?? min);\n\n const value = isControlled ? (valueProp as number) : uncontrolled;\n\n const setValue = useCallback(\n (next: number) => {\n /**\n * Normalizes a candidate value before committing it:\n * 1. Snap to the nearest step anchored at `min`.\n * 2. Clamp into [min, max] so overshoots from keyboard or programmatic\n * calls cannot escape the domain.\n * 3. If uncontrolled, mirror the result into local state so the thumb\n * and range visuals stay in sync.\n * 4. Always invoke `onValueChange` when provided so parents receive the\n * canonical value (even in controlled mode, after normalization).\n *\n * Example: min = 0, max = 100, step = 10, next = 27\n * → snap to 30 → clamp still 30 → emitted value 30\n */\n\n const clamped = clamp(snapToStep(next, min, step), min, max);\n\n if (!isControlled) {\n setUncontrolled(clamped);\n }\n\n onValueChange?.(clamped);\n },\n [isControlled, max, min, onValueChange, step],\n );\n\n const ctx = useMemo(\n () => ({\n min,\n max,\n step,\n\n /**\n * Context consumers always see a value that is on-step and in-range.\n * If a controlled parent passes an out-of-band number (e.g. stale props\n * or a bug), we still render thumbs and ARIA attributes consistently\n * with the same snap/clamp rules as pointer and keyboard input.\n */\n value: clamp(snapToStep(value, min, step), min, max),\n\n setValue,\n disabled,\n size: size ?? \"md\",\n appearance: appearance ?? \"default\",\n trackRef,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n }),\n [\n appearance,\n ariaLabel,\n ariaLabelledBy,\n disabled,\n max,\n min,\n setValue,\n size,\n step,\n value,\n ],\n );\n\n return (\n <SliderContext.Provider value={ctx}>\n <div\n ref={ref}\n data-slot=\"slider\"\n role=\"group\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={cn(sliderRootVariants({ size }), className)}\n {...rest}\n >\n {children}\n </div>\n </SliderContext.Provider>\n );\n}\n\nSlider.displayName = \"Slider\";\n\n/**\n * The interactive rail whose geometry defines how pointer X maps to values.\n * Assigns the DOM node to context `trackRef` so thumbs can measure it.\n */\nexport function SliderTrack({\n className,\n ref: refProp,\n ...rest\n}: SliderTrackProps & { ref?: Ref<HTMLDivElement> }) {\n const { size, trackRef } = useSliderContext(\"SliderTrack\");\n\n return (\n <div\n ref={(node) => {\n trackRef.current = node;\n if (typeof refProp === \"function\") {\n refProp(node);\n } else if (refProp) {\n (refProp as RefObject<HTMLDivElement | null>).current = node;\n }\n }}\n data-slot=\"slider-track\"\n className={cn(sliderTrackVariants({ size }), className)}\n {...rest}\n />\n );\n}\n\nSliderTrack.displayName = \"SliderTrack\";\n\n/** Filled portion from the start of the track up to the current value (width %). */\nexport function SliderRange({\n className,\n ref,\n ...rest\n}: SliderRangeProps & { ref?: Ref<HTMLDivElement> }) {\n const { min, max, value, appearance } = useSliderContext(\"SliderRange\");\n\n /**\n * Percentage along the track (0–100) representing the current value.\n *\n * Formula: ((value - min) / (max - min)) * 100. When min === max the range\n * is degenerate; we treat the percentage as 0 to avoid NaN.\n *\n * For the single-thumb slider, this percentage becomes the **width** of\n * the filled range segment (from the start of the track to the thumb).\n * The thumb itself uses the same mapping in `SliderThumb` for `left`.\n */\n const pct = max === min ? 0 : ((value - min) / (max - min)) * 100;\n\n return (\n <div\n ref={ref}\n data-slot=\"slider-range\"\n className={cn(sliderRangeVariants({ appearance }), className)}\n style={{ width: `${pct}%` }}\n {...rest}\n />\n );\n}\n\nSliderRange.displayName = \"SliderRange\";\n\n/**\n * Draggable thumb with ARIA `role=\"slider\"`. Handles pointer drag (via window\n * listeners) and keyboard increments consistent with `min` / `max` / `step`.\n */\nexport function SliderThumb({\n className,\n ref: refProp,\n ...rest\n}: SliderThumbProps & { ref?: Ref<HTMLDivElement> }) {\n const {\n min,\n max,\n value,\n step,\n setValue,\n disabled,\n size,\n trackRef,\n \"aria-label\": sliderAriaLabel,\n \"aria-labelledby\": sliderAriaLabelledBy,\n } = useSliderContext(\"SliderThumb\");\n /** Horizontal thumb position; same mapping as `SliderRange` width uses. */\n const pct = max === min ? 0 : ((value - min) / (max - min)) * 100;\n\n const onPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n event.preventDefault();\n\n const track = trackRef.current;\n if (!track) return;\n\n /**\n * Keep receiving pointer events for this pointer id even when the\n * cursor leaves the thumb. Without capture, dragging quickly could\n * “drop” the thumb when the pointer exits the small hit target.\n */\n event.currentTarget.setPointerCapture(event.pointerId);\n\n const move = (e: PointerEvent) => {\n /**\n * On each move, project the pointer X onto the track geometry, then\n * run the same snap/clamp pipeline as a click would. `setValue`\n * deduplicates invalid states for controlled parents.\n */\n setValue(computeValueFromPointer(e.clientX, track, min, max, step));\n };\n\n const up = () => {\n /** Tear down window listeners once the gesture ends (any button). */\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n };\n\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n },\n [disabled, max, min, setValue, step, trackRef],\n );\n\n const onKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n /**\n * Page Up / Page Down move by one tenth of the value span (not one\n * tenth of the thumb travel). This scales with custom min/max ranges.\n */\n const big = (max - min) / 10;\n\n let delta = 0;\n\n /**\n * Keyboard model (WAI-ARIA slider conventions, adapted to our step):\n * - Arrow Right / Up: increase by one `step`.\n * - Arrow Left / Down: decrease by one `step`.\n * - Page Up / Down: coarse adjust by `big` (±10% of range).\n * - Home / End: jump to min or max (bypasses incremental delta).\n * Unrecognized keys are ignored without calling `preventDefault`.\n */\n if (event.key === \"ArrowRight\" || event.key === \"ArrowUp\") {\n delta = step;\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowDown\") {\n delta = -step;\n } else if (event.key === \"PageUp\") {\n delta = big;\n } else if (event.key === \"PageDown\") {\n delta = -big;\n } else if (event.key === \"Home\") {\n event.preventDefault();\n setValue(min);\n return;\n } else if (event.key === \"End\") {\n event.preventDefault();\n setValue(max);\n return;\n } else {\n return;\n }\n\n event.preventDefault();\n\n /**\n * Apply the accumulated delta on top of the current value; `setValue`\n * performs snap + clamp so the outcome is always valid.\n *\n * Illustration with min = 0, max = 100, step = 10, value = 40:\n * - ArrowRight: delta +10 → candidate 50 → stays 50\n * - ArrowLeft: delta -10 → candidate 30\n * - PageUp: delta +10 (when big = 10) → 50; PageDown → 30\n * - Home / End handled above with direct `setValue(min|max)`\n */\n setValue(value + delta);\n },\n [disabled, max, min, setValue, step, value],\n );\n\n return (\n <div\n ref={(node) => {\n if (typeof refProp === \"function\") {\n refProp(node);\n } else if (refProp) {\n (refProp as RefObject<HTMLDivElement | null>).current = node;\n }\n }}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n data-slot=\"slider-thumb\"\n aria-label={sliderAriaLabel}\n aria-labelledby={sliderAriaLabelledBy}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-disabled={disabled || undefined}\n className={cn(\n \"absolute top-1/2 z-10 -translate-x-1/2 -translate-y-1/2\",\n sliderThumbVariants({ size }),\n className,\n )}\n style={{ left: `${pct}%` }}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n {...rest}\n />\n );\n}\n\nSliderThumb.displayName = \"SliderThumb\";\n\n/**\n * Two-thumb range control on one track. Inlines track/range for layout speed;\n * thumbs delegate drag math through `moveThumb` / `setPair` to keep ordering\n * and snapping identical to the single slider helpers.\n */\nexport function RangeSlider({\n className,\n size = \"md\",\n min = 0,\n max = 100,\n step = 1,\n value: valueProp,\n defaultValue,\n onValueChange,\n disabled = false,\n appearance = \"default\",\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ref,\n ...rest\n}: RangeSliderProps & { ref?: Ref<HTMLDivElement> }) {\n const trackRef = useRef<HTMLDivElement | null>(null);\n const isControlled = valueProp !== undefined;\n const [uncontrolled, setUncontrolled] = useState<[number, number]>(() => {\n const seed = defaultValue ?? [min, max];\n\n /**\n * Initial pair: normalize each endpoint independently so both ends sit\n * on the step grid and respect [min, max] before any ordering logic runs.\n *\n * Example: min = 0, max = 100, step = 10, seed[0] = 85\n * → snap to 80 → clamp still 80.\n */\n const lo = clamp(snapToStep(seed[0], min, step), min, max);\n const hi = clamp(snapToStep(seed[1], min, step), min, max);\n\n /**\n * Canonical order is always [lower, higher]. If the consumer passes\n * reversed defaults (e.g. [80, 20]), we swap so downstream math assumes\n * lo ≤ hi for range width and thumb assignment.\n */\n return lo <= hi ? [lo, hi] : [hi, lo];\n });\n\n const value = isControlled ? (valueProp as [number, number]) : uncontrolled;\n\n /**\n * Derive ordered endpoints for rendering and hit-testing math. Controlled\n * parents might briefly pass reversed tuples; we normalize every render so\n * `lo` is the left/low thumb and `hi` is the right/high thumb.\n */\n const [lo, hi] =\n value[0] <= value[1] ? [value[0], value[1]] : [value[1], value[0]];\n\n /**\n * Commits a new [low, high] pair: used by drags, keyboard nudges, and\n * internal clamping. Each thumb only mutates its own side, but we always\n * pass through here so both values stay snapped and ordered.\n *\n * Example: current [20, 80], dragging the low thumb\n * → calls like setPair([newLow, 80]); the high endpoint is preserved until\n * the other thumb moves.\n */\n const setPair = useCallback(\n (next: [number, number]) => {\n /**\n * Per-endpoint snap + clamp, same rules as the single slider. Handles\n * overshoot from pointer projection or programmatic updates.\n *\n * Example: min = 0, max = 100, step = 10, next = [27, 85]\n * → [30, 80] after snap/clamp (85 cannot exceed max but also snaps down).\n */\n const a = clamp(snapToStep(next[0], min, step), min, max);\n const b = clamp(snapToStep(next[1], min, step), min, max);\n\n /**\n * Re-order after independent normalization so the tuple is always\n * [smaller, larger], keeping the range bar width non-negative.\n */\n const ordered: [number, number] = a <= b ? [a, b] : [b, a];\n if (!isControlled) {\n setUncontrolled(ordered);\n }\n onValueChange?.(ordered);\n },\n [isControlled, max, min, onValueChange, step],\n );\n\n const moveThumb = useCallback(\n (index: 0 | 1, clientX: number) => {\n const track = trackRef.current;\n if (!track) return;\n\n const raw = computeValueFromPointer(clientX, track, min, max, step);\n\n /**\n * Which thumb is active is explicit (`index`), so we only replace that\n * side of the pair and keep the opposite endpoint fixed. `setPair` will\n * still snap/clamp and may collapse the range if thumbs cross (handled\n * by ordering inside `setPair`).\n *\n * index 0: low thumb → `[raw, hi]`\n * index 1: high thumb → `[lo, raw]`\n */\n if (index === 0) {\n setPair([raw, hi]);\n } else {\n setPair([lo, raw]);\n }\n },\n [hi, lo, max, min, setPair, step],\n );\n\n /**\n * Map both endpoints to percentages along the track for layout:\n * - `left` on the range fill uses `loPct` (where the selected interval starts).\n * - `width` uses `hiPct - loPct` (how wide the interval is), floored at 0\n * if the thumbs coincide.\n *\n * Example: min = 0, max = 100, lo = 20, hi = 80\n * - loPct = 20%, hiPct = 80%\n * - Range bar: left 20%, width 60%\n */\n const loPct = ((lo - min) / (max - min)) * 100;\n const hiPct = ((hi - min) / (max - min)) * 100;\n\n const resolvedSize = size ?? \"md\";\n\n const lowThumbAriaLabel =\n ariaLabel !== undefined ? `${ariaLabel}, minimum` : undefined;\n const highThumbAriaLabel =\n ariaLabel !== undefined ? `${ariaLabel}, maximum` : undefined;\n const thumbAriaLabelledBy =\n ariaLabel === undefined ? ariaLabelledBy : undefined;\n\n return (\n <div\n ref={ref}\n data-slot=\"range-slider\"\n role=\"group\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={cn(sliderRootVariants({ size: resolvedSize }), className)}\n {...rest}\n >\n <div\n ref={trackRef}\n data-slot=\"slider-track\"\n className={cn(sliderTrackVariants({ size: resolvedSize }), \"relative\")}\n >\n <div\n data-slot=\"slider-range\"\n className={cn(sliderRangeVariants({ appearance }), \"absolute\")}\n style={{\n left: `${loPct}%`,\n width: `${Math.max(hiPct - loPct, 0)}%`,\n }}\n />\n <RangeThumb\n disabled={disabled}\n size={resolvedSize}\n value={lo}\n min={min}\n max={max}\n step={step}\n positionPct={loPct}\n trackRef={trackRef}\n onMoveClientX={(x) => moveThumb(0, x)}\n onNudge={(delta) => setPair([lo + delta, hi])}\n aria-label={lowThumbAriaLabel}\n aria-labelledby={thumbAriaLabelledBy}\n />\n <RangeThumb\n disabled={disabled}\n size={resolvedSize}\n value={hi}\n min={min}\n max={max}\n step={step}\n positionPct={hiPct}\n trackRef={trackRef}\n onMoveClientX={(x) => moveThumb(1, x)}\n onNudge={(delta) => setPair([lo, hi + delta])}\n aria-label={highThumbAriaLabel}\n aria-labelledby={thumbAriaLabelledBy}\n />\n </div>\n </div>\n );\n}\n\nRangeSlider.displayName = \"RangeSlider\";\n\ntype RangeThumbProps = {\n disabled: boolean;\n size: \"sm\" | \"md\" | \"lg\";\n value: number;\n min: number;\n max: number;\n step: number;\n positionPct: number;\n trackRef: RefObject<HTMLDivElement | null>;\n /** Called on pointer move with viewport X; parent decides which bound updates. */\n onMoveClientX: (clientX: number) => void;\n /** Relative keyboard adjustment in value units; parent merges into the pair. */\n onNudge: (delta: number) => void;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n};\n\n/** Private thumb implementation shared by the low and high endpoints. */\nfunction RangeThumb({\n disabled,\n size,\n value,\n min,\n max,\n step,\n positionPct,\n trackRef,\n onMoveClientX,\n onNudge,\n \"aria-label\": thumbAriaLabel,\n \"aria-labelledby\": thumbAriaLabelledBy,\n}: RangeThumbProps) {\n const onPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) {\n return;\n }\n event.preventDefault();\n const track = trackRef.current;\n if (!track) {\n return;\n }\n /** Same capture strategy as `SliderThumb` for reliable dragging. */\n event.currentTarget.setPointerCapture(event.pointerId);\n const move = (e: PointerEvent) => {\n /** Parent maps X → new value for this thumb only. */\n onMoveClientX(e.clientX);\n };\n const up = () => {\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n };\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n },\n [disabled, onMoveClientX, trackRef],\n );\n\n const onKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (disabled) {\n return;\n }\n /**\n * Keyboard deltas mirror the single-thumb slider, but we express jumps\n * as `onNudge(min - value)` / `onNudge(max - value)` so Home/End move\n * **this** thumb to the domain edge without hardcoding sibling values.\n */\n const big = (max - min) / 10;\n let delta = 0;\n if (event.key === \"ArrowRight\" || event.key === \"ArrowUp\") {\n delta = step;\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowDown\") {\n delta = -step;\n } else if (event.key === \"PageUp\") {\n delta = big;\n } else if (event.key === \"PageDown\") {\n delta = -big;\n } else if (event.key === \"Home\") {\n event.preventDefault();\n onNudge(min - value);\n return;\n } else if (event.key === \"End\") {\n event.preventDefault();\n onNudge(max - value);\n return;\n } else {\n return;\n }\n event.preventDefault();\n onNudge(delta);\n },\n [disabled, max, min, onNudge, step, value],\n );\n\n return (\n <div\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n data-slot=\"range-slider-thumb\"\n aria-label={thumbAriaLabel}\n aria-labelledby={thumbAriaLabelledBy}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-disabled={disabled || undefined}\n className={cn(\n \"absolute top-1/2 z-10 -translate-x-1/2 -translate-y-1/2\",\n sliderThumbVariants({ size }),\n )}\n style={{ left: `${positionPct}%` }}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n />\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/design-system/slider.ts","../../src/ui/slider/variants.ts","../../src/ui/slider/slider.tsx"],"names":["cva","createContext","useContext","useRef","useState","useCallback","useMemo","jsx","cn","lo","hi","jsxs"],"mappings":"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","file":"slider.js","sourcesContent":["export const zuiSliderRootBase = \"w-full select-none touch-none\";\n\nexport const zuiSliderRootSizes = {\n sm: \"py-2\",\n md: \"py-2.5\",\n lg: \"py-3\",\n} as const;\n\nexport const zuiSliderTrackBase =\n \"relative h-2 w-full shrink-0 overflow-hidden rounded-full bg-[var(--zui-slider-track-bg,#0000001a)] dark:bg-[var(--zui-slider-track-bg-dark,#ffffff1a)]\";\n\nexport const zuiSliderTrackSizes = {\n sm: \"h-1.5\",\n md: \"h-2\",\n lg: \"h-2.5\",\n} as const;\n\nexport const zuiSliderRangeBase =\n \"absolute h-full rounded-full bg-linear-to-r from-[var(--zui-slider-range-from,oklch(60.6%_0.25_292.717))] dark:from-[var(--zui-slider-range-from-dark,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-to-dark,oklch(67.3%_0.182_276.935))]\";\n\nexport const zuiSliderRangeAppearances = {\n default:\n \"from-[var(--zui-slider-range-default-from,oklch(60.6%_0.25_292.717))] dark:from-[var(--zui-slider-range-default-from-dark,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-default-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-default-to-dark,oklch(67.3%_0.182_276.935))]\",\n sky: \"from-[var(--zui-slider-range-sky-from,oklch(68.5%_0.169_237.323))] dark:from-[var(--zui-slider-range-sky-from-dark,oklch(68.5%_0.169_237.323))] to-[var(--zui-slider-range-sky-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-sky-to-dark,oklch(67.3%_0.182_276.935))]\",\n rose: \"from-[var(--zui-slider-range-rose-from,oklch(64.5%_0.246_16.439))] dark:from-[var(--zui-slider-range-rose-from-dark,oklch(64.5%_0.246_16.439))] to-[var(--zui-slider-range-rose-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-rose-to-dark,oklch(67.3%_0.182_276.935))]\",\n purple:\n \"from-[var(--zui-slider-range-purple-from,oklch(62.7%_0.265_303.9))] dark:from-[var(--zui-slider-range-purple-from-dark,oklch(62.7%_0.265_303.9))] to-[var(--zui-slider-range-purple-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-purple-to-dark,oklch(67.3%_0.182_276.935))]\",\n pink: \"from-[var(--zui-slider-range-pink-from,oklch(65.6%_0.241_354.308))] dark:from-[var(--zui-slider-range-pink-from-dark,oklch(65.6%_0.241_354.308))] to-[var(--zui-slider-range-pink-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-pink-to-dark,oklch(67.3%_0.182_276.935))]\",\n orange:\n \"from-[var(--zui-slider-range-orange-from,oklch(70.5%_0.213_47.604))] dark:from-[var(--zui-slider-range-orange-from-dark,oklch(70.5%_0.213_47.604))] to-[var(--zui-slider-range-orange-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-orange-to-dark,oklch(67.3%_0.182_276.935))]\",\n yellow:\n \"from-[var(--zui-slider-range-yellow-from,oklch(79.5%_0.184_86.047))] dark:from-[var(--zui-slider-range-yellow-from-dark,oklch(79.5%_0.184_86.047))] to-[var(--zui-slider-range-yellow-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-yellow-to-dark,oklch(67.3%_0.182_276.935))]\",\n teal: \"from-[var(--zui-slider-range-teal-from,oklch(70.4%_0.14_182.503))] dark:from-[var(--zui-slider-range-teal-from-dark,oklch(70.4%_0.14_182.503))] to-[var(--zui-slider-range-teal-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-teal-to-dark,oklch(67.3%_0.182_276.935))]\",\n indigo:\n \"from-[var(--zui-slider-range-indigo-from,oklch(58.5%_0.233_277.117))] dark:from-[var(--zui-slider-range-indigo-from-dark,oklch(58.5%_0.233_277.117))] to-[var(--zui-slider-range-indigo-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-indigo-to-dark,oklch(67.3%_0.182_276.935))]\",\n emerald:\n \"from-[var(--zui-slider-range-emerald-from,oklch(69.6%_0.17_162.48))] dark:from-[var(--zui-slider-range-emerald-from-dark,oklch(69.6%_0.17_162.48))] to-[var(--zui-slider-range-emerald-to,oklch(60%_0.118_184.704))] dark:to-[var(--zui-slider-range-emerald-to-dark,oklch(77.7%_0.152_181.912))]\",\n amber:\n \"from-[var(--zui-slider-range-amber-from,oklch(76.9%_0.188_70.08))] dark:from-[var(--zui-slider-range-amber-from-dark,oklch(76.9%_0.188_70.08))] to-[var(--zui-slider-range-amber-to,oklch(64.6%_0.222_41.116))] dark:to-[var(--zui-slider-range-amber-to-dark,oklch(75%_0.183_55.934))]\",\n gray: \"from-[var(--zui-slider-range-gray-from,oklch(55.1%_0.027_264.364))] dark:from-[var(--zui-slider-range-gray-from-dark,oklch(55.1%_0.027_264.364))] to-[var(--zui-slider-range-gray-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gray-to-dark,oklch(67.3%_0.182_276.935))]\",\n violet:\n \"from-[var(--zui-slider-range-violet-from,oklch(60.6%_0.25_292.717))] dark:from-[var(--zui-slider-range-violet-from-dark,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-violet-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-violet-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-blue\":\n \"from-[var(--zui-slider-range-gradient-blue-from,oklch(62.3%_0.214_259.815))] dark:from-[var(--zui-slider-range-gradient-blue-from-dark,oklch(62.3%_0.214_259.815))] to-[var(--zui-slider-range-gradient-blue-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-blue-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-green\":\n \"from-[var(--zui-slider-range-gradient-green-from,oklch(72.3%_0.219_149.579))] dark:from-[var(--zui-slider-range-gradient-green-from-dark,oklch(72.3%_0.219_149.579))] to-[var(--zui-slider-range-gradient-green-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-green-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-red\":\n \"from-[var(--zui-slider-range-gradient-red-from,oklch(63.7%_0.237_25.331))] dark:from-[var(--zui-slider-range-gradient-red-from-dark,oklch(63.7%_0.237_25.331))] to-[var(--zui-slider-range-gradient-red-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-red-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-yellow\":\n \"from-[var(--zui-slider-range-gradient-yellow-from,oklch(79.5%_0.184_86.047))] dark:from-[var(--zui-slider-range-gradient-yellow-from-dark,oklch(79.5%_0.184_86.047))] to-[var(--zui-slider-range-gradient-yellow-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-yellow-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-purple\":\n \"from-[var(--zui-slider-range-gradient-purple-from,oklch(62.7%_0.265_303.9))] dark:from-[var(--zui-slider-range-gradient-purple-from-dark,oklch(62.7%_0.265_303.9))] to-[var(--zui-slider-range-gradient-purple-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-purple-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-teal\":\n \"from-[var(--zui-slider-range-gradient-teal-from,oklch(70.4%_0.14_182.503))] dark:from-[var(--zui-slider-range-gradient-teal-from-dark,oklch(70.4%_0.14_182.503))] to-[var(--zui-slider-range-gradient-teal-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-teal-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-indigo\":\n \"from-[var(--zui-slider-range-gradient-indigo-from,oklch(58.5%_0.233_277.117))] dark:from-[var(--zui-slider-range-gradient-indigo-from-dark,oklch(58.5%_0.233_277.117))] to-[var(--zui-slider-range-gradient-indigo-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-indigo-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-pink\":\n \"from-[var(--zui-slider-range-gradient-pink-from,oklch(65.6%_0.241_354.308))] dark:from-[var(--zui-slider-range-gradient-pink-from-dark,oklch(65.6%_0.241_354.308))] to-[var(--zui-slider-range-gradient-pink-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-pink-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-orange\":\n \"from-[var(--zui-slider-range-gradient-orange-from,oklch(70.5%_0.213_47.604))] dark:from-[var(--zui-slider-range-gradient-orange-from-dark,oklch(70.5%_0.213_47.604))] to-[var(--zui-slider-range-gradient-orange-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-orange-to-dark,oklch(67.3%_0.182_276.935))]\",\n} as const;\n\nexport const zuiSliderThumbBase =\n \"block size-4 rounded-full border border-[color:var(--zui-slider-thumb-border,#00000033)] dark:border-[color:var(--zui-slider-thumb-border-dark,#ffffff33)] bg-[var(--zui-slider-thumb-bg,#000000)] dark:bg-[var(--zui-slider-thumb-bg-dark,#ffffff)] shadow-md ring-offset-2 ring-offset-[var(--zui-slider-thumb-ring-offset,oklch(98.4%_0.003_247.858))] dark:ring-offset-[var(--zui-slider-thumb-ring-offset-dark,oklch(12.9%_0.042_264.695))] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--zui-slider-thumb-ring-focus,#00000066)] dark:focus-visible:ring-[var(--zui-slider-thumb-ring-focus-dark,#ffffff66)] disabled:pointer-events-none disabled:opacity-40\";\n\nexport const zuiSliderThumbSizes = {\n sm: \"size-3.5\",\n md: \"size-4\",\n lg: \"size-5\",\n} as const;\n","import { cva } from \"class-variance-authority\";\n\nimport {\n zuiSliderRangeAppearances,\n zuiSliderRangeBase,\n zuiSliderRootBase,\n zuiSliderRootSizes,\n zuiSliderThumbBase,\n zuiSliderThumbSizes,\n zuiSliderTrackBase,\n zuiSliderTrackSizes,\n} from \"../../design-system/slider\";\n\nexport const sliderRootVariants = cva(zuiSliderRootBase, {\n variants: {\n size: zuiSliderRootSizes,\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport const sliderTrackVariants = cva(zuiSliderTrackBase, {\n variants: {\n size: zuiSliderTrackSizes,\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport const sliderRangeVariants = cva(zuiSliderRangeBase, {\n variants: {\n appearance: zuiSliderRangeAppearances,\n },\n defaultVariants: {\n appearance: \"default\",\n },\n});\n\nexport const sliderThumbVariants = cva(zuiSliderThumbBase, {\n variants: {\n size: zuiSliderThumbSizes,\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n","\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type Ref,\n type RefObject,\n} from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nimport type {\n RangeSliderProps,\n SliderCtx,\n SliderProps,\n SliderRangeProps,\n SliderThumbProps,\n SliderTrackProps,\n} from \"./types\";\nimport {\n sliderRangeVariants,\n sliderRootVariants,\n sliderThumbVariants,\n sliderTrackVariants,\n} from \"./variants\";\n\n/**\n * Restricts a numeric value to the inclusive interval [min, max].\n *\n * Values below `min` become `min`; values above `max` become `max`.\n * This is used after pointer math and keyboard deltas so the slider\n * never reports values outside the configured domain.\n *\n * Examples (min = 0, max = 100):\n * - clamp(120, 0, 100) → 100 (capped at max)\n * - clamp(-10, 0, 100) → 0 (raised to min)\n * - clamp(42, 0, 100) → 42 (unchanged)\n */\nconst clamp = (value: number, min: number, max: number) => {\n return Math.min(max, Math.max(min, value));\n};\n\n/**\n * Maps an arbitrary number to the closest value aligned with `step`\n * relative to `min` (the “anchor” of the step grid).\n *\n * How it works:\n * 1. Measure how far `value` is from `min` in “step units”:\n * (value - min) / step\n * 2. Round to the nearest whole number of steps.\n * 3. Reconstruct: min + (rounded steps) * step\n *\n * Example: min = 0, step = 10, value = 23\n * - steps = round((23 - 0) / 10) = round(2.3) = 2\n * - result = 0 + 2 * 10 = 20\n *\n * Note: This does not enforce [min, max]; pair with `clamp` when needed.\n */\nconst snapToStep = (value: number, min: number, step: number) => {\n const steps = Math.round((value - min) / step);\n return min + steps * step;\n};\n\nconst SliderContext = createContext<SliderCtx | null>(null);\n\n/**\n * Reads slider context; throws a descriptive error if a sub-part is used\n * outside `<Slider>` (helps catch invalid composition early).\n */\nconst useSliderContext = (component: string): SliderCtx => {\n const ctx = useContext(SliderContext);\n if (!ctx) {\n throw new Error(`${component} must be used within <Slider>`);\n }\n return ctx;\n};\n\n/**\n * Converts a horizontal pointer position (viewport X) into a slider value\n * in [min, max], snapped to `step`.\n *\n * Pipeline:\n * 1. Read the track’s bounding box so all math uses the same coordinate\n * space as `clientX` (viewport coordinates from pointer events).\n * 2. Compute how far along the track the pointer sits as a ratio in [0, 1]:\n * (clientX - trackLeft) / trackWidth. If width is 0, ratio is 0 to avoid\n * division by zero.\n * 3. Linearly interpolate that ratio into the value domain:\n * raw = min + ratio * (max - min).\n * 4. Clamp `raw` to [min, max], then snap to the nearest valid step so the\n * result always matches discrete thumb positions.\n *\n * Worked example: track left = 100px, width = 200px, min = 0, max = 100,\n * pointer clientX = 150px\n * - ratio = (150 - 100) / 200 = 0.25\n * - raw = 0 + 0.25 * (100 - 0) = 25\n * - After clamp + snap (e.g. step 1), result stays 25\n */\nconst computeValueFromPointer = (\n clientX: number,\n track: HTMLDivElement,\n min: number,\n max: number,\n step: number,\n) => {\n const rect = track.getBoundingClientRect();\n\n const ratio = rect.width === 0 ? 0 : (clientX - rect.left) / rect.width;\n\n const raw = min + ratio * (max - min);\n\n return snapToStep(clamp(raw, min, max), min, step);\n};\n\n/**\n * Root primitive for a single-value slider. Provides context (bounds, value,\n * disabled state, track ref) to `SliderTrack`, `SliderRange`, and `SliderThumb`.\n */\nexport function Slider({\n className,\n size = \"md\",\n min = 0,\n max = 100,\n step = 1,\n value: valueProp,\n defaultValue,\n onValueChange,\n disabled = false,\n appearance = \"default\",\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n children,\n ref,\n ...rest\n}: SliderProps & { ref?: Ref<HTMLDivElement> }) {\n const trackRef = useRef<HTMLDivElement | null>(null);\n const isControlled = valueProp !== undefined;\n\n /**\n * Mode selection (React’s standard controlled/uncontrolled pattern):\n *\n * - Controlled: `value` is passed from the parent. The parent is the source\n * of truth; local state is not updated on drag. Use `onValueChange` to\n * persist updates upward (e.g. into React state or a form library).\n *\n * - Uncontrolled: `value` is omitted. `defaultValue` (or `min` if absent)\n * seeds internal state; drags and keyboard updates write to that state\n * directly. `onValueChange` is still optional for side effects.\n *\n * Examples:\n * - Controlled: `<Slider value={50} onValueChange={setX} />`\n * - Uncontrolled: `<Slider defaultValue={50} />`\n */\n\n const [uncontrolled, setUncontrolled] = useState(defaultValue ?? min);\n\n const value = isControlled ? (valueProp as number) : uncontrolled;\n\n const setValue = useCallback(\n (next: number) => {\n /**\n * Normalizes a candidate value before committing it:\n * 1. Snap to the nearest step anchored at `min`.\n * 2. Clamp into [min, max] so overshoots from keyboard or programmatic\n * calls cannot escape the domain.\n * 3. If uncontrolled, mirror the result into local state so the thumb\n * and range visuals stay in sync.\n * 4. Always invoke `onValueChange` when provided so parents receive the\n * canonical value (even in controlled mode, after normalization).\n *\n * Example: min = 0, max = 100, step = 10, next = 27\n * → snap to 30 → clamp still 30 → emitted value 30\n */\n\n const clamped = clamp(snapToStep(next, min, step), min, max);\n\n if (!isControlled) {\n setUncontrolled(clamped);\n }\n\n onValueChange?.(clamped);\n },\n [isControlled, max, min, onValueChange, step],\n );\n\n const ctx = useMemo(\n () => ({\n min,\n max,\n step,\n\n /**\n * Context consumers always see a value that is on-step and in-range.\n * If a controlled parent passes an out-of-band number (e.g. stale props\n * or a bug), we still render thumbs and ARIA attributes consistently\n * with the same snap/clamp rules as pointer and keyboard input.\n */\n value: clamp(snapToStep(value, min, step), min, max),\n\n setValue,\n disabled,\n size: size ?? \"md\",\n appearance: appearance ?? \"default\",\n trackRef,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n }),\n [\n appearance,\n ariaLabel,\n ariaLabelledBy,\n disabled,\n max,\n min,\n setValue,\n size,\n step,\n value,\n ],\n );\n\n return (\n <SliderContext.Provider value={ctx}>\n <div\n ref={ref}\n data-slot=\"slider\"\n role=\"group\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={cn(sliderRootVariants({ size }), className)}\n {...rest}\n >\n {children}\n </div>\n </SliderContext.Provider>\n );\n}\n\nSlider.displayName = \"Slider\";\n\n/**\n * The interactive rail whose geometry defines how pointer X maps to values.\n * Assigns the DOM node to context `trackRef` so thumbs can measure it.\n */\nexport function SliderTrack({\n className,\n ref: refProp,\n ...rest\n}: SliderTrackProps & { ref?: Ref<HTMLDivElement> }) {\n const { size, trackRef } = useSliderContext(\"SliderTrack\");\n\n return (\n <div\n ref={(node) => {\n trackRef.current = node;\n if (typeof refProp === \"function\") {\n refProp(node);\n } else if (refProp) {\n (refProp as RefObject<HTMLDivElement | null>).current = node;\n }\n }}\n data-slot=\"slider-track\"\n className={cn(sliderTrackVariants({ size }), className)}\n {...rest}\n />\n );\n}\n\nSliderTrack.displayName = \"SliderTrack\";\n\n/** Filled portion from the start of the track up to the current value (width %). */\nexport function SliderRange({\n className,\n ref,\n ...rest\n}: SliderRangeProps & { ref?: Ref<HTMLDivElement> }) {\n const { min, max, value, appearance } = useSliderContext(\"SliderRange\");\n\n /**\n * Percentage along the track (0–100) representing the current value.\n *\n * Formula: ((value - min) / (max - min)) * 100. When min === max the range\n * is degenerate; we treat the percentage as 0 to avoid NaN.\n *\n * For the single-thumb slider, this percentage becomes the **width** of\n * the filled range segment (from the start of the track to the thumb).\n * The thumb itself uses the same mapping in `SliderThumb` for `left`.\n */\n const pct = max === min ? 0 : ((value - min) / (max - min)) * 100;\n\n return (\n <div\n ref={ref}\n data-slot=\"slider-range\"\n className={cn(sliderRangeVariants({ appearance }), className)}\n style={{ width: `${pct}%` }}\n {...rest}\n />\n );\n}\n\nSliderRange.displayName = \"SliderRange\";\n\n/**\n * Draggable thumb with ARIA `role=\"slider\"`. Handles pointer drag (via window\n * listeners) and keyboard increments consistent with `min` / `max` / `step`.\n */\nexport function SliderThumb({\n className,\n ref: refProp,\n ...rest\n}: SliderThumbProps & { ref?: Ref<HTMLDivElement> }) {\n const {\n min,\n max,\n value,\n step,\n setValue,\n disabled,\n size,\n trackRef,\n \"aria-label\": sliderAriaLabel,\n \"aria-labelledby\": sliderAriaLabelledBy,\n } = useSliderContext(\"SliderThumb\");\n /** Horizontal thumb position; same mapping as `SliderRange` width uses. */\n const pct = max === min ? 0 : ((value - min) / (max - min)) * 100;\n\n const onPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n event.preventDefault();\n\n const track = trackRef.current;\n if (!track) return;\n\n /**\n * Keep receiving pointer events for this pointer id even when the\n * cursor leaves the thumb. Without capture, dragging quickly could\n * “drop” the thumb when the pointer exits the small hit target.\n */\n event.currentTarget.setPointerCapture(event.pointerId);\n\n const move = (e: PointerEvent) => {\n /**\n * On each move, project the pointer X onto the track geometry, then\n * run the same snap/clamp pipeline as a click would. `setValue`\n * deduplicates invalid states for controlled parents.\n */\n setValue(computeValueFromPointer(e.clientX, track, min, max, step));\n };\n\n const up = () => {\n /** Tear down window listeners once the gesture ends (any button). */\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n };\n\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n },\n [disabled, max, min, setValue, step, trackRef],\n );\n\n const onKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n /**\n * Page Up / Page Down move by one tenth of the value span (not one\n * tenth of the thumb travel). This scales with custom min/max ranges.\n */\n const big = (max - min) / 10;\n\n let delta = 0;\n\n /**\n * Keyboard model (WAI-ARIA slider conventions, adapted to our step):\n * - Arrow Right / Up: increase by one `step`.\n * - Arrow Left / Down: decrease by one `step`.\n * - Page Up / Down: coarse adjust by `big` (±10% of range).\n * - Home / End: jump to min or max (bypasses incremental delta).\n * Unrecognized keys are ignored without calling `preventDefault`.\n */\n if (event.key === \"ArrowRight\" || event.key === \"ArrowUp\") {\n delta = step;\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowDown\") {\n delta = -step;\n } else if (event.key === \"PageUp\") {\n delta = big;\n } else if (event.key === \"PageDown\") {\n delta = -big;\n } else if (event.key === \"Home\") {\n event.preventDefault();\n setValue(min);\n return;\n } else if (event.key === \"End\") {\n event.preventDefault();\n setValue(max);\n return;\n } else {\n return;\n }\n\n event.preventDefault();\n\n /**\n * Apply the accumulated delta on top of the current value; `setValue`\n * performs snap + clamp so the outcome is always valid.\n *\n * Illustration with min = 0, max = 100, step = 10, value = 40:\n * - ArrowRight: delta +10 → candidate 50 → stays 50\n * - ArrowLeft: delta -10 → candidate 30\n * - PageUp: delta +10 (when big = 10) → 50; PageDown → 30\n * - Home / End handled above with direct `setValue(min|max)`\n */\n setValue(value + delta);\n },\n [disabled, max, min, setValue, step, value],\n );\n\n return (\n <div\n ref={(node) => {\n if (typeof refProp === \"function\") {\n refProp(node);\n } else if (refProp) {\n (refProp as RefObject<HTMLDivElement | null>).current = node;\n }\n }}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n data-slot=\"slider-thumb\"\n aria-label={sliderAriaLabel}\n aria-labelledby={sliderAriaLabelledBy}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-disabled={disabled || undefined}\n className={cn(\n \"absolute top-1/2 z-10 -translate-x-1/2 -translate-y-1/2\",\n sliderThumbVariants({ size }),\n className,\n )}\n style={{ left: `${pct}%` }}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n {...rest}\n />\n );\n}\n\nSliderThumb.displayName = \"SliderThumb\";\n\n/**\n * Two-thumb range control on one track. Inlines track/range for layout speed;\n * thumbs delegate drag math through `moveThumb` / `setPair` to keep ordering\n * and snapping identical to the single slider helpers.\n */\nexport function RangeSlider({\n className,\n size = \"md\",\n min = 0,\n max = 100,\n step = 1,\n value: valueProp,\n defaultValue,\n onValueChange,\n disabled = false,\n appearance = \"default\",\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ref,\n ...rest\n}: RangeSliderProps & { ref?: Ref<HTMLDivElement> }) {\n const trackRef = useRef<HTMLDivElement | null>(null);\n const isControlled = valueProp !== undefined;\n const [uncontrolled, setUncontrolled] = useState<[number, number]>(() => {\n const seed = defaultValue ?? [min, max];\n\n /**\n * Initial pair: normalize each endpoint independently so both ends sit\n * on the step grid and respect [min, max] before any ordering logic runs.\n *\n * Example: min = 0, max = 100, step = 10, seed[0] = 85\n * → snap to 80 → clamp still 80.\n */\n const lo = clamp(snapToStep(seed[0], min, step), min, max);\n const hi = clamp(snapToStep(seed[1], min, step), min, max);\n\n /**\n * Canonical order is always [lower, higher]. If the consumer passes\n * reversed defaults (e.g. [80, 20]), we swap so downstream math assumes\n * lo ≤ hi for range width and thumb assignment.\n */\n return lo <= hi ? [lo, hi] : [hi, lo];\n });\n\n const value = isControlled ? (valueProp as [number, number]) : uncontrolled;\n\n /**\n * Derive ordered endpoints for rendering and hit-testing math. Controlled\n * parents might briefly pass reversed tuples; we normalize every render so\n * `lo` is the left/low thumb and `hi` is the right/high thumb.\n */\n const [lo, hi] =\n value[0] <= value[1] ? [value[0], value[1]] : [value[1], value[0]];\n\n /**\n * Commits a new [low, high] pair: used by drags, keyboard nudges, and\n * internal clamping. Each thumb only mutates its own side, but we always\n * pass through here so both values stay snapped and ordered.\n *\n * Example: current [20, 80], dragging the low thumb\n * → calls like setPair([newLow, 80]); the high endpoint is preserved until\n * the other thumb moves.\n */\n const setPair = useCallback(\n (next: [number, number]) => {\n /**\n * Per-endpoint snap + clamp, same rules as the single slider. Handles\n * overshoot from pointer projection or programmatic updates.\n *\n * Example: min = 0, max = 100, step = 10, next = [27, 85]\n * → [30, 80] after snap/clamp (85 cannot exceed max but also snaps down).\n */\n const a = clamp(snapToStep(next[0], min, step), min, max);\n const b = clamp(snapToStep(next[1], min, step), min, max);\n\n /**\n * Re-order after independent normalization so the tuple is always\n * [smaller, larger], keeping the range bar width non-negative.\n */\n const ordered: [number, number] = a <= b ? [a, b] : [b, a];\n if (!isControlled) {\n setUncontrolled(ordered);\n }\n onValueChange?.(ordered);\n },\n [isControlled, max, min, onValueChange, step],\n );\n\n const moveThumb = useCallback(\n (index: 0 | 1, clientX: number) => {\n const track = trackRef.current;\n if (!track) return;\n\n const raw = computeValueFromPointer(clientX, track, min, max, step);\n\n /**\n * Which thumb is active is explicit (`index`), so we only replace that\n * side of the pair and keep the opposite endpoint fixed. `setPair` will\n * still snap/clamp and may collapse the range if thumbs cross (handled\n * by ordering inside `setPair`).\n *\n * index 0: low thumb → `[raw, hi]`\n * index 1: high thumb → `[lo, raw]`\n */\n if (index === 0) {\n setPair([raw, hi]);\n } else {\n setPair([lo, raw]);\n }\n },\n [hi, lo, max, min, setPair, step],\n );\n\n /**\n * Map both endpoints to percentages along the track for layout:\n * - `left` on the range fill uses `loPct` (where the selected interval starts).\n * - `width` uses `hiPct - loPct` (how wide the interval is), floored at 0\n * if the thumbs coincide.\n *\n * Example: min = 0, max = 100, lo = 20, hi = 80\n * - loPct = 20%, hiPct = 80%\n * - Range bar: left 20%, width 60%\n */\n const loPct = ((lo - min) / (max - min)) * 100;\n const hiPct = ((hi - min) / (max - min)) * 100;\n\n const resolvedSize = size ?? \"md\";\n\n const lowThumbAriaLabel =\n ariaLabel !== undefined ? `${ariaLabel}, minimum` : undefined;\n const highThumbAriaLabel =\n ariaLabel !== undefined ? `${ariaLabel}, maximum` : undefined;\n const thumbAriaLabelledBy =\n ariaLabel === undefined ? ariaLabelledBy : undefined;\n\n return (\n <div\n ref={ref}\n data-slot=\"range-slider\"\n role=\"group\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={cn(sliderRootVariants({ size: resolvedSize }), className)}\n {...rest}\n >\n <div\n ref={trackRef}\n data-slot=\"slider-track\"\n className={cn(sliderTrackVariants({ size: resolvedSize }), \"relative\")}\n >\n <div\n data-slot=\"slider-range\"\n className={cn(sliderRangeVariants({ appearance }), \"absolute\")}\n style={{\n left: `${loPct}%`,\n width: `${Math.max(hiPct - loPct, 0)}%`,\n }}\n />\n <RangeThumb\n disabled={disabled}\n size={resolvedSize}\n value={lo}\n min={min}\n max={max}\n step={step}\n positionPct={loPct}\n trackRef={trackRef}\n onMoveClientX={(x) => moveThumb(0, x)}\n onNudge={(delta) => setPair([lo + delta, hi])}\n aria-label={lowThumbAriaLabel}\n aria-labelledby={thumbAriaLabelledBy}\n />\n <RangeThumb\n disabled={disabled}\n size={resolvedSize}\n value={hi}\n min={min}\n max={max}\n step={step}\n positionPct={hiPct}\n trackRef={trackRef}\n onMoveClientX={(x) => moveThumb(1, x)}\n onNudge={(delta) => setPair([lo, hi + delta])}\n aria-label={highThumbAriaLabel}\n aria-labelledby={thumbAriaLabelledBy}\n />\n </div>\n </div>\n );\n}\n\nRangeSlider.displayName = \"RangeSlider\";\n\ntype RangeThumbProps = {\n disabled: boolean;\n size: \"sm\" | \"md\" | \"lg\";\n value: number;\n min: number;\n max: number;\n step: number;\n positionPct: number;\n trackRef: RefObject<HTMLDivElement | null>;\n /** Called on pointer move with viewport X; parent decides which bound updates. */\n onMoveClientX: (clientX: number) => void;\n /** Relative keyboard adjustment in value units; parent merges into the pair. */\n onNudge: (delta: number) => void;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n};\n\n/** Private thumb implementation shared by the low and high endpoints. */\nfunction RangeThumb({\n disabled,\n size,\n value,\n min,\n max,\n step,\n positionPct,\n trackRef,\n onMoveClientX,\n onNudge,\n \"aria-label\": thumbAriaLabel,\n \"aria-labelledby\": thumbAriaLabelledBy,\n}: RangeThumbProps) {\n const onPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) {\n return;\n }\n event.preventDefault();\n const track = trackRef.current;\n if (!track) {\n return;\n }\n /** Same capture strategy as `SliderThumb` for reliable dragging. */\n event.currentTarget.setPointerCapture(event.pointerId);\n const move = (e: PointerEvent) => {\n /** Parent maps X → new value for this thumb only. */\n onMoveClientX(e.clientX);\n };\n const up = () => {\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n };\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n },\n [disabled, onMoveClientX, trackRef],\n );\n\n const onKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (disabled) {\n return;\n }\n /**\n * Keyboard deltas mirror the single-thumb slider, but we express jumps\n * as `onNudge(min - value)` / `onNudge(max - value)` so Home/End move\n * **this** thumb to the domain edge without hardcoding sibling values.\n */\n const big = (max - min) / 10;\n let delta = 0;\n if (event.key === \"ArrowRight\" || event.key === \"ArrowUp\") {\n delta = step;\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowDown\") {\n delta = -step;\n } else if (event.key === \"PageUp\") {\n delta = big;\n } else if (event.key === \"PageDown\") {\n delta = -big;\n } else if (event.key === \"Home\") {\n event.preventDefault();\n onNudge(min - value);\n return;\n } else if (event.key === \"End\") {\n event.preventDefault();\n onNudge(max - value);\n return;\n } else {\n return;\n }\n event.preventDefault();\n onNudge(delta);\n },\n [disabled, max, min, onNudge, step, value],\n );\n\n return (\n <div\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n data-slot=\"range-slider-thumb\"\n aria-label={thumbAriaLabel}\n aria-labelledby={thumbAriaLabelledBy}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-disabled={disabled || undefined}\n className={cn(\n \"absolute top-1/2 z-10 -translate-x-1/2 -translate-y-1/2\",\n sliderThumbVariants({ size }),\n )}\n style={{ left: `${positionPct}%` }}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n />\n );\n}\n"]}
|
package/dist/ui/slider.mjs
CHANGED
|
@@ -17,30 +17,30 @@ var zuiSliderTrackSizes = {
|
|
|
17
17
|
md: "h-2",
|
|
18
18
|
lg: "h-2.5"
|
|
19
19
|
};
|
|
20
|
-
var zuiSliderRangeBase = "absolute h-full rounded-full bg-linear-to-r from-[var(--zui-slider-range-from,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-to-dark,oklch(67.3%_0.182_276.935))]";
|
|
20
|
+
var zuiSliderRangeBase = "absolute h-full rounded-full bg-linear-to-r from-[var(--zui-slider-range-from,oklch(60.6%_0.25_292.717))] dark:from-[var(--zui-slider-range-from-dark,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-to-dark,oklch(67.3%_0.182_276.935))]";
|
|
21
21
|
var zuiSliderRangeAppearances = {
|
|
22
|
-
default: "from-[var(--zui-slider-range-default-from,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-default-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-default-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
23
|
-
sky: "from-[var(--zui-slider-range-sky-from,oklch(68.5%_0.169_237.323))] to-[var(--zui-slider-range-sky-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-sky-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
24
|
-
rose: "from-[var(--zui-slider-range-rose-from,oklch(64.5%_0.246_16.439))] to-[var(--zui-slider-range-rose-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-rose-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
25
|
-
purple: "from-[var(--zui-slider-range-purple-from,oklch(62.7%_0.265_303.9))] to-[var(--zui-slider-range-purple-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-purple-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
26
|
-
pink: "from-[var(--zui-slider-range-pink-from,oklch(65.6%_0.241_354.308))] to-[var(--zui-slider-range-pink-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-pink-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
27
|
-
orange: "from-[var(--zui-slider-range-orange-from,oklch(70.5%_0.213_47.604))] to-[var(--zui-slider-range-orange-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-orange-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
28
|
-
yellow: "from-[var(--zui-slider-range-yellow-from,oklch(79.5%_0.184_86.047))] to-[var(--zui-slider-range-yellow-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-yellow-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
29
|
-
teal: "from-[var(--zui-slider-range-teal-from,oklch(70.4%_0.14_182.503))] to-[var(--zui-slider-range-teal-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-teal-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
30
|
-
indigo: "from-[var(--zui-slider-range-indigo-from,oklch(58.5%_0.233_277.117))] to-[var(--zui-slider-range-indigo-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-indigo-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
31
|
-
emerald: "from-[var(--zui-slider-range-emerald-from,oklch(69.6%_0.17_162.48))] to-[var(--zui-slider-range-emerald-to,oklch(60%_0.118_184.704))] dark:to-[var(--zui-slider-range-emerald-to-dark,oklch(77.7%_0.152_181.912))]",
|
|
32
|
-
amber: "from-[var(--zui-slider-range-amber-from,oklch(76.9%_0.188_70.08))] to-[var(--zui-slider-range-amber-to,oklch(64.6%_0.222_41.116))] dark:to-[var(--zui-slider-range-amber-to-dark,oklch(75%_0.183_55.934))]",
|
|
33
|
-
gray: "from-[var(--zui-slider-range-gray-from,oklch(55.1%_0.027_264.364))] to-[var(--zui-slider-range-gray-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gray-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
34
|
-
violet: "from-[var(--zui-slider-range-violet-from,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-violet-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-violet-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
35
|
-
"gradient-blue": "from-[var(--zui-slider-range-gradient-blue-from,oklch(62.3%_0.214_259.815))] to-[var(--zui-slider-range-gradient-blue-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-blue-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
36
|
-
"gradient-green": "from-[var(--zui-slider-range-gradient-green-from,oklch(72.3%_0.219_149.579))] to-[var(--zui-slider-range-gradient-green-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-green-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
37
|
-
"gradient-red": "from-[var(--zui-slider-range-gradient-red-from,oklch(63.7%_0.237_25.331))] to-[var(--zui-slider-range-gradient-red-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-red-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
38
|
-
"gradient-yellow": "from-[var(--zui-slider-range-gradient-yellow-from,oklch(79.5%_0.184_86.047))] to-[var(--zui-slider-range-gradient-yellow-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-yellow-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
39
|
-
"gradient-purple": "from-[var(--zui-slider-range-gradient-purple-from,oklch(62.7%_0.265_303.9))] to-[var(--zui-slider-range-gradient-purple-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-purple-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
40
|
-
"gradient-teal": "from-[var(--zui-slider-range-gradient-teal-from,oklch(70.4%_0.14_182.503))] to-[var(--zui-slider-range-gradient-teal-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-teal-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
41
|
-
"gradient-indigo": "from-[var(--zui-slider-range-gradient-indigo-from,oklch(58.5%_0.233_277.117))] to-[var(--zui-slider-range-gradient-indigo-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-indigo-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
42
|
-
"gradient-pink": "from-[var(--zui-slider-range-gradient-pink-from,oklch(65.6%_0.241_354.308))] to-[var(--zui-slider-range-gradient-pink-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-pink-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
43
|
-
"gradient-orange": "from-[var(--zui-slider-range-gradient-orange-from,oklch(70.5%_0.213_47.604))] to-[var(--zui-slider-range-gradient-orange-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-orange-to-dark,oklch(67.3%_0.182_276.935))]"
|
|
22
|
+
default: "from-[var(--zui-slider-range-default-from,oklch(60.6%_0.25_292.717))] dark:from-[var(--zui-slider-range-default-from-dark,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-default-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-default-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
23
|
+
sky: "from-[var(--zui-slider-range-sky-from,oklch(68.5%_0.169_237.323))] dark:from-[var(--zui-slider-range-sky-from-dark,oklch(68.5%_0.169_237.323))] to-[var(--zui-slider-range-sky-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-sky-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
24
|
+
rose: "from-[var(--zui-slider-range-rose-from,oklch(64.5%_0.246_16.439))] dark:from-[var(--zui-slider-range-rose-from-dark,oklch(64.5%_0.246_16.439))] to-[var(--zui-slider-range-rose-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-rose-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
25
|
+
purple: "from-[var(--zui-slider-range-purple-from,oklch(62.7%_0.265_303.9))] dark:from-[var(--zui-slider-range-purple-from-dark,oklch(62.7%_0.265_303.9))] to-[var(--zui-slider-range-purple-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-purple-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
26
|
+
pink: "from-[var(--zui-slider-range-pink-from,oklch(65.6%_0.241_354.308))] dark:from-[var(--zui-slider-range-pink-from-dark,oklch(65.6%_0.241_354.308))] to-[var(--zui-slider-range-pink-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-pink-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
27
|
+
orange: "from-[var(--zui-slider-range-orange-from,oklch(70.5%_0.213_47.604))] dark:from-[var(--zui-slider-range-orange-from-dark,oklch(70.5%_0.213_47.604))] to-[var(--zui-slider-range-orange-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-orange-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
28
|
+
yellow: "from-[var(--zui-slider-range-yellow-from,oklch(79.5%_0.184_86.047))] dark:from-[var(--zui-slider-range-yellow-from-dark,oklch(79.5%_0.184_86.047))] to-[var(--zui-slider-range-yellow-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-yellow-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
29
|
+
teal: "from-[var(--zui-slider-range-teal-from,oklch(70.4%_0.14_182.503))] dark:from-[var(--zui-slider-range-teal-from-dark,oklch(70.4%_0.14_182.503))] to-[var(--zui-slider-range-teal-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-teal-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
30
|
+
indigo: "from-[var(--zui-slider-range-indigo-from,oklch(58.5%_0.233_277.117))] dark:from-[var(--zui-slider-range-indigo-from-dark,oklch(58.5%_0.233_277.117))] to-[var(--zui-slider-range-indigo-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-indigo-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
31
|
+
emerald: "from-[var(--zui-slider-range-emerald-from,oklch(69.6%_0.17_162.48))] dark:from-[var(--zui-slider-range-emerald-from-dark,oklch(69.6%_0.17_162.48))] to-[var(--zui-slider-range-emerald-to,oklch(60%_0.118_184.704))] dark:to-[var(--zui-slider-range-emerald-to-dark,oklch(77.7%_0.152_181.912))]",
|
|
32
|
+
amber: "from-[var(--zui-slider-range-amber-from,oklch(76.9%_0.188_70.08))] dark:from-[var(--zui-slider-range-amber-from-dark,oklch(76.9%_0.188_70.08))] to-[var(--zui-slider-range-amber-to,oklch(64.6%_0.222_41.116))] dark:to-[var(--zui-slider-range-amber-to-dark,oklch(75%_0.183_55.934))]",
|
|
33
|
+
gray: "from-[var(--zui-slider-range-gray-from,oklch(55.1%_0.027_264.364))] dark:from-[var(--zui-slider-range-gray-from-dark,oklch(55.1%_0.027_264.364))] to-[var(--zui-slider-range-gray-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gray-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
34
|
+
violet: "from-[var(--zui-slider-range-violet-from,oklch(60.6%_0.25_292.717))] dark:from-[var(--zui-slider-range-violet-from-dark,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-violet-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-violet-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
35
|
+
"gradient-blue": "from-[var(--zui-slider-range-gradient-blue-from,oklch(62.3%_0.214_259.815))] dark:from-[var(--zui-slider-range-gradient-blue-from-dark,oklch(62.3%_0.214_259.815))] to-[var(--zui-slider-range-gradient-blue-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-blue-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
36
|
+
"gradient-green": "from-[var(--zui-slider-range-gradient-green-from,oklch(72.3%_0.219_149.579))] dark:from-[var(--zui-slider-range-gradient-green-from-dark,oklch(72.3%_0.219_149.579))] to-[var(--zui-slider-range-gradient-green-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-green-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
37
|
+
"gradient-red": "from-[var(--zui-slider-range-gradient-red-from,oklch(63.7%_0.237_25.331))] dark:from-[var(--zui-slider-range-gradient-red-from-dark,oklch(63.7%_0.237_25.331))] to-[var(--zui-slider-range-gradient-red-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-red-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
38
|
+
"gradient-yellow": "from-[var(--zui-slider-range-gradient-yellow-from,oklch(79.5%_0.184_86.047))] dark:from-[var(--zui-slider-range-gradient-yellow-from-dark,oklch(79.5%_0.184_86.047))] to-[var(--zui-slider-range-gradient-yellow-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-yellow-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
39
|
+
"gradient-purple": "from-[var(--zui-slider-range-gradient-purple-from,oklch(62.7%_0.265_303.9))] dark:from-[var(--zui-slider-range-gradient-purple-from-dark,oklch(62.7%_0.265_303.9))] to-[var(--zui-slider-range-gradient-purple-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-purple-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
40
|
+
"gradient-teal": "from-[var(--zui-slider-range-gradient-teal-from,oklch(70.4%_0.14_182.503))] dark:from-[var(--zui-slider-range-gradient-teal-from-dark,oklch(70.4%_0.14_182.503))] to-[var(--zui-slider-range-gradient-teal-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-teal-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
41
|
+
"gradient-indigo": "from-[var(--zui-slider-range-gradient-indigo-from,oklch(58.5%_0.233_277.117))] dark:from-[var(--zui-slider-range-gradient-indigo-from-dark,oklch(58.5%_0.233_277.117))] to-[var(--zui-slider-range-gradient-indigo-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-indigo-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
42
|
+
"gradient-pink": "from-[var(--zui-slider-range-gradient-pink-from,oklch(65.6%_0.241_354.308))] dark:from-[var(--zui-slider-range-gradient-pink-from-dark,oklch(65.6%_0.241_354.308))] to-[var(--zui-slider-range-gradient-pink-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-pink-to-dark,oklch(67.3%_0.182_276.935))]",
|
|
43
|
+
"gradient-orange": "from-[var(--zui-slider-range-gradient-orange-from,oklch(70.5%_0.213_47.604))] dark:from-[var(--zui-slider-range-gradient-orange-from-dark,oklch(70.5%_0.213_47.604))] to-[var(--zui-slider-range-gradient-orange-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-orange-to-dark,oklch(67.3%_0.182_276.935))]"
|
|
44
44
|
};
|
|
45
45
|
var zuiSliderThumbBase = "block size-4 rounded-full border border-[color:var(--zui-slider-thumb-border,#00000033)] dark:border-[color:var(--zui-slider-thumb-border-dark,#ffffff33)] bg-[var(--zui-slider-thumb-bg,#000000)] dark:bg-[var(--zui-slider-thumb-bg-dark,#ffffff)] shadow-md ring-offset-2 ring-offset-[var(--zui-slider-thumb-ring-offset,oklch(98.4%_0.003_247.858))] dark:ring-offset-[var(--zui-slider-thumb-ring-offset-dark,oklch(12.9%_0.042_264.695))] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--zui-slider-thumb-ring-focus,#00000066)] dark:focus-visible:ring-[var(--zui-slider-thumb-ring-focus-dark,#ffffff66)] disabled:pointer-events-none disabled:opacity-40";
|
|
46
46
|
var zuiSliderThumbSizes = {
|
package/dist/ui/slider.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/design-system/slider.ts","../../src/ui/slider/variants.ts","../../src/ui/slider/slider.tsx"],"names":["lo","hi"],"mappings":"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","file":"slider.mjs","sourcesContent":["export const zuiSliderRootBase = \"w-full select-none touch-none\";\n\nexport const zuiSliderRootSizes = {\n sm: \"py-2\",\n md: \"py-2.5\",\n lg: \"py-3\",\n} as const;\n\nexport const zuiSliderTrackBase =\n \"relative h-2 w-full shrink-0 overflow-hidden rounded-full bg-[var(--zui-slider-track-bg,#0000001a)] dark:bg-[var(--zui-slider-track-bg-dark,#ffffff1a)]\";\n\nexport const zuiSliderTrackSizes = {\n sm: \"h-1.5\",\n md: \"h-2\",\n lg: \"h-2.5\",\n} as const;\n\nexport const zuiSliderRangeBase =\n \"absolute h-full rounded-full bg-linear-to-r from-[var(--zui-slider-range-from,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-to-dark,oklch(67.3%_0.182_276.935))]\";\n\nexport const zuiSliderRangeAppearances = {\n default:\n \"from-[var(--zui-slider-range-default-from,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-default-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-default-to-dark,oklch(67.3%_0.182_276.935))]\",\n sky: \"from-[var(--zui-slider-range-sky-from,oklch(68.5%_0.169_237.323))] to-[var(--zui-slider-range-sky-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-sky-to-dark,oklch(67.3%_0.182_276.935))]\",\n rose: \"from-[var(--zui-slider-range-rose-from,oklch(64.5%_0.246_16.439))] to-[var(--zui-slider-range-rose-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-rose-to-dark,oklch(67.3%_0.182_276.935))]\",\n purple:\n \"from-[var(--zui-slider-range-purple-from,oklch(62.7%_0.265_303.9))] to-[var(--zui-slider-range-purple-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-purple-to-dark,oklch(67.3%_0.182_276.935))]\",\n pink: \"from-[var(--zui-slider-range-pink-from,oklch(65.6%_0.241_354.308))] to-[var(--zui-slider-range-pink-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-pink-to-dark,oklch(67.3%_0.182_276.935))]\",\n orange:\n \"from-[var(--zui-slider-range-orange-from,oklch(70.5%_0.213_47.604))] to-[var(--zui-slider-range-orange-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-orange-to-dark,oklch(67.3%_0.182_276.935))]\",\n yellow:\n \"from-[var(--zui-slider-range-yellow-from,oklch(79.5%_0.184_86.047))] to-[var(--zui-slider-range-yellow-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-yellow-to-dark,oklch(67.3%_0.182_276.935))]\",\n teal: \"from-[var(--zui-slider-range-teal-from,oklch(70.4%_0.14_182.503))] to-[var(--zui-slider-range-teal-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-teal-to-dark,oklch(67.3%_0.182_276.935))]\",\n indigo:\n \"from-[var(--zui-slider-range-indigo-from,oklch(58.5%_0.233_277.117))] to-[var(--zui-slider-range-indigo-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-indigo-to-dark,oklch(67.3%_0.182_276.935))]\",\n emerald:\n \"from-[var(--zui-slider-range-emerald-from,oklch(69.6%_0.17_162.48))] to-[var(--zui-slider-range-emerald-to,oklch(60%_0.118_184.704))] dark:to-[var(--zui-slider-range-emerald-to-dark,oklch(77.7%_0.152_181.912))]\",\n amber:\n \"from-[var(--zui-slider-range-amber-from,oklch(76.9%_0.188_70.08))] to-[var(--zui-slider-range-amber-to,oklch(64.6%_0.222_41.116))] dark:to-[var(--zui-slider-range-amber-to-dark,oklch(75%_0.183_55.934))]\",\n gray: \"from-[var(--zui-slider-range-gray-from,oklch(55.1%_0.027_264.364))] to-[var(--zui-slider-range-gray-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gray-to-dark,oklch(67.3%_0.182_276.935))]\",\n violet:\n \"from-[var(--zui-slider-range-violet-from,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-violet-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-violet-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-blue\":\n \"from-[var(--zui-slider-range-gradient-blue-from,oklch(62.3%_0.214_259.815))] to-[var(--zui-slider-range-gradient-blue-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-blue-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-green\":\n \"from-[var(--zui-slider-range-gradient-green-from,oklch(72.3%_0.219_149.579))] to-[var(--zui-slider-range-gradient-green-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-green-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-red\":\n \"from-[var(--zui-slider-range-gradient-red-from,oklch(63.7%_0.237_25.331))] to-[var(--zui-slider-range-gradient-red-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-red-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-yellow\":\n \"from-[var(--zui-slider-range-gradient-yellow-from,oklch(79.5%_0.184_86.047))] to-[var(--zui-slider-range-gradient-yellow-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-yellow-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-purple\":\n \"from-[var(--zui-slider-range-gradient-purple-from,oklch(62.7%_0.265_303.9))] to-[var(--zui-slider-range-gradient-purple-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-purple-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-teal\":\n \"from-[var(--zui-slider-range-gradient-teal-from,oklch(70.4%_0.14_182.503))] to-[var(--zui-slider-range-gradient-teal-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-teal-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-indigo\":\n \"from-[var(--zui-slider-range-gradient-indigo-from,oklch(58.5%_0.233_277.117))] to-[var(--zui-slider-range-gradient-indigo-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-indigo-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-pink\":\n \"from-[var(--zui-slider-range-gradient-pink-from,oklch(65.6%_0.241_354.308))] to-[var(--zui-slider-range-gradient-pink-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-pink-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-orange\":\n \"from-[var(--zui-slider-range-gradient-orange-from,oklch(70.5%_0.213_47.604))] to-[var(--zui-slider-range-gradient-orange-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-orange-to-dark,oklch(67.3%_0.182_276.935))]\",\n} as const;\n\nexport const zuiSliderThumbBase =\n \"block size-4 rounded-full border border-[color:var(--zui-slider-thumb-border,#00000033)] dark:border-[color:var(--zui-slider-thumb-border-dark,#ffffff33)] bg-[var(--zui-slider-thumb-bg,#000000)] dark:bg-[var(--zui-slider-thumb-bg-dark,#ffffff)] shadow-md ring-offset-2 ring-offset-[var(--zui-slider-thumb-ring-offset,oklch(98.4%_0.003_247.858))] dark:ring-offset-[var(--zui-slider-thumb-ring-offset-dark,oklch(12.9%_0.042_264.695))] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--zui-slider-thumb-ring-focus,#00000066)] dark:focus-visible:ring-[var(--zui-slider-thumb-ring-focus-dark,#ffffff66)] disabled:pointer-events-none disabled:opacity-40\";\n\nexport const zuiSliderThumbSizes = {\n sm: \"size-3.5\",\n md: \"size-4\",\n lg: \"size-5\",\n} as const;\n","import { cva } from \"class-variance-authority\";\n\nimport {\n zuiSliderRangeAppearances,\n zuiSliderRangeBase,\n zuiSliderRootBase,\n zuiSliderRootSizes,\n zuiSliderThumbBase,\n zuiSliderThumbSizes,\n zuiSliderTrackBase,\n zuiSliderTrackSizes,\n} from \"../../design-system/slider\";\n\nexport const sliderRootVariants = cva(zuiSliderRootBase, {\n variants: {\n size: zuiSliderRootSizes,\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport const sliderTrackVariants = cva(zuiSliderTrackBase, {\n variants: {\n size: zuiSliderTrackSizes,\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport const sliderRangeVariants = cva(zuiSliderRangeBase, {\n variants: {\n appearance: zuiSliderRangeAppearances,\n },\n defaultVariants: {\n appearance: \"default\",\n },\n});\n\nexport const sliderThumbVariants = cva(zuiSliderThumbBase, {\n variants: {\n size: zuiSliderThumbSizes,\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n","\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type Ref,\n type RefObject,\n} from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nimport type {\n RangeSliderProps,\n SliderCtx,\n SliderProps,\n SliderRangeProps,\n SliderThumbProps,\n SliderTrackProps,\n} from \"./types\";\nimport {\n sliderRangeVariants,\n sliderRootVariants,\n sliderThumbVariants,\n sliderTrackVariants,\n} from \"./variants\";\n\n/**\n * Restricts a numeric value to the inclusive interval [min, max].\n *\n * Values below `min` become `min`; values above `max` become `max`.\n * This is used after pointer math and keyboard deltas so the slider\n * never reports values outside the configured domain.\n *\n * Examples (min = 0, max = 100):\n * - clamp(120, 0, 100) → 100 (capped at max)\n * - clamp(-10, 0, 100) → 0 (raised to min)\n * - clamp(42, 0, 100) → 42 (unchanged)\n */\nconst clamp = (value: number, min: number, max: number) => {\n return Math.min(max, Math.max(min, value));\n};\n\n/**\n * Maps an arbitrary number to the closest value aligned with `step`\n * relative to `min` (the “anchor” of the step grid).\n *\n * How it works:\n * 1. Measure how far `value` is from `min` in “step units”:\n * (value - min) / step\n * 2. Round to the nearest whole number of steps.\n * 3. Reconstruct: min + (rounded steps) * step\n *\n * Example: min = 0, step = 10, value = 23\n * - steps = round((23 - 0) / 10) = round(2.3) = 2\n * - result = 0 + 2 * 10 = 20\n *\n * Note: This does not enforce [min, max]; pair with `clamp` when needed.\n */\nconst snapToStep = (value: number, min: number, step: number) => {\n const steps = Math.round((value - min) / step);\n return min + steps * step;\n};\n\nconst SliderContext = createContext<SliderCtx | null>(null);\n\n/**\n * Reads slider context; throws a descriptive error if a sub-part is used\n * outside `<Slider>` (helps catch invalid composition early).\n */\nconst useSliderContext = (component: string): SliderCtx => {\n const ctx = useContext(SliderContext);\n if (!ctx) {\n throw new Error(`${component} must be used within <Slider>`);\n }\n return ctx;\n};\n\n/**\n * Converts a horizontal pointer position (viewport X) into a slider value\n * in [min, max], snapped to `step`.\n *\n * Pipeline:\n * 1. Read the track’s bounding box so all math uses the same coordinate\n * space as `clientX` (viewport coordinates from pointer events).\n * 2. Compute how far along the track the pointer sits as a ratio in [0, 1]:\n * (clientX - trackLeft) / trackWidth. If width is 0, ratio is 0 to avoid\n * division by zero.\n * 3. Linearly interpolate that ratio into the value domain:\n * raw = min + ratio * (max - min).\n * 4. Clamp `raw` to [min, max], then snap to the nearest valid step so the\n * result always matches discrete thumb positions.\n *\n * Worked example: track left = 100px, width = 200px, min = 0, max = 100,\n * pointer clientX = 150px\n * - ratio = (150 - 100) / 200 = 0.25\n * - raw = 0 + 0.25 * (100 - 0) = 25\n * - After clamp + snap (e.g. step 1), result stays 25\n */\nconst computeValueFromPointer = (\n clientX: number,\n track: HTMLDivElement,\n min: number,\n max: number,\n step: number,\n) => {\n const rect = track.getBoundingClientRect();\n\n const ratio = rect.width === 0 ? 0 : (clientX - rect.left) / rect.width;\n\n const raw = min + ratio * (max - min);\n\n return snapToStep(clamp(raw, min, max), min, step);\n};\n\n/**\n * Root primitive for a single-value slider. Provides context (bounds, value,\n * disabled state, track ref) to `SliderTrack`, `SliderRange`, and `SliderThumb`.\n */\nexport function Slider({\n className,\n size = \"md\",\n min = 0,\n max = 100,\n step = 1,\n value: valueProp,\n defaultValue,\n onValueChange,\n disabled = false,\n appearance = \"default\",\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n children,\n ref,\n ...rest\n}: SliderProps & { ref?: Ref<HTMLDivElement> }) {\n const trackRef = useRef<HTMLDivElement | null>(null);\n const isControlled = valueProp !== undefined;\n\n /**\n * Mode selection (React’s standard controlled/uncontrolled pattern):\n *\n * - Controlled: `value` is passed from the parent. The parent is the source\n * of truth; local state is not updated on drag. Use `onValueChange` to\n * persist updates upward (e.g. into React state or a form library).\n *\n * - Uncontrolled: `value` is omitted. `defaultValue` (or `min` if absent)\n * seeds internal state; drags and keyboard updates write to that state\n * directly. `onValueChange` is still optional for side effects.\n *\n * Examples:\n * - Controlled: `<Slider value={50} onValueChange={setX} />`\n * - Uncontrolled: `<Slider defaultValue={50} />`\n */\n\n const [uncontrolled, setUncontrolled] = useState(defaultValue ?? min);\n\n const value = isControlled ? (valueProp as number) : uncontrolled;\n\n const setValue = useCallback(\n (next: number) => {\n /**\n * Normalizes a candidate value before committing it:\n * 1. Snap to the nearest step anchored at `min`.\n * 2. Clamp into [min, max] so overshoots from keyboard or programmatic\n * calls cannot escape the domain.\n * 3. If uncontrolled, mirror the result into local state so the thumb\n * and range visuals stay in sync.\n * 4. Always invoke `onValueChange` when provided so parents receive the\n * canonical value (even in controlled mode, after normalization).\n *\n * Example: min = 0, max = 100, step = 10, next = 27\n * → snap to 30 → clamp still 30 → emitted value 30\n */\n\n const clamped = clamp(snapToStep(next, min, step), min, max);\n\n if (!isControlled) {\n setUncontrolled(clamped);\n }\n\n onValueChange?.(clamped);\n },\n [isControlled, max, min, onValueChange, step],\n );\n\n const ctx = useMemo(\n () => ({\n min,\n max,\n step,\n\n /**\n * Context consumers always see a value that is on-step and in-range.\n * If a controlled parent passes an out-of-band number (e.g. stale props\n * or a bug), we still render thumbs and ARIA attributes consistently\n * with the same snap/clamp rules as pointer and keyboard input.\n */\n value: clamp(snapToStep(value, min, step), min, max),\n\n setValue,\n disabled,\n size: size ?? \"md\",\n appearance: appearance ?? \"default\",\n trackRef,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n }),\n [\n appearance,\n ariaLabel,\n ariaLabelledBy,\n disabled,\n max,\n min,\n setValue,\n size,\n step,\n value,\n ],\n );\n\n return (\n <SliderContext.Provider value={ctx}>\n <div\n ref={ref}\n data-slot=\"slider\"\n role=\"group\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={cn(sliderRootVariants({ size }), className)}\n {...rest}\n >\n {children}\n </div>\n </SliderContext.Provider>\n );\n}\n\nSlider.displayName = \"Slider\";\n\n/**\n * The interactive rail whose geometry defines how pointer X maps to values.\n * Assigns the DOM node to context `trackRef` so thumbs can measure it.\n */\nexport function SliderTrack({\n className,\n ref: refProp,\n ...rest\n}: SliderTrackProps & { ref?: Ref<HTMLDivElement> }) {\n const { size, trackRef } = useSliderContext(\"SliderTrack\");\n\n return (\n <div\n ref={(node) => {\n trackRef.current = node;\n if (typeof refProp === \"function\") {\n refProp(node);\n } else if (refProp) {\n (refProp as RefObject<HTMLDivElement | null>).current = node;\n }\n }}\n data-slot=\"slider-track\"\n className={cn(sliderTrackVariants({ size }), className)}\n {...rest}\n />\n );\n}\n\nSliderTrack.displayName = \"SliderTrack\";\n\n/** Filled portion from the start of the track up to the current value (width %). */\nexport function SliderRange({\n className,\n ref,\n ...rest\n}: SliderRangeProps & { ref?: Ref<HTMLDivElement> }) {\n const { min, max, value, appearance } = useSliderContext(\"SliderRange\");\n\n /**\n * Percentage along the track (0–100) representing the current value.\n *\n * Formula: ((value - min) / (max - min)) * 100. When min === max the range\n * is degenerate; we treat the percentage as 0 to avoid NaN.\n *\n * For the single-thumb slider, this percentage becomes the **width** of\n * the filled range segment (from the start of the track to the thumb).\n * The thumb itself uses the same mapping in `SliderThumb` for `left`.\n */\n const pct = max === min ? 0 : ((value - min) / (max - min)) * 100;\n\n return (\n <div\n ref={ref}\n data-slot=\"slider-range\"\n className={cn(sliderRangeVariants({ appearance }), className)}\n style={{ width: `${pct}%` }}\n {...rest}\n />\n );\n}\n\nSliderRange.displayName = \"SliderRange\";\n\n/**\n * Draggable thumb with ARIA `role=\"slider\"`. Handles pointer drag (via window\n * listeners) and keyboard increments consistent with `min` / `max` / `step`.\n */\nexport function SliderThumb({\n className,\n ref: refProp,\n ...rest\n}: SliderThumbProps & { ref?: Ref<HTMLDivElement> }) {\n const {\n min,\n max,\n value,\n step,\n setValue,\n disabled,\n size,\n trackRef,\n \"aria-label\": sliderAriaLabel,\n \"aria-labelledby\": sliderAriaLabelledBy,\n } = useSliderContext(\"SliderThumb\");\n /** Horizontal thumb position; same mapping as `SliderRange` width uses. */\n const pct = max === min ? 0 : ((value - min) / (max - min)) * 100;\n\n const onPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n event.preventDefault();\n\n const track = trackRef.current;\n if (!track) return;\n\n /**\n * Keep receiving pointer events for this pointer id even when the\n * cursor leaves the thumb. Without capture, dragging quickly could\n * “drop” the thumb when the pointer exits the small hit target.\n */\n event.currentTarget.setPointerCapture(event.pointerId);\n\n const move = (e: PointerEvent) => {\n /**\n * On each move, project the pointer X onto the track geometry, then\n * run the same snap/clamp pipeline as a click would. `setValue`\n * deduplicates invalid states for controlled parents.\n */\n setValue(computeValueFromPointer(e.clientX, track, min, max, step));\n };\n\n const up = () => {\n /** Tear down window listeners once the gesture ends (any button). */\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n };\n\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n },\n [disabled, max, min, setValue, step, trackRef],\n );\n\n const onKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n /**\n * Page Up / Page Down move by one tenth of the value span (not one\n * tenth of the thumb travel). This scales with custom min/max ranges.\n */\n const big = (max - min) / 10;\n\n let delta = 0;\n\n /**\n * Keyboard model (WAI-ARIA slider conventions, adapted to our step):\n * - Arrow Right / Up: increase by one `step`.\n * - Arrow Left / Down: decrease by one `step`.\n * - Page Up / Down: coarse adjust by `big` (±10% of range).\n * - Home / End: jump to min or max (bypasses incremental delta).\n * Unrecognized keys are ignored without calling `preventDefault`.\n */\n if (event.key === \"ArrowRight\" || event.key === \"ArrowUp\") {\n delta = step;\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowDown\") {\n delta = -step;\n } else if (event.key === \"PageUp\") {\n delta = big;\n } else if (event.key === \"PageDown\") {\n delta = -big;\n } else if (event.key === \"Home\") {\n event.preventDefault();\n setValue(min);\n return;\n } else if (event.key === \"End\") {\n event.preventDefault();\n setValue(max);\n return;\n } else {\n return;\n }\n\n event.preventDefault();\n\n /**\n * Apply the accumulated delta on top of the current value; `setValue`\n * performs snap + clamp so the outcome is always valid.\n *\n * Illustration with min = 0, max = 100, step = 10, value = 40:\n * - ArrowRight: delta +10 → candidate 50 → stays 50\n * - ArrowLeft: delta -10 → candidate 30\n * - PageUp: delta +10 (when big = 10) → 50; PageDown → 30\n * - Home / End handled above with direct `setValue(min|max)`\n */\n setValue(value + delta);\n },\n [disabled, max, min, setValue, step, value],\n );\n\n return (\n <div\n ref={(node) => {\n if (typeof refProp === \"function\") {\n refProp(node);\n } else if (refProp) {\n (refProp as RefObject<HTMLDivElement | null>).current = node;\n }\n }}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n data-slot=\"slider-thumb\"\n aria-label={sliderAriaLabel}\n aria-labelledby={sliderAriaLabelledBy}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-disabled={disabled || undefined}\n className={cn(\n \"absolute top-1/2 z-10 -translate-x-1/2 -translate-y-1/2\",\n sliderThumbVariants({ size }),\n className,\n )}\n style={{ left: `${pct}%` }}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n {...rest}\n />\n );\n}\n\nSliderThumb.displayName = \"SliderThumb\";\n\n/**\n * Two-thumb range control on one track. Inlines track/range for layout speed;\n * thumbs delegate drag math through `moveThumb` / `setPair` to keep ordering\n * and snapping identical to the single slider helpers.\n */\nexport function RangeSlider({\n className,\n size = \"md\",\n min = 0,\n max = 100,\n step = 1,\n value: valueProp,\n defaultValue,\n onValueChange,\n disabled = false,\n appearance = \"default\",\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ref,\n ...rest\n}: RangeSliderProps & { ref?: Ref<HTMLDivElement> }) {\n const trackRef = useRef<HTMLDivElement | null>(null);\n const isControlled = valueProp !== undefined;\n const [uncontrolled, setUncontrolled] = useState<[number, number]>(() => {\n const seed = defaultValue ?? [min, max];\n\n /**\n * Initial pair: normalize each endpoint independently so both ends sit\n * on the step grid and respect [min, max] before any ordering logic runs.\n *\n * Example: min = 0, max = 100, step = 10, seed[0] = 85\n * → snap to 80 → clamp still 80.\n */\n const lo = clamp(snapToStep(seed[0], min, step), min, max);\n const hi = clamp(snapToStep(seed[1], min, step), min, max);\n\n /**\n * Canonical order is always [lower, higher]. If the consumer passes\n * reversed defaults (e.g. [80, 20]), we swap so downstream math assumes\n * lo ≤ hi for range width and thumb assignment.\n */\n return lo <= hi ? [lo, hi] : [hi, lo];\n });\n\n const value = isControlled ? (valueProp as [number, number]) : uncontrolled;\n\n /**\n * Derive ordered endpoints for rendering and hit-testing math. Controlled\n * parents might briefly pass reversed tuples; we normalize every render so\n * `lo` is the left/low thumb and `hi` is the right/high thumb.\n */\n const [lo, hi] =\n value[0] <= value[1] ? [value[0], value[1]] : [value[1], value[0]];\n\n /**\n * Commits a new [low, high] pair: used by drags, keyboard nudges, and\n * internal clamping. Each thumb only mutates its own side, but we always\n * pass through here so both values stay snapped and ordered.\n *\n * Example: current [20, 80], dragging the low thumb\n * → calls like setPair([newLow, 80]); the high endpoint is preserved until\n * the other thumb moves.\n */\n const setPair = useCallback(\n (next: [number, number]) => {\n /**\n * Per-endpoint snap + clamp, same rules as the single slider. Handles\n * overshoot from pointer projection or programmatic updates.\n *\n * Example: min = 0, max = 100, step = 10, next = [27, 85]\n * → [30, 80] after snap/clamp (85 cannot exceed max but also snaps down).\n */\n const a = clamp(snapToStep(next[0], min, step), min, max);\n const b = clamp(snapToStep(next[1], min, step), min, max);\n\n /**\n * Re-order after independent normalization so the tuple is always\n * [smaller, larger], keeping the range bar width non-negative.\n */\n const ordered: [number, number] = a <= b ? [a, b] : [b, a];\n if (!isControlled) {\n setUncontrolled(ordered);\n }\n onValueChange?.(ordered);\n },\n [isControlled, max, min, onValueChange, step],\n );\n\n const moveThumb = useCallback(\n (index: 0 | 1, clientX: number) => {\n const track = trackRef.current;\n if (!track) return;\n\n const raw = computeValueFromPointer(clientX, track, min, max, step);\n\n /**\n * Which thumb is active is explicit (`index`), so we only replace that\n * side of the pair and keep the opposite endpoint fixed. `setPair` will\n * still snap/clamp and may collapse the range if thumbs cross (handled\n * by ordering inside `setPair`).\n *\n * index 0: low thumb → `[raw, hi]`\n * index 1: high thumb → `[lo, raw]`\n */\n if (index === 0) {\n setPair([raw, hi]);\n } else {\n setPair([lo, raw]);\n }\n },\n [hi, lo, max, min, setPair, step],\n );\n\n /**\n * Map both endpoints to percentages along the track for layout:\n * - `left` on the range fill uses `loPct` (where the selected interval starts).\n * - `width` uses `hiPct - loPct` (how wide the interval is), floored at 0\n * if the thumbs coincide.\n *\n * Example: min = 0, max = 100, lo = 20, hi = 80\n * - loPct = 20%, hiPct = 80%\n * - Range bar: left 20%, width 60%\n */\n const loPct = ((lo - min) / (max - min)) * 100;\n const hiPct = ((hi - min) / (max - min)) * 100;\n\n const resolvedSize = size ?? \"md\";\n\n const lowThumbAriaLabel =\n ariaLabel !== undefined ? `${ariaLabel}, minimum` : undefined;\n const highThumbAriaLabel =\n ariaLabel !== undefined ? `${ariaLabel}, maximum` : undefined;\n const thumbAriaLabelledBy =\n ariaLabel === undefined ? ariaLabelledBy : undefined;\n\n return (\n <div\n ref={ref}\n data-slot=\"range-slider\"\n role=\"group\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={cn(sliderRootVariants({ size: resolvedSize }), className)}\n {...rest}\n >\n <div\n ref={trackRef}\n data-slot=\"slider-track\"\n className={cn(sliderTrackVariants({ size: resolvedSize }), \"relative\")}\n >\n <div\n data-slot=\"slider-range\"\n className={cn(sliderRangeVariants({ appearance }), \"absolute\")}\n style={{\n left: `${loPct}%`,\n width: `${Math.max(hiPct - loPct, 0)}%`,\n }}\n />\n <RangeThumb\n disabled={disabled}\n size={resolvedSize}\n value={lo}\n min={min}\n max={max}\n step={step}\n positionPct={loPct}\n trackRef={trackRef}\n onMoveClientX={(x) => moveThumb(0, x)}\n onNudge={(delta) => setPair([lo + delta, hi])}\n aria-label={lowThumbAriaLabel}\n aria-labelledby={thumbAriaLabelledBy}\n />\n <RangeThumb\n disabled={disabled}\n size={resolvedSize}\n value={hi}\n min={min}\n max={max}\n step={step}\n positionPct={hiPct}\n trackRef={trackRef}\n onMoveClientX={(x) => moveThumb(1, x)}\n onNudge={(delta) => setPair([lo, hi + delta])}\n aria-label={highThumbAriaLabel}\n aria-labelledby={thumbAriaLabelledBy}\n />\n </div>\n </div>\n );\n}\n\nRangeSlider.displayName = \"RangeSlider\";\n\ntype RangeThumbProps = {\n disabled: boolean;\n size: \"sm\" | \"md\" | \"lg\";\n value: number;\n min: number;\n max: number;\n step: number;\n positionPct: number;\n trackRef: RefObject<HTMLDivElement | null>;\n /** Called on pointer move with viewport X; parent decides which bound updates. */\n onMoveClientX: (clientX: number) => void;\n /** Relative keyboard adjustment in value units; parent merges into the pair. */\n onNudge: (delta: number) => void;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n};\n\n/** Private thumb implementation shared by the low and high endpoints. */\nfunction RangeThumb({\n disabled,\n size,\n value,\n min,\n max,\n step,\n positionPct,\n trackRef,\n onMoveClientX,\n onNudge,\n \"aria-label\": thumbAriaLabel,\n \"aria-labelledby\": thumbAriaLabelledBy,\n}: RangeThumbProps) {\n const onPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) {\n return;\n }\n event.preventDefault();\n const track = trackRef.current;\n if (!track) {\n return;\n }\n /** Same capture strategy as `SliderThumb` for reliable dragging. */\n event.currentTarget.setPointerCapture(event.pointerId);\n const move = (e: PointerEvent) => {\n /** Parent maps X → new value for this thumb only. */\n onMoveClientX(e.clientX);\n };\n const up = () => {\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n };\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n },\n [disabled, onMoveClientX, trackRef],\n );\n\n const onKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (disabled) {\n return;\n }\n /**\n * Keyboard deltas mirror the single-thumb slider, but we express jumps\n * as `onNudge(min - value)` / `onNudge(max - value)` so Home/End move\n * **this** thumb to the domain edge without hardcoding sibling values.\n */\n const big = (max - min) / 10;\n let delta = 0;\n if (event.key === \"ArrowRight\" || event.key === \"ArrowUp\") {\n delta = step;\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowDown\") {\n delta = -step;\n } else if (event.key === \"PageUp\") {\n delta = big;\n } else if (event.key === \"PageDown\") {\n delta = -big;\n } else if (event.key === \"Home\") {\n event.preventDefault();\n onNudge(min - value);\n return;\n } else if (event.key === \"End\") {\n event.preventDefault();\n onNudge(max - value);\n return;\n } else {\n return;\n }\n event.preventDefault();\n onNudge(delta);\n },\n [disabled, max, min, onNudge, step, value],\n );\n\n return (\n <div\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n data-slot=\"range-slider-thumb\"\n aria-label={thumbAriaLabel}\n aria-labelledby={thumbAriaLabelledBy}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-disabled={disabled || undefined}\n className={cn(\n \"absolute top-1/2 z-10 -translate-x-1/2 -translate-y-1/2\",\n sliderThumbVariants({ size }),\n )}\n style={{ left: `${positionPct}%` }}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n />\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/design-system/slider.ts","../../src/ui/slider/variants.ts","../../src/ui/slider/slider.tsx"],"names":["lo","hi"],"mappings":";;;;;;AAAO,IAAM,iBAAA,GAAoB,+BAAA;AAE1B,IAAM,kBAAA,GAAqB;AAAA,EAChC,EAAA,EAAI,MAAA;AAAA,EACJ,EAAA,EAAI,QAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEO,IAAM,kBAAA,GACX,yJAAA;AAEK,IAAM,mBAAA,GAAsB;AAAA,EACjC,EAAA,EAAI,OAAA;AAAA,EACJ,EAAA,EAAI,KAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEO,IAAM,kBAAA,GACX,mTAAA;AAEK,IAAM,yBAAA,GAA4B;AAAA,EACvC,OAAA,EACE,uSAAA;AAAA,EACF,GAAA,EAAK,yRAAA;AAAA,EACL,IAAA,EAAM,2RAAA;AAAA,EACN,MAAA,EACE,iSAAA;AAAA,EACF,IAAA,EAAM,6RAAA;AAAA,EACN,MAAA,EACE,mSAAA;AAAA,EACF,MAAA,EACE,mSAAA;AAAA,EACF,IAAA,EAAM,2RAAA;AAAA,EACN,MAAA,EACE,qSAAA;AAAA,EACF,OAAA,EACE,mSAAA;AAAA,EACF,KAAA,EACE,yRAAA;AAAA,EACF,IAAA,EAAM,6RAAA;AAAA,EACN,MAAA,EACE,mSAAA;AAAA,EACF,eAAA,EACE,iUAAA;AAAA,EACF,gBAAA,EACE,qUAAA;AAAA,EACF,cAAA,EACE,2TAAA;AAAA,EACF,iBAAA,EACE,uUAAA;AAAA,EACF,iBAAA,EACE,qUAAA;AAAA,EACF,eAAA,EACE,+TAAA;AAAA,EACF,iBAAA,EACE,yUAAA;AAAA,EACF,eAAA,EACE,iUAAA;AAAA,EACF,iBAAA,EACE;AACJ,CAAA;AAEO,IAAM,kBAAA,GACX,iqBAAA;AAEK,IAAM,mBAAA,GAAsB;AAAA,EACjC,EAAA,EAAI,UAAA;AAAA,EACJ,EAAA,EAAI,QAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;;;ACxDO,IAAM,kBAAA,GAAqB,IAAI,iBAAA,EAAmB;AAAA,EACvD,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,GACR;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM;AAAA;AAEV,CAAC;AAEM,IAAM,mBAAA,GAAsB,IAAI,kBAAA,EAAoB;AAAA,EACzD,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,GACR;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM;AAAA;AAEV,CAAC;AAEM,IAAM,mBAAA,GAAsB,IAAI,kBAAA,EAAoB;AAAA,EACzD,QAAA,EAAU;AAAA,IACR,UAAA,EAAY;AAAA,GACd;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,UAAA,EAAY;AAAA;AAEhB,CAAC;AAEM,IAAM,mBAAA,GAAsB,IAAI,kBAAA,EAAoB;AAAA,EACzD,QAAA,EAAU;AAAA,IACR,IAAA,EAAM;AAAA,GACR;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,IAAA,EAAM;AAAA;AAEV,CAAC;ACHD,IAAM,KAAA,GAAQ,CAAC,KAAA,EAAe,GAAA,EAAa,GAAA,KAAgB;AACzD,EAAA,OAAO,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,CAAC,CAAA;AAC3C,CAAA;AAkBA,IAAM,UAAA,GAAa,CAAC,KAAA,EAAe,GAAA,EAAa,IAAA,KAAiB;AAC/D,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAA,CAAO,KAAA,GAAQ,OAAO,IAAI,CAAA;AAC7C,EAAA,OAAO,MAAM,KAAA,GAAQ,IAAA;AACvB,CAAA;AAEA,IAAM,aAAA,GAAgB,cAAgC,IAAI,CAAA;AAM1D,IAAM,gBAAA,GAAmB,CAAC,SAAA,KAAiC;AACzD,EAAA,MAAM,GAAA,GAAM,WAAW,aAAa,CAAA;AACpC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA,6BAAA,CAA+B,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,GAAA;AACT,CAAA;AAuBA,IAAM,0BAA0B,CAC9B,OAAA,EACA,KAAA,EACA,GAAA,EACA,KACA,IAAA,KACG;AACH,EAAA,MAAM,IAAA,GAAO,MAAM,qBAAA,EAAsB;AAEzC,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,KAAU,CAAA,GAAI,KAAK,OAAA,GAAU,IAAA,CAAK,QAAQ,IAAA,CAAK,KAAA;AAElE,EAAA,MAAM,GAAA,GAAM,GAAA,GAAM,KAAA,IAAS,GAAA,GAAM,GAAA,CAAA;AAEjC,EAAA,OAAO,WAAW,KAAA,CAAM,GAAA,EAAK,KAAK,GAAG,CAAA,EAAG,KAAK,IAAI,CAAA;AACnD,CAAA;AAMO,SAAS,MAAA,CAAO;AAAA,EACrB,SAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,GAAA,GAAM,CAAA;AAAA,EACN,GAAA,GAAM,GAAA;AAAA,EACN,IAAA,GAAO,CAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA,EACP,YAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,UAAA,GAAa,SAAA;AAAA,EACb,YAAA,EAAc,SAAA;AAAA,EACd,iBAAA,EAAmB,cAAA;AAAA,EACnB,QAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgD;AAC9C,EAAA,MAAM,QAAA,GAAW,OAA8B,IAAI,CAAA;AACnD,EAAA,MAAM,eAAe,SAAA,KAAc,MAAA;AAkBnC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,QAAA,CAAS,gBAAgB,GAAG,CAAA;AAEpE,EAAA,MAAM,KAAA,GAAQ,eAAgB,SAAA,GAAuB,YAAA;AAErD,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,CAAC,IAAA,KAAiB;AAehB,MAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,IAAA,EAAM,KAAK,IAAI,CAAA,EAAG,KAAK,GAAG,CAAA;AAE3D,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,MACzB;AAEA,MAAA,aAAA,GAAgB,OAAO,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,GAAA,EAAK,GAAA,EAAK,eAAe,IAAI;AAAA,GAC9C;AAEA,EAAA,MAAM,GAAA,GAAM,OAAA;AAAA,IACV,OAAO;AAAA,MACL,GAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,KAAA,EAAO,MAAM,UAAA,CAAW,KAAA,EAAO,KAAK,IAAI,CAAA,EAAG,KAAK,GAAG,CAAA;AAAA,MAEnD,QAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAM,IAAA,IAAQ,IAAA;AAAA,MACd,YAAY,UAAA,IAAc,SAAA;AAAA,MAC1B,QAAA;AAAA,MACA,YAAA,EAAc,SAAA;AAAA,MACd,iBAAA,EAAmB;AAAA,KACrB,CAAA;AAAA,IACA;AAAA,MACE,UAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,QAAA;AAAA,MACA,GAAA;AAAA,MACA,GAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,uBACE,GAAA,CAAC,aAAA,CAAc,QAAA,EAAd,EAAuB,OAAO,GAAA,EAC7B,QAAA,kBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,QAAA;AAAA,MACV,IAAA,EAAK,OAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MACZ,iBAAA,EAAiB,cAAA;AAAA,MACjB,WAAW,EAAA,CAAG,kBAAA,CAAmB,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MACpD,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;AAMd,SAAS,WAAA,CAAY;AAAA,EAC1B,SAAA;AAAA,EACA,GAAA,EAAK,OAAA;AAAA,EACL,GAAG;AACL,CAAA,EAAqD;AACnD,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,iBAAiB,aAAa,CAAA;AAEzD,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,CAAC,IAAA,KAAS;AACb,QAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AACnB,QAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,UAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,QACd,WAAW,OAAA,EAAS;AAClB,UAAC,QAA6C,OAAA,GAAU,IAAA;AAAA,QAC1D;AAAA,MACF,CAAA;AAAA,MACA,WAAA,EAAU,cAAA;AAAA,MACV,WAAW,EAAA,CAAG,mBAAA,CAAoB,EAAE,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MACrD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;AAGnB,SAAS,WAAA,CAAY;AAAA,EAC1B,SAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqD;AACnD,EAAA,MAAM,EAAE,GAAA,EAAK,GAAA,EAAK,OAAO,UAAA,EAAW,GAAI,iBAAiB,aAAa,CAAA;AAYtE,EAAA,MAAM,MAAM,GAAA,KAAQ,GAAA,GAAM,KAAM,KAAA,GAAQ,GAAA,KAAQ,MAAM,GAAA,CAAA,GAAQ,GAAA;AAE9D,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,cAAA;AAAA,MACV,WAAW,EAAA,CAAG,mBAAA,CAAoB,EAAE,UAAA,EAAY,GAAG,SAAS,CAAA;AAAA,MAC5D,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,CAAA,CAAA,EAAI;AAAA,MACzB,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;AAMnB,SAAS,WAAA,CAAY;AAAA,EAC1B,SAAA;AAAA,EACA,GAAA,EAAK,OAAA;AAAA,EACL,GAAG;AACL,CAAA,EAAqD;AACnD,EAAA,MAAM;AAAA,IACJ,GAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA,EAAc,eAAA;AAAA,IACd,iBAAA,EAAmB;AAAA,GACrB,GAAI,iBAAiB,aAAa,CAAA;AAElC,EAAA,MAAM,MAAM,GAAA,KAAQ,GAAA,GAAM,KAAM,KAAA,GAAQ,GAAA,KAAQ,MAAM,GAAA,CAAA,GAAQ,GAAA;AAE9D,EAAA,MAAM,aAAA,GAAgB,WAAA;AAAA,IACpB,CAAC,KAAA,KAA6C;AAC5C,MAAA,IAAI,QAAA,EAAU;AAEd,MAAA,KAAA,CAAM,cAAA,EAAe;AAErB,MAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,MAAA,IAAI,CAAC,KAAA,EAAO;AAOZ,MAAA,KAAA,CAAM,aAAA,CAAc,iBAAA,CAAkB,KAAA,CAAM,SAAS,CAAA;AAErD,MAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAoB;AAMhC,QAAA,QAAA,CAAS,wBAAwB,CAAA,CAAE,OAAA,EAAS,OAAO,GAAA,EAAK,GAAA,EAAK,IAAI,CAAC,CAAA;AAAA,MACpE,CAAA;AAEA,MAAA,MAAM,KAAK,MAAM;AAEf,QAAA,MAAA,CAAO,mBAAA,CAAoB,eAAe,IAAI,CAAA;AAC9C,QAAA,MAAA,CAAO,mBAAA,CAAoB,aAAa,EAAE,CAAA;AAAA,MAC5C,CAAA;AAEA,MAAA,MAAA,CAAO,gBAAA,CAAiB,eAAe,IAAI,CAAA;AAC3C,MAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,EAAE,CAAA;AAAA,IACzC,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,GAAA,EAAK,GAAA,EAAK,QAAA,EAAU,MAAM,QAAQ;AAAA,GAC/C;AAEA,EAAA,MAAM,SAAA,GAAY,WAAA;AAAA,IAChB,CAAC,KAAA,KAA8C;AAC7C,MAAA,IAAI,QAAA,EAAU;AAMd,MAAA,MAAM,GAAA,GAAA,CAAO,MAAM,GAAA,IAAO,EAAA;AAE1B,MAAA,IAAI,KAAA,GAAQ,CAAA;AAUZ,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,YAAA,IAAgB,KAAA,CAAM,QAAQ,SAAA,EAAW;AACzD,QAAA,KAAA,GAAQ,IAAA;AAAA,MACV,WAAW,KAAA,CAAM,GAAA,KAAQ,WAAA,IAAe,KAAA,CAAM,QAAQ,WAAA,EAAa;AACjE,QAAA,KAAA,GAAQ,CAAC,IAAA;AAAA,MACX,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,QAAA,EAAU;AACjC,QAAA,KAAA,GAAQ,GAAA;AAAA,MACV,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,UAAA,EAAY;AACnC,QAAA,KAAA,GAAQ,CAAC,GAAA;AAAA,MACX,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,MAAA,EAAQ;AAC/B,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,QAAA,CAAS,GAAG,CAAA;AACZ,QAAA;AAAA,MACF,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,KAAA,EAAO;AAC9B,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,QAAA,CAAS,GAAG,CAAA;AACZ,QAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,CAAM,cAAA,EAAe;AAYrB,MAAA,QAAA,CAAS,QAAQ,KAAK,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,GAAA,EAAK,GAAA,EAAK,QAAA,EAAU,MAAM,KAAK;AAAA,GAC5C;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,CAAC,IAAA,KAAS;AACb,QAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,UAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,QACd,WAAW,OAAA,EAAS;AAClB,UAAC,QAA6C,OAAA,GAAU,IAAA;AAAA,QAC1D;AAAA,MACF,CAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,WAAW,EAAA,GAAK,CAAA;AAAA,MAC1B,WAAA,EAAU,cAAA;AAAA,MACV,YAAA,EAAY,eAAA;AAAA,MACZ,iBAAA,EAAiB,oBAAA;AAAA,MACjB,eAAA,EAAe,GAAA;AAAA,MACf,eAAA,EAAe,GAAA;AAAA,MACf,eAAA,EAAe,KAAA;AAAA,MACf,iBAAe,QAAA,IAAY,MAAA;AAAA,MAC3B,SAAA,EAAW,EAAA;AAAA,QACT,yDAAA;AAAA,QACA,mBAAA,CAAoB,EAAE,IAAA,EAAM,CAAA;AAAA,QAC5B;AAAA,OACF;AAAA,MACA,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,GAAG,CAAA,CAAA,CAAA,EAAI;AAAA,MACzB,aAAA;AAAA,MACA,SAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;AAOnB,SAAS,WAAA,CAAY;AAAA,EAC1B,SAAA;AAAA,EACA,IAAA,GAAO,IAAA;AAAA,EACP,GAAA,GAAM,CAAA;AAAA,EACN,GAAA,GAAM,GAAA;AAAA,EACN,IAAA,GAAO,CAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA,EACP,YAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,UAAA,GAAa,SAAA;AAAA,EACb,YAAA,EAAc,SAAA;AAAA,EACd,iBAAA,EAAmB,cAAA;AAAA,EACnB,GAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqD;AACnD,EAAA,MAAM,QAAA,GAAW,OAA8B,IAAI,CAAA;AACnD,EAAA,MAAM,eAAe,SAAA,KAAc,MAAA;AACnC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAA2B,MAAM;AACvE,IAAA,MAAM,IAAA,GAAO,YAAA,IAAgB,CAAC,GAAA,EAAK,GAAG,CAAA;AAStC,IAAA,MAAMA,GAAAA,GAAK,KAAA,CAAM,UAAA,CAAW,IAAA,CAAK,CAAC,GAAG,GAAA,EAAK,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA;AACzD,IAAA,MAAMC,GAAAA,GAAK,KAAA,CAAM,UAAA,CAAW,IAAA,CAAK,CAAC,GAAG,GAAA,EAAK,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA;AAOzD,IAAA,OAAOD,GAAAA,IAAMC,MAAK,CAACD,GAAAA,EAAIC,GAAE,CAAA,GAAI,CAACA,KAAID,GAAE,CAAA;AAAA,EACtC,CAAC,CAAA;AAED,EAAA,MAAM,KAAA,GAAQ,eAAgB,SAAA,GAAiC,YAAA;AAO/D,EAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GACX,KAAA,CAAM,CAAC,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,GAAI,CAAC,KAAA,CAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,CAAC,MAAM,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC,CAAA;AAWnE,EAAA,MAAM,OAAA,GAAU,WAAA;AAAA,IACd,CAAC,IAAA,KAA2B;AAQ1B,MAAA,MAAM,CAAA,GAAI,KAAA,CAAM,UAAA,CAAW,IAAA,CAAK,CAAC,GAAG,GAAA,EAAK,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA;AACxD,MAAA,MAAM,CAAA,GAAI,KAAA,CAAM,UAAA,CAAW,IAAA,CAAK,CAAC,GAAG,GAAA,EAAK,IAAI,CAAA,EAAG,GAAA,EAAK,GAAG,CAAA;AAMxD,MAAA,MAAM,OAAA,GAA4B,KAAK,CAAA,GAAI,CAAC,GAAG,CAAC,CAAA,GAAI,CAAC,CAAA,EAAG,CAAC,CAAA;AACzD,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,MACzB;AACA,MAAA,aAAA,GAAgB,OAAO,CAAA;AAAA,IACzB,CAAA;AAAA,IACA,CAAC,YAAA,EAAc,GAAA,EAAK,GAAA,EAAK,eAAe,IAAI;AAAA,GAC9C;AAEA,EAAA,MAAM,SAAA,GAAY,WAAA;AAAA,IAChB,CAAC,OAAc,OAAA,KAAoB;AACjC,MAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,MAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,MAAA,MAAM,MAAM,uBAAA,CAAwB,OAAA,EAAS,KAAA,EAAO,GAAA,EAAK,KAAK,IAAI,CAAA;AAWlE,MAAA,IAAI,UAAU,CAAA,EAAG;AACf,QAAA,OAAA,CAAQ,CAAC,GAAA,EAAK,EAAE,CAAC,CAAA;AAAA,MACnB,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,CAAC,EAAA,EAAI,GAAG,CAAC,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,EAAA,EAAI,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,SAAS,IAAI;AAAA,GAClC;AAYA,EAAA,MAAM,KAAA,GAAA,CAAU,EAAA,GAAK,GAAA,KAAQ,GAAA,GAAM,GAAA,CAAA,GAAQ,GAAA;AAC3C,EAAA,MAAM,KAAA,GAAA,CAAU,EAAA,GAAK,GAAA,KAAQ,GAAA,GAAM,GAAA,CAAA,GAAQ,GAAA;AAE3C,EAAA,MAAM,eAAe,IAAA,IAAQ,IAAA;AAE7B,EAAA,MAAM,iBAAA,GACJ,SAAA,KAAc,MAAA,GAAY,CAAA,EAAG,SAAS,CAAA,SAAA,CAAA,GAAc,MAAA;AACtD,EAAA,MAAM,kBAAA,GACJ,SAAA,KAAc,MAAA,GAAY,CAAA,EAAG,SAAS,CAAA,SAAA,CAAA,GAAc,MAAA;AACtD,EAAA,MAAM,mBAAA,GACJ,SAAA,KAAc,MAAA,GAAY,cAAA,GAAiB,MAAA;AAE7C,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,cAAA;AAAA,MACV,IAAA,EAAK,OAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MACZ,iBAAA,EAAiB,cAAA;AAAA,MACjB,SAAA,EAAW,GAAG,kBAAA,CAAmB,EAAE,MAAM,YAAA,EAAc,GAAG,SAAS,CAAA;AAAA,MAClE,GAAG,IAAA;AAAA,MAEJ,QAAA,kBAAA,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,QAAA;AAAA,UACL,WAAA,EAAU,cAAA;AAAA,UACV,SAAA,EAAW,GAAG,mBAAA,CAAoB,EAAE,MAAM,YAAA,EAAc,GAAG,UAAU,CAAA;AAAA,UAErE,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,WAAA,EAAU,cAAA;AAAA,gBACV,WAAW,EAAA,CAAG,mBAAA,CAAoB,EAAE,UAAA,EAAY,GAAG,UAAU,CAAA;AAAA,gBAC7D,KAAA,EAAO;AAAA,kBACL,IAAA,EAAM,GAAG,KAAK,CAAA,CAAA,CAAA;AAAA,kBACd,OAAO,CAAA,EAAG,IAAA,CAAK,IAAI,KAAA,GAAQ,KAAA,EAAO,CAAC,CAAC,CAAA,CAAA;AAAA;AACtC;AAAA,aACF;AAAA,4BACA,GAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,QAAA;AAAA,gBACA,IAAA,EAAM,YAAA;AAAA,gBACN,KAAA,EAAO,EAAA;AAAA,gBACP,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,IAAA;AAAA,gBACA,WAAA,EAAa,KAAA;AAAA,gBACb,QAAA;AAAA,gBACA,aAAA,EAAe,CAAC,CAAA,KAAM,SAAA,CAAU,GAAG,CAAC,CAAA;AAAA,gBACpC,OAAA,EAAS,CAAC,KAAA,KAAU,OAAA,CAAQ,CAAC,EAAA,GAAK,KAAA,EAAO,EAAE,CAAC,CAAA;AAAA,gBAC5C,YAAA,EAAY,iBAAA;AAAA,gBACZ,iBAAA,EAAiB;AAAA;AAAA,aACnB;AAAA,4BACA,GAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,QAAA;AAAA,gBACA,IAAA,EAAM,YAAA;AAAA,gBACN,KAAA,EAAO,EAAA;AAAA,gBACP,GAAA;AAAA,gBACA,GAAA;AAAA,gBACA,IAAA;AAAA,gBACA,WAAA,EAAa,KAAA;AAAA,gBACb,QAAA;AAAA,gBACA,aAAA,EAAe,CAAC,CAAA,KAAM,SAAA,CAAU,GAAG,CAAC,CAAA;AAAA,gBACpC,OAAA,EAAS,CAAC,KAAA,KAAU,OAAA,CAAQ,CAAC,EAAA,EAAI,EAAA,GAAK,KAAK,CAAC,CAAA;AAAA,gBAC5C,YAAA,EAAY,kBAAA;AAAA,gBACZ,iBAAA,EAAiB;AAAA;AAAA;AACnB;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;AAoB1B,SAAS,UAAA,CAAW;AAAA,EAClB,QAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA,EAAc,cAAA;AAAA,EACd,iBAAA,EAAmB;AACrB,CAAA,EAAoB;AAClB,EAAA,MAAM,aAAA,GAAgB,WAAA;AAAA,IACpB,CAAC,KAAA,KAA6C;AAC5C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA;AAAA,MACF;AACA,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,MAAM,QAAQ,QAAA,CAAS,OAAA;AACvB,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA;AAAA,MACF;AAEA,MAAA,KAAA,CAAM,aAAA,CAAc,iBAAA,CAAkB,KAAA,CAAM,SAAS,CAAA;AACrD,MAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAoB;AAEhC,QAAA,aAAA,CAAc,EAAE,OAAO,CAAA;AAAA,MACzB,CAAA;AACA,MAAA,MAAM,KAAK,MAAM;AACf,QAAA,MAAA,CAAO,mBAAA,CAAoB,eAAe,IAAI,CAAA;AAC9C,QAAA,MAAA,CAAO,mBAAA,CAAoB,aAAa,EAAE,CAAA;AAAA,MAC5C,CAAA;AACA,MAAA,MAAA,CAAO,gBAAA,CAAiB,eAAe,IAAI,CAAA;AAC3C,MAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,EAAE,CAAA;AAAA,IACzC,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,aAAA,EAAe,QAAQ;AAAA,GACpC;AAEA,EAAA,MAAM,SAAA,GAAY,WAAA;AAAA,IAChB,CAAC,KAAA,KAA8C;AAC7C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA;AAAA,MACF;AAMA,MAAA,MAAM,GAAA,GAAA,CAAO,MAAM,GAAA,IAAO,EAAA;AAC1B,MAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,YAAA,IAAgB,KAAA,CAAM,QAAQ,SAAA,EAAW;AACzD,QAAA,KAAA,GAAQ,IAAA;AAAA,MACV,WAAW,KAAA,CAAM,GAAA,KAAQ,WAAA,IAAe,KAAA,CAAM,QAAQ,WAAA,EAAa;AACjE,QAAA,KAAA,GAAQ,CAAC,IAAA;AAAA,MACX,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,QAAA,EAAU;AACjC,QAAA,KAAA,GAAQ,GAAA;AAAA,MACV,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,UAAA,EAAY;AACnC,QAAA,KAAA,GAAQ,CAAC,GAAA;AAAA,MACX,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,MAAA,EAAQ;AAC/B,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AACnB,QAAA;AAAA,MACF,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,KAAQ,KAAA,EAAO;AAC9B,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AACnB,QAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA;AAAA,MACF;AACA,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,GAAA,EAAK,GAAA,EAAK,OAAA,EAAS,MAAM,KAAK;AAAA,GAC3C;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,WAAW,EAAA,GAAK,CAAA;AAAA,MAC1B,WAAA,EAAU,oBAAA;AAAA,MACV,YAAA,EAAY,cAAA;AAAA,MACZ,iBAAA,EAAiB,mBAAA;AAAA,MACjB,eAAA,EAAe,GAAA;AAAA,MACf,eAAA,EAAe,GAAA;AAAA,MACf,eAAA,EAAe,KAAA;AAAA,MACf,iBAAe,QAAA,IAAY,MAAA;AAAA,MAC3B,SAAA,EAAW,EAAA;AAAA,QACT,yDAAA;AAAA,QACA,mBAAA,CAAoB,EAAE,IAAA,EAAM;AAAA,OAC9B;AAAA,MACA,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAG,WAAW,CAAA,CAAA,CAAA,EAAI;AAAA,MACjC,aAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ","file":"slider.mjs","sourcesContent":["export const zuiSliderRootBase = \"w-full select-none touch-none\";\n\nexport const zuiSliderRootSizes = {\n sm: \"py-2\",\n md: \"py-2.5\",\n lg: \"py-3\",\n} as const;\n\nexport const zuiSliderTrackBase =\n \"relative h-2 w-full shrink-0 overflow-hidden rounded-full bg-[var(--zui-slider-track-bg,#0000001a)] dark:bg-[var(--zui-slider-track-bg-dark,#ffffff1a)]\";\n\nexport const zuiSliderTrackSizes = {\n sm: \"h-1.5\",\n md: \"h-2\",\n lg: \"h-2.5\",\n} as const;\n\nexport const zuiSliderRangeBase =\n \"absolute h-full rounded-full bg-linear-to-r from-[var(--zui-slider-range-from,oklch(60.6%_0.25_292.717))] dark:from-[var(--zui-slider-range-from-dark,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-to-dark,oklch(67.3%_0.182_276.935))]\";\n\nexport const zuiSliderRangeAppearances = {\n default:\n \"from-[var(--zui-slider-range-default-from,oklch(60.6%_0.25_292.717))] dark:from-[var(--zui-slider-range-default-from-dark,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-default-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-default-to-dark,oklch(67.3%_0.182_276.935))]\",\n sky: \"from-[var(--zui-slider-range-sky-from,oklch(68.5%_0.169_237.323))] dark:from-[var(--zui-slider-range-sky-from-dark,oklch(68.5%_0.169_237.323))] to-[var(--zui-slider-range-sky-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-sky-to-dark,oklch(67.3%_0.182_276.935))]\",\n rose: \"from-[var(--zui-slider-range-rose-from,oklch(64.5%_0.246_16.439))] dark:from-[var(--zui-slider-range-rose-from-dark,oklch(64.5%_0.246_16.439))] to-[var(--zui-slider-range-rose-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-rose-to-dark,oklch(67.3%_0.182_276.935))]\",\n purple:\n \"from-[var(--zui-slider-range-purple-from,oklch(62.7%_0.265_303.9))] dark:from-[var(--zui-slider-range-purple-from-dark,oklch(62.7%_0.265_303.9))] to-[var(--zui-slider-range-purple-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-purple-to-dark,oklch(67.3%_0.182_276.935))]\",\n pink: \"from-[var(--zui-slider-range-pink-from,oklch(65.6%_0.241_354.308))] dark:from-[var(--zui-slider-range-pink-from-dark,oklch(65.6%_0.241_354.308))] to-[var(--zui-slider-range-pink-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-pink-to-dark,oklch(67.3%_0.182_276.935))]\",\n orange:\n \"from-[var(--zui-slider-range-orange-from,oklch(70.5%_0.213_47.604))] dark:from-[var(--zui-slider-range-orange-from-dark,oklch(70.5%_0.213_47.604))] to-[var(--zui-slider-range-orange-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-orange-to-dark,oklch(67.3%_0.182_276.935))]\",\n yellow:\n \"from-[var(--zui-slider-range-yellow-from,oklch(79.5%_0.184_86.047))] dark:from-[var(--zui-slider-range-yellow-from-dark,oklch(79.5%_0.184_86.047))] to-[var(--zui-slider-range-yellow-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-yellow-to-dark,oklch(67.3%_0.182_276.935))]\",\n teal: \"from-[var(--zui-slider-range-teal-from,oklch(70.4%_0.14_182.503))] dark:from-[var(--zui-slider-range-teal-from-dark,oklch(70.4%_0.14_182.503))] to-[var(--zui-slider-range-teal-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-teal-to-dark,oklch(67.3%_0.182_276.935))]\",\n indigo:\n \"from-[var(--zui-slider-range-indigo-from,oklch(58.5%_0.233_277.117))] dark:from-[var(--zui-slider-range-indigo-from-dark,oklch(58.5%_0.233_277.117))] to-[var(--zui-slider-range-indigo-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-indigo-to-dark,oklch(67.3%_0.182_276.935))]\",\n emerald:\n \"from-[var(--zui-slider-range-emerald-from,oklch(69.6%_0.17_162.48))] dark:from-[var(--zui-slider-range-emerald-from-dark,oklch(69.6%_0.17_162.48))] to-[var(--zui-slider-range-emerald-to,oklch(60%_0.118_184.704))] dark:to-[var(--zui-slider-range-emerald-to-dark,oklch(77.7%_0.152_181.912))]\",\n amber:\n \"from-[var(--zui-slider-range-amber-from,oklch(76.9%_0.188_70.08))] dark:from-[var(--zui-slider-range-amber-from-dark,oklch(76.9%_0.188_70.08))] to-[var(--zui-slider-range-amber-to,oklch(64.6%_0.222_41.116))] dark:to-[var(--zui-slider-range-amber-to-dark,oklch(75%_0.183_55.934))]\",\n gray: \"from-[var(--zui-slider-range-gray-from,oklch(55.1%_0.027_264.364))] dark:from-[var(--zui-slider-range-gray-from-dark,oklch(55.1%_0.027_264.364))] to-[var(--zui-slider-range-gray-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gray-to-dark,oklch(67.3%_0.182_276.935))]\",\n violet:\n \"from-[var(--zui-slider-range-violet-from,oklch(60.6%_0.25_292.717))] dark:from-[var(--zui-slider-range-violet-from-dark,oklch(60.6%_0.25_292.717))] to-[var(--zui-slider-range-violet-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-violet-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-blue\":\n \"from-[var(--zui-slider-range-gradient-blue-from,oklch(62.3%_0.214_259.815))] dark:from-[var(--zui-slider-range-gradient-blue-from-dark,oklch(62.3%_0.214_259.815))] to-[var(--zui-slider-range-gradient-blue-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-blue-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-green\":\n \"from-[var(--zui-slider-range-gradient-green-from,oklch(72.3%_0.219_149.579))] dark:from-[var(--zui-slider-range-gradient-green-from-dark,oklch(72.3%_0.219_149.579))] to-[var(--zui-slider-range-gradient-green-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-green-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-red\":\n \"from-[var(--zui-slider-range-gradient-red-from,oklch(63.7%_0.237_25.331))] dark:from-[var(--zui-slider-range-gradient-red-from-dark,oklch(63.7%_0.237_25.331))] to-[var(--zui-slider-range-gradient-red-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-red-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-yellow\":\n \"from-[var(--zui-slider-range-gradient-yellow-from,oklch(79.5%_0.184_86.047))] dark:from-[var(--zui-slider-range-gradient-yellow-from-dark,oklch(79.5%_0.184_86.047))] to-[var(--zui-slider-range-gradient-yellow-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-yellow-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-purple\":\n \"from-[var(--zui-slider-range-gradient-purple-from,oklch(62.7%_0.265_303.9))] dark:from-[var(--zui-slider-range-gradient-purple-from-dark,oklch(62.7%_0.265_303.9))] to-[var(--zui-slider-range-gradient-purple-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-purple-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-teal\":\n \"from-[var(--zui-slider-range-gradient-teal-from,oklch(70.4%_0.14_182.503))] dark:from-[var(--zui-slider-range-gradient-teal-from-dark,oklch(70.4%_0.14_182.503))] to-[var(--zui-slider-range-gradient-teal-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-teal-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-indigo\":\n \"from-[var(--zui-slider-range-gradient-indigo-from,oklch(58.5%_0.233_277.117))] dark:from-[var(--zui-slider-range-gradient-indigo-from-dark,oklch(58.5%_0.233_277.117))] to-[var(--zui-slider-range-gradient-indigo-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-indigo-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-pink\":\n \"from-[var(--zui-slider-range-gradient-pink-from,oklch(65.6%_0.241_354.308))] dark:from-[var(--zui-slider-range-gradient-pink-from-dark,oklch(65.6%_0.241_354.308))] to-[var(--zui-slider-range-gradient-pink-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-pink-to-dark,oklch(67.3%_0.182_276.935))]\",\n \"gradient-orange\":\n \"from-[var(--zui-slider-range-gradient-orange-from,oklch(70.5%_0.213_47.604))] dark:from-[var(--zui-slider-range-gradient-orange-from-dark,oklch(70.5%_0.213_47.604))] to-[var(--zui-slider-range-gradient-orange-to,oklch(51.1%_0.262_276.966))] dark:to-[var(--zui-slider-range-gradient-orange-to-dark,oklch(67.3%_0.182_276.935))]\",\n} as const;\n\nexport const zuiSliderThumbBase =\n \"block size-4 rounded-full border border-[color:var(--zui-slider-thumb-border,#00000033)] dark:border-[color:var(--zui-slider-thumb-border-dark,#ffffff33)] bg-[var(--zui-slider-thumb-bg,#000000)] dark:bg-[var(--zui-slider-thumb-bg-dark,#ffffff)] shadow-md ring-offset-2 ring-offset-[var(--zui-slider-thumb-ring-offset,oklch(98.4%_0.003_247.858))] dark:ring-offset-[var(--zui-slider-thumb-ring-offset-dark,oklch(12.9%_0.042_264.695))] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--zui-slider-thumb-ring-focus,#00000066)] dark:focus-visible:ring-[var(--zui-slider-thumb-ring-focus-dark,#ffffff66)] disabled:pointer-events-none disabled:opacity-40\";\n\nexport const zuiSliderThumbSizes = {\n sm: \"size-3.5\",\n md: \"size-4\",\n lg: \"size-5\",\n} as const;\n","import { cva } from \"class-variance-authority\";\n\nimport {\n zuiSliderRangeAppearances,\n zuiSliderRangeBase,\n zuiSliderRootBase,\n zuiSliderRootSizes,\n zuiSliderThumbBase,\n zuiSliderThumbSizes,\n zuiSliderTrackBase,\n zuiSliderTrackSizes,\n} from \"../../design-system/slider\";\n\nexport const sliderRootVariants = cva(zuiSliderRootBase, {\n variants: {\n size: zuiSliderRootSizes,\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport const sliderTrackVariants = cva(zuiSliderTrackBase, {\n variants: {\n size: zuiSliderTrackSizes,\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport const sliderRangeVariants = cva(zuiSliderRangeBase, {\n variants: {\n appearance: zuiSliderRangeAppearances,\n },\n defaultVariants: {\n appearance: \"default\",\n },\n});\n\nexport const sliderThumbVariants = cva(zuiSliderThumbBase, {\n variants: {\n size: zuiSliderThumbSizes,\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n","\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent as ReactKeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n type Ref,\n type RefObject,\n} from \"react\";\n\nimport { cn } from \"../../lib/utils\";\n\nimport type {\n RangeSliderProps,\n SliderCtx,\n SliderProps,\n SliderRangeProps,\n SliderThumbProps,\n SliderTrackProps,\n} from \"./types\";\nimport {\n sliderRangeVariants,\n sliderRootVariants,\n sliderThumbVariants,\n sliderTrackVariants,\n} from \"./variants\";\n\n/**\n * Restricts a numeric value to the inclusive interval [min, max].\n *\n * Values below `min` become `min`; values above `max` become `max`.\n * This is used after pointer math and keyboard deltas so the slider\n * never reports values outside the configured domain.\n *\n * Examples (min = 0, max = 100):\n * - clamp(120, 0, 100) → 100 (capped at max)\n * - clamp(-10, 0, 100) → 0 (raised to min)\n * - clamp(42, 0, 100) → 42 (unchanged)\n */\nconst clamp = (value: number, min: number, max: number) => {\n return Math.min(max, Math.max(min, value));\n};\n\n/**\n * Maps an arbitrary number to the closest value aligned with `step`\n * relative to `min` (the “anchor” of the step grid).\n *\n * How it works:\n * 1. Measure how far `value` is from `min` in “step units”:\n * (value - min) / step\n * 2. Round to the nearest whole number of steps.\n * 3. Reconstruct: min + (rounded steps) * step\n *\n * Example: min = 0, step = 10, value = 23\n * - steps = round((23 - 0) / 10) = round(2.3) = 2\n * - result = 0 + 2 * 10 = 20\n *\n * Note: This does not enforce [min, max]; pair with `clamp` when needed.\n */\nconst snapToStep = (value: number, min: number, step: number) => {\n const steps = Math.round((value - min) / step);\n return min + steps * step;\n};\n\nconst SliderContext = createContext<SliderCtx | null>(null);\n\n/**\n * Reads slider context; throws a descriptive error if a sub-part is used\n * outside `<Slider>` (helps catch invalid composition early).\n */\nconst useSliderContext = (component: string): SliderCtx => {\n const ctx = useContext(SliderContext);\n if (!ctx) {\n throw new Error(`${component} must be used within <Slider>`);\n }\n return ctx;\n};\n\n/**\n * Converts a horizontal pointer position (viewport X) into a slider value\n * in [min, max], snapped to `step`.\n *\n * Pipeline:\n * 1. Read the track’s bounding box so all math uses the same coordinate\n * space as `clientX` (viewport coordinates from pointer events).\n * 2. Compute how far along the track the pointer sits as a ratio in [0, 1]:\n * (clientX - trackLeft) / trackWidth. If width is 0, ratio is 0 to avoid\n * division by zero.\n * 3. Linearly interpolate that ratio into the value domain:\n * raw = min + ratio * (max - min).\n * 4. Clamp `raw` to [min, max], then snap to the nearest valid step so the\n * result always matches discrete thumb positions.\n *\n * Worked example: track left = 100px, width = 200px, min = 0, max = 100,\n * pointer clientX = 150px\n * - ratio = (150 - 100) / 200 = 0.25\n * - raw = 0 + 0.25 * (100 - 0) = 25\n * - After clamp + snap (e.g. step 1), result stays 25\n */\nconst computeValueFromPointer = (\n clientX: number,\n track: HTMLDivElement,\n min: number,\n max: number,\n step: number,\n) => {\n const rect = track.getBoundingClientRect();\n\n const ratio = rect.width === 0 ? 0 : (clientX - rect.left) / rect.width;\n\n const raw = min + ratio * (max - min);\n\n return snapToStep(clamp(raw, min, max), min, step);\n};\n\n/**\n * Root primitive for a single-value slider. Provides context (bounds, value,\n * disabled state, track ref) to `SliderTrack`, `SliderRange`, and `SliderThumb`.\n */\nexport function Slider({\n className,\n size = \"md\",\n min = 0,\n max = 100,\n step = 1,\n value: valueProp,\n defaultValue,\n onValueChange,\n disabled = false,\n appearance = \"default\",\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n children,\n ref,\n ...rest\n}: SliderProps & { ref?: Ref<HTMLDivElement> }) {\n const trackRef = useRef<HTMLDivElement | null>(null);\n const isControlled = valueProp !== undefined;\n\n /**\n * Mode selection (React’s standard controlled/uncontrolled pattern):\n *\n * - Controlled: `value` is passed from the parent. The parent is the source\n * of truth; local state is not updated on drag. Use `onValueChange` to\n * persist updates upward (e.g. into React state or a form library).\n *\n * - Uncontrolled: `value` is omitted. `defaultValue` (or `min` if absent)\n * seeds internal state; drags and keyboard updates write to that state\n * directly. `onValueChange` is still optional for side effects.\n *\n * Examples:\n * - Controlled: `<Slider value={50} onValueChange={setX} />`\n * - Uncontrolled: `<Slider defaultValue={50} />`\n */\n\n const [uncontrolled, setUncontrolled] = useState(defaultValue ?? min);\n\n const value = isControlled ? (valueProp as number) : uncontrolled;\n\n const setValue = useCallback(\n (next: number) => {\n /**\n * Normalizes a candidate value before committing it:\n * 1. Snap to the nearest step anchored at `min`.\n * 2. Clamp into [min, max] so overshoots from keyboard or programmatic\n * calls cannot escape the domain.\n * 3. If uncontrolled, mirror the result into local state so the thumb\n * and range visuals stay in sync.\n * 4. Always invoke `onValueChange` when provided so parents receive the\n * canonical value (even in controlled mode, after normalization).\n *\n * Example: min = 0, max = 100, step = 10, next = 27\n * → snap to 30 → clamp still 30 → emitted value 30\n */\n\n const clamped = clamp(snapToStep(next, min, step), min, max);\n\n if (!isControlled) {\n setUncontrolled(clamped);\n }\n\n onValueChange?.(clamped);\n },\n [isControlled, max, min, onValueChange, step],\n );\n\n const ctx = useMemo(\n () => ({\n min,\n max,\n step,\n\n /**\n * Context consumers always see a value that is on-step and in-range.\n * If a controlled parent passes an out-of-band number (e.g. stale props\n * or a bug), we still render thumbs and ARIA attributes consistently\n * with the same snap/clamp rules as pointer and keyboard input.\n */\n value: clamp(snapToStep(value, min, step), min, max),\n\n setValue,\n disabled,\n size: size ?? \"md\",\n appearance: appearance ?? \"default\",\n trackRef,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n }),\n [\n appearance,\n ariaLabel,\n ariaLabelledBy,\n disabled,\n max,\n min,\n setValue,\n size,\n step,\n value,\n ],\n );\n\n return (\n <SliderContext.Provider value={ctx}>\n <div\n ref={ref}\n data-slot=\"slider\"\n role=\"group\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={cn(sliderRootVariants({ size }), className)}\n {...rest}\n >\n {children}\n </div>\n </SliderContext.Provider>\n );\n}\n\nSlider.displayName = \"Slider\";\n\n/**\n * The interactive rail whose geometry defines how pointer X maps to values.\n * Assigns the DOM node to context `trackRef` so thumbs can measure it.\n */\nexport function SliderTrack({\n className,\n ref: refProp,\n ...rest\n}: SliderTrackProps & { ref?: Ref<HTMLDivElement> }) {\n const { size, trackRef } = useSliderContext(\"SliderTrack\");\n\n return (\n <div\n ref={(node) => {\n trackRef.current = node;\n if (typeof refProp === \"function\") {\n refProp(node);\n } else if (refProp) {\n (refProp as RefObject<HTMLDivElement | null>).current = node;\n }\n }}\n data-slot=\"slider-track\"\n className={cn(sliderTrackVariants({ size }), className)}\n {...rest}\n />\n );\n}\n\nSliderTrack.displayName = \"SliderTrack\";\n\n/** Filled portion from the start of the track up to the current value (width %). */\nexport function SliderRange({\n className,\n ref,\n ...rest\n}: SliderRangeProps & { ref?: Ref<HTMLDivElement> }) {\n const { min, max, value, appearance } = useSliderContext(\"SliderRange\");\n\n /**\n * Percentage along the track (0–100) representing the current value.\n *\n * Formula: ((value - min) / (max - min)) * 100. When min === max the range\n * is degenerate; we treat the percentage as 0 to avoid NaN.\n *\n * For the single-thumb slider, this percentage becomes the **width** of\n * the filled range segment (from the start of the track to the thumb).\n * The thumb itself uses the same mapping in `SliderThumb` for `left`.\n */\n const pct = max === min ? 0 : ((value - min) / (max - min)) * 100;\n\n return (\n <div\n ref={ref}\n data-slot=\"slider-range\"\n className={cn(sliderRangeVariants({ appearance }), className)}\n style={{ width: `${pct}%` }}\n {...rest}\n />\n );\n}\n\nSliderRange.displayName = \"SliderRange\";\n\n/**\n * Draggable thumb with ARIA `role=\"slider\"`. Handles pointer drag (via window\n * listeners) and keyboard increments consistent with `min` / `max` / `step`.\n */\nexport function SliderThumb({\n className,\n ref: refProp,\n ...rest\n}: SliderThumbProps & { ref?: Ref<HTMLDivElement> }) {\n const {\n min,\n max,\n value,\n step,\n setValue,\n disabled,\n size,\n trackRef,\n \"aria-label\": sliderAriaLabel,\n \"aria-labelledby\": sliderAriaLabelledBy,\n } = useSliderContext(\"SliderThumb\");\n /** Horizontal thumb position; same mapping as `SliderRange` width uses. */\n const pct = max === min ? 0 : ((value - min) / (max - min)) * 100;\n\n const onPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n event.preventDefault();\n\n const track = trackRef.current;\n if (!track) return;\n\n /**\n * Keep receiving pointer events for this pointer id even when the\n * cursor leaves the thumb. Without capture, dragging quickly could\n * “drop” the thumb when the pointer exits the small hit target.\n */\n event.currentTarget.setPointerCapture(event.pointerId);\n\n const move = (e: PointerEvent) => {\n /**\n * On each move, project the pointer X onto the track geometry, then\n * run the same snap/clamp pipeline as a click would. `setValue`\n * deduplicates invalid states for controlled parents.\n */\n setValue(computeValueFromPointer(e.clientX, track, min, max, step));\n };\n\n const up = () => {\n /** Tear down window listeners once the gesture ends (any button). */\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n };\n\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n },\n [disabled, max, min, setValue, step, trackRef],\n );\n\n const onKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n /**\n * Page Up / Page Down move by one tenth of the value span (not one\n * tenth of the thumb travel). This scales with custom min/max ranges.\n */\n const big = (max - min) / 10;\n\n let delta = 0;\n\n /**\n * Keyboard model (WAI-ARIA slider conventions, adapted to our step):\n * - Arrow Right / Up: increase by one `step`.\n * - Arrow Left / Down: decrease by one `step`.\n * - Page Up / Down: coarse adjust by `big` (±10% of range).\n * - Home / End: jump to min or max (bypasses incremental delta).\n * Unrecognized keys are ignored without calling `preventDefault`.\n */\n if (event.key === \"ArrowRight\" || event.key === \"ArrowUp\") {\n delta = step;\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowDown\") {\n delta = -step;\n } else if (event.key === \"PageUp\") {\n delta = big;\n } else if (event.key === \"PageDown\") {\n delta = -big;\n } else if (event.key === \"Home\") {\n event.preventDefault();\n setValue(min);\n return;\n } else if (event.key === \"End\") {\n event.preventDefault();\n setValue(max);\n return;\n } else {\n return;\n }\n\n event.preventDefault();\n\n /**\n * Apply the accumulated delta on top of the current value; `setValue`\n * performs snap + clamp so the outcome is always valid.\n *\n * Illustration with min = 0, max = 100, step = 10, value = 40:\n * - ArrowRight: delta +10 → candidate 50 → stays 50\n * - ArrowLeft: delta -10 → candidate 30\n * - PageUp: delta +10 (when big = 10) → 50; PageDown → 30\n * - Home / End handled above with direct `setValue(min|max)`\n */\n setValue(value + delta);\n },\n [disabled, max, min, setValue, step, value],\n );\n\n return (\n <div\n ref={(node) => {\n if (typeof refProp === \"function\") {\n refProp(node);\n } else if (refProp) {\n (refProp as RefObject<HTMLDivElement | null>).current = node;\n }\n }}\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n data-slot=\"slider-thumb\"\n aria-label={sliderAriaLabel}\n aria-labelledby={sliderAriaLabelledBy}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-disabled={disabled || undefined}\n className={cn(\n \"absolute top-1/2 z-10 -translate-x-1/2 -translate-y-1/2\",\n sliderThumbVariants({ size }),\n className,\n )}\n style={{ left: `${pct}%` }}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n {...rest}\n />\n );\n}\n\nSliderThumb.displayName = \"SliderThumb\";\n\n/**\n * Two-thumb range control on one track. Inlines track/range for layout speed;\n * thumbs delegate drag math through `moveThumb` / `setPair` to keep ordering\n * and snapping identical to the single slider helpers.\n */\nexport function RangeSlider({\n className,\n size = \"md\",\n min = 0,\n max = 100,\n step = 1,\n value: valueProp,\n defaultValue,\n onValueChange,\n disabled = false,\n appearance = \"default\",\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n ref,\n ...rest\n}: RangeSliderProps & { ref?: Ref<HTMLDivElement> }) {\n const trackRef = useRef<HTMLDivElement | null>(null);\n const isControlled = valueProp !== undefined;\n const [uncontrolled, setUncontrolled] = useState<[number, number]>(() => {\n const seed = defaultValue ?? [min, max];\n\n /**\n * Initial pair: normalize each endpoint independently so both ends sit\n * on the step grid and respect [min, max] before any ordering logic runs.\n *\n * Example: min = 0, max = 100, step = 10, seed[0] = 85\n * → snap to 80 → clamp still 80.\n */\n const lo = clamp(snapToStep(seed[0], min, step), min, max);\n const hi = clamp(snapToStep(seed[1], min, step), min, max);\n\n /**\n * Canonical order is always [lower, higher]. If the consumer passes\n * reversed defaults (e.g. [80, 20]), we swap so downstream math assumes\n * lo ≤ hi for range width and thumb assignment.\n */\n return lo <= hi ? [lo, hi] : [hi, lo];\n });\n\n const value = isControlled ? (valueProp as [number, number]) : uncontrolled;\n\n /**\n * Derive ordered endpoints for rendering and hit-testing math. Controlled\n * parents might briefly pass reversed tuples; we normalize every render so\n * `lo` is the left/low thumb and `hi` is the right/high thumb.\n */\n const [lo, hi] =\n value[0] <= value[1] ? [value[0], value[1]] : [value[1], value[0]];\n\n /**\n * Commits a new [low, high] pair: used by drags, keyboard nudges, and\n * internal clamping. Each thumb only mutates its own side, but we always\n * pass through here so both values stay snapped and ordered.\n *\n * Example: current [20, 80], dragging the low thumb\n * → calls like setPair([newLow, 80]); the high endpoint is preserved until\n * the other thumb moves.\n */\n const setPair = useCallback(\n (next: [number, number]) => {\n /**\n * Per-endpoint snap + clamp, same rules as the single slider. Handles\n * overshoot from pointer projection or programmatic updates.\n *\n * Example: min = 0, max = 100, step = 10, next = [27, 85]\n * → [30, 80] after snap/clamp (85 cannot exceed max but also snaps down).\n */\n const a = clamp(snapToStep(next[0], min, step), min, max);\n const b = clamp(snapToStep(next[1], min, step), min, max);\n\n /**\n * Re-order after independent normalization so the tuple is always\n * [smaller, larger], keeping the range bar width non-negative.\n */\n const ordered: [number, number] = a <= b ? [a, b] : [b, a];\n if (!isControlled) {\n setUncontrolled(ordered);\n }\n onValueChange?.(ordered);\n },\n [isControlled, max, min, onValueChange, step],\n );\n\n const moveThumb = useCallback(\n (index: 0 | 1, clientX: number) => {\n const track = trackRef.current;\n if (!track) return;\n\n const raw = computeValueFromPointer(clientX, track, min, max, step);\n\n /**\n * Which thumb is active is explicit (`index`), so we only replace that\n * side of the pair and keep the opposite endpoint fixed. `setPair` will\n * still snap/clamp and may collapse the range if thumbs cross (handled\n * by ordering inside `setPair`).\n *\n * index 0: low thumb → `[raw, hi]`\n * index 1: high thumb → `[lo, raw]`\n */\n if (index === 0) {\n setPair([raw, hi]);\n } else {\n setPair([lo, raw]);\n }\n },\n [hi, lo, max, min, setPair, step],\n );\n\n /**\n * Map both endpoints to percentages along the track for layout:\n * - `left` on the range fill uses `loPct` (where the selected interval starts).\n * - `width` uses `hiPct - loPct` (how wide the interval is), floored at 0\n * if the thumbs coincide.\n *\n * Example: min = 0, max = 100, lo = 20, hi = 80\n * - loPct = 20%, hiPct = 80%\n * - Range bar: left 20%, width 60%\n */\n const loPct = ((lo - min) / (max - min)) * 100;\n const hiPct = ((hi - min) / (max - min)) * 100;\n\n const resolvedSize = size ?? \"md\";\n\n const lowThumbAriaLabel =\n ariaLabel !== undefined ? `${ariaLabel}, minimum` : undefined;\n const highThumbAriaLabel =\n ariaLabel !== undefined ? `${ariaLabel}, maximum` : undefined;\n const thumbAriaLabelledBy =\n ariaLabel === undefined ? ariaLabelledBy : undefined;\n\n return (\n <div\n ref={ref}\n data-slot=\"range-slider\"\n role=\"group\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n className={cn(sliderRootVariants({ size: resolvedSize }), className)}\n {...rest}\n >\n <div\n ref={trackRef}\n data-slot=\"slider-track\"\n className={cn(sliderTrackVariants({ size: resolvedSize }), \"relative\")}\n >\n <div\n data-slot=\"slider-range\"\n className={cn(sliderRangeVariants({ appearance }), \"absolute\")}\n style={{\n left: `${loPct}%`,\n width: `${Math.max(hiPct - loPct, 0)}%`,\n }}\n />\n <RangeThumb\n disabled={disabled}\n size={resolvedSize}\n value={lo}\n min={min}\n max={max}\n step={step}\n positionPct={loPct}\n trackRef={trackRef}\n onMoveClientX={(x) => moveThumb(0, x)}\n onNudge={(delta) => setPair([lo + delta, hi])}\n aria-label={lowThumbAriaLabel}\n aria-labelledby={thumbAriaLabelledBy}\n />\n <RangeThumb\n disabled={disabled}\n size={resolvedSize}\n value={hi}\n min={min}\n max={max}\n step={step}\n positionPct={hiPct}\n trackRef={trackRef}\n onMoveClientX={(x) => moveThumb(1, x)}\n onNudge={(delta) => setPair([lo, hi + delta])}\n aria-label={highThumbAriaLabel}\n aria-labelledby={thumbAriaLabelledBy}\n />\n </div>\n </div>\n );\n}\n\nRangeSlider.displayName = \"RangeSlider\";\n\ntype RangeThumbProps = {\n disabled: boolean;\n size: \"sm\" | \"md\" | \"lg\";\n value: number;\n min: number;\n max: number;\n step: number;\n positionPct: number;\n trackRef: RefObject<HTMLDivElement | null>;\n /** Called on pointer move with viewport X; parent decides which bound updates. */\n onMoveClientX: (clientX: number) => void;\n /** Relative keyboard adjustment in value units; parent merges into the pair. */\n onNudge: (delta: number) => void;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n};\n\n/** Private thumb implementation shared by the low and high endpoints. */\nfunction RangeThumb({\n disabled,\n size,\n value,\n min,\n max,\n step,\n positionPct,\n trackRef,\n onMoveClientX,\n onNudge,\n \"aria-label\": thumbAriaLabel,\n \"aria-labelledby\": thumbAriaLabelledBy,\n}: RangeThumbProps) {\n const onPointerDown = useCallback(\n (event: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) {\n return;\n }\n event.preventDefault();\n const track = trackRef.current;\n if (!track) {\n return;\n }\n /** Same capture strategy as `SliderThumb` for reliable dragging. */\n event.currentTarget.setPointerCapture(event.pointerId);\n const move = (e: PointerEvent) => {\n /** Parent maps X → new value for this thumb only. */\n onMoveClientX(e.clientX);\n };\n const up = () => {\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n };\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n },\n [disabled, onMoveClientX, trackRef],\n );\n\n const onKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (disabled) {\n return;\n }\n /**\n * Keyboard deltas mirror the single-thumb slider, but we express jumps\n * as `onNudge(min - value)` / `onNudge(max - value)` so Home/End move\n * **this** thumb to the domain edge without hardcoding sibling values.\n */\n const big = (max - min) / 10;\n let delta = 0;\n if (event.key === \"ArrowRight\" || event.key === \"ArrowUp\") {\n delta = step;\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowDown\") {\n delta = -step;\n } else if (event.key === \"PageUp\") {\n delta = big;\n } else if (event.key === \"PageDown\") {\n delta = -big;\n } else if (event.key === \"Home\") {\n event.preventDefault();\n onNudge(min - value);\n return;\n } else if (event.key === \"End\") {\n event.preventDefault();\n onNudge(max - value);\n return;\n } else {\n return;\n }\n event.preventDefault();\n onNudge(delta);\n },\n [disabled, max, min, onNudge, step, value],\n );\n\n return (\n <div\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n data-slot=\"range-slider-thumb\"\n aria-label={thumbAriaLabel}\n aria-labelledby={thumbAriaLabelledBy}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-disabled={disabled || undefined}\n className={cn(\n \"absolute top-1/2 z-10 -translate-x-1/2 -translate-y-1/2\",\n sliderThumbVariants({ size }),\n )}\n style={{ left: `${positionPct}%` }}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n />\n );\n}\n"]}
|