@spark-ui/components 17.2.3 → 17.2.4

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 (302) hide show
  1. package/dist/DialogContent.styles-BSxCCi-u.mjs +62 -0
  2. package/dist/DialogContent.styles-BSxCCi-u.mjs.map +1 -0
  3. package/dist/DialogContent.styles-CAhJtUud.js +2 -0
  4. package/dist/DialogContent.styles-CAhJtUud.js.map +1 -0
  5. package/dist/FormFieldRequiredIndicator-CtgkvPZo.js +2 -0
  6. package/dist/FormFieldRequiredIndicator-CtgkvPZo.js.map +1 -0
  7. package/dist/FormFieldRequiredIndicator-DOGQ_HxO.mjs +14 -0
  8. package/dist/FormFieldRequiredIndicator-DOGQ_HxO.mjs.map +1 -0
  9. package/dist/accordion/index.js +2 -2
  10. package/dist/accordion/index.js.map +1 -1
  11. package/dist/accordion/index.mjs +99 -161
  12. package/dist/accordion/index.mjs.map +1 -1
  13. package/dist/alert-dialog/index.js +2 -2
  14. package/dist/alert-dialog/index.js.map +1 -1
  15. package/dist/alert-dialog/index.mjs +169 -235
  16. package/dist/alert-dialog/index.mjs.map +1 -1
  17. package/dist/avatar/index.js +2 -2
  18. package/dist/avatar/index.js.map +1 -1
  19. package/dist/avatar/index.mjs +187 -224
  20. package/dist/avatar/index.mjs.map +1 -1
  21. package/dist/badge/index.js +2 -2
  22. package/dist/badge/index.js.map +1 -1
  23. package/dist/badge/index.mjs +115 -81
  24. package/dist/badge/index.mjs.map +1 -1
  25. package/dist/breadcrumb/index.js +2 -2
  26. package/dist/breadcrumb/index.js.map +1 -1
  27. package/dist/breadcrumb/index.mjs +73 -106
  28. package/dist/breadcrumb/index.mjs.map +1 -1
  29. package/dist/button/index.js +1 -2
  30. package/dist/button/index.mjs +2 -5
  31. package/dist/button-BTDRzvpB.js +2 -0
  32. package/dist/button-BTDRzvpB.js.map +1 -0
  33. package/dist/button-_YZ_4J42.mjs +643 -0
  34. package/dist/button-_YZ_4J42.mjs.map +1 -0
  35. package/dist/card/index.js +2 -2
  36. package/dist/card/index.js.map +1 -1
  37. package/dist/card/index.mjs +327 -394
  38. package/dist/card/index.mjs.map +1 -1
  39. package/dist/carousel/index.js +2 -2
  40. package/dist/carousel/index.js.map +1 -1
  41. package/dist/carousel/index.mjs +515 -618
  42. package/dist/carousel/index.mjs.map +1 -1
  43. package/dist/checkbox/index.js +2 -2
  44. package/dist/checkbox/index.js.map +1 -1
  45. package/dist/checkbox/index.mjs +213 -246
  46. package/dist/checkbox/index.mjs.map +1 -1
  47. package/dist/chip/index.js +2 -2
  48. package/dist/chip/index.js.map +1 -1
  49. package/dist/chip/index.mjs +601 -652
  50. package/dist/chip/index.mjs.map +1 -1
  51. package/dist/chunk-C91j1N6u.js +1 -0
  52. package/dist/circular-meter/index.js +2 -2
  53. package/dist/circular-meter/index.js.map +1 -1
  54. package/dist/circular-meter/index.mjs +354 -309
  55. package/dist/circular-meter/index.mjs.map +1 -1
  56. package/dist/collapsible/index.js +2 -2
  57. package/dist/collapsible/index.js.map +1 -1
  58. package/dist/collapsible/index.mjs +53 -53
  59. package/dist/collapsible/index.mjs.map +1 -1
  60. package/dist/combobox/index.js +2 -2
  61. package/dist/combobox/index.js.map +1 -1
  62. package/dist/combobox/index.mjs +721 -876
  63. package/dist/combobox/index.mjs.map +1 -1
  64. package/dist/dialog/index.js +2 -2
  65. package/dist/dialog/index.js.map +1 -1
  66. package/dist/dialog/index.mjs +181 -206
  67. package/dist/dialog/index.mjs.map +1 -1
  68. package/dist/divider/index.js +2 -2
  69. package/dist/divider/index.js.map +1 -1
  70. package/dist/divider/index.mjs +178 -183
  71. package/dist/divider/index.mjs.map +1 -1
  72. package/dist/drawer/index.js +2 -2
  73. package/dist/drawer/index.js.map +1 -1
  74. package/dist/drawer/index.mjs +277 -309
  75. package/dist/drawer/index.mjs.map +1 -1
  76. package/dist/dropdown/index.js +2 -2
  77. package/dist/dropdown/index.js.map +1 -1
  78. package/dist/dropdown/index.mjs +429 -492
  79. package/dist/dropdown/index.mjs.map +1 -1
  80. package/dist/file-upload/index.js +2 -2
  81. package/dist/file-upload/index.js.map +1 -1
  82. package/dist/file-upload/index.mjs +540 -677
  83. package/dist/file-upload/index.mjs.map +1 -1
  84. package/dist/form-field/index.js +1 -2
  85. package/dist/form-field/index.mjs +2 -284
  86. package/dist/form-field-B8QzM655.mjs +231 -0
  87. package/dist/form-field-B8QzM655.mjs.map +1 -0
  88. package/dist/form-field-Bu_0E9tb.js +2 -0
  89. package/dist/form-field-Bu_0E9tb.js.map +1 -0
  90. package/dist/icon/index.js +1 -2
  91. package/dist/icon/index.mjs +2 -5
  92. package/dist/icon-CRPcdgYp.js +2 -0
  93. package/dist/icon-CRPcdgYp.js.map +1 -0
  94. package/dist/icon-D05Uqh8_.mjs +41 -0
  95. package/dist/icon-D05Uqh8_.mjs.map +1 -0
  96. package/dist/icon-button/index.js +1 -2
  97. package/dist/icon-button/index.mjs +2 -5
  98. package/dist/icon-button-6p3O7NIm.mjs +28 -0
  99. package/dist/icon-button-6p3O7NIm.mjs.map +1 -0
  100. package/dist/icon-button-CykysbgJ.js +2 -0
  101. package/dist/icon-button-CykysbgJ.js.map +1 -0
  102. package/dist/input/index.js +1 -2
  103. package/dist/input/index.mjs +2 -455
  104. package/dist/input-CmYeHYWQ.mjs +355 -0
  105. package/dist/input-CmYeHYWQ.mjs.map +1 -0
  106. package/dist/input-DNr40G2Z.js +2 -0
  107. package/dist/input-DNr40G2Z.js.map +1 -0
  108. package/dist/input-otp/index.js +2 -2
  109. package/dist/input-otp/index.js.map +1 -1
  110. package/dist/input-otp/index.mjs +344 -407
  111. package/dist/input-otp/index.mjs.map +1 -1
  112. package/dist/kbd/index.js +2 -2
  113. package/dist/kbd/index.js.map +1 -1
  114. package/dist/kbd/index.mjs +12 -17
  115. package/dist/kbd/index.mjs.map +1 -1
  116. package/dist/label/index.js +1 -2
  117. package/dist/label/index.mjs +2 -40
  118. package/dist/label-BqRlrca0.mjs +31 -0
  119. package/dist/label-BqRlrca0.mjs.map +1 -0
  120. package/dist/label-DU0p0d-f.js +2 -0
  121. package/dist/label-DU0p0d-f.js.map +1 -0
  122. package/dist/link-box/index.js +2 -2
  123. package/dist/link-box/index.js.map +1 -1
  124. package/dist/link-box/index.mjs +36 -34
  125. package/dist/link-box/index.mjs.map +1 -1
  126. package/dist/meter/index.js +2 -2
  127. package/dist/meter/index.js.map +1 -1
  128. package/dist/meter/index.mjs +149 -171
  129. package/dist/meter/index.mjs.map +1 -1
  130. package/dist/pagination/index.js +2 -2
  131. package/dist/pagination/index.js.map +1 -1
  132. package/dist/pagination/index.mjs +253 -214
  133. package/dist/pagination/index.mjs.map +1 -1
  134. package/dist/popover/index.js +1 -2
  135. package/dist/popover/index.mjs +2 -239
  136. package/dist/popover-CxZAQmw6.mjs +211 -0
  137. package/dist/popover-CxZAQmw6.mjs.map +1 -0
  138. package/dist/popover-GOovJ27J.js +2 -0
  139. package/dist/popover-GOovJ27J.js.map +1 -0
  140. package/dist/portal/index.js +2 -2
  141. package/dist/portal/index.js.map +1 -1
  142. package/dist/portal/index.mjs +8 -7
  143. package/dist/portal/index.mjs.map +1 -1
  144. package/dist/progress/index.js +1 -2
  145. package/dist/progress/index.mjs +2 -178
  146. package/dist/progress-cEf3tFbn.mjs +132 -0
  147. package/dist/progress-cEf3tFbn.mjs.map +1 -0
  148. package/dist/progress-rJZcPJsZ.js +2 -0
  149. package/dist/progress-rJZcPJsZ.js.map +1 -0
  150. package/dist/progress-tracker/index.js +2 -2
  151. package/dist/progress-tracker/index.js.map +1 -1
  152. package/dist/progress-tracker/index.mjs +303 -380
  153. package/dist/progress-tracker/index.mjs.map +1 -1
  154. package/dist/radio-group/index.js +2 -2
  155. package/dist/radio-group/index.js.map +1 -1
  156. package/dist/radio-group/index.mjs +204 -213
  157. package/dist/radio-group/index.mjs.map +1 -1
  158. package/dist/rating/index.js +2 -2
  159. package/dist/rating/index.js.map +1 -1
  160. package/dist/rating/index.mjs +189 -244
  161. package/dist/rating/index.mjs.map +1 -1
  162. package/dist/rating-display/index.js +2 -2
  163. package/dist/rating-display/index.js.map +1 -1
  164. package/dist/rating-display/index.mjs +165 -166
  165. package/dist/rating-display/index.mjs.map +1 -1
  166. package/dist/scrolling-list/index.js +2 -2
  167. package/dist/scrolling-list/index.js.map +1 -1
  168. package/dist/scrolling-list/index.mjs +216 -273
  169. package/dist/scrolling-list/index.mjs.map +1 -1
  170. package/dist/segmented-control/index.js +2 -2
  171. package/dist/segmented-control/index.js.map +1 -1
  172. package/dist/segmented-control/index.mjs +146 -180
  173. package/dist/segmented-control/index.mjs.map +1 -1
  174. package/dist/segmented-gauge/index.js +2 -2
  175. package/dist/segmented-gauge/index.js.map +1 -1
  176. package/dist/segmented-gauge/index.mjs +146 -195
  177. package/dist/segmented-gauge/index.mjs.map +1 -1
  178. package/dist/select/index.js +2 -2
  179. package/dist/select/index.js.map +1 -1
  180. package/dist/select/index.mjs +279 -327
  181. package/dist/select/index.mjs.map +1 -1
  182. package/dist/skeleton/index.js +2 -2
  183. package/dist/skeleton/index.js.map +1 -1
  184. package/dist/skeleton/index.mjs +92 -114
  185. package/dist/skeleton/index.mjs.map +1 -1
  186. package/dist/slider/index.js +2 -2
  187. package/dist/slider/index.js.map +1 -1
  188. package/dist/slider/index.mjs +259 -326
  189. package/dist/slider/index.mjs.map +1 -1
  190. package/dist/slot/index.js +2 -2
  191. package/dist/slot/index.js.map +1 -1
  192. package/dist/slot/index.mjs +12 -7
  193. package/dist/slot/index.mjs.map +1 -1
  194. package/dist/snackbar/index.js +2 -2
  195. package/dist/snackbar/index.js.map +1 -1
  196. package/dist/snackbar/index.mjs +404 -529
  197. package/dist/snackbar/index.mjs.map +1 -1
  198. package/dist/spinner/index.js +1 -2
  199. package/dist/spinner/index.mjs +2 -5
  200. package/dist/spinner-DFUoYvmm.js +2 -0
  201. package/dist/spinner-DFUoYvmm.js.map +1 -0
  202. package/dist/spinner-DULLiM6a.mjs +56 -0
  203. package/dist/spinner-DULLiM6a.mjs.map +1 -0
  204. package/dist/src/avatar/index.d.mts +2 -2
  205. package/dist/src/avatar/index.d.ts +2 -2
  206. package/dist/src/file-upload/index.d.mts +1 -1
  207. package/dist/src/file-upload/index.d.ts +1 -1
  208. package/dist/stepper/index.js +2 -2
  209. package/dist/stepper/index.js.map +1 -1
  210. package/dist/stepper/index.mjs +139 -176
  211. package/dist/stepper/index.mjs.map +1 -1
  212. package/dist/switch/index.js +2 -2
  213. package/dist/switch/index.js.map +1 -1
  214. package/dist/switch/index.mjs +194 -197
  215. package/dist/switch/index.mjs.map +1 -1
  216. package/dist/tabs/index.js +2 -2
  217. package/dist/tabs/index.js.map +1 -1
  218. package/dist/tabs/index.mjs +337 -389
  219. package/dist/tabs/index.mjs.map +1 -1
  220. package/dist/tag/index.js +2 -2
  221. package/dist/tag/index.js.map +1 -1
  222. package/dist/tag/index.mjs +192 -211
  223. package/dist/tag/index.mjs.map +1 -1
  224. package/dist/text-link/index.js +2 -2
  225. package/dist/text-link/index.js.map +1 -1
  226. package/dist/text-link/index.mjs +44 -5
  227. package/dist/text-link/index.mjs.map +1 -1
  228. package/dist/textarea/index.js +2 -2
  229. package/dist/textarea/index.js.map +1 -1
  230. package/dist/textarea/index.mjs +51 -50
  231. package/dist/textarea/index.mjs.map +1 -1
  232. package/dist/toast/index.js +2 -2
  233. package/dist/toast/index.js.map +1 -1
  234. package/dist/toast/index.mjs +314 -367
  235. package/dist/toast/index.mjs.map +1 -1
  236. package/dist/useRenderSlot-DP4fYerF.mjs +11 -0
  237. package/dist/useRenderSlot-DP4fYerF.mjs.map +1 -0
  238. package/dist/useRenderSlot-Xxf_s88b.js +2 -0
  239. package/dist/useRenderSlot-Xxf_s88b.js.map +1 -0
  240. package/dist/visually-hidden/index.js +2 -2
  241. package/dist/visually-hidden/index.js.map +1 -1
  242. package/dist/visually-hidden/index.mjs +25 -5
  243. package/dist/visually-hidden/index.mjs.map +1 -1
  244. package/package.json +4 -4
  245. package/dist/Button-1M9DcZl0.mjs +0 -704
  246. package/dist/Button-1M9DcZl0.mjs.map +0 -1
  247. package/dist/Button-FZceRWG2.js +0 -2
  248. package/dist/Button-FZceRWG2.js.map +0 -1
  249. package/dist/DialogContent.styles-CziMQtYr.js +0 -2
  250. package/dist/DialogContent.styles-CziMQtYr.js.map +0 -1
  251. package/dist/DialogContent.styles-Du7_Dkde.mjs +0 -60
  252. package/dist/DialogContent.styles-Du7_Dkde.mjs.map +0 -1
  253. package/dist/FormFieldRequiredIndicator-CHfcoT2y.js +0 -2
  254. package/dist/FormFieldRequiredIndicator-CHfcoT2y.js.map +0 -1
  255. package/dist/FormFieldRequiredIndicator-DTnCGiX2.mjs +0 -13
  256. package/dist/FormFieldRequiredIndicator-DTnCGiX2.mjs.map +0 -1
  257. package/dist/Icon-BO327oHU.mjs +0 -57
  258. package/dist/Icon-BO327oHU.mjs.map +0 -1
  259. package/dist/Icon-C-cNTnzd.js +0 -2
  260. package/dist/Icon-C-cNTnzd.js.map +0 -1
  261. package/dist/IconButton-BR1bJSQA.js +0 -2
  262. package/dist/IconButton-BR1bJSQA.js.map +0 -1
  263. package/dist/IconButton-DdB3Pq13.mjs +0 -43
  264. package/dist/IconButton-DdB3Pq13.mjs.map +0 -1
  265. package/dist/Slot-DLY1rJrG.mjs +0 -14
  266. package/dist/Slot-DLY1rJrG.mjs.map +0 -1
  267. package/dist/Slot-DQ8z2zsy.js +0 -2
  268. package/dist/Slot-DQ8z2zsy.js.map +0 -1
  269. package/dist/Spinner-Br4Rp9V2.js +0 -2
  270. package/dist/Spinner-Br4Rp9V2.js.map +0 -1
  271. package/dist/Spinner-Co3AjkQV.mjs +0 -68
  272. package/dist/Spinner-Co3AjkQV.mjs.map +0 -1
  273. package/dist/TextLink-5MvP0P8D.js +0 -2
  274. package/dist/TextLink-5MvP0P8D.js.map +0 -1
  275. package/dist/TextLink-Cc_LeVcx.mjs +0 -57
  276. package/dist/TextLink-Cc_LeVcx.mjs.map +0 -1
  277. package/dist/VisuallyHidden-CB6Nx76j.js +0 -2
  278. package/dist/VisuallyHidden-CB6Nx76j.js.map +0 -1
  279. package/dist/VisuallyHidden-DjlV0-CW.mjs +0 -28
  280. package/dist/VisuallyHidden-DjlV0-CW.mjs.map +0 -1
  281. package/dist/button/index.js.map +0 -1
  282. package/dist/button/index.mjs.map +0 -1
  283. package/dist/form-field/index.js.map +0 -1
  284. package/dist/form-field/index.mjs.map +0 -1
  285. package/dist/icon/index.js.map +0 -1
  286. package/dist/icon/index.mjs.map +0 -1
  287. package/dist/icon-button/index.js.map +0 -1
  288. package/dist/icon-button/index.mjs.map +0 -1
  289. package/dist/input/index.js.map +0 -1
  290. package/dist/input/index.mjs.map +0 -1
  291. package/dist/label/index.js.map +0 -1
  292. package/dist/label/index.mjs.map +0 -1
  293. package/dist/popover/index.js.map +0 -1
  294. package/dist/popover/index.mjs.map +0 -1
  295. package/dist/progress/index.js.map +0 -1
  296. package/dist/progress/index.mjs.map +0 -1
  297. package/dist/spinner/index.js.map +0 -1
  298. package/dist/spinner/index.mjs.map +0 -1
  299. package/dist/useRenderSlot-Bta2kdp4.mjs +0 -10
  300. package/dist/useRenderSlot-Bta2kdp4.mjs.map +0 -1
  301. package/dist/useRenderSlot-DATwjgpo.js +0 -2
  302. package/dist/useRenderSlot-DATwjgpo.js.map +0 -1
