@spark-ui/components 17.2.1-beta.1 → 17.2.2

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 (530) hide show
  1. package/dist/radio-group/index.js +1 -1
  2. package/dist/radio-group/index.js.map +1 -1
  3. package/dist/radio-group/index.mjs +129 -123
  4. package/dist/radio-group/index.mjs.map +1 -1
  5. package/dist/segmented-control/index.js +1 -1
  6. package/dist/segmented-control/index.js.map +1 -1
  7. package/dist/segmented-control/index.mjs +128 -116
  8. package/dist/segmented-control/index.mjs.map +1 -1
  9. package/package.json +4 -5
  10. package/dist/accordion/Accordion.d.ts +0 -27
  11. package/dist/accordion/AccordionItem.d.ts +0 -12
  12. package/dist/accordion/AccordionItemContent.d.ts +0 -12
  13. package/dist/accordion/AccordionItemHeader.d.ts +0 -9
  14. package/dist/accordion/AccordionItemTrigger.d.ts +0 -12
  15. package/dist/accordion/index.d.mts +0 -15
  16. package/dist/accordion/index.d.ts +0 -15
  17. package/dist/accordion/useRenderSlot.d.ts +0 -3
  18. package/dist/alert-dialog/AlertDialog.d.ts +0 -29
  19. package/dist/alert-dialog/AlertDialogAction.d.ts +0 -13
  20. package/dist/alert-dialog/AlertDialogBody.d.ts +0 -12
  21. package/dist/alert-dialog/AlertDialogCancel.d.ts +0 -13
  22. package/dist/alert-dialog/AlertDialogContent.d.ts +0 -9
  23. package/dist/alert-dialog/AlertDialogContext.d.ts +0 -12
  24. package/dist/alert-dialog/AlertDialogDescription.d.ts +0 -9
  25. package/dist/alert-dialog/AlertDialogFooter.d.ts +0 -10
  26. package/dist/alert-dialog/AlertDialogHeader.d.ts +0 -10
  27. package/dist/alert-dialog/AlertDialogOverlay.d.ts +0 -9
  28. package/dist/alert-dialog/AlertDialogPortal.d.ts +0 -7
  29. package/dist/alert-dialog/AlertDialogTitle.d.ts +0 -9
  30. package/dist/alert-dialog/AlertDialogTrigger.d.ts +0 -13
  31. package/dist/alert-dialog/index.d.mts +0 -38
  32. package/dist/alert-dialog/index.d.ts +0 -38
  33. package/dist/alert-dialog/useRenderSlot.d.ts +0 -3
  34. package/dist/avatar/Avatar.d.ts +0 -3
  35. package/dist/avatar/AvatarAction.d.ts +0 -9
  36. package/dist/avatar/AvatarImage.d.ts +0 -7
  37. package/dist/avatar/AvatarOnlineBadge.d.ts +0 -9
  38. package/dist/avatar/AvatarPlaceholder.d.ts +0 -8
  39. package/dist/avatar/AvatarUser.d.ts +0 -7
  40. package/dist/avatar/context.d.ts +0 -5
  41. package/dist/avatar/index.d.mts +0 -15
  42. package/dist/avatar/index.d.ts +0 -15
  43. package/dist/avatar/types.d.ts +0 -24
  44. package/dist/badge/Badge.d.ts +0 -9
  45. package/dist/badge/BadgeItem.d.ts +0 -31
  46. package/dist/badge/BadgeItem.styles.d.ts +0 -7
  47. package/dist/badge/index.d.mts +0 -1
  48. package/dist/badge/index.d.ts +0 -1
  49. package/dist/breadcrumb/Breadcrumb.d.ts +0 -10
  50. package/dist/breadcrumb/Breadcrumb.styles.d.ts +0 -0
  51. package/dist/breadcrumb/BreadcrumbCurrentPage.d.ts +0 -11
  52. package/dist/breadcrumb/BreadcrumbItem.d.ts +0 -9
  53. package/dist/breadcrumb/BreadcrumbLink.d.ts +0 -12
  54. package/dist/breadcrumb/BreadcrumbSeparator.d.ts +0 -10
  55. package/dist/breadcrumb/index.d.mts +0 -12
  56. package/dist/breadcrumb/index.d.ts +0 -12
  57. package/dist/button/Button.d.ts +0 -26
  58. package/dist/button/Button.styles.d.ts +0 -10
  59. package/dist/button/index.d.mts +0 -1
  60. package/dist/button/index.d.ts +0 -1
  61. package/dist/button/variants/contrast.d.ts +0 -41
  62. package/dist/button/variants/filled.d.ts +0 -41
  63. package/dist/button/variants/ghost.d.ts +0 -41
  64. package/dist/button/variants/index.d.mts +0 -5
  65. package/dist/button/variants/index.d.ts +0 -5
  66. package/dist/button/variants/outlined.d.ts +0 -41
  67. package/dist/button/variants/tinted.d.ts +0 -41
  68. package/dist/card/Backdrop.d.ts +0 -14
  69. package/dist/card/Card.d.ts +0 -16
  70. package/dist/card/Card.styles.d.ts +0 -7
  71. package/dist/card/Content.d.ts +0 -15
  72. package/dist/card/Content.styles.d.ts +0 -8
  73. package/dist/card/context.d.ts +0 -11
  74. package/dist/card/index.d.mts +0 -8
  75. package/dist/card/index.d.ts +0 -8
  76. package/dist/card/utils.d.ts +0 -3
  77. package/dist/carousel/Carousel.d.ts +0 -12
  78. package/dist/carousel/CarouselControls.d.ts +0 -9
  79. package/dist/carousel/CarouselNextButton.d.ts +0 -5
  80. package/dist/carousel/CarouselPageIndicator.d.ts +0 -14
  81. package/dist/carousel/CarouselPagePicker.d.ts +0 -14
  82. package/dist/carousel/CarouselPrevButton.d.ts +0 -5
  83. package/dist/carousel/CarouselSlide.d.ts +0 -12
  84. package/dist/carousel/CarouselSlides.d.ts +0 -10
  85. package/dist/carousel/CarouselViewport.d.ts +0 -9
  86. package/dist/carousel/index.d.mts +0 -19
  87. package/dist/carousel/index.d.ts +0 -19
  88. package/dist/carousel/types.d.ts +0 -165
  89. package/dist/carousel/useCarousel.d.ts +0 -2
  90. package/dist/carousel/useCarouselVisibility.d.ts +0 -13
  91. package/dist/carousel/useEvent.d.ts +0 -7
  92. package/dist/carousel/useIsMounted.d.ts +0 -1
  93. package/dist/carousel/useIsVisible.d.ts +0 -6
  94. package/dist/carousel/useResizeObserver.d.ts +0 -2
  95. package/dist/carousel/useScrollEnd.d.ts +0 -3
  96. package/dist/carousel/useSnapPoints.d.ts +0 -10
  97. package/dist/carousel/utils.d.ts +0 -24
  98. package/dist/checkbox/Checkbox.d.ts +0 -10
  99. package/dist/checkbox/CheckboxGroup.d.ts +0 -18
  100. package/dist/checkbox/CheckboxGroup.styles.d.ts +0 -5
  101. package/dist/checkbox/CheckboxGroupContext.d.ts +0 -41
  102. package/dist/checkbox/CheckboxIndicator.d.ts +0 -9
  103. package/dist/checkbox/CheckboxInput.d.ts +0 -47
  104. package/dist/checkbox/CheckboxInput.styles.d.ts +0 -5
  105. package/dist/checkbox/CheckboxLabel.d.ts +0 -12
  106. package/dist/checkbox/CheckboxLabel.styles.d.ts +0 -5
  107. package/dist/checkbox/index.d.mts +0 -2
  108. package/dist/checkbox/index.d.ts +0 -2
  109. package/dist/chip/Chip.d.ts +0 -34
  110. package/dist/chip/Chip.styles.d.ts +0 -8
  111. package/dist/chip/ChipClearButton.d.ts +0 -10
  112. package/dist/chip/ChipClearButton.styles.d.ts +0 -10
  113. package/dist/chip/ChipContent.d.ts +0 -8
  114. package/dist/chip/ChipIcon.d.ts +0 -8
  115. package/dist/chip/ChipLeadingIcon.d.ts +0 -9
  116. package/dist/chip/ChipTrailingIcon.d.ts +0 -9
  117. package/dist/chip/index.d.mts +0 -15
  118. package/dist/chip/index.d.ts +0 -15
  119. package/dist/chip/useChipContext.d.ts +0 -4
  120. package/dist/chip/useChipElement.d.ts +0 -41
  121. package/dist/chip/variants/dashed.d.ts +0 -45
  122. package/dist/chip/variants/index.d.mts +0 -3
  123. package/dist/chip/variants/index.d.ts +0 -3
  124. package/dist/chip/variants/outlined.d.ts +0 -45
  125. package/dist/chip/variants/tinted.d.ts +0 -45
  126. package/dist/circular-meter/CircularMeter.d.ts +0 -34
  127. package/dist/circular-meter/CircularMeter.styles.d.ts +0 -5
  128. package/dist/circular-meter/CircularMeterContent.d.ts +0 -6
  129. package/dist/circular-meter/CircularMeterContext.d.ts +0 -36
  130. package/dist/circular-meter/CircularMeterLabel.d.ts +0 -7
  131. package/dist/circular-meter/CircularMeterTrack.d.ts +0 -8
  132. package/dist/circular-meter/CircularMeterValue.d.ts +0 -7
  133. package/dist/circular-meter/index.d.mts +0 -16
  134. package/dist/circular-meter/index.d.ts +0 -16
  135. package/dist/circular-meter/useIntersectionAnimation.d.ts +0 -26
  136. package/dist/collapsible/Content.d.ts +0 -12
  137. package/dist/collapsible/Root.d.ts +0 -12
  138. package/dist/collapsible/Trigger.d.ts +0 -11
  139. package/dist/collapsible/index.d.mts +0 -7
  140. package/dist/collapsible/index.d.ts +0 -7
  141. package/dist/collapsible/useRenderSlot.d.ts +0 -3
  142. package/dist/combobox/Combobox.d.ts +0 -6
  143. package/dist/combobox/ComboboxClearButton.d.ts +0 -9
  144. package/dist/combobox/ComboboxContext.d.ts +0 -108
  145. package/dist/combobox/ComboboxDisclosure.d.ts +0 -13
  146. package/dist/combobox/ComboboxEmpty.d.ts +0 -11
  147. package/dist/combobox/ComboboxGroup.d.ts +0 -11
  148. package/dist/combobox/ComboboxInput.d.ts +0 -15
  149. package/dist/combobox/ComboboxItem.d.ts +0 -12
  150. package/dist/combobox/ComboboxItemContext.d.ts +0 -17
  151. package/dist/combobox/ComboboxItemIndicator.d.ts +0 -11
  152. package/dist/combobox/ComboboxItemText.d.ts +0 -10
  153. package/dist/combobox/ComboboxItems.d.ts +0 -11
  154. package/dist/combobox/ComboboxItemsGroupContext.d.ts +0 -8
  155. package/dist/combobox/ComboboxLabel.d.ts +0 -11
  156. package/dist/combobox/ComboboxLeadingIcon.d.ts +0 -7
  157. package/dist/combobox/ComboboxPopover.d.ts +0 -10
  158. package/dist/combobox/ComboboxPortal.d.ts +0 -2
  159. package/dist/combobox/ComboboxSelectedItems.d.ts +0 -4
  160. package/dist/combobox/ComboboxTrigger.d.ts +0 -11
  161. package/dist/combobox/ComboboxTrigger.styles.d.ts +0 -6
  162. package/dist/combobox/index.d.mts +0 -35
  163. package/dist/combobox/index.d.ts +0 -35
  164. package/dist/combobox/tests/test-utils.d.ts +0 -8
  165. package/dist/combobox/types.d.ts +0 -8
  166. package/dist/combobox/useCombobox/multipleSelectionReducer.d.ts +0 -13
  167. package/dist/combobox/useCombobox/singleSelectionReducer.d.ts +0 -8
  168. package/dist/combobox/utils/index.d.mts +0 -14
  169. package/dist/combobox/utils/index.d.ts +0 -14
  170. package/dist/combobox/utils/useWidthIncreaseCallback.d.ts +0 -2
  171. package/dist/dialog/Dialog.d.ts +0 -33
  172. package/dist/dialog/DialogBody.d.ts +0 -12
  173. package/dist/dialog/DialogClose.d.ts +0 -10
  174. package/dist/dialog/DialogCloseButton.d.ts +0 -9
  175. package/dist/dialog/DialogContent.d.ts +0 -14
  176. package/dist/dialog/DialogContent.styles.d.ts +0 -6
  177. package/dist/dialog/DialogContext.d.ts +0 -11
  178. package/dist/dialog/DialogDescription.d.ts +0 -9
  179. package/dist/dialog/DialogFooter.d.ts +0 -10
  180. package/dist/dialog/DialogHeader.d.ts +0 -10
  181. package/dist/dialog/DialogOverlay.d.ts +0 -9
  182. package/dist/dialog/DialogPortal.d.ts +0 -7
  183. package/dist/dialog/DialogTitle.d.ts +0 -9
  184. package/dist/dialog/DialogTrigger.d.ts +0 -13
  185. package/dist/dialog/index.d.mts +0 -37
  186. package/dist/dialog/index.d.ts +0 -37
  187. package/dist/divider/Divider.d.ts +0 -30
  188. package/dist/divider/Divider.styles.d.ts +0 -9
  189. package/dist/divider/DividerContent.d.ts +0 -13
  190. package/dist/divider/index.d.mts +0 -6
  191. package/dist/divider/index.d.ts +0 -6
  192. package/dist/divider/variants/intents.d.ts +0 -17
  193. package/dist/drawer/Drawer.d.ts +0 -32
  194. package/dist/drawer/DrawerBody.d.ts +0 -11
  195. package/dist/drawer/DrawerBody.styles.d.ts +0 -5
  196. package/dist/drawer/DrawerClose.d.ts +0 -13
  197. package/dist/drawer/DrawerCloseButton.d.ts +0 -7
  198. package/dist/drawer/DrawerContent.d.ts +0 -10
  199. package/dist/drawer/DrawerContent.styles.d.ts +0 -6
  200. package/dist/drawer/DrawerContext.d.ts +0 -9
  201. package/dist/drawer/DrawerDescription.d.ts +0 -9
  202. package/dist/drawer/DrawerFooter.d.ts +0 -8
  203. package/dist/drawer/DrawerHeader.d.ts +0 -10
  204. package/dist/drawer/DrawerOverlay.d.ts +0 -9
  205. package/dist/drawer/DrawerPortal.d.ts +0 -7
  206. package/dist/drawer/DrawerTitle.d.ts +0 -9
  207. package/dist/drawer/DrawerTrigger.d.ts +0 -13
  208. package/dist/drawer/index.d.mts +0 -37
  209. package/dist/drawer/index.d.ts +0 -37
  210. package/dist/drawer/useRenderSlot.d.ts +0 -3
  211. package/dist/dropdown/Dropdown.d.ts +0 -6
  212. package/dist/dropdown/DropdownContext.d.ts +0 -81
  213. package/dist/dropdown/DropdownDivider.d.ts +0 -10
  214. package/dist/dropdown/DropdownGroup.d.ts +0 -11
  215. package/dist/dropdown/DropdownItem.d.ts +0 -12
  216. package/dist/dropdown/DropdownItemContext.d.ts +0 -17
  217. package/dist/dropdown/DropdownItemIndicator.d.ts +0 -11
  218. package/dist/dropdown/DropdownItemText.d.ts +0 -9
  219. package/dist/dropdown/DropdownItems.d.ts +0 -21
  220. package/dist/dropdown/DropdownItemsGroupContext.d.ts +0 -8
  221. package/dist/dropdown/DropdownLabel.d.ts +0 -11
  222. package/dist/dropdown/DropdownLeadingIcon.d.ts +0 -7
  223. package/dist/dropdown/DropdownPopover.d.ts +0 -6
  224. package/dist/dropdown/DropdownPortal.d.ts +0 -2
  225. package/dist/dropdown/DropdownTrigger.d.ts +0 -12
  226. package/dist/dropdown/DropdownTrigger.styles.d.ts +0 -5
  227. package/dist/dropdown/DropdownValue.d.ts +0 -11
  228. package/dist/dropdown/index.d.mts +0 -29
  229. package/dist/dropdown/index.d.ts +0 -29
  230. package/dist/dropdown/types.d.ts +0 -8
  231. package/dist/dropdown/useDropdown.d.ts +0 -41
  232. package/dist/dropdown/utils.d.ts +0 -13
  233. package/dist/file-upload/FileUpload.d.ts +0 -130
  234. package/dist/file-upload/FileUploadAcceptedFile.d.ts +0 -25
  235. package/dist/file-upload/FileUploadContext.d.ts +0 -17
  236. package/dist/file-upload/FileUploadDropzone.d.ts +0 -10
  237. package/dist/file-upload/FileUploadItemDeleteTrigger.d.ts +0 -11
  238. package/dist/file-upload/FileUploadPreviewImage.d.ts +0 -17
  239. package/dist/file-upload/FileUploadRejectedFile.d.ts +0 -24
  240. package/dist/file-upload/FileUploadRejectedFileDeleteTrigger.d.ts +0 -12
  241. package/dist/file-upload/FileUploadTrigger.d.ts +0 -12
  242. package/dist/file-upload/constants.d.ts +0 -29
  243. package/dist/file-upload/index.d.mts +0 -22
  244. package/dist/file-upload/index.d.ts +0 -22
  245. package/dist/file-upload/test-utils.d.ts +0 -9
  246. package/dist/file-upload/useFileUploadState.d.ts +0 -88
  247. package/dist/file-upload/utils.d.ts +0 -40
  248. package/dist/form-field/FormField.d.ts +0 -21
  249. package/dist/form-field/FormFieldAlertMessage.d.ts +0 -9
  250. package/dist/form-field/FormFieldCharactersCount.d.ts +0 -26
  251. package/dist/form-field/FormFieldContext.d.ts +0 -49
  252. package/dist/form-field/FormFieldControl.d.ts +0 -12
  253. package/dist/form-field/FormFieldErrorMessage.d.ts +0 -9
  254. package/dist/form-field/FormFieldHelperMessage.d.ts +0 -9
  255. package/dist/form-field/FormFieldLabel.d.ts +0 -13
  256. package/dist/form-field/FormFieldMessage.d.ts +0 -8
  257. package/dist/form-field/FormFieldProvider.d.ts +0 -9
  258. package/dist/form-field/FormFieldRequiredIndicator.d.ts +0 -9
  259. package/dist/form-field/FormFieldStateMessage.d.ts +0 -10
  260. package/dist/form-field/FormFieldSuccessMessage.d.ts +0 -9
  261. package/dist/form-field/index.d.mts +0 -31
  262. package/dist/form-field/index.d.ts +0 -31
  263. package/dist/icon/Icon.d.ts +0 -17
  264. package/dist/icon/Icon.styles.d.ts +0 -6
  265. package/dist/icon/index.d.mts +0 -1
  266. package/dist/icon/index.d.ts +0 -1
  267. package/dist/icon-button/IconButton.d.ts +0 -10
  268. package/dist/icon-button/IconButton.styles.d.ts +0 -5
  269. package/dist/icon-button/index.d.mts +0 -1
  270. package/dist/icon-button/index.d.ts +0 -1
  271. package/dist/input/Input.d.ts +0 -14
  272. package/dist/input/Input.styles.d.ts +0 -11
  273. package/dist/input/InputAddon.d.ts +0 -9
  274. package/dist/input/InputAddon.styles.d.ts +0 -9
  275. package/dist/input/InputClearButton.d.ts +0 -12
  276. package/dist/input/InputGroup.d.ts +0 -17
  277. package/dist/input/InputGroup.styles.d.ts +0 -6
  278. package/dist/input/InputGroupContext.d.ts +0 -14
  279. package/dist/input/InputIcon.d.ts +0 -6
  280. package/dist/input/InputLeadingAddon.d.ts +0 -11
  281. package/dist/input/InputLeadingIcon.d.ts +0 -7
  282. package/dist/input/InputTrailingAddon.d.ts +0 -11
  283. package/dist/input/InputTrailingIcon.d.ts +0 -7
  284. package/dist/input/index.d.mts +0 -21
  285. package/dist/input/index.d.ts +0 -21
  286. package/dist/input-otp/InputOTP.d.ts +0 -90
  287. package/dist/input-otp/InputOTP.styles.d.ts +0 -10
  288. package/dist/input-otp/InputOTPContext.d.ts +0 -17
  289. package/dist/input-otp/InputOTPGroup.d.ts +0 -7
  290. package/dist/input-otp/InputOTPSeparator.d.ts +0 -7
  291. package/dist/input-otp/InputOTPSlot.d.ts +0 -12
  292. package/dist/input-otp/index.d.mts +0 -14
  293. package/dist/input-otp/index.d.ts +0 -14
  294. package/dist/input-otp/useInputOTP.d.ts +0 -48
  295. package/dist/kbd/Kbd.d.ts +0 -5
  296. package/dist/kbd/index.d.mts +0 -1
  297. package/dist/kbd/index.d.ts +0 -1
  298. package/dist/label/Label.d.ts +0 -9
  299. package/dist/label/LabelRequiredIndicator.d.ts +0 -6
  300. package/dist/label/index.d.mts +0 -7
  301. package/dist/label/index.d.ts +0 -7
  302. package/dist/link-box/LinkBox.d.ts +0 -8
  303. package/dist/link-box/LinkBoxLink.d.ts +0 -8
  304. package/dist/link-box/LinkBoxRaised.d.ts +0 -9
  305. package/dist/link-box/index.d.mts +0 -9
  306. package/dist/link-box/index.d.ts +0 -9
  307. package/dist/meter/Meter.d.ts +0 -18
  308. package/dist/meter/MeterContext.d.ts +0 -12
  309. package/dist/meter/MeterLabel.d.ts +0 -7
  310. package/dist/meter/MeterTrack.d.ts +0 -7
  311. package/dist/meter/MeterTrack.styles.d.ts +0 -8
  312. package/dist/meter/MeterValue.d.ts +0 -9
  313. package/dist/meter/index.d.mts +0 -13
  314. package/dist/meter/index.d.ts +0 -13
  315. package/dist/meter/useIntersectionAnimation.d.ts +0 -26
  316. package/dist/pagination/Pagination.d.ts +0 -8
  317. package/dist/pagination/PaginationContext.d.ts +0 -43
  318. package/dist/pagination/PaginationEllipsis.d.ts +0 -9
  319. package/dist/pagination/PaginationFirstPageTrigger.d.ts +0 -22
  320. package/dist/pagination/PaginationItem.d.ts +0 -31
  321. package/dist/pagination/PaginationLastPageTrigger.d.ts +0 -22
  322. package/dist/pagination/PaginationNextTrigger.d.ts +0 -22
  323. package/dist/pagination/PaginationPages.d.ts +0 -16
  324. package/dist/pagination/PaginationPrevTrigger.d.ts +0 -22
  325. package/dist/pagination/index.d.mts +0 -18
  326. package/dist/pagination/index.d.ts +0 -18
  327. package/dist/pagination/utils.d.ts +0 -1
  328. package/dist/popover/Popover.d.ts +0 -9
  329. package/dist/popover/PopoverAnchor.d.ts +0 -9
  330. package/dist/popover/PopoverArrow.d.ts +0 -9
  331. package/dist/popover/PopoverCloseButton.d.ts +0 -10
  332. package/dist/popover/PopoverContent.d.ts +0 -10
  333. package/dist/popover/PopoverContent.styles.d.ts +0 -9
  334. package/dist/popover/PopoverContext.d.ts +0 -15
  335. package/dist/popover/PopoverHeader.d.ts +0 -10
  336. package/dist/popover/PopoverPortal.d.ts +0 -7
  337. package/dist/popover/PopoverTrigger.d.ts +0 -9
  338. package/dist/popover/index.d.mts +0 -17
  339. package/dist/popover/index.d.ts +0 -17
  340. package/dist/portal/Portal.d.ts +0 -10
  341. package/dist/portal/index.d.mts +0 -1
  342. package/dist/portal/index.d.ts +0 -1
  343. package/dist/progress/Progress.d.ts +0 -24
  344. package/dist/progress/ProgressContext.d.ts +0 -13
  345. package/dist/progress/ProgressIndicator.d.ts +0 -13
  346. package/dist/progress/ProgressLabel.d.ts +0 -7
  347. package/dist/progress/ProgressTrack.d.ts +0 -7
  348. package/dist/progress/ProgressValue.d.ts +0 -7
  349. package/dist/progress/index.d.mts +0 -13
  350. package/dist/progress/index.d.ts +0 -13
  351. package/dist/progress-tracker/ProgressTracker.d.ts +0 -27
  352. package/dist/progress-tracker/ProgressTracker.styles.d.ts +0 -1
  353. package/dist/progress-tracker/ProgressTrackerContext.d.ts +0 -15
  354. package/dist/progress-tracker/ProgressTrackerStep.d.ts +0 -12
  355. package/dist/progress-tracker/ProgressTrackerStep.styles.d.ts +0 -10
  356. package/dist/progress-tracker/ProgressTrackerStepIndicator.d.ts +0 -15
  357. package/dist/progress-tracker/ProgressTrackerStepIndicator.styles.d.ts +0 -7
  358. package/dist/progress-tracker/ProgressTrackerStepLabel.d.ts +0 -9
  359. package/dist/progress-tracker/index.d.mts +0 -10
  360. package/dist/progress-tracker/index.d.ts +0 -10
  361. package/dist/radio-group/Radio.d.ts +0 -9
  362. package/dist/radio-group/RadioGroup.d.ts +0 -50
  363. package/dist/radio-group/RadioGroup.styles.d.ts +0 -5
  364. package/dist/radio-group/RadioGroupContext.d.ts +0 -5
  365. package/dist/radio-group/RadioGroupProvider.d.ts +0 -7
  366. package/dist/radio-group/RadioIndicator.d.ts +0 -15
  367. package/dist/radio-group/RadioIndicator.styles.d.ts +0 -5
  368. package/dist/radio-group/RadioInput.d.ts +0 -37
  369. package/dist/radio-group/RadioInput.styles.d.ts +0 -5
  370. package/dist/radio-group/index.d.mts +0 -7
  371. package/dist/radio-group/index.d.ts +0 -7
  372. package/dist/rating/Rating.d.ts +0 -57
  373. package/dist/rating/RatingStar.d.ts +0 -19
  374. package/dist/rating/RatingStar.styles.d.ts +0 -14
  375. package/dist/rating/index.d.mts +0 -1
  376. package/dist/rating/index.d.ts +0 -1
  377. package/dist/rating/types.d.ts +0 -2
  378. package/dist/rating/utils.d.ts +0 -7
  379. package/dist/rating-display/RatingDisplay.d.ts +0 -31
  380. package/dist/rating-display/RatingDisplayContext.d.ts +0 -12
  381. package/dist/rating-display/RatingDisplayCount.d.ts +0 -12
  382. package/dist/rating-display/RatingDisplayStar.d.ts +0 -16
  383. package/dist/rating-display/RatingDisplayStars.d.ts +0 -22
  384. package/dist/rating-display/RatingDisplayValue.d.ts +0 -13
  385. package/dist/rating-display/index.d.mts +0 -14
  386. package/dist/rating-display/index.d.ts +0 -14
  387. package/dist/rating-display/types.d.ts +0 -1
  388. package/dist/rating-display/utils.d.ts +0 -10
  389. package/dist/scrolling-list/ScrollingList.d.ts +0 -57
  390. package/dist/scrolling-list/ScrollingListControls.d.ts +0 -18
  391. package/dist/scrolling-list/ScrollingListItem.d.ts +0 -17
  392. package/dist/scrolling-list/ScrollingListItems.d.ts +0 -11
  393. package/dist/scrolling-list/ScrollingListNextButton.d.ts +0 -5
  394. package/dist/scrolling-list/ScrollingListPrevButton.d.ts +0 -5
  395. package/dist/scrolling-list/ScrollingListSkipButton.d.ts +0 -9
  396. package/dist/scrolling-list/index.d.mts +0 -15
  397. package/dist/scrolling-list/index.d.ts +0 -15
  398. package/dist/scrolling-list/useFocusWithinScroll.d.ts +0 -3
  399. package/dist/segmented-control/SegmentedControl.d.ts +0 -22
  400. package/dist/segmented-control/SegmentedControl.styles.d.ts +0 -5
  401. package/dist/segmented-control/SegmentedControlContext.d.ts +0 -7
  402. package/dist/segmented-control/SegmentedControlIndicator.d.ts +0 -8
  403. package/dist/segmented-control/SegmentedControlItem.d.ts +0 -18
  404. package/dist/segmented-control/index.d.mts +0 -10
  405. package/dist/segmented-control/index.d.ts +0 -10
  406. package/dist/segmented-gauge/SegmentedGauge.d.ts +0 -66
  407. package/dist/segmented-gauge/SegmentedGaugeContext.d.ts +0 -14
  408. package/dist/segmented-gauge/SegmentedGaugeLabel.d.ts +0 -9
  409. package/dist/segmented-gauge/SegmentedGaugeSegment.d.ts +0 -12
  410. package/dist/segmented-gauge/SegmentedGaugeTrack.d.ts +0 -8
  411. package/dist/segmented-gauge/index.d.mts +0 -13
  412. package/dist/segmented-gauge/index.d.ts +0 -13
  413. package/dist/select/Select.d.ts +0 -6
  414. package/dist/select/SelectContext.d.ts +0 -59
  415. package/dist/select/SelectGroup.d.ts +0 -11
  416. package/dist/select/SelectItem.d.ts +0 -11
  417. package/dist/select/SelectItems.d.ts +0 -10
  418. package/dist/select/SelectItemsGroupContext.d.ts +0 -9
  419. package/dist/select/SelectLabel.d.ts +0 -8
  420. package/dist/select/SelectLeadingIcon.d.ts +0 -7
  421. package/dist/select/SelectPlaceholder.d.ts +0 -10
  422. package/dist/select/SelectTrigger.d.ts +0 -16
  423. package/dist/select/SelectTrigger.styles.d.ts +0 -5
  424. package/dist/select/SelectValue.d.ts +0 -15
  425. package/dist/select/index.d.mts +0 -21
  426. package/dist/select/index.d.ts +0 -21
  427. package/dist/select/types.d.ts +0 -6
  428. package/dist/select/utils.d.ts +0 -4
  429. package/dist/skeleton/Skeleton.d.ts +0 -17
  430. package/dist/skeleton/Skeleton.styles.d.ts +0 -5
  431. package/dist/skeleton/SkeletonItem.d.ts +0 -31
  432. package/dist/skeleton/SkeletonItem.styles.d.ts +0 -8
  433. package/dist/skeleton/index.d.mts +0 -8
  434. package/dist/skeleton/index.d.ts +0 -8
  435. package/dist/slider/Slider.d.ts +0 -55
  436. package/dist/slider/Slider.styles.d.ts +0 -1
  437. package/dist/slider/SliderContext.d.ts +0 -13
  438. package/dist/slider/SliderControl.d.ts +0 -7
  439. package/dist/slider/SliderIndicator.d.ts +0 -7
  440. package/dist/slider/SliderLabel.d.ts +0 -13
  441. package/dist/slider/SliderMaxValue.d.ts +0 -6
  442. package/dist/slider/SliderMinValue.d.ts +0 -6
  443. package/dist/slider/SliderThumb.d.ts +0 -7
  444. package/dist/slider/SliderThumb.styles.d.ts +0 -5
  445. package/dist/slider/SliderThumbContext.d.ts +0 -5
  446. package/dist/slider/SliderTrack.d.ts +0 -7
  447. package/dist/slider/SliderTrack.styles.d.ts +0 -6
  448. package/dist/slider/SliderValue.d.ts +0 -12
  449. package/dist/slider/index.d.mts +0 -20
  450. package/dist/slider/index.d.ts +0 -20
  451. package/dist/slider/useSliderValueBoundaries.d.ts +0 -12
  452. package/dist/slot/Slot.d.ts +0 -12
  453. package/dist/slot/index.d.mts +0 -1
  454. package/dist/slot/index.d.ts +0 -1
  455. package/dist/snackbar/Snackbar.d.ts +0 -29
  456. package/dist/snackbar/SnackbarItem.d.ts +0 -49
  457. package/dist/snackbar/SnackbarItem.styles.d.ts +0 -10
  458. package/dist/snackbar/SnackbarItemAction.d.ts +0 -10
  459. package/dist/snackbar/SnackbarItemClose.d.ts +0 -9
  460. package/dist/snackbar/SnackbarItemContext.d.ts +0 -8
  461. package/dist/snackbar/SnackbarItemIcon.d.ts +0 -7
  462. package/dist/snackbar/SnackbarRegion.d.ts +0 -30
  463. package/dist/snackbar/SnackbarRegion.styles.d.ts +0 -5
  464. package/dist/snackbar/index.d.mts +0 -13
  465. package/dist/snackbar/index.d.ts +0 -13
  466. package/dist/snackbar/snackbarVariants.d.ts +0 -74
  467. package/dist/snackbar/useSnackbarGlobalStore.d.ts +0 -18
  468. package/dist/snackbar/useSwipe.d.ts +0 -15
  469. package/dist/spinner/Spinner.d.ts +0 -9
  470. package/dist/spinner/Spinner.styles.d.ts +0 -7
  471. package/dist/spinner/index.d.mts +0 -1
  472. package/dist/spinner/index.d.ts +0 -1
  473. package/dist/stepper/Stepper.d.ts +0 -9
  474. package/dist/stepper/StepperButton.d.ts +0 -14
  475. package/dist/stepper/StepperInput.d.ts +0 -7
  476. package/dist/stepper/index.d.mts +0 -9
  477. package/dist/stepper/index.d.ts +0 -9
  478. package/dist/stepper/types.d.ts +0 -46
  479. package/dist/stepper/useStepper.d.ts +0 -2
  480. package/dist/switch/Switch.d.ts +0 -6
  481. package/dist/switch/SwitchInput.d.ts +0 -53
  482. package/dist/switch/SwitchInput.styles.d.ts +0 -16
  483. package/dist/switch/SwitchLabel.d.ts +0 -17
  484. package/dist/switch/SwitchLabel.styles.d.ts +0 -5
  485. package/dist/switch/index.d.mts +0 -1
  486. package/dist/switch/index.d.ts +0 -1
  487. package/dist/tabs/Tabs.d.ts +0 -24
  488. package/dist/tabs/TabsContent.d.ts +0 -22
  489. package/dist/tabs/TabsContent.styles.d.ts +0 -3
  490. package/dist/tabs/TabsContext.d.ts +0 -7
  491. package/dist/tabs/TabsList.d.ts +0 -20
  492. package/dist/tabs/TabsList.styles.d.ts +0 -3
  493. package/dist/tabs/TabsPopover.d.ts +0 -29
  494. package/dist/tabs/TabsPopoverAbstraction.d.ts +0 -27
  495. package/dist/tabs/TabsRoot.styles.d.ts +0 -1
  496. package/dist/tabs/TabsTrigger.d.ts +0 -41
  497. package/dist/tabs/TabsTrigger.styles.d.ts +0 -8
  498. package/dist/tabs/index.d.mts +0 -13
  499. package/dist/tabs/index.d.ts +0 -13
  500. package/dist/tabs/useRenderSlot.d.ts +0 -1
  501. package/dist/tabs/useResizeObserver.d.ts +0 -8
  502. package/dist/tag/Tag.d.ts +0 -17
  503. package/dist/tag/Tag.styles.d.ts +0 -8
  504. package/dist/tag/index.d.mts +0 -1
  505. package/dist/tag/index.d.ts +0 -1
  506. package/dist/tag/variants/filled.d.ts +0 -37
  507. package/dist/tag/variants/index.d.mts +0 -3
  508. package/dist/tag/variants/index.d.ts +0 -3
  509. package/dist/tag/variants/outlined.d.ts +0 -33
  510. package/dist/tag/variants/tinted.d.ts +0 -33
  511. package/dist/text-link/TextLink.d.ts +0 -16
  512. package/dist/text-link/index.d.mts +0 -1
  513. package/dist/text-link/index.d.ts +0 -1
  514. package/dist/textarea/Textarea.d.ts +0 -14
  515. package/dist/textarea/TextareaClearButton.d.ts +0 -10
  516. package/dist/textarea/TextareaGroup.d.ts +0 -6
  517. package/dist/textarea/TextareaLeadingIcon.d.ts +0 -7
  518. package/dist/textarea/TextareaTrailingIcon.d.ts +0 -7
  519. package/dist/textarea/index.d.mts +0 -14
  520. package/dist/textarea/index.d.ts +0 -14
  521. package/dist/toast/Toast.d.ts +0 -4
  522. package/dist/toast/Toast.styles.d.ts +0 -10
  523. package/dist/toast/index.d.mts +0 -20
  524. package/dist/toast/index.d.ts +0 -20
  525. package/dist/toast/types.d.ts +0 -44
  526. package/dist/toast/useRenderSlot.d.ts +0 -3
  527. package/dist/toast/useToastManager.d.ts +0 -2
  528. package/dist/visually-hidden/VisuallyHidden.d.ts +0 -12
  529. package/dist/visually-hidden/index.d.mts +0 -1
  530. package/dist/visually-hidden/index.d.ts +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/segmented-control/SegmentedControl.styles.ts","../../src/segmented-control/SegmentedControlContext.tsx","../../src/segmented-control/SegmentedControl.tsx","../../src/segmented-control/SegmentedControlIndicator.tsx","../../src/segmented-control/SegmentedControlItem.tsx","../../src/segmented-control/index.ts"],"sourcesContent":["import { cva, VariantProps } from 'class-variance-authority'\n\nexport const rootStyles = cva([\n 'default:self-start',\n 'group inline-grid grid-flow-col auto-cols-fr',\n 'relative items-stretch min-w-max',\n 'rounded-xl p-sm',\n 'bg-surface border-sm border-outline',\n])\n\nexport const itemStyles = cva([\n 'relative z-raised min-h-sz-44 focus-visible:outline-none',\n 'flex flex-none items-center justify-center flex-col',\n 'default:px-lg default:py-md',\n 'rounded-[20px]',\n 'cursor-pointer select-none',\n 'font-medium',\n 'transition-colors duration-150',\n 'outline-none',\n 'focus-visible:u-outline',\n 'data-disabled:cursor-not-allowed data-disabled:opacity-dim-3',\n 'data-checked:text-on-support-container',\n 'data-checked:font-bold',\n])\n\nexport const indicatorStyles = cva([\n 'absolute z-base',\n 'rounded-[20px]',\n 'bg-support-container border-md border-support',\n 'group-has-focus-visible:border-focus',\n 'transition-[left,top,width,height] duration-200 ease-in-out',\n 'pointer-events-none',\n])\n\nexport type SegmentedControlStylesProps = VariantProps<typeof itemStyles>\n","import { createContext, RefObject, useContext } from 'react'\n\nexport interface SegmentedControlContextInterface {\n checkedValue: string | null\n containerRef: RefObject<HTMLDivElement | null>\n}\n\nexport const SegmentedControlContext = createContext<SegmentedControlContextInterface>(\n {} as SegmentedControlContextInterface\n)\n\nexport const useSegmentedControlContext = () => {\n const context = useContext(SegmentedControlContext)\n\n if (!context) {\n throw Error('useSegmentedControlContext must be used within a SegmentedControlContext Provider')\n }\n\n return context\n}\n","import { RadioGroup } from '@base-ui/react/radio-group'\nimport { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { Children, type ComponentProps, isValidElement, Ref, useRef, useState } from 'react'\n\nimport type { SegmentedControlStylesProps } from './SegmentedControl.styles'\nimport { rootStyles } from './SegmentedControl.styles'\nimport { SegmentedControlContext } from './SegmentedControlContext'\n\nexport interface SegmentedControlProps\n extends Omit<ComponentProps<typeof RadioGroup>, 'value' | 'defaultValue' | 'onValueChange'>,\n SegmentedControlStylesProps {\n /**\n * The controlled selected value.\n */\n value?: string\n /**\n * The uncontrolled default selected value.\n */\n defaultValue?: string\n /**\n * Callback fired when the selected value changes.\n */\n onValueChange?: (value: string) => void\n ref?: Ref<HTMLDivElement>\n}\n\nconst getFirstItemValue = (children: React.ReactNode): string | null => {\n let firstValue: string | null = null\n\n Children.forEach(children, child => {\n if (firstValue !== null) return\n if (isValidElement(child) && typeof (child.props as { value?: string }).value === 'string') {\n firstValue = (child.props as { value: string }).value\n }\n })\n\n return firstValue\n}\n\nexport const SegmentedControl = ({\n value,\n defaultValue,\n onValueChange,\n className,\n children,\n ref,\n ...rest\n}: SegmentedControlProps) => {\n const containerRef = useRef<HTMLDivElement | null>(null)\n const mergedRef = useMergeRefs(containerRef, ref)\n\n const firstValue = getFirstItemValue(children)\n\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = useState<string | null>(\n () => defaultValue ?? firstValue\n )\n const checkedValue = isControlled ? (value ?? null) : internalValue\n\n const handleValueChange = (newValue: unknown) => {\n const next = newValue as string\n\n if (!isControlled) {\n setInternalValue(next)\n }\n\n onValueChange?.(next)\n }\n\n const { labelId, description, isRequired, isInvalid, name } = useFormFieldControl()\n\n return (\n <SegmentedControlContext.Provider\n value={{\n checkedValue,\n containerRef,\n }}\n >\n <RadioGroup\n ref={mergedRef}\n value={isControlled ? value : undefined}\n defaultValue={!isControlled ? (defaultValue ?? firstValue ?? undefined) : undefined}\n onValueChange={handleValueChange}\n data-spark-component=\"segmented-control\"\n className={rootStyles({ className })}\n aria-labelledby={labelId}\n aria-describedby={description}\n aria-required={isRequired || undefined}\n aria-invalid={isInvalid || undefined}\n name={name}\n {...rest}\n >\n {children}\n </RadioGroup>\n </SegmentedControlContext.Provider>\n )\n}\n\nSegmentedControl.displayName = 'SegmentedControl'\n","import { type ComponentProps, type CSSProperties, Ref, useEffect, useState } from 'react'\n\nimport { indicatorStyles } from './SegmentedControl.styles'\nimport { useSegmentedControlContext } from './SegmentedControlContext'\n\ninterface IndicatorRect {\n left: number\n top: number\n width: number\n height: number\n}\n\nexport interface SegmentedControlIndicatorProps extends ComponentProps<'span'> {\n ref?: Ref<HTMLSpanElement>\n}\n\nexport const SegmentedControlIndicator = ({\n className,\n ref,\n ...rest\n}: SegmentedControlIndicatorProps) => {\n const { checkedValue, containerRef } = useSegmentedControlContext()\n const [rect, setRect] = useState<IndicatorRect | null>(null)\n\n useEffect(() => {\n const container = containerRef.current\n\n if (!container) {\n return\n }\n\n const selectedItem = checkedValue\n ? container.querySelector<HTMLElement>(`[data-value=\"${checkedValue}\"]`)\n : null\n\n if (!selectedItem) {\n setRect(null)\n\n return\n }\n\n const containerRect = container.getBoundingClientRect()\n const itemRect = selectedItem.getBoundingClientRect()\n\n const rootBorderWidth = 1\n\n setRect({\n left: itemRect.left - containerRect.left - rootBorderWidth,\n top: itemRect.top - containerRect.top - rootBorderWidth,\n width: itemRect.width,\n height: itemRect.height,\n })\n }, [checkedValue, containerRef])\n\n if (!rect) return null\n\n const style: CSSProperties = {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n }\n\n return (\n <span\n ref={ref}\n data-spark-component=\"segmented-control-indicator\"\n aria-hidden\n className={indicatorStyles({ className })}\n style={style}\n {...rest}\n />\n )\n}\n\nSegmentedControlIndicator.displayName = 'SegmentedControl.Indicator'\n","import { Radio } from '@base-ui/react/radio'\nimport { type ComponentProps, Ref } from 'react'\n\nimport { itemStyles } from './SegmentedControl.styles'\n\nexport interface SegmentedControlItemProps\n extends Omit<ComponentProps<typeof Radio.Root>, 'value'> {\n /**\n * A unique value that identifies this item within the segmented control.\n */\n value: string\n /**\n * When true, prevents the user from interacting with this item.\n * @default false\n */\n disabled?: boolean\n ref?: Ref<HTMLElement>\n}\n\nexport const SegmentedControlItem = ({\n value,\n disabled = false,\n children,\n className,\n ref,\n ...rest\n}: SegmentedControlItemProps) => {\n return (\n <Radio.Root\n ref={ref}\n data-spark-component=\"segmented-control-item\"\n data-value={value}\n value={value}\n disabled={disabled}\n className={itemStyles({ className })}\n {...rest}\n >\n {children}\n <span\n aria-hidden=\"true\"\n className=\"bg-success pointer-events-none h-0 overflow-hidden font-bold content-[attr(data-text)/'']\"\n >\n {children}\n </span>\n </Radio.Root>\n )\n}\n\nSegmentedControlItem.displayName = 'SegmentedControl.Item'\n","import { SegmentedControl as Root } from './SegmentedControl'\nimport { SegmentedControlIndicator as Indicator } from './SegmentedControlIndicator'\nimport { SegmentedControlItem as Item } from './SegmentedControlItem'\n\nexport const SegmentedControl: typeof Root & {\n Item: typeof Item\n Indicator: typeof Indicator\n} = Object.assign(Root, {\n Item,\n Indicator,\n})\n\nSegmentedControl.displayName = 'SegmentedControl'\nItem.displayName = 'SegmentedControl.Item'\nIndicator.displayName = 'SegmentedControl.Indicator'\n\nexport type { SegmentedControlProps } from './SegmentedControl'\nexport type { SegmentedControlItemProps } from './SegmentedControlItem'\nexport type { SegmentedControlIndicatorProps } from './SegmentedControlIndicator'\n"],"names":["rootStyles","cva","itemStyles","indicatorStyles","SegmentedControlContext","createContext","useSegmentedControlContext","context","useContext","getFirstItemValue","children","firstValue","Children","child","isValidElement","SegmentedControl","value","defaultValue","onValueChange","className","ref","rest","containerRef","useRef","mergedRef","useMergeRefs","isControlled","internalValue","setInternalValue","useState","checkedValue","handleValueChange","newValue","next","labelId","description","isRequired","isInvalid","name","useFormFieldControl","jsx","RadioGroup","SegmentedControlIndicator","rect","setRect","useEffect","container","selectedItem","containerRect","itemRect","rootBorderWidth","style","SegmentedControlItem","disabled","jsxs","Radio","Root","Item","Indicator"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/segmented-control/SegmentedControl.styles.ts","../../src/segmented-control/SegmentedControlContext.tsx","../../src/segmented-control/SegmentedControl.tsx","../../src/segmented-control/SegmentedControlIndicator.tsx","../../src/segmented-control/SegmentedControlItem.tsx","../../src/segmented-control/index.ts"],"sourcesContent":["import { cva, VariantProps } from 'class-variance-authority'\n\nexport const rootStyles = cva([\n 'default:self-start',\n 'group inline-grid grid-flow-col auto-cols-fr',\n 'relative items-stretch min-w-max',\n 'rounded-xl p-sm',\n 'bg-surface border-sm border-outline',\n])\n\nexport const itemStyles = cva([\n 'relative z-raised min-h-sz-44 focus-visible:outline-none',\n 'flex flex-none items-center justify-center gap-md',\n 'default:px-lg default:py-md',\n 'rounded-[20px]',\n 'cursor-pointer select-none',\n 'font-medium',\n 'transition-colors duration-150',\n 'outline-none',\n 'focus-visible:u-outline',\n 'data-disabled:cursor-not-allowed data-disabled:opacity-dim-3',\n 'data-checked:text-on-support-container',\n // Avoid layout shift: simulate \"bold\" without changing font metrics.\n // Apply only to wrapped text nodes (not arbitrary nested JSX like Tag).\n 'data-checked:[&>[data-spark-segmented-control-text]]:[text-shadow:0.35px_0_currentColor,-0.35px_0_currentColor]',\n])\n\nexport const indicatorStyles = cva([\n 'absolute z-base',\n 'rounded-[20px]',\n 'bg-support-container border-md border-support',\n 'group-has-focus-visible:border-focus',\n 'transition-[left,top,width,height] duration-200 ease-in-out',\n 'pointer-events-none',\n])\n\nexport type SegmentedControlStylesProps = VariantProps<typeof itemStyles>\n","import { createContext, RefObject, useContext } from 'react'\n\nexport interface SegmentedControlContextInterface {\n checkedValue: string | null\n containerRef: RefObject<HTMLDivElement | null>\n}\n\nexport const SegmentedControlContext = createContext<SegmentedControlContextInterface>(\n {} as SegmentedControlContextInterface\n)\n\nexport const useSegmentedControlContext = () => {\n const context = useContext(SegmentedControlContext)\n\n if (!context) {\n throw Error('useSegmentedControlContext must be used within a SegmentedControlContext Provider')\n }\n\n return context\n}\n","import { RadioGroup } from '@base-ui/react/radio-group'\nimport { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { Children, type ComponentProps, isValidElement, Ref, useRef, useState } from 'react'\n\nimport type { SegmentedControlStylesProps } from './SegmentedControl.styles'\nimport { rootStyles } from './SegmentedControl.styles'\nimport { SegmentedControlContext } from './SegmentedControlContext'\n\nexport interface SegmentedControlProps\n extends Omit<ComponentProps<typeof RadioGroup>, 'value' | 'defaultValue' | 'onValueChange'>,\n SegmentedControlStylesProps {\n /**\n * The controlled selected value.\n */\n value?: string\n /**\n * The uncontrolled default selected value.\n */\n defaultValue?: string\n /**\n * Callback fired when the selected value changes.\n */\n onValueChange?: (value: string) => void\n ref?: Ref<HTMLDivElement>\n}\n\nconst getFirstItemValue = (children: React.ReactNode): string | null => {\n let firstValue: string | null = null\n\n Children.forEach(children, child => {\n if (firstValue !== null) return\n if (isValidElement(child) && typeof (child.props as { value?: string }).value === 'string') {\n firstValue = (child.props as { value: string }).value\n }\n })\n\n return firstValue\n}\n\nexport const SegmentedControl = ({\n value,\n defaultValue,\n onValueChange,\n className,\n children,\n ref,\n ...rest\n}: SegmentedControlProps) => {\n const containerRef = useRef<HTMLDivElement | null>(null)\n const mergedRef = useMergeRefs(containerRef, ref)\n\n const firstValue = getFirstItemValue(children)\n\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = useState<string | null>(\n () => defaultValue ?? firstValue\n )\n const checkedValue = isControlled ? (value ?? null) : internalValue\n\n const handleValueChange = (newValue: unknown) => {\n const next = newValue as string\n\n if (!isControlled) {\n setInternalValue(next)\n }\n\n onValueChange?.(next)\n }\n\n const { labelId, description, isRequired, isInvalid, name } = useFormFieldControl()\n\n return (\n <SegmentedControlContext.Provider\n value={{\n checkedValue,\n containerRef,\n }}\n >\n <RadioGroup\n ref={mergedRef}\n value={isControlled ? value : undefined}\n defaultValue={!isControlled ? (defaultValue ?? firstValue ?? undefined) : undefined}\n onValueChange={handleValueChange}\n data-spark-component=\"segmented-control\"\n className={rootStyles({ className })}\n aria-labelledby={labelId}\n aria-describedby={description}\n aria-required={isRequired || undefined}\n aria-invalid={isInvalid || undefined}\n name={name}\n {...rest}\n >\n {children}\n </RadioGroup>\n </SegmentedControlContext.Provider>\n )\n}\n\nSegmentedControl.displayName = 'SegmentedControl'\n","import { type ComponentProps, type CSSProperties, Ref, useEffect, useMemo, useState } from 'react'\n\nimport { indicatorStyles } from './SegmentedControl.styles'\nimport { useSegmentedControlContext } from './SegmentedControlContext'\n\ninterface IndicatorRect {\n left: number\n top: number\n width: number\n height: number\n}\n\nexport interface SegmentedControlIndicatorProps extends ComponentProps<'span'> {\n ref?: Ref<HTMLSpanElement>\n}\n\nexport const SegmentedControlIndicator = ({\n className,\n ref,\n ...rest\n}: SegmentedControlIndicatorProps) => {\n const { checkedValue, containerRef } = useSegmentedControlContext()\n const [rect, setRect] = useState<IndicatorRect | null>(null)\n\n const selector = useMemo(\n () => (checkedValue ? `[data-value=\"${CSS.escape(checkedValue)}\"]` : null),\n [checkedValue]\n )\n\n useEffect(() => {\n const container = containerRef.current\n\n if (!container) {\n return\n }\n\n const selectedItem = selector ? container.querySelector<HTMLElement>(selector) : null\n\n const update = () => {\n const currentContainer = containerRef.current\n if (!currentContainer || !selector) {\n setRect(null)\n\n return\n }\n\n const currentSelected = currentContainer.querySelector<HTMLElement>(selector)\n if (!currentSelected) {\n setRect(null)\n\n return\n }\n\n const containerRect = currentContainer.getBoundingClientRect()\n const itemRect = currentSelected.getBoundingClientRect()\n\n // Storybook canvas \"zoom\" can be implemented via `transform: scale()`.\n // In that case, `getBoundingClientRect()` returns *scaled* values, but CSS positioning/sizing\n // expects unscaled layout pixels. We infer the scale factor from offset sizes and normalize.\n const scaleX =\n currentSelected.offsetWidth > 0 ? itemRect.width / currentSelected.offsetWidth : 1\n const scaleY =\n currentSelected.offsetHeight > 0 ? itemRect.height / currentSelected.offsetHeight : 1\n\n // `getBoundingClientRect()` is border-box; absolute positioning is relative to the padding box.\n setRect({\n left: (itemRect.left - containerRect.left) / scaleX - currentContainer.clientLeft,\n top: (itemRect.top - containerRect.top) / scaleY - currentContainer.clientTop,\n width: itemRect.width / scaleX,\n height: itemRect.height / scaleY,\n })\n }\n\n update()\n\n const ro =\n typeof ResizeObserver !== 'undefined'\n ? new ResizeObserver(() => {\n update()\n })\n : null\n\n ro?.observe(container)\n if (selectedItem) ro?.observe(selectedItem)\n\n window.addEventListener('resize', update, { passive: true })\n window.visualViewport?.addEventListener('resize', update, { passive: true })\n\n return () => {\n ro?.disconnect()\n window.removeEventListener('resize', update)\n window.visualViewport?.removeEventListener('resize', update)\n }\n }, [containerRef, selector])\n\n if (!rect) return null\n\n const style: CSSProperties = {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n }\n\n return (\n <span\n ref={ref}\n data-spark-component=\"segmented-control-indicator\"\n aria-hidden\n className={indicatorStyles({ className })}\n style={style}\n {...rest}\n />\n )\n}\n\nSegmentedControlIndicator.displayName = 'SegmentedControl.Indicator'\n","import { Radio } from '@base-ui/react/radio'\nimport { Children, type ComponentProps, Ref } from 'react'\n\nimport { itemStyles } from './SegmentedControl.styles'\n\nexport interface SegmentedControlItemProps\n extends Omit<ComponentProps<typeof Radio.Root>, 'value'> {\n /**\n * A unique value that identifies this item within the segmented control.\n */\n value: string\n /**\n * When true, prevents the user from interacting with this item.\n * @default false\n */\n disabled?: boolean\n ref?: Ref<HTMLElement>\n}\n\nexport const SegmentedControlItem = ({\n value,\n disabled = false,\n children,\n className,\n ref,\n ...rest\n}: SegmentedControlItemProps) => {\n const content = Children.toArray(children).map((child, index) => {\n if (typeof child === 'string' || typeof child === 'number') {\n return (\n <span key={`text-${index}`} data-spark-segmented-control-text>\n {child}\n </span>\n )\n }\n\n return child\n })\n\n return (\n <Radio.Root\n ref={ref}\n data-spark-component=\"segmented-control-item\"\n data-value={value}\n value={value}\n disabled={disabled}\n className={itemStyles({ className })}\n {...rest}\n >\n {content}\n </Radio.Root>\n )\n}\n\nSegmentedControlItem.displayName = 'SegmentedControl.Item'\n","import { SegmentedControl as Root } from './SegmentedControl'\nimport { SegmentedControlIndicator as Indicator } from './SegmentedControlIndicator'\nimport { SegmentedControlItem as Item } from './SegmentedControlItem'\n\nexport const SegmentedControl: typeof Root & {\n Item: typeof Item\n Indicator: typeof Indicator\n} = Object.assign(Root, {\n Item,\n Indicator,\n})\n\nSegmentedControl.displayName = 'SegmentedControl'\nItem.displayName = 'SegmentedControl.Item'\nIndicator.displayName = 'SegmentedControl.Indicator'\n\nexport type { SegmentedControlProps } from './SegmentedControl'\nexport type { SegmentedControlItemProps } from './SegmentedControlItem'\nexport type { SegmentedControlIndicatorProps } from './SegmentedControlIndicator'\n"],"names":["rootStyles","cva","itemStyles","indicatorStyles","SegmentedControlContext","createContext","useSegmentedControlContext","context","useContext","getFirstItemValue","children","firstValue","Children","child","isValidElement","SegmentedControl","value","defaultValue","onValueChange","className","ref","rest","containerRef","useRef","mergedRef","useMergeRefs","isControlled","internalValue","setInternalValue","useState","checkedValue","handleValueChange","newValue","next","labelId","description","isRequired","isInvalid","name","useFormFieldControl","jsx","RadioGroup","SegmentedControlIndicator","rect","setRect","selector","useMemo","useEffect","container","selectedItem","update","currentContainer","currentSelected","containerRect","itemRect","scaleX","scaleY","ro","style","SegmentedControlItem","disabled","content","index","Radio","Root","Item","Indicator"],"mappings":"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"}
@@ -1,19 +1,19 @@
1
- import { jsx as f, jsxs as j } from "react/jsx-runtime";
1
+ import { jsx as h } from "react/jsx-runtime";
2
2
  import { RadioGroup as E } from "@base-ui/react/radio-group";
3
- import { useFormFieldControl as q } from "@spark-ui/components/form-field";
4
- import { useMergeRefs as z } from "@spark-ui/hooks/use-merge-refs";
5
- import { createContext as B, useContext as F, useRef as P, useState as b, Children as $, isValidElement as G, useEffect as M } from "react";
6
- import { cva as p } from "class-variance-authority";
7
- import { Radio as O } from "@base-ui/react/radio";
8
- const W = p([
3
+ import { useFormFieldControl as L } from "@spark-ui/components/form-field";
4
+ import { useMergeRefs as q } from "@spark-ui/hooks/use-merge-refs";
5
+ import { createContext as _, useContext as j, useRef as F, useState as R, Children as I, isValidElement as O, useMemo as $, useEffect as B } from "react";
6
+ import { cva as x } from "class-variance-authority";
7
+ import { Radio as H } from "@base-ui/react/radio";
8
+ const M = x([
9
9
  "default:self-start",
10
10
  "group inline-grid grid-flow-col auto-cols-fr",
11
11
  "relative items-stretch min-w-max",
12
12
  "rounded-xl p-sm",
13
13
  "bg-surface border-sm border-outline"
14
- ]), A = p([
14
+ ]), P = x([
15
15
  "relative z-raised min-h-sz-44 focus-visible:outline-none",
16
- "flex flex-none items-center justify-center flex-col",
16
+ "flex flex-none items-center justify-center gap-md",
17
17
  "default:px-lg default:py-md",
18
18
  "rounded-[20px]",
19
19
  "cursor-pointer select-none",
@@ -23,151 +23,163 @@ const W = p([
23
23
  "focus-visible:u-outline",
24
24
  "data-disabled:cursor-not-allowed data-disabled:opacity-dim-3",
25
25
  "data-checked:text-on-support-container",
26
- "data-checked:font-bold"
27
- ]), D = p([
26
+ // Avoid layout shift: simulate "bold" without changing font metrics.
27
+ // Apply only to wrapped text nodes (not arbitrary nested JSX like Tag).
28
+ "data-checked:[&>[data-spark-segmented-control-text]]:[text-shadow:0.35px_0_currentColor,-0.35px_0_currentColor]"
29
+ ]), W = x([
28
30
  "absolute z-base",
29
31
  "rounded-[20px]",
30
32
  "bg-support-container border-md border-support",
31
33
  "group-has-focus-visible:border-focus",
32
34
  "transition-[left,top,width,height] duration-200 ease-in-out",
33
35
  "pointer-events-none"
34
- ]), v = B(
36
+ ]), V = _(
35
37
  {}
36
- ), H = () => {
37
- const e = F(v);
38
+ ), A = () => {
39
+ const e = j(V);
38
40
  if (!e)
39
41
  throw Error("useSegmentedControlContext must be used within a SegmentedControlContext Provider");
40
42
  return e;
41
- }, J = (e) => {
42
- let t = null;
43
- return $.forEach(e, (o) => {
44
- t === null && G(o) && typeof o.props.value == "string" && (t = o.props.value);
45
- }), t;
46
- }, x = ({
43
+ }, G = (e) => {
44
+ let o = null;
45
+ return I.forEach(e, (n) => {
46
+ o === null && O(n) && typeof n.props.value == "string" && (o = n.props.value);
47
+ }), o;
48
+ }, k = ({
47
49
  value: e,
48
- defaultValue: t,
49
- onValueChange: o,
50
- className: r,
51
- children: i,
52
- ref: n,
50
+ defaultValue: o,
51
+ onValueChange: n,
52
+ className: d,
53
+ children: s,
54
+ ref: r,
53
55
  ...c
54
56
  }) => {
55
- const u = P(null), l = z(u, n), d = J(i), s = e !== void 0, [a, m] = b(
56
- () => t ?? d
57
- ), S = s ? e ?? null : a, y = (k) => {
58
- const C = k;
59
- s || m(C), o?.(C);
60
- }, { labelId: R, description: I, isRequired: w, isInvalid: N, name: V } = q();
61
- return /* @__PURE__ */ f(
62
- v.Provider,
57
+ const t = F(null), f = q(t, r), p = G(s), u = e !== void 0, [i, g] = R(
58
+ () => o ?? p
59
+ ), m = u ? e ?? null : i, a = (N) => {
60
+ const y = N;
61
+ u || g(y), n?.(y);
62
+ }, { labelId: v, description: l, isRequired: C, isInvalid: b, name: z } = L();
63
+ return /* @__PURE__ */ h(
64
+ V.Provider,
63
65
  {
64
66
  value: {
65
- checkedValue: S,
66
- containerRef: u
67
+ checkedValue: m,
68
+ containerRef: t
67
69
  },
68
- children: /* @__PURE__ */ f(
70
+ children: /* @__PURE__ */ h(
69
71
  E,
70
72
  {
71
- ref: l,
72
- value: s ? e : void 0,
73
- defaultValue: s ? void 0 : t ?? d ?? void 0,
74
- onValueChange: y,
73
+ ref: f,
74
+ value: u ? e : void 0,
75
+ defaultValue: u ? void 0 : o ?? p ?? void 0,
76
+ onValueChange: a,
75
77
  "data-spark-component": "segmented-control",
76
- className: W({ className: r }),
77
- "aria-labelledby": R,
78
- "aria-describedby": I,
79
- "aria-required": w || void 0,
80
- "aria-invalid": N || void 0,
81
- name: V,
78
+ className: M({ className: d }),
79
+ "aria-labelledby": v,
80
+ "aria-describedby": l,
81
+ "aria-required": C || void 0,
82
+ "aria-invalid": b || void 0,
83
+ name: z,
82
84
  ...c,
83
- children: i
85
+ children: s
84
86
  }
85
87
  )
86
88
  }
87
89
  );
88
90
  };
89
- x.displayName = "SegmentedControl";
90
- const g = ({
91
+ k.displayName = "SegmentedControl";
92
+ const w = ({
91
93
  className: e,
92
- ref: t,
93
- ...o
94
+ ref: o,
95
+ ...n
94
96
  }) => {
95
- const { checkedValue: r, containerRef: i } = H(), [n, c] = b(null);
96
- if (M(() => {
97
- const l = i.current;
98
- if (!l)
99
- return;
100
- const d = r ? l.querySelector(`[data-value="${r}"]`) : null;
101
- if (!d) {
102
- c(null);
97
+ const { checkedValue: d, containerRef: s } = A(), [r, c] = R(null), t = $(
98
+ () => d ? `[data-value="${CSS.escape(d)}"]` : null,
99
+ [d]
100
+ );
101
+ if (B(() => {
102
+ const p = s.current;
103
+ if (!p)
103
104
  return;
104
- }
105
- const s = l.getBoundingClientRect(), a = d.getBoundingClientRect(), m = 1;
106
- c({
107
- left: a.left - s.left - m,
108
- top: a.top - s.top - m,
109
- width: a.width,
110
- height: a.height
111
- });
112
- }, [r, i]), !n) return null;
113
- const u = {
114
- left: n.left,
115
- top: n.top,
116
- width: n.width,
117
- height: n.height
105
+ const u = t ? p.querySelector(t) : null, i = () => {
106
+ const m = s.current;
107
+ if (!m || !t) {
108
+ c(null);
109
+ return;
110
+ }
111
+ const a = m.querySelector(t);
112
+ if (!a) {
113
+ c(null);
114
+ return;
115
+ }
116
+ const v = m.getBoundingClientRect(), l = a.getBoundingClientRect(), C = a.offsetWidth > 0 ? l.width / a.offsetWidth : 1, b = a.offsetHeight > 0 ? l.height / a.offsetHeight : 1;
117
+ c({
118
+ left: (l.left - v.left) / C - m.clientLeft,
119
+ top: (l.top - v.top) / b - m.clientTop,
120
+ width: l.width / C,
121
+ height: l.height / b
122
+ });
123
+ };
124
+ i();
125
+ const g = typeof ResizeObserver < "u" ? new ResizeObserver(() => {
126
+ i();
127
+ }) : null;
128
+ return g?.observe(p), u && g?.observe(u), window.addEventListener("resize", i, { passive: !0 }), window.visualViewport?.addEventListener("resize", i, { passive: !0 }), () => {
129
+ g?.disconnect(), window.removeEventListener("resize", i), window.visualViewport?.removeEventListener("resize", i);
130
+ };
131
+ }, [s, t]), !r) return null;
132
+ const f = {
133
+ left: r.left,
134
+ top: r.top,
135
+ width: r.width,
136
+ height: r.height
118
137
  };
119
- return /* @__PURE__ */ f(
138
+ return /* @__PURE__ */ h(
120
139
  "span",
121
140
  {
122
- ref: t,
141
+ ref: o,
123
142
  "data-spark-component": "segmented-control-indicator",
124
143
  "aria-hidden": !0,
125
- className: D({ className: e }),
126
- style: u,
127
- ...o
144
+ className: W({ className: e }),
145
+ style: f,
146
+ ...n
128
147
  }
129
148
  );
130
149
  };
131
- g.displayName = "SegmentedControl.Indicator";
132
- const h = ({
150
+ w.displayName = "SegmentedControl.Indicator";
151
+ const S = ({
133
152
  value: e,
134
- disabled: t = !1,
135
- children: o,
136
- className: r,
137
- ref: i,
138
- ...n
139
- }) => /* @__PURE__ */ j(
140
- O.Root,
141
- {
142
- ref: i,
143
- "data-spark-component": "segmented-control-item",
144
- "data-value": e,
145
- value: e,
146
- disabled: t,
147
- className: A({ className: r }),
148
- ...n,
149
- children: [
150
- o,
151
- /* @__PURE__ */ f(
152
- "span",
153
- {
154
- "aria-hidden": "true",
155
- className: "bg-success pointer-events-none h-0 overflow-hidden font-bold content-[attr(data-text)/'']",
156
- children: o
157
- }
158
- )
159
- ]
160
- }
161
- );
162
- h.displayName = "SegmentedControl.Item";
163
- const K = Object.assign(x, {
164
- Item: h,
165
- Indicator: g
153
+ disabled: o = !1,
154
+ children: n,
155
+ className: d,
156
+ ref: s,
157
+ ...r
158
+ }) => {
159
+ const c = I.toArray(n).map((t, f) => typeof t == "string" || typeof t == "number" ? /* @__PURE__ */ h("span", { "data-spark-segmented-control-text": !0, children: t }, `text-${f}`) : t);
160
+ return /* @__PURE__ */ h(
161
+ H.Root,
162
+ {
163
+ ref: s,
164
+ "data-spark-component": "segmented-control-item",
165
+ "data-value": e,
166
+ value: e,
167
+ disabled: o,
168
+ className: P({ className: d }),
169
+ ...r,
170
+ children: c
171
+ }
172
+ );
173
+ };
174
+ S.displayName = "SegmentedControl.Item";
175
+ const T = Object.assign(k, {
176
+ Item: S,
177
+ Indicator: w
166
178
  });
167
- K.displayName = "SegmentedControl";
168
- h.displayName = "SegmentedControl.Item";
169
- g.displayName = "SegmentedControl.Indicator";
179
+ T.displayName = "SegmentedControl";
180
+ S.displayName = "SegmentedControl.Item";
181
+ w.displayName = "SegmentedControl.Indicator";
170
182
  export {
171
- K as SegmentedControl
183
+ T as SegmentedControl
172
184
  };
173
185
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../src/segmented-control/SegmentedControl.styles.ts","../../src/segmented-control/SegmentedControlContext.tsx","../../src/segmented-control/SegmentedControl.tsx","../../src/segmented-control/SegmentedControlIndicator.tsx","../../src/segmented-control/SegmentedControlItem.tsx","../../src/segmented-control/index.ts"],"sourcesContent":["import { cva, VariantProps } from 'class-variance-authority'\n\nexport const rootStyles = cva([\n 'default:self-start',\n 'group inline-grid grid-flow-col auto-cols-fr',\n 'relative items-stretch min-w-max',\n 'rounded-xl p-sm',\n 'bg-surface border-sm border-outline',\n])\n\nexport const itemStyles = cva([\n 'relative z-raised min-h-sz-44 focus-visible:outline-none',\n 'flex flex-none items-center justify-center flex-col',\n 'default:px-lg default:py-md',\n 'rounded-[20px]',\n 'cursor-pointer select-none',\n 'font-medium',\n 'transition-colors duration-150',\n 'outline-none',\n 'focus-visible:u-outline',\n 'data-disabled:cursor-not-allowed data-disabled:opacity-dim-3',\n 'data-checked:text-on-support-container',\n 'data-checked:font-bold',\n])\n\nexport const indicatorStyles = cva([\n 'absolute z-base',\n 'rounded-[20px]',\n 'bg-support-container border-md border-support',\n 'group-has-focus-visible:border-focus',\n 'transition-[left,top,width,height] duration-200 ease-in-out',\n 'pointer-events-none',\n])\n\nexport type SegmentedControlStylesProps = VariantProps<typeof itemStyles>\n","import { createContext, RefObject, useContext } from 'react'\n\nexport interface SegmentedControlContextInterface {\n checkedValue: string | null\n containerRef: RefObject<HTMLDivElement | null>\n}\n\nexport const SegmentedControlContext = createContext<SegmentedControlContextInterface>(\n {} as SegmentedControlContextInterface\n)\n\nexport const useSegmentedControlContext = () => {\n const context = useContext(SegmentedControlContext)\n\n if (!context) {\n throw Error('useSegmentedControlContext must be used within a SegmentedControlContext Provider')\n }\n\n return context\n}\n","import { RadioGroup } from '@base-ui/react/radio-group'\nimport { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { Children, type ComponentProps, isValidElement, Ref, useRef, useState } from 'react'\n\nimport type { SegmentedControlStylesProps } from './SegmentedControl.styles'\nimport { rootStyles } from './SegmentedControl.styles'\nimport { SegmentedControlContext } from './SegmentedControlContext'\n\nexport interface SegmentedControlProps\n extends Omit<ComponentProps<typeof RadioGroup>, 'value' | 'defaultValue' | 'onValueChange'>,\n SegmentedControlStylesProps {\n /**\n * The controlled selected value.\n */\n value?: string\n /**\n * The uncontrolled default selected value.\n */\n defaultValue?: string\n /**\n * Callback fired when the selected value changes.\n */\n onValueChange?: (value: string) => void\n ref?: Ref<HTMLDivElement>\n}\n\nconst getFirstItemValue = (children: React.ReactNode): string | null => {\n let firstValue: string | null = null\n\n Children.forEach(children, child => {\n if (firstValue !== null) return\n if (isValidElement(child) && typeof (child.props as { value?: string }).value === 'string') {\n firstValue = (child.props as { value: string }).value\n }\n })\n\n return firstValue\n}\n\nexport const SegmentedControl = ({\n value,\n defaultValue,\n onValueChange,\n className,\n children,\n ref,\n ...rest\n}: SegmentedControlProps) => {\n const containerRef = useRef<HTMLDivElement | null>(null)\n const mergedRef = useMergeRefs(containerRef, ref)\n\n const firstValue = getFirstItemValue(children)\n\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = useState<string | null>(\n () => defaultValue ?? firstValue\n )\n const checkedValue = isControlled ? (value ?? null) : internalValue\n\n const handleValueChange = (newValue: unknown) => {\n const next = newValue as string\n\n if (!isControlled) {\n setInternalValue(next)\n }\n\n onValueChange?.(next)\n }\n\n const { labelId, description, isRequired, isInvalid, name } = useFormFieldControl()\n\n return (\n <SegmentedControlContext.Provider\n value={{\n checkedValue,\n containerRef,\n }}\n >\n <RadioGroup\n ref={mergedRef}\n value={isControlled ? value : undefined}\n defaultValue={!isControlled ? (defaultValue ?? firstValue ?? undefined) : undefined}\n onValueChange={handleValueChange}\n data-spark-component=\"segmented-control\"\n className={rootStyles({ className })}\n aria-labelledby={labelId}\n aria-describedby={description}\n aria-required={isRequired || undefined}\n aria-invalid={isInvalid || undefined}\n name={name}\n {...rest}\n >\n {children}\n </RadioGroup>\n </SegmentedControlContext.Provider>\n )\n}\n\nSegmentedControl.displayName = 'SegmentedControl'\n","import { type ComponentProps, type CSSProperties, Ref, useEffect, useState } from 'react'\n\nimport { indicatorStyles } from './SegmentedControl.styles'\nimport { useSegmentedControlContext } from './SegmentedControlContext'\n\ninterface IndicatorRect {\n left: number\n top: number\n width: number\n height: number\n}\n\nexport interface SegmentedControlIndicatorProps extends ComponentProps<'span'> {\n ref?: Ref<HTMLSpanElement>\n}\n\nexport const SegmentedControlIndicator = ({\n className,\n ref,\n ...rest\n}: SegmentedControlIndicatorProps) => {\n const { checkedValue, containerRef } = useSegmentedControlContext()\n const [rect, setRect] = useState<IndicatorRect | null>(null)\n\n useEffect(() => {\n const container = containerRef.current\n\n if (!container) {\n return\n }\n\n const selectedItem = checkedValue\n ? container.querySelector<HTMLElement>(`[data-value=\"${checkedValue}\"]`)\n : null\n\n if (!selectedItem) {\n setRect(null)\n\n return\n }\n\n const containerRect = container.getBoundingClientRect()\n const itemRect = selectedItem.getBoundingClientRect()\n\n const rootBorderWidth = 1\n\n setRect({\n left: itemRect.left - containerRect.left - rootBorderWidth,\n top: itemRect.top - containerRect.top - rootBorderWidth,\n width: itemRect.width,\n height: itemRect.height,\n })\n }, [checkedValue, containerRef])\n\n if (!rect) return null\n\n const style: CSSProperties = {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n }\n\n return (\n <span\n ref={ref}\n data-spark-component=\"segmented-control-indicator\"\n aria-hidden\n className={indicatorStyles({ className })}\n style={style}\n {...rest}\n />\n )\n}\n\nSegmentedControlIndicator.displayName = 'SegmentedControl.Indicator'\n","import { Radio } from '@base-ui/react/radio'\nimport { type ComponentProps, Ref } from 'react'\n\nimport { itemStyles } from './SegmentedControl.styles'\n\nexport interface SegmentedControlItemProps\n extends Omit<ComponentProps<typeof Radio.Root>, 'value'> {\n /**\n * A unique value that identifies this item within the segmented control.\n */\n value: string\n /**\n * When true, prevents the user from interacting with this item.\n * @default false\n */\n disabled?: boolean\n ref?: Ref<HTMLElement>\n}\n\nexport const SegmentedControlItem = ({\n value,\n disabled = false,\n children,\n className,\n ref,\n ...rest\n}: SegmentedControlItemProps) => {\n return (\n <Radio.Root\n ref={ref}\n data-spark-component=\"segmented-control-item\"\n data-value={value}\n value={value}\n disabled={disabled}\n className={itemStyles({ className })}\n {...rest}\n >\n {children}\n <span\n aria-hidden=\"true\"\n className=\"bg-success pointer-events-none h-0 overflow-hidden font-bold content-[attr(data-text)/'']\"\n >\n {children}\n </span>\n </Radio.Root>\n )\n}\n\nSegmentedControlItem.displayName = 'SegmentedControl.Item'\n","import { SegmentedControl as Root } from './SegmentedControl'\nimport { SegmentedControlIndicator as Indicator } from './SegmentedControlIndicator'\nimport { SegmentedControlItem as Item } from './SegmentedControlItem'\n\nexport const SegmentedControl: typeof Root & {\n Item: typeof Item\n Indicator: typeof Indicator\n} = Object.assign(Root, {\n Item,\n Indicator,\n})\n\nSegmentedControl.displayName = 'SegmentedControl'\nItem.displayName = 'SegmentedControl.Item'\nIndicator.displayName = 'SegmentedControl.Indicator'\n\nexport type { SegmentedControlProps } from './SegmentedControl'\nexport type { SegmentedControlItemProps } from './SegmentedControlItem'\nexport type { SegmentedControlIndicatorProps } from './SegmentedControlIndicator'\n"],"names":["rootStyles","cva","itemStyles","indicatorStyles","SegmentedControlContext","createContext","useSegmentedControlContext","context","useContext","getFirstItemValue","children","firstValue","Children","child","isValidElement","SegmentedControl","value","defaultValue","onValueChange","className","ref","rest","containerRef","useRef","mergedRef","useMergeRefs","isControlled","internalValue","setInternalValue","useState","checkedValue","handleValueChange","newValue","next","labelId","description","isRequired","isInvalid","name","useFormFieldControl","jsx","RadioGroup","SegmentedControlIndicator","rect","setRect","useEffect","container","selectedItem","containerRect","itemRect","rootBorderWidth","style","SegmentedControlItem","disabled","jsxs","Radio","Root","Item","Indicator"],"mappings":";;;;;;;AAEO,MAAMA,IAAaC,EAAI;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GAEYC,IAAaD,EAAI;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GAEYE,IAAkBF,EAAI;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GCzBYG,IAA0BC;AAAA,EACrC,CAAA;AACF,GAEaC,IAA6B,MAAM;AAC9C,QAAMC,IAAUC,EAAWJ,CAAuB;AAElD,MAAI,CAACG;AACH,UAAM,MAAM,mFAAmF;AAGjG,SAAOA;AACT,GCQME,IAAoB,CAACC,MAA6C;AACtE,MAAIC,IAA4B;AAEhC,SAAAC,EAAS,QAAQF,GAAU,CAAAG,MAAS;AAClC,IAAIF,MAAe,QACfG,EAAeD,CAAK,KAAK,OAAQA,EAAM,MAA6B,SAAU,aAChFF,IAAcE,EAAM,MAA4B;AAAA,EAEpD,CAAC,GAEMF;AACT,GAEaI,IAAmB,CAAC;AAAA,EAC/B,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAT;AAAA,EACA,KAAAU;AAAA,EACA,GAAGC;AACL,MAA6B;AAC3B,QAAMC,IAAeC,EAA8B,IAAI,GACjDC,IAAYC,EAAaH,GAAcF,CAAG,GAE1CT,IAAaF,EAAkBC,CAAQ,GAEvCgB,IAAeV,MAAU,QACzB,CAACW,GAAeC,CAAgB,IAAIC;AAAA,IACxC,MAAMZ,KAAgBN;AAAA,EAAA,GAElBmB,IAAeJ,IAAgBV,KAAS,OAAQW,GAEhDI,IAAoB,CAACC,MAAsB;AAC/C,UAAMC,IAAOD;AAEb,IAAKN,KACHE,EAAiBK,CAAI,GAGvBf,IAAgBe,CAAI;AAAA,EACtB,GAEM,EAAE,SAAAC,GAAS,aAAAC,GAAa,YAAAC,GAAY,WAAAC,GAAW,MAAAC,EAAA,IAASC,EAAA;AAE9D,SACE,gBAAAC;AAAA,IAACpC,EAAwB;AAAA,IAAxB;AAAA,MACC,OAAO;AAAA,QACL,cAAA0B;AAAA,QACA,cAAAR;AAAA,MAAA;AAAA,MAGF,UAAA,gBAAAkB;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,KAAKjB;AAAA,UACL,OAAOE,IAAeV,IAAQ;AAAA,UAC9B,cAAeU,IAA2D,SAA3CT,KAAgBN,KAAc;AAAA,UAC7D,eAAeoB;AAAA,UACf,wBAAqB;AAAA,UACrB,WAAW/B,EAAW,EAAE,WAAAmB,GAAW;AAAA,UACnC,mBAAiBe;AAAA,UACjB,oBAAkBC;AAAA,UAClB,iBAAeC,KAAc;AAAA,UAC7B,gBAAcC,KAAa;AAAA,UAC3B,MAAAC;AAAA,UACC,GAAGjB;AAAA,UAEH,UAAAX;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;AAEAK,EAAiB,cAAc;ACnFxB,MAAM2B,IAA4B,CAAC;AAAA,EACxC,WAAAvB;AAAA,EACA,KAAAC;AAAA,EACA,GAAGC;AACL,MAAsC;AACpC,QAAM,EAAE,cAAAS,GAAc,cAAAR,EAAA,IAAiBhB,EAAA,GACjC,CAACqC,GAAMC,CAAO,IAAIf,EAA+B,IAAI;AAgC3D,MA9BAgB,EAAU,MAAM;AACd,UAAMC,IAAYxB,EAAa;AAE/B,QAAI,CAACwB;AACH;AAGF,UAAMC,IAAejB,IACjBgB,EAAU,cAA2B,gBAAgBhB,CAAY,IAAI,IACrE;AAEJ,QAAI,CAACiB,GAAc;AACjB,MAAAH,EAAQ,IAAI;AAEZ;AAAA,IACF;AAEA,UAAMI,IAAgBF,EAAU,sBAAA,GAC1BG,IAAWF,EAAa,sBAAA,GAExBG,IAAkB;AAExB,IAAAN,EAAQ;AAAA,MACN,MAAMK,EAAS,OAAOD,EAAc,OAAOE;AAAA,MAC3C,KAAKD,EAAS,MAAMD,EAAc,MAAME;AAAA,MACxC,OAAOD,EAAS;AAAA,MAChB,QAAQA,EAAS;AAAA,IAAA,CAClB;AAAA,EACH,GAAG,CAACnB,GAAcR,CAAY,CAAC,GAE3B,CAACqB,EAAM,QAAO;AAElB,QAAMQ,IAAuB;AAAA,IAC3B,MAAMR,EAAK;AAAA,IACX,KAAKA,EAAK;AAAA,IACV,OAAOA,EAAK;AAAA,IACZ,QAAQA,EAAK;AAAA,EAAA;AAGf,SACE,gBAAAH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAApB;AAAA,MACA,wBAAqB;AAAA,MACrB,eAAW;AAAA,MACX,WAAWjB,EAAgB,EAAE,WAAAgB,GAAW;AAAA,MACxC,OAAAgC;AAAA,MACC,GAAG9B;AAAA,IAAA;AAAA,EAAA;AAGV;AAEAqB,EAA0B,cAAc;ACxDjC,MAAMU,IAAuB,CAAC;AAAA,EACnC,OAAApC;AAAA,EACA,UAAAqC,IAAW;AAAA,EACX,UAAA3C;AAAA,EACA,WAAAS;AAAA,EACA,KAAAC;AAAA,EACA,GAAGC;AACL,MAEI,gBAAAiC;AAAA,EAACC,EAAM;AAAA,EAAN;AAAA,IACC,KAAAnC;AAAA,IACA,wBAAqB;AAAA,IACrB,cAAYJ;AAAA,IACZ,OAAAA;AAAA,IACA,UAAAqC;AAAA,IACA,WAAWnD,EAAW,EAAE,WAAAiB,GAAW;AAAA,IAClC,GAAGE;AAAA,IAEH,UAAA;AAAA,MAAAX;AAAA,MACD,gBAAA8B;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,eAAY;AAAA,UACZ,WAAU;AAAA,UAET,UAAA9B;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAAA;AAKN0C,EAAqB,cAAc;AC5C5B,MAAMrC,IAGT,OAAO,OAAOyC,GAAM;AAAA,EAAA,MACtBC;AAAAA,EAAA,WACAC;AACF,CAAC;AAED3C,EAAiB,cAAc;AAC/B0C,EAAK,cAAc;AACnBC,EAAU,cAAc;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../src/segmented-control/SegmentedControl.styles.ts","../../src/segmented-control/SegmentedControlContext.tsx","../../src/segmented-control/SegmentedControl.tsx","../../src/segmented-control/SegmentedControlIndicator.tsx","../../src/segmented-control/SegmentedControlItem.tsx","../../src/segmented-control/index.ts"],"sourcesContent":["import { cva, VariantProps } from 'class-variance-authority'\n\nexport const rootStyles = cva([\n 'default:self-start',\n 'group inline-grid grid-flow-col auto-cols-fr',\n 'relative items-stretch min-w-max',\n 'rounded-xl p-sm',\n 'bg-surface border-sm border-outline',\n])\n\nexport const itemStyles = cva([\n 'relative z-raised min-h-sz-44 focus-visible:outline-none',\n 'flex flex-none items-center justify-center gap-md',\n 'default:px-lg default:py-md',\n 'rounded-[20px]',\n 'cursor-pointer select-none',\n 'font-medium',\n 'transition-colors duration-150',\n 'outline-none',\n 'focus-visible:u-outline',\n 'data-disabled:cursor-not-allowed data-disabled:opacity-dim-3',\n 'data-checked:text-on-support-container',\n // Avoid layout shift: simulate \"bold\" without changing font metrics.\n // Apply only to wrapped text nodes (not arbitrary nested JSX like Tag).\n 'data-checked:[&>[data-spark-segmented-control-text]]:[text-shadow:0.35px_0_currentColor,-0.35px_0_currentColor]',\n])\n\nexport const indicatorStyles = cva([\n 'absolute z-base',\n 'rounded-[20px]',\n 'bg-support-container border-md border-support',\n 'group-has-focus-visible:border-focus',\n 'transition-[left,top,width,height] duration-200 ease-in-out',\n 'pointer-events-none',\n])\n\nexport type SegmentedControlStylesProps = VariantProps<typeof itemStyles>\n","import { createContext, RefObject, useContext } from 'react'\n\nexport interface SegmentedControlContextInterface {\n checkedValue: string | null\n containerRef: RefObject<HTMLDivElement | null>\n}\n\nexport const SegmentedControlContext = createContext<SegmentedControlContextInterface>(\n {} as SegmentedControlContextInterface\n)\n\nexport const useSegmentedControlContext = () => {\n const context = useContext(SegmentedControlContext)\n\n if (!context) {\n throw Error('useSegmentedControlContext must be used within a SegmentedControlContext Provider')\n }\n\n return context\n}\n","import { RadioGroup } from '@base-ui/react/radio-group'\nimport { useFormFieldControl } from '@spark-ui/components/form-field'\nimport { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { Children, type ComponentProps, isValidElement, Ref, useRef, useState } from 'react'\n\nimport type { SegmentedControlStylesProps } from './SegmentedControl.styles'\nimport { rootStyles } from './SegmentedControl.styles'\nimport { SegmentedControlContext } from './SegmentedControlContext'\n\nexport interface SegmentedControlProps\n extends Omit<ComponentProps<typeof RadioGroup>, 'value' | 'defaultValue' | 'onValueChange'>,\n SegmentedControlStylesProps {\n /**\n * The controlled selected value.\n */\n value?: string\n /**\n * The uncontrolled default selected value.\n */\n defaultValue?: string\n /**\n * Callback fired when the selected value changes.\n */\n onValueChange?: (value: string) => void\n ref?: Ref<HTMLDivElement>\n}\n\nconst getFirstItemValue = (children: React.ReactNode): string | null => {\n let firstValue: string | null = null\n\n Children.forEach(children, child => {\n if (firstValue !== null) return\n if (isValidElement(child) && typeof (child.props as { value?: string }).value === 'string') {\n firstValue = (child.props as { value: string }).value\n }\n })\n\n return firstValue\n}\n\nexport const SegmentedControl = ({\n value,\n defaultValue,\n onValueChange,\n className,\n children,\n ref,\n ...rest\n}: SegmentedControlProps) => {\n const containerRef = useRef<HTMLDivElement | null>(null)\n const mergedRef = useMergeRefs(containerRef, ref)\n\n const firstValue = getFirstItemValue(children)\n\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = useState<string | null>(\n () => defaultValue ?? firstValue\n )\n const checkedValue = isControlled ? (value ?? null) : internalValue\n\n const handleValueChange = (newValue: unknown) => {\n const next = newValue as string\n\n if (!isControlled) {\n setInternalValue(next)\n }\n\n onValueChange?.(next)\n }\n\n const { labelId, description, isRequired, isInvalid, name } = useFormFieldControl()\n\n return (\n <SegmentedControlContext.Provider\n value={{\n checkedValue,\n containerRef,\n }}\n >\n <RadioGroup\n ref={mergedRef}\n value={isControlled ? value : undefined}\n defaultValue={!isControlled ? (defaultValue ?? firstValue ?? undefined) : undefined}\n onValueChange={handleValueChange}\n data-spark-component=\"segmented-control\"\n className={rootStyles({ className })}\n aria-labelledby={labelId}\n aria-describedby={description}\n aria-required={isRequired || undefined}\n aria-invalid={isInvalid || undefined}\n name={name}\n {...rest}\n >\n {children}\n </RadioGroup>\n </SegmentedControlContext.Provider>\n )\n}\n\nSegmentedControl.displayName = 'SegmentedControl'\n","import { type ComponentProps, type CSSProperties, Ref, useEffect, useMemo, useState } from 'react'\n\nimport { indicatorStyles } from './SegmentedControl.styles'\nimport { useSegmentedControlContext } from './SegmentedControlContext'\n\ninterface IndicatorRect {\n left: number\n top: number\n width: number\n height: number\n}\n\nexport interface SegmentedControlIndicatorProps extends ComponentProps<'span'> {\n ref?: Ref<HTMLSpanElement>\n}\n\nexport const SegmentedControlIndicator = ({\n className,\n ref,\n ...rest\n}: SegmentedControlIndicatorProps) => {\n const { checkedValue, containerRef } = useSegmentedControlContext()\n const [rect, setRect] = useState<IndicatorRect | null>(null)\n\n const selector = useMemo(\n () => (checkedValue ? `[data-value=\"${CSS.escape(checkedValue)}\"]` : null),\n [checkedValue]\n )\n\n useEffect(() => {\n const container = containerRef.current\n\n if (!container) {\n return\n }\n\n const selectedItem = selector ? container.querySelector<HTMLElement>(selector) : null\n\n const update = () => {\n const currentContainer = containerRef.current\n if (!currentContainer || !selector) {\n setRect(null)\n\n return\n }\n\n const currentSelected = currentContainer.querySelector<HTMLElement>(selector)\n if (!currentSelected) {\n setRect(null)\n\n return\n }\n\n const containerRect = currentContainer.getBoundingClientRect()\n const itemRect = currentSelected.getBoundingClientRect()\n\n // Storybook canvas \"zoom\" can be implemented via `transform: scale()`.\n // In that case, `getBoundingClientRect()` returns *scaled* values, but CSS positioning/sizing\n // expects unscaled layout pixels. We infer the scale factor from offset sizes and normalize.\n const scaleX =\n currentSelected.offsetWidth > 0 ? itemRect.width / currentSelected.offsetWidth : 1\n const scaleY =\n currentSelected.offsetHeight > 0 ? itemRect.height / currentSelected.offsetHeight : 1\n\n // `getBoundingClientRect()` is border-box; absolute positioning is relative to the padding box.\n setRect({\n left: (itemRect.left - containerRect.left) / scaleX - currentContainer.clientLeft,\n top: (itemRect.top - containerRect.top) / scaleY - currentContainer.clientTop,\n width: itemRect.width / scaleX,\n height: itemRect.height / scaleY,\n })\n }\n\n update()\n\n const ro =\n typeof ResizeObserver !== 'undefined'\n ? new ResizeObserver(() => {\n update()\n })\n : null\n\n ro?.observe(container)\n if (selectedItem) ro?.observe(selectedItem)\n\n window.addEventListener('resize', update, { passive: true })\n window.visualViewport?.addEventListener('resize', update, { passive: true })\n\n return () => {\n ro?.disconnect()\n window.removeEventListener('resize', update)\n window.visualViewport?.removeEventListener('resize', update)\n }\n }, [containerRef, selector])\n\n if (!rect) return null\n\n const style: CSSProperties = {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n }\n\n return (\n <span\n ref={ref}\n data-spark-component=\"segmented-control-indicator\"\n aria-hidden\n className={indicatorStyles({ className })}\n style={style}\n {...rest}\n />\n )\n}\n\nSegmentedControlIndicator.displayName = 'SegmentedControl.Indicator'\n","import { Radio } from '@base-ui/react/radio'\nimport { Children, type ComponentProps, Ref } from 'react'\n\nimport { itemStyles } from './SegmentedControl.styles'\n\nexport interface SegmentedControlItemProps\n extends Omit<ComponentProps<typeof Radio.Root>, 'value'> {\n /**\n * A unique value that identifies this item within the segmented control.\n */\n value: string\n /**\n * When true, prevents the user from interacting with this item.\n * @default false\n */\n disabled?: boolean\n ref?: Ref<HTMLElement>\n}\n\nexport const SegmentedControlItem = ({\n value,\n disabled = false,\n children,\n className,\n ref,\n ...rest\n}: SegmentedControlItemProps) => {\n const content = Children.toArray(children).map((child, index) => {\n if (typeof child === 'string' || typeof child === 'number') {\n return (\n <span key={`text-${index}`} data-spark-segmented-control-text>\n {child}\n </span>\n )\n }\n\n return child\n })\n\n return (\n <Radio.Root\n ref={ref}\n data-spark-component=\"segmented-control-item\"\n data-value={value}\n value={value}\n disabled={disabled}\n className={itemStyles({ className })}\n {...rest}\n >\n {content}\n </Radio.Root>\n )\n}\n\nSegmentedControlItem.displayName = 'SegmentedControl.Item'\n","import { SegmentedControl as Root } from './SegmentedControl'\nimport { SegmentedControlIndicator as Indicator } from './SegmentedControlIndicator'\nimport { SegmentedControlItem as Item } from './SegmentedControlItem'\n\nexport const SegmentedControl: typeof Root & {\n Item: typeof Item\n Indicator: typeof Indicator\n} = Object.assign(Root, {\n Item,\n Indicator,\n})\n\nSegmentedControl.displayName = 'SegmentedControl'\nItem.displayName = 'SegmentedControl.Item'\nIndicator.displayName = 'SegmentedControl.Indicator'\n\nexport type { SegmentedControlProps } from './SegmentedControl'\nexport type { SegmentedControlItemProps } from './SegmentedControlItem'\nexport type { SegmentedControlIndicatorProps } from './SegmentedControlIndicator'\n"],"names":["rootStyles","cva","itemStyles","indicatorStyles","SegmentedControlContext","createContext","useSegmentedControlContext","context","useContext","getFirstItemValue","children","firstValue","Children","child","isValidElement","SegmentedControl","value","defaultValue","onValueChange","className","ref","rest","containerRef","useRef","mergedRef","useMergeRefs","isControlled","internalValue","setInternalValue","useState","checkedValue","handleValueChange","newValue","next","labelId","description","isRequired","isInvalid","name","useFormFieldControl","jsx","RadioGroup","SegmentedControlIndicator","rect","setRect","selector","useMemo","useEffect","container","selectedItem","update","currentContainer","currentSelected","containerRect","itemRect","scaleX","scaleY","ro","style","SegmentedControlItem","disabled","content","index","Radio","Root","Item","Indicator"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spark-ui/components",
3
- "version": "17.2.1-beta.1",
3
+ "version": "17.2.2",
4
4
  "license": "MIT",
5
5
  "description": "Spark (Leboncoin design system) components.",
6
6
  "exports": {
@@ -44,7 +44,6 @@
44
44
  "a11y"
45
45
  ],
46
46
  "scripts": {
47
- "build:tsup": "NODE_OPTIONS='--max-old-space-size=16384' tsup",
48
47
  "build": "NODE_OPTIONS='--max-old-space-size=8192' vite build"
49
48
  },
50
49
  "dependencies": {
@@ -54,9 +53,9 @@
54
53
  "@react-aria/toast": "^3.0.0-beta.18",
55
54
  "@react-stately/numberfield": "3.9.11",
56
55
  "@react-stately/toast": "^3.0.0-beta.7",
57
- "@spark-ui/hooks": "^17.2.1-beta.1",
58
- "@spark-ui/icons": "^17.2.1-beta.1",
59
- "@spark-ui/internal-utils": "^17.2.1-beta.1",
56
+ "@spark-ui/hooks": "^17.2.2",
57
+ "@spark-ui/icons": "^17.2.2",
58
+ "@spark-ui/internal-utils": "^17.2.2",
60
59
  "@zag-js/pagination": "1.30.0",
61
60
  "@zag-js/react": "1.30.0",
62
61
  "class-variance-authority": "0.7.1",
@@ -1,27 +0,0 @@
1
- import { Accordion as BaseAccordion } from '@base-ui/react/accordion';
2
- import { ComponentProps, Ref } from 'react';
3
- type ExtentedZagInterface = Omit<ComponentProps<typeof BaseAccordion.Root>, 'multiple' | 'render'>;
4
- export interface AccordionProps extends ExtentedZagInterface {
5
- /**
6
- * Change the default rendered element for the one passed as a child, merging their props and behavior.
7
- */
8
- asChild?: boolean;
9
- /**
10
- * Whether the accordion items are disabled
11
- */
12
- disabled?: boolean;
13
- /**
14
- * Whether multiple items can be open at the same time.
15
- */
16
- multiple?: boolean;
17
- design?: 'filled' | 'outlined';
18
- ref?: Ref<HTMLDivElement>;
19
- }
20
- export declare const Accordion: {
21
- ({ asChild, children, design, hiddenUntilFound, multiple, className, ref, ...props }: AccordionProps): import("react/jsx-runtime").JSX.Element;
22
- displayName: string;
23
- };
24
- export declare const useAccordionContext: () => {
25
- design: "filled" | "outlined";
26
- };
27
- export {};
@@ -1,12 +0,0 @@
1
- import { Accordion as BaseAccordion } from '@base-ui/react/accordion';
2
- import { ComponentProps, Ref } from 'react';
3
- type ExtentedZagInterface = Omit<ComponentProps<typeof BaseAccordion.Item>, 'render'>;
4
- export interface AccordionItemProps extends ExtentedZagInterface {
5
- asChild?: boolean;
6
- ref?: Ref<HTMLDivElement>;
7
- }
8
- export declare const Item: {
9
- ({ asChild, className, children, ref, ...props }: AccordionItemProps): import("react/jsx-runtime").JSX.Element;
10
- displayName: string;
11
- };
12
- export {};
@@ -1,12 +0,0 @@
1
- import { Accordion as BaseAccordion } from '@base-ui/react/accordion';
2
- import { ComponentProps, Ref } from 'react';
3
- type ExtentedZagInterface = Omit<ComponentProps<typeof BaseAccordion.Panel>, 'render'>;
4
- export interface AccordionItemContentProps extends ExtentedZagInterface {
5
- asChild?: boolean;
6
- ref?: Ref<HTMLDivElement>;
7
- }
8
- export declare const ItemContent: {
9
- ({ asChild, className, children, ref, ...props }: AccordionItemContentProps): import("react/jsx-runtime").JSX.Element;
10
- displayName: string;
11
- };
12
- export {};
@@ -1,9 +0,0 @@
1
- import { ComponentProps, Ref } from 'react';
2
- export interface AccordionItemHeaderProps extends ComponentProps<'h3'> {
3
- asChild?: boolean;
4
- ref?: Ref<HTMLHeadingElement>;
5
- }
6
- export declare const ItemHeader: {
7
- ({ asChild, children, className, ref, }: AccordionItemHeaderProps): import("react/jsx-runtime").JSX.Element;
8
- displayName: string;
9
- };
@@ -1,12 +0,0 @@
1
- import { Accordion as BaseAccordion } from '@base-ui/react/accordion';
2
- import { ComponentProps, Ref } from 'react';
3
- type ExtentedZagInterface = Omit<ComponentProps<typeof BaseAccordion.Trigger>, 'render'>;
4
- export interface AccordionItemTriggerProps extends ExtentedZagInterface {
5
- asChild?: boolean;
6
- ref?: Ref<HTMLButtonElement>;
7
- }
8
- export declare const ItemTrigger: {
9
- ({ asChild, children, className, ref, ...props }: AccordionItemTriggerProps): import("react/jsx-runtime").JSX.Element;
10
- displayName: string;
11
- };
12
- export {};
@@ -1,15 +0,0 @@
1
- import { Accordion as Root } from './Accordion';
2
- import { Item } from './AccordionItem';
3
- import { ItemContent } from './AccordionItemContent';
4
- import { ItemHeader } from './AccordionItemHeader';
5
- import { ItemTrigger } from './AccordionItemTrigger';
6
- export declare const Accordion: typeof Root & {
7
- Item: typeof Item;
8
- ItemHeader: typeof ItemHeader;
9
- ItemTrigger: typeof ItemTrigger;
10
- ItemContent: typeof ItemContent;
11
- };
12
- export { type AccordionProps } from './Accordion';
13
- export { type AccordionItemHeaderProps } from './AccordionItemHeader';
14
- export { type AccordionItemContentProps } from './AccordionItemContent';
15
- export { type AccordionItemTriggerProps } from './AccordionItemTrigger';
@@ -1,15 +0,0 @@
1
- import { Accordion as Root } from './Accordion';
2
- import { Item } from './AccordionItem';
3
- import { ItemContent } from './AccordionItemContent';
4
- import { ItemHeader } from './AccordionItemHeader';
5
- import { ItemTrigger } from './AccordionItemTrigger';
6
- export declare const Accordion: typeof Root & {
7
- Item: typeof Item;
8
- ItemHeader: typeof ItemHeader;
9
- ItemTrigger: typeof ItemTrigger;
10
- ItemContent: typeof ItemContent;
11
- };
12
- export { type AccordionProps } from './Accordion';
13
- export { type AccordionItemHeaderProps } from './AccordionItemHeader';
14
- export { type AccordionItemContentProps } from './AccordionItemContent';
15
- export { type AccordionItemTriggerProps } from './AccordionItemTrigger';
@@ -1,3 +0,0 @@
1
- export declare function useRenderSlot(asChild: boolean, defaultTag: string): (({ ...props }: {
2
- [x: string]: any;
3
- }) => import("react/jsx-runtime").JSX.Element) | undefined;
@@ -1,29 +0,0 @@
1
- import { AlertDialog as BaseAlertDialog } from '@base-ui/react/alert-dialog';
2
- import { ComponentProps, Ref } from 'react';
3
- export interface AlertDialogProps extends Omit<ComponentProps<typeof BaseAlertDialog.Root>, 'onOpenChange' | 'render'> {
4
- /**
5
- * Specifies if the dialog is open or not.
6
- */
7
- open?: boolean;
8
- /**
9
- * Default open state.
10
- */
11
- defaultOpen?: boolean;
12
- /**
13
- * Handler executed on every dialog open state change.
14
- */
15
- onOpenChange?: (open: boolean) => void;
16
- /**
17
- * Specifies if the dialog should have a fade animation on its body (in case it is scrollable).
18
- */
19
- withFade?: boolean;
20
- /**
21
- * Change the default rendered element for the one passed as a child, merging their props and behavior.
22
- */
23
- asChild?: boolean;
24
- ref?: Ref<HTMLDivElement>;
25
- }
26
- export declare const AlertDialog: {
27
- ({ onOpenChange, withFade, ...props }: AlertDialogProps): import("react/jsx-runtime").JSX.Element;
28
- displayName: string;
29
- };