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.
Files changed (276) hide show
  1. package/README.md +24 -1
  2. package/dist/accordion/index.d.ts +41 -0
  3. package/dist/accordion/index.js +142 -0
  4. package/dist/accordion/index.js.map +1 -0
  5. package/dist/alert/index.d.ts +22 -0
  6. package/dist/alert/index.js +1 -0
  7. package/dist/alert-Dcu9R8CY.js +73 -0
  8. package/dist/alert-Dcu9R8CY.js.map +1 -0
  9. package/dist/alert-dialog/index.d.ts +39 -0
  10. package/dist/alert-dialog/index.js +134 -0
  11. package/dist/alert-dialog/index.js.map +1 -0
  12. package/dist/autocomplete/index.d.ts +2 -0
  13. package/dist/autocomplete/index.js +1 -0
  14. package/dist/autocomplete-BfpWVO1l.js +169 -0
  15. package/dist/autocomplete-BfpWVO1l.js.map +1 -0
  16. package/dist/avatar/index.d.ts +2 -0
  17. package/dist/avatar/index.js +1 -0
  18. package/dist/avatar-Bp4gZh21.js +93 -0
  19. package/dist/avatar-Bp4gZh21.js.map +1 -0
  20. package/dist/badge/index.d.ts +2 -0
  21. package/dist/badge/index.js +1 -0
  22. package/dist/badge-Cl-9WTW-.js +160 -0
  23. package/dist/badge-Cl-9WTW-.js.map +1 -0
  24. package/dist/bento-box/index.d.ts +30 -0
  25. package/dist/bento-box/index.js +103 -0
  26. package/dist/bento-box/index.js.map +1 -0
  27. package/dist/breadcrumb/index.d.ts +18 -0
  28. package/dist/breadcrumb/index.js +58 -0
  29. package/dist/breadcrumb/index.js.map +1 -0
  30. package/dist/button/index.d.ts +3 -0
  31. package/dist/button/index.js +1 -0
  32. package/dist/button-BpUC-R1J.js +307 -0
  33. package/dist/button-BpUC-R1J.js.map +1 -0
  34. package/dist/button-group/index.d.ts +2 -0
  35. package/dist/button-group/index.js +1 -0
  36. package/dist/button-group-7azbqlcO.js +269 -0
  37. package/dist/button-group-7azbqlcO.js.map +1 -0
  38. package/dist/button.types-BFKrBCGd.d.ts +10 -0
  39. package/dist/calendar/index.d.ts +63 -0
  40. package/dist/calendar/index.js +292 -0
  41. package/dist/calendar/index.js.map +1 -0
  42. package/dist/chart/index.d.ts +87 -0
  43. package/dist/chart/index.js +262 -0
  44. package/dist/chart/index.js.map +1 -0
  45. package/dist/checkbox/index.d.ts +2 -0
  46. package/dist/checkbox/index.js +1 -0
  47. package/dist/checkbox-BuUZ1Lly.js +54 -0
  48. package/dist/checkbox-BuUZ1Lly.js.map +1 -0
  49. package/dist/checkbox-group/index.d.ts +6 -0
  50. package/dist/checkbox-group/index.js +17 -0
  51. package/dist/checkbox-group/index.js.map +1 -0
  52. package/dist/cn-BDi0DfT5.js +29 -0
  53. package/dist/cn-BDi0DfT5.js.map +1 -0
  54. package/dist/code-block/index.d.ts +50 -0
  55. package/dist/code-block/index.js +208 -0
  56. package/dist/code-block/index.js.map +1 -0
  57. package/dist/collapsible/index.d.ts +2 -0
  58. package/dist/collapsible/index.js +1 -0
  59. package/dist/collapsible-BVqrh0Q0.js +44 -0
  60. package/dist/collapsible-BVqrh0Q0.js.map +1 -0
  61. package/dist/color-channel-slider/index.d.ts +2 -0
  62. package/dist/color-channel-slider/index.js +1 -0
  63. package/dist/color-channel-slider-h8mUPJ35.js +70 -0
  64. package/dist/color-channel-slider-h8mUPJ35.js.map +1 -0
  65. package/dist/color-picker/index.d.ts +137 -0
  66. package/dist/color-picker/index.js +621 -0
  67. package/dist/color-picker/index.js.map +1 -0
  68. package/dist/combobox/index.d.ts +64 -0
  69. package/dist/combobox/index.js +289 -0
  70. package/dist/combobox/index.js.map +1 -0
  71. package/dist/context-menu/index.d.ts +49 -0
  72. package/dist/context-menu/index.js +166 -0
  73. package/dist/context-menu/index.js.map +1 -0
  74. package/dist/dialog/index.d.ts +36 -0
  75. package/dist/dialog/index.js +119 -0
  76. package/dist/dialog/index.js.map +1 -0
  77. package/dist/drawer/index.d.ts +31 -0
  78. package/dist/drawer/index.js +95 -0
  79. package/dist/drawer/index.js.map +1 -0
  80. package/dist/dropzone/index.d.ts +70 -0
  81. package/dist/dropzone/index.js +479 -0
  82. package/dist/dropzone/index.js.map +1 -0
  83. package/dist/field/index.d.ts +2 -0
  84. package/dist/field/index.js +1 -0
  85. package/dist/field-DTL7eA5y.js +254 -0
  86. package/dist/field-DTL7eA5y.js.map +1 -0
  87. package/dist/form/index.d.ts +220 -0
  88. package/dist/form/index.js +3 -0
  89. package/dist/form-BxMg796f.js +192 -0
  90. package/dist/form-BxMg796f.js.map +1 -0
  91. package/dist/has-single-element-child-DLGI0Dh2.js +12 -0
  92. package/dist/has-single-element-child-DLGI0Dh2.js.map +1 -0
  93. package/dist/hooks/index.d.ts +26 -0
  94. package/dist/hooks/index.js +1 -0
  95. package/dist/hooks-DUm-q_ig.js +68 -0
  96. package/dist/hooks-DUm-q_ig.js.map +1 -0
  97. package/dist/icon/index.d.ts +2 -0
  98. package/dist/icon/index.js +1 -0
  99. package/dist/icon-D3JWfCa2.js +85 -0
  100. package/dist/icon-D3JWfCa2.js.map +1 -0
  101. package/dist/icon-container/index.d.ts +10 -0
  102. package/dist/icon-container/index.js +64 -0
  103. package/dist/icon-container/index.js.map +1 -0
  104. package/dist/index-0ZQzIKoE.d.ts +11 -0
  105. package/dist/index-B3MK1QYh.d.ts +11 -0
  106. package/dist/index-BJVMIPq4.d.ts +54 -0
  107. package/dist/index-BsV-u_jc.d.ts +4 -0
  108. package/dist/index-BygR7cUT.d.ts +22 -0
  109. package/dist/index-BzTOLSgZ.d.ts +9 -0
  110. package/dist/index-C15xiG9O.d.ts +14 -0
  111. package/dist/index-C2zco6-C.d.ts +15 -0
  112. package/dist/index-CIDOd4Z8.d.ts +56 -0
  113. package/dist/index-CQti9gFb.d.ts +49 -0
  114. package/dist/index-CiE-Rqit.d.ts +70 -0
  115. package/dist/index-D1kkOg9k.d.ts +14 -0
  116. package/dist/index-DLfdAked.d.ts +34 -0
  117. package/dist/index-DMaW_XF1.d.ts +24 -0
  118. package/dist/index-Db_QGr6S.d.ts +5 -0
  119. package/dist/index-DdFxZ3Xr.d.ts +22 -0
  120. package/dist/index-DfNHJF0t.d.ts +33 -0
  121. package/dist/index-DyQYoAUf.d.ts +29 -0
  122. package/dist/index-N2CBSUDu.d.ts +14 -0
  123. package/dist/index-PuhTRMce.d.ts +11 -0
  124. package/dist/index-Wb_tILYa.d.ts +24 -0
  125. package/dist/index-bVyqfhJS.d.ts +4 -0
  126. package/dist/index-x4f8gnaI.d.ts +15 -0
  127. package/dist/input/index.d.ts +3 -0
  128. package/dist/input/index.js +1 -0
  129. package/dist/input-Laj6dwtK.js +179 -0
  130. package/dist/input-Laj6dwtK.js.map +1 -0
  131. package/dist/input-group/index.d.ts +2 -0
  132. package/dist/input-group/index.js +1 -0
  133. package/dist/input-group-CgdazGrY.js +111 -0
  134. package/dist/input-group-CgdazGrY.js.map +1 -0
  135. package/dist/input-otp/index.d.ts +13 -0
  136. package/dist/input-otp/index.js +44 -0
  137. package/dist/input-otp/index.js.map +1 -0
  138. package/dist/input.types-816rEVWU.d.ts +20 -0
  139. package/dist/input.types-D0gyoaQv.js +48 -0
  140. package/dist/input.types-D0gyoaQv.js.map +1 -0
  141. package/dist/kbd/index.d.ts +9 -0
  142. package/dist/kbd/index.js +25 -0
  143. package/dist/kbd/index.js.map +1 -0
  144. package/dist/label/index.d.ts +8 -0
  145. package/dist/label/index.js +1 -0
  146. package/dist/label-BgpayDvN.js +27 -0
  147. package/dist/label-BgpayDvN.js.map +1 -0
  148. package/dist/layer-tree/index.d.ts +728 -0
  149. package/dist/layer-tree/index.js +685 -0
  150. package/dist/layer-tree/index.js.map +1 -0
  151. package/dist/map/google/index.d.ts +143 -0
  152. package/dist/map/google/index.js +445 -0
  153. package/dist/map/google/index.js.map +1 -0
  154. package/dist/map/index.d.ts +94 -0
  155. package/dist/map/index.js +208 -0
  156. package/dist/map/index.js.map +1 -0
  157. package/dist/map.context-Dw1D7E8m.js +11 -0
  158. package/dist/map.context-Dw1D7E8m.js.map +1 -0
  159. package/dist/menu/index.d.ts +2 -0
  160. package/dist/menu/index.js +1 -0
  161. package/dist/menu-sf13cnGp.js +173 -0
  162. package/dist/menu-sf13cnGp.js.map +1 -0
  163. package/dist/menu-tone-DWBEHoX2.js +22 -0
  164. package/dist/menu-tone-DWBEHoX2.js.map +1 -0
  165. package/dist/meter/index.d.ts +2 -0
  166. package/dist/meter/index.js +1 -0
  167. package/dist/meter-HD5taq57.js +116 -0
  168. package/dist/meter-HD5taq57.js.map +1 -0
  169. package/dist/nav-bar/index.d.ts +25 -0
  170. package/dist/nav-bar/index.js +133 -0
  171. package/dist/nav-bar/index.js.map +1 -0
  172. package/dist/navigation-menu/index.d.ts +43 -0
  173. package/dist/navigation-menu/index.js +176 -0
  174. package/dist/navigation-menu/index.js.map +1 -0
  175. package/dist/number-field/index.d.ts +14 -0
  176. package/dist/number-field/index.js +116 -0
  177. package/dist/number-field/index.js.map +1 -0
  178. package/dist/popover/index.d.ts +2 -0
  179. package/dist/popover/index.js +1 -0
  180. package/dist/popover-B1s4xXrX.js +114 -0
  181. package/dist/popover-B1s4xXrX.js.map +1 -0
  182. package/dist/preview-card/index.d.ts +13 -0
  183. package/dist/preview-card/index.js +35 -0
  184. package/dist/preview-card/index.js.map +1 -0
  185. package/dist/profile/index.d.ts +21 -0
  186. package/dist/profile/index.js +52 -0
  187. package/dist/profile/index.js.map +1 -0
  188. package/dist/progress/index.d.ts +23 -0
  189. package/dist/progress/index.js +97 -0
  190. package/dist/progress/index.js.map +1 -0
  191. package/dist/radar-ping/index.d.ts +11 -0
  192. package/dist/radar-ping/index.js +49 -0
  193. package/dist/radar-ping/index.js.map +1 -0
  194. package/dist/radio-group/index.d.ts +2 -0
  195. package/dist/radio-group/index.js +1 -0
  196. package/dist/radio-group-Dj43u35Z.js +47 -0
  197. package/dist/radio-group-Dj43u35Z.js.map +1 -0
  198. package/dist/resizeable/index.d.ts +11 -0
  199. package/dist/resizeable/index.js +31 -0
  200. package/dist/resizeable/index.js.map +1 -0
  201. package/dist/scroll-area/index.d.ts +11 -0
  202. package/dist/scroll-area/index.js +51 -0
  203. package/dist/scroll-area/index.js.map +1 -0
  204. package/dist/select/index.d.ts +2 -0
  205. package/dist/select/index.js +1 -0
  206. package/dist/select-DncJXYim.js +159 -0
  207. package/dist/select-DncJXYim.js.map +1 -0
  208. package/dist/separator/index.d.ts +2 -0
  209. package/dist/separator/index.js +1 -0
  210. package/dist/separator-DgIQp1cB.js +97 -0
  211. package/dist/separator-DgIQp1cB.js.map +1 -0
  212. package/dist/sidebar/index.d.ts +80 -0
  213. package/dist/sidebar/index.js +334 -0
  214. package/dist/sidebar/index.js.map +1 -0
  215. package/dist/site-header/index.d.ts +22 -0
  216. package/dist/site-header/index.js +55 -0
  217. package/dist/site-header/index.js.map +1 -0
  218. package/dist/skeleton/index.d.ts +4 -0
  219. package/dist/skeleton/index.js +1 -0
  220. package/dist/skeleton-DSG3FWby.js +13 -0
  221. package/dist/skeleton-DSG3FWby.js.map +1 -0
  222. package/dist/slider/index.d.ts +2 -0
  223. package/dist/slider/index.js +1 -0
  224. package/dist/slider-D_XlV4OW.js +114 -0
  225. package/dist/slider-D_XlV4OW.js.map +1 -0
  226. package/dist/slider-group/index.d.ts +46 -0
  227. package/dist/slider-group/index.js +198 -0
  228. package/dist/slider-group/index.js.map +1 -0
  229. package/dist/styles.css +6 -17
  230. package/dist/switch/index.d.ts +2 -0
  231. package/dist/switch/index.js +1 -0
  232. package/dist/switch-DXHixGHe.js +23 -0
  233. package/dist/switch-DXHixGHe.js.map +1 -0
  234. package/dist/table/index.d.ts +920 -0
  235. package/dist/table/index.js +1544 -0
  236. package/dist/table/index.js.map +1 -0
  237. package/dist/tabs/index.d.ts +2 -0
  238. package/dist/tabs/index.js +1 -0
  239. package/dist/tabs-DTC7coap.js +270 -0
  240. package/dist/tabs-DTC7coap.js.map +1 -0
  241. package/dist/text-area/index.d.ts +2 -0
  242. package/dist/text-area/index.js +1 -0
  243. package/dist/text-area-H6HjKnv_.js +50 -0
  244. package/dist/text-area-H6HjKnv_.js.map +1 -0
  245. package/dist/themes/hogarth.css +0 -4
  246. package/dist/themes/mabel.css +0 -4
  247. package/dist/themes/maculata.css +0 -4
  248. package/dist/themes/monadelpha.css +0 -4
  249. package/dist/themes/venus.css +0 -4
  250. package/dist/themes/viridiflora.css +0 -4
  251. package/dist/toast/index.d.ts +65 -0
  252. package/dist/toast/index.js +216 -0
  253. package/dist/toast/index.js.map +1 -0
  254. package/dist/toggle/index.d.ts +2 -0
  255. package/dist/toggle/index.js +1 -0
  256. package/dist/toggle-ZT9thVmz.js +73 -0
  257. package/dist/toggle-ZT9thVmz.js.map +1 -0
  258. package/dist/toggle-group/index.d.ts +10 -0
  259. package/dist/toggle-group/index.js +63 -0
  260. package/dist/toggle-group/index.js.map +1 -0
  261. package/dist/toggle-group-context-CBNZEf1I.js +6 -0
  262. package/dist/toggle-group-context-CBNZEf1I.js.map +1 -0
  263. package/dist/tooltip/index.d.ts +18 -0
  264. package/dist/tooltip/index.js +1 -0
  265. package/dist/tooltip-B6z3tDbW.js +41 -0
  266. package/dist/tooltip-B6z3tDbW.js.map +1 -0
  267. package/dist/trim-text-children-CQRFg2fL.js +33 -0
  268. package/dist/trim-text-children-CQRFg2fL.js.map +1 -0
  269. package/dist/utils/index.d.ts +4 -0
  270. package/dist/utils/index.js +3 -0
  271. package/dist/utils-BI2x7nW5.js +5 -0
  272. package/dist/utils-BI2x7nW5.js.map +1 -0
  273. package/package.json +100 -31
  274. package/dist/index.d.ts +0 -7993
  275. package/dist/index.js +0 -17219
  276. 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":";;;;;;AAIA,SAAgB,kBAAkB,EAAE,WAAW,KAAK,GAAG,SAAiC;CACtF,OACE,oBAAC,KAAD;EACE,aAAU;EACV,WAAW,GAAG,+CAA+C,SAAS;EACjE;EACL,GAAI;CACL,CAAA;AAEL;;ACTA,MAAM,oBAAoB;AACxB,MAAA,qBAAqB,cAAmD,KAAA,CAAS;AACjF,MAAA,8BAA8B,WAAW,kBAAkB;AAC3D,MAAA,mBAAmB,OAA6B,QAC9C,QAAQ,sBAAsB;AAChC,MAAA,oBAAoB,OAA6B,SAA2B;CAC1E,MAAM,SAAS,CAAC,GAAI,SAAS,CAAC,CAAE;CAChC,OAAO,qBAAqB;CAC5B,OAAO;AACT;AACA,MAAA,wBAAwB,OAAkB,WACxC,UAAU,UACT,UAAU,KAAA,KACT,WAAW,KAAA,KACX,MAAM,WAAW,OAAO,UACxB,MAAM,OAAO,MAAM,UAAU,SAAS,OAAO,MAAM;AAGvD,MAAA,wBAAwB,SAA+B;CACrD,MAAM,CAAC,QAAQ,aAAa,SAAS,IAAI;CACzC,IAAI,CAAC,qBAAqB,QAAQ,IAAI,GAAG;EACvC,UAAU,IAAI;EACd,OAAO;CACT;CACA,OAAO;AACT;;ACtBF,MAAMA,gBAAc;AAClBC,MAAAA,gBAAc;AACdC,MAAAA,iBAAe;AAEjB,SAAS,QAAQ,OAAqE;CACpF,IAAI,UAAU,KAAA,GACZ;CAEF,IAAI,OAAO,UAAU,UACnB,OAAO,CAAC,KAAK;CAEf,OAAO,CAAC,GAAG,KAAK;AAClB;AAEA,SAAS,mBACP,cACA,WACA,eACsB;CACtB,IAAI,cACF,OAAO,QAAQ,SAAS;CAE1B,OAAO;AACT;AAEA,SAAS,YACP,MACA,UACA;CACA,IAAI,KAAK,QAAQ,SAAS,OAAO,KAAK,QAAQ,SAAS,OAAO,KAAK,SAAS,SAAS,MACnF,OAAO;CAET,OAAO;EAAE,KAAK,SAAS;EAAK,KAAK,SAAS;EAAK,MAAM,SAAS;CAAK;AACrE;AAEA,SAAgBC,cAAY,EAC1B,WACA,KACA,cACA,OAAO,WACP,eACA,GAAG,SACgB;CACnB,MAAM,eAAe,cAAc,KAAA,GACjC,CAAC,eAAe,oBAAoB,MAAM,eACxC,QAAQ,YAAY,CACtB,GACA,CAAC,QAAQ,aAAa,MAAM,SAAS;EACnC,KAAKF;EACL,KAAKD;EACL,MAAME;CACR,CAAC,GACD,QAAQ,qBAAqB,mBAAmB,cAAc,WAAW,aAAa,CAAC,GACvF,YAAY,SAAmB;EAC7B,IAAI,CAAC,cACH,iBAAiB,IAAI;EAEvB,gBAAgB,IAAI;CACtB,GACA,kBAAkB,aAAgC;EAChD,WAAW,SAAS,YAAY,MAAM,QAAQ,CAAC;EAC/C,IAAI,SAAS,iBAAiB,KAAA,GAC5B,kBAAkB,SAAS,QAAQ,QAAQ,SAAS,YAAY,CAAC;CAErE,GACA,UAAU;EACR,KAAK,OAAO;EACZ,KAAK,OAAO;EACZ;EACA;EACA,MAAM,OAAO;EACb;CACF;CAEF,OACE,oBAAC,mBAAmB,UAApB;EAA6B,OAAO;EAClC,UAAA,oBAAC,OAAD;GACE,aAAU;GACV,WAAW,GACT,+CACA,0CACA,qCACA,gDACA,SACF;GACK;GACL,GAAI;EACL,CAAA;CAC0B,CAAA;AAEjC;;AC3FA,MAAM,cAAc;AAClB,MAAA,cAAc;AACd,MAAA,eAAe;AAEjB,SAAS,eAAe,OAAmE;CACzF,IAAI,OAAO,UAAU,UACnB,OAAO;AAGX;AAEA,SAAS,cAAc,MAA4C;CACjE,IAAI,OAAO,SAAS,UAClB,OAAO,CAAC,IAAI;CAEd,OAAO,CAAC,GAAG,IAAI;AACjB;AAEA,SAAS,oBACP,cACA,OACA,KACU;CACV,IAAI,MAAM,QAAQ,YAAY,GAC5B,OAAO,CAAC,GAAG,YAAY;CAEzB,OAAO,CAAC,eAAe,KAAK,KAAK,eAAe,YAAY,KAAK,GAAG;AACtE;AAEA,SAAS,cACP,OACA,UACsB;CACtB,IAAI,CAAC,OACH;CAEF,OAAO,MAAM,SAAS;AACxB;AAIA,SAAgB,kBAAkB,EAChC,MAAM,aACN,MAAM,aACN,OAAO,cACP,cACA,OACA,eACA,GAAG,SACsB;CACzB,MAAM,QAAQ,sBAAsB,GAClC,aAAa,qBACX,cAAc,OAAO,oBAAoB,cAAc,OAAO,GAAG,CAAC,CACpE,GACA,qBACE,GAAG,SACA;EACH,MAAM,CAAC,QAAQ;EACf,OAAO,SAAS,cAAc,IAAI,CAAC;EACnC,gBAAgB,GAAG,IAAI;CACzB;CAEF,MAAM,gBAAgB;EACpB,OAAO,eAAe;GAAE;GAAc;GAAK;GAAK;EAAK,CAAC;CACxD,GAAG;EAAC;EAAO;EAAK;EAAK;EAAM;CAAY,CAAC;CAExC,OACE,oBAAC,QAAD;EACO;EACA;EACC;EACN,OAAO;EACP,eAAe;EACf,GAAI;CACL,CAAA;AAEL;;AC9EA,SAAgB,WAAW,EAAE,WAAW,KAAK,GAAG,SAA0B;CACxE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,oCAAoC,SAAS;EACtD;EACL,GAAI;CACL,CAAA;AAEL;;ACPA,SAAS,MAAM,OAAe,KAAa,KAAqB;CAC9D,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C;AAEA,SAAgB,YAAY,EAAE,WAAW,KAAK,GAAG,SAA2B;CAC1E,MAAM,QAAQ,sBAAsB,GAClC,gBAA4D,UAAU;EACpE,MAAM,MAAM,MAAM,OAAO,OACvB,SAAS,OAAO,GAAG;EACrB,IAAI,QAAQ,MAAM,OAAO,MAAM,MAAM,KAAK,CAAC,OACzC;EAEF,MAAM,SAAS,iBAAiB,MAAM,OAAO,MAAM,QAAQ,MAAM,KAAK,MAAM,GAAG,CAAC,CAAC;CACnF;CAEF,IAAI,CAAC,OACH;CAGF,OACE,oBAAC,OAAD;EACE,cAAW;EACX,aAAU;EACV,WAAW,GAAG,YAAY,SAAS;EAC9B;EACL,GAAI;EACJ,MAAK;EACL,KAAK,MAAM;EACX,KAAK,MAAM;EACX,MAAM,MAAM;EACZ,OAAO,gBAAgB,MAAM,OAAO,MAAM,GAAG;EAC7C,UAAU;CACX,CAAA;AAEL;;ACpCA,SAAgB,YAAY,EAAE,WAAW,KAAK,GAAG,SAA2B;CAC1E,OACE,oBAAC,QAAD;EACE,aAAU;EACV,WAAW,GAAG,wBAAwB,SAAS;EAC1C;EACL,GAAI;CACL,CAAA;AAEL;;ACRA,SAAgB,YAAY,EAAE,WAAW,UAAU,KAAK,GAAG,SAA2B;CACpF,MAAM,QAAQ,sBAAsB;CACpC,IAAI,CAAC,OACH;CAGF,OACE,qBAAC,QAAD;EACE,aAAU;EACV,WAAW,GAAG,qEAAqE,SAAS;EACvF;EACL,GAAI;EAJN,UAAA,CAMG,UACA,gBAAgB,MAAM,OAAO,MAAM,GAAG,CACnC;;AAEV;;ACdA,MAAM,cAAc,OAAO,OAAOE,eAAiB;CACjD,aAAa;CACb,MAAM;CACN,OAAO;CACP,OAAO;CACP,QAAQ;CACR,OAAO;AACT,CAAC"}
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-subtle: light-dark(
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,2 @@
1
+ import { n as SwitchProps, t as Switch } from "../index-Db_QGr6S.js";
2
+ export { Switch, type SwitchProps };
@@ -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"}