@@ -1,178 +1,141 @@
1
- import { jsx as o } from "react/jsx-runtime";
2
- import { useFormFieldControl as j } from "@spark-ui/components/form-field";
3
- import { createContext as A, useContext as _, useRef as m } from "react";
4
- import { InputGroup as b, Input as k } from "../input/index.mjs";
5
- import { useNumberField as $ } from "@react-aria/numberfield";
6
- import { useNumberFieldState as L } from "@react-stately/numberfield";
7
- import { useButton as B } from "@react-aria/button";
8
- import { Minus as M } from "@spark-ui/icons/Minus";
9
- import { Plus as T } from "@spark-ui/icons/Plus";
10
- import { I as P } from "../Icon-BO327oHU.mjs";
11
- import { I as S } from "../IconButton-DdB3Pq13.mjs";
12
- import { useMergeRefs as V } from "@spark-ui/hooks/use-merge-refs";
13
- const W = ({
14
- inputRef: r,
15
- locale: s = "fr",
16
- ...e
17
- }) => {
18
- const p = L({
19
- ...e,
20
- isDisabled: e.disabled,
21
- isReadOnly: e.readOnly,
22
- isRequired: e.required,
23
- locale: s
24
- }), { groupProps: n, inputProps: t, incrementButtonProps: i, decrementButtonProps: a } = $(
25
- {
26
- isWheelDisabled: !1,
27
- ...e,
28
- isDisabled: e.disabled,
29
- isReadOnly: e.readOnly,
30
- isRequired: e.required
31
- },
32
- p,
33
- r
34
- );
35
- return {
36
- groupProps: n,
37
- inputProps: t,
38
- incrementButtonProps: i,
39
- decrementButtonProps: a
40
- };
41
- }, I = A(null), g = ({
42
- children: r,
43
- formatOptions: s,
44
- minValue: e,
45
- maxValue: p,
46
- ref: n,
47
- ...t
48
- }) => {
49
- const i = m(null), {
50
- groupProps: a,
51
- inputProps: d,
52
- incrementButtonProps: u,
53
- decrementButtonProps: D
54
- } = W({
55
- ...t,
56
- /**
57
- * To enable the possibility to init the stepper with empty (undefined) value,
58
- * we need to force the empty value to NaN.
59
- * Cf. https://github.com/adobe/react-spectrum/issues/5524
60
- */
61
- ..."value" in t && { value: t.value ?? NaN },
62
- onChange: t.onValueChange,
63
- formatOptions: s,
64
- minValue: e,
65
- maxValue: p,
66
- inputRef: i
67
- }), c = j(), l = !!c.id, O = {
68
- ...u,
69
- ...l && { "aria-controls": c.id }
70
- }, F = {
71
- ...D,
72
- ...l && { "aria-controls": c.id }
73
- }, R = {
74
- ...d,
75
- ...l && {
76
- id: c.id,
77
- required: c.isRequired,
78
- "aria-invalid": c.isInvalid ? !0 : void 0
79
- }
80
- }, { onValueChange: E, ...q } = t;
81
- return /* @__PURE__ */ o(
82
- I.Provider,
83
- {
84
- value: { incrementButtonProps: O, decrementButtonProps: F, inputProps: R, inputRef: i },
85
- children: /* @__PURE__ */ o(
86
- b,
87
- {
88
- ...q,
89
- ...a,
90
- "data-spark-component": "stepper",
91
- ref: n,
92
- children: r
93
- }
94
- )
95
- }
96
- );
1
+ import { t as e } from "../icon-D05Uqh8_.mjs";
2
+ import { t } from "../icon-button-6p3O7NIm.mjs";
3
+ import { n, t as r } from "../input-CmYeHYWQ.mjs";
4
+ import { createContext as i, useContext as a, useRef as o } from "react";
5
+ import { jsx as s } from "react/jsx-runtime";
6
+ import { useMergeRefs as c } from "@spark-ui/hooks/use-merge-refs";
7
+ import { useFormFieldControl as l } from "@spark-ui/components/form-field";
8
+ import { Minus as u } from "@spark-ui/icons/Minus";
9
+ import { useNumberField as d } from "@react-aria/numberfield";
10
+ import { useNumberFieldState as f } from "@react-stately/numberfield";
11
+ import { useButton as p } from "@react-aria/button";
12
+ import { Plus as m } from "@spark-ui/icons/Plus";
13
+ //#region src/stepper/useStepper.ts
14
+ var h = ({ inputRef: e, locale: t = "fr", ...n }) => {
15
+ let r = f({
16
+ ...n,
17
+ isDisabled: n.disabled,
18
+ isReadOnly: n.readOnly,
19
+ isRequired: n.required,
20
+ locale: t
21
+ }), { groupProps: i, inputProps: a, incrementButtonProps: o, decrementButtonProps: s } = d({
22
+ isWheelDisabled: !1,
23
+ ...n,
24
+ isDisabled: n.disabled,
25
+ isReadOnly: n.readOnly,
26
+ isRequired: n.required
27
+ }, r, e);
28
+ return {
29
+ groupProps: i,
30
+ inputProps: a,
31
+ incrementButtonProps: o,
32
+ decrementButtonProps: s
33
+ };
34
+ }, g = i(null), _ = ({ children: e, formatOptions: t, minValue: n, maxValue: i, ref: a, ...c }) => {
35
+ let u = o(null), { groupProps: d, inputProps: f, incrementButtonProps: p, decrementButtonProps: m } = h({
36
+ ...c,
37
+ ..."value" in c && { value: c.value ?? NaN },
38
+ onChange: c.onValueChange,
39
+ formatOptions: t,
40
+ minValue: n,
41
+ maxValue: i,
42
+ inputRef: u
43
+ }), _ = l(), v = !!_.id, y = {
44
+ ...p,
45
+ ...v && { "aria-controls": _.id }
46
+ }, b = {
47
+ ...m,
48
+ ...v && { "aria-controls": _.id }
49
+ }, x = {
50
+ ...f,
51
+ ...v && {
52
+ id: _.id,
53
+ required: _.isRequired,
54
+ "aria-invalid": _.isInvalid ? !0 : void 0
55
+ }
56
+ }, { onValueChange: S, ...C } = c;
57
+ return /* @__PURE__ */ s(g.Provider, {
58
+ value: {
59
+ incrementButtonProps: y,
60
+ decrementButtonProps: b,
61
+ inputProps: x,
62
+ inputRef: u
63
+ },
64
+ children: /* @__PURE__ */ s(r, {
65
+ ...C,
66
+ ...d,
67
+ "data-spark-component": "stepper",
68
+ ref: a,
69
+ children: e
70
+ })
71
+ });
97
72
  };
98
- g.displayName = "Stepper";
99
- const f = () => {
100
- const r = _(I);
101
- if (!r)
102
- throw Error("useStepperContext must be used within a Stepper provider");
103
- return r;
104
- }, h = ({
105
- children: r,
106
- design: s = "ghost",
107
- intent: e = "neutral",
108
- className: p,
109
- ref: n,
110
- ...t
111
- }) => {
112
- const i = m(null), a = n && typeof n != "function" ? n : i, { incrementButtonProps: d } = f(), { buttonProps: u } = B({ ...d, ...t }, a);
113
- return /* @__PURE__ */ o(b.TrailingAddon, { asChild: !0, "data-spark-component": "stepper-increment-button", children: /* @__PURE__ */ o(
114
- S,
115
- {
116
- ref: a,
117
- design: s,
118
- intent: e,
119
- className: p,
120
- "aria-label": u["aria-label"],
121
- ...u,
122
- disabled: t.disabled || u.disabled,
123
- children: r || /* @__PURE__ */ o(P, { children: /* @__PURE__ */ o(T, {}) })
124
- }
125
- ) });
126
- }, y = ({
127
- children: r,
128
- design: s = "ghost",
129
- intent: e = "neutral",
130
- className: p,
131
- ref: n,
132
- ...t
133
- }) => {
134
- const i = m(null), a = n && typeof n != "function" ? n : i, { decrementButtonProps: d } = f(), { buttonProps: u } = B({ ...d, ...t }, a);
135
- return /* @__PURE__ */ o(b.LeadingAddon, { asChild: !0, "data-spark-component": "stepper-decrement-button", children: /* @__PURE__ */ o(
136
- S,
137
- {
138
- ref: a,
139
- design: s,
140
- intent: e,
141
- className: p,
142
- "aria-label": u["aria-label"],
143
- ...u,
144
- disabled: t.disabled || u.disabled,
145
- children: r || /* @__PURE__ */ o(P, { children: /* @__PURE__ */ o(M, {}) })
146
- }
147
- ) });
148
- }, N = Object.assign(h, {
149
- id: "TrailingAddon"
150
- }), C = Object.assign(y, {
151
- id: "LeadingAddon"
73
+ _.displayName = "Stepper";
74
+ var v = () => {
75
+ let e = a(g);
76
+ if (!e) throw Error("useStepperContext must be used within a Stepper provider");
77
+ return e;
78
+ }, y = ({ children: n, design: i = "ghost", intent: a = "neutral", className: c, ref: l, ...u }) => {
79
+ let d = o(null), f = l && typeof l != "function" ? l : d, { incrementButtonProps: h } = v(), { buttonProps: g } = p({
80
+ ...h,
81
+ ...u
82
+ }, f);
83
+ return /* @__PURE__ */ s(r.TrailingAddon, {
84
+ asChild: !0,
85
+ "data-spark-component": "stepper-increment-button",
86
+ children: /* @__PURE__ */ s(t, {
87
+ ref: f,
88
+ design: i,
89
+ intent: a,
90
+ className: c,
91
+ "aria-label": g["aria-label"],
92
+ ...g,
93
+ disabled: u.disabled || g.disabled,
94
+ children: n || /* @__PURE__ */ s(e, { children: /* @__PURE__ */ s(m, {}) })
95
+ })
96
+ });
97
+ }, b = ({ children: n, design: i = "ghost", intent: a = "neutral", className: c, ref: l, ...d }) => {
98
+ let f = o(null), m = l && typeof l != "function" ? l : f, { decrementButtonProps: h } = v(), { buttonProps: g } = p({
99
+ ...h,
100
+ ...d
101
+ }, m);
102
+ return /* @__PURE__ */ s(r.LeadingAddon, {
103
+ asChild: !0,
104
+ "data-spark-component": "stepper-decrement-button",
105
+ children: /* @__PURE__ */ s(t, {
106
+ ref: m,
107
+ design: i,
108
+ intent: a,
109
+ className: c,
110
+ "aria-label": g["aria-label"],
111
+ ...g,
112
+ disabled: d.disabled || g.disabled,
113
+ children: n || /* @__PURE__ */ s(e, { children: /* @__PURE__ */ s(u, {}) })
114
+ })
115
+ });
116
+ }, x = Object.assign(y, { id: "TrailingAddon" }), S = Object.assign(b, { id: "LeadingAddon" });
117
+ y.displayName = "Stepper.DecrementButton", b.displayName = "Stepper.DecrementButton";
118
+ //#endregion
119
+ //#region src/stepper/StepperInput.tsx
120
+ var C = ({ ref: e, ...t }) => {
121
+ let { inputRef: r, inputProps: i } = v(), a = c(e, r), { className: o = "", ...l } = t;
122
+ return /* @__PURE__ */ s(n, {
123
+ ref: a,
124
+ ...l,
125
+ ...i,
126
+ className: `min-w-sz-56 text-center ${o}`
127
+ });
128
+ }, w = Object.assign(C, { id: "Input" });
129
+ C.displayName = "Stepper.Input";
130
+ //#endregion
131
+ //#region src/stepper/index.ts
132
+ var T = Object.assign(_, {
133
+ IncrementButton: x,
134
+ DecrementButton: S,
135
+ Input: w
152
136
  });
153
- h.displayName = "Stepper.DecrementButton";
154
- y.displayName = "Stepper.DecrementButton";
155
- const v = ({ ref: r, ...s }) => {
156
- const { inputRef: e, inputProps: p } = f(), n = V(r, e), { className: t = "", ...i } = s;
157
- return /* @__PURE__ */ o(
158
- k,
159
- {
160
- ref: n,
161
- ...i,
162
- ...p,
163
- className: `min-w-sz-56 text-center ${t}`
164
- }
165
- );
166
- }, x = Object.assign(v, {
167
- id: "Input"
168
- });
169
- v.displayName = "Stepper.Input";
170
- const z = Object.assign(g, { IncrementButton: N, DecrementButton: C, Input: x });
171
- z.displayName = "Stepper";
172
- N.displayName = "Stepper.IncrementButton";
173
- C.displayName = "Stepper.DecrementButton";
174
- x.displayName = "Stepper.Input";
175
- export {
176
- z as Stepper
177
- };
178
- //# sourceMappingURL=index.mjs.map
137
+ T.displayName = "Stepper", x.displayName = "Stepper.IncrementButton", S.displayName = "Stepper.DecrementButton", w.displayName = "Stepper.Input";
138
+ //#endregion
139
+ export { T as Stepper };
140
+
141
+ //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/stepper/useStepper.ts","../../src/stepper/Stepper.tsx","../../src/stepper/StepperButton.tsx","../../src/stepper/StepperInput.tsx","../../src/stepper/index.ts"],"sourcesContent":["import { useNumberField } from '@react-aria/numberfield'\nimport { useNumberFieldState } from '@react-stately/numberfield'\n\nimport type { UseStepperArgs, UseStepperReturn } from './types'\n\nexport const useStepper = ({\n inputRef,\n locale = 'fr',\n ...rest\n}: UseStepperArgs): UseStepperReturn => {\n const state = useNumberFieldState({\n ...rest,\n isDisabled: rest.disabled,\n isReadOnly: rest.readOnly,\n isRequired: rest.required,\n locale,\n })\n\n const { groupProps, inputProps, incrementButtonProps, decrementButtonProps } = useNumberField(\n {\n isWheelDisabled: false,\n ...rest,\n isDisabled: rest.disabled,\n isReadOnly: rest.readOnly,\n isRequired: rest.required,\n },\n state,\n inputRef\n )\n\n return {\n groupProps,\n inputProps,\n incrementButtonProps,\n decrementButtonProps,\n }\n}\n","import { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { createContext, type PropsWithChildren, RefObject, useContext, useRef } from 'react'\n\nimport { InputGroup } from '../input'\nimport type { StepperProps, UseStepperReturn } from './types'\nimport { useStepper } from './useStepper'\n\nconst StepperContext = createContext<\n (Omit<UseStepperReturn, 'groupProps'> & { inputRef: RefObject<HTMLInputElement | null> }) | null\n>(null)\n\nexport const Stepper = ({\n children,\n formatOptions,\n minValue,\n maxValue,\n ref: forwardedRef,\n ...stepperProps\n}: PropsWithChildren<StepperProps>) => {\n const inputRef = useRef<HTMLInputElement>(null)\n\n const {\n groupProps,\n inputProps: _inputProps,\n incrementButtonProps: _incrementButtonProps,\n decrementButtonProps: _decrementButtonProps,\n } = useStepper({\n ...{\n ...stepperProps,\n /**\n * To enable the possibility to init the stepper with empty (undefined) value,\n * we need to force the empty value to NaN.\n * Cf. https://github.com/adobe/react-spectrum/issues/5524\n */\n ...('value' in stepperProps && { value: stepperProps.value ?? NaN }),\n onChange: stepperProps.onValueChange,\n },\n formatOptions,\n minValue,\n maxValue,\n inputRef,\n })\n\n const formFieldControlProps = useFormFieldControl()\n const isWrappedInFormField = !!formFieldControlProps.id\n\n const incrementButtonProps = {\n ..._incrementButtonProps,\n ...(isWrappedInFormField && { 'aria-controls': formFieldControlProps.id }),\n }\n\n const decrementButtonProps = {\n ..._decrementButtonProps,\n ...(isWrappedInFormField && { 'aria-controls': formFieldControlProps.id }),\n }\n\n const inputProps = {\n ..._inputProps,\n ...(isWrappedInFormField && {\n id: formFieldControlProps.id,\n required: formFieldControlProps.isRequired,\n 'aria-invalid': formFieldControlProps.isInvalid ? true : undefined,\n }),\n }\n\n const { onValueChange: _, ...remainingStepperProps } = stepperProps\n\n return (\n <StepperContext.Provider\n value={{ incrementButtonProps, decrementButtonProps, inputProps, inputRef }}\n >\n <InputGroup\n {...remainingStepperProps}\n {...groupProps}\n data-spark-component=\"stepper\"\n ref={forwardedRef}\n >\n {children}\n </InputGroup>\n </StepperContext.Provider>\n )\n}\n\nStepper.displayName = 'Stepper'\n\nexport const useStepperContext = () => {\n const context = useContext(StepperContext)\n\n if (!context) {\n throw Error('useStepperContext must be used within a Stepper provider')\n }\n\n return context\n}\n","import { useButton } from '@react-aria/button'\nimport { Minus } from '@spark-ui/icons/Minus'\nimport { Plus } from '@spark-ui/icons/Plus'\nimport { type PropsWithChildren, useRef } from 'react'\n\nimport { Icon } from '../icon'\nimport { IconButton } from '../icon-button'\nimport { InputGroup } from '../input'\nimport { useStepperContext } from './Stepper'\nimport type { StepperButtonProps } from './types'\n\nconst IncrementButton = ({\n children,\n design = 'ghost',\n intent = 'neutral',\n className,\n ref: forwardedRef,\n ...rest\n}: PropsWithChildren<StepperButtonProps>) => {\n const innerRef = useRef<HTMLButtonElement>(null)\n const ref = forwardedRef && typeof forwardedRef !== 'function' ? forwardedRef : innerRef\n\n const { incrementButtonProps } = useStepperContext()\n const { buttonProps } = useButton({ ...incrementButtonProps, ...rest }, ref)\n\n return (\n <InputGroup.TrailingAddon asChild data-spark-component=\"stepper-increment-button\">\n <IconButton\n ref={ref}\n design={design}\n intent={intent}\n className={className}\n aria-label={buttonProps['aria-label'] as string}\n {...buttonProps}\n disabled={rest.disabled || buttonProps.disabled}\n >\n {children || (\n <Icon>\n <Plus />\n </Icon>\n )}\n </IconButton>\n </InputGroup.TrailingAddon>\n )\n}\n\nconst DecrementButton = ({\n children,\n design = 'ghost',\n intent = 'neutral',\n className,\n ref: forwardedRef,\n ...rest\n}: PropsWithChildren<StepperButtonProps>) => {\n const innerRef = useRef<HTMLButtonElement>(null)\n const ref = forwardedRef && typeof forwardedRef !== 'function' ? forwardedRef : innerRef\n\n const { decrementButtonProps } = useStepperContext()\n const { buttonProps } = useButton({ ...decrementButtonProps, ...rest }, ref)\n\n return (\n <InputGroup.LeadingAddon asChild data-spark-component=\"stepper-decrement-button\">\n <IconButton\n ref={ref}\n design={design}\n intent={intent}\n className={className}\n aria-label={buttonProps['aria-label'] as string}\n {...buttonProps}\n disabled={rest.disabled || buttonProps.disabled}\n >\n {children || (\n <Icon>\n <Minus />\n </Icon>\n )}\n </IconButton>\n </InputGroup.LeadingAddon>\n )\n}\n\nexport const StepperIncrementButton = Object.assign(IncrementButton, {\n id: 'TrailingAddon',\n})\n\nexport const StepperDecrementButton = Object.assign(DecrementButton, {\n id: 'LeadingAddon',\n})\n\nIncrementButton.displayName = 'Stepper.DecrementButton'\nDecrementButton.displayName = 'Stepper.DecrementButton'\n","import { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\n\nimport { Input as SparkInput } from '../input'\nimport { useStepperContext } from './Stepper'\nimport type { StepperInputProps } from './types'\n\nconst Input = ({ ref: forwardedRef, ...props }: StepperInputProps) => {\n const { inputRef, inputProps } = useStepperContext()\n const ref = useMergeRefs(forwardedRef, inputRef)\n const { className = '', ...remainingProps } = props\n\n return (\n <SparkInput\n ref={ref}\n {...remainingProps}\n {...inputProps}\n className={`min-w-sz-56 text-center ${className}`}\n />\n )\n}\n\nexport const StepperInput = Object.assign(Input, {\n id: 'Input',\n})\n\nInput.displayName = 'Stepper.Input'\n","import { Stepper as Root } from './Stepper'\nimport {\n StepperDecrementButton as DecrementButton,\n StepperIncrementButton as IncrementButton,\n} from './StepperButton'\nimport { StepperInput as Input } from './StepperInput'\n\nexport const Stepper: typeof Root & {\n IncrementButton: typeof IncrementButton\n DecrementButton: typeof DecrementButton\n Input: typeof Input\n} = Object.assign(Root, { IncrementButton, DecrementButton, Input })\n\nStepper.displayName = 'Stepper'\nIncrementButton.displayName = 'Stepper.IncrementButton'\nDecrementButton.displayName = 'Stepper.DecrementButton'\nInput.displayName = 'Stepper.Input'\n\nexport type { StepperProps, StepperButtonProps, StepperInputProps } from './types'\n"],"names":["useStepper","inputRef","locale","rest","state","useNumberFieldState","groupProps","inputProps","incrementButtonProps","decrementButtonProps","useNumberField","StepperContext","createContext","Stepper","children","formatOptions","minValue","maxValue","forwardedRef","stepperProps","useRef","_inputProps","_incrementButtonProps","_decrementButtonProps","formFieldControlProps","useFormFieldControl","isWrappedInFormField","_","remainingStepperProps","jsx","InputGroup","useStepperContext","context","useContext","IncrementButton","design","intent","className","innerRef","ref","buttonProps","useButton","IconButton","Icon","Plus","DecrementButton","Minus","StepperIncrementButton","StepperDecrementButton","Input","props","useMergeRefs","remainingProps","SparkInput","StepperInput","Root"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/stepper/useStepper.ts","../../src/stepper/Stepper.tsx","../../src/stepper/StepperButton.tsx","../../src/stepper/StepperInput.tsx","../../src/stepper/index.ts"],"sourcesContent":["import { useNumberField } from '@react-aria/numberfield'\nimport { useNumberFieldState } from '@react-stately/numberfield'\n\nimport type { UseStepperArgs, UseStepperReturn } from './types'\n\nexport const useStepper = ({\n inputRef,\n locale = 'fr',\n ...rest\n}: UseStepperArgs): UseStepperReturn => {\n const state = useNumberFieldState({\n ...rest,\n isDisabled: rest.disabled,\n isReadOnly: rest.readOnly,\n isRequired: rest.required,\n locale,\n })\n\n const { groupProps, inputProps, incrementButtonProps, decrementButtonProps } = useNumberField(\n {\n isWheelDisabled: false,\n ...rest,\n isDisabled: rest.disabled,\n isReadOnly: rest.readOnly,\n isRequired: rest.required,\n },\n state,\n inputRef\n )\n\n return {\n groupProps,\n inputProps,\n incrementButtonProps,\n decrementButtonProps,\n }\n}\n","import { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { createContext, type PropsWithChildren, RefObject, useContext, useRef } from 'react'\n\nimport { InputGroup } from '../input'\nimport type { StepperProps, UseStepperReturn } from './types'\nimport { useStepper } from './useStepper'\n\nconst StepperContext = createContext<\n (Omit<UseStepperReturn, 'groupProps'> & { inputRef: RefObject<HTMLInputElement | null> }) | null\n>(null)\n\nexport const Stepper = ({\n children,\n formatOptions,\n minValue,\n maxValue,\n ref: forwardedRef,\n ...stepperProps\n}: PropsWithChildren<StepperProps>) => {\n const inputRef = useRef<HTMLInputElement>(null)\n\n const {\n groupProps,\n inputProps: _inputProps,\n incrementButtonProps: _incrementButtonProps,\n decrementButtonProps: _decrementButtonProps,\n } = useStepper({\n ...{\n ...stepperProps,\n /**\n * To enable the possibility to init the stepper with empty (undefined) value,\n * we need to force the empty value to NaN.\n * Cf. https://github.com/adobe/react-spectrum/issues/5524\n */\n ...('value' in stepperProps && { value: stepperProps.value ?? NaN }),\n onChange: stepperProps.onValueChange,\n },\n formatOptions,\n minValue,\n maxValue,\n inputRef,\n })\n\n const formFieldControlProps = useFormFieldControl()\n const isWrappedInFormField = !!formFieldControlProps.id\n\n const incrementButtonProps = {\n ..._incrementButtonProps,\n ...(isWrappedInFormField && { 'aria-controls': formFieldControlProps.id }),\n }\n\n const decrementButtonProps = {\n ..._decrementButtonProps,\n ...(isWrappedInFormField && { 'aria-controls': formFieldControlProps.id }),\n }\n\n const inputProps = {\n ..._inputProps,\n ...(isWrappedInFormField && {\n id: formFieldControlProps.id,\n required: formFieldControlProps.isRequired,\n 'aria-invalid': formFieldControlProps.isInvalid ? true : undefined,\n }),\n }\n\n const { onValueChange: _, ...remainingStepperProps } = stepperProps\n\n return (\n <StepperContext.Provider\n value={{ incrementButtonProps, decrementButtonProps, inputProps, inputRef }}\n >\n <InputGroup\n {...remainingStepperProps}\n {...groupProps}\n data-spark-component=\"stepper\"\n ref={forwardedRef}\n >\n {children}\n </InputGroup>\n </StepperContext.Provider>\n )\n}\n\nStepper.displayName = 'Stepper'\n\nexport const useStepperContext = () => {\n const context = useContext(StepperContext)\n\n if (!context) {\n throw Error('useStepperContext must be used within a Stepper provider')\n }\n\n return context\n}\n","import { useButton } from '@react-aria/button'\nimport { Minus } from '@spark-ui/icons/Minus'\nimport { Plus } from '@spark-ui/icons/Plus'\nimport { type PropsWithChildren, useRef } from 'react'\n\nimport { Icon } from '../icon'\nimport { IconButton } from '../icon-button'\nimport { InputGroup } from '../input'\nimport { useStepperContext } from './Stepper'\nimport type { StepperButtonProps } from './types'\n\nconst IncrementButton = ({\n children,\n design = 'ghost',\n intent = 'neutral',\n className,\n ref: forwardedRef,\n ...rest\n}: PropsWithChildren<StepperButtonProps>) => {\n const innerRef = useRef<HTMLButtonElement>(null)\n const ref = forwardedRef && typeof forwardedRef !== 'function' ? forwardedRef : innerRef\n\n const { incrementButtonProps } = useStepperContext()\n const { buttonProps } = useButton({ ...incrementButtonProps, ...rest }, ref)\n\n return (\n <InputGroup.TrailingAddon asChild data-spark-component=\"stepper-increment-button\">\n <IconButton\n ref={ref}\n design={design}\n intent={intent}\n className={className}\n aria-label={buttonProps['aria-label'] as string}\n {...buttonProps}\n disabled={rest.disabled || buttonProps.disabled}\n >\n {children || (\n <Icon>\n <Plus />\n </Icon>\n )}\n </IconButton>\n </InputGroup.TrailingAddon>\n )\n}\n\nconst DecrementButton = ({\n children,\n design = 'ghost',\n intent = 'neutral',\n className,\n ref: forwardedRef,\n ...rest\n}: PropsWithChildren<StepperButtonProps>) => {\n const innerRef = useRef<HTMLButtonElement>(null)\n const ref = forwardedRef && typeof forwardedRef !== 'function' ? forwardedRef : innerRef\n\n const { decrementButtonProps } = useStepperContext()\n const { buttonProps } = useButton({ ...decrementButtonProps, ...rest }, ref)\n\n return (\n <InputGroup.LeadingAddon asChild data-spark-component=\"stepper-decrement-button\">\n <IconButton\n ref={ref}\n design={design}\n intent={intent}\n className={className}\n aria-label={buttonProps['aria-label'] as string}\n {...buttonProps}\n disabled={rest.disabled || buttonProps.disabled}\n >\n {children || (\n <Icon>\n <Minus />\n </Icon>\n )}\n </IconButton>\n </InputGroup.LeadingAddon>\n )\n}\n\nexport const StepperIncrementButton = Object.assign(IncrementButton, {\n id: 'TrailingAddon',\n})\n\nexport const StepperDecrementButton = Object.assign(DecrementButton, {\n id: 'LeadingAddon',\n})\n\nIncrementButton.displayName = 'Stepper.DecrementButton'\nDecrementButton.displayName = 'Stepper.DecrementButton'\n","import { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\n\nimport { Input as SparkInput } from '../input'\nimport { useStepperContext } from './Stepper'\nimport type { StepperInputProps } from './types'\n\nconst Input = ({ ref: forwardedRef, ...props }: StepperInputProps) => {\n const { inputRef, inputProps } = useStepperContext()\n const ref = useMergeRefs(forwardedRef, inputRef)\n const { className = '', ...remainingProps } = props\n\n return (\n <SparkInput\n ref={ref}\n {...remainingProps}\n {...inputProps}\n className={`min-w-sz-56 text-center ${className}`}\n />\n )\n}\n\nexport const StepperInput = Object.assign(Input, {\n id: 'Input',\n})\n\nInput.displayName = 'Stepper.Input'\n","import { Stepper as Root } from './Stepper'\nimport {\n StepperDecrementButton as DecrementButton,\n StepperIncrementButton as IncrementButton,\n} from './StepperButton'\nimport { StepperInput as Input } from './StepperInput'\n\nexport const Stepper: typeof Root & {\n IncrementButton: typeof IncrementButton\n DecrementButton: typeof DecrementButton\n Input: typeof Input\n} = Object.assign(Root, { IncrementButton, DecrementButton, Input })\n\nStepper.displayName = 'Stepper'\nIncrementButton.displayName = 'Stepper.IncrementButton'\nDecrementButton.displayName = 'Stepper.DecrementButton'\nInput.displayName = 'Stepper.Input'\n\nexport type { StepperProps, StepperButtonProps, StepperInputProps } from './types'\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),y=require("@spark-ui/components/form-field"),o=require("class-variance-authority"),w=require("react"),k=require("@base-ui/react/switch"),L=require("@spark-ui/hooks/use-combined-state"),P=require("@spark-ui/icons/Check"),T=require("@spark-ui/icons/Close"),_=require("../useRenderSlot-DATwjgpo.js"),S=require("../Slot-DQ8z2zsy.js"),a=require("@spark-ui/internal-utils"),A=require("../label/index.js"),B=o.cva(a.tw(["relative shrink-0 self-baseline","cursor-pointer","rounded-full border-transparent","hover:ring-4","transition-colors duration-200 ease-in-out","disabled:hover:ring-transparent disabled:cursor-not-allowed disabled:opacity-dim-3","focus-visible:u-outline","data-unchecked:bg-on-surface/dim-3","u-shadow-border-transition","overflow-x-hidden"]),{variants:{size:a.makeVariants({sm:a.tw(["h-sz-24","w-sz-40","border-md"]),md:a.tw(["h-sz-32","w-sz-56","border-[4px]"])}),intent:a.makeVariants({main:["[&[data-checked]]:bg-main","hover:ring-main-container","text-main"],support:["[&[data-checked]]:bg-support","hover:ring-support-container","text-support"],accent:["[&[data-checked]]:bg-accent","hover:ring-accent-container","text-accent"],success:["[&[data-checked]]:bg-success","hover:ring-success-container","text-success"],alert:["[&[data-checked]]:bg-alert","hover:ring-alert-container","text-alert"],error:["[&[data-checked]]:bg-error","hover:ring-error-container","text-error"],info:["[&[data-checked]]:bg-info","hover:ring-info-container","text-info"],neutral:["[&[data-checked]]:bg-neutral","hover:ring-neutral-container","text-neutral"]})},defaultVariants:{intent:"support",size:"sm"}}),E=o.cva(["pointer-events-none absolute inset-0 flex items-center","transition-all duration-200 ease-in-out"],{variants:{checked:{true:"translate-x-full",false:"translate-x-0"}}}),G=o.cva(["absolute left-0 top-0 flex items-center justify-center","bg-surface","rounded-full","ring-0","transition-all duration-200 ease-in-out"],{variants:{size:a.makeVariants({sm:["h-sz-20","w-sz-20"],md:["h-sz-24","w-sz-24"]}),checked:{true:"-translate-x-full",false:"translate-x-0 text-on-surface/dim-2"}},defaultVariants:{size:"sm",checked:!1}}),j=o.cva(["transition-opacity duration-200"],{variants:{size:a.makeVariants({sm:["h-sz-10 w-sz-10"],md:["h-sz-12 w-sz-12"]})},defaultVariants:{size:"sm"}}),z=({checked:r,checkedIcon:t=e.jsx(P.Check,{}),defaultChecked:n,intent:b,uncheckedIcon:c=e.jsx(T.Close,{}),size:i="md",onCheckedChange:p,className:x,required:l,ref:d,asChild:f=!1,...u})=>{const[s,h]=L.useCombinedState(r,n),{name:v,description:I,state:F,isRequired:N,isInvalid:V}=y.useFormFieldControl(),R=F??b,D=_.useRenderSlot(f,"span"),g=!!(l||N),$=m=>{h(m),p?.(m)};return e.jsx(k.Switch.Root,{"data-spark-component":"switch-input",ref:d,render:D,className:B({intent:R,size:i,className:x}),checked:r,defaultChecked:n,onCheckedChange:m=>$(m),name:v,required:g,"aria-required":g?!0:void 0,"aria-invalid":V,"aria-describedby":I,...u,children:e.jsx("span",{className:E({checked:s}),children:e.jsxs(k.Switch.Thumb,{className:G({size:i,checked:s}),children:[s&&t&&e.jsx(S.Slot,{className:j({size:i}),children:t}),!s&&c&&e.jsx(S.Slot,{className:j({size:i}),children:c})]})})})};z.displayName="SwitchInput";const M=o.cva("default:text-on-surface",{variants:{disabled:{true:["text-neutral/dim-2","cursor-not-allowed"],false:["cursor-pointer"]}},defaultVariants:{disabled:!1}}),O=({className:r,disabled:t,...n})=>e.jsx(A.Label,{"data-spark-component":"switch-label",className:M({disabled:t,className:r}),...n}),q=":switch",C=({size:r="md",children:t,className:n,id:b,disabled:c,reverse:i=!1,ref:p,...x})=>{const l=y.useFormFieldControl(),d=`${q}-label-${w.useId()}`,f=`${q}-input-${w.useId()}`,u=l.id||b||f,s=t&&e.jsx(O,{disabled:c,htmlFor:u,id:d,children:t}),h=e.jsx(z,{ref:p,size:r,id:u,disabled:c,"aria-labelledby":t?d:l.labelId,...x}),v=i?e.jsxs(e.Fragment,{children:[s,h]}):e.jsxs(e.Fragment,{children:[h,s]});return e.jsx("div",{"data-spark-component":"switch",className:o.cx("gap-md text-body-1 flex items-center",n),children:v})};C.displayName="Switch";exports.Switch=C;
2
- //# sourceMappingURL=index.js.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../chunk-C91j1N6u.js`);const e=require(`../slot/index.js`),t=require(`../label-DU0p0d-f.js`),n=require(`../useRenderSlot-Xxf_s88b.js`);let r=require(`class-variance-authority`),i=require(`react`),a=require(`react/jsx-runtime`),o=require(`@spark-ui/internal-utils`),s=require(`@spark-ui/components/form-field`),c=require(`@spark-ui/icons/Check`),l=require(`@spark-ui/hooks/use-combined-state`),u=require(`@spark-ui/icons/Close`),d=require(`@base-ui/react/switch`);var f=(0,r.cva)((0,o.tw)([`relative shrink-0 self-baseline`,`cursor-pointer`,`rounded-full border-transparent`,`hover:ring-4`,`transition-colors duration-200 ease-in-out`,`disabled:hover:ring-transparent disabled:cursor-not-allowed disabled:opacity-dim-3`,`focus-visible:u-outline`,`data-unchecked:bg-on-surface/dim-3`,`u-shadow-border-transition`,`overflow-x-hidden`]),{variants:{size:(0,o.makeVariants)({sm:(0,o.tw)([`h-sz-24`,`w-sz-40`,`border-md`]),md:(0,o.tw)([`h-sz-32`,`w-sz-56`,`border-[4px]`])}),intent:(0,o.makeVariants)({main:[`[&[data-checked]]:bg-main`,`hover:ring-main-container`,`text-main`],support:[`[&[data-checked]]:bg-support`,`hover:ring-support-container`,`text-support`],accent:[`[&[data-checked]]:bg-accent`,`hover:ring-accent-container`,`text-accent`],success:[`[&[data-checked]]:bg-success`,`hover:ring-success-container`,`text-success`],alert:[`[&[data-checked]]:bg-alert`,`hover:ring-alert-container`,`text-alert`],error:[`[&[data-checked]]:bg-error`,`hover:ring-error-container`,`text-error`],info:[`[&[data-checked]]:bg-info`,`hover:ring-info-container`,`text-info`],neutral:[`[&[data-checked]]:bg-neutral`,`hover:ring-neutral-container`,`text-neutral`]})},defaultVariants:{intent:`support`,size:`sm`}}),p=(0,r.cva)([`pointer-events-none absolute inset-0 flex items-center`,`transition-all duration-200 ease-in-out`],{variants:{checked:{true:`translate-x-full`,false:`translate-x-0`}}}),m=(0,r.cva)([`absolute left-0 top-0 flex items-center justify-center`,`bg-surface`,`rounded-full`,`ring-0`,`transition-all duration-200 ease-in-out`],{variants:{size:(0,o.makeVariants)({sm:[`h-sz-20`,`w-sz-20`],md:[`h-sz-24`,`w-sz-24`]}),checked:{true:`-translate-x-full`,false:`translate-x-0 text-on-surface/dim-2`}},defaultVariants:{size:`sm`,checked:!1}}),h=(0,r.cva)([`transition-opacity duration-200`],{variants:{size:(0,o.makeVariants)({sm:[`h-sz-10 w-sz-10`],md:[`h-sz-12 w-sz-12`]})},defaultVariants:{size:`sm`}}),g=({checked:t,checkedIcon:r=(0,a.jsx)(c.Check,{}),defaultChecked:i,intent:o,uncheckedIcon:g=(0,a.jsx)(u.Close,{}),size:_=`md`,onCheckedChange:v,className:y,required:b,ref:x,asChild:S=!1,...C})=>{let[w,T]=(0,l.useCombinedState)(t,i),{name:E,description:D,state:O,isRequired:k,isInvalid:A}=(0,s.useFormFieldControl)(),j=O??o,M=n.t(S,`span`),N=!!(b||k),P=e=>{T(e),v?.(e)};return(0,a.jsx)(d.Switch.Root,{"data-spark-component":`switch-input`,ref:x,render:M,className:f({intent:j,size:_,className:y}),checked:t,defaultChecked:i,onCheckedChange:e=>P(e),name:E,required:N,"aria-required":N?!0:void 0,"aria-invalid":A,"aria-describedby":D,...C,children:(0,a.jsx)(`span`,{className:p({checked:w}),children:(0,a.jsxs)(d.Switch.Thumb,{className:m({size:_,checked:w}),children:[w&&r&&(0,a.jsx)(e.Slot,{className:h({size:_}),children:r}),!w&&g&&(0,a.jsx)(e.Slot,{className:h({size:_}),children:g})]})})})};g.displayName=`SwitchInput`;var _=(0,r.cva)(`default:text-on-surface`,{variants:{disabled:{true:[`text-neutral/dim-2`,`cursor-not-allowed`],false:[`cursor-pointer`]}},defaultVariants:{disabled:!1}}),v=({className:e,disabled:n,...r})=>(0,a.jsx)(t.t,{"data-spark-component":`switch-label`,className:_({disabled:n,className:e}),...r}),y=`:switch`,b=({size:e=`md`,children:t,className:n,id:o,disabled:c,reverse:l=!1,ref:u,...d})=>{let f=(0,s.useFormFieldControl)(),p=`${y}-label-${(0,i.useId)()}`,m=`${y}-input-${(0,i.useId)()}`,h=f.id||o||m,_=t&&(0,a.jsx)(v,{disabled:c,htmlFor:h,id:p,children:t}),b=(0,a.jsx)(g,{ref:u,size:e,id:h,disabled:c,"aria-labelledby":t?p:f.labelId,...d}),x=l?(0,a.jsxs)(a.Fragment,{children:[_,b]}):(0,a.jsxs)(a.Fragment,{children:[b,_]});return(0,a.jsx)(`div`,{"data-spark-component":`switch`,className:(0,r.cx)(`gap-md text-body-1 flex items-center`,n),children:x})};b.displayName=`Switch`,exports.Switch=b;
2
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/switch/SwitchInput.styles.ts","../../src/switch/SwitchInput.tsx","../../src/switch/SwitchLabel.styles.ts","../../src/switch/SwitchLabel.tsx","../../src/switch/Switch.tsx"],"sourcesContent":["import { makeVariants, tw } from '@spark-ui/internal-utils'\nimport { cva, VariantProps } from 'class-variance-authority'\n\nexport const styles = cva(\n tw([\n 'relative shrink-0 self-baseline',\n 'cursor-pointer',\n 'rounded-full border-transparent',\n 'hover:ring-4',\n 'transition-colors duration-200 ease-in-out',\n 'disabled:hover:ring-transparent disabled:cursor-not-allowed disabled:opacity-dim-3',\n 'focus-visible:u-outline',\n 'data-unchecked:bg-on-surface/dim-3',\n 'u-shadow-border-transition',\n 'overflow-x-hidden',\n ]),\n {\n variants: {\n /**\n * Size of the switch input.\n */\n size: makeVariants<'size', ['sm', 'md']>({\n sm: tw(['h-sz-24', 'w-sz-40', 'border-md']),\n md: tw(['h-sz-32', 'w-sz-56', 'border-[4px]']),\n }),\n /**\n * Color scheme of the switch input.\n */\n intent: makeVariants<\n 'intent',\n ['main', 'support', 'accent', 'success', 'alert', 'error', 'info', 'neutral']\n >({\n main: ['[&[data-checked]]:bg-main', 'hover:ring-main-container', 'text-main'],\n support: ['[&[data-checked]]:bg-support', 'hover:ring-support-container', 'text-support'],\n accent: ['[&[data-checked]]:bg-accent', 'hover:ring-accent-container', 'text-accent'],\n success: ['[&[data-checked]]:bg-success', 'hover:ring-success-container', 'text-success'],\n alert: ['[&[data-checked]]:bg-alert', 'hover:ring-alert-container', 'text-alert'],\n error: ['[&[data-checked]]:bg-error', 'hover:ring-error-container', 'text-error'],\n info: ['[&[data-checked]]:bg-info', 'hover:ring-info-container', 'text-info'],\n neutral: ['[&[data-checked]]:bg-neutral', 'hover:ring-neutral-container', 'text-neutral'],\n }),\n },\n defaultVariants: {\n intent: 'support',\n size: 'sm',\n },\n }\n)\n\nexport type StylesProps = VariantProps<typeof styles>\n\nexport const thumbWrapperStyles = cva(\n [\n 'pointer-events-none absolute inset-0 flex items-center',\n 'transition-all duration-200 ease-in-out',\n ],\n {\n variants: {\n checked: {\n true: 'translate-x-full',\n false: 'translate-x-0',\n },\n },\n }\n)\n\nexport const thumbStyles = cva(\n [\n 'absolute left-0 top-0 flex items-center justify-center',\n 'bg-surface',\n 'rounded-full',\n 'ring-0',\n 'transition-all duration-200 ease-in-out',\n ],\n {\n variants: {\n size: makeVariants<'size', ['sm', 'md']>({\n sm: ['h-sz-20', 'w-sz-20'],\n md: ['h-sz-24', 'w-sz-24'],\n }),\n checked: {\n true: '-translate-x-full',\n false: 'translate-x-0 text-on-surface/dim-2',\n },\n },\n defaultVariants: {\n size: 'sm',\n checked: false,\n },\n }\n)\n\nexport const thumbCheckSVGStyles = cva(['transition-opacity duration-200'], {\n variants: {\n size: makeVariants<'size', ['sm', 'md']>({\n sm: ['h-sz-10 w-sz-10'],\n md: ['h-sz-12 w-sz-12'],\n }),\n },\n defaultVariants: {\n size: 'sm',\n },\n})\n","import { Switch as BaseSwitch } from '@base-ui/react/switch'\nimport { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { useCombinedState } from '@spark-ui/hooks/use-combined-state'\nimport { Check } from '@spark-ui/icons/Check'\nimport { Close } from '@spark-ui/icons/Close'\nimport { type ComponentPropsWithRef, type ReactNode } from 'react'\n\nimport { useRenderSlot } from '../drawer/useRenderSlot'\nimport { Slot } from '../slot'\nimport {\n styles,\n type StylesProps,\n thumbCheckSVGStyles,\n thumbStyles,\n thumbWrapperStyles,\n} from './SwitchInput.styles'\n\nexport interface SwitchInputProps\n extends StylesProps,\n Omit<ComponentPropsWithRef<typeof BaseSwitch.Root>, 'value' | 'render' | 'onCheckedChange'> {\n /**\n * The state of the switch when it is initially rendered. Use when you do not need to control its state.\n */\n defaultChecked?: boolean\n /**\n * The controlled state of the switch. Must be used in conjunction with `onCheckedChange`.\n */\n checked?: boolean\n /**\n * Event handler called when the state of the switch changes.\n */\n onCheckedChange?: (checked: boolean) => void\n /**\n * When `true`, prevents the user from interacting with the switch.\n */\n disabled?: boolean\n /**\n * When true, indicates that the user must check the switch before the owning form can be submitted.\n */\n required?: boolean\n /**\n * The name of the switch. Submitted with its owning form as part of a name/value pair.\n */\n name?: string\n /**\n * The value given as data when submitted with a name.\n */\n value?: string\n /**\n * Icon shown inside the thumb of the Switch whenever it is checked\n */\n checkedIcon?: ReactNode\n /**\n * Icon shown inside the thumb of the Switch whenever it is unchecked\n */\n uncheckedIcon?: ReactNode\n /**\n * When true, the label will be placed on the left side of the Switch\n */\n reverse?: boolean\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n */\n asChild?: boolean\n}\n\nexport const SwitchInput = ({\n checked,\n checkedIcon = <Check />,\n defaultChecked,\n intent: intentProp,\n uncheckedIcon = <Close />,\n size = 'md',\n onCheckedChange,\n className,\n required,\n ref,\n asChild = false,\n ...rest\n}: SwitchInputProps) => {\n const [isChecked, setIsChecked] = useCombinedState(checked, defaultChecked)\n const { name, description, state, isRequired, isInvalid } = useFormFieldControl()\n const intent = state ?? intentProp\n const renderSlot = useRenderSlot(asChild, 'span')\n const isRequiredComputed = Boolean(required || isRequired)\n\n const handleCheckedChange = (updatedValue: boolean): void => {\n setIsChecked(updatedValue)\n onCheckedChange?.(updatedValue)\n }\n\n return (\n <BaseSwitch.Root\n data-spark-component=\"switch-input\"\n ref={ref}\n render={renderSlot}\n className={styles({ intent, size, className })}\n checked={checked}\n defaultChecked={defaultChecked}\n onCheckedChange={nextChecked => handleCheckedChange(nextChecked)}\n name={name}\n required={isRequiredComputed}\n aria-required={isRequiredComputed ? true : undefined}\n aria-invalid={isInvalid}\n aria-describedby={description}\n {...rest}\n >\n <span className={thumbWrapperStyles({ checked: isChecked })}>\n <BaseSwitch.Thumb className={thumbStyles({ size, checked: isChecked })}>\n {isChecked && checkedIcon && (\n <Slot className={thumbCheckSVGStyles({ size })}>{checkedIcon}</Slot>\n )}\n {!isChecked && uncheckedIcon && (\n <Slot className={thumbCheckSVGStyles({ size })}>{uncheckedIcon}</Slot>\n )}\n </BaseSwitch.Thumb>\n </span>\n </BaseSwitch.Root>\n )\n}\n\nSwitchInput.displayName = 'SwitchInput'\n","import { cva, VariantProps } from 'class-variance-authority'\n\nexport const labelStyles = cva('default:text-on-surface', {\n variants: {\n disabled: {\n true: ['text-neutral/dim-2', 'cursor-not-allowed'],\n false: ['cursor-pointer'],\n },\n },\n defaultVariants: {\n disabled: false,\n },\n})\n\nexport type LabelStylesProps = VariantProps<typeof labelStyles>\n","import { Label, LabelProps } from '../label'\nimport { labelStyles, LabelStylesProps } from './SwitchLabel.styles'\n\nexport interface SwitchLabelProps extends LabelStylesProps, LabelProps {\n /**\n * Change the component to the HTML tag or custom component of the only child.\n */\n asChild?: boolean\n /**\n * The id of the element the label is associated with.\n */\n htmlFor?: string\n /**\n * When true, prevents the user from interacting with the switch item.\n */\n disabled?: boolean\n}\n\nexport const SwitchLabel = ({ className, disabled, ...others }: SwitchLabelProps) => (\n <Label\n data-spark-component=\"switch-label\"\n className={labelStyles({ disabled, className })}\n {...others}\n />\n)\n","import { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { cx } from 'class-variance-authority'\nimport { useId } from 'react'\n\nimport { SwitchInput, SwitchInputProps } from './SwitchInput'\nimport { SwitchLabel } from './SwitchLabel'\n\nexport type SwitchProps = SwitchInputProps\n\nconst ID_PREFIX = ':switch'\n\nexport const Switch = ({\n size = 'md',\n children,\n className,\n id,\n disabled,\n reverse = false,\n ref,\n ...rest\n}: SwitchProps) => {\n const field = useFormFieldControl()\n\n const labelID = `${ID_PREFIX}-label-${useId()}`\n const innerID = `${ID_PREFIX}-input-${useId()}`\n const fieldID = field.id || id || innerID\n\n const switchLabel = children && (\n <SwitchLabel disabled={disabled} htmlFor={fieldID} id={labelID}>\n {children}\n </SwitchLabel>\n )\n\n const switchInput = (\n <SwitchInput\n ref={ref}\n size={size}\n id={fieldID}\n disabled={disabled}\n /**\n * If the switch doesn't have any direct label (children) then we should try to\n * get an eventual alternative label from FormField.\n * On last resort, we shouldn't forget to define an aria-label attribute.\n */\n aria-labelledby={children ? labelID : field.labelId}\n {...rest}\n />\n )\n\n const content = reverse ? (\n <>\n {switchLabel}\n {switchInput}\n </>\n ) : (\n <>\n {switchInput}\n {switchLabel}\n </>\n )\n\n return (\n <div\n data-spark-component=\"switch\"\n className={cx('gap-md text-body-1 flex items-center', className)}\n >\n {content}\n </div>\n )\n}\n\nSwitch.displayName = 'Switch'\n"],"names":["styles","cva","tw","makeVariants","thumbWrapperStyles","thumbStyles","thumbCheckSVGStyles","SwitchInput","checked","checkedIcon","Check","defaultChecked","intentProp","uncheckedIcon","Close","size","onCheckedChange","className","required","ref","asChild","rest","isChecked","setIsChecked","useCombinedState","name","description","state","isRequired","isInvalid","useFormFieldControl","intent","renderSlot","useRenderSlot","isRequiredComputed","handleCheckedChange","updatedValue","jsx","BaseSwitch","nextChecked","jsxs","Slot","labelStyles","SwitchLabel","disabled","others","Label","ID_PREFIX","Switch","children","id","reverse","field","labelID","useId","innerID","fieldID","switchLabel","switchInput","content","Fragment","cx"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/switch/SwitchInput.styles.ts","../../src/switch/SwitchInput.tsx","../../src/switch/SwitchLabel.styles.ts","../../src/switch/SwitchLabel.tsx","../../src/switch/Switch.tsx"],"sourcesContent":["import { makeVariants, tw } from '@spark-ui/internal-utils'\nimport { cva, VariantProps } from 'class-variance-authority'\n\nexport const styles = cva(\n tw([\n 'relative shrink-0 self-baseline',\n 'cursor-pointer',\n 'rounded-full border-transparent',\n 'hover:ring-4',\n 'transition-colors duration-200 ease-in-out',\n 'disabled:hover:ring-transparent disabled:cursor-not-allowed disabled:opacity-dim-3',\n 'focus-visible:u-outline',\n 'data-unchecked:bg-on-surface/dim-3',\n 'u-shadow-border-transition',\n 'overflow-x-hidden',\n ]),\n {\n variants: {\n /**\n * Size of the switch input.\n */\n size: makeVariants<'size', ['sm', 'md']>({\n sm: tw(['h-sz-24', 'w-sz-40', 'border-md']),\n md: tw(['h-sz-32', 'w-sz-56', 'border-[4px]']),\n }),\n /**\n * Color scheme of the switch input.\n */\n intent: makeVariants<\n 'intent',\n ['main', 'support', 'accent', 'success', 'alert', 'error', 'info', 'neutral']\n >({\n main: ['[&[data-checked]]:bg-main', 'hover:ring-main-container', 'text-main'],\n support: ['[&[data-checked]]:bg-support', 'hover:ring-support-container', 'text-support'],\n accent: ['[&[data-checked]]:bg-accent', 'hover:ring-accent-container', 'text-accent'],\n success: ['[&[data-checked]]:bg-success', 'hover:ring-success-container', 'text-success'],\n alert: ['[&[data-checked]]:bg-alert', 'hover:ring-alert-container', 'text-alert'],\n error: ['[&[data-checked]]:bg-error', 'hover:ring-error-container', 'text-error'],\n info: ['[&[data-checked]]:bg-info', 'hover:ring-info-container', 'text-info'],\n neutral: ['[&[data-checked]]:bg-neutral', 'hover:ring-neutral-container', 'text-neutral'],\n }),\n },\n defaultVariants: {\n intent: 'support',\n size: 'sm',\n },\n }\n)\n\nexport type StylesProps = VariantProps<typeof styles>\n\nexport const thumbWrapperStyles = cva(\n [\n 'pointer-events-none absolute inset-0 flex items-center',\n 'transition-all duration-200 ease-in-out',\n ],\n {\n variants: {\n checked: {\n true: 'translate-x-full',\n false: 'translate-x-0',\n },\n },\n }\n)\n\nexport const thumbStyles = cva(\n [\n 'absolute left-0 top-0 flex items-center justify-center',\n 'bg-surface',\n 'rounded-full',\n 'ring-0',\n 'transition-all duration-200 ease-in-out',\n ],\n {\n variants: {\n size: makeVariants<'size', ['sm', 'md']>({\n sm: ['h-sz-20', 'w-sz-20'],\n md: ['h-sz-24', 'w-sz-24'],\n }),\n checked: {\n true: '-translate-x-full',\n false: 'translate-x-0 text-on-surface/dim-2',\n },\n },\n defaultVariants: {\n size: 'sm',\n checked: false,\n },\n }\n)\n\nexport const thumbCheckSVGStyles = cva(['transition-opacity duration-200'], {\n variants: {\n size: makeVariants<'size', ['sm', 'md']>({\n sm: ['h-sz-10 w-sz-10'],\n md: ['h-sz-12 w-sz-12'],\n }),\n },\n defaultVariants: {\n size: 'sm',\n },\n})\n","import { Switch as BaseSwitch } from '@base-ui/react/switch'\nimport { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { useCombinedState } from '@spark-ui/hooks/use-combined-state'\nimport { Check } from '@spark-ui/icons/Check'\nimport { Close } from '@spark-ui/icons/Close'\nimport { type ComponentPropsWithRef, type ReactNode } from 'react'\n\nimport { useRenderSlot } from '../drawer/useRenderSlot'\nimport { Slot } from '../slot'\nimport {\n styles,\n type StylesProps,\n thumbCheckSVGStyles,\n thumbStyles,\n thumbWrapperStyles,\n} from './SwitchInput.styles'\n\nexport interface SwitchInputProps\n extends\n StylesProps,\n Omit<ComponentPropsWithRef<typeof BaseSwitch.Root>, 'value' | 'render' | 'onCheckedChange'> {\n /**\n * The state of the switch when it is initially rendered. Use when you do not need to control its state.\n */\n defaultChecked?: boolean\n /**\n * The controlled state of the switch. Must be used in conjunction with `onCheckedChange`.\n */\n checked?: boolean\n /**\n * Event handler called when the state of the switch changes.\n */\n onCheckedChange?: (checked: boolean) => void\n /**\n * When `true`, prevents the user from interacting with the switch.\n */\n disabled?: boolean\n /**\n * When true, indicates that the user must check the switch before the owning form can be submitted.\n */\n required?: boolean\n /**\n * The name of the switch. Submitted with its owning form as part of a name/value pair.\n */\n name?: string\n /**\n * The value given as data when submitted with a name.\n */\n value?: string\n /**\n * Icon shown inside the thumb of the Switch whenever it is checked\n */\n checkedIcon?: ReactNode\n /**\n * Icon shown inside the thumb of the Switch whenever it is unchecked\n */\n uncheckedIcon?: ReactNode\n /**\n * When true, the label will be placed on the left side of the Switch\n */\n reverse?: boolean\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n */\n asChild?: boolean\n}\n\nexport const SwitchInput = ({\n checked,\n checkedIcon = <Check />,\n defaultChecked,\n intent: intentProp,\n uncheckedIcon = <Close />,\n size = 'md',\n onCheckedChange,\n className,\n required,\n ref,\n asChild = false,\n ...rest\n}: SwitchInputProps) => {\n const [isChecked, setIsChecked] = useCombinedState(checked, defaultChecked)\n const { name, description, state, isRequired, isInvalid } = useFormFieldControl()\n const intent = state ?? intentProp\n const renderSlot = useRenderSlot(asChild, 'span')\n const isRequiredComputed = Boolean(required || isRequired)\n\n const handleCheckedChange = (updatedValue: boolean): void => {\n setIsChecked(updatedValue)\n onCheckedChange?.(updatedValue)\n }\n\n return (\n <BaseSwitch.Root\n data-spark-component=\"switch-input\"\n ref={ref}\n render={renderSlot}\n className={styles({ intent, size, className })}\n checked={checked}\n defaultChecked={defaultChecked}\n onCheckedChange={nextChecked => handleCheckedChange(nextChecked)}\n name={name}\n required={isRequiredComputed}\n aria-required={isRequiredComputed ? true : undefined}\n aria-invalid={isInvalid}\n aria-describedby={description}\n {...rest}\n >\n <span className={thumbWrapperStyles({ checked: isChecked })}>\n <BaseSwitch.Thumb className={thumbStyles({ size, checked: isChecked })}>\n {isChecked && checkedIcon && (\n <Slot className={thumbCheckSVGStyles({ size })}>{checkedIcon}</Slot>\n )}\n {!isChecked && uncheckedIcon && (\n <Slot className={thumbCheckSVGStyles({ size })}>{uncheckedIcon}</Slot>\n )}\n </BaseSwitch.Thumb>\n </span>\n </BaseSwitch.Root>\n )\n}\n\nSwitchInput.displayName = 'SwitchInput'\n","import { cva, VariantProps } from 'class-variance-authority'\n\nexport const labelStyles = cva('default:text-on-surface', {\n variants: {\n disabled: {\n true: ['text-neutral/dim-2', 'cursor-not-allowed'],\n false: ['cursor-pointer'],\n },\n },\n defaultVariants: {\n disabled: false,\n },\n})\n\nexport type LabelStylesProps = VariantProps<typeof labelStyles>\n","import { Label, LabelProps } from '../label'\nimport { labelStyles, LabelStylesProps } from './SwitchLabel.styles'\n\nexport interface SwitchLabelProps extends LabelStylesProps, LabelProps {\n /**\n * Change the component to the HTML tag or custom component of the only child.\n */\n asChild?: boolean\n /**\n * The id of the element the label is associated with.\n */\n htmlFor?: string\n /**\n * When true, prevents the user from interacting with the switch item.\n */\n disabled?: boolean\n}\n\nexport const SwitchLabel = ({ className, disabled, ...others }: SwitchLabelProps) => (\n <Label\n data-spark-component=\"switch-label\"\n className={labelStyles({ disabled, className })}\n {...others}\n />\n)\n","import { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { cx } from 'class-variance-authority'\nimport { useId } from 'react'\n\nimport { SwitchInput, SwitchInputProps } from './SwitchInput'\nimport { SwitchLabel } from './SwitchLabel'\n\nexport type SwitchProps = SwitchInputProps\n\nconst ID_PREFIX = ':switch'\n\nexport const Switch = ({\n size = 'md',\n children,\n className,\n id,\n disabled,\n reverse = false,\n ref,\n ...rest\n}: SwitchProps) => {\n const field = useFormFieldControl()\n\n const labelID = `${ID_PREFIX}-label-${useId()}`\n const innerID = `${ID_PREFIX}-input-${useId()}`\n const fieldID = field.id || id || innerID\n\n const switchLabel = children && (\n <SwitchLabel disabled={disabled} htmlFor={fieldID} id={labelID}>\n {children}\n </SwitchLabel>\n )\n\n const switchInput = (\n <SwitchInput\n ref={ref}\n size={size}\n id={fieldID}\n disabled={disabled}\n /**\n * If the switch doesn't have any direct label (children) then we should try to\n * get an eventual alternative label from FormField.\n * On last resort, we shouldn't forget to define an aria-label attribute.\n */\n aria-labelledby={children ? labelID : field.labelId}\n {...rest}\n />\n )\n\n const content = reverse ? (\n <>\n {switchLabel}\n {switchInput}\n </>\n ) : (\n <>\n {switchInput}\n {switchLabel}\n </>\n )\n\n return (\n <div\n data-spark-component=\"switch\"\n className={cx('gap-md text-body-1 flex items-center', className)}\n >\n {content}\n </div>\n )\n}\n\nSwitch.displayName = 'Switch'\n"],"mappings":"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"}