ixia-ui-react 1.7.0 → 2.0.0
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 +24 -1
- package/dist/accordion/index.d.ts +41 -0
- package/dist/accordion/index.js +142 -0
- package/dist/accordion/index.js.map +1 -0
- package/dist/alert/index.d.ts +22 -0
- package/dist/alert/index.js +1 -0
- package/dist/alert-Dcu9R8CY.js +73 -0
- package/dist/alert-Dcu9R8CY.js.map +1 -0
- package/dist/alert-dialog/index.d.ts +39 -0
- package/dist/alert-dialog/index.js +134 -0
- package/dist/alert-dialog/index.js.map +1 -0
- package/dist/autocomplete/index.d.ts +2 -0
- package/dist/autocomplete/index.js +1 -0
- package/dist/autocomplete-BfpWVO1l.js +169 -0
- package/dist/autocomplete-BfpWVO1l.js.map +1 -0
- package/dist/avatar/index.d.ts +2 -0
- package/dist/avatar/index.js +1 -0
- package/dist/avatar-Bp4gZh21.js +93 -0
- package/dist/avatar-Bp4gZh21.js.map +1 -0
- package/dist/badge/index.d.ts +2 -0
- package/dist/badge/index.js +1 -0
- package/dist/badge-Cl-9WTW-.js +160 -0
- package/dist/badge-Cl-9WTW-.js.map +1 -0
- package/dist/bento-box/index.d.ts +30 -0
- package/dist/bento-box/index.js +103 -0
- package/dist/bento-box/index.js.map +1 -0
- package/dist/breadcrumb/index.d.ts +18 -0
- package/dist/breadcrumb/index.js +58 -0
- package/dist/breadcrumb/index.js.map +1 -0
- package/dist/button/index.d.ts +3 -0
- package/dist/button/index.js +1 -0
- package/dist/button-BpUC-R1J.js +307 -0
- package/dist/button-BpUC-R1J.js.map +1 -0
- package/dist/button-group/index.d.ts +2 -0
- package/dist/button-group/index.js +1 -0
- package/dist/button-group-7azbqlcO.js +269 -0
- package/dist/button-group-7azbqlcO.js.map +1 -0
- package/dist/button.types-BFKrBCGd.d.ts +10 -0
- package/dist/calendar/index.d.ts +63 -0
- package/dist/calendar/index.js +292 -0
- package/dist/calendar/index.js.map +1 -0
- package/dist/chart/index.d.ts +87 -0
- package/dist/chart/index.js +262 -0
- package/dist/chart/index.js.map +1 -0
- package/dist/checkbox/index.d.ts +2 -0
- package/dist/checkbox/index.js +1 -0
- package/dist/checkbox-BuUZ1Lly.js +54 -0
- package/dist/checkbox-BuUZ1Lly.js.map +1 -0
- package/dist/checkbox-group/index.d.ts +6 -0
- package/dist/checkbox-group/index.js +17 -0
- package/dist/checkbox-group/index.js.map +1 -0
- package/dist/cn-BDi0DfT5.js +29 -0
- package/dist/cn-BDi0DfT5.js.map +1 -0
- package/dist/code-block/index.d.ts +50 -0
- package/dist/code-block/index.js +208 -0
- package/dist/code-block/index.js.map +1 -0
- package/dist/collapsible/index.d.ts +2 -0
- package/dist/collapsible/index.js +1 -0
- package/dist/collapsible-BVqrh0Q0.js +44 -0
- package/dist/collapsible-BVqrh0Q0.js.map +1 -0
- package/dist/color-channel-slider/index.d.ts +2 -0
- package/dist/color-channel-slider/index.js +1 -0
- package/dist/color-channel-slider-h8mUPJ35.js +70 -0
- package/dist/color-channel-slider-h8mUPJ35.js.map +1 -0
- package/dist/color-picker/index.d.ts +137 -0
- package/dist/color-picker/index.js +621 -0
- package/dist/color-picker/index.js.map +1 -0
- package/dist/combobox/index.d.ts +64 -0
- package/dist/combobox/index.js +289 -0
- package/dist/combobox/index.js.map +1 -0
- package/dist/context-menu/index.d.ts +49 -0
- package/dist/context-menu/index.js +166 -0
- package/dist/context-menu/index.js.map +1 -0
- package/dist/dialog/index.d.ts +36 -0
- package/dist/dialog/index.js +119 -0
- package/dist/dialog/index.js.map +1 -0
- package/dist/drawer/index.d.ts +31 -0
- package/dist/drawer/index.js +95 -0
- package/dist/drawer/index.js.map +1 -0
- package/dist/dropzone/index.d.ts +70 -0
- package/dist/dropzone/index.js +479 -0
- package/dist/dropzone/index.js.map +1 -0
- package/dist/field/index.d.ts +2 -0
- package/dist/field/index.js +1 -0
- package/dist/field-DTL7eA5y.js +254 -0
- package/dist/field-DTL7eA5y.js.map +1 -0
- package/dist/form/index.d.ts +220 -0
- package/dist/form/index.js +3 -0
- package/dist/form-BxMg796f.js +192 -0
- package/dist/form-BxMg796f.js.map +1 -0
- package/dist/has-single-element-child-DLGI0Dh2.js +12 -0
- package/dist/has-single-element-child-DLGI0Dh2.js.map +1 -0
- package/dist/hooks/index.d.ts +26 -0
- package/dist/hooks/index.js +1 -0
- package/dist/hooks-DUm-q_ig.js +68 -0
- package/dist/hooks-DUm-q_ig.js.map +1 -0
- package/dist/icon/index.d.ts +2 -0
- package/dist/icon/index.js +1 -0
- package/dist/icon-D3JWfCa2.js +85 -0
- package/dist/icon-D3JWfCa2.js.map +1 -0
- package/dist/icon-container/index.d.ts +10 -0
- package/dist/icon-container/index.js +64 -0
- package/dist/icon-container/index.js.map +1 -0
- package/dist/index-0ZQzIKoE.d.ts +11 -0
- package/dist/index-B3MK1QYh.d.ts +11 -0
- package/dist/index-BJVMIPq4.d.ts +54 -0
- package/dist/index-BsV-u_jc.d.ts +4 -0
- package/dist/index-BygR7cUT.d.ts +22 -0
- package/dist/index-BzTOLSgZ.d.ts +9 -0
- package/dist/index-C15xiG9O.d.ts +14 -0
- package/dist/index-C2zco6-C.d.ts +15 -0
- package/dist/index-CIDOd4Z8.d.ts +56 -0
- package/dist/index-CQti9gFb.d.ts +49 -0
- package/dist/index-CiE-Rqit.d.ts +70 -0
- package/dist/index-D1kkOg9k.d.ts +14 -0
- package/dist/index-DLfdAked.d.ts +34 -0
- package/dist/index-DMaW_XF1.d.ts +24 -0
- package/dist/index-Db_QGr6S.d.ts +5 -0
- package/dist/index-DdFxZ3Xr.d.ts +22 -0
- package/dist/index-DfNHJF0t.d.ts +33 -0
- package/dist/index-DyQYoAUf.d.ts +29 -0
- package/dist/index-N2CBSUDu.d.ts +14 -0
- package/dist/index-PuhTRMce.d.ts +11 -0
- package/dist/index-Wb_tILYa.d.ts +24 -0
- package/dist/index-bVyqfhJS.d.ts +4 -0
- package/dist/index-x4f8gnaI.d.ts +15 -0
- package/dist/input/index.d.ts +3 -0
- package/dist/input/index.js +1 -0
- package/dist/input-Laj6dwtK.js +179 -0
- package/dist/input-Laj6dwtK.js.map +1 -0
- package/dist/input-group/index.d.ts +2 -0
- package/dist/input-group/index.js +1 -0
- package/dist/input-group-CgdazGrY.js +111 -0
- package/dist/input-group-CgdazGrY.js.map +1 -0
- package/dist/input-otp/index.d.ts +13 -0
- package/dist/input-otp/index.js +44 -0
- package/dist/input-otp/index.js.map +1 -0
- package/dist/input.types-816rEVWU.d.ts +20 -0
- package/dist/input.types-D0gyoaQv.js +48 -0
- package/dist/input.types-D0gyoaQv.js.map +1 -0
- package/dist/kbd/index.d.ts +9 -0
- package/dist/kbd/index.js +25 -0
- package/dist/kbd/index.js.map +1 -0
- package/dist/label/index.d.ts +8 -0
- package/dist/label/index.js +1 -0
- package/dist/label-BgpayDvN.js +27 -0
- package/dist/label-BgpayDvN.js.map +1 -0
- package/dist/layer-tree/index.d.ts +728 -0
- package/dist/layer-tree/index.js +685 -0
- package/dist/layer-tree/index.js.map +1 -0
- package/dist/map/google/index.d.ts +143 -0
- package/dist/map/google/index.js +445 -0
- package/dist/map/google/index.js.map +1 -0
- package/dist/map/index.d.ts +94 -0
- package/dist/map/index.js +208 -0
- package/dist/map/index.js.map +1 -0
- package/dist/map.context-Dw1D7E8m.js +11 -0
- package/dist/map.context-Dw1D7E8m.js.map +1 -0
- package/dist/menu/index.d.ts +2 -0
- package/dist/menu/index.js +1 -0
- package/dist/menu-sf13cnGp.js +173 -0
- package/dist/menu-sf13cnGp.js.map +1 -0
- package/dist/menu-tone-DWBEHoX2.js +22 -0
- package/dist/menu-tone-DWBEHoX2.js.map +1 -0
- package/dist/meter/index.d.ts +2 -0
- package/dist/meter/index.js +1 -0
- package/dist/meter-HD5taq57.js +116 -0
- package/dist/meter-HD5taq57.js.map +1 -0
- package/dist/nav-bar/index.d.ts +25 -0
- package/dist/nav-bar/index.js +133 -0
- package/dist/nav-bar/index.js.map +1 -0
- package/dist/navigation-menu/index.d.ts +43 -0
- package/dist/navigation-menu/index.js +176 -0
- package/dist/navigation-menu/index.js.map +1 -0
- package/dist/number-field/index.d.ts +14 -0
- package/dist/number-field/index.js +116 -0
- package/dist/number-field/index.js.map +1 -0
- package/dist/popover/index.d.ts +2 -0
- package/dist/popover/index.js +1 -0
- package/dist/popover-B1s4xXrX.js +114 -0
- package/dist/popover-B1s4xXrX.js.map +1 -0
- package/dist/preview-card/index.d.ts +13 -0
- package/dist/preview-card/index.js +35 -0
- package/dist/preview-card/index.js.map +1 -0
- package/dist/profile/index.d.ts +21 -0
- package/dist/profile/index.js +52 -0
- package/dist/profile/index.js.map +1 -0
- package/dist/progress/index.d.ts +23 -0
- package/dist/progress/index.js +97 -0
- package/dist/progress/index.js.map +1 -0
- package/dist/radar-ping/index.d.ts +11 -0
- package/dist/radar-ping/index.js +49 -0
- package/dist/radar-ping/index.js.map +1 -0
- package/dist/radio-group/index.d.ts +2 -0
- package/dist/radio-group/index.js +1 -0
- package/dist/radio-group-Dj43u35Z.js +47 -0
- package/dist/radio-group-Dj43u35Z.js.map +1 -0
- package/dist/resizeable/index.d.ts +11 -0
- package/dist/resizeable/index.js +31 -0
- package/dist/resizeable/index.js.map +1 -0
- package/dist/scroll-area/index.d.ts +11 -0
- package/dist/scroll-area/index.js +51 -0
- package/dist/scroll-area/index.js.map +1 -0
- package/dist/select/index.d.ts +2 -0
- package/dist/select/index.js +1 -0
- package/dist/select-DncJXYim.js +159 -0
- package/dist/select-DncJXYim.js.map +1 -0
- package/dist/separator/index.d.ts +2 -0
- package/dist/separator/index.js +1 -0
- package/dist/separator-DgIQp1cB.js +97 -0
- package/dist/separator-DgIQp1cB.js.map +1 -0
- package/dist/sidebar/index.d.ts +80 -0
- package/dist/sidebar/index.js +334 -0
- package/dist/sidebar/index.js.map +1 -0
- package/dist/site-header/index.d.ts +22 -0
- package/dist/site-header/index.js +55 -0
- package/dist/site-header/index.js.map +1 -0
- package/dist/skeleton/index.d.ts +4 -0
- package/dist/skeleton/index.js +1 -0
- package/dist/skeleton-DSG3FWby.js +13 -0
- package/dist/skeleton-DSG3FWby.js.map +1 -0
- package/dist/slider/index.d.ts +2 -0
- package/dist/slider/index.js +1 -0
- package/dist/slider-D_XlV4OW.js +114 -0
- package/dist/slider-D_XlV4OW.js.map +1 -0
- package/dist/slider-group/index.d.ts +46 -0
- package/dist/slider-group/index.js +198 -0
- package/dist/slider-group/index.js.map +1 -0
- package/dist/styles.css +6 -17
- package/dist/switch/index.d.ts +2 -0
- package/dist/switch/index.js +1 -0
- package/dist/switch-DXHixGHe.js +23 -0
- package/dist/switch-DXHixGHe.js.map +1 -0
- package/dist/table/index.d.ts +920 -0
- package/dist/table/index.js +1544 -0
- package/dist/table/index.js.map +1 -0
- package/dist/tabs/index.d.ts +2 -0
- package/dist/tabs/index.js +1 -0
- package/dist/tabs-DTC7coap.js +270 -0
- package/dist/tabs-DTC7coap.js.map +1 -0
- package/dist/text-area/index.d.ts +2 -0
- package/dist/text-area/index.js +1 -0
- package/dist/text-area-H6HjKnv_.js +50 -0
- package/dist/text-area-H6HjKnv_.js.map +1 -0
- package/dist/themes/hogarth.css +0 -4
- package/dist/themes/mabel.css +0 -4
- package/dist/themes/maculata.css +0 -4
- package/dist/themes/monadelpha.css +0 -4
- package/dist/themes/venus.css +0 -4
- package/dist/themes/viridiflora.css +0 -4
- package/dist/toast/index.d.ts +65 -0
- package/dist/toast/index.js +216 -0
- package/dist/toast/index.js.map +1 -0
- package/dist/toggle/index.d.ts +2 -0
- package/dist/toggle/index.js +1 -0
- package/dist/toggle-ZT9thVmz.js +73 -0
- package/dist/toggle-ZT9thVmz.js.map +1 -0
- package/dist/toggle-group/index.d.ts +10 -0
- package/dist/toggle-group/index.js +63 -0
- package/dist/toggle-group/index.js.map +1 -0
- package/dist/toggle-group-context-CBNZEf1I.js +6 -0
- package/dist/toggle-group-context-CBNZEf1I.js.map +1 -0
- package/dist/tooltip/index.d.ts +18 -0
- package/dist/tooltip/index.js +1 -0
- package/dist/tooltip-B6z3tDbW.js +41 -0
- package/dist/tooltip-B6z3tDbW.js.map +1 -0
- package/dist/trim-text-children-CQRFg2fL.js +33 -0
- package/dist/trim-text-children-CQRFg2fL.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils-BI2x7nW5.js +5 -0
- package/dist/utils-BI2x7nW5.js.map +1 -0
- package/package.json +100 -31
- package/dist/index.d.ts +0 -7993
- package/dist/index.js +0 -17219
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { t as cn } from "./cn-BDi0DfT5.js";
|
|
2
|
+
import { n as TooltipTrigger, r as TooltipContent, t as Tooltip } from "./tooltip-B6z3tDbW.js";
|
|
3
|
+
import { cva } from "class-variance-authority";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import React from "react";
|
|
6
|
+
import { Slider } from "@base-ui/react";
|
|
7
|
+
// src/components/slider/slider-thumb.tsx
|
|
8
|
+
function SliderThumb({ className, ref, hide, ...props }) {
|
|
9
|
+
const [isHovering, setIsHovering] = React.useState(false), [isDragging, setIsDragging] = React.useState(false), thumbRef = React.useRef(null), setRefs = React.useCallback((node) => {
|
|
10
|
+
thumbRef.current = node;
|
|
11
|
+
if (typeof ref === "function") ref(node);
|
|
12
|
+
else if (ref) ref.current = node;
|
|
13
|
+
}, [ref]);
|
|
14
|
+
React.useEffect(() => {
|
|
15
|
+
if (!thumbRef.current) return;
|
|
16
|
+
const node = thumbRef.current, update = () => setIsDragging(node.hasAttribute("data-dragging")), observer = new MutationObserver(update);
|
|
17
|
+
update();
|
|
18
|
+
observer.observe(node, {
|
|
19
|
+
attributeFilter: ["data-dragging"],
|
|
20
|
+
attributes: true
|
|
21
|
+
});
|
|
22
|
+
return () => observer.disconnect();
|
|
23
|
+
}, []);
|
|
24
|
+
return /* @__PURE__ */ jsxs(Tooltip, {
|
|
25
|
+
open: isHovering || isDragging,
|
|
26
|
+
disabled: hide,
|
|
27
|
+
children: [/* @__PURE__ */ jsx(TooltipTrigger, {
|
|
28
|
+
delay: 0,
|
|
29
|
+
children: /* @__PURE__ */ jsx(Slider.Thumb, {
|
|
30
|
+
"data-slot": "slider-thumb",
|
|
31
|
+
className: cn("absolute aspect-square rounded-full bg-surface transition-[width,height,opacity] outline-none data-dragging:cursor-grabbing data-dragging:shadow-sm hover:[&:not([data-dragging])]:cursor-pointer", className),
|
|
32
|
+
onPointerEnter: () => setIsHovering(true),
|
|
33
|
+
onPointerLeave: () => setIsHovering(false),
|
|
34
|
+
ref: setRefs,
|
|
35
|
+
...props
|
|
36
|
+
})
|
|
37
|
+
}), /* @__PURE__ */ jsx(TooltipContent, {
|
|
38
|
+
sideOffset: 10,
|
|
39
|
+
children: /* @__PURE__ */ jsx(Slider.Value, {})
|
|
40
|
+
})]
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
// src/components/slider/slider.types.ts
|
|
44
|
+
const sliderVariants = cva("flex h-lg w-full items-center", {
|
|
45
|
+
defaultVariants: {
|
|
46
|
+
size: "medium",
|
|
47
|
+
tone: "brand"
|
|
48
|
+
},
|
|
49
|
+
variants: {
|
|
50
|
+
size: {
|
|
51
|
+
large: "[&_[data-slot='slider-thumb']]:size-md [&_[data-slot='slider-thumb']]:border-3 [&_[data-slot='slider-thumb'][data-dragging]]:size-lg [&_[data-slot='slider-track'][data-orientation='horizontal']]:h-xs [&_[data-slot='slider-track'][data-orientation='vertical']]:w-xs",
|
|
52
|
+
medium: "[&_[data-slot='slider-thumb']]:size-sm [&_[data-slot='slider-thumb']]:border-2 [&_[data-slot='slider-thumb'][data-dragging]]:size-md [&_[data-slot='slider-track'][data-orientation='horizontal']]:h-2xs [&_[data-slot='slider-track'][data-orientation='vertical']]:w-2xs",
|
|
53
|
+
small: "[&_[data-slot='slider-thumb']]:size-xs [&_[data-slot='slider-thumb']]:border [&_[data-slot='slider-thumb'][data-dragging]]:size-sm [&_[data-slot='slider-track'][data-orientation='horizontal']]:h-3xs [&_[data-slot='slider-track'][data-orientation='vertical']]:w-3xs"
|
|
54
|
+
},
|
|
55
|
+
tone: {
|
|
56
|
+
accent: "[&_[data-slot='slider-thumb']]:border-accent-default [&_[data-slot=slider-indicator]]:bg-accent-default [&_[data-slot=slider-track]]:bg-accent-container-high",
|
|
57
|
+
brand: "[&_[data-slot='slider-thumb']]:border-brand-default [&_[data-slot=slider-indicator]]:bg-brand-default [&_[data-slot=slider-track]]:bg-brand-container-high",
|
|
58
|
+
error: "[&_[data-slot='slider-thumb']]:border-error-default [&_[data-slot=slider-indicator]]:bg-error-default [&_[data-slot=slider-track]]:bg-error-container-high",
|
|
59
|
+
info: "[&_[data-slot='slider-thumb']]:border-info-default [&_[data-slot=slider-indicator]]:bg-info-default [&_[data-slot=slider-track]]:bg-info-container-high",
|
|
60
|
+
neutral: "[&_[data-slot='slider-thumb']]:border-neutral-default [&_[data-slot=slider-indicator]]:bg-neutral-default [&_[data-slot=slider-track]]:bg-neutral-container-high",
|
|
61
|
+
success: "[&_[data-slot='slider-thumb']]:border-success-default [&_[data-slot=slider-indicator]]:bg-success-default [&_[data-slot=slider-track]]:bg-success-container-high",
|
|
62
|
+
warning: "[&_[data-slot='slider-thumb']]:border-warning-default [&_[data-slot=slider-indicator]]:bg-warning-default [&_[data-slot=slider-track]]:bg-warning-container-high"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
// src/components/slider/slider.tsx
|
|
67
|
+
const MIN_DEFAULT = 0;
|
|
68
|
+
const MAX_DEFAULT = 100;
|
|
69
|
+
const STEP_DEFAULT = 1;
|
|
70
|
+
function resolveThumbValues(value, defaultValue, min) {
|
|
71
|
+
if (typeof value === "number") return [value];
|
|
72
|
+
if (Array.isArray(value)) return [...value];
|
|
73
|
+
if (typeof defaultValue === "number") return [defaultValue];
|
|
74
|
+
if (Array.isArray(defaultValue)) return [...defaultValue];
|
|
75
|
+
return [min];
|
|
76
|
+
}
|
|
77
|
+
function Slider$2({ size, tone, defaultValue, min = MIN_DEFAULT, max = MAX_DEFAULT, step = STEP_DEFAULT, showIndicator = true, showTooltip = true, showThumbOnHover = true, value, onValueChange, className, "aria-label": ariaLabel = "Slider", ref, ...props }) {
|
|
78
|
+
const thumbValues = resolveThumbValues(value, defaultValue, min);
|
|
79
|
+
return /* @__PURE__ */ jsx(Slider.Root, {
|
|
80
|
+
className: cn(sliderVariants({
|
|
81
|
+
size,
|
|
82
|
+
tone
|
|
83
|
+
}), className),
|
|
84
|
+
defaultValue,
|
|
85
|
+
"data-slot": "slider-root",
|
|
86
|
+
max,
|
|
87
|
+
min,
|
|
88
|
+
onValueChange,
|
|
89
|
+
ref,
|
|
90
|
+
step,
|
|
91
|
+
value,
|
|
92
|
+
...props,
|
|
93
|
+
children: /* @__PURE__ */ jsx(Slider.Control, {
|
|
94
|
+
className: "shrink-0 hover:cursor-pointer data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full",
|
|
95
|
+
children: /* @__PURE__ */ jsxs(Slider.Track, {
|
|
96
|
+
"data-slot": "slider-track",
|
|
97
|
+
className: cn("relative size-full rounded-full", !showThumbOnHover && "**:data-[slot='slider-thumb']:opacity-0 hover:**:data-[slot='slider-thumb']:opacity-100 active:**:data-[slot='slider-thumb']:opacity-100 data-dragging:**:data-[slot='slider-thumb']:opacity-100"),
|
|
98
|
+
children: [/* @__PURE__ */ jsx(Slider.Indicator, {
|
|
99
|
+
"data-slot": "slider-indicator",
|
|
100
|
+
className: cn("rounded-full", !showIndicator && "opacity-0")
|
|
101
|
+
}), [...thumbValues.keys()].map((index) => /* @__PURE__ */ jsx(SliderThumb, {
|
|
102
|
+
"aria-label": ariaLabel,
|
|
103
|
+
index,
|
|
104
|
+
hide: !showTooltip
|
|
105
|
+
}, index))]
|
|
106
|
+
})
|
|
107
|
+
})
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
// src/components/slider/index.ts
|
|
111
|
+
const Slider$1 = Object.assign(Slider$2, { Thumb: SliderThumb });
|
|
112
|
+
export { SliderThumb as n, Slider$1 as t };
|
|
113
|
+
|
|
114
|
+
//# sourceMappingURL=slider-D_XlV4OW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider-D_XlV4OW.js","names":["BaseSlider","Slider","BaseSlider","Slider","SliderRoot"],"sources":["../src/components/slider/slider-thumb.tsx","../src/components/slider/slider.types.ts","../src/components/slider/slider.tsx","../src/components/slider/index.ts"],"sourcesContent":["import { Slider as BaseSlider } from '@base-ui/react'\nimport React from 'react'\n\nimport { cn } from '@/utils/cn'\n\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip'\nimport type { SliderThumbProps } from './slider.types'\n\nexport function SliderThumb({ className, ref, hide, ...props }: SliderThumbProps) {\n const [isHovering, setIsHovering] = React.useState(false),\n [isDragging, setIsDragging] = React.useState(false),\n thumbRef = React.useRef<HTMLDivElement>(null),\n setRefs = React.useCallback(\n (node: HTMLDivElement | null) => {\n thumbRef.current = node\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ;(ref as { current: HTMLDivElement | null }).current = node\n }\n },\n [ref],\n )\n React.useEffect(() => {\n if (!thumbRef.current) {\n return undefined\n }\n const node = thumbRef.current,\n update = () => setIsDragging(node.hasAttribute('data-dragging')),\n observer = new MutationObserver(update)\n update()\n observer.observe(node, { attributeFilter: ['data-dragging'], attributes: true })\n return () => observer.disconnect()\n }, [])\n\n return (\n <Tooltip open={isHovering || isDragging} disabled={hide}>\n <TooltipTrigger delay={0}>\n <BaseSlider.Thumb\n data-slot=\"slider-thumb\"\n className={cn(\n 'absolute aspect-square rounded-full bg-surface transition-[width,height,opacity] outline-none data-dragging:cursor-grabbing data-dragging:shadow-sm hover:[&:not([data-dragging])]:cursor-pointer',\n className,\n )}\n onPointerEnter={() => setIsHovering(true)}\n onPointerLeave={() => setIsHovering(false)}\n ref={setRefs}\n {...props}\n />\n </TooltipTrigger>\n <TooltipContent sideOffset={10}>\n <BaseSlider.Value />\n </TooltipContent>\n </Tooltip>\n )\n}\n","import type { Slider as BaseSlider } from '@base-ui/react'\nimport { cva } from 'class-variance-authority'\nimport type { VariantProps } from 'class-variance-authority'\nimport type { ComponentProps } from 'react'\n\nconst sliderVariants = cva('flex h-lg w-full items-center', {\n defaultVariants: {\n size: 'medium',\n tone: 'brand',\n },\n variants: {\n size: {\n large:\n \"[&_[data-slot='slider-thumb']]:size-md [&_[data-slot='slider-thumb']]:border-3 [&_[data-slot='slider-thumb'][data-dragging]]:size-lg [&_[data-slot='slider-track'][data-orientation='horizontal']]:h-xs [&_[data-slot='slider-track'][data-orientation='vertical']]:w-xs\",\n medium:\n \"[&_[data-slot='slider-thumb']]:size-sm [&_[data-slot='slider-thumb']]:border-2 [&_[data-slot='slider-thumb'][data-dragging]]:size-md [&_[data-slot='slider-track'][data-orientation='horizontal']]:h-2xs [&_[data-slot='slider-track'][data-orientation='vertical']]:w-2xs\",\n small:\n \"[&_[data-slot='slider-thumb']]:size-xs [&_[data-slot='slider-thumb']]:border [&_[data-slot='slider-thumb'][data-dragging]]:size-sm [&_[data-slot='slider-track'][data-orientation='horizontal']]:h-3xs [&_[data-slot='slider-track'][data-orientation='vertical']]:w-3xs\",\n },\n tone: {\n accent:\n \"[&_[data-slot='slider-thumb']]:border-accent-default [&_[data-slot=slider-indicator]]:bg-accent-default [&_[data-slot=slider-track]]:bg-accent-container-high\",\n brand:\n \"[&_[data-slot='slider-thumb']]:border-brand-default [&_[data-slot=slider-indicator]]:bg-brand-default [&_[data-slot=slider-track]]:bg-brand-container-high\",\n error:\n \"[&_[data-slot='slider-thumb']]:border-error-default [&_[data-slot=slider-indicator]]:bg-error-default [&_[data-slot=slider-track]]:bg-error-container-high\",\n info: \"[&_[data-slot='slider-thumb']]:border-info-default [&_[data-slot=slider-indicator]]:bg-info-default [&_[data-slot=slider-track]]:bg-info-container-high\",\n neutral:\n \"[&_[data-slot='slider-thumb']]:border-neutral-default [&_[data-slot=slider-indicator]]:bg-neutral-default [&_[data-slot=slider-track]]:bg-neutral-container-high\",\n success:\n \"[&_[data-slot='slider-thumb']]:border-success-default [&_[data-slot=slider-indicator]]:bg-success-default [&_[data-slot=slider-track]]:bg-success-container-high\",\n warning:\n \"[&_[data-slot='slider-thumb']]:border-warning-default [&_[data-slot=slider-indicator]]:bg-warning-default [&_[data-slot=slider-track]]:bg-warning-container-high\",\n },\n },\n})\n\ntype SliderProps = ComponentProps<typeof BaseSlider.Root> &\n VariantProps<typeof sliderVariants> & {\n showIndicator?: boolean\n showThumbOnHover?: boolean\n showTooltip?: boolean\n }\ntype SliderThumbProps = ComponentProps<typeof BaseSlider.Thumb> & {\n hide?: boolean\n}\n\nexport type { SliderProps, SliderThumbProps }\nexport { sliderVariants }\n","import { Slider as BaseSlider } from '@base-ui/react'\n\nimport { cn } from '@/utils/cn'\n\nimport { SliderThumb } from './slider-thumb'\nimport { sliderVariants } from './slider.types'\nimport type { SliderProps } from './slider.types'\n\nconst MIN_DEFAULT = 0,\n MAX_DEFAULT = 100,\n STEP_DEFAULT = 1\n\nfunction resolveThumbValues(\n value: SliderProps['value'],\n defaultValue: SliderProps['defaultValue'],\n min: number,\n): number[] {\n if (typeof value === 'number') {\n return [value]\n }\n if (Array.isArray(value)) {\n return [...value]\n }\n if (typeof defaultValue === 'number') {\n return [defaultValue]\n }\n if (Array.isArray(defaultValue)) {\n return [...defaultValue]\n }\n return [min]\n}\n\nexport function Slider({\n size,\n tone,\n defaultValue,\n min = MIN_DEFAULT,\n max = MAX_DEFAULT,\n step = STEP_DEFAULT,\n showIndicator = true,\n showTooltip = true,\n showThumbOnHover = true,\n value,\n onValueChange,\n className,\n 'aria-label': ariaLabel = 'Slider',\n ref,\n ...props\n}: SliderProps) {\n const thumbValues = resolveThumbValues(value, defaultValue, min)\n\n return (\n <BaseSlider.Root\n className={cn(sliderVariants({ size, tone }), className)}\n defaultValue={defaultValue}\n data-slot=\"slider-root\"\n max={max}\n min={min}\n onValueChange={onValueChange}\n ref={ref}\n step={step}\n value={value}\n {...props}\n >\n <BaseSlider.Control className=\"shrink-0 hover:cursor-pointer data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full\">\n <BaseSlider.Track\n data-slot=\"slider-track\"\n className={cn(\n 'relative size-full rounded-full',\n !showThumbOnHover &&\n \"**:data-[slot='slider-thumb']:opacity-0 hover:**:data-[slot='slider-thumb']:opacity-100 active:**:data-[slot='slider-thumb']:opacity-100 data-dragging:**:data-[slot='slider-thumb']:opacity-100\",\n )}\n >\n <BaseSlider.Indicator\n data-slot=\"slider-indicator\"\n className={cn('rounded-full', !showIndicator && 'opacity-0')}\n />\n {[...thumbValues.keys()].map((index) => (\n <SliderThumb aria-label={ariaLabel} index={index} key={index} hide={!showTooltip} />\n ))}\n </BaseSlider.Track>\n </BaseSlider.Control>\n </BaseSlider.Root>\n )\n}\n","import { Slider as SliderRoot } from './slider'\nimport { SliderThumb } from './slider-thumb'\n\nconst Slider = Object.assign(SliderRoot, {\n Thumb: SliderThumb,\n})\n\nexport type { SliderProps, SliderThumbProps } from './slider.types'\nexport { SliderThumb } from './slider-thumb'\n\nexport { Slider }\n"],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { t as Input } from "../index-BsV-u_jc.js";
|
|
2
|
+
import { r as SliderProps } from "../index-BygR7cUT.js";
|
|
3
|
+
import React$1 from "react";
|
|
4
|
+
type SliderGroupProps = Omit<React.ComponentProps<'div'>, 'defaultValue' | 'onChange'> & {
|
|
5
|
+
defaultValue?: number | number[];
|
|
6
|
+
value?: number | number[];
|
|
7
|
+
onValueChange?: (value: number[]) => void;
|
|
8
|
+
};
|
|
9
|
+
interface SliderGroupConfig {
|
|
10
|
+
min: number;
|
|
11
|
+
max: number;
|
|
12
|
+
step: number;
|
|
13
|
+
defaultValue?: number | readonly number[];
|
|
14
|
+
}
|
|
15
|
+
interface SliderGroupContextValue {
|
|
16
|
+
value: number[] | undefined;
|
|
17
|
+
setValue: (value: number[]) => void;
|
|
18
|
+
min: number;
|
|
19
|
+
max: number;
|
|
20
|
+
step: number;
|
|
21
|
+
registerConfig: (config: SliderGroupConfig) => void;
|
|
22
|
+
}
|
|
23
|
+
type SliderGroupSliderProps = SliderProps;
|
|
24
|
+
type SliderDescriptionProps = React.ComponentProps<'p'>;
|
|
25
|
+
type SliderIconProps = React.ComponentProps<'div'>;
|
|
26
|
+
type SliderInputProps = Omit<React.ComponentProps<typeof Input>, 'value' | 'onChange' | 'type'>;
|
|
27
|
+
type SliderLabelProps = React.ComponentProps<'span'>;
|
|
28
|
+
type SliderValueProps = React.ComponentProps<'span'>;
|
|
29
|
+
export declare function SliderDescription({ className, ref, ...props }: SliderDescriptionProps): import("react").JSX.Element;
|
|
30
|
+
declare function SliderGroup$1({ className, ref, defaultValue, value: valueProp, onValueChange, ...props }: SliderGroupProps): React$1.JSX.Element;
|
|
31
|
+
export declare function SliderGroupSlider({ min, max, step, defaultValue, value, onValueChange, ...props }: SliderGroupSliderProps): React$1.JSX.Element;
|
|
32
|
+
export declare function SliderIcon({ className, ref, ...props }: SliderIconProps): import("react").JSX.Element;
|
|
33
|
+
export declare function SliderInput({ className, ref, ...props }: SliderInputProps): import("react").JSX.Element | undefined;
|
|
34
|
+
export declare function SliderLabel({ className, ref, ...props }: SliderLabelProps): import("react").JSX.Element;
|
|
35
|
+
export declare function SliderValue({ className, children, ref, ...props }: SliderValueProps): import("react").JSX.Element | undefined;
|
|
36
|
+
declare const SliderGroupContext: import("react").Context<SliderGroupContextValue | undefined>, useSliderGroupContext: () => SliderGroupContextValue | undefined, getPrimaryValue: (value: number[] | undefined, min: number) => number, withPrimaryValue: (value: number[] | undefined, next: number) => number[], areNumberArraysEqual: (first?: number[], second?: number[]) => boolean, useStableNumberArray: (next: number[] | undefined) => number[] | undefined;
|
|
37
|
+
declare const SliderGroup: typeof SliderGroup$1 & {
|
|
38
|
+
Description: typeof SliderDescription;
|
|
39
|
+
Icon: typeof SliderIcon;
|
|
40
|
+
Input: typeof SliderInput;
|
|
41
|
+
Label: typeof SliderLabel;
|
|
42
|
+
Slider: typeof SliderGroupSlider;
|
|
43
|
+
Value: typeof SliderValue;
|
|
44
|
+
};
|
|
45
|
+
export { type SliderDescriptionProps, SliderGroup, type SliderGroupProps, type SliderGroupSliderProps, type SliderIconProps, type SliderInputProps, type SliderLabelProps, type SliderValueProps, useSliderGroupContext };
|
|
46
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { t as cn } from "../cn-BDi0DfT5.js";
|
|
2
|
+
import { t as Input } from "../input-Laj6dwtK.js";
|
|
3
|
+
import { t as Slider } from "../slider-D_XlV4OW.js";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import React, { createContext, useContext, useState } from "react";
|
|
6
|
+
// src/components/slider-group/slider-description.tsx
|
|
7
|
+
function SliderDescription({ className, ref, ...props }) {
|
|
8
|
+
return /* @__PURE__ */ jsx("p", {
|
|
9
|
+
"data-slot": "slider-description",
|
|
10
|
+
className: cn("style-text-prose--1 text-on-surface-variant", className),
|
|
11
|
+
ref,
|
|
12
|
+
...props
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
// src/components/slider-group/slider-group-context.ts
|
|
16
|
+
const FIRST_THUMB_INDEX = 0;
|
|
17
|
+
const SliderGroupContext = createContext(void 0);
|
|
18
|
+
const useSliderGroupContext = () => useContext(SliderGroupContext);
|
|
19
|
+
const getPrimaryValue = (value, min) => value?.[FIRST_THUMB_INDEX] ?? min;
|
|
20
|
+
const withPrimaryValue = (value, next) => {
|
|
21
|
+
const result = [...value ?? []];
|
|
22
|
+
result[FIRST_THUMB_INDEX] = next;
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
const areNumberArraysEqual = (first, second) => first === second || first !== void 0 && second !== void 0 && first.length === second.length && first.every((item, index) => item === second[index]);
|
|
26
|
+
const useStableNumberArray = (next) => {
|
|
27
|
+
const [stable, setStable] = useState(next);
|
|
28
|
+
if (!areNumberArraysEqual(stable, next)) {
|
|
29
|
+
setStable(next);
|
|
30
|
+
return next;
|
|
31
|
+
}
|
|
32
|
+
return stable;
|
|
33
|
+
};
|
|
34
|
+
// src/components/slider-group/slider-group.tsx
|
|
35
|
+
const MIN_DEFAULT$1 = 0;
|
|
36
|
+
const MAX_DEFAULT$1 = 100;
|
|
37
|
+
const STEP_DEFAULT$1 = 1;
|
|
38
|
+
function toArray(value) {
|
|
39
|
+
if (value === void 0) return;
|
|
40
|
+
if (typeof value === "number") return [value];
|
|
41
|
+
return [...value];
|
|
42
|
+
}
|
|
43
|
+
function getControlledValue(isControlled, valueProp, internalValue) {
|
|
44
|
+
if (isControlled) return toArray(valueProp);
|
|
45
|
+
return internalValue;
|
|
46
|
+
}
|
|
47
|
+
function mergeConfig(prev, incoming) {
|
|
48
|
+
if (prev.min === incoming.min && prev.max === incoming.max && prev.step === incoming.step) return prev;
|
|
49
|
+
return {
|
|
50
|
+
max: incoming.max,
|
|
51
|
+
min: incoming.min,
|
|
52
|
+
step: incoming.step
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function SliderGroup$1({ className, ref, defaultValue, value: valueProp, onValueChange, ...props }) {
|
|
56
|
+
const isControlled = valueProp !== void 0, [internalValue, setInternalValue] = React.useState(() => toArray(defaultValue)), [config, setConfig] = React.useState({
|
|
57
|
+
max: MAX_DEFAULT$1,
|
|
58
|
+
min: MIN_DEFAULT$1,
|
|
59
|
+
step: STEP_DEFAULT$1
|
|
60
|
+
}), value = useStableNumberArray(getControlledValue(isControlled, valueProp, internalValue)), setValue = (next) => {
|
|
61
|
+
if (!isControlled) setInternalValue(next);
|
|
62
|
+
onValueChange?.(next);
|
|
63
|
+
}, registerConfig = (incoming) => {
|
|
64
|
+
setConfig((prev) => mergeConfig(prev, incoming));
|
|
65
|
+
if (incoming.defaultValue !== void 0) setInternalValue((prev) => prev ?? toArray(incoming.defaultValue));
|
|
66
|
+
}, context = {
|
|
67
|
+
max: config.max,
|
|
68
|
+
min: config.min,
|
|
69
|
+
registerConfig,
|
|
70
|
+
setValue,
|
|
71
|
+
step: config.step,
|
|
72
|
+
value
|
|
73
|
+
};
|
|
74
|
+
return /* @__PURE__ */ jsx(SliderGroupContext.Provider, {
|
|
75
|
+
value: context,
|
|
76
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
77
|
+
"data-slot": "slider-group",
|
|
78
|
+
className: cn("flex w-full flex-wrap items-center gap-x-sm", "**:data-[slot=slider-label]:basis-full", "**:data-[slot=slider-root]:flex-1", "**:data-[slot=slider-description]:basis-full", className),
|
|
79
|
+
ref,
|
|
80
|
+
...props
|
|
81
|
+
})
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// src/components/slider-group/slider-group-slider.tsx
|
|
85
|
+
const MIN_DEFAULT = 0;
|
|
86
|
+
const MAX_DEFAULT = 100;
|
|
87
|
+
const STEP_DEFAULT = 1;
|
|
88
|
+
function toSingleNumber(input) {
|
|
89
|
+
if (typeof input === "number") return input;
|
|
90
|
+
}
|
|
91
|
+
function toNumberArray(next) {
|
|
92
|
+
if (typeof next === "number") return [next];
|
|
93
|
+
return [...next];
|
|
94
|
+
}
|
|
95
|
+
function resolveInitialValue(defaultValue, value, min) {
|
|
96
|
+
if (Array.isArray(defaultValue)) return [...defaultValue];
|
|
97
|
+
return [toSingleNumber(value) ?? toSingleNumber(defaultValue) ?? min];
|
|
98
|
+
}
|
|
99
|
+
function getGroupValue(group, fallback) {
|
|
100
|
+
if (!group) return;
|
|
101
|
+
return group.value ?? fallback;
|
|
102
|
+
}
|
|
103
|
+
function SliderGroupSlider({ min = MIN_DEFAULT, max = MAX_DEFAULT, step = STEP_DEFAULT, defaultValue, value, onValueChange, ...props }) {
|
|
104
|
+
const group = useSliderGroupContext(), groupValue = useStableNumberArray(getGroupValue(group, resolveInitialValue(defaultValue, value, min))), handleValueChange = (...args) => {
|
|
105
|
+
const [next] = args;
|
|
106
|
+
group?.setValue(toNumberArray(next));
|
|
107
|
+
onValueChange?.(...args);
|
|
108
|
+
};
|
|
109
|
+
React.useEffect(() => {
|
|
110
|
+
group?.registerConfig({
|
|
111
|
+
defaultValue,
|
|
112
|
+
max,
|
|
113
|
+
min,
|
|
114
|
+
step
|
|
115
|
+
});
|
|
116
|
+
}, [
|
|
117
|
+
group,
|
|
118
|
+
min,
|
|
119
|
+
max,
|
|
120
|
+
step,
|
|
121
|
+
defaultValue
|
|
122
|
+
]);
|
|
123
|
+
return /* @__PURE__ */ jsx(Slider, {
|
|
124
|
+
min,
|
|
125
|
+
max,
|
|
126
|
+
step,
|
|
127
|
+
value: groupValue,
|
|
128
|
+
onValueChange: handleValueChange,
|
|
129
|
+
...props
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
// src/components/slider-group/slider-icon.tsx
|
|
133
|
+
function SliderIcon({ className, ref, ...props }) {
|
|
134
|
+
return /* @__PURE__ */ jsx("div", {
|
|
135
|
+
"data-slot": "slider-icon",
|
|
136
|
+
className: cn("[&>svg]:size-sm [&>svg]:shrink-0", className),
|
|
137
|
+
ref,
|
|
138
|
+
...props
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
// src/components/slider-group/slider-input.tsx
|
|
142
|
+
function clamp(value, min, max) {
|
|
143
|
+
return Math.min(max, Math.max(min, value));
|
|
144
|
+
}
|
|
145
|
+
function SliderInput({ className, ref, ...props }) {
|
|
146
|
+
const group = useSliderGroupContext(), handleChange = (event) => {
|
|
147
|
+
const raw = event.target.value, parsed = Number(raw);
|
|
148
|
+
if (raw === "" || Number.isNaN(parsed) || !group) return;
|
|
149
|
+
group.setValue(withPrimaryValue(group.value, clamp(parsed, group.min, group.max)));
|
|
150
|
+
};
|
|
151
|
+
if (!group) return;
|
|
152
|
+
return /* @__PURE__ */ jsx(Input, {
|
|
153
|
+
"aria-label": "Value",
|
|
154
|
+
"data-slot": "slider-input",
|
|
155
|
+
className: cn("w-[4rem]", className),
|
|
156
|
+
ref,
|
|
157
|
+
...props,
|
|
158
|
+
type: "number",
|
|
159
|
+
min: group.min,
|
|
160
|
+
max: group.max,
|
|
161
|
+
step: group.step,
|
|
162
|
+
value: getPrimaryValue(group.value, group.min),
|
|
163
|
+
onChange: handleChange
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
// src/components/slider-group/slider-label.tsx
|
|
167
|
+
function SliderLabel({ className, ref, ...props }) {
|
|
168
|
+
return /* @__PURE__ */ jsx("span", {
|
|
169
|
+
"data-slot": "slider-label",
|
|
170
|
+
className: cn("style-text-default-0", className),
|
|
171
|
+
ref,
|
|
172
|
+
...props
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
// src/components/slider-group/slider-value.tsx
|
|
176
|
+
function SliderValue({ className, children, ref, ...props }) {
|
|
177
|
+
const group = useSliderGroupContext();
|
|
178
|
+
if (!group) return;
|
|
179
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
180
|
+
"data-slot": "slider-value",
|
|
181
|
+
className: cn("min-w-lg text-right style-text-default--1 text-on-surface-variant", className),
|
|
182
|
+
ref,
|
|
183
|
+
...props,
|
|
184
|
+
children: [children, getPrimaryValue(group.value, group.min)]
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
// src/components/slider-group/index.ts
|
|
188
|
+
const SliderGroup = Object.assign(SliderGroup$1, {
|
|
189
|
+
Description: SliderDescription,
|
|
190
|
+
Icon: SliderIcon,
|
|
191
|
+
Input: SliderInput,
|
|
192
|
+
Label: SliderLabel,
|
|
193
|
+
Slider: SliderGroupSlider,
|
|
194
|
+
Value: SliderValue
|
|
195
|
+
});
|
|
196
|
+
export { SliderDescription, SliderGroup, SliderGroupSlider, SliderIcon, SliderInput, SliderLabel, SliderValue, useSliderGroupContext };
|
|
197
|
+
|
|
198
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["MIN_DEFAULT","MAX_DEFAULT","STEP_DEFAULT","SliderGroup","SliderGroupRoot"],"sources":["../../src/components/slider-group/slider-description.tsx","../../src/components/slider-group/slider-group-context.ts","../../src/components/slider-group/slider-group.tsx","../../src/components/slider-group/slider-group-slider.tsx","../../src/components/slider-group/slider-icon.tsx","../../src/components/slider-group/slider-input.tsx","../../src/components/slider-group/slider-label.tsx","../../src/components/slider-group/slider-value.tsx","../../src/components/slider-group/index.ts"],"sourcesContent":["import { cn } from '@/utils/cn'\n\nimport type { SliderDescriptionProps } from './slider-group.types'\n\nexport function SliderDescription({ className, ref, ...props }: SliderDescriptionProps) {\n return (\n <p\n data-slot=\"slider-description\"\n className={cn('style-text-prose--1 text-on-surface-variant', className)}\n ref={ref}\n {...props}\n />\n )\n}\n","import { createContext, useContext, useState } from 'react'\n\nimport type { SliderGroupContextValue } from './slider-group.types'\n\nconst FIRST_THUMB_INDEX = 0,\n SliderGroupContext = createContext<SliderGroupContextValue | undefined>(undefined),\n useSliderGroupContext = () => useContext(SliderGroupContext),\n getPrimaryValue = (value: number[] | undefined, min: number): number =>\n value?.[FIRST_THUMB_INDEX] ?? min,\n withPrimaryValue = (value: number[] | undefined, next: number): number[] => {\n const result = [...(value ?? [])]\n result[FIRST_THUMB_INDEX] = next\n return result\n },\n areNumberArraysEqual = (first?: number[], second?: number[]) =>\n first === second ||\n (first !== undefined &&\n second !== undefined &&\n first.length === second.length &&\n first.every((item, index) => item === second[index])),\n // Keeps a referentially-stable array while its contents are unchanged, so a new\n // Literal each render can't masquerade as a value change (which loops Base UI's controlled Slider).\n useStableNumberArray = (next: number[] | undefined) => {\n const [stable, setStable] = useState(next)\n if (!areNumberArraysEqual(stable, next)) {\n setStable(next)\n return next\n }\n return stable\n }\n\nexport {\n SliderGroupContext,\n useSliderGroupContext,\n getPrimaryValue,\n withPrimaryValue,\n areNumberArraysEqual,\n useStableNumberArray,\n}\n","import React from 'react'\n\nimport { cn } from '@/utils/cn'\n\nimport { SliderGroupContext, useStableNumberArray } from './slider-group-context'\nimport type { SliderGroupProps, SliderGroupConfig } from './slider-group.types'\n\nconst MIN_DEFAULT = 0,\n MAX_DEFAULT = 100,\n STEP_DEFAULT = 1\n\nfunction toArray(value: number | readonly number[] | undefined): number[] | undefined {\n if (value === undefined) {\n return undefined\n }\n if (typeof value === 'number') {\n return [value]\n }\n return [...value]\n}\n\nfunction getControlledValue(\n isControlled: boolean,\n valueProp: SliderGroupProps['value'],\n internalValue: number[] | undefined,\n): number[] | undefined {\n if (isControlled) {\n return toArray(valueProp)\n }\n return internalValue\n}\n\nfunction mergeConfig(\n prev: { min: number; max: number; step: number },\n incoming: SliderGroupConfig,\n) {\n if (prev.min === incoming.min && prev.max === incoming.max && prev.step === incoming.step) {\n return prev\n }\n return { max: incoming.max, min: incoming.min, step: incoming.step }\n}\n\nexport function SliderGroup({\n className,\n ref,\n defaultValue,\n value: valueProp,\n onValueChange,\n ...props\n}: SliderGroupProps) {\n const isControlled = valueProp !== undefined,\n [internalValue, setInternalValue] = React.useState<number[] | undefined>(() =>\n toArray(defaultValue),\n ),\n [config, setConfig] = React.useState({\n max: MAX_DEFAULT,\n min: MIN_DEFAULT,\n step: STEP_DEFAULT,\n }),\n value = useStableNumberArray(getControlledValue(isControlled, valueProp, internalValue)),\n setValue = (next: number[]) => {\n if (!isControlled) {\n setInternalValue(next)\n }\n onValueChange?.(next)\n },\n registerConfig = (incoming: SliderGroupConfig) => {\n setConfig((prev) => mergeConfig(prev, incoming))\n if (incoming.defaultValue !== undefined) {\n setInternalValue((prev) => prev ?? toArray(incoming.defaultValue))\n }\n },\n context = {\n max: config.max,\n min: config.min,\n registerConfig,\n setValue,\n step: config.step,\n value,\n }\n\n return (\n <SliderGroupContext.Provider value={context}>\n <div\n data-slot=\"slider-group\"\n className={cn(\n 'flex w-full flex-wrap items-center gap-x-sm',\n '**:data-[slot=slider-label]:basis-full',\n '**:data-[slot=slider-root]:flex-1',\n '**:data-[slot=slider-description]:basis-full',\n className,\n )}\n ref={ref}\n {...props}\n />\n </SliderGroupContext.Provider>\n )\n}\n","import React from 'react'\n\nimport { Slider } from '../slider'\nimport { useSliderGroupContext, useStableNumberArray } from './slider-group-context'\nimport type { SliderGroupContextValue, SliderGroupSliderProps } from './slider-group.types'\n\nconst MIN_DEFAULT = 0,\n MAX_DEFAULT = 100,\n STEP_DEFAULT = 1\n\nfunction toSingleNumber(input: number | readonly number[] | undefined): number | undefined {\n if (typeof input === 'number') {\n return input\n }\n return undefined\n}\n\nfunction toNumberArray(next: number | readonly number[]): number[] {\n if (typeof next === 'number') {\n return [next]\n }\n return [...next]\n}\n\nfunction resolveInitialValue(\n defaultValue: SliderGroupSliderProps['defaultValue'],\n value: SliderGroupSliderProps['value'],\n min: number,\n): number[] {\n if (Array.isArray(defaultValue)) {\n return [...defaultValue]\n }\n return [toSingleNumber(value) ?? toSingleNumber(defaultValue) ?? min]\n}\n\nfunction getGroupValue(\n group: SliderGroupContextValue | undefined,\n fallback: number[],\n): number[] | undefined {\n if (!group) {\n return undefined\n }\n return group.value ?? fallback\n}\n\n// The group-bound Slider: it reads/writes the shared value from SliderGroup and\n// Publishes its min/max/step so siblings (SliderInput, SliderValue) stay in sync.\nexport function SliderGroupSlider({\n min = MIN_DEFAULT,\n max = MAX_DEFAULT,\n step = STEP_DEFAULT,\n defaultValue,\n value,\n onValueChange,\n ...props\n}: SliderGroupSliderProps) {\n const group = useSliderGroupContext(),\n groupValue = useStableNumberArray(\n getGroupValue(group, resolveInitialValue(defaultValue, value, min)),\n ),\n handleValueChange = (\n ...args: Parameters<NonNullable<SliderGroupSliderProps['onValueChange']>>\n ) => {\n const [next] = args\n group?.setValue(toNumberArray(next))\n onValueChange?.(...args)\n }\n\n React.useEffect(() => {\n group?.registerConfig({ defaultValue, max, min, step })\n }, [group, min, max, step, defaultValue])\n\n return (\n <Slider\n min={min}\n max={max}\n step={step}\n value={groupValue}\n onValueChange={handleValueChange}\n {...props}\n />\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport type { SliderIconProps } from './slider-group.types'\n\nexport function SliderIcon({ className, ref, ...props }: SliderIconProps) {\n return (\n <div\n data-slot=\"slider-icon\"\n className={cn('[&>svg]:size-sm [&>svg]:shrink-0', className)}\n ref={ref}\n {...props}\n />\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport { Input } from '../input'\nimport { getPrimaryValue, useSliderGroupContext, withPrimaryValue } from './slider-group-context'\nimport type { SliderInputProps } from './slider-group.types'\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value))\n}\n\nexport function SliderInput({ className, ref, ...props }: SliderInputProps) {\n const group = useSliderGroupContext(),\n handleChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n const raw = event.target.value,\n parsed = Number(raw)\n if (raw === '' || Number.isNaN(parsed) || !group) {\n return\n }\n group.setValue(withPrimaryValue(group.value, clamp(parsed, group.min, group.max)))\n }\n\n if (!group) {\n return undefined\n }\n\n return (\n <Input\n aria-label=\"Value\"\n data-slot=\"slider-input\"\n className={cn('w-[4rem]', className)}\n ref={ref}\n {...props}\n type=\"number\"\n min={group.min}\n max={group.max}\n step={group.step}\n value={getPrimaryValue(group.value, group.min)}\n onChange={handleChange}\n />\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport type { SliderLabelProps } from './slider-group.types'\n\nexport function SliderLabel({ className, ref, ...props }: SliderLabelProps) {\n return (\n <span\n data-slot=\"slider-label\"\n className={cn('style-text-default-0', className)}\n ref={ref}\n {...props}\n />\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport { getPrimaryValue, useSliderGroupContext } from './slider-group-context'\nimport type { SliderValueProps } from './slider-group.types'\n\nexport function SliderValue({ className, children, ref, ...props }: SliderValueProps) {\n const group = useSliderGroupContext()\n if (!group) {\n return undefined\n }\n\n return (\n <span\n data-slot=\"slider-value\"\n className={cn('min-w-lg text-right style-text-default--1 text-on-surface-variant', className)}\n ref={ref}\n {...props}\n >\n {children}\n {getPrimaryValue(group.value, group.min)}\n </span>\n )\n}\n","import { SliderDescription } from './slider-description'\nimport { SliderGroup as SliderGroupRoot } from './slider-group'\nimport { SliderGroupSlider } from './slider-group-slider'\nimport { SliderIcon } from './slider-icon'\nimport { SliderInput } from './slider-input'\nimport { SliderLabel } from './slider-label'\nimport { SliderValue } from './slider-value'\n\nconst SliderGroup = Object.assign(SliderGroupRoot, {\n Description: SliderDescription,\n Icon: SliderIcon,\n Input: SliderInput,\n Label: SliderLabel,\n Slider: SliderGroupSlider,\n Value: SliderValue,\n})\n\nexport { SliderGroupSlider } from './slider-group-slider'\nexport { SliderInput } from './slider-input'\nexport { SliderValue } from './slider-value'\nexport { SliderLabel } from './slider-label'\nexport { SliderDescription } from './slider-description'\nexport { SliderIcon } from './slider-icon'\nexport { useSliderGroupContext } from './slider-group-context'\nexport type {\n SliderGroupProps,\n SliderGroupSliderProps,\n SliderInputProps,\n SliderValueProps,\n SliderLabelProps,\n SliderDescriptionProps,\n SliderIconProps,\n} from './slider-group.types'\n\nexport { SliderGroup }\n"],"mappings":"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"}
|
package/dist/styles.css
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
@import url('https://utopia.fyi/type/calculator?c=360,12,1.2,1240,16,1.25,5,2,&s=0.75|0.5|0.25,1.5|2|3|4|6,s-l&g=s,l,xl,12');
|
|
3
3
|
@import 'tailwindcss';
|
|
4
4
|
@import 'tw-animate-css';
|
|
5
|
-
@import '@daypicker/react/style.css';
|
|
6
5
|
@source ".";
|
|
7
6
|
|
|
8
7
|
@layer components {
|
|
@@ -44,7 +43,6 @@
|
|
|
44
43
|
--color-black: var(--ixia-black);
|
|
45
44
|
--color-brand-default: var(--ixia-brand-default);
|
|
46
45
|
--color-brand-muted: var(--ixia-brand-muted);
|
|
47
|
-
--color-brand-subtle: var(--ixia-brand-subtle);
|
|
48
46
|
--color-brand-on-default: var(--ixia-brand-on-default);
|
|
49
47
|
--color-brand-container: var(--ixia-brand-container);
|
|
50
48
|
--color-brand-container-low: var(--ixia-brand-container-low);
|
|
@@ -56,7 +54,6 @@
|
|
|
56
54
|
--color-brand-shadow: var(--ixia-brand-shadow);
|
|
57
55
|
--color-accent-default: var(--ixia-accent-default);
|
|
58
56
|
--color-accent-muted: var(--ixia-accent-muted);
|
|
59
|
-
--color-accent-subtle: var(--ixia-accent-subtle);
|
|
60
57
|
--color-accent-on-default: var(--ixia-accent-on-default);
|
|
61
58
|
--color-accent-container: var(--ixia-accent-container);
|
|
62
59
|
--color-accent-container-low: var(--ixia-accent-container-low);
|
|
@@ -68,7 +65,6 @@
|
|
|
68
65
|
--color-accent-shadow: var(--ixia-accent-shadow);
|
|
69
66
|
--color-neutral-default: var(--ixia-neutral-default);
|
|
70
67
|
--color-neutral-muted: var(--ixia-neutral-muted);
|
|
71
|
-
--color-neutral-subtle: var(--ixia-neutral-subtle);
|
|
72
68
|
--color-neutral-on-default: var(--ixia-neutral-on-default);
|
|
73
69
|
--color-neutral-container: var(--ixia-neutral-container);
|
|
74
70
|
--color-neutral-container-high: var(--ixia-neutral-container-high);
|
|
@@ -80,7 +76,6 @@
|
|
|
80
76
|
--color-neutral-shadow: var(--ixia-neutral-shadow);
|
|
81
77
|
--color-error-default: var(--ixia-error-default);
|
|
82
78
|
--color-error-muted: var(--ixia-error-muted);
|
|
83
|
-
--color-error-subtle: var(--ixia-error-subtle);
|
|
84
79
|
--color-error-on-default: var(--ixia-error-on-default);
|
|
85
80
|
--color-error-container-low: var(--ixia-error-container-low);
|
|
86
81
|
--color-error-container: var(--ixia-error-container);
|
|
@@ -92,7 +87,6 @@
|
|
|
92
87
|
--color-error-shadow: var(--ixia-error-shadow);
|
|
93
88
|
--color-info-default: var(--ixia-info-default);
|
|
94
89
|
--color-info-muted: var(--ixia-info-muted);
|
|
95
|
-
--color-info-subtle: var(--ixia-info-subtle);
|
|
96
90
|
--color-info-on-default: var(--ixia-info-on-default);
|
|
97
91
|
--color-info-container: var(--ixia-info-container);
|
|
98
92
|
--color-info-container-low: var(--ixia-info-container-low);
|
|
@@ -104,7 +98,6 @@
|
|
|
104
98
|
--color-info-shadow: var(--ixia-info-shadow);
|
|
105
99
|
--color-success-default: var(--ixia-success-default);
|
|
106
100
|
--color-success-muted: var(--ixia-success-muted);
|
|
107
|
-
--color-success-subtle: var(--ixia-success-subtle);
|
|
108
101
|
--color-success-on-default: var(--ixia-success-on-default);
|
|
109
102
|
--color-success-container: var(--ixia-success-container);
|
|
110
103
|
--color-success-container-low: var(--ixia-success-container-low);
|
|
@@ -116,7 +109,6 @@
|
|
|
116
109
|
--color-success-shadow: var(--ixia-success-shadow);
|
|
117
110
|
--color-warning-default: var(--ixia-warning-default);
|
|
118
111
|
--color-warning-muted: var(--ixia-warning-muted);
|
|
119
|
-
--color-warning-subtle: var(--ixia-warning-subtle);
|
|
120
112
|
--color-warning-on-default: var(--ixia-warning-on-default);
|
|
121
113
|
--color-warning-container: var(--ixia-warning-container);
|
|
122
114
|
--color-warning-container-low: var(--ixia-warning-container-low);
|
|
@@ -462,7 +454,6 @@
|
|
|
462
454
|
--ixia-black: var(--black);
|
|
463
455
|
--ixia-brand-default: light-dark(var(--orange-600), var(--orange-400));
|
|
464
456
|
--ixia-brand-muted: light-dark(var(--orange-700), var(--orange-300));
|
|
465
|
-
--ixia-brand-subtle: light-dark(var(--orange-100), var(--orange-950));
|
|
466
457
|
--ixia-brand-on-default: light-dark(var(--white), var(--neutral-950));
|
|
467
458
|
--ixia-brand-container: light-dark(var(--orange-100), var(--orange-950));
|
|
468
459
|
--ixia-brand-container-low: light-dark(var(--white), var(--neutral-950));
|
|
@@ -482,7 +473,6 @@
|
|
|
482
473
|
--ixia-brand-gradient-subtle: linear-gradient(135deg, #df640029, #eeac4a1f, #f9dc8414);
|
|
483
474
|
--ixia-accent-default: light-dark(var(--teal-600), var(--teal-400));
|
|
484
475
|
--ixia-accent-muted: light-dark(var(--teal-700), var(--teal-300));
|
|
485
|
-
--ixia-accent-subtle: light-dark(var(--teal-100), var(--teal-950));
|
|
486
476
|
--ixia-accent-on-default: light-dark(var(--white), var(--neutral-950));
|
|
487
477
|
--ixia-accent-container: light-dark(var(--teal-100), var(--teal-950));
|
|
488
478
|
--ixia-accent-container-low: light-dark(var(--white), var(--neutral-950));
|
|
@@ -494,12 +484,11 @@
|
|
|
494
484
|
--ixia-accent-shadow: light-dark(#006d6540, #62d0c259);
|
|
495
485
|
--ixia-neutral-default: light-dark(var(--neutral-900), var(--neutral-50));
|
|
496
486
|
--ixia-neutral-muted: light-dark(var(--neutral-700), var(--neutral-200));
|
|
497
|
-
--ixia-neutral-
|
|
487
|
+
--ixia-neutral-on-default: light-dark(var(--white), var(--neutral-950));
|
|
488
|
+
--ixia-neutral-container: light-dark(
|
|
498
489
|
var(--neutral-200),
|
|
499
490
|
color-mix(in srgb, var(--neutral-900) 20%, var(--neutral-800))
|
|
500
491
|
);
|
|
501
|
-
--ixia-neutral-on-default: light-dark(var(--white), var(--neutral-950));
|
|
502
|
-
--ixia-neutral-container: light-dark(var(--neutral-100), var(--neutral-800));
|
|
503
492
|
--ixia-neutral-container-low: light-dark(var(--neutral-100), var(--neutral-900));
|
|
504
493
|
--ixia-neutral-container-high: light-dark(
|
|
505
494
|
var(--neutral-300),
|
|
@@ -512,7 +501,6 @@
|
|
|
512
501
|
--ixia-neutral-shadow: light-dark(#14110f2e, #00000059);
|
|
513
502
|
--ixia-error-default: light-dark(var(--red-600), var(--red-400));
|
|
514
503
|
--ixia-error-muted: light-dark(var(--red-700), var(--red-300));
|
|
515
|
-
--ixia-error-subtle: light-dark(var(--red-100), var(--red-950));
|
|
516
504
|
--ixia-error-on-default: light-dark(var(--white), var(--neutral-950));
|
|
517
505
|
--ixia-error-container: light-dark(var(--red-100), var(--red-950));
|
|
518
506
|
--ixia-error-container-low: light-dark(var(--white), var(--neutral-950));
|
|
@@ -524,7 +512,6 @@
|
|
|
524
512
|
--ixia-error-shadow: light-dark(#af0a2940, #ff9b9359);
|
|
525
513
|
--ixia-info-default: light-dark(var(--blue-600), var(--blue-400));
|
|
526
514
|
--ixia-info-muted: light-dark(var(--blue-700), var(--blue-300));
|
|
527
|
-
--ixia-info-subtle: light-dark(var(--blue-100), var(--blue-950));
|
|
528
515
|
--ixia-info-on-default: light-dark(var(--white), var(--neutral-950));
|
|
529
516
|
--ixia-info-container: light-dark(var(--blue-100), var(--blue-950));
|
|
530
517
|
--ixia-info-container-low: light-dark(var(--white), var(--neutral-950));
|
|
@@ -536,7 +523,6 @@
|
|
|
536
523
|
--ixia-info-shadow: light-dark(#2358b440, #8ebdff59);
|
|
537
524
|
--ixia-success-default: light-dark(var(--green-600), var(--green-400));
|
|
538
525
|
--ixia-success-muted: light-dark(var(--green-700), var(--green-300));
|
|
539
|
-
--ixia-success-subtle: light-dark(var(--green-100), var(--green-950));
|
|
540
526
|
--ixia-success-on-default: light-dark(var(--white), var(--neutral-950));
|
|
541
527
|
--ixia-success-container: light-dark(var(--green-100), var(--green-950));
|
|
542
528
|
--ixia-success-container-low: light-dark(var(--white), var(--neutral-950));
|
|
@@ -548,7 +534,6 @@
|
|
|
548
534
|
--ixia-success-shadow: light-dark(#00713140, #78d28d59);
|
|
549
535
|
--ixia-warning-default: light-dark(var(--amber-600), var(--amber-400));
|
|
550
536
|
--ixia-warning-muted: light-dark(var(--amber-700), var(--amber-300));
|
|
551
|
-
--ixia-warning-subtle: light-dark(var(--amber-100), var(--amber-950));
|
|
552
537
|
--ixia-warning-on-default: light-dark(var(--white), var(--neutral-950));
|
|
553
538
|
--ixia-warning-container: light-dark(var(--amber-100), var(--amber-950));
|
|
554
539
|
--ixia-warning-container-low: light-dark(var(--white), var(--neutral-950));
|
|
@@ -695,6 +680,10 @@
|
|
|
695
680
|
height: 100%;
|
|
696
681
|
}
|
|
697
682
|
}
|
|
683
|
+
/* Centres text on cap-height/baseline instead of rounded font metrics, which drift at fluid sizes and zoom levels. */
|
|
684
|
+
@utility text-box-trim {
|
|
685
|
+
text-box: trim-both cap alphabetic;
|
|
686
|
+
}
|
|
698
687
|
@utility shadow-* {
|
|
699
688
|
box-shadow: --value(--shadow-*) var(--ixia-shadow);
|
|
700
689
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { t as Switch } from "../switch-DXHixGHe.js";
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { t as cn } from "./cn-BDi0DfT5.js";
|
|
2
|
+
import { t as Label } from "./label-BgpayDvN.js";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { Switch } from "@base-ui/react/switch";
|
|
5
|
+
// src/components/switch/switch.tsx
|
|
6
|
+
function Switch$1({ children, className, ref, ...props }) {
|
|
7
|
+
return /* @__PURE__ */ jsxs(Label, {
|
|
8
|
+
className: "flex items-center gap-xs",
|
|
9
|
+
children: [/* @__PURE__ */ jsx(Switch.Root, {
|
|
10
|
+
className: cn("group relative flex h-lg w-2xl items-center rounded-full bg-surface-low bg-size-[6.5rem_100%] outline-2 outline-transparent transition-colors ease-[cubic-bezier(0.26,0.75,0.38,0.45)] before:absolute before:rounded-full hover:cursor-pointer hover:not-disabled:outline-accent-border-strong disabled:pointer-events-none disabled:opacity-50 data-checked:bg-accent-default data-disabled:pointer-events-none data-disabled:opacity-50", className),
|
|
11
|
+
ref,
|
|
12
|
+
...props,
|
|
13
|
+
children: /* @__PURE__ */ jsx(Switch.Thumb, { className: "size-md translate-x-[calc(0%+3px)] rounded-full shadow-2xs transition-transform duration-500 ease-[cubic-bezier(0.68,-0.55,0.27,1.55)] data-checked:translate-x-[calc(100%--7px)] data-checked:bg-accent-on-default data-unchecked:bg-white" })
|
|
14
|
+
}), children != void 0 && /* @__PURE__ */ jsx("span", {
|
|
15
|
+
"data-slot": "switch-label",
|
|
16
|
+
className: "leading-none text-box-trim",
|
|
17
|
+
children
|
|
18
|
+
})]
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
export { Switch$1 as t };
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=switch-DXHixGHe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch-DXHixGHe.js","names":["Switch","BaseSwitch"],"sources":["../src/components/switch/switch.tsx"],"sourcesContent":["import { Switch as BaseSwitch } from '@base-ui/react/switch'\n\nimport { cn } from '@/utils/cn'\n\nimport { Label } from '../label'\nimport type { SwitchProps } from './switch.types'\n\nexport function Switch({ children, className, ref, ...props }: SwitchProps) {\n return (\n <Label className=\"flex items-center gap-xs\">\n <BaseSwitch.Root\n className={cn(\n 'group relative flex h-lg w-2xl items-center rounded-full bg-surface-low bg-size-[6.5rem_100%] outline-2 outline-transparent transition-colors ease-[cubic-bezier(0.26,0.75,0.38,0.45)] before:absolute before:rounded-full hover:cursor-pointer hover:not-disabled:outline-accent-border-strong disabled:pointer-events-none disabled:opacity-50 data-checked:bg-accent-default data-disabled:pointer-events-none data-disabled:opacity-50',\n className,\n )}\n ref={ref}\n {...props}\n >\n <BaseSwitch.Thumb className=\"size-md translate-x-[calc(0%+3px)] rounded-full shadow-2xs transition-transform duration-500 ease-[cubic-bezier(0.68,-0.55,0.27,1.55)] data-checked:translate-x-[calc(100%--7px)] data-checked:bg-accent-on-default data-unchecked:bg-white\" />\n </BaseSwitch.Root>\n {children != undefined && (\n <span data-slot=\"switch-label\" className=\"leading-none text-box-trim\">\n {children}\n </span>\n )}\n </Label>\n )\n}\n"],"mappings":";;;;;AAOA,SAAgBA,SAAO,EAAE,UAAU,WAAW,KAAK,GAAG,SAAsB;CAC1E,OACE,qBAAC,OAAD;EAAO,WAAU;EAAjB,UAAA,CACE,oBAACC,OAAW,MAAZ;GACE,WAAW,GACT,8aACA,SACF;GACK;GACL,GAAI;GAEJ,UAAA,oBAACA,OAAW,OAAZ,EAAkB,WAAU,8OAA+O,CAAA;EAC5P,CAAA,GAChB,YAAY,KAAA,KACX,oBAAC,QAAD;GAAM,aAAU;GAAe,WAAU;GACtC;EACG,CAAA,CAEH;;AAEX"}
|