@react-md/core 1.0.0-next.19 → 1.0.0-next.20

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 (1071) hide show
  1. package/dist/CoreProviders.js.map +1 -1
  2. package/dist/NoSsr.js.map +1 -1
  3. package/dist/RootHtml.js.map +1 -1
  4. package/dist/SsrProvider.js.map +1 -1
  5. package/dist/_core.scss +10 -9
  6. package/dist/app-bar/AppBar.js.map +1 -1
  7. package/dist/app-bar/AppBarTitle.js.map +1 -1
  8. package/dist/app-bar/_app-bar.scss +0 -4
  9. package/dist/app-bar/styles.js.map +1 -1
  10. package/dist/autocomplete/Autocomplete.js.map +1 -1
  11. package/dist/autocomplete/AutocompleteChip.js +1 -1
  12. package/dist/autocomplete/AutocompleteChip.js.map +1 -1
  13. package/dist/autocomplete/AutocompleteCircularProgress.js.map +1 -1
  14. package/dist/autocomplete/AutocompleteClearButton.js +1 -1
  15. package/dist/autocomplete/AutocompleteClearButton.js.map +1 -1
  16. package/dist/autocomplete/AutocompleteDropdownButton.js +1 -1
  17. package/dist/autocomplete/AutocompleteDropdownButton.js.map +1 -1
  18. package/dist/autocomplete/AutocompleteListboxChildren.js.map +1 -1
  19. package/dist/autocomplete/_autocomplete.scss +15 -13
  20. package/dist/autocomplete/autocompleteStyles.js.map +1 -1
  21. package/dist/autocomplete/types.js.map +1 -1
  22. package/dist/autocomplete/useAutocomplete.js +1 -1
  23. package/dist/autocomplete/useAutocomplete.js.map +1 -1
  24. package/dist/autocomplete/utils.js.map +1 -1
  25. package/dist/avatar/Avatar.js.map +1 -1
  26. package/dist/avatar/styles.js.map +1 -1
  27. package/dist/badge/Badge.js.map +1 -1
  28. package/dist/badge/styles.js.map +1 -1
  29. package/dist/box/Box.js +2 -1
  30. package/dist/box/Box.js.map +1 -1
  31. package/dist/box/_box.scss +24 -1
  32. package/dist/box/styles.d.ts +11 -0
  33. package/dist/box/styles.js +4 -3
  34. package/dist/box/styles.js.map +1 -1
  35. package/dist/button/AsyncButton.js.map +1 -1
  36. package/dist/button/Button.js.map +1 -1
  37. package/dist/button/ButtonUnstyled.js.map +1 -1
  38. package/dist/button/FloatingActionButton.js.map +1 -1
  39. package/dist/button/TooltippedButton.js.map +1 -1
  40. package/dist/button/buttonStyles.js.map +1 -1
  41. package/dist/card/Card.d.ts +4 -13
  42. package/dist/card/Card.js +3 -3
  43. package/dist/card/Card.js.map +1 -1
  44. package/dist/card/CardContent.js.map +1 -1
  45. package/dist/card/CardFooter.js.map +1 -1
  46. package/dist/card/CardHeader.js.map +1 -1
  47. package/dist/card/CardSubtitle.js.map +1 -1
  48. package/dist/card/CardTitle.js.map +1 -1
  49. package/dist/card/ClickableCard.js.map +1 -1
  50. package/dist/card/_card.scss +5 -0
  51. package/dist/card/styles.js.map +1 -1
  52. package/dist/chip/Chip.js +1 -1
  53. package/dist/chip/Chip.js.map +1 -1
  54. package/dist/chip/styles.js.map +1 -1
  55. package/dist/dialog/Dialog.d.ts +4 -4
  56. package/dist/dialog/Dialog.js.map +1 -1
  57. package/dist/dialog/DialogContent.js.map +1 -1
  58. package/dist/dialog/DialogFooter.js.map +1 -1
  59. package/dist/dialog/DialogHeader.js.map +1 -1
  60. package/dist/dialog/DialogTitle.js.map +1 -1
  61. package/dist/dialog/FixedDialog.js +8 -5
  62. package/dist/dialog/FixedDialog.js.map +1 -1
  63. package/dist/dialog/NestedDialogProvider.js.map +1 -1
  64. package/dist/dialog/styles.d.ts +12 -3
  65. package/dist/dialog/styles.js.map +1 -1
  66. package/dist/divider/Divider.js.map +1 -1
  67. package/dist/divider/styles.js.map +1 -1
  68. package/dist/draggable/useDraggable.d.ts +3 -0
  69. package/dist/draggable/useDraggable.js +20 -5
  70. package/dist/draggable/useDraggable.js.map +1 -1
  71. package/dist/draggable/utils.js.map +1 -1
  72. package/dist/expansion-panel/ExpansionList.js.map +1 -1
  73. package/dist/expansion-panel/ExpansionPanel.js.map +1 -1
  74. package/dist/expansion-panel/ExpansionPanelHeader.js +1 -1
  75. package/dist/expansion-panel/ExpansionPanelHeader.js.map +1 -1
  76. package/dist/expansion-panel/expansionPanelStyles.js.map +1 -1
  77. package/dist/expansion-panel/useExpansionList.js.map +1 -1
  78. package/dist/expansion-panel/useExpansionPanels.js.map +1 -1
  79. package/dist/files/FileInput.js +1 -1
  80. package/dist/files/FileInput.js.map +1 -1
  81. package/dist/files/styles.js.map +1 -1
  82. package/dist/files/useFileUpload.js.map +1 -1
  83. package/dist/files/utils.d.ts +31 -1
  84. package/dist/files/utils.js +30 -0
  85. package/dist/files/utils.js.map +1 -1
  86. package/dist/focus/useFocusContainer.d.ts +5 -7
  87. package/dist/focus/useFocusContainer.js +5 -7
  88. package/dist/focus/useFocusContainer.js.map +1 -1
  89. package/dist/form/Checkbox.js.map +1 -1
  90. package/dist/form/Fieldset.js.map +1 -1
  91. package/dist/form/Form.js.map +1 -1
  92. package/dist/form/FormMessage.js.map +1 -1
  93. package/dist/form/FormMessageContainer.js.map +1 -1
  94. package/dist/form/FormMessageCounter.js.map +1 -1
  95. package/dist/form/InputToggle.js.map +1 -1
  96. package/dist/form/InputToggleIcon.js +1 -1
  97. package/dist/form/InputToggleIcon.js.map +1 -1
  98. package/dist/form/Label.js.map +1 -1
  99. package/dist/form/Legend.js.map +1 -1
  100. package/dist/form/Listbox.js.map +1 -1
  101. package/dist/form/ListboxProvider.js.map +1 -1
  102. package/dist/form/MenuItemCheckbox.js.map +1 -1
  103. package/dist/form/MenuItemFileInput.d.ts +1 -4
  104. package/dist/form/MenuItemFileInput.js +15 -6
  105. package/dist/form/MenuItemFileInput.js.map +1 -1
  106. package/dist/form/MenuItemInputToggle.js.map +1 -1
  107. package/dist/form/MenuItemRadio.js.map +1 -1
  108. package/dist/form/MenuItemSwitch.js.map +1 -1
  109. package/dist/form/MenuItemTextField.js.map +1 -1
  110. package/dist/form/NativeSelect.js +1 -1
  111. package/dist/form/NativeSelect.js.map +1 -1
  112. package/dist/form/OptGroup.js.map +1 -1
  113. package/dist/form/Option.js +4 -4
  114. package/dist/form/Option.js.map +1 -1
  115. package/dist/form/Password.js +2 -2
  116. package/dist/form/Password.js.map +1 -1
  117. package/dist/form/Radio.js.map +1 -1
  118. package/dist/form/ResizingTextAreaWrapper.js.map +1 -1
  119. package/dist/form/Select.js +1 -1
  120. package/dist/form/Select.js.map +1 -1
  121. package/dist/form/SelectedOption.js.map +1 -1
  122. package/dist/form/Slider.js +9 -62
  123. package/dist/form/Slider.js.map +1 -1
  124. package/dist/form/SliderContainer.js.map +1 -1
  125. package/dist/form/SliderMark.js.map +1 -1
  126. package/dist/form/SliderMarkLabel.js.map +1 -1
  127. package/dist/form/SliderThumb.js +1 -0
  128. package/dist/form/SliderThumb.js.map +1 -1
  129. package/dist/form/SliderTrack.js.map +1 -1
  130. package/dist/form/SliderValueMarks.js.map +1 -1
  131. package/dist/form/SliderValueTooltip.js.map +1 -1
  132. package/dist/form/Switch.js.map +1 -1
  133. package/dist/form/SwitchTrack.js.map +1 -1
  134. package/dist/form/TextArea.js.map +1 -1
  135. package/dist/form/TextField.js.map +1 -1
  136. package/dist/form/TextFieldAddon.js.map +1 -1
  137. package/dist/form/TextFieldContainer.js.map +1 -1
  138. package/dist/form/_form.scss +313 -269
  139. package/dist/form/formMessageContainerStyles.js.map +1 -1
  140. package/dist/form/formMessageStyles.js.map +1 -1
  141. package/dist/form/inputToggleStyles.js.map +1 -1
  142. package/dist/form/menuItemInputToggleStyles.js.map +1 -1
  143. package/dist/form/nativeSelectStyles.js.map +1 -1
  144. package/dist/form/optionStyles.js.map +1 -1
  145. package/dist/form/passwordStyles.js.map +1 -1
  146. package/dist/form/selectStyles.js.map +1 -1
  147. package/dist/form/selectUtils.js.map +1 -1
  148. package/dist/form/sliderUtils.d.ts +2 -7
  149. package/dist/form/sliderUtils.js +5 -5
  150. package/dist/form/sliderUtils.js.map +1 -1
  151. package/dist/form/switchStyles.js.map +1 -1
  152. package/dist/form/textAreaStyles.js.map +1 -1
  153. package/dist/form/textFieldContainerStyles.js.map +1 -1
  154. package/dist/form/textFieldStyles.js.map +1 -1
  155. package/dist/form/types.js.map +1 -1
  156. package/dist/form/useCheckboxGroup.d.ts +2 -2
  157. package/dist/form/useCheckboxGroup.js.map +1 -1
  158. package/dist/form/useCombobox.js.map +1 -1
  159. package/dist/form/useEditableCombobox.js.map +1 -1
  160. package/dist/form/useFormReset.js.map +1 -1
  161. package/dist/form/useNumberField.js.map +1 -1
  162. package/dist/form/useRadioGroup.d.ts +1 -1
  163. package/dist/form/useRadioGroup.js.map +1 -1
  164. package/dist/form/useRangeSlider.d.ts +1 -0
  165. package/dist/form/useRangeSlider.js.map +1 -1
  166. package/dist/form/useResizingTextArea.js.map +1 -1
  167. package/dist/form/useSelectCombobox.js.map +1 -1
  168. package/dist/form/useSlider.d.ts +1 -3
  169. package/dist/form/useSlider.js.map +1 -1
  170. package/dist/form/useSliderDraggable.d.ts +9 -0
  171. package/dist/form/useSliderDraggable.js +44 -0
  172. package/dist/form/useSliderDraggable.js.map +1 -0
  173. package/dist/form/useTextField.d.ts +24 -14
  174. package/dist/form/useTextField.js +7 -5
  175. package/dist/form/useTextField.js.map +1 -1
  176. package/dist/form/useTextFieldContainerAddons.js.map +1 -1
  177. package/dist/form/validation.js +2 -0
  178. package/dist/form/validation.js.map +1 -1
  179. package/dist/hoverMode/useHoverMode.d.ts +64 -3
  180. package/dist/hoverMode/useHoverMode.js.map +1 -1
  181. package/dist/hoverMode/useHoverModeProvider.d.ts +22 -12
  182. package/dist/hoverMode/useHoverModeProvider.js +21 -11
  183. package/dist/hoverMode/useHoverModeProvider.js.map +1 -1
  184. package/dist/icon/FontIcon.js.map +1 -1
  185. package/dist/icon/IconRotator.js.map +1 -1
  186. package/dist/icon/MaterialIcon.js.map +1 -1
  187. package/dist/icon/MaterialSymbol.js.map +1 -1
  188. package/dist/icon/SVGIcon.js.map +1 -1
  189. package/dist/icon/TextIconSpacing.js.map +1 -1
  190. package/dist/icon/{iconConfig.js → config.js} +1 -1
  191. package/dist/icon/config.js.map +1 -0
  192. package/dist/icon/materialConfig.js.map +1 -1
  193. package/dist/icon/styles.js.map +1 -1
  194. package/dist/interaction/Ripple.js.map +1 -1
  195. package/dist/interaction/RippleContainer.js.map +1 -1
  196. package/dist/interaction/UserInteractionModeProvider.js.map +1 -1
  197. package/dist/interaction/_interaction.scss +2 -2
  198. package/dist/interaction/useElementInteraction.d.ts +24 -25
  199. package/dist/interaction/useElementInteraction.js +20 -21
  200. package/dist/interaction/useElementInteraction.js.map +1 -1
  201. package/dist/interaction/useHigherContrastChildren.d.ts +8 -6
  202. package/dist/interaction/useHigherContrastChildren.js +10 -8
  203. package/dist/interaction/useHigherContrastChildren.js.map +1 -1
  204. package/dist/interaction/utils.js.map +1 -1
  205. package/dist/layout/LayoutAppBar.js.map +1 -1
  206. package/dist/layout/LayoutNav.js.map +1 -1
  207. package/dist/layout/LayoutWindowSplitter.js.map +1 -1
  208. package/dist/layout/Main.js.map +1 -1
  209. package/dist/layout/_layout.scss +4 -0
  210. package/dist/layout/layoutNavStyles.js.map +1 -1
  211. package/dist/layout/layoutWindowSplitterStyles.js.map +1 -1
  212. package/dist/layout/mainStyles.js.map +1 -1
  213. package/dist/layout/useExpandableLayout.d.ts +12 -14
  214. package/dist/layout/useExpandableLayout.js +13 -15
  215. package/dist/layout/useExpandableLayout.js.map +1 -1
  216. package/dist/layout/useHorizontalLayoutTransition.js.map +1 -1
  217. package/dist/layout/useLayoutAppBarHeight.js.map +1 -1
  218. package/dist/layout/useLayoutTree.d.ts +4 -3
  219. package/dist/layout/useLayoutTree.js +4 -3
  220. package/dist/layout/useLayoutTree.js.map +1 -1
  221. package/dist/layout/useLayoutWindowSplitter.js.map +1 -1
  222. package/dist/layout/useMainTabIndex.js.map +1 -1
  223. package/dist/layout/useResizableLayout.d.ts +13 -16
  224. package/dist/layout/useResizableLayout.js +13 -16
  225. package/dist/layout/useResizableLayout.js.map +1 -1
  226. package/dist/layout/useTemporaryLayout.d.ts +14 -9
  227. package/dist/layout/useTemporaryLayout.js +12 -10
  228. package/dist/layout/useTemporaryLayout.js.map +1 -1
  229. package/dist/link/Link.js.map +1 -1
  230. package/dist/link/SkipToMainContent.js.map +1 -1
  231. package/dist/link/styles.js.map +1 -1
  232. package/dist/list/List.js.map +1 -1
  233. package/dist/list/ListItem.js +1 -1
  234. package/dist/list/ListItem.js.map +1 -1
  235. package/dist/list/ListItemAddon.js.map +1 -1
  236. package/dist/list/ListItemChildren.js.map +1 -1
  237. package/dist/list/ListItemLink.js.map +1 -1
  238. package/dist/list/ListItemText.js.map +1 -1
  239. package/dist/list/ListSubheader.js.map +1 -1
  240. package/dist/list/listItemStyles.js.map +1 -1
  241. package/dist/list/listStyles.js.map +1 -1
  242. package/dist/list/types.js.map +1 -1
  243. package/dist/media-queries/AppSizeProvider.d.ts +1 -1
  244. package/dist/media-queries/AppSizeProvider.js +1 -1
  245. package/dist/media-queries/AppSizeProvider.js.map +1 -1
  246. package/dist/media-queries/useMediaQuery.d.ts +3 -3
  247. package/dist/media-queries/useMediaQuery.js +3 -3
  248. package/dist/media-queries/useMediaQuery.js.map +1 -1
  249. package/dist/menu/DropdownMenu.js.map +1 -1
  250. package/dist/menu/Menu.js.map +1 -1
  251. package/dist/menu/MenuBar.js.map +1 -1
  252. package/dist/menu/MenuButton.js +1 -1
  253. package/dist/menu/MenuButton.js.map +1 -1
  254. package/dist/menu/MenuConfigurationProvider.js.map +1 -1
  255. package/dist/menu/MenuItem.js.map +1 -1
  256. package/dist/menu/MenuItemButton.js +1 -1
  257. package/dist/menu/MenuItemButton.js.map +1 -1
  258. package/dist/menu/MenuItemCircularProgress.js.map +1 -1
  259. package/dist/menu/MenuItemGroup.js.map +1 -1
  260. package/dist/menu/MenuItemSeparator.js.map +1 -1
  261. package/dist/menu/MenuSheet.js.map +1 -1
  262. package/dist/menu/MenuVisibilityProvider.js.map +1 -1
  263. package/dist/menu/MenuWidget.js.map +1 -1
  264. package/dist/menu/MenuWidgetKeyboardProvider.js.map +1 -1
  265. package/dist/menu/useContextMenu.js.map +1 -1
  266. package/dist/menu/useMenuBarProvider.js.map +1 -1
  267. package/dist/movement/types.js.map +1 -1
  268. package/dist/movement/useKeyboardMovementProvider.js.map +1 -1
  269. package/dist/movement/utils.js.map +1 -1
  270. package/dist/navigation/CollapsibleNavGroup.js.map +1 -1
  271. package/dist/navigation/DefaultNavigationRenderer.js.map +1 -1
  272. package/dist/navigation/NavGroup.js.map +1 -1
  273. package/dist/navigation/NavItem.js.map +1 -1
  274. package/dist/navigation/NavItemButton.js +1 -1
  275. package/dist/navigation/NavItemButton.js.map +1 -1
  276. package/dist/navigation/NavItemLink.js.map +1 -1
  277. package/dist/navigation/NavSubheader.d.ts +1 -1
  278. package/dist/navigation/NavSubheader.js +1 -1
  279. package/dist/navigation/NavSubheader.js.map +1 -1
  280. package/dist/navigation/Navigation.js.map +1 -1
  281. package/dist/navigation/navGroupStyles.js.map +1 -1
  282. package/dist/navigation/navItemStyles.js.map +1 -1
  283. package/dist/navigation/types.js.map +1 -1
  284. package/dist/navigation/useActiveHeadingId.d.ts +1 -1
  285. package/dist/navigation/useActiveHeadingId.js +4 -4
  286. package/dist/navigation/useActiveHeadingId.js.map +1 -1
  287. package/dist/navigation/useNavigationExpansion.js.map +1 -1
  288. package/dist/navigation/useTableOfContentsHeadings.d.ts +75 -0
  289. package/dist/navigation/useTableOfContentsHeadings.js +91 -0
  290. package/dist/navigation/useTableOfContentsHeadings.js.map +1 -0
  291. package/dist/objectFit.js.map +1 -1
  292. package/dist/overlay/Overlay.js +1 -1
  293. package/dist/overlay/Overlay.js.map +1 -1
  294. package/dist/overlay/overlayStyles.d.ts +7 -3
  295. package/dist/overlay/overlayStyles.js.map +1 -1
  296. package/dist/portal/Portal.js.map +1 -1
  297. package/dist/portal/PortalContainerProvider.js.map +1 -1
  298. package/dist/positioning/createHorizontalPosition.js.map +1 -1
  299. package/dist/positioning/createVerticalPosition.js.map +1 -1
  300. package/dist/positioning/useFixedPositioning.d.ts +11 -8
  301. package/dist/positioning/useFixedPositioning.js +7 -6
  302. package/dist/positioning/useFixedPositioning.js.map +1 -1
  303. package/dist/progress/CircularProgress.js.map +1 -1
  304. package/dist/progress/LinearProgress.js.map +1 -1
  305. package/dist/progress/_progress.scss +2 -1
  306. package/dist/responsive-item/ResponsiveItem.js.map +1 -1
  307. package/dist/responsive-item/ResponsiveItemOverlay.js.map +1 -1
  308. package/dist/responsive-item/responsiveItemOverlayStyles.js.map +1 -1
  309. package/dist/responsive-item/responsiveItemStyles.js.map +1 -1
  310. package/dist/scroll/ScrollLock.js.map +1 -1
  311. package/dist/scroll/useScrollLock.d.ts +1 -1
  312. package/dist/scroll/useScrollLock.js +1 -1
  313. package/dist/scroll/useScrollLock.js.map +1 -1
  314. package/dist/searching/fuzzy.d.ts +1 -1
  315. package/dist/searching/fuzzy.js.map +1 -1
  316. package/dist/searching/useFuzzyMatch.js.map +1 -1
  317. package/dist/segmented-button/SegmentedButton.js +1 -1
  318. package/dist/segmented-button/SegmentedButton.js.map +1 -1
  319. package/dist/segmented-button/SegmentedButtonContainer.js.map +1 -1
  320. package/dist/segmented-button/_segmented-button.scss +40 -0
  321. package/dist/segmented-button/segmentedButtonContainerStyles.js.map +1 -1
  322. package/dist/segmented-button/segmentedButtonStyles.js.map +1 -1
  323. package/dist/sheet/Sheet.js.map +1 -1
  324. package/dist/sheet/styles.js.map +1 -1
  325. package/dist/snackbar/DefaultToastRenderer.js.map +1 -1
  326. package/dist/snackbar/Snackbar.js.map +1 -1
  327. package/dist/snackbar/Toast.js.map +1 -1
  328. package/dist/snackbar/ToastActionButton.js.map +1 -1
  329. package/dist/snackbar/ToastCloseButton.js +1 -1
  330. package/dist/snackbar/ToastCloseButton.js.map +1 -1
  331. package/dist/snackbar/ToastContent.js.map +1 -1
  332. package/dist/snackbar/ToastManager.js.map +1 -1
  333. package/dist/snackbar/ToastManagerProvider.js.map +1 -1
  334. package/dist/snackbar/snackbarStyles.js.map +1 -1
  335. package/dist/snackbar/toastContentStyles.js.map +1 -1
  336. package/dist/snackbar/toastStyles.js.map +1 -1
  337. package/dist/snackbar/useCurrentToastActions.js.map +1 -1
  338. package/dist/storage/internalUtils.d.ts +19 -0
  339. package/dist/storage/internalUtils.js +22 -0
  340. package/dist/storage/internalUtils.js.map +1 -0
  341. package/dist/storage/types.d.ts +75 -0
  342. package/dist/storage/types.js +3 -0
  343. package/dist/storage/types.js.map +1 -0
  344. package/dist/storage/useStorage.d.ts +113 -0
  345. package/dist/storage/useStorage.js +247 -0
  346. package/dist/storage/useStorage.js.map +1 -0
  347. package/dist/storage/utils.d.ts +94 -0
  348. package/dist/storage/utils.js +106 -0
  349. package/dist/storage/utils.js.map +1 -0
  350. package/dist/suspense/CircularProgressSuspense.js.map +1 -1
  351. package/dist/suspense/NullSuspense.js.map +1 -1
  352. package/dist/table/StickyTableSection.js.map +1 -1
  353. package/dist/table/Table.js.map +1 -1
  354. package/dist/table/TableBody.js.map +1 -1
  355. package/dist/table/TableCell.js +1 -1
  356. package/dist/table/TableCell.js.map +1 -1
  357. package/dist/table/TableCellContent.js.map +1 -1
  358. package/dist/table/TableCheckbox.js.map +1 -1
  359. package/dist/table/TableConfigurationProvider.js.map +1 -1
  360. package/dist/table/TableContainer.js.map +1 -1
  361. package/dist/table/TableContainerProvider.js.map +1 -1
  362. package/dist/table/TableFooter.js.map +1 -1
  363. package/dist/table/TableHeader.js.map +1 -1
  364. package/dist/table/TableRadio.js.map +1 -1
  365. package/dist/table/TableRow.js.map +1 -1
  366. package/dist/table/_table.scss +0 -1
  367. package/dist/table/tableCellStyles.js.map +1 -1
  368. package/dist/table/tableFooterStyles.js.map +1 -1
  369. package/dist/table/tableHeaderStyles.js.map +1 -1
  370. package/dist/table/tableRowStyles.js.map +1 -1
  371. package/dist/table/tableStyles.js.map +1 -1
  372. package/dist/table/useStickyTableSection.js.map +1 -1
  373. package/dist/table/useTableSectionConfig.js.map +1 -1
  374. package/dist/tabs/SimpleTabPanel.d.ts +17 -0
  375. package/dist/tabs/SimpleTabPanel.js +21 -0
  376. package/dist/tabs/SimpleTabPanel.js.map +1 -0
  377. package/dist/tabs/SimpleTabPanels.d.ts +17 -0
  378. package/dist/tabs/SimpleTabPanels.js +18 -0
  379. package/dist/tabs/SimpleTabPanels.js.map +1 -0
  380. package/dist/tabs/Tab.js.map +1 -1
  381. package/dist/tabs/TabList.d.ts +8 -25
  382. package/dist/tabs/TabList.js +4 -6
  383. package/dist/tabs/TabList.js.map +1 -1
  384. package/dist/tabs/TabListScrollButton.js +2 -1
  385. package/dist/tabs/TabListScrollButton.js.map +1 -1
  386. package/dist/tabs/_tabs.scss +50 -14
  387. package/dist/tabs/tabIndicatorStyles.js.map +1 -1
  388. package/dist/tabs/tabListScrollButtonStyles.js.map +1 -1
  389. package/dist/tabs/tabListStyles.d.ts +9 -0
  390. package/dist/tabs/tabListStyles.js +2 -1
  391. package/dist/tabs/tabListStyles.js.map +1 -1
  392. package/dist/tabs/tabStyles.d.ts +7 -0
  393. package/dist/tabs/tabStyles.js.map +1 -1
  394. package/dist/tabs/types.d.ts +25 -0
  395. package/dist/tabs/types.js +24 -0
  396. package/dist/tabs/types.js.map +1 -0
  397. package/dist/tabs/useMaxTabPanelHeight.d.ts +82 -0
  398. package/dist/tabs/useMaxTabPanelHeight.js +95 -0
  399. package/dist/tabs/useMaxTabPanelHeight.js.map +1 -0
  400. package/dist/tabs/useTabList.d.ts +4 -2
  401. package/dist/tabs/useTabList.js +24 -6
  402. package/dist/tabs/useTabList.js.map +1 -1
  403. package/dist/tabs/useTabs.d.ts +53 -68
  404. package/dist/tabs/useTabs.js +6 -2
  405. package/dist/tabs/useTabs.js.map +1 -1
  406. package/dist/tabs/utils.d.ts +4 -0
  407. package/dist/tabs/utils.js +5 -0
  408. package/dist/tabs/utils.js.map +1 -1
  409. package/dist/test-utils/drag.d.ts +1 -0
  410. package/dist/test-utils/index.d.ts +6 -4
  411. package/dist/test-utils/index.js +6 -4
  412. package/dist/test-utils/index.js.map +1 -1
  413. package/dist/test-utils/jest-globals/index.d.ts +4 -0
  414. package/dist/test-utils/jest-globals/index.js +6 -0
  415. package/dist/test-utils/jest-globals/index.js.map +1 -0
  416. package/dist/test-utils/jest-globals/match-media.d.ts +32 -0
  417. package/dist/test-utils/jest-globals/match-media.js +35 -0
  418. package/dist/test-utils/jest-globals/match-media.js.map +1 -0
  419. package/dist/test-utils/jest-globals/resize-observer.d.ts +5 -0
  420. package/dist/test-utils/jest-globals/resize-observer.js +10 -0
  421. package/dist/test-utils/jest-globals/resize-observer.js.map +1 -0
  422. package/dist/test-utils/jest-globals/setup.d.ts +1 -0
  423. package/dist/test-utils/{jest-setup.js → jest-globals/setup.js} +4 -3
  424. package/dist/test-utils/jest-globals/setup.js.map +1 -0
  425. package/dist/test-utils/{timers.d.ts → jest-globals/timers.d.ts} +2 -2
  426. package/dist/test-utils/{timers.js → jest-globals/timers.js} +2 -2
  427. package/dist/test-utils/jest-globals/timers.js.map +1 -0
  428. package/dist/test-utils/jest-globals/uploadMenuItemFileInput.d.ts +32 -0
  429. package/dist/test-utils/jest-globals/uploadMenuItemFileInput.js +39 -0
  430. package/dist/test-utils/jest-globals/uploadMenuItemFileInput.js.map +1 -0
  431. package/dist/test-utils/mocks/IntersectionObserver.js.map +1 -0
  432. package/dist/test-utils/{ResizeObserver.d.ts → mocks/ResizeObserver.d.ts} +16 -23
  433. package/dist/test-utils/{ResizeObserver.js → mocks/ResizeObserver.js} +17 -38
  434. package/dist/test-utils/mocks/ResizeObserver.js.map +1 -0
  435. package/dist/test-utils/mocks/match-media-implementation.d.ts +42 -0
  436. package/dist/test-utils/mocks/match-media-implementation.js +46 -0
  437. package/dist/test-utils/mocks/match-media-implementation.js.map +1 -0
  438. package/dist/test-utils/mocks/match-media.d.ts +32 -0
  439. package/dist/test-utils/mocks/match-media.js +39 -0
  440. package/dist/test-utils/mocks/match-media.js.map +1 -0
  441. package/dist/test-utils/polyfills/IntersectionObserver.js +1 -1
  442. package/dist/test-utils/polyfills/IntersectionObserver.js.map +1 -1
  443. package/dist/test-utils/polyfills/ResizeObserver.js +1 -1
  444. package/dist/test-utils/polyfills/ResizeObserver.js.map +1 -1
  445. package/dist/test-utils/polyfills/matchMedia.js +1 -1
  446. package/dist/test-utils/polyfills/matchMedia.js.map +1 -1
  447. package/dist/test-utils/queries/index.d.ts +2 -0
  448. package/dist/test-utils/queries/index.js +4 -0
  449. package/dist/test-utils/queries/index.js.map +1 -0
  450. package/dist/test-utils/queries/select.d.ts +67 -0
  451. package/dist/test-utils/queries/select.js +69 -0
  452. package/dist/test-utils/queries/select.js.map +1 -0
  453. package/dist/test-utils/queries/slider.d.ts +126 -0
  454. package/dist/test-utils/queries/slider.js +136 -0
  455. package/dist/test-utils/queries/slider.js.map +1 -0
  456. package/dist/test-utils/queries/types.d.ts +8 -0
  457. package/dist/test-utils/queries/types.js +5 -0
  458. package/dist/test-utils/queries/types.js.map +1 -0
  459. package/dist/test-utils/render.js.map +1 -1
  460. package/dist/test-utils/utils/createFileList.d.ts +4 -0
  461. package/dist/test-utils/utils/createFileList.js +27 -0
  462. package/dist/test-utils/utils/createFileList.js.map +1 -0
  463. package/dist/test-utils/utils/createResizeObserverEntry.d.ts +18 -0
  464. package/dist/test-utils/utils/createResizeObserverEntry.js +33 -0
  465. package/dist/test-utils/utils/createResizeObserverEntry.js.map +1 -0
  466. package/dist/test-utils/vitest/index.d.ts +4 -0
  467. package/dist/test-utils/vitest/index.js +6 -0
  468. package/dist/test-utils/vitest/index.js.map +1 -0
  469. package/dist/test-utils/vitest/match-media.d.ts +32 -0
  470. package/dist/test-utils/vitest/match-media.js +35 -0
  471. package/dist/test-utils/vitest/match-media.js.map +1 -0
  472. package/dist/test-utils/vitest/resize-observer.d.ts +5 -0
  473. package/dist/test-utils/vitest/resize-observer.js +10 -0
  474. package/dist/test-utils/vitest/resize-observer.js.map +1 -0
  475. package/dist/test-utils/vitest/setup.d.ts +1 -0
  476. package/dist/test-utils/vitest/setup.js +14 -0
  477. package/dist/test-utils/vitest/setup.js.map +1 -0
  478. package/dist/test-utils/vitest/timers.d.ts +42 -0
  479. package/dist/test-utils/vitest/timers.js +42 -0
  480. package/dist/test-utils/vitest/timers.js.map +1 -0
  481. package/dist/test-utils/vitest/uploadMenuItemFileInput.d.ts +32 -0
  482. package/dist/test-utils/vitest/uploadMenuItemFileInput.js +39 -0
  483. package/dist/test-utils/vitest/uploadMenuItemFileInput.js.map +1 -0
  484. package/dist/theme/LocalStorageColorSchemeProvider.d.ts +17 -17
  485. package/dist/theme/LocalStorageColorSchemeProvider.js +19 -19
  486. package/dist/theme/LocalStorageColorSchemeProvider.js.map +1 -1
  487. package/dist/theme/ThemeProvider.d.ts +2 -2
  488. package/dist/theme/ThemeProvider.js +4 -4
  489. package/dist/theme/ThemeProvider.js.map +1 -1
  490. package/dist/theme/_theme.scss +0 -4
  491. package/dist/theme/isColorScheme.d.ts +5 -5
  492. package/dist/theme/isColorScheme.js +5 -5
  493. package/dist/theme/isColorScheme.js.map +1 -1
  494. package/dist/theme/types.d.ts +10 -22
  495. package/dist/theme/types.js.map +1 -1
  496. package/dist/theme/useCSSVariables.d.ts +8 -15
  497. package/dist/theme/useCSSVariables.js.map +1 -1
  498. package/dist/theme/useColorScheme.d.ts +15 -13
  499. package/dist/theme/useColorScheme.js +17 -15
  500. package/dist/theme/useColorScheme.js.map +1 -1
  501. package/dist/theme/useColorSchemeMetaTag.d.ts +15 -2
  502. package/dist/theme/useColorSchemeMetaTag.js +13 -0
  503. package/dist/theme/useColorSchemeMetaTag.js.map +1 -1
  504. package/dist/theme/useColorSchemeProvider.d.ts +18 -20
  505. package/dist/theme/useColorSchemeProvider.js +13 -13
  506. package/dist/theme/useColorSchemeProvider.js.map +1 -1
  507. package/dist/theme/{usePrefersDarkScheme.js → usePrefersDarkTheme.js} +1 -1
  508. package/dist/theme/usePrefersDarkTheme.js.map +1 -0
  509. package/dist/tooltip/Tooltip.js.map +1 -1
  510. package/dist/tooltip/TooltipHoverModeProvider.js.map +1 -1
  511. package/dist/tooltip/tooltipStyles.js.map +1 -1
  512. package/dist/tooltip/useTooltip.d.ts +5 -2
  513. package/dist/tooltip/useTooltip.js.map +1 -1
  514. package/dist/tooltip/useTooltipPosition.js.map +1 -1
  515. package/dist/transition/CSSTransition.js.map +1 -1
  516. package/dist/transition/Collapse.js.map +1 -1
  517. package/dist/transition/CrossFade.d.ts +1 -1
  518. package/dist/transition/CrossFade.js +1 -1
  519. package/dist/transition/CrossFade.js.map +1 -1
  520. package/dist/transition/ScaleTransition.js.map +1 -1
  521. package/dist/transition/SkeletonPlaceholder.js.map +1 -1
  522. package/dist/transition/Slide.js.map +1 -1
  523. package/dist/transition/SlideContainer.js.map +1 -1
  524. package/dist/transition/collapseStyles.js.map +1 -1
  525. package/dist/transition/config.d.ts +4 -1
  526. package/dist/transition/config.js.map +1 -1
  527. package/dist/transition/maxWidthTransition.d.ts +6 -0
  528. package/dist/transition/maxWidthTransition.js +3 -1
  529. package/dist/transition/maxWidthTransition.js.map +1 -1
  530. package/dist/transition/skeletonPlaceholderUtils.js.map +1 -1
  531. package/dist/transition/types.d.ts +0 -1
  532. package/dist/transition/types.js.map +1 -1
  533. package/dist/transition/useCSSTransition.d.ts +8 -4
  534. package/dist/transition/useCSSTransition.js +8 -4
  535. package/dist/transition/useCSSTransition.js.map +1 -1
  536. package/dist/transition/useCarousel.js.map +1 -1
  537. package/dist/transition/useCollapseTransition.d.ts +13 -8
  538. package/dist/transition/useCollapseTransition.js +11 -6
  539. package/dist/transition/useCollapseTransition.js.map +1 -1
  540. package/dist/transition/useCrossFadeTransition.js.map +1 -1
  541. package/dist/transition/useMaxWidthTransition.d.ts +9 -0
  542. package/dist/transition/useMaxWidthTransition.js +9 -0
  543. package/dist/transition/useMaxWidthTransition.js.map +1 -1
  544. package/dist/transition/useScaleTransition.d.ts +27 -6
  545. package/dist/transition/useScaleTransition.js +4 -2
  546. package/dist/transition/useScaleTransition.js.map +1 -1
  547. package/dist/transition/useSkeletonPlaceholder.d.ts +16 -0
  548. package/dist/transition/useSkeletonPlaceholder.js +13 -1
  549. package/dist/transition/useSkeletonPlaceholder.js.map +1 -1
  550. package/dist/transition/useSlideTransition.d.ts +12 -16
  551. package/dist/transition/useSlideTransition.js +12 -16
  552. package/dist/transition/useSlideTransition.js.map +1 -1
  553. package/dist/transition/useTransition.js +1 -1
  554. package/dist/transition/useTransition.js.map +1 -1
  555. package/dist/tree/DefaultTreeItemRenderer.js.map +1 -1
  556. package/dist/tree/Tree.js.map +1 -1
  557. package/dist/tree/TreeGroup.js.map +1 -1
  558. package/dist/tree/TreeItem.js.map +1 -1
  559. package/dist/tree/TreeItemExpander.js +1 -1
  560. package/dist/tree/TreeItemExpander.js.map +1 -1
  561. package/dist/tree/TreeProvider.js.map +1 -1
  562. package/dist/tree/_tree.scss +0 -1
  563. package/dist/tree/styles.js.map +1 -1
  564. package/dist/tree/types.js.map +1 -1
  565. package/dist/tree/useTree.js.map +1 -1
  566. package/dist/tree/useTreeExpansion.js.map +1 -1
  567. package/dist/tree/useTreeItems.d.ts +1 -1
  568. package/dist/tree/useTreeItems.js.map +1 -1
  569. package/dist/tree/useTreeMovement.js.map +1 -1
  570. package/dist/tree/useTreeSelection.js.map +1 -1
  571. package/dist/typography/SrOnly.js.map +1 -1
  572. package/dist/typography/TextContainer.js.map +1 -1
  573. package/dist/typography/Typography.js.map +1 -1
  574. package/dist/typography/WritingDirectionProvider.js.map +1 -1
  575. package/dist/typography/textContainerStyles.js.map +1 -1
  576. package/dist/typography/typographyStyles.js.map +1 -1
  577. package/dist/useAsyncFunction.d.ts +20 -0
  578. package/dist/useAsyncFunction.js.map +1 -1
  579. package/dist/useDebouncedFunction.js.map +1 -1
  580. package/dist/useDropzone.d.ts +18 -11
  581. package/dist/useDropzone.js +27 -23
  582. package/dist/useDropzone.js.map +1 -1
  583. package/dist/useElementSize.d.ts +3 -3
  584. package/dist/useElementSize.js +1 -1
  585. package/dist/useElementSize.js.map +1 -1
  586. package/dist/useEnsuredId.d.ts +1 -1
  587. package/dist/useEnsuredId.js +1 -1
  588. package/dist/useEnsuredId.js.map +1 -1
  589. package/dist/useEnsuredRef.d.ts +1 -1
  590. package/dist/useEnsuredRef.js +1 -1
  591. package/dist/useEnsuredRef.js.map +1 -1
  592. package/dist/useEnsuredState.js.map +1 -1
  593. package/dist/useHtmlClassName.d.ts +11 -0
  594. package/dist/useHtmlClassName.js +11 -0
  595. package/dist/useHtmlClassName.js.map +1 -1
  596. package/dist/useIntersectionObserver.d.ts +3 -3
  597. package/dist/useIntersectionObserver.js +2 -2
  598. package/dist/useIntersectionObserver.js.map +1 -1
  599. package/dist/useIsomorphicLayoutEffect.js.map +1 -1
  600. package/dist/useMutationObserver.d.ts +3 -3
  601. package/dist/useMutationObserver.js +4 -4
  602. package/dist/useMutationObserver.js.map +1 -1
  603. package/dist/useOrientation.d.ts +0 -1
  604. package/dist/useOrientation.js +0 -1
  605. package/dist/useOrientation.js.map +1 -1
  606. package/dist/usePageInactive.d.ts +7 -2
  607. package/dist/usePageInactive.js +7 -2
  608. package/dist/usePageInactive.js.map +1 -1
  609. package/dist/useReadonlySet.d.ts +5 -4
  610. package/dist/useReadonlySet.js +4 -3
  611. package/dist/useReadonlySet.js.map +1 -1
  612. package/dist/useResizeListener.d.ts +6 -4
  613. package/dist/useResizeListener.js +6 -4
  614. package/dist/useResizeListener.js.map +1 -1
  615. package/dist/useResizeObserver.d.ts +1 -1
  616. package/dist/useResizeObserver.js +1 -1
  617. package/dist/useResizeObserver.js.map +1 -1
  618. package/dist/useThrottledFunction.js.map +1 -1
  619. package/dist/useToggle.d.ts +3 -3
  620. package/dist/useToggle.js +3 -3
  621. package/dist/useToggle.js.map +1 -1
  622. package/dist/useUnmounted.js.map +1 -1
  623. package/dist/useWindowSize.d.ts +1 -1
  624. package/dist/useWindowSize.js +1 -1
  625. package/dist/useWindowSize.js.map +1 -1
  626. package/dist/utils/RenderRecursively.d.ts +88 -32
  627. package/dist/utils/RenderRecursively.js +88 -32
  628. package/dist/utils/RenderRecursively.js.map +1 -1
  629. package/dist/utils/alphaNumericSort.d.ts +5 -0
  630. package/dist/utils/alphaNumericSort.js +5 -4
  631. package/dist/utils/alphaNumericSort.js.map +1 -1
  632. package/dist/utils/bem.d.ts +49 -6
  633. package/dist/utils/bem.js +5 -14
  634. package/dist/utils/bem.js.map +1 -1
  635. package/dist/utils/getRangeDefaultValue.js.map +1 -1
  636. package/dist/utils/isElementVisible.d.ts +1 -1
  637. package/dist/utils/isElementVisible.js +1 -1
  638. package/dist/utils/isElementVisible.js.map +1 -1
  639. package/dist/utils/loop.d.ts +2 -0
  640. package/dist/utils/loop.js.map +1 -1
  641. package/dist/utils/parseCssLengthUnit.d.ts +1 -1
  642. package/dist/utils/parseCssLengthUnit.js.map +1 -1
  643. package/dist/utils/wait.d.ts +4 -4
  644. package/dist/utils/wait.js +6 -4
  645. package/dist/utils/wait.js.map +1 -1
  646. package/dist/window-splitter/WindowSplitter.js.map +1 -1
  647. package/dist/window-splitter/styles.js.map +1 -1
  648. package/dist/window-splitter/useWindowSplitter.d.ts +4 -1
  649. package/dist/window-splitter/useWindowSplitter.js +4 -1
  650. package/dist/window-splitter/useWindowSplitter.js.map +1 -1
  651. package/package.json +26 -22
  652. package/src/CoreProviders.tsx +8 -6
  653. package/src/NoSsr.tsx +3 -1
  654. package/src/RootHtml.tsx +1 -0
  655. package/src/SsrProvider.tsx +3 -2
  656. package/src/app-bar/AppBar.tsx +3 -2
  657. package/src/app-bar/AppBarTitle.tsx +1 -0
  658. package/src/app-bar/styles.ts +1 -0
  659. package/src/autocomplete/Autocomplete.tsx +2 -0
  660. package/src/autocomplete/AutocompleteChip.tsx +2 -1
  661. package/src/autocomplete/AutocompleteCircularProgress.tsx +1 -0
  662. package/src/autocomplete/AutocompleteClearButton.tsx +3 -1
  663. package/src/autocomplete/AutocompleteDropdownButton.tsx +3 -1
  664. package/src/autocomplete/AutocompleteListboxChildren.tsx +2 -0
  665. package/src/autocomplete/autocompleteStyles.ts +1 -0
  666. package/src/autocomplete/types.ts +1 -0
  667. package/src/autocomplete/useAutocomplete.ts +4 -2
  668. package/src/autocomplete/utils.ts +1 -0
  669. package/src/avatar/Avatar.tsx +3 -2
  670. package/src/avatar/styles.ts +2 -1
  671. package/src/badge/Badge.tsx +3 -2
  672. package/src/badge/styles.ts +1 -0
  673. package/src/box/Box.tsx +5 -2
  674. package/src/box/styles.ts +17 -2
  675. package/src/button/AsyncButton.tsx +3 -1
  676. package/src/button/Button.tsx +4 -2
  677. package/src/button/ButtonUnstyled.tsx +2 -1
  678. package/src/button/FloatingActionButton.tsx +2 -1
  679. package/src/button/TooltippedButton.tsx +4 -2
  680. package/src/button/buttonStyles.ts +2 -1
  681. package/src/card/Card.tsx +10 -23
  682. package/src/card/CardContent.tsx +3 -2
  683. package/src/card/CardFooter.tsx +1 -0
  684. package/src/card/CardHeader.tsx +2 -1
  685. package/src/card/CardSubtitle.tsx +1 -0
  686. package/src/card/CardTitle.tsx +1 -0
  687. package/src/card/ClickableCard.tsx +3 -1
  688. package/src/card/styles.ts +1 -0
  689. package/src/chip/Chip.tsx +4 -2
  690. package/src/chip/styles.ts +1 -0
  691. package/src/dialog/Dialog.tsx +10 -6
  692. package/src/dialog/DialogContent.tsx +3 -2
  693. package/src/dialog/DialogFooter.tsx +3 -2
  694. package/src/dialog/DialogHeader.tsx +2 -1
  695. package/src/dialog/DialogTitle.tsx +2 -1
  696. package/src/dialog/FixedDialog.tsx +14 -9
  697. package/src/dialog/NestedDialogProvider.ts +1 -0
  698. package/src/dialog/styles.ts +5 -4
  699. package/src/divider/Divider.tsx +3 -2
  700. package/src/divider/styles.ts +1 -0
  701. package/src/draggable/useDraggable.ts +25 -12
  702. package/src/draggable/utils.ts +2 -1
  703. package/src/expansion-panel/ExpansionList.tsx +3 -1
  704. package/src/expansion-panel/ExpansionPanel.tsx +3 -1
  705. package/src/expansion-panel/ExpansionPanelHeader.tsx +3 -2
  706. package/src/expansion-panel/expansionPanelStyles.ts +1 -0
  707. package/src/expansion-panel/useExpansionList.ts +2 -0
  708. package/src/expansion-panel/useExpansionPanels.ts +1 -0
  709. package/src/files/FileInput.tsx +4 -2
  710. package/src/files/styles.ts +1 -0
  711. package/src/files/useFileUpload.ts +7 -5
  712. package/src/files/utils.ts +31 -1
  713. package/src/focus/useFocusContainer.ts +10 -10
  714. package/src/form/Checkbox.tsx +2 -1
  715. package/src/form/Fieldset.tsx +2 -1
  716. package/src/form/Form.tsx +2 -1
  717. package/src/form/FormMessage.tsx +1 -0
  718. package/src/form/FormMessageContainer.tsx +2 -1
  719. package/src/form/FormMessageCounter.tsx +1 -0
  720. package/src/form/InputToggle.tsx +3 -1
  721. package/src/form/InputToggleIcon.tsx +4 -3
  722. package/src/form/Label.tsx +1 -0
  723. package/src/form/Legend.tsx +1 -0
  724. package/src/form/Listbox.tsx +1 -0
  725. package/src/form/ListboxProvider.ts +2 -0
  726. package/src/form/MenuItemCheckbox.tsx +5 -3
  727. package/src/form/MenuItemFileInput.tsx +25 -13
  728. package/src/form/MenuItemInputToggle.tsx +3 -1
  729. package/src/form/MenuItemRadio.tsx +4 -2
  730. package/src/form/MenuItemSwitch.tsx +2 -0
  731. package/src/form/MenuItemTextField.tsx +3 -1
  732. package/src/form/NativeSelect.tsx +3 -2
  733. package/src/form/OptGroup.tsx +3 -1
  734. package/src/form/Option.tsx +6 -4
  735. package/src/form/Password.tsx +5 -3
  736. package/src/form/Radio.tsx +2 -0
  737. package/src/form/ResizingTextAreaWrapper.tsx +2 -1
  738. package/src/form/Select.tsx +6 -4
  739. package/src/form/SelectedOption.tsx +1 -0
  740. package/src/form/Slider.tsx +13 -71
  741. package/src/form/SliderContainer.tsx +2 -1
  742. package/src/form/SliderMark.tsx +1 -0
  743. package/src/form/SliderMarkLabel.tsx +2 -1
  744. package/src/form/SliderThumb.tsx +6 -3
  745. package/src/form/SliderTrack.tsx +4 -3
  746. package/src/form/SliderValueMarks.tsx +3 -2
  747. package/src/form/SliderValueTooltip.tsx +2 -0
  748. package/src/form/Switch.tsx +2 -1
  749. package/src/form/SwitchTrack.tsx +2 -1
  750. package/src/form/TextArea.tsx +4 -2
  751. package/src/form/TextField.tsx +2 -1
  752. package/src/form/TextFieldAddon.tsx +1 -0
  753. package/src/form/TextFieldContainer.tsx +3 -1
  754. package/src/form/formMessageContainerStyles.ts +1 -0
  755. package/src/form/formMessageStyles.ts +1 -0
  756. package/src/form/inputToggleStyles.ts +1 -0
  757. package/src/form/menuItemInputToggleStyles.ts +1 -0
  758. package/src/form/nativeSelectStyles.ts +1 -0
  759. package/src/form/optionStyles.ts +1 -0
  760. package/src/form/passwordStyles.ts +1 -0
  761. package/src/form/selectStyles.ts +1 -0
  762. package/src/form/selectUtils.ts +2 -1
  763. package/src/form/sliderUtils.ts +8 -7
  764. package/src/form/switchStyles.ts +1 -0
  765. package/src/form/textAreaStyles.ts +2 -1
  766. package/src/form/textFieldContainerStyles.ts +2 -1
  767. package/src/form/textFieldStyles.ts +1 -0
  768. package/src/form/types.ts +1 -0
  769. package/src/form/useCheckboxGroup.ts +4 -2
  770. package/src/form/useCombobox.ts +4 -2
  771. package/src/form/useEditableCombobox.ts +2 -0
  772. package/src/form/useFormReset.ts +4 -2
  773. package/src/form/useNumberField.ts +3 -1
  774. package/src/form/useRadioGroup.ts +5 -3
  775. package/src/form/useRangeSlider.ts +3 -0
  776. package/src/form/useResizingTextArea.ts +5 -3
  777. package/src/form/useSelectCombobox.ts +2 -1
  778. package/src/form/useSlider.ts +3 -3
  779. package/src/form/useSliderDraggable.ts +71 -0
  780. package/src/form/useTextField.ts +40 -26
  781. package/src/form/useTextFieldContainerAddons.ts +4 -2
  782. package/src/form/validation.ts +2 -0
  783. package/src/hoverMode/useHoverMode.ts +76 -4
  784. package/src/hoverMode/useHoverModeProvider.ts +24 -12
  785. package/src/icon/FontIcon.tsx +3 -2
  786. package/src/icon/IconRotator.tsx +5 -4
  787. package/src/icon/MaterialIcon.tsx +3 -2
  788. package/src/icon/MaterialSymbol.tsx +4 -3
  789. package/src/icon/SVGIcon.tsx +3 -2
  790. package/src/icon/TextIconSpacing.tsx +2 -2
  791. package/src/icon/{iconConfig.tsx → config.tsx} +1 -0
  792. package/src/icon/materialConfig.ts +1 -0
  793. package/src/icon/styles.ts +2 -1
  794. package/src/interaction/Ripple.tsx +2 -0
  795. package/src/interaction/RippleContainer.tsx +1 -0
  796. package/src/interaction/UserInteractionModeProvider.tsx +3 -2
  797. package/src/interaction/useElementInteraction.tsx +39 -36
  798. package/src/interaction/useHigherContrastChildren.tsx +11 -8
  799. package/src/interaction/utils.ts +1 -0
  800. package/src/layout/LayoutAppBar.tsx +2 -0
  801. package/src/layout/LayoutNav.tsx +4 -2
  802. package/src/layout/LayoutWindowSplitter.tsx +4 -2
  803. package/src/layout/Main.tsx +4 -2
  804. package/src/layout/layoutNavStyles.ts +1 -0
  805. package/src/layout/layoutWindowSplitterStyles.ts +1 -0
  806. package/src/layout/mainStyles.ts +1 -0
  807. package/src/layout/useExpandableLayout.ts +17 -17
  808. package/src/layout/useHorizontalLayoutTransition.ts +2 -0
  809. package/src/layout/useLayoutAppBarHeight.ts +3 -1
  810. package/src/layout/useLayoutTree.ts +6 -3
  811. package/src/layout/useLayoutWindowSplitter.ts +2 -1
  812. package/src/layout/useMainTabIndex.ts +1 -0
  813. package/src/layout/useResizableLayout.ts +14 -17
  814. package/src/layout/useTemporaryLayout.ts +18 -11
  815. package/src/link/Link.tsx +3 -2
  816. package/src/link/SkipToMainContent.tsx +4 -2
  817. package/src/link/styles.ts +1 -0
  818. package/src/list/List.tsx +2 -1
  819. package/src/list/ListItem.tsx +4 -2
  820. package/src/list/ListItemAddon.tsx +2 -1
  821. package/src/list/ListItemChildren.tsx +1 -0
  822. package/src/list/ListItemLink.tsx +4 -2
  823. package/src/list/ListItemText.tsx +2 -1
  824. package/src/list/ListSubheader.tsx +2 -1
  825. package/src/list/listItemStyles.ts +1 -0
  826. package/src/list/listStyles.ts +1 -0
  827. package/src/list/types.ts +1 -0
  828. package/src/media-queries/AppSizeProvider.tsx +7 -5
  829. package/src/media-queries/useMediaQuery.ts +5 -3
  830. package/src/menu/DropdownMenu.tsx +5 -3
  831. package/src/menu/Menu.tsx +8 -6
  832. package/src/menu/MenuBar.tsx +2 -0
  833. package/src/menu/MenuButton.tsx +3 -1
  834. package/src/menu/MenuConfigurationProvider.tsx +4 -2
  835. package/src/menu/MenuItem.tsx +2 -0
  836. package/src/menu/MenuItemButton.tsx +3 -1
  837. package/src/menu/MenuItemCircularProgress.tsx +2 -1
  838. package/src/menu/MenuItemGroup.tsx +3 -1
  839. package/src/menu/MenuItemSeparator.tsx +3 -1
  840. package/src/menu/MenuSheet.tsx +3 -1
  841. package/src/menu/MenuVisibilityProvider.tsx +4 -2
  842. package/src/menu/MenuWidget.tsx +3 -1
  843. package/src/menu/MenuWidgetKeyboardProvider.tsx +2 -0
  844. package/src/menu/useContextMenu.ts +2 -0
  845. package/src/menu/useMenuBarProvider.ts +2 -0
  846. package/src/movement/types.ts +1 -0
  847. package/src/movement/useKeyboardMovementProvider.ts +2 -0
  848. package/src/movement/utils.ts +1 -0
  849. package/src/navigation/CollapsibleNavGroup.tsx +3 -1
  850. package/src/navigation/DefaultNavigationRenderer.tsx +1 -0
  851. package/src/navigation/NavGroup.tsx +2 -1
  852. package/src/navigation/NavItem.tsx +2 -1
  853. package/src/navigation/NavItemButton.tsx +4 -2
  854. package/src/navigation/NavItemLink.tsx +4 -2
  855. package/src/navigation/NavSubheader.tsx +2 -1
  856. package/src/navigation/Navigation.tsx +3 -2
  857. package/src/navigation/navGroupStyles.ts +1 -0
  858. package/src/navigation/navItemStyles.ts +1 -0
  859. package/src/navigation/types.ts +1 -0
  860. package/src/navigation/useActiveHeadingId.ts +8 -6
  861. package/src/navigation/useNavigationExpansion.ts +2 -0
  862. package/src/navigation/useTableOfContentsHeadings.ts +150 -0
  863. package/src/objectFit.ts +1 -0
  864. package/src/overlay/Overlay.tsx +4 -2
  865. package/src/overlay/overlayStyles.ts +10 -10
  866. package/src/portal/Portal.tsx +1 -0
  867. package/src/portal/PortalContainerProvider.tsx +4 -3
  868. package/src/positioning/createHorizontalPosition.ts +1 -1
  869. package/src/positioning/createVerticalPosition.ts +1 -1
  870. package/src/positioning/useFixedPositioning.ts +17 -12
  871. package/src/progress/CircularProgress.tsx +3 -2
  872. package/src/progress/LinearProgress.tsx +3 -2
  873. package/src/responsive-item/ResponsiveItem.tsx +3 -2
  874. package/src/responsive-item/ResponsiveItemOverlay.tsx +3 -2
  875. package/src/responsive-item/responsiveItemOverlayStyles.ts +1 -0
  876. package/src/responsive-item/responsiveItemStyles.ts +1 -0
  877. package/src/scroll/ScrollLock.tsx +1 -0
  878. package/src/scroll/useScrollLock.ts +3 -1
  879. package/src/searching/fuzzy.ts +1 -1
  880. package/src/searching/useFuzzyMatch.ts +2 -0
  881. package/src/segmented-button/SegmentedButton.tsx +4 -2
  882. package/src/segmented-button/SegmentedButtonContainer.tsx +3 -2
  883. package/src/segmented-button/segmentedButtonContainerStyles.ts +1 -0
  884. package/src/segmented-button/segmentedButtonStyles.ts +1 -0
  885. package/src/sheet/Sheet.tsx +4 -2
  886. package/src/sheet/styles.ts +3 -3
  887. package/src/snackbar/DefaultToastRenderer.tsx +5 -3
  888. package/src/snackbar/Snackbar.tsx +4 -2
  889. package/src/snackbar/Toast.tsx +4 -2
  890. package/src/snackbar/ToastActionButton.tsx +2 -0
  891. package/src/snackbar/ToastCloseButton.tsx +3 -1
  892. package/src/snackbar/ToastContent.tsx +3 -1
  893. package/src/snackbar/ToastManager.tsx +1 -0
  894. package/src/snackbar/ToastManagerProvider.tsx +4 -3
  895. package/src/snackbar/snackbarStyles.ts +1 -0
  896. package/src/snackbar/toastContentStyles.ts +1 -0
  897. package/src/snackbar/toastStyles.ts +2 -1
  898. package/src/snackbar/useCurrentToastActions.ts +1 -0
  899. package/src/storage/internalUtils.ts +43 -0
  900. package/src/storage/types.ts +88 -0
  901. package/src/storage/useStorage.ts +277 -0
  902. package/src/storage/utils.ts +156 -0
  903. package/src/suspense/CircularProgressSuspense.tsx +2 -1
  904. package/src/suspense/NullSuspense.tsx +1 -1
  905. package/src/table/StickyTableSection.tsx +3 -1
  906. package/src/table/Table.tsx +3 -1
  907. package/src/table/TableBody.tsx +3 -1
  908. package/src/table/TableCell.tsx +4 -2
  909. package/src/table/TableCellContent.tsx +2 -1
  910. package/src/table/TableCheckbox.tsx +3 -1
  911. package/src/table/TableConfigurationProvider.tsx +2 -0
  912. package/src/table/TableContainer.tsx +4 -2
  913. package/src/table/TableContainerProvider.tsx +2 -1
  914. package/src/table/TableFooter.tsx +3 -1
  915. package/src/table/TableHeader.tsx +3 -1
  916. package/src/table/TableRadio.tsx +3 -1
  917. package/src/table/TableRow.tsx +3 -1
  918. package/src/table/tableCellStyles.ts +1 -0
  919. package/src/table/tableFooterStyles.ts +1 -0
  920. package/src/table/tableHeaderStyles.ts +1 -0
  921. package/src/table/tableRowStyles.ts +1 -0
  922. package/src/table/tableStyles.ts +1 -0
  923. package/src/table/useStickyTableSection.tsx +4 -2
  924. package/src/table/useTableSectionConfig.ts +2 -0
  925. package/src/tabs/SimpleTabPanel.tsx +35 -0
  926. package/src/tabs/SimpleTabPanels.tsx +28 -0
  927. package/src/tabs/Tab.tsx +4 -3
  928. package/src/tabs/TabList.tsx +38 -51
  929. package/src/tabs/TabListScrollButton.tsx +6 -3
  930. package/src/tabs/tabIndicatorStyles.ts +1 -0
  931. package/src/tabs/tabListScrollButtonStyles.ts +1 -0
  932. package/src/tabs/tabListStyles.ts +22 -2
  933. package/src/tabs/tabStyles.ts +8 -0
  934. package/src/tabs/types.ts +30 -0
  935. package/src/tabs/useMaxTabPanelHeight.ts +138 -0
  936. package/src/tabs/useTabList.ts +45 -8
  937. package/src/tabs/useTabs.ts +64 -79
  938. package/src/tabs/utils.ts +9 -0
  939. package/src/test-utils/drag.ts +10 -2
  940. package/src/test-utils/index.ts +6 -5
  941. package/src/test-utils/jest-globals/index.ts +4 -0
  942. package/src/test-utils/jest-globals/match-media.ts +41 -0
  943. package/src/test-utils/jest-globals/resize-observer.ts +11 -0
  944. package/src/test-utils/{jest-setup.ts → jest-globals/setup.ts} +4 -2
  945. package/src/test-utils/{timers.ts → jest-globals/timers.ts} +2 -2
  946. package/src/test-utils/jest-globals/uploadMenuItemFileInput.ts +52 -0
  947. package/src/test-utils/{ResizeObserver.ts → mocks/ResizeObserver.ts} +25 -59
  948. package/src/test-utils/mocks/match-media-implementation.ts +111 -0
  949. package/src/test-utils/mocks/match-media.ts +63 -0
  950. package/src/test-utils/polyfills/IntersectionObserver.ts +1 -1
  951. package/src/test-utils/polyfills/ResizeObserver.ts +1 -1
  952. package/src/test-utils/polyfills/matchMedia.ts +1 -1
  953. package/src/test-utils/queries/index.ts +2 -0
  954. package/src/test-utils/queries/select.ts +116 -0
  955. package/src/test-utils/queries/slider.ts +247 -0
  956. package/src/test-utils/queries/types.ts +13 -0
  957. package/src/test-utils/render.tsx +2 -1
  958. package/src/test-utils/utils/createFileList.ts +27 -0
  959. package/src/test-utils/utils/createResizeObserverEntry.ts +47 -0
  960. package/src/test-utils/vitest/index.ts +4 -0
  961. package/src/test-utils/vitest/match-media.ts +41 -0
  962. package/src/test-utils/vitest/resize-observer.ts +11 -0
  963. package/src/test-utils/vitest/setup.ts +15 -0
  964. package/src/test-utils/vitest/timers.ts +48 -0
  965. package/src/test-utils/vitest/uploadMenuItemFileInput.ts +52 -0
  966. package/src/theme/LocalStorageColorSchemeProvider.tsx +30 -30
  967. package/src/theme/ThemeProvider.tsx +9 -7
  968. package/src/theme/isColorScheme.ts +8 -6
  969. package/src/theme/types.ts +11 -23
  970. package/src/theme/useCSSVariables.ts +10 -15
  971. package/src/theme/useColorScheme.ts +19 -15
  972. package/src/theme/useColorSchemeMetaTag.ts +17 -2
  973. package/src/theme/useColorSchemeProvider.ts +36 -37
  974. package/src/theme/{usePrefersDarkScheme.ts → usePrefersDarkTheme.ts} +1 -0
  975. package/src/tooltip/Tooltip.tsx +3 -1
  976. package/src/tooltip/TooltipHoverModeProvider.tsx +6 -4
  977. package/src/tooltip/tooltipStyles.ts +2 -1
  978. package/src/tooltip/useTooltip.ts +15 -10
  979. package/src/tooltip/useTooltipPosition.ts +2 -0
  980. package/src/transition/CSSTransition.tsx +3 -1
  981. package/src/transition/Collapse.tsx +4 -2
  982. package/src/transition/CrossFade.tsx +5 -3
  983. package/src/transition/ScaleTransition.tsx +4 -2
  984. package/src/transition/SkeletonPlaceholder.tsx +4 -2
  985. package/src/transition/Slide.tsx +3 -1
  986. package/src/transition/SlideContainer.tsx +2 -1
  987. package/src/transition/collapseStyles.ts +1 -0
  988. package/src/transition/config.ts +4 -1
  989. package/src/transition/maxWidthTransition.ts +7 -0
  990. package/src/transition/skeletonPlaceholderUtils.ts +1 -0
  991. package/src/transition/types.ts +0 -2
  992. package/src/transition/useCSSTransition.ts +10 -4
  993. package/src/transition/useCarousel.ts +2 -0
  994. package/src/transition/useCollapseTransition.ts +20 -14
  995. package/src/transition/useCrossFadeTransition.ts +1 -0
  996. package/src/transition/useMaxWidthTransition.ts +11 -0
  997. package/src/transition/useScaleTransition.ts +12 -10
  998. package/src/transition/useSkeletonPlaceholder.ts +20 -2
  999. package/src/transition/useSlideTransition.ts +14 -16
  1000. package/src/transition/useTransition.ts +3 -1
  1001. package/src/tree/DefaultTreeItemRenderer.tsx +1 -0
  1002. package/src/tree/Tree.tsx +3 -1
  1003. package/src/tree/TreeGroup.tsx +3 -1
  1004. package/src/tree/TreeItem.tsx +4 -2
  1005. package/src/tree/TreeItemExpander.tsx +5 -3
  1006. package/src/tree/TreeProvider.tsx +4 -2
  1007. package/src/tree/styles.ts +1 -0
  1008. package/src/tree/types.ts +1 -0
  1009. package/src/tree/useTree.ts +3 -2
  1010. package/src/tree/useTreeExpansion.ts +1 -0
  1011. package/src/tree/useTreeItems.ts +4 -3
  1012. package/src/tree/useTreeMovement.ts +2 -0
  1013. package/src/tree/useTreeSelection.ts +1 -0
  1014. package/src/typography/SrOnly.tsx +2 -1
  1015. package/src/typography/TextContainer.tsx +3 -2
  1016. package/src/typography/Typography.tsx +3 -2
  1017. package/src/typography/WritingDirectionProvider.tsx +4 -2
  1018. package/src/typography/textContainerStyles.ts +1 -0
  1019. package/src/typography/typographyStyles.ts +2 -1
  1020. package/src/useAsyncFunction.ts +23 -0
  1021. package/src/useDebouncedFunction.ts +2 -0
  1022. package/src/useDropzone.ts +50 -34
  1023. package/src/useElementSize.ts +7 -5
  1024. package/src/useEnsuredId.ts +1 -1
  1025. package/src/useEnsuredRef.ts +3 -1
  1026. package/src/useEnsuredState.ts +1 -0
  1027. package/src/useHtmlClassName.ts +12 -0
  1028. package/src/useIntersectionObserver.ts +5 -3
  1029. package/src/useIsomorphicLayoutEffect.ts +1 -0
  1030. package/src/useMutationObserver.ts +7 -6
  1031. package/src/useOrientation.ts +1 -1
  1032. package/src/usePageInactive.ts +8 -2
  1033. package/src/useReadonlySet.ts +7 -4
  1034. package/src/useResizeListener.ts +8 -4
  1035. package/src/useResizeObserver.ts +4 -3
  1036. package/src/useThrottledFunction.ts +2 -0
  1037. package/src/useToggle.ts +5 -3
  1038. package/src/useUnmounted.ts +2 -0
  1039. package/src/useWindowSize.ts +4 -2
  1040. package/src/utils/RenderRecursively.tsx +88 -32
  1041. package/src/utils/alphaNumericSort.ts +10 -4
  1042. package/src/utils/bem.ts +58 -26
  1043. package/src/utils/getRangeDefaultValue.ts +1 -1
  1044. package/src/utils/isElementVisible.ts +1 -1
  1045. package/src/utils/loop.ts +2 -0
  1046. package/src/utils/parseCssLengthUnit.ts +1 -1
  1047. package/src/utils/wait.ts +6 -5
  1048. package/src/window-splitter/WindowSplitter.tsx +2 -2
  1049. package/src/window-splitter/styles.ts +1 -0
  1050. package/src/window-splitter/useWindowSplitter.ts +7 -2
  1051. package/dist/icon/iconConfig.js.map +0 -1
  1052. package/dist/test-utils/IntersectionObserver.js.map +0 -1
  1053. package/dist/test-utils/ResizeObserver.js.map +0 -1
  1054. package/dist/test-utils/jest-setup.d.ts +0 -1
  1055. package/dist/test-utils/jest-setup.js.map +0 -1
  1056. package/dist/test-utils/matchMedia.d.ts +0 -97
  1057. package/dist/test-utils/matchMedia.js +0 -112
  1058. package/dist/test-utils/matchMedia.js.map +0 -1
  1059. package/dist/test-utils/timers.js.map +0 -1
  1060. package/dist/theme/usePrefersDarkScheme.js.map +0 -1
  1061. package/dist/useLocalStorage.d.ts +0 -368
  1062. package/dist/useLocalStorage.js +0 -377
  1063. package/dist/useLocalStorage.js.map +0 -1
  1064. package/src/test-utils/README.md +0 -150
  1065. package/src/test-utils/matchMedia.ts +0 -194
  1066. package/src/useLocalStorage.ts +0 -584
  1067. /package/dist/icon/{iconConfig.d.ts → config.d.ts} +0 -0
  1068. /package/dist/test-utils/{IntersectionObserver.d.ts → mocks/IntersectionObserver.d.ts} +0 -0
  1069. /package/dist/test-utils/{IntersectionObserver.js → mocks/IntersectionObserver.js} +0 -0
  1070. /package/dist/theme/{usePrefersDarkScheme.d.ts → usePrefersDarkTheme.d.ts} +0 -0
  1071. /package/src/test-utils/{IntersectionObserver.ts → mocks/IntersectionObserver.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/Password.tsx"],"sourcesContent":["\"use client\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport { Button, type ButtonProps } from \"../button/Button.js\";\nimport { getIcon } from \"../icon/iconConfig.js\";\nimport { type PropsWithRef } from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useToggle } from \"../useToggle.js\";\nimport {\n password,\n passwordInput,\n passwordInputToggle,\n} from \"./passwordStyles.js\";\nimport { TextField, type TextFieldProps } from \"./TextField.js\";\n\n/**\n * @example Simple Example\n * ```tsx\n * const getVisibilityIcon: GetPasswordVisibilityIcon = (isPasswordVisible) => {\n * if (isPasswordVisible) {\n * return <SecurityIcon />;\n * }\n *\n * return <RemoveRedEyeIcon />;\n * };\n * ```\n *\n * @param isPasswordVisible - `true` when the password is visible and in plain\n * text\n * @returns a custom icon to use for the password visibility toggle.\n */\nexport type GetPasswordVisibilityIcon = (\n isPasswordVisible: boolean\n) => ReactNode;\n\n/**\n * @example Simple Example\n * ```tsx\n * const visibilityIcon: ConfigurableVisibilityIcon = {\n * visible: <SecurityIcon />,\n * invisible: <RemoveRedEyeIcon />,\n * };\n * ```\n */\nexport interface ConfigurableVisibilityIcon {\n /**\n * The icon to display while the password is currently visible as plain text.\n */\n visible: ReactNode;\n\n /**\n * The icon to display while the password is currently invisible as the\n * password input.\n */\n invisible: ReactNode;\n}\n\nexport interface PasswordProps\n extends Omit<TextFieldProps, \"type\" | \"rightAddon\"> {\n /**\n * @defaultValue `\"password\"`\n * @since 6.0.0 Defaults to `\"password\"`\n */\n name?: string;\n\n /**\n * @example Configurable Visibility Icon Object\n * ```tsx\n * <Password\n * {...props}\n * visibilityIcon={{\n * visible: <SecurityIcon />,\n * invisible: <RemoveRedEyeIcon />,\n * }}\n * />\n * ```\n *\n * @example Get Password Visibility Icon Function\n * ```tsx\n * <Password\n * {...props}\n * visibilityIcon={(isPasswordVisible) => {\n * if (isPasswordVisible) {\n * return <SecurityIcon />;\n * }\n *\n * return <RemoveRedEyeIcon />;\n * }}\n * />\n * ```\n *\n * @example Custom Icon\n * ```tsx\n * <Password\n * {...props}\n * visibilityIcon={<SomeCustomComponent />}\n * />\n * ```\n */\n visibilityIcon?:\n | ConfigurableVisibilityIcon\n | GetPasswordVisibilityIcon\n | ReactNode;\n\n /**\n * The `aria-label` to use for the password visibility icon button.\n *\n * @defaultValue `\"Show password\"`\n */\n visibilityLabel?: string;\n\n /**\n * Any props that should be passed to the password visibility icon button. If\n * `id`, `buttonType`, `aria-label`, `aria-pressed`, or `children` are\n * provided here, they will override the default implementation.\n */\n visibilityProps?: PropsWithRef<ButtonProps, HTMLButtonElement>;\n}\n\n/**\n * **Client Component**\n *\n * @example Simple Example\n * ```tsx\n * import { Password } from \"@react-md/core\";\n *\n * function Example(): ReactElement {\n * return (\n * <Password\n * label=\"Password\"\n * name=\"password\"\n * required\n * />\n * );\n * }\n * ```\n */\nexport const Password = forwardRef<HTMLInputElement, PasswordProps>(\n function Password(props, ref) {\n const {\n id: propId,\n name = \"password\",\n className,\n inputClassName,\n visibilityIcon: propVisibilityIcon,\n visibilityLabel = \"Show password\",\n visibilityProps,\n ...remaining\n } = props;\n const { toggled: isPasswordVisible, toggle } = useToggle(false);\n\n let currentVisibilityIcon: ReactNode;\n if (\n propVisibilityIcon &&\n typeof propVisibilityIcon === \"object\" &&\n \"visible\" in propVisibilityIcon\n ) {\n currentVisibilityIcon = isPasswordVisible\n ? propVisibilityIcon.visible\n : propVisibilityIcon.invisible;\n } else if (typeof propVisibilityIcon === \"function\") {\n currentVisibilityIcon = propVisibilityIcon(isPasswordVisible);\n } else {\n currentVisibilityIcon = propVisibilityIcon;\n }\n\n const id = useEnsuredId(propId, \"password\");\n const visibilityIcon = getIcon(\"password\", currentVisibilityIcon);\n\n return (\n <TextField\n {...remaining}\n ref={ref}\n name={name}\n type={isPasswordVisible ? \"text\" : \"password\"}\n className={password({ className })}\n inputClassName={passwordInput({ className: inputClassName })}\n rightAddon={\n <Button\n id={`${id}-toggle`}\n buttonType=\"icon\"\n aria-label={visibilityLabel}\n aria-pressed={isPasswordVisible}\n // allow all props except the onClick, className, and aria-pressed to\n // be overridden. onClick can only stop default behavior with\n // `event.stopPropagation()`\n {...visibilityProps}\n className={passwordInputToggle({\n className: visibilityProps?.className,\n })}\n onClick={(event) => {\n visibilityProps?.onClick?.(event);\n if (event.isPropagationStopped()) {\n return;\n }\n\n toggle();\n }}\n >\n {visibilityProps?.children ?? visibilityIcon}\n </Button>\n }\n disableRightAddonStyles\n />\n );\n }\n);\n"],"names":["forwardRef","Button","getIcon","useEnsuredId","useToggle","password","passwordInput","passwordInputToggle","TextField","Password","props","ref","id","propId","name","className","inputClassName","visibilityIcon","propVisibilityIcon","visibilityLabel","visibilityProps","remaining","toggled","isPasswordVisible","toggle","currentVisibilityIcon","visible","invisible","type","rightAddon","buttonType","aria-label","aria-pressed","onClick","event","isPropagationStopped","children","disableRightAddonStyles"],"mappings":"AAAA;;AACA,SAASA,UAAU,QAAwB,QAAQ;AACnD,SAASC,MAAM,QAA0B,sBAAsB;AAC/D,SAASC,OAAO,QAAQ,wBAAwB;AAEhD,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SACEC,QAAQ,EACRC,aAAa,EACbC,mBAAmB,QACd,sBAAsB;AAC7B,SAASC,SAAS,QAA6B,iBAAiB;AA0GhE;;;;;;;;;;;;;;;;;CAiBC,GACD,OAAO,MAAMC,yBAAWT,WACtB,SAASS,SAASC,KAAK,EAAEC,GAAG;IAC1B,MAAM,EACJC,IAAIC,MAAM,EACVC,OAAO,UAAU,EACjBC,SAAS,EACTC,cAAc,EACdC,gBAAgBC,kBAAkB,EAClCC,kBAAkB,eAAe,EACjCC,eAAe,EACf,GAAGC,WACJ,GAAGX;IACJ,MAAM,EAAEY,SAASC,iBAAiB,EAAEC,MAAM,EAAE,GAAGpB,UAAU;IAEzD,IAAIqB;IACJ,IACEP,sBACA,OAAOA,uBAAuB,YAC9B,aAAaA,oBACb;QACAO,wBAAwBF,oBACpBL,mBAAmBQ,OAAO,GAC1BR,mBAAmBS,SAAS;IAClC,OAAO,IAAI,OAAOT,uBAAuB,YAAY;QACnDO,wBAAwBP,mBAAmBK;IAC7C,OAAO;QACLE,wBAAwBP;IAC1B;IAEA,MAAMN,KAAKT,aAAaU,QAAQ;IAChC,MAAMI,iBAAiBf,QAAQ,YAAYuB;IAE3C,qBACE,KAACjB;QACE,GAAGa,SAAS;QACbV,KAAKA;QACLG,MAAMA;QACNc,MAAML,oBAAoB,SAAS;QACnCR,WAAWV,SAAS;YAAEU;QAAU;QAChCC,gBAAgBV,cAAc;YAAES,WAAWC;QAAe;QAC1Da,0BACE,KAAC5B;YACCW,IAAI,GAAGA,GAAG,OAAO,CAAC;YAClBkB,YAAW;YACXC,cAAYZ;YACZa,gBAAcT;YAIb,GAAGH,eAAe;YACnBL,WAAWR,oBAAoB;gBAC7BQ,WAAWK,iBAAiBL;YAC9B;YACAkB,SAAS,CAACC;gBACRd,iBAAiBa,UAAUC;gBAC3B,IAAIA,MAAMC,oBAAoB,IAAI;oBAChC;gBACF;gBAEAX;YACF;sBAECJ,iBAAiBgB,YAAYnB;;QAGlCoB,uBAAuB;;AAG7B,GACA"}
1
+ {"version":3,"sources":["../../src/form/Password.tsx"],"sourcesContent":["\"use client\";\n\nimport { type ReactNode, forwardRef } from \"react\";\n\nimport { Button, type ButtonProps } from \"../button/Button.js\";\nimport { getIcon } from \"../icon/config.js\";\nimport { type PropsWithRef } from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useToggle } from \"../useToggle.js\";\nimport { TextField, type TextFieldProps } from \"./TextField.js\";\nimport {\n password,\n passwordInput,\n passwordInputToggle,\n} from \"./passwordStyles.js\";\n\n/**\n * @example Simple Example\n * ```tsx\n * const getVisibilityIcon: GetPasswordVisibilityIcon = (isPasswordVisible) => {\n * if (isPasswordVisible) {\n * return <SecurityIcon />;\n * }\n *\n * return <RemoveRedEyeIcon />;\n * };\n * ```\n *\n * @param isPasswordVisible - `true` when the password is visible and in plain\n * text\n * @returns a custom icon to use for the password visibility toggle.\n */\nexport type GetPasswordVisibilityIcon = (\n isPasswordVisible: boolean\n) => ReactNode;\n\n/**\n * @example Simple Example\n * ```tsx\n * const visibilityIcon: ConfigurableVisibilityIcon = {\n * visible: <SecurityIcon />,\n * invisible: <RemoveRedEyeIcon />,\n * };\n * ```\n */\nexport interface ConfigurableVisibilityIcon {\n /**\n * The icon to display while the password is currently visible as plain text.\n */\n visible: ReactNode;\n\n /**\n * The icon to display while the password is currently invisible as the\n * password input.\n */\n invisible: ReactNode;\n}\n\nexport interface PasswordProps\n extends Omit<TextFieldProps, \"type\" | \"rightAddon\"> {\n /**\n * @defaultValue `\"password\"`\n * @since 6.0.0 Defaults to `\"password\"`\n */\n name?: string;\n\n /**\n * @example Configurable Visibility Icon Object\n * ```tsx\n * <Password\n * {...props}\n * visibilityIcon={{\n * visible: <SecurityIcon />,\n * invisible: <RemoveRedEyeIcon />,\n * }}\n * />\n * ```\n *\n * @example Get Password Visibility Icon Function\n * ```tsx\n * <Password\n * {...props}\n * visibilityIcon={(isPasswordVisible) => {\n * if (isPasswordVisible) {\n * return <SecurityIcon />;\n * }\n *\n * return <RemoveRedEyeIcon />;\n * }}\n * />\n * ```\n *\n * @example Custom Icon\n * ```tsx\n * <Password\n * {...props}\n * visibilityIcon={<SomeCustomComponent />}\n * />\n * ```\n */\n visibilityIcon?:\n | ConfigurableVisibilityIcon\n | GetPasswordVisibilityIcon\n | ReactNode;\n\n /**\n * The `aria-label` to use for the password visibility icon button.\n *\n * @defaultValue `\"Show password\"`\n */\n visibilityLabel?: string;\n\n /**\n * Any props that should be passed to the password visibility icon button. If\n * `id`, `buttonType`, `aria-label`, `aria-pressed`, or `children` are\n * provided here, they will override the default implementation.\n */\n visibilityProps?: PropsWithRef<ButtonProps, HTMLButtonElement>;\n}\n\n/**\n * **Client Component**\n *\n * @example Simple Example\n * ```tsx\n * import { Password } from \"@react-md/core\";\n *\n * function Example(): ReactElement {\n * return (\n * <Password\n * label=\"Password\"\n * name=\"password\"\n * required\n * />\n * );\n * }\n * ```\n */\nexport const Password = forwardRef<HTMLInputElement, PasswordProps>(\n function Password(props, ref) {\n const {\n id: propId,\n name = \"password\",\n className,\n inputClassName,\n visibilityIcon: propVisibilityIcon,\n visibilityLabel = \"Show password\",\n visibilityProps,\n ...remaining\n } = props;\n const { toggled: isPasswordVisible, toggle } = useToggle(false);\n\n let currentVisibilityIcon: ReactNode;\n if (\n propVisibilityIcon &&\n typeof propVisibilityIcon === \"object\" &&\n \"visible\" in propVisibilityIcon\n ) {\n currentVisibilityIcon = isPasswordVisible\n ? propVisibilityIcon.visible\n : propVisibilityIcon.invisible;\n } else if (typeof propVisibilityIcon === \"function\") {\n currentVisibilityIcon = propVisibilityIcon(isPasswordVisible);\n } else {\n currentVisibilityIcon = propVisibilityIcon;\n }\n\n const id = useEnsuredId(propId, \"password\");\n const visibilityIcon = getIcon(\"password\", currentVisibilityIcon);\n\n return (\n <TextField\n {...remaining}\n ref={ref}\n name={name}\n type={isPasswordVisible ? \"text\" : \"password\"}\n className={password({ className })}\n inputClassName={passwordInput({ className: inputClassName })}\n rightAddon={\n <Button\n id={`${id}-toggle`}\n buttonType=\"icon\"\n aria-label={visibilityLabel}\n aria-pressed={isPasswordVisible}\n // allow all props except the onClick, className, and aria-pressed to\n // be overridden. onClick can only stop default behavior with\n // `event.stopPropagation()`\n {...visibilityProps}\n className={passwordInputToggle({\n className: visibilityProps?.className,\n })}\n onClick={(event) => {\n visibilityProps?.onClick?.(event);\n if (event.isPropagationStopped()) {\n return;\n }\n\n toggle();\n }}\n >\n {visibilityProps?.children ?? visibilityIcon}\n </Button>\n }\n disableRightAddonStyles\n />\n );\n }\n);\n"],"names":["forwardRef","Button","getIcon","useEnsuredId","useToggle","TextField","password","passwordInput","passwordInputToggle","Password","props","ref","id","propId","name","className","inputClassName","visibilityIcon","propVisibilityIcon","visibilityLabel","visibilityProps","remaining","toggled","isPasswordVisible","toggle","currentVisibilityIcon","visible","invisible","type","rightAddon","buttonType","aria-label","aria-pressed","onClick","event","isPropagationStopped","children","disableRightAddonStyles"],"mappings":"AAAA;;AAEA,SAAyBA,UAAU,QAAQ,QAAQ;AAEnD,SAASC,MAAM,QAA0B,sBAAsB;AAC/D,SAASC,OAAO,QAAQ,oBAAoB;AAE5C,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,SAAS,QAA6B,iBAAiB;AAChE,SACEC,QAAQ,EACRC,aAAa,EACbC,mBAAmB,QACd,sBAAsB;AA0G7B;;;;;;;;;;;;;;;;;CAiBC,GACD,OAAO,MAAMC,yBAAWT,WACtB,SAASS,SAASC,KAAK,EAAEC,GAAG;IAC1B,MAAM,EACJC,IAAIC,MAAM,EACVC,OAAO,UAAU,EACjBC,SAAS,EACTC,cAAc,EACdC,gBAAgBC,kBAAkB,EAClCC,kBAAkB,eAAe,EACjCC,eAAe,EACf,GAAGC,WACJ,GAAGX;IACJ,MAAM,EAAEY,SAASC,iBAAiB,EAAEC,MAAM,EAAE,GAAGpB,UAAU;IAEzD,IAAIqB;IACJ,IACEP,sBACA,OAAOA,uBAAuB,YAC9B,aAAaA,oBACb;QACAO,wBAAwBF,oBACpBL,mBAAmBQ,OAAO,GAC1BR,mBAAmBS,SAAS;IAClC,OAAO,IAAI,OAAOT,uBAAuB,YAAY;QACnDO,wBAAwBP,mBAAmBK;IAC7C,OAAO;QACLE,wBAAwBP;IAC1B;IAEA,MAAMN,KAAKT,aAAaU,QAAQ;IAChC,MAAMI,iBAAiBf,QAAQ,YAAYuB;IAE3C,qBACE,KAACpB;QACE,GAAGgB,SAAS;QACbV,KAAKA;QACLG,MAAMA;QACNc,MAAML,oBAAoB,SAAS;QACnCR,WAAWT,SAAS;YAAES;QAAU;QAChCC,gBAAgBT,cAAc;YAAEQ,WAAWC;QAAe;QAC1Da,0BACE,KAAC5B;YACCW,IAAI,GAAGA,GAAG,OAAO,CAAC;YAClBkB,YAAW;YACXC,cAAYZ;YACZa,gBAAcT;YAIb,GAAGH,eAAe;YACnBL,WAAWP,oBAAoB;gBAC7BO,WAAWK,iBAAiBL;YAC9B;YACAkB,SAAS,CAACC;gBACRd,iBAAiBa,UAAUC;gBAC3B,IAAIA,MAAMC,oBAAoB,IAAI;oBAChC;gBACF;gBAEAX;YACF;sBAECJ,iBAAiBgB,YAAYnB;;QAGlCoB,uBAAuB;;AAG7B,GACA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/Radio.tsx"],"sourcesContent":["\"use client\";\nimport { forwardRef } from \"react\";\nimport { InputToggle, type RadioProps } from \"./InputToggle.js\";\n\n/**\n * **Client Component**\n *\n * You'll generally want to use the `useRadioGroup` hook along with this\n * component.\n *\n * @example Simple Example\n * ```tsx\n * const { value, getRadioProps } = useRadioGroup({ name: \"group\" });\n *\n * return (\n * <>\n * <Radio {...getRadioProps(\"a\")} label=\"First\" />\n * <Radio {...getRadioProps(\"b\")} label=\"Second\" />\n * <Radio {...getRadioProps(\"c\")} label=\"Third\" />\n * </>\n * );\n * ```\n */\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n function Radio(props, ref) {\n return <InputToggle {...props} ref={ref} type=\"radio\" />;\n }\n);\n"],"names":["forwardRef","InputToggle","Radio","props","ref","type"],"mappings":"AAAA;;AACA,SAASA,UAAU,QAAQ,QAAQ;AACnC,SAASC,WAAW,QAAyB,mBAAmB;AAEhE;;;;;;;;;;;;;;;;;;CAkBC,GACD,OAAO,MAAMC,sBAAQF,WACnB,SAASE,MAAMC,KAAK,EAAEC,GAAG;IACvB,qBAAO,KAACH;QAAa,GAAGE,KAAK;QAAEC,KAAKA;QAAKC,MAAK;;AAChD,GACA"}
1
+ {"version":3,"sources":["../../src/form/Radio.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef } from \"react\";\n\nimport { InputToggle, type RadioProps } from \"./InputToggle.js\";\n\n/**\n * **Client Component**\n *\n * You'll generally want to use the `useRadioGroup` hook along with this\n * component.\n *\n * @example Simple Example\n * ```tsx\n * const { value, getRadioProps } = useRadioGroup({ name: \"group\" });\n *\n * return (\n * <>\n * <Radio {...getRadioProps(\"a\")} label=\"First\" />\n * <Radio {...getRadioProps(\"b\")} label=\"Second\" />\n * <Radio {...getRadioProps(\"c\")} label=\"Third\" />\n * </>\n * );\n * ```\n */\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n function Radio(props, ref) {\n return <InputToggle {...props} ref={ref} type=\"radio\" />;\n }\n);\n"],"names":["forwardRef","InputToggle","Radio","props","ref","type"],"mappings":"AAAA;;AAEA,SAASA,UAAU,QAAQ,QAAQ;AAEnC,SAASC,WAAW,QAAyB,mBAAmB;AAEhE;;;;;;;;;;;;;;;;;;CAkBC,GACD,OAAO,MAAMC,sBAAQF,WACnB,SAASE,MAAMC,KAAK,EAAEC,GAAG;IACvB,qBAAO,KAACH;QAAa,GAAGE,KAAK;QAAEC,KAAKA;QAAKC,MAAK;;AAChD,GACA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/ResizingTextAreaWrapper.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport {\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type Ref,\n type TextareaHTMLAttributes,\n} from \"react\";\nimport { textArea } from \"./textAreaStyles.js\";\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport interface ResizingTextAreaWrapperProps\n extends HTMLAttributes<HTMLDivElement> {\n maskId: string;\n maskRef: Ref<HTMLTextAreaElement>;\n defaultValue?: TextareaHTMLAttributes<HTMLTextAreaElement>[\"defaultValue\"];\n rows: number;\n areaStyle?: CSSProperties;\n areaClassName?: string;\n disableTransition?: boolean;\n}\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport const ResizingTextAreaWrapper = forwardRef<\n HTMLDivElement,\n ResizingTextAreaWrapperProps\n>(function ResizingTextAreaWrapper(props, ref) {\n const {\n className,\n rows,\n maskId,\n maskRef,\n areaStyle,\n areaClassName,\n defaultValue,\n disableTransition,\n children,\n ...remaining\n } = props;\n\n return (\n <div\n {...remaining}\n ref={ref}\n className={cnb(\n \"rmd-textarea-container__inner\",\n !disableTransition && \"rmd-textarea-container__inner--animate\",\n className\n )}\n >\n {children}\n <textarea\n aria-hidden\n id={maskId}\n ref={maskRef}\n defaultValue={defaultValue}\n readOnly\n tabIndex={-1}\n rows={rows}\n style={areaStyle}\n className={textArea({\n mask: true,\n resize: \"auto\",\n className: areaClassName,\n })}\n />\n </div>\n );\n});\n"],"names":["cnb","forwardRef","textArea","ResizingTextAreaWrapper","props","ref","className","rows","maskId","maskRef","areaStyle","areaClassName","defaultValue","disableTransition","children","remaining","div","textarea","aria-hidden","id","readOnly","tabIndex","style","mask","resize"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SACEC,UAAU,QAKL,QAAQ;AACf,SAASC,QAAQ,QAAQ,sBAAsB;AAiB/C;;;CAGC,GACD,OAAO,MAAMC,wCAA0BF,WAGrC,SAASE,wBAAwBC,KAAK,EAAEC,GAAG;IAC3C,MAAM,EACJC,SAAS,EACTC,IAAI,EACJC,MAAM,EACNC,OAAO,EACPC,SAAS,EACTC,aAAa,EACbC,YAAY,EACZC,iBAAiB,EACjBC,QAAQ,EACR,GAAGC,WACJ,GAAGX;IAEJ,qBACE,MAACY;QACE,GAAGD,SAAS;QACbV,KAAKA;QACLC,WAAWN,IACT,iCACA,CAACa,qBAAqB,0CACtBP;;YAGDQ;0BACD,KAACG;gBACCC,aAAW;gBACXC,IAAIX;gBACJH,KAAKI;gBACLG,cAAcA;gBACdQ,QAAQ;gBACRC,UAAU,CAAC;gBACXd,MAAMA;gBACNe,OAAOZ;gBACPJ,WAAWJ,SAAS;oBAClBqB,MAAM;oBACNC,QAAQ;oBACRlB,WAAWK;gBACb;;;;AAIR,GAAG"}
1
+ {"version":3,"sources":["../../src/form/ResizingTextAreaWrapper.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport {\n type CSSProperties,\n type HTMLAttributes,\n type Ref,\n type TextareaHTMLAttributes,\n forwardRef,\n} from \"react\";\n\nimport { textArea } from \"./textAreaStyles.js\";\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport interface ResizingTextAreaWrapperProps\n extends HTMLAttributes<HTMLDivElement> {\n maskId: string;\n maskRef: Ref<HTMLTextAreaElement>;\n defaultValue?: TextareaHTMLAttributes<HTMLTextAreaElement>[\"defaultValue\"];\n rows: number;\n areaStyle?: CSSProperties;\n areaClassName?: string;\n disableTransition?: boolean;\n}\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport const ResizingTextAreaWrapper = forwardRef<\n HTMLDivElement,\n ResizingTextAreaWrapperProps\n>(function ResizingTextAreaWrapper(props, ref) {\n const {\n className,\n rows,\n maskId,\n maskRef,\n areaStyle,\n areaClassName,\n defaultValue,\n disableTransition,\n children,\n ...remaining\n } = props;\n\n return (\n <div\n {...remaining}\n ref={ref}\n className={cnb(\n \"rmd-textarea-container__inner\",\n !disableTransition && \"rmd-textarea-container__inner--animate\",\n className\n )}\n >\n {children}\n <textarea\n aria-hidden\n id={maskId}\n ref={maskRef}\n defaultValue={defaultValue}\n readOnly\n tabIndex={-1}\n rows={rows}\n style={areaStyle}\n className={textArea({\n mask: true,\n resize: \"auto\",\n className: areaClassName,\n })}\n />\n </div>\n );\n});\n"],"names":["cnb","forwardRef","textArea","ResizingTextAreaWrapper","props","ref","className","rows","maskId","maskRef","areaStyle","areaClassName","defaultValue","disableTransition","children","remaining","div","textarea","aria-hidden","id","readOnly","tabIndex","style","mask","resize"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAKEC,UAAU,QACL,QAAQ;AAEf,SAASC,QAAQ,QAAQ,sBAAsB;AAiB/C;;;CAGC,GACD,OAAO,MAAMC,wCAA0BF,WAGrC,SAASE,wBAAwBC,KAAK,EAAEC,GAAG;IAC3C,MAAM,EACJC,SAAS,EACTC,IAAI,EACJC,MAAM,EACNC,OAAO,EACPC,SAAS,EACTC,aAAa,EACbC,YAAY,EACZC,iBAAiB,EACjBC,QAAQ,EACR,GAAGC,WACJ,GAAGX;IAEJ,qBACE,MAACY;QACE,GAAGD,SAAS;QACbV,KAAKA;QACLC,WAAWN,IACT,iCACA,CAACa,qBAAqB,0CACtBP;;YAGDQ;0BACD,KAACG;gBACCC,aAAW;gBACXC,IAAIX;gBACJH,KAAKI;gBACLG,cAAcA;gBACdQ,QAAQ;gBACRC,UAAU,CAAC;gBACXd,MAAMA;gBACNe,OAAOZ;gBACPJ,WAAWJ,SAAS;oBAClBqB,MAAM;oBACNC,QAAQ;oBACRlB,WAAWK;gBACb;;;;AAIR,GAAG"}
@@ -3,7 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { cnb } from "cnbuilder";
4
4
  import { useCallback, useRef, useState } from "react";
5
5
  import { IconRotator } from "../icon/IconRotator.js";
6
- import { getIcon } from "../icon/iconConfig.js";
6
+ import { getIcon } from "../icon/config.js";
7
7
  import { KeyboardMovementProvider } from "../movement/useKeyboardMovementProvider.js";
8
8
  import { useEnsuredId } from "../useEnsuredId.js";
9
9
  import { useEnsuredRef } from "../useEnsuredRef.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/Select.tsx"],"sourcesContent":["\"use client\";\nimport { cnb } from \"cnbuilder\";\nimport {\n useCallback,\n useRef,\n useState,\n type ChangeEvent,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { type BoxProps } from \"../box/Box.js\";\nimport { IconRotator } from \"../icon/IconRotator.js\";\nimport { getIcon } from \"../icon/iconConfig.js\";\nimport { type MenuProps } from \"../menu/Menu.js\";\nimport { KeyboardMovementProvider } from \"../movement/useKeyboardMovementProvider.js\";\nimport {\n type LabelA11y,\n type PropsWithRef,\n type RequireAtLeastOne,\n} from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredRef } from \"../useEnsuredRef.js\";\nimport { label as labelStyles } from \"./Label.js\";\nimport { Listbox } from \"./Listbox.js\";\nimport { SelectedOption } from \"./SelectedOption.js\";\nimport {\n TextFieldContainer,\n type TextFieldContainerProps,\n} from \"./TextFieldContainer.js\";\nimport { getFormConfig } from \"./formConfig.js\";\nimport { select } from \"./selectStyles.js\";\nimport { extractOptionsFromChildren } from \"./selectUtils.js\";\nimport { textField } from \"./textFieldStyles.js\";\nimport { type UserAgentAutocompleteProps } from \"./types.js\";\nimport { useFormReset } from \"./useFormReset.js\";\nimport { useSelectCombobox } from \"./useSelectCombobox.js\";\nimport { triggerManualChangeEvent } from \"./utils.js\";\n\nconst EMPTY_STRING = \"\" as const;\nconst noop = (): void => {\n // do nothing\n};\n\n/**\n * This is a convenience type for casting the `event.currentTarget.value` of a\n * `Select`'s change event to be union of available values.\n *\n * Note: The change event does not provide any sort of validation on the value\n * so automation tools like Cypress, Playwright, or Selenium might set an\n * invalid value. This also does not work for numbers, so you will need to\n * implement that yourself.\n *\n * @example Simple Usage\n * ```tsx\n * import type { SelectedChangeEvent } from \"@react-md/core\";\n * import { Select, Option } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * type Value = \"\" | \"a\" | \"b\" | \"c\" | \"d\";\n *\n * function Example(): ReactElement {\n * const [value, setValue] = useState<Value>(\"\");\n *\n * const handleChange = (event: SelectChangeEvent<Value>): void => {\n * // No type error!\n * // `event.currentTarget.value`'s type is `Value` instead of a generic `string`\n * setValue(event.currentTarget.value);\n * };\n *\n * return (\n * <Select\n * label=\"Label\"\n * value={value}\n * onChange={handleChange}\n * >\n * <Option value=\"a\">First</Option>\n * <Option value=\"b\">Second</Option>\n * <Option value=\"c\">Third</Option>\n * <Option value=\"d\">Fourth</Option>\n * </Select>\n * );\n * }\n * ```\n * @since 6.0.0\n */\nexport type SelectChangeEvent<Value extends string> =\n ChangeEvent<HTMLInputElement> & { currentTarget: { value: Value } };\n\n/**\n * @since 6.0.0 Rewritten with a new API.\n */\nexport interface SelectProps<Value extends string>\n extends Omit<TextFieldContainerProps, \"label\">,\n Pick<InputHTMLAttributes<HTMLInputElement>, \"form\" | \"required\">,\n UserAgentAutocompleteProps {\n /**\n * @defaultValue `\"select-\" + useId()`\n */\n id?: string;\n\n /**\n * Optional placeholder text or element to render while no options have been\n * selected.\n */\n placeholder?: ReactNode;\n\n /**\n * Set this to a custom dropdown icon or `null` to not render a dropdown icon.\n *\n * @defaultValue `getIcon(\"dropdown\")`\n */\n icon?: ReactNode;\n\n /**\n * Set this value to fully control the value of the select component. The\n * {@link onChange} handler **must** also be provided if this prop exists.\n */\n value?: Value;\n\n /**\n * An optional default value when the value of the select component is\n * uncontrolled.\n *\n * @defaultValue `\"\"`\n */\n defaultValue?: Value;\n\n /** @see {@link SelectChangeEvent} */\n onChange?: (event: SelectChangeEvent<Value>) => void;\n\n /**\n * An optional floating label to display like other form fields.\n */\n label?: ReactNode;\n\n /**\n * Optional props to pass to the `<span>` that surrounds the {@link label}\n */\n labelProps?: PropsWithRef<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;\n\n /**\n * An optional ref to pass to the hidden `<input type=\"text\" />` element that\n * stores the current value. This is really only useful if you'd like to keep\n * this component uncontrolled and access the value through\n * `inputRef.current.value`.\n */\n inputRef?: Ref<HTMLInputElement>;\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n\n /**\n * A ref for the container `<div>` element.\n */\n containerRef?: Ref<HTMLDivElement>;\n\n /**\n * Any additional props to provide to the `Menu` component that renders all\n * the `Option`s.\n *\n * The menu will always have these default values unless explicity\n * overwritten by this prop:\n *\n * - `aria-labelledby={label ? labelId : id}` -- this will be undefined if\n * `aria-label` is provided\n * - `anchor={BELOW_CENTER_ANCHOR}`\n * - `width=\"min\"`\n */\n menuProps?: PropsWithRef<\n Omit<MenuProps, \"visible\" | \"onRequestClose\" | \"fixedTo\">,\n HTMLDivElement\n >;\n\n /**\n * Any additional props to pass to the div that contains the current visible\n * option.\n */\n selectedOptionProps?: BoxProps;\n\n /**\n * Set this to `true` if all the `Option` components should display the\n * selected icon after the children instead of before.\n *\n * @see {@link disableSelectedIcon} to remove the selected icon instead.\n *\n * @defaultValue `false`\n */\n selectedIconAfter?: boolean;\n\n /**\n * Set this to `true` to prevent the current option from rendering the\n * `leftAddon` in the `TextFieldContainer`.\n *\n * @defaultValue `false`\n */\n disableOptionAddon?: boolean;\n\n /**\n * Set this to `true` to update all the `Option` components to no longer\n * render an icon while selected.\n *\n * @defaultValue `false`\n */\n disableSelectedIcon?: boolean;\n\n /**\n * This should be the available `Option`s for the select to choose from. It\n * can also contain `OptGroup` or any other elements but only clicking on an\n * `Option` component will update the value.\n */\n children: ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * @example Simple Example\n * ```tsx\n * import { Select, Option } from \"react-md\";\n * import { useState, type ReactElement } from \"react\";\n *\n * function Example(): ReactElement {\n * const [value, setValue] = useState(\"\");\n *\n * return (\n * <Select\n * label=\"Select\"\n * value={value}\n * onChange={(event) => setValue(event.currentTarget.value)}\n * placeholder=\"Select a value\"\n * >\n * <Option value=\"a\">Option 1</Option>\n * <Option value=\"b\">Option 2</Option>\n * <Option value=\"c\">Option 3</Option>\n * <Option value=\"d\">Option 4</Option>\n * </Select>\n * );\n * }\n * ```\n *\n * @example Testing\n * ```tsx\n * rmdRender(\n * <Select label=\"Select\" selectedOptionProps={{ \"data-testid\": \"selected\" }}>\n * <Option value=\"a\">Option 1</Option>\n * <Option value=\"b\">Option 2</Option>\n * <Option value=\"c\">Option 3</Option>\n * <Option value=\"d\">Option 4</Option>\n * </Select>\n * );\n *\n * const user = userEvent.setup();\n * const select = screen.getByRole(\"combobox\", { name: \"Select\" });\n * const selected = screen.getByTestId(\"selected\")\n * const selectInput = screen.getByRole(\"textbox\", { hidden: true });\n * expect(selected).toHaveTextContent(\"\");\n * expect(selectInput).toHaveValue(\"\");\n *\n * await user.click(select);\n * await user.click(screen.getByRole(\"option\"), { name: \"Option 2\" });\n *\n * expect(selected).toHaveTextContent(\"Option 2\");\n * expect(selectInput).toHaveValue(\"b\");\n * ```\n *\n * @since 6.0.0 Rewritten with a new API.\n */\nexport function Select<Value extends string>(\n props: RequireAtLeastOne<SelectProps<Value>, \"label\" | keyof LabelA11y>\n): ReactElement {\n const {\n id,\n form,\n autoCompleteValue,\n autoComplete = autoCompleteValue,\n name = autoCompleteValue,\n className,\n onClick,\n onFocus,\n onKeyDown,\n inputRef: propInputRef,\n inputProps,\n containerRef,\n placeholder,\n menuProps = {},\n label,\n labelProps = {},\n selectedOptionProps,\n icon: propIcon,\n value,\n defaultValue,\n theme: propTheme,\n onChange = noop,\n rightAddon: propRightAddon,\n active = false,\n required,\n selectedIconAfter = false,\n disableOptionAddon = false,\n disableSelectedIcon = false,\n children,\n ...remaining\n } = props;\n const { dense, error, disabled } = props;\n\n const comboboxId = useEnsuredId(id, \"select\");\n const inputId = useEnsuredId(inputProps?.id, \"select-value\");\n const selectLabelId = useEnsuredId(labelProps.id, \"select-label\");\n const labelId = label ? selectLabelId : undefined;\n\n const [localValue, setLocalValue] = useState(() => {\n if (typeof defaultValue !== \"undefined\") {\n return defaultValue;\n }\n\n return typeof value !== \"undefined\" ? value : EMPTY_STRING;\n });\n const currentValue = typeof value === \"undefined\" ? localValue : value;\n const initialValue = useRef(currentValue);\n const { options, currentOption } = extractOptionsFromChildren(\n children,\n currentValue\n );\n\n const { visible, comboboxProps, movementContext, getMenuProps } =\n useSelectCombobox({\n form,\n value: currentValue,\n values: options,\n onClick,\n onFocus,\n onKeyDown,\n disabled,\n popupId: menuProps.id,\n popupRef: menuProps.ref,\n comboboxId,\n comboboxRef: containerRef,\n });\n\n const [inputRef, inputRefCallback] = useEnsuredRef(propInputRef);\n useFormReset({\n form,\n elementRef: inputRef,\n defaultValue: initialValue.current,\n });\n\n const icon = getIcon(\"dropdown\", propIcon);\n const theme = getFormConfig(\"theme\", propTheme);\n let rightAddon = propRightAddon;\n if (typeof rightAddon === \"undefined\" && icon) {\n rightAddon = <IconRotator rotated={visible}>{icon}</IconRotator>;\n }\n\n const { ref: listboxRef, ...listboxProps } = getMenuProps(menuProps);\n let listboxLabelledBy = menuProps[\"aria-labelledby\"];\n const listboxLabel = menuProps[\"aria-label\"];\n if (!listboxLabel && !listboxLabelledBy) {\n listboxLabelledBy = labelId || comboboxId;\n }\n\n return (\n <KeyboardMovementProvider value={movementContext}>\n <TextFieldContainer\n aria-labelledby={labelId}\n {...remaining}\n {...comboboxProps}\n label={!!label}\n theme={theme}\n active={active || visible}\n className={cnb(\"rmd-select-container\", className)}\n rightAddon={rightAddon}\n >\n <SelectedOption\n option={currentOption}\n placeholder={placeholder}\n disableAddon={disableOptionAddon}\n {...selectedOptionProps}\n />\n <input\n aria-hidden\n id={inputId}\n ref={inputRefCallback}\n type=\"text\"\n autoComplete={autoComplete}\n name={name}\n tabIndex={-1}\n disabled={disabled}\n required={required}\n placeholder=\" \"\n {...inputProps}\n value={value}\n defaultValue={defaultValue}\n className={cnb(select({ theme }), textField())}\n onChange={(event) => {\n onChange(event as SelectChangeEvent<Value>);\n if (typeof value !== \"undefined\") {\n return;\n }\n\n const nextValue = event.currentTarget.value;\n const nextOption = options.find((option) => option === nextValue);\n\n setLocalValue(nextOption ?? initialValue.current);\n }}\n />\n {label && (\n <span\n {...labelProps}\n id={labelId}\n className={labelStyles({\n dense,\n error,\n disabled,\n active: active || visible,\n floating: true,\n floatingActive: !!placeholder || !!currentOption,\n className: labelProps.className,\n })}\n >\n {label}\n </span>\n )}\n </TextFieldContainer>\n <Listbox\n {...listboxProps}\n aria-label={listboxLabel}\n aria-labelledby={listboxLabelledBy as string}\n nodeRef={listboxRef}\n value={currentValue}\n setValue={useCallback(\n (option: \"\" | Value) => {\n triggerManualChangeEvent(inputRef.current, option);\n },\n [inputRef]\n )}\n selectedIconAfter={selectedIconAfter}\n disableSelectedIcon={disableSelectedIcon}\n >\n {children}\n </Listbox>\n </KeyboardMovementProvider>\n );\n}\n"],"names":["cnb","useCallback","useRef","useState","IconRotator","getIcon","KeyboardMovementProvider","useEnsuredId","useEnsuredRef","label","labelStyles","Listbox","SelectedOption","TextFieldContainer","getFormConfig","select","extractOptionsFromChildren","textField","useFormReset","useSelectCombobox","triggerManualChangeEvent","EMPTY_STRING","noop","Select","props","id","form","autoCompleteValue","autoComplete","name","className","onClick","onFocus","onKeyDown","inputRef","propInputRef","inputProps","containerRef","placeholder","menuProps","labelProps","selectedOptionProps","icon","propIcon","value","defaultValue","theme","propTheme","onChange","rightAddon","propRightAddon","active","required","selectedIconAfter","disableOptionAddon","disableSelectedIcon","children","remaining","dense","error","disabled","comboboxId","inputId","selectLabelId","labelId","undefined","localValue","setLocalValue","currentValue","initialValue","options","currentOption","visible","comboboxProps","movementContext","getMenuProps","values","popupId","popupRef","ref","comboboxRef","inputRefCallback","elementRef","current","rotated","listboxRef","listboxProps","listboxLabelledBy","listboxLabel","aria-labelledby","option","disableAddon","input","aria-hidden","type","tabIndex","event","nextValue","currentTarget","nextOption","find","span","floating","floatingActive","aria-label","nodeRef","setValue"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/form/Select.tsx"],"sourcesContent":["\"use client\";\n\nimport { cnb } from \"cnbuilder\";\nimport {\n type ChangeEvent,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n useCallback,\n useRef,\n useState,\n} from \"react\";\n\nimport { type BoxProps } from \"../box/Box.js\";\nimport { IconRotator } from \"../icon/IconRotator.js\";\nimport { getIcon } from \"../icon/config.js\";\nimport { type MenuProps } from \"../menu/Menu.js\";\nimport { KeyboardMovementProvider } from \"../movement/useKeyboardMovementProvider.js\";\nimport {\n type LabelA11y,\n type PropsWithRef,\n type RequireAtLeastOne,\n} from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredRef } from \"../useEnsuredRef.js\";\nimport { label as labelStyles } from \"./Label.js\";\nimport { Listbox } from \"./Listbox.js\";\nimport { SelectedOption } from \"./SelectedOption.js\";\nimport {\n TextFieldContainer,\n type TextFieldContainerProps,\n} from \"./TextFieldContainer.js\";\nimport { getFormConfig } from \"./formConfig.js\";\nimport { select } from \"./selectStyles.js\";\nimport { extractOptionsFromChildren } from \"./selectUtils.js\";\nimport { textField } from \"./textFieldStyles.js\";\nimport { type UserAgentAutocompleteProps } from \"./types.js\";\nimport { useFormReset } from \"./useFormReset.js\";\nimport { useSelectCombobox } from \"./useSelectCombobox.js\";\nimport { triggerManualChangeEvent } from \"./utils.js\";\n\nconst EMPTY_STRING = \"\" as const;\nconst noop = (): void => {\n // do nothing\n};\n\n/**\n * This is a convenience type for casting the `event.currentTarget.value` of a\n * `Select`'s change event to be union of available values.\n *\n * Note: The change event does not provide any sort of validation on the value\n * so automation tools like Cypress, Playwright, or Selenium might set an\n * invalid value. This also does not work for numbers, so you will need to\n * implement that yourself.\n *\n * @example Simple Usage\n * ```tsx\n * import type { SelectedChangeEvent } from \"@react-md/core\";\n * import { Select, Option } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * type Value = \"\" | \"a\" | \"b\" | \"c\" | \"d\";\n *\n * function Example(): ReactElement {\n * const [value, setValue] = useState<Value>(\"\");\n *\n * const handleChange = (event: SelectChangeEvent<Value>): void => {\n * // No type error!\n * // `event.currentTarget.value`'s type is `Value` instead of a generic `string`\n * setValue(event.currentTarget.value);\n * };\n *\n * return (\n * <Select\n * label=\"Label\"\n * value={value}\n * onChange={handleChange}\n * >\n * <Option value=\"a\">First</Option>\n * <Option value=\"b\">Second</Option>\n * <Option value=\"c\">Third</Option>\n * <Option value=\"d\">Fourth</Option>\n * </Select>\n * );\n * }\n * ```\n * @since 6.0.0\n */\nexport type SelectChangeEvent<Value extends string> =\n ChangeEvent<HTMLInputElement> & { currentTarget: { value: Value } };\n\n/**\n * @since 6.0.0 Rewritten with a new API.\n */\nexport interface SelectProps<Value extends string>\n extends Omit<TextFieldContainerProps, \"label\">,\n Pick<InputHTMLAttributes<HTMLInputElement>, \"form\" | \"required\">,\n UserAgentAutocompleteProps {\n /**\n * @defaultValue `\"select-\" + useId()`\n */\n id?: string;\n\n /**\n * Optional placeholder text or element to render while no options have been\n * selected.\n */\n placeholder?: ReactNode;\n\n /**\n * Set this to a custom dropdown icon or `null` to not render a dropdown icon.\n *\n * @defaultValue `getIcon(\"dropdown\")`\n */\n icon?: ReactNode;\n\n /**\n * Set this value to fully control the value of the select component. The\n * {@link onChange} handler **must** also be provided if this prop exists.\n */\n value?: Value;\n\n /**\n * An optional default value when the value of the select component is\n * uncontrolled.\n *\n * @defaultValue `\"\"`\n */\n defaultValue?: Value;\n\n /** @see {@link SelectChangeEvent} */\n onChange?: (event: SelectChangeEvent<Value>) => void;\n\n /**\n * An optional floating label to display like other form fields.\n */\n label?: ReactNode;\n\n /**\n * Optional props to pass to the `<span>` that surrounds the {@link label}\n */\n labelProps?: PropsWithRef<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;\n\n /**\n * An optional ref to pass to the hidden `<input type=\"text\" />` element that\n * stores the current value. This is really only useful if you'd like to keep\n * this component uncontrolled and access the value through\n * `inputRef.current.value`.\n */\n inputRef?: Ref<HTMLInputElement>;\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n\n /**\n * A ref for the container `<div>` element.\n */\n containerRef?: Ref<HTMLDivElement>;\n\n /**\n * Any additional props to provide to the `Menu` component that renders all\n * the `Option`s.\n *\n * The menu will always have these default values unless explicity\n * overwritten by this prop:\n *\n * - `aria-labelledby={label ? labelId : id}` -- this will be undefined if\n * `aria-label` is provided\n * - `anchor={BELOW_CENTER_ANCHOR}`\n * - `width=\"min\"`\n */\n menuProps?: PropsWithRef<\n Omit<MenuProps, \"visible\" | \"onRequestClose\" | \"fixedTo\">,\n HTMLDivElement\n >;\n\n /**\n * Any additional props to pass to the div that contains the current visible\n * option.\n */\n selectedOptionProps?: BoxProps;\n\n /**\n * Set this to `true` if all the `Option` components should display the\n * selected icon after the children instead of before.\n *\n * @see {@link disableSelectedIcon} to remove the selected icon instead.\n *\n * @defaultValue `false`\n */\n selectedIconAfter?: boolean;\n\n /**\n * Set this to `true` to prevent the current option from rendering the\n * `leftAddon` in the `TextFieldContainer`.\n *\n * @defaultValue `false`\n */\n disableOptionAddon?: boolean;\n\n /**\n * Set this to `true` to update all the `Option` components to no longer\n * render an icon while selected.\n *\n * @defaultValue `false`\n */\n disableSelectedIcon?: boolean;\n\n /**\n * This should be the available `Option`s for the select to choose from. It\n * can also contain `OptGroup` or any other elements but only clicking on an\n * `Option` component will update the value.\n */\n children: ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * @example Simple Example\n * ```tsx\n * import { Select, Option } from \"react-md\";\n * import { useState, type ReactElement } from \"react\";\n *\n * function Example(): ReactElement {\n * const [value, setValue] = useState(\"\");\n *\n * return (\n * <Select\n * label=\"Select\"\n * value={value}\n * onChange={(event) => setValue(event.currentTarget.value)}\n * placeholder=\"Select a value\"\n * >\n * <Option value=\"a\">Option 1</Option>\n * <Option value=\"b\">Option 2</Option>\n * <Option value=\"c\">Option 3</Option>\n * <Option value=\"d\">Option 4</Option>\n * </Select>\n * );\n * }\n * ```\n *\n * @example Testing\n * ```tsx\n * rmdRender(\n * <Select label=\"Select\" selectedOptionProps={{ \"data-testid\": \"selected\" }}>\n * <Option value=\"a\">Option 1</Option>\n * <Option value=\"b\">Option 2</Option>\n * <Option value=\"c\">Option 3</Option>\n * <Option value=\"d\">Option 4</Option>\n * </Select>\n * );\n *\n * const user = userEvent.setup();\n * const select = screen.getByRole(\"combobox\", { name: \"Select\" });\n * const selected = screen.getByTestId(\"selected\")\n * const selectInput = screen.getByRole(\"textbox\", { hidden: true });\n * expect(selected).toHaveTextContent(\"\");\n * expect(selectInput).toHaveValue(\"\");\n *\n * await user.click(select);\n * await user.click(screen.getByRole(\"option\"), { name: \"Option 2\" });\n *\n * expect(selected).toHaveTextContent(\"Option 2\");\n * expect(selectInput).toHaveValue(\"b\");\n * ```\n *\n * @since 6.0.0 Rewritten with a new API.\n */\nexport function Select<Value extends string>(\n props: RequireAtLeastOne<SelectProps<Value>, \"label\" | keyof LabelA11y>\n): ReactElement {\n const {\n id,\n form,\n autoCompleteValue,\n autoComplete = autoCompleteValue,\n name = autoCompleteValue,\n className,\n onClick,\n onFocus,\n onKeyDown,\n inputRef: propInputRef,\n inputProps,\n containerRef,\n placeholder,\n menuProps = {},\n label,\n labelProps = {},\n selectedOptionProps,\n icon: propIcon,\n value,\n defaultValue,\n theme: propTheme,\n onChange = noop,\n rightAddon: propRightAddon,\n active = false,\n required,\n selectedIconAfter = false,\n disableOptionAddon = false,\n disableSelectedIcon = false,\n children,\n ...remaining\n } = props;\n const { dense, error, disabled } = props;\n\n const comboboxId = useEnsuredId(id, \"select\");\n const inputId = useEnsuredId(inputProps?.id, \"select-value\");\n const selectLabelId = useEnsuredId(labelProps.id, \"select-label\");\n const labelId = label ? selectLabelId : undefined;\n\n const [localValue, setLocalValue] = useState(() => {\n if (typeof defaultValue !== \"undefined\") {\n return defaultValue;\n }\n\n return typeof value !== \"undefined\" ? value : EMPTY_STRING;\n });\n const currentValue = typeof value === \"undefined\" ? localValue : value;\n const initialValue = useRef(currentValue);\n const { options, currentOption } = extractOptionsFromChildren(\n children,\n currentValue\n );\n\n const { visible, comboboxProps, movementContext, getMenuProps } =\n useSelectCombobox({\n form,\n value: currentValue,\n values: options,\n onClick,\n onFocus,\n onKeyDown,\n disabled,\n popupId: menuProps.id,\n popupRef: menuProps.ref,\n comboboxId,\n comboboxRef: containerRef,\n });\n\n const [inputRef, inputRefCallback] = useEnsuredRef(propInputRef);\n useFormReset({\n form,\n elementRef: inputRef,\n defaultValue: initialValue.current,\n });\n\n const icon = getIcon(\"dropdown\", propIcon);\n const theme = getFormConfig(\"theme\", propTheme);\n let rightAddon = propRightAddon;\n if (typeof rightAddon === \"undefined\" && icon) {\n rightAddon = <IconRotator rotated={visible}>{icon}</IconRotator>;\n }\n\n const { ref: listboxRef, ...listboxProps } = getMenuProps(menuProps);\n let listboxLabelledBy = menuProps[\"aria-labelledby\"];\n const listboxLabel = menuProps[\"aria-label\"];\n if (!listboxLabel && !listboxLabelledBy) {\n listboxLabelledBy = labelId || comboboxId;\n }\n\n return (\n <KeyboardMovementProvider value={movementContext}>\n <TextFieldContainer\n aria-labelledby={labelId}\n {...remaining}\n {...comboboxProps}\n label={!!label}\n theme={theme}\n active={active || visible}\n className={cnb(\"rmd-select-container\", className)}\n rightAddon={rightAddon}\n >\n <SelectedOption\n option={currentOption}\n placeholder={placeholder}\n disableAddon={disableOptionAddon}\n {...selectedOptionProps}\n />\n <input\n aria-hidden\n id={inputId}\n ref={inputRefCallback}\n type=\"text\"\n autoComplete={autoComplete}\n name={name}\n tabIndex={-1}\n disabled={disabled}\n required={required}\n placeholder=\" \"\n {...inputProps}\n value={value}\n defaultValue={defaultValue}\n className={cnb(select({ theme }), textField())}\n onChange={(event) => {\n onChange(event as SelectChangeEvent<Value>);\n if (typeof value !== \"undefined\") {\n return;\n }\n\n const nextValue = event.currentTarget.value;\n const nextOption = options.find((option) => option === nextValue);\n\n setLocalValue(nextOption ?? initialValue.current);\n }}\n />\n {label && (\n <span\n {...labelProps}\n id={labelId}\n className={labelStyles({\n dense,\n error,\n disabled,\n active: active || visible,\n floating: true,\n floatingActive: !!placeholder || !!currentOption,\n className: labelProps.className,\n })}\n >\n {label}\n </span>\n )}\n </TextFieldContainer>\n <Listbox\n {...listboxProps}\n aria-label={listboxLabel}\n aria-labelledby={listboxLabelledBy as string}\n nodeRef={listboxRef}\n value={currentValue}\n setValue={useCallback(\n (option: \"\" | Value) => {\n triggerManualChangeEvent(inputRef.current, option);\n },\n [inputRef]\n )}\n selectedIconAfter={selectedIconAfter}\n disableSelectedIcon={disableSelectedIcon}\n >\n {children}\n </Listbox>\n </KeyboardMovementProvider>\n );\n}\n"],"names":["cnb","useCallback","useRef","useState","IconRotator","getIcon","KeyboardMovementProvider","useEnsuredId","useEnsuredRef","label","labelStyles","Listbox","SelectedOption","TextFieldContainer","getFormConfig","select","extractOptionsFromChildren","textField","useFormReset","useSelectCombobox","triggerManualChangeEvent","EMPTY_STRING","noop","Select","props","id","form","autoCompleteValue","autoComplete","name","className","onClick","onFocus","onKeyDown","inputRef","propInputRef","inputProps","containerRef","placeholder","menuProps","labelProps","selectedOptionProps","icon","propIcon","value","defaultValue","theme","propTheme","onChange","rightAddon","propRightAddon","active","required","selectedIconAfter","disableOptionAddon","disableSelectedIcon","children","remaining","dense","error","disabled","comboboxId","inputId","selectLabelId","labelId","undefined","localValue","setLocalValue","currentValue","initialValue","options","currentOption","visible","comboboxProps","movementContext","getMenuProps","values","popupId","popupRef","ref","comboboxRef","inputRefCallback","elementRef","current","rotated","listboxRef","listboxProps","listboxLabelledBy","listboxLabel","aria-labelledby","option","disableAddon","input","aria-hidden","type","tabIndex","event","nextValue","currentTarget","nextOption","find","span","floating","floatingActive","aria-label","nodeRef","setValue"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/SelectedOption.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { type ReactElement, type ReactNode } from \"react\";\nimport { Box, type BoxProps } from \"../box/Box.js\";\nimport { cssUtils } from \"../cssUtils.js\";\nimport { type OptionProps } from \"./Option.js\";\nimport { textField } from \"./textFieldStyles.js\";\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport interface SelectedOptionProps extends BoxProps {\n option: OptionProps | undefined;\n placeholder?: ReactNode;\n disableAddon: boolean;\n}\n\n/**\n * This component is used to render the current option.\n *\n * @since 6.0.0\n * @internal\n */\nexport function SelectedOption(props: SelectedOptionProps): ReactElement {\n const {\n disableAddon,\n option,\n className,\n disableWrap = true,\n disablePadding = true,\n placeholder,\n ...remaining\n } = props;\n\n let children = option?.children || placeholder;\n // when the children are a string or number, wrap it in additional span so\n // that overflow can be ellipsis-ed\n if (typeof children === \"string\" || typeof children === \"number\") {\n children = (\n <span className={cssUtils({ textOverflow: \"ellipsis\" })}>{children}</span>\n );\n }\n\n return (\n <Box\n {...remaining}\n className={cnb(\"rmd-selected-option\", textField(), className)}\n disableWrap={disableWrap}\n disablePadding={disablePadding}\n >\n {!disableAddon && option?.leftAddon}\n {children}\n </Box>\n );\n}\n"],"names":["cnb","Box","cssUtils","textField","SelectedOption","props","disableAddon","option","className","disableWrap","disablePadding","placeholder","remaining","children","span","textOverflow","leftAddon"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SAASC,GAAG,QAAuB,gBAAgB;AACnD,SAASC,QAAQ,QAAQ,iBAAiB;AAE1C,SAASC,SAAS,QAAQ,uBAAuB;AAYjD;;;;;CAKC,GACD,OAAO,SAASC,eAAeC,KAA0B;IACvD,MAAM,EACJC,YAAY,EACZC,MAAM,EACNC,SAAS,EACTC,cAAc,IAAI,EAClBC,iBAAiB,IAAI,EACrBC,WAAW,EACX,GAAGC,WACJ,GAAGP;IAEJ,IAAIQ,WAAWN,QAAQM,YAAYF;IACnC,0EAA0E;IAC1E,mCAAmC;IACnC,IAAI,OAAOE,aAAa,YAAY,OAAOA,aAAa,UAAU;QAChEA,yBACE,KAACC;YAAKN,WAAWN,SAAS;gBAAEa,cAAc;YAAW;sBAAKF;;IAE9D;IAEA,qBACE,MAACZ;QACE,GAAGW,SAAS;QACbJ,WAAWR,IAAI,uBAAuBG,aAAaK;QACnDC,aAAaA;QACbC,gBAAgBA;;YAEf,CAACJ,gBAAgBC,QAAQS;YACzBH;;;AAGP"}
1
+ {"version":3,"sources":["../../src/form/SelectedOption.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { type ReactElement, type ReactNode } from \"react\";\n\nimport { Box, type BoxProps } from \"../box/Box.js\";\nimport { cssUtils } from \"../cssUtils.js\";\nimport { type OptionProps } from \"./Option.js\";\nimport { textField } from \"./textFieldStyles.js\";\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport interface SelectedOptionProps extends BoxProps {\n option: OptionProps | undefined;\n placeholder?: ReactNode;\n disableAddon: boolean;\n}\n\n/**\n * This component is used to render the current option.\n *\n * @since 6.0.0\n * @internal\n */\nexport function SelectedOption(props: SelectedOptionProps): ReactElement {\n const {\n disableAddon,\n option,\n className,\n disableWrap = true,\n disablePadding = true,\n placeholder,\n ...remaining\n } = props;\n\n let children = option?.children || placeholder;\n // when the children are a string or number, wrap it in additional span so\n // that overflow can be ellipsis-ed\n if (typeof children === \"string\" || typeof children === \"number\") {\n children = (\n <span className={cssUtils({ textOverflow: \"ellipsis\" })}>{children}</span>\n );\n }\n\n return (\n <Box\n {...remaining}\n className={cnb(\"rmd-selected-option\", textField(), className)}\n disableWrap={disableWrap}\n disablePadding={disablePadding}\n >\n {!disableAddon && option?.leftAddon}\n {children}\n </Box>\n );\n}\n"],"names":["cnb","Box","cssUtils","textField","SelectedOption","props","disableAddon","option","className","disableWrap","disablePadding","placeholder","remaining","children","span","textOverflow","leftAddon"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAGhC,SAASC,GAAG,QAAuB,gBAAgB;AACnD,SAASC,QAAQ,QAAQ,iBAAiB;AAE1C,SAASC,SAAS,QAAQ,uBAAuB;AAYjD;;;;;CAKC,GACD,OAAO,SAASC,eAAeC,KAA0B;IACvD,MAAM,EACJC,YAAY,EACZC,MAAM,EACNC,SAAS,EACTC,cAAc,IAAI,EAClBC,iBAAiB,IAAI,EACrBC,WAAW,EACX,GAAGC,WACJ,GAAGP;IAEJ,IAAIQ,WAAWN,QAAQM,YAAYF;IACnC,0EAA0E;IAC1E,mCAAmC;IACnC,IAAI,OAAOE,aAAa,YAAY,OAAOA,aAAa,UAAU;QAChEA,yBACE,KAACC;YAAKN,WAAWN,SAAS;gBAAEa,cAAc;YAAW;sBAAKF;;IAE9D;IAEA,qBACE,MAACZ;QACE,GAAGW,SAAS;QACbJ,WAAWR,IAAI,uBAAuBG,aAAaK;QACnDC,aAAaA;QACbC,gBAAgBA;;YAEf,CAACJ,gBAAgBC,QAAQS;YACzBH;;;AAGP"}
@@ -1,15 +1,14 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useRef, useState } from "react";
4
- import { useDraggable } from "../draggable/useDraggable.js";
3
+ import { useRef } from "react";
5
4
  import { useEnsuredId } from "../useEnsuredId.js";
6
5
  import { identity } from "../utils/identity.js";
7
- import { withinRange } from "../utils/withinRange.js";
8
6
  import { SliderContainer } from "./SliderContainer.js";
9
7
  import { SliderThumb } from "./SliderThumb.js";
10
8
  import { SliderTrack } from "./SliderTrack.js";
11
9
  import { SliderValueMarks } from "./SliderValueMarks.js";
12
10
  import { getJumpValue } from "./sliderUtils.js";
11
+ import { useSliderDraggable } from "./useSliderDraggable.js";
13
12
  const emptyString = ()=>"";
14
13
  const noop = ()=>{
15
14
  // do nothing
@@ -48,7 +47,7 @@ export function Slider(props) {
48
47
  thumb1LabelledBy = minThumbLabelledBy;
49
48
  thumb1Label = minThumbLabel || (minThumbLabelledBy ? undefined : "Min");
50
49
  thumb2LabelledBy = maxThumbLabelledBy;
51
- thumb2Label = maxThumbLabel || (maxThumbLabelledBy ? undefined : "max");
50
+ thumb2Label = maxThumbLabel || (maxThumbLabelledBy ? undefined : "Max");
52
51
  [thumb1Value, thumb2Value] = rangeValue;
53
52
  thumb1Max = thumb2Value - step;
54
53
  thumb2Min = thumb1Value + step;
@@ -71,8 +70,8 @@ export function Slider(props) {
71
70
  });
72
71
  };
73
72
  }
74
- const [thumb1Dragging, setThumb1Dragging] = useState(false);
75
- const { onKeyDown: thumb1OnKeyDown, onMouseUp: thumb1OnMouseUp, onMouseDown: thumb1OnMouseDown, onMouseMove: thumb1OnMouseMove, onTouchStart: thumb1OnTouchStart, onTouchMove: thumb1OnTouchMove, dragPercentage: thumb1DragPercentage, draggableRef: thumb1DraggableRef } = useDraggable({
73
+ const { onKeyDown: thumb1OnKeyDown, onMouseUp: thumb1OnMouseUp, onMouseDown: thumb1OnMouseDown, onMouseMove: thumb1OnMouseMove, onTouchStart: thumb1OnTouchStart, onTouchMove: thumb1OnTouchMove, dragPercentage: thumb1DragPercentage, draggableRef: thumb1DraggableRef, dragging: thumb1Dragging } = useSliderDraggable({
74
+ jump,
76
75
  ref: thumb1Ref,
77
76
  min,
78
77
  max: thumb1Max,
@@ -80,37 +79,11 @@ export function Slider(props) {
80
79
  step,
81
80
  value: thumb1Value,
82
81
  setValue: setThumb1Value,
83
- dragging: thumb1Dragging,
84
- setDragging: setThumb1Dragging,
85
82
  disabled,
86
- vertical,
87
- withinOffsetParent: true,
88
- disableDraggingCursorClassName: true,
89
- onKeyDown (event) {
90
- switch(event.key){
91
- case "PageUp":
92
- event.preventDefault();
93
- event.stopPropagation();
94
- setThumb1Value((prevValue)=>withinRange({
95
- min,
96
- max: thumb1Max,
97
- value: prevValue + jump
98
- }));
99
- break;
100
- case "PageDown":
101
- event.preventDefault();
102
- event.stopPropagation();
103
- setThumb1Value((prevValue)=>withinRange({
104
- min,
105
- max: thumb1Max,
106
- value: prevValue - jump
107
- }));
108
- break;
109
- }
110
- }
83
+ vertical
111
84
  });
112
- const [thumb2Dragging, setThumb2Dragging] = useState(false);
113
- const { onKeyDown: thumb2OnKeyDown, onMouseUp: thumb2OnMouseUp, onMouseDown: thumb2OnMouseDown, onMouseMove: thumb2OnMouseMove, onTouchStart: thumb2OnTouchStart, onTouchMove: thumb2OnTouchMove, dragPercentage: thumb2DragPercentage, draggableRef: thumb2DraggableRef } = useDraggable({
85
+ const { onKeyDown: thumb2OnKeyDown, onMouseUp: thumb2OnMouseUp, onMouseDown: thumb2OnMouseDown, onMouseMove: thumb2OnMouseMove, onTouchStart: thumb2OnTouchStart, onTouchMove: thumb2OnTouchMove, dragPercentage: thumb2DragPercentage, draggableRef: thumb2DraggableRef, dragging: thumb2Dragging } = useSliderDraggable({
86
+ jump,
114
87
  ref: thumb2Ref,
115
88
  min: thumb2Min,
116
89
  max,
@@ -118,34 +91,8 @@ export function Slider(props) {
118
91
  step,
119
92
  value: thumb2Value,
120
93
  setValue: setThumb2Value,
121
- dragging: thumb2Dragging,
122
- setDragging: setThumb2Dragging,
123
94
  vertical,
124
- disabled,
125
- withinOffsetParent: true,
126
- disableDraggingCursorClassName: true,
127
- onKeyDown (event) {
128
- switch(event.key){
129
- case "PageUp":
130
- event.preventDefault();
131
- event.stopPropagation();
132
- setThumb2Value((prevValue)=>withinRange({
133
- min: thumb2Min,
134
- max,
135
- value: prevValue + jump
136
- }));
137
- break;
138
- case "PageDown":
139
- event.preventDefault();
140
- event.stopPropagation();
141
- setThumb2Value((prevValue)=>withinRange({
142
- min: thumb2Min,
143
- max,
144
- value: prevValue - jump
145
- }));
146
- break;
147
- }
148
- }
95
+ disabled
149
96
  });
150
97
  const dragging = thumb1Dragging || thumb2Dragging;
151
98
  const sharedThumbProps = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/Slider.tsx"],"sourcesContent":["\"use client\";\nimport {\n useRef,\n useState,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\nimport { useDraggable } from \"../draggable/useDraggable.js\";\nimport { type TooltipProps } from \"../tooltip/Tooltip.js\";\nimport {\n type LabelRequiredForA11y,\n type PropsWithRef,\n type UseStateSetter,\n} from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { identity } from \"../utils/identity.js\";\nimport { withinRange } from \"../utils/withinRange.js\";\nimport { SliderContainer, type SliderAddonProps } from \"./SliderContainer.js\";\nimport {\n SliderThumb,\n type SliderThumbPresentation,\n type SliderThumbProps,\n} from \"./SliderThumb.js\";\nimport { SliderTrack } from \"./SliderTrack.js\";\nimport {\n SliderValueMarks,\n type SliderMarksOptions,\n} from \"./SliderValueMarks.js\";\nimport { getJumpValue } from \"./sliderUtils.js\";\nimport { type RangeSliderState } from \"./useRangeSlider.js\";\nimport { type SliderState, type SliderValueOptions } from \"./useSlider.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-slider-color\"?: string;\n \"--rmd-slider-active-color\"?: string;\n \"--rmd-slider-inactive-color\"?: string;\n \"--rmd-slider-size\"?: string | number;\n \"--rmd-slider-active-size\"?: string | number;\n \"--rmd-slider-inactive-size\"?: string | number;\n \"--rmd-slider-vertical-size\"?: string | number;\n \"--rmd-slider-offset-1\"?: string;\n \"--rmd-slider-offset-2\"?: string;\n \"--rmd-slider-tooltip-scale\"?: string | number;\n \"--rmd-slider-tooltip-translate\"?: string | number;\n \"--rmd-slider-mark-offset\"?: string;\n }\n}\n\nconst emptyString = (): string => \"\";\nconst noop = (): undefined => {\n // do nothing\n};\n\n/**\n * @since 2.5.0\n */\nexport interface BaseSliderProps\n extends HTMLAttributes<HTMLDivElement>,\n SliderThumbPresentation,\n SliderValueOptions,\n SliderAddonProps,\n SliderMarksOptions {\n /**\n * This can be used to apply a ref to the container element since this\n * component does not use `forwardRef`.\n */\n containerRef?: Ref<HTMLDivElement>;\n\n /**\n * The amount to jump the slider's value when the `PageUp` or `PageDown`\n * key is pressed.\n *\n * The default value is 1/10th of the range.\n *\n * @defaultValue `(numberOfSteps / 10) * step`\n */\n jump?: number;\n\n /** @defaultValue `false` */\n disabled?: boolean;\n\n /** @defaultValue `false` */\n vertical?: boolean;\n\n /**\n * This can be used to apply custom styles or a `ref` to the track element if\n * needed.\n */\n trackProps?: PropsWithRef<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;\n\n /**\n * This can be used to configure any additional tooltip props like the\n * CSS transition `classNames`, styles, etc.\n *\n * This will only be used when {@link discrete} is `true`.\n *\n * Note: The `position` will always be `\"above\"` for horizontal sliders and\n * `\"left\"` for vertical sliders.\n */\n tooltipProps?: Omit<Partial<TooltipProps>, \"position\">;\n}\n\n/**\n * @since 2.5.0\n * @since 6.0.0 Only requires `value` and `setValue` props instead of all the\n * slider controls.\n * @since 6.0.0 The `thumbLabel` and `thumbLabelledBy` props were removed. Use\n * the `aria-label` or `aria-labelledby` props instead.\n */\nexport interface SliderProps extends BaseSliderProps, SliderState {\n /**\n * Any additional props that should be provided to the thumb element. This can\n * be useful for applying additional styling.\n */\n thumbProps?: HTMLAttributes<HTMLSpanElement>;\n\n /**\n * This can be used to update the discrete slider's tooltip props.\n *\n * @example Custom Styles\n * ```tsx\n * <Slider\n * {...slider}\n * discrete\n * getTooltipProps={(value) => ({\n * className: cssUtils({\n * backgroundColor: value < 30 ? \"warning\" : undefined,\n * }),\n * })}\n * />\n * ```\n */\n getTooltipProps?: (value: number) => Partial<TooltipProps> | undefined;\n\n /**\n * This can be used to update the discrete slider's value tooltip.\n *\n * @example More Value Information\n * ```tsx\n * <Slider\n * {...slider}\n * discrete\n * getTooltipChildren={(value) => (\n * <TextIconSpacing icon={<FavoriteIcon />}>\n * {value}\n * </TextIconSpacing>\n * )}\n * />\n * ```\n *\n * This will only be used when {@link discrete} is `true`.\n *\n * @defaultValue `(value) => value`\n */\n getTooltipChildren?: (value: number) => ReactNode;\n}\n\n/**\n * @since 2.5.0\n * @since 6.0.0 Only requires `rangeValue` and `setRangeValue` props instead of\n * all the slider controls.\n * @since 6.0.0 The `thumb1Label`, `thumb1LabelledBy`, `thumb1Props`,\n * `thumb2Label`, `thumb2LabelledBy` and `thumb2Props` were renamed to\n * `minThumbLabel`, `minThumbLabelledBy`, `minThumbProps`, `maxThumbLabel`,\n * `maxThumbLabelledBy`, and `maxThumbProps` respectively.\n */\nexport interface RangeSliderProps extends BaseSliderProps, RangeSliderState {\n /**\n * Any additional props that should be provided to the min value thumb\n * element. This can be useful for applying additional styling.\n */\n minThumbProps?: HTMLAttributes<HTMLSpanElement>;\n\n /**\n * Any additional props that should be provided to the max value thumb\n * element. This can be useful for applying additional styling.\n */\n maxThumbProps?: HTMLAttributes<HTMLSpanElement>;\n\n /**\n * The `aria-label` to apply to the min value.\n *\n * Note: Either this prop or the {@link minThumbLabelledBy} are required for\n * accessibility.\n *\n * @defaultValue `\"Min\"`\n */\n minThumbLabel?: string;\n\n /**\n * Set this to an element's id that labels the min value.\n *\n * Note: Either this prop or the {@link minThumbLabel} are required for\n * accessibility.\n */\n minThumbLabelledBy?: string;\n\n /**\n * The `aria-label` to apply to the max value.\n *\n * Note: Either this prop or the {@link maxThumbLabelledBy} are required for\n * accessibility.\n *\n * @defaultValue `\"Max\"`\n */\n maxThumbLabel?: string;\n\n /**\n * Set this to an element's id that labels the max value.\n *\n * Note: Either this prop or the {@link maxThumbLabel} are required for\n * accessibility.\n */\n maxThumbLabelledBy?: string;\n\n /**\n * This can be used to update the discrete slider's tooltip props.\n *\n * @example Custom Styles\n * ```tsx\n * <Slider\n * {...slider}\n * discrete\n * getTooltipProps={(value, isFirstThumb) => ({\n * className: cssUtils({\n * backgroundColor: value < 30 && isFirstThumb ? \"warning\" : undefined,\n * }),\n * })}\n * />\n * ```\n */\n getTooltipProps?: (\n value: number,\n isFirstThumb: boolean\n ) => Partial<TooltipProps>;\n\n /**\n * This can be used to update the discrete slider's value tooltip.\n *\n * @example More Value Information\n * ```tsx\n * <Slider\n * {...rangeSlider}\n * discrete\n * getTooltipChildren={(value, isFirstThumb) => (\n * <TextIconSpacing\n * icon={isFirstThumb ? <FavoriteIcon /> : <CloseIcon /}\n * iconAfter={!isFirstValue}\n * >\n * {value}\n * </TextIconSpacing>\n * )}\n * />\n * ```\n *\n * This will only be used when {@link discrete} is `true`.\n *\n * @defaultValue `(value) => value`\n */\n getTooltipChildren?: (value: number, isFirstThumb: boolean) => ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * @example Simple Example\n * ```tsx\n * import { Form, Slider, useSlider } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * function Example(): ReactElement {\n * const slider = useSlider({\n * // these are the defaults and can be changed\n * min: 0,\n * max: 100,\n * step: 1,\n * defaultValue: 50,\n * });\n *\n * // if you need access to the current value or manually change the value\n * // yourself.\n * const { value, setValue } = slider;\n *\n * return (\n * <Form>\n * <Slider {...slider} aria-label=\"Volume\" />\n * </Form>\n * );\n * }\n * ```\n *\n * @example Range Slider Example\n * ```tsx\n * import { Fieldset, Form, Legend, Slider, useRangeSlider } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n * import { useId } from \"react\";\n *\n * function Example(): ReactElement {\n * const slider = useRangeSlider({\n * // these are the defaults and can be changed\n * min: 0,\n * max: 100,\n * step: 1,\n * defaultValue: [0, 100],\n * });\n *\n * // if you need access to the current value or manually change the value\n * // yourself.\n * const { rangeValue, setRangeValue } = slider;\n * const [minPrice, maxPrice] = rangeValue;\n *\n * return (\n * <Form>\n * <Fieldset>\n * <Legend>Price Range</Legend>\n * <Slider {...slider} />\n * </Fieldset>\n * </Form>\n * );\n * }\n * ```\n *\n * @since 2.5.0\n * @since 6.0.0 The `Slider` and `RangeSlider` have been combined into the\n * single `Slider` component and removed the `label` support.\n * @since 6.0.0 Each thumb includes an invisible `<input type=\"range\">` instead\n * of an `<input type=\"hidden\">`.\n */\nexport function Slider(props: LabelRequiredForA11y<SliderProps>): ReactElement;\nexport function Slider(props: RangeSliderProps): ReactElement;\nexport function Slider(\n props: LabelRequiredForA11y<SliderProps> | RangeSliderProps\n): ReactElement {\n const {\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n id: propId,\n min = 0,\n max = 100,\n step = 1,\n jump: propJump,\n vertical = false,\n discrete = false,\n disabled = false,\n getValueText = emptyString,\n children,\n marks = false,\n value,\n setValue,\n rangeValue,\n setRangeValue,\n trackProps,\n thumbProps,\n minThumbProps,\n minThumbLabel,\n minThumbLabelledBy,\n maxThumbProps,\n maxThumbLabel,\n maxThumbLabelledBy,\n tooltipProps,\n containerRef,\n getMarkProps = noop,\n getMarkLabelProps = noop,\n tooltipVisibility = \"auto\",\n getTooltipProps = noop,\n getTooltipChildren = identity,\n disableSmoothDragging = !!marks,\n ...remaining\n } = props as SliderProps & RangeSliderProps;\n\n const jump = getJumpValue({ min, max, step, jump: propJump });\n const isRangeSlider = typeof value !== \"number\";\n\n const thumb1Id = useEnsuredId(propId, \"slider\");\n const thumb2Id = `${thumb1Id}-2`;\n const thumb1Ref = useRef<HTMLSpanElement>(null);\n const thumb2Ref = useRef<HTMLSpanElement>(null);\n\n let thumb1Max = max;\n let thumb2Min = min;\n let thumb1Label: string | undefined;\n let thumb1LabelledBy: string | undefined;\n let thumb2Label: string | undefined;\n let thumb2LabelledBy: string | undefined;\n let thumb1Value: number;\n let thumb2Value: number;\n let setThumb1Value: UseStateSetter<number>;\n let setThumb2Value: UseStateSetter<number>;\n if (!isRangeSlider) {\n thumb1Value = value;\n setThumb1Value = setValue;\n thumb2Value = max;\n setThumb2Value = noop;\n thumb1Label = ariaLabel;\n thumb1LabelledBy = ariaLabelledBy;\n } else {\n thumb1LabelledBy = minThumbLabelledBy;\n thumb1Label = minThumbLabel || (minThumbLabelledBy ? undefined : \"Min\");\n thumb2LabelledBy = maxThumbLabelledBy;\n thumb2Label = maxThumbLabel || (maxThumbLabelledBy ? undefined : \"max\");\n\n [thumb1Value, thumb2Value] = rangeValue;\n\n thumb1Max = thumb2Value - step;\n thumb2Min = thumb1Value + step;\n\n setThumb1Value = (valueOrSetter) => {\n setRangeValue((prevRangeValue) => {\n const value =\n typeof valueOrSetter === \"number\"\n ? valueOrSetter\n : valueOrSetter(prevRangeValue[0]);\n\n return [value, prevRangeValue[1]];\n });\n };\n setThumb2Value = (valueOrSetter) => {\n setRangeValue((prevRangeValue) => {\n const value =\n typeof valueOrSetter === \"number\"\n ? valueOrSetter\n : valueOrSetter(prevRangeValue[1]);\n\n return [prevRangeValue[0], value];\n });\n };\n }\n\n const [thumb1Dragging, setThumb1Dragging] = useState(false);\n const {\n onKeyDown: thumb1OnKeyDown,\n onMouseUp: thumb1OnMouseUp,\n onMouseDown: thumb1OnMouseDown,\n onMouseMove: thumb1OnMouseMove,\n onTouchStart: thumb1OnTouchStart,\n onTouchMove: thumb1OnTouchMove,\n dragPercentage: thumb1DragPercentage,\n draggableRef: thumb1DraggableRef,\n } = useDraggable({\n ref: thumb1Ref,\n min,\n max: thumb1Max,\n rangeMax: max,\n step,\n value: thumb1Value,\n setValue: setThumb1Value,\n dragging: thumb1Dragging,\n setDragging: setThumb1Dragging,\n disabled,\n vertical,\n withinOffsetParent: true,\n disableDraggingCursorClassName: true,\n onKeyDown(event) {\n switch (event.key) {\n case \"PageUp\":\n event.preventDefault();\n event.stopPropagation();\n setThumb1Value((prevValue) =>\n withinRange({\n min,\n max: thumb1Max,\n value: prevValue + jump,\n })\n );\n break;\n case \"PageDown\":\n event.preventDefault();\n event.stopPropagation();\n setThumb1Value((prevValue) =>\n withinRange({\n min,\n max: thumb1Max,\n value: prevValue - jump,\n })\n );\n break;\n }\n },\n });\n\n const [thumb2Dragging, setThumb2Dragging] = useState(false);\n const {\n onKeyDown: thumb2OnKeyDown,\n onMouseUp: thumb2OnMouseUp,\n onMouseDown: thumb2OnMouseDown,\n onMouseMove: thumb2OnMouseMove,\n onTouchStart: thumb2OnTouchStart,\n onTouchMove: thumb2OnTouchMove,\n dragPercentage: thumb2DragPercentage,\n draggableRef: thumb2DraggableRef,\n } = useDraggable({\n ref: thumb2Ref,\n min: thumb2Min,\n max,\n rangeMin: min,\n step,\n value: thumb2Value,\n setValue: setThumb2Value,\n dragging: thumb2Dragging,\n setDragging: setThumb2Dragging,\n vertical,\n disabled,\n withinOffsetParent: true,\n disableDraggingCursorClassName: true,\n onKeyDown(event) {\n switch (event.key) {\n case \"PageUp\":\n event.preventDefault();\n event.stopPropagation();\n setThumb2Value((prevValue) =>\n withinRange({\n min: thumb2Min,\n max,\n value: prevValue + jump,\n })\n );\n break;\n case \"PageDown\":\n event.preventDefault();\n event.stopPropagation();\n setThumb2Value((prevValue) =>\n withinRange({\n min: thumb2Min,\n max,\n value: prevValue - jump,\n })\n );\n break;\n }\n },\n });\n\n const dragging = thumb1Dragging || thumb2Dragging;\n const sharedThumbProps = {\n step,\n animate: !dragging,\n discrete,\n disabled,\n vertical,\n getValueText,\n tooltipProps,\n getTooltipProps,\n getTooltipChildren,\n tooltipVisibility,\n disableSmoothDragging,\n } as const satisfies Partial<SliderThumbProps>;\n\n return (\n <SliderContainer {...remaining} ref={containerRef} vertical={vertical}>\n <SliderTrack\n {...trackProps}\n min={min}\n max={max}\n thumb1Ref={thumb1Ref}\n thumb1Value={thumb1Value}\n thumb1Dragging={!disableSmoothDragging && thumb1Dragging}\n thumb1DragPercentage={thumb1DragPercentage}\n thumb1OnMouseUp={thumb1OnMouseUp}\n thumb1OnMouseDown={thumb1OnMouseDown}\n thumb1OnMouseMove={thumb1OnMouseMove}\n thumb1OnTouchStart={thumb1OnTouchStart}\n thumb1OnTouchMove={thumb1OnTouchMove}\n thumb2Ref={thumb2Ref}\n thumb2Value={thumb2Value}\n thumb2Dragging={!disableSmoothDragging && thumb2Dragging}\n thumb2DragPercentage={thumb2DragPercentage}\n thumb2OnMouseUp={thumb2OnMouseUp}\n thumb2OnMouseDown={thumb2OnMouseDown}\n thumb2OnMouseMove={thumb2OnMouseMove}\n thumb2OnTouchStart={thumb2OnTouchStart}\n thumb2OnTouchMove={thumb2OnTouchMove}\n animate={!disableSmoothDragging && !dragging}\n disabled={disabled}\n vertical={vertical}\n isRangeSlider={isRangeSlider}\n >\n <SliderThumb\n aria-label={thumb1Label as string}\n aria-labelledby={thumb1LabelledBy}\n id={thumb1Id}\n {...thumbProps}\n {...minThumbProps}\n {...sharedThumbProps}\n ref={thumb1DraggableRef}\n min={min}\n max={thumb1Max}\n value={thumb1Value}\n index={1}\n active={thumb1Dragging}\n onChange={(event) => {\n setThumb1Value(event.currentTarget.valueAsNumber);\n }}\n onKeyDown={thumb1OnKeyDown}\n />\n {isRangeSlider && (\n <SliderThumb\n aria-label={thumb2Label as string}\n aria-labelledby={thumb2LabelledBy}\n id={thumb2Id}\n {...maxThumbProps}\n {...sharedThumbProps}\n ref={thumb2DraggableRef}\n min={thumb2Min}\n max={max}\n value={thumb2Value}\n index={2}\n active={thumb2Dragging}\n onChange={(event) => {\n setThumb2Value(event.currentTarget.valueAsNumber);\n }}\n onKeyDown={thumb2OnKeyDown}\n />\n )}\n {marks && (\n <SliderValueMarks\n min={min}\n max={max}\n step={step}\n marks={marks}\n vertical={vertical}\n thumb1Value={thumb1Value}\n thumb2Value={thumb2Value}\n isRangeSlider={isRangeSlider}\n getMarkProps={getMarkProps}\n getMarkLabelProps={getMarkLabelProps}\n />\n )}\n {children}\n </SliderTrack>\n </SliderContainer>\n );\n}\n"],"names":["useRef","useState","useDraggable","useEnsuredId","identity","withinRange","SliderContainer","SliderThumb","SliderTrack","SliderValueMarks","getJumpValue","emptyString","noop","Slider","props","ariaLabel","ariaLabelledBy","id","propId","min","max","step","jump","propJump","vertical","discrete","disabled","getValueText","children","marks","value","setValue","rangeValue","setRangeValue","trackProps","thumbProps","minThumbProps","minThumbLabel","minThumbLabelledBy","maxThumbProps","maxThumbLabel","maxThumbLabelledBy","tooltipProps","containerRef","getMarkProps","getMarkLabelProps","tooltipVisibility","getTooltipProps","getTooltipChildren","disableSmoothDragging","remaining","isRangeSlider","thumb1Id","thumb2Id","thumb1Ref","thumb2Ref","thumb1Max","thumb2Min","thumb1Label","thumb1LabelledBy","thumb2Label","thumb2LabelledBy","thumb1Value","thumb2Value","setThumb1Value","setThumb2Value","undefined","valueOrSetter","prevRangeValue","thumb1Dragging","setThumb1Dragging","onKeyDown","thumb1OnKeyDown","onMouseUp","thumb1OnMouseUp","onMouseDown","thumb1OnMouseDown","onMouseMove","thumb1OnMouseMove","onTouchStart","thumb1OnTouchStart","onTouchMove","thumb1OnTouchMove","dragPercentage","thumb1DragPercentage","draggableRef","thumb1DraggableRef","ref","rangeMax","dragging","setDragging","withinOffsetParent","disableDraggingCursorClassName","event","key","preventDefault","stopPropagation","prevValue","thumb2Dragging","setThumb2Dragging","thumb2OnKeyDown","thumb2OnMouseUp","thumb2OnMouseDown","thumb2OnMouseMove","thumb2OnTouchStart","thumb2OnTouchMove","thumb2DragPercentage","thumb2DraggableRef","rangeMin","sharedThumbProps","animate","aria-label","aria-labelledby","index","active","onChange","currentTarget","valueAsNumber"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/form/Slider.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n useRef,\n} from \"react\";\n\nimport { type TooltipProps } from \"../tooltip/Tooltip.js\";\nimport {\n type LabelRequiredForA11y,\n type PropsWithRef,\n type UseStateSetter,\n} from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { identity } from \"../utils/identity.js\";\nimport { type SliderAddonProps, SliderContainer } from \"./SliderContainer.js\";\nimport {\n SliderThumb,\n type SliderThumbPresentation,\n type SliderThumbProps,\n} from \"./SliderThumb.js\";\nimport { SliderTrack } from \"./SliderTrack.js\";\nimport {\n type SliderMarksOptions,\n SliderValueMarks,\n} from \"./SliderValueMarks.js\";\nimport { getJumpValue } from \"./sliderUtils.js\";\nimport { type RangeSliderState } from \"./useRangeSlider.js\";\nimport { type SliderState, type SliderValueOptions } from \"./useSlider.js\";\nimport { useSliderDraggable } from \"./useSliderDraggable.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-slider-color\"?: string;\n \"--rmd-slider-active-color\"?: string;\n \"--rmd-slider-inactive-color\"?: string;\n \"--rmd-slider-size\"?: string | number;\n \"--rmd-slider-active-size\"?: string | number;\n \"--rmd-slider-inactive-size\"?: string | number;\n \"--rmd-slider-vertical-size\"?: string | number;\n \"--rmd-slider-offset-1\"?: string;\n \"--rmd-slider-offset-2\"?: string;\n \"--rmd-slider-tooltip-scale\"?: string | number;\n \"--rmd-slider-tooltip-translate\"?: string | number;\n \"--rmd-slider-mark-offset\"?: string;\n }\n}\n\nconst emptyString = (): string => \"\";\nconst noop = (): undefined => {\n // do nothing\n};\n\n/**\n * @since 2.5.0\n */\nexport interface BaseSliderProps\n extends HTMLAttributes<HTMLDivElement>,\n SliderThumbPresentation,\n SliderValueOptions,\n SliderAddonProps,\n SliderMarksOptions {\n /**\n * This can be used to apply a ref to the container element since this\n * component does not use `forwardRef`.\n */\n containerRef?: Ref<HTMLDivElement>;\n\n /**\n * The amount to jump the slider's value when the `PageUp` or `PageDown`\n * key is pressed.\n *\n * The default value is 1/10th of the range.\n *\n * @defaultValue `(numberOfSteps / 10) * step`\n */\n jump?: number;\n\n /** @defaultValue `false` */\n disabled?: boolean;\n\n /** @defaultValue `false` */\n vertical?: boolean;\n\n /**\n * This can be used to apply custom styles or a `ref` to the track element if\n * needed.\n */\n trackProps?: PropsWithRef<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;\n\n /**\n * This can be used to configure any additional tooltip props like the\n * CSS transition `classNames`, styles, etc.\n *\n * This will only be used when {@link discrete} is `true`.\n *\n * Note: The `position` will always be `\"above\"` for horizontal sliders and\n * `\"left\"` for vertical sliders.\n */\n tooltipProps?: Omit<Partial<TooltipProps>, \"position\">;\n}\n\n/**\n * @since 2.5.0\n * @since 6.0.0 Only requires `value` and `setValue` props instead of all the\n * slider controls.\n * @since 6.0.0 The `thumbLabel` and `thumbLabelledBy` props were removed. Use\n * the `aria-label` or `aria-labelledby` props instead.\n */\nexport interface SliderProps extends BaseSliderProps, SliderState {\n /**\n * Any additional props that should be provided to the thumb element. This can\n * be useful for applying additional styling.\n */\n thumbProps?: HTMLAttributes<HTMLSpanElement>;\n\n /**\n * This can be used to update the discrete slider's tooltip props.\n *\n * @example Custom Styles\n * ```tsx\n * <Slider\n * {...slider}\n * discrete\n * getTooltipProps={(value) => ({\n * className: cssUtils({\n * backgroundColor: value < 30 ? \"warning\" : undefined,\n * }),\n * })}\n * />\n * ```\n */\n getTooltipProps?: (value: number) => Partial<TooltipProps> | undefined;\n\n /**\n * This can be used to update the discrete slider's value tooltip.\n *\n * @example More Value Information\n * ```tsx\n * <Slider\n * {...slider}\n * discrete\n * getTooltipChildren={(value) => (\n * <TextIconSpacing icon={<FavoriteIcon />}>\n * {value}\n * </TextIconSpacing>\n * )}\n * />\n * ```\n *\n * This will only be used when {@link discrete} is `true`.\n *\n * @defaultValue `(value) => value`\n */\n getTooltipChildren?: (value: number) => ReactNode;\n}\n\n/**\n * @since 2.5.0\n * @since 6.0.0 Only requires `rangeValue` and `setRangeValue` props instead of\n * all the slider controls.\n * @since 6.0.0 The `thumb1Label`, `thumb1LabelledBy`, `thumb1Props`,\n * `thumb2Label`, `thumb2LabelledBy` and `thumb2Props` were renamed to\n * `minThumbLabel`, `minThumbLabelledBy`, `minThumbProps`, `maxThumbLabel`,\n * `maxThumbLabelledBy`, and `maxThumbProps` respectively.\n */\nexport interface RangeSliderProps extends BaseSliderProps, RangeSliderState {\n /**\n * Any additional props that should be provided to the min value thumb\n * element. This can be useful for applying additional styling.\n */\n minThumbProps?: HTMLAttributes<HTMLSpanElement>;\n\n /**\n * Any additional props that should be provided to the max value thumb\n * element. This can be useful for applying additional styling.\n */\n maxThumbProps?: HTMLAttributes<HTMLSpanElement>;\n\n /**\n * The `aria-label` to apply to the min value.\n *\n * Note: Either this prop or the {@link minThumbLabelledBy} are required for\n * accessibility.\n *\n * @defaultValue `\"Min\"`\n */\n minThumbLabel?: string;\n\n /**\n * Set this to an element's id that labels the min value.\n *\n * Note: Either this prop or the {@link minThumbLabel} are required for\n * accessibility.\n */\n minThumbLabelledBy?: string;\n\n /**\n * The `aria-label` to apply to the max value.\n *\n * Note: Either this prop or the {@link maxThumbLabelledBy} are required for\n * accessibility.\n *\n * @defaultValue `\"Max\"`\n */\n maxThumbLabel?: string;\n\n /**\n * Set this to an element's id that labels the max value.\n *\n * Note: Either this prop or the {@link maxThumbLabel} are required for\n * accessibility.\n */\n maxThumbLabelledBy?: string;\n\n /**\n * This can be used to update the discrete slider's tooltip props.\n *\n * @example Custom Styles\n * ```tsx\n * <Slider\n * {...slider}\n * discrete\n * getTooltipProps={(value, isFirstThumb) => ({\n * className: cssUtils({\n * backgroundColor: value < 30 && isFirstThumb ? \"warning\" : undefined,\n * }),\n * })}\n * />\n * ```\n */\n getTooltipProps?: (\n value: number,\n isFirstThumb: boolean\n ) => Partial<TooltipProps>;\n\n /**\n * This can be used to update the discrete slider's value tooltip.\n *\n * @example More Value Information\n * ```tsx\n * <Slider\n * {...rangeSlider}\n * discrete\n * getTooltipChildren={(value, isFirstThumb) => (\n * <TextIconSpacing\n * icon={isFirstThumb ? <FavoriteIcon /> : <CloseIcon /}\n * iconAfter={!isFirstValue}\n * >\n * {value}\n * </TextIconSpacing>\n * )}\n * />\n * ```\n *\n * This will only be used when {@link discrete} is `true`.\n *\n * @defaultValue `(value) => value`\n */\n getTooltipChildren?: (value: number, isFirstThumb: boolean) => ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * @example Simple Example\n * ```tsx\n * import { Form, Slider, useSlider } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * function Example(): ReactElement {\n * const slider = useSlider({\n * // these are the defaults and can be changed\n * min: 0,\n * max: 100,\n * step: 1,\n * defaultValue: 50,\n * });\n *\n * // if you need access to the current value or manually change the value\n * // yourself.\n * const { value, setValue } = slider;\n *\n * return (\n * <Form>\n * <Slider {...slider} aria-label=\"Volume\" />\n * </Form>\n * );\n * }\n * ```\n *\n * @example Range Slider Example\n * ```tsx\n * import { Fieldset, Form, Legend, Slider, useRangeSlider } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n * import { useId } from \"react\";\n *\n * function Example(): ReactElement {\n * const slider = useRangeSlider({\n * // these are the defaults and can be changed\n * min: 0,\n * max: 100,\n * step: 1,\n * defaultValue: [0, 100],\n * });\n *\n * // if you need access to the current value or manually change the value\n * // yourself.\n * const { rangeValue, setRangeValue } = slider;\n * const [minPrice, maxPrice] = rangeValue;\n *\n * return (\n * <Form>\n * <Fieldset>\n * <Legend>Price Range</Legend>\n * <Slider {...slider} />\n * </Fieldset>\n * </Form>\n * );\n * }\n * ```\n *\n * @since 2.5.0\n * @since 6.0.0 The `Slider` and `RangeSlider` have been combined into the\n * single `Slider` component and removed the `label` support.\n * @since 6.0.0 Each thumb includes an invisible `<input type=\"range\">` instead\n * of an `<input type=\"hidden\">`.\n */\nexport function Slider(props: LabelRequiredForA11y<SliderProps>): ReactElement;\nexport function Slider(props: RangeSliderProps): ReactElement;\nexport function Slider(\n props: LabelRequiredForA11y<SliderProps> | RangeSliderProps\n): ReactElement {\n const {\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n id: propId,\n min = 0,\n max = 100,\n step = 1,\n jump: propJump,\n vertical = false,\n discrete = false,\n disabled = false,\n getValueText = emptyString,\n children,\n marks = false,\n value,\n setValue,\n rangeValue,\n setRangeValue,\n trackProps,\n thumbProps,\n minThumbProps,\n minThumbLabel,\n minThumbLabelledBy,\n maxThumbProps,\n maxThumbLabel,\n maxThumbLabelledBy,\n tooltipProps,\n containerRef,\n getMarkProps = noop,\n getMarkLabelProps = noop,\n tooltipVisibility = \"auto\",\n getTooltipProps = noop,\n getTooltipChildren = identity,\n disableSmoothDragging = !!marks,\n ...remaining\n } = props as SliderProps & RangeSliderProps;\n\n const jump = getJumpValue({ min, max, step, jump: propJump });\n const isRangeSlider = typeof value !== \"number\";\n\n const thumb1Id = useEnsuredId(propId, \"slider\");\n const thumb2Id = `${thumb1Id}-2`;\n const thumb1Ref = useRef<HTMLSpanElement>(null);\n const thumb2Ref = useRef<HTMLSpanElement>(null);\n\n let thumb1Max = max;\n let thumb2Min = min;\n let thumb1Label: string | undefined;\n let thumb1LabelledBy: string | undefined;\n let thumb2Label: string | undefined;\n let thumb2LabelledBy: string | undefined;\n let thumb1Value: number;\n let thumb2Value: number;\n let setThumb1Value: UseStateSetter<number>;\n let setThumb2Value: UseStateSetter<number>;\n if (!isRangeSlider) {\n thumb1Value = value;\n setThumb1Value = setValue;\n thumb2Value = max;\n setThumb2Value = noop;\n thumb1Label = ariaLabel;\n thumb1LabelledBy = ariaLabelledBy;\n } else {\n thumb1LabelledBy = minThumbLabelledBy;\n thumb1Label = minThumbLabel || (minThumbLabelledBy ? undefined : \"Min\");\n thumb2LabelledBy = maxThumbLabelledBy;\n thumb2Label = maxThumbLabel || (maxThumbLabelledBy ? undefined : \"Max\");\n\n [thumb1Value, thumb2Value] = rangeValue;\n\n thumb1Max = thumb2Value - step;\n thumb2Min = thumb1Value + step;\n\n setThumb1Value = (valueOrSetter) => {\n setRangeValue((prevRangeValue) => {\n const value =\n typeof valueOrSetter === \"number\"\n ? valueOrSetter\n : valueOrSetter(prevRangeValue[0]);\n\n return [value, prevRangeValue[1]];\n });\n };\n setThumb2Value = (valueOrSetter) => {\n setRangeValue((prevRangeValue) => {\n const value =\n typeof valueOrSetter === \"number\"\n ? valueOrSetter\n : valueOrSetter(prevRangeValue[1]);\n\n return [prevRangeValue[0], value];\n });\n };\n }\n\n const {\n onKeyDown: thumb1OnKeyDown,\n onMouseUp: thumb1OnMouseUp,\n onMouseDown: thumb1OnMouseDown,\n onMouseMove: thumb1OnMouseMove,\n onTouchStart: thumb1OnTouchStart,\n onTouchMove: thumb1OnTouchMove,\n dragPercentage: thumb1DragPercentage,\n draggableRef: thumb1DraggableRef,\n dragging: thumb1Dragging,\n } = useSliderDraggable({\n jump,\n ref: thumb1Ref,\n min,\n max: thumb1Max,\n rangeMax: max,\n step,\n value: thumb1Value,\n setValue: setThumb1Value,\n disabled,\n vertical,\n });\n\n const {\n onKeyDown: thumb2OnKeyDown,\n onMouseUp: thumb2OnMouseUp,\n onMouseDown: thumb2OnMouseDown,\n onMouseMove: thumb2OnMouseMove,\n onTouchStart: thumb2OnTouchStart,\n onTouchMove: thumb2OnTouchMove,\n dragPercentage: thumb2DragPercentage,\n draggableRef: thumb2DraggableRef,\n dragging: thumb2Dragging,\n } = useSliderDraggable({\n jump,\n ref: thumb2Ref,\n min: thumb2Min,\n max,\n rangeMin: min,\n step,\n value: thumb2Value,\n setValue: setThumb2Value,\n vertical,\n disabled,\n });\n\n const dragging = thumb1Dragging || thumb2Dragging;\n const sharedThumbProps = {\n step,\n animate: !dragging,\n discrete,\n disabled,\n vertical,\n getValueText,\n tooltipProps,\n getTooltipProps,\n getTooltipChildren,\n tooltipVisibility,\n disableSmoothDragging,\n } as const satisfies Partial<SliderThumbProps>;\n\n return (\n <SliderContainer {...remaining} ref={containerRef} vertical={vertical}>\n <SliderTrack\n {...trackProps}\n min={min}\n max={max}\n thumb1Ref={thumb1Ref}\n thumb1Value={thumb1Value}\n thumb1Dragging={!disableSmoothDragging && thumb1Dragging}\n thumb1DragPercentage={thumb1DragPercentage}\n thumb1OnMouseUp={thumb1OnMouseUp}\n thumb1OnMouseDown={thumb1OnMouseDown}\n thumb1OnMouseMove={thumb1OnMouseMove}\n thumb1OnTouchStart={thumb1OnTouchStart}\n thumb1OnTouchMove={thumb1OnTouchMove}\n thumb2Ref={thumb2Ref}\n thumb2Value={thumb2Value}\n thumb2Dragging={!disableSmoothDragging && thumb2Dragging}\n thumb2DragPercentage={thumb2DragPercentage}\n thumb2OnMouseUp={thumb2OnMouseUp}\n thumb2OnMouseDown={thumb2OnMouseDown}\n thumb2OnMouseMove={thumb2OnMouseMove}\n thumb2OnTouchStart={thumb2OnTouchStart}\n thumb2OnTouchMove={thumb2OnTouchMove}\n animate={!disableSmoothDragging && !dragging}\n disabled={disabled}\n vertical={vertical}\n isRangeSlider={isRangeSlider}\n >\n <SliderThumb\n aria-label={thumb1Label as string}\n aria-labelledby={thumb1LabelledBy}\n id={thumb1Id}\n {...thumbProps}\n {...minThumbProps}\n {...sharedThumbProps}\n ref={thumb1DraggableRef}\n min={min}\n max={thumb1Max}\n value={thumb1Value}\n index={1}\n active={thumb1Dragging}\n onChange={(event) => {\n setThumb1Value(event.currentTarget.valueAsNumber);\n }}\n onKeyDown={thumb1OnKeyDown}\n />\n {isRangeSlider && (\n <SliderThumb\n aria-label={thumb2Label as string}\n aria-labelledby={thumb2LabelledBy}\n id={thumb2Id}\n {...maxThumbProps}\n {...sharedThumbProps}\n ref={thumb2DraggableRef}\n min={thumb2Min}\n max={max}\n value={thumb2Value}\n index={2}\n active={thumb2Dragging}\n onChange={(event) => {\n setThumb2Value(event.currentTarget.valueAsNumber);\n }}\n onKeyDown={thumb2OnKeyDown}\n />\n )}\n {marks && (\n <SliderValueMarks\n min={min}\n max={max}\n step={step}\n marks={marks}\n vertical={vertical}\n thumb1Value={thumb1Value}\n thumb2Value={thumb2Value}\n isRangeSlider={isRangeSlider}\n getMarkProps={getMarkProps}\n getMarkLabelProps={getMarkLabelProps}\n />\n )}\n {children}\n </SliderTrack>\n </SliderContainer>\n );\n}\n"],"names":["useRef","useEnsuredId","identity","SliderContainer","SliderThumb","SliderTrack","SliderValueMarks","getJumpValue","useSliderDraggable","emptyString","noop","Slider","props","ariaLabel","ariaLabelledBy","id","propId","min","max","step","jump","propJump","vertical","discrete","disabled","getValueText","children","marks","value","setValue","rangeValue","setRangeValue","trackProps","thumbProps","minThumbProps","minThumbLabel","minThumbLabelledBy","maxThumbProps","maxThumbLabel","maxThumbLabelledBy","tooltipProps","containerRef","getMarkProps","getMarkLabelProps","tooltipVisibility","getTooltipProps","getTooltipChildren","disableSmoothDragging","remaining","isRangeSlider","thumb1Id","thumb2Id","thumb1Ref","thumb2Ref","thumb1Max","thumb2Min","thumb1Label","thumb1LabelledBy","thumb2Label","thumb2LabelledBy","thumb1Value","thumb2Value","setThumb1Value","setThumb2Value","undefined","valueOrSetter","prevRangeValue","onKeyDown","thumb1OnKeyDown","onMouseUp","thumb1OnMouseUp","onMouseDown","thumb1OnMouseDown","onMouseMove","thumb1OnMouseMove","onTouchStart","thumb1OnTouchStart","onTouchMove","thumb1OnTouchMove","dragPercentage","thumb1DragPercentage","draggableRef","thumb1DraggableRef","dragging","thumb1Dragging","ref","rangeMax","thumb2OnKeyDown","thumb2OnMouseUp","thumb2OnMouseDown","thumb2OnMouseMove","thumb2OnTouchStart","thumb2OnTouchMove","thumb2DragPercentage","thumb2DraggableRef","thumb2Dragging","rangeMin","sharedThumbProps","animate","aria-label","aria-labelledby","index","active","onChange","event","currentTarget","valueAsNumber"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/SliderContainer.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { forwardRef, type HTMLAttributes, type ReactNode } from \"react\";\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-slider-container\");\n\n/**\n * @since 2.5.0\n * @since 6.0.0 Renamed from `SliderAddons` to `SliderContainerAddonProps`\n */\nexport interface SliderAddonProps {\n /**\n * An optional addon to render before the slider's track. This can be anything\n * and will be wrapped in the `TextIconSpacing` component.\n *\n * When the `vertical` prop is enabled, the addon will appear underneath the\n * track.\n */\n beforeAddon?: ReactNode;\n\n /**\n * An optional addon to render after the slider's track. This can be anything\n * and will be wrapped in the `TextIconSpacing` component.\n *\n * When the `vertical` prop is enabled, the addon will appear above the track.\n */\n afterAddon?: ReactNode;\n}\n\n/**\n * @internal\n * @since 2.5.0\n * @since 6.0.0 Removed the `label` support since you'll generally want to use\n * a `Fieldset` instead.\n */\nexport interface SliderContainerProps\n extends HTMLAttributes<HTMLDivElement>,\n SliderAddonProps {\n vertical: boolean;\n}\n\n/**\n * The `SliderContainer` component is mostly an internal component that is\n * built-in to the `Slider` and `RangeSlider` components to add addons to the\n * left or right of the `SliderTrack`. When vertical, it will add addons to the\n * bottom or top instead.\n *\n * @internal\n * @since 2.5.0\n * @since 6.0.0 Removed the `label` support since you'll generally want to use\n * a `Fieldset` instead.\n */\nexport const SliderContainer = forwardRef<HTMLDivElement, SliderContainerProps>(\n function SliderContainer(props, ref) {\n const {\n className,\n children,\n beforeAddon,\n afterAddon,\n vertical,\n ...remaining\n } = props;\n\n return (\n <div\n {...remaining}\n ref={ref}\n className={cnb(\n styles({\n h: !vertical,\n \"pad-left\": !vertical && !beforeAddon,\n \"pad-right\": !vertical && !afterAddon,\n v: vertical,\n \"pad-bottom\": vertical && !beforeAddon,\n \"pad-top\": vertical && !afterAddon,\n }),\n className\n )}\n >\n {beforeAddon}\n {children}\n {afterAddon}\n </div>\n );\n }\n);\n"],"names":["cnb","forwardRef","bem","styles","SliderContainer","props","ref","className","children","beforeAddon","afterAddon","vertical","remaining","div","h","v"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,UAAU,QAA6C,QAAQ;AACxE,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAqCnB;;;;;;;;;;CAUC,GACD,OAAO,MAAME,gCAAkBH,WAC7B,SAASG,gBAAgBC,KAAK,EAAEC,GAAG;IACjC,MAAM,EACJC,SAAS,EACTC,QAAQ,EACRC,WAAW,EACXC,UAAU,EACVC,QAAQ,EACR,GAAGC,WACJ,GAAGP;IAEJ,qBACE,MAACQ;QACE,GAAGD,SAAS;QACbN,KAAKA;QACLC,WAAWP,IACTG,OAAO;YACLW,GAAG,CAACH;YACJ,YAAY,CAACA,YAAY,CAACF;YAC1B,aAAa,CAACE,YAAY,CAACD;YAC3BK,GAAGJ;YACH,cAAcA,YAAY,CAACF;YAC3B,WAAWE,YAAY,CAACD;QAC1B,IACAH;;YAGDE;YACAD;YACAE;;;AAGP,GACA"}
1
+ {"version":3,"sources":["../../src/form/SliderContainer.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { type HTMLAttributes, type ReactNode, forwardRef } from \"react\";\n\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-slider-container\");\n\n/**\n * @since 2.5.0\n * @since 6.0.0 Renamed from `SliderAddons` to `SliderContainerAddonProps`\n */\nexport interface SliderAddonProps {\n /**\n * An optional addon to render before the slider's track. This can be anything\n * and will be wrapped in the `TextIconSpacing` component.\n *\n * When the `vertical` prop is enabled, the addon will appear underneath the\n * track.\n */\n beforeAddon?: ReactNode;\n\n /**\n * An optional addon to render after the slider's track. This can be anything\n * and will be wrapped in the `TextIconSpacing` component.\n *\n * When the `vertical` prop is enabled, the addon will appear above the track.\n */\n afterAddon?: ReactNode;\n}\n\n/**\n * @internal\n * @since 2.5.0\n * @since 6.0.0 Removed the `label` support since you'll generally want to use\n * a `Fieldset` instead.\n */\nexport interface SliderContainerProps\n extends HTMLAttributes<HTMLDivElement>,\n SliderAddonProps {\n vertical: boolean;\n}\n\n/**\n * The `SliderContainer` component is mostly an internal component that is\n * built-in to the `Slider` and `RangeSlider` components to add addons to the\n * left or right of the `SliderTrack`. When vertical, it will add addons to the\n * bottom or top instead.\n *\n * @internal\n * @since 2.5.0\n * @since 6.0.0 Removed the `label` support since you'll generally want to use\n * a `Fieldset` instead.\n */\nexport const SliderContainer = forwardRef<HTMLDivElement, SliderContainerProps>(\n function SliderContainer(props, ref) {\n const {\n className,\n children,\n beforeAddon,\n afterAddon,\n vertical,\n ...remaining\n } = props;\n\n return (\n <div\n {...remaining}\n ref={ref}\n className={cnb(\n styles({\n h: !vertical,\n \"pad-left\": !vertical && !beforeAddon,\n \"pad-right\": !vertical && !afterAddon,\n v: vertical,\n \"pad-bottom\": vertical && !beforeAddon,\n \"pad-top\": vertical && !afterAddon,\n }),\n className\n )}\n >\n {beforeAddon}\n {children}\n {afterAddon}\n </div>\n );\n }\n);\n"],"names":["cnb","forwardRef","bem","styles","SliderContainer","props","ref","className","children","beforeAddon","afterAddon","vertical","remaining","div","h","v"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAA8CC,UAAU,QAAQ,QAAQ;AAExE,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAqCnB;;;;;;;;;;CAUC,GACD,OAAO,MAAME,gCAAkBH,WAC7B,SAASG,gBAAgBC,KAAK,EAAEC,GAAG;IACjC,MAAM,EACJC,SAAS,EACTC,QAAQ,EACRC,WAAW,EACXC,UAAU,EACVC,QAAQ,EACR,GAAGC,WACJ,GAAGP;IAEJ,qBACE,MAACQ;QACE,GAAGD,SAAS;QACbN,KAAKA;QACLC,WAAWP,IACTG,OAAO;YACLW,GAAG,CAACH;YACJ,YAAY,CAACA,YAAY,CAACF;YAC1B,aAAa,CAACE,YAAY,CAACD;YAC3BK,GAAGJ;YACH,cAAcA,YAAY,CAACF;YAC3B,WAAWE,YAAY,CAACD;QAC1B,IACAH;;YAGDE;YACAD;YACAE;;;AAGP,GACA"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/SliderMark.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { type HTMLAttributes, type ReactElement } from \"react\";\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-slider-mark\");\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport interface SliderMarkProps extends HTMLAttributes<HTMLSpanElement> {\n active: boolean;\n offset: string;\n vertical: boolean;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport function SliderMark(props: SliderMarkProps): ReactElement {\n const { active, offset, vertical, style, className, ...remaining } = props;\n\n return (\n <span\n {...remaining}\n style={{ ...style, \"--rmd-slider-mark-offset\": offset }}\n className={cnb(\n styles({\n active,\n inactive: !active,\n h: !vertical,\n v: vertical,\n }),\n className\n )}\n />\n );\n}\n"],"names":["cnb","bem","styles","SliderMark","props","active","offset","vertical","style","className","remaining","span","inactive","h","v"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAYnB;;;CAGC,GACD,OAAO,SAASE,WAAWC,KAAsB;IAC/C,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,SAAS,EAAE,GAAGC,WAAW,GAAGN;IAErE,qBACE,KAACO;QACE,GAAGD,SAAS;QACbF,OAAO;YAAE,GAAGA,KAAK;YAAE,4BAA4BF;QAAO;QACtDG,WAAWT,IACTE,OAAO;YACLG;YACAO,UAAU,CAACP;YACXQ,GAAG,CAACN;YACJO,GAAGP;QACL,IACAE;;AAIR"}
1
+ {"version":3,"sources":["../../src/form/SliderMark.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { type HTMLAttributes, type ReactElement } from \"react\";\n\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-slider-mark\");\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport interface SliderMarkProps extends HTMLAttributes<HTMLSpanElement> {\n active: boolean;\n offset: string;\n vertical: boolean;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport function SliderMark(props: SliderMarkProps): ReactElement {\n const { active, offset, vertical, style, className, ...remaining } = props;\n\n return (\n <span\n {...remaining}\n style={{ ...style, \"--rmd-slider-mark-offset\": offset }}\n className={cnb(\n styles({\n active,\n inactive: !active,\n h: !vertical,\n v: vertical,\n }),\n className\n )}\n />\n );\n}\n"],"names":["cnb","bem","styles","SliderMark","props","active","offset","vertical","style","className","remaining","span","inactive","h","v"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAGhC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAYnB;;;CAGC,GACD,OAAO,SAASE,WAAWC,KAAsB;IAC/C,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,SAAS,EAAE,GAAGC,WAAW,GAAGN;IAErE,qBACE,KAACO;QACE,GAAGD,SAAS;QACbF,OAAO;YAAE,GAAGA,KAAK;YAAE,4BAA4BF;QAAO;QACtDG,WAAWT,IACTE,OAAO;YACLG;YACAO,UAAU,CAACP;YACXQ,GAAG,CAACN;YACJO,GAAGP;QACL,IACAE;;AAIR"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/SliderMarkLabel.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { type ReactElement } from \"react\";\nimport {\n Typography,\n type CustomTypographyComponent,\n type TypographyProps,\n} from \"../typography/Typography.js\";\nimport { type TypographyType } from \"../typography/typographyStyles.js\";\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-slider-mark-label\");\n\n/**\n * @since 6.0.0\n */\nexport interface CustomizableSliderMarkLabelProps extends TypographyProps {\n /** @defaultValue `\"span\"` */\n as?: CustomTypographyComponent;\n\n /** @defaultValue `\"body-2\"` */\n type?: TypographyType;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport interface SliderMarkLabelProps extends CustomizableSliderMarkLabelProps {\n offset: string;\n vertical: boolean;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport function SliderMarkLabel(props: SliderMarkLabelProps): ReactElement {\n const {\n as = \"span\",\n type = \"body-2\",\n offset,\n vertical,\n style,\n className,\n children,\n ...remaining\n } = props;\n\n return (\n <Typography\n {...remaining}\n as={as}\n type={type}\n style={{ ...style, \"--rmd-slider-mark-offset\": offset }}\n className={cnb(styles({ h: !vertical, v: vertical }), className)}\n >\n {children}\n </Typography>\n );\n}\n"],"names":["cnb","Typography","bem","styles","SliderMarkLabel","props","as","type","offset","vertical","style","className","children","remaining","h","v"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SACEC,UAAU,QAGL,8BAA8B;AAErC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAsBnB;;;CAGC,GACD,OAAO,SAASE,gBAAgBC,KAA2B;IACzD,MAAM,EACJC,KAAK,MAAM,EACXC,OAAO,QAAQ,EACfC,MAAM,EACNC,QAAQ,EACRC,KAAK,EACLC,SAAS,EACTC,QAAQ,EACR,GAAGC,WACJ,GAAGR;IAEJ,qBACE,KAACJ;QACE,GAAGY,SAAS;QACbP,IAAIA;QACJC,MAAMA;QACNG,OAAO;YAAE,GAAGA,KAAK;YAAE,4BAA4BF;QAAO;QACtDG,WAAWX,IAAIG,OAAO;YAAEW,GAAG,CAACL;YAAUM,GAAGN;QAAS,IAAIE;kBAErDC;;AAGP"}
1
+ {"version":3,"sources":["../../src/form/SliderMarkLabel.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { type ReactElement } from \"react\";\n\nimport {\n type CustomTypographyComponent,\n Typography,\n type TypographyProps,\n} from \"../typography/Typography.js\";\nimport { type TypographyType } from \"../typography/typographyStyles.js\";\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-slider-mark-label\");\n\n/**\n * @since 6.0.0\n */\nexport interface CustomizableSliderMarkLabelProps extends TypographyProps {\n /** @defaultValue `\"span\"` */\n as?: CustomTypographyComponent;\n\n /** @defaultValue `\"body-2\"` */\n type?: TypographyType;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport interface SliderMarkLabelProps extends CustomizableSliderMarkLabelProps {\n offset: string;\n vertical: boolean;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport function SliderMarkLabel(props: SliderMarkLabelProps): ReactElement {\n const {\n as = \"span\",\n type = \"body-2\",\n offset,\n vertical,\n style,\n className,\n children,\n ...remaining\n } = props;\n\n return (\n <Typography\n {...remaining}\n as={as}\n type={type}\n style={{ ...style, \"--rmd-slider-mark-offset\": offset }}\n className={cnb(styles({ h: !vertical, v: vertical }), className)}\n >\n {children}\n </Typography>\n );\n}\n"],"names":["cnb","Typography","bem","styles","SliderMarkLabel","props","as","type","offset","vertical","style","className","children","remaining","h","v"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAGhC,SAEEC,UAAU,QAEL,8BAA8B;AAErC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAsBnB;;;CAGC,GACD,OAAO,SAASE,gBAAgBC,KAA2B;IACzD,MAAM,EACJC,KAAK,MAAM,EACXC,OAAO,QAAQ,EACfC,MAAM,EACNC,QAAQ,EACRC,KAAK,EACLC,SAAS,EACTC,QAAQ,EACR,GAAGC,WACJ,GAAGR;IAEJ,qBACE,KAACJ;QACE,GAAGY,SAAS;QACbP,IAAIA;QACJC,MAAMA;QACNG,OAAO;YAAE,GAAGA,KAAK;YAAE,4BAA4BF;QAAO;QACtDG,WAAWX,IAAIG,OAAO;YAAEW,GAAG,CAACL;YAAUM,GAAGN;QAAS,IAAIE;kBAErDC;;AAGP"}
@@ -152,6 +152,7 @@ const noop = ()=>{
152
152
  max: max,
153
153
  step: step,
154
154
  value: value,
155
+ disabled: disabled,
155
156
  tabIndex: -1,
156
157
  onChange: onChange,
157
158
  className: styles("input")
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/SliderThumb.tsx"],"sourcesContent":["\"use client\";\nimport { cnb } from \"cnbuilder\";\nimport {\n forwardRef,\n useEffect,\n useState,\n type ChangeEventHandler,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { useUserInteractionMode } from \"../interaction/UserInteractionModeProvider.js\";\nimport { type TooltipProps } from \"../tooltip/Tooltip.js\";\nimport { type LabelRequiredForA11y } from \"../types.js\";\nimport { bem } from \"../utils/bem.js\";\nimport { SliderValueTooltip } from \"./SliderValueTooltip.js\";\nimport { type SliderValueOptions } from \"./useSlider.js\";\n\nconst styles = bem(\"rmd-slider-thumb\");\n\nconst noop = (): void => {\n // do nothing\n};\n\n/**\n * @internal\n * @since 6.0.0\n */\ninterface SliderThumbClassNameOptions {\n className?: string;\n\n mask?: boolean;\n index: 1 | 2;\n active: boolean;\n animate: boolean;\n vertical: boolean;\n disabled: boolean;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nfunction sliderThumb(options: SliderThumbClassNameOptions): string {\n const { className, mask, index, active, animate, disabled, vertical } =\n options;\n\n const isSecondThumb = index === 2;\n return cnb(\n styles({\n h: !vertical,\n h1: !vertical && !isSecondThumb,\n h2: !vertical && isSecondThumb,\n v: vertical,\n v1: vertical && !isSecondThumb,\n v2: vertical && isSecondThumb,\n mask,\n \"mask-h\": mask && !vertical,\n \"mask-v\": mask && vertical,\n active,\n animate,\n disabled,\n \"disabled-h\": disabled && !vertical && !mask,\n \"disabled-v\": disabled && vertical && !mask,\n }),\n className\n );\n}\n\n/**\n * @since 6.0.0\n */\nexport type SliderTooltipVisibility = \"auto\" | \"hover\" | \"always\";\n\n/**\n * @since 2.5.0\n */\nexport interface SliderThumbPresentation {\n /**\n * Boolean if the slider should act as a discrete slider which will render a\n * tooltip above the thumb while dragging to visualize the current value for\n * the slider.\n *\n * @defaultValue `false`\n */\n discrete?: boolean;\n\n /**\n * A function that is used to help with accessibility by creating a better\n * value string if just a number isn't representative enough of your range.\n *\n * Example:\n *\n * ```tsx\n * const [value, controls] = useSlider(0, {\n * // format to be `$100`, etc\n * getValueText: value => `$${value}`,\n * });\n *\n * return <Slider baseId=\"price-slider\" label=\"Price\" {...controls} />;\n * ```\n *\n * @defaultValue `() => \"\"`\n */\n getValueText?: (value: number) => string;\n\n /**\n * Set this to `true` if the slider's thumb position should only update when\n * the user has dragged to the next value instead of with the mouse.\n *\n * @see {@link marks}\n * @defaultValue `!!marks`\n */\n disableSmoothDragging?: boolean;\n\n /**\n * The discrete slider's value tooltip will only become visible when:\n *\n * - `\"auto\"` - the user is dragging with touch/mouse or focused with a keyboard\n * - `\"hover\"` - the behavior of `\"auto\"` plus while hovering the thumb with a mouse\n * - `\"always\"` - ... always\n *\n * This only applies when the {@link discrete} prop is `true`.\n *\n * @defaultValue `\"auto\"`\n */\n tooltipVisibility?: SliderTooltipVisibility;\n}\n\n/**\n * @internal\n * @since 2.5.0\n * @since 6.0.0 Internal only component.\n */\nexport interface SliderThumbProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, \"onChange\">,\n Required<SliderValueOptions>,\n Required<SliderThumbPresentation> {\n id: string;\n name?: string;\n value: number;\n index: 1 | 2;\n active: boolean;\n animate: boolean;\n disabled: boolean;\n vertical: boolean;\n onChange: ChangeEventHandler<HTMLInputElement>;\n tooltipProps?: Partial<TooltipProps>;\n getTooltipProps: (\n value: number,\n isFirstThumb: boolean\n ) => Partial<TooltipProps> | undefined;\n getTooltipChildren: (value: number, isFirstThumb: boolean) => ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * @internal\n * @since 2.5.0\n * @since 6.0.0 Internal only component.\n */\nexport const SliderThumb = forwardRef<\n HTMLSpanElement,\n LabelRequiredForA11y<SliderThumbProps>\n>(function SliderThumb(props, ref) {\n const {\n id,\n min,\n max,\n name,\n value,\n onChange,\n index,\n getValueText,\n step,\n active,\n animate,\n disabled,\n vertical,\n discrete,\n tabIndex = disabled ? -1 : 0,\n className,\n onFocus = noop,\n onKeyDown = noop,\n onMouseEnter = noop,\n onMouseLeave = noop,\n tooltipProps,\n getTooltipProps,\n getTooltipChildren,\n disableSmoothDragging,\n tooltipVisibility = \"auto\",\n ...remaining\n } = props;\n const { \"aria-label\": ariaLabel, \"aria-labelledby\": ariaLabelledBy } = props;\n\n const isFirstThumb = index === 1;\n const mode = useUserInteractionMode();\n const keyboard = mode === \"keyboard\";\n const touch = mode === \"touch\";\n const [mouseVisible, setMouseVisible] = useState(false);\n const [keyboardVisible, setKeyboardVisible] = useState(false);\n useEffect(() => {\n if (disabled || !discrete) {\n setKeyboardVisible(false);\n return;\n }\n\n // if the mode changes away from keyboard, need to disable the keyboard\n // state\n setKeyboardVisible((prevVisible) => prevVisible && mode === \"keyboard\");\n }, [disabled, discrete, mode]);\n useEffect(() => {\n if (disabled || !discrete) {\n setMouseVisible(false);\n return;\n }\n\n setMouseVisible((prevVisible) => prevVisible && mode !== \"touch\");\n }, [disabled, discrete, mode]);\n useEffect(() => {\n if (!keyboardVisible) {\n return;\n }\n\n const callback = (): void => {\n setKeyboardVisible(false);\n };\n\n window.addEventListener(\"blur\", callback, true);\n return () => {\n window.removeEventListener(\"blur\", callback);\n };\n }, [keyboardVisible]);\n\n const classNameOptions = {\n index,\n active,\n animate: !disableSmoothDragging && animate,\n disabled,\n vertical,\n className,\n } as const;\n\n return (\n <>\n {disabled && (\n <span\n className={sliderThumb({\n ...classNameOptions,\n mask: true,\n })}\n />\n )}\n <span\n {...remaining}\n id={id}\n ref={ref}\n role=\"slider\"\n aria-disabled={disabled || undefined}\n aria-orientation={vertical ? \"vertical\" : undefined}\n aria-valuemax={max}\n aria-valuemin={min}\n aria-valuenow={value}\n aria-valuetext={getValueText(value) || undefined}\n tabIndex={tabIndex}\n className={sliderThumb(classNameOptions)}\n onFocus={(event) => {\n onFocus(event);\n\n if (discrete && keyboard) {\n setKeyboardVisible(true);\n }\n }}\n onKeyDown={(event) => {\n onKeyDown(event);\n\n // this allows the tooltip to be visible when switching from mouse to\n // keyboard\n if (discrete && event.key !== \"Tab\") {\n setKeyboardVisible(true);\n }\n }}\n onMouseEnter={(event) => {\n onMouseEnter(event);\n if (discrete && tooltipVisibility === \"hover\" && !touch) {\n setMouseVisible(true);\n }\n }}\n onMouseLeave={(event) => {\n onMouseLeave(event);\n if (discrete && tooltipVisibility === \"hover\" && !touch) {\n setMouseVisible(false);\n }\n }}\n />\n <input\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-hidden\n id={`${id}-value`}\n type=\"range\"\n name={name}\n min={min}\n max={max}\n step={step}\n value={value}\n tabIndex={-1}\n onChange={onChange}\n className={styles(\"input\")}\n />\n {discrete && (\n <SliderValueTooltip\n position={vertical ? \"left\" : \"above\"}\n vertical={vertical}\n animate={!disableSmoothDragging && !active}\n visible={\n tooltipVisibility === \"always\" ||\n active ||\n keyboardVisible ||\n mouseVisible\n }\n {...tooltipProps}\n {...getTooltipProps(value, isFirstThumb)}\n index={index}\n >\n {getTooltipChildren(value, isFirstThumb)}\n </SliderValueTooltip>\n )}\n </>\n );\n});\n"],"names":["cnb","forwardRef","useEffect","useState","useUserInteractionMode","bem","SliderValueTooltip","styles","noop","sliderThumb","options","className","mask","index","active","animate","disabled","vertical","isSecondThumb","h","h1","h2","v","v1","v2","SliderThumb","props","ref","id","min","max","name","value","onChange","getValueText","step","discrete","tabIndex","onFocus","onKeyDown","onMouseEnter","onMouseLeave","tooltipProps","getTooltipProps","getTooltipChildren","disableSmoothDragging","tooltipVisibility","remaining","ariaLabel","ariaLabelledBy","isFirstThumb","mode","keyboard","touch","mouseVisible","setMouseVisible","keyboardVisible","setKeyboardVisible","prevVisible","callback","window","addEventListener","removeEventListener","classNameOptions","span","role","aria-disabled","undefined","aria-orientation","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","event","key","input","aria-label","aria-labelledby","aria-hidden","type","position","visible"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/form/SliderThumb.tsx"],"sourcesContent":["\"use client\";\n\nimport { cnb } from \"cnbuilder\";\nimport {\n type ChangeEventHandler,\n type HTMLAttributes,\n type ReactNode,\n forwardRef,\n useEffect,\n useState,\n} from \"react\";\n\nimport { useUserInteractionMode } from \"../interaction/UserInteractionModeProvider.js\";\nimport { type TooltipProps } from \"../tooltip/Tooltip.js\";\nimport { type LabelRequiredForA11y } from \"../types.js\";\nimport { bem } from \"../utils/bem.js\";\nimport { SliderValueTooltip } from \"./SliderValueTooltip.js\";\nimport { type SliderValueOptions } from \"./useSlider.js\";\n\nconst styles = bem(\"rmd-slider-thumb\");\n\nconst noop = (): void => {\n // do nothing\n};\n\n/**\n * @internal\n * @since 6.0.0\n */\ninterface SliderThumbClassNameOptions {\n className?: string;\n\n mask?: boolean;\n index: 1 | 2;\n active: boolean;\n animate: boolean;\n vertical: boolean;\n disabled: boolean;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nfunction sliderThumb(options: SliderThumbClassNameOptions): string {\n const { className, mask, index, active, animate, disabled, vertical } =\n options;\n\n const isSecondThumb = index === 2;\n return cnb(\n styles({\n h: !vertical,\n h1: !vertical && !isSecondThumb,\n h2: !vertical && isSecondThumb,\n v: vertical,\n v1: vertical && !isSecondThumb,\n v2: vertical && isSecondThumb,\n mask,\n \"mask-h\": mask && !vertical,\n \"mask-v\": mask && vertical,\n active,\n animate,\n disabled,\n \"disabled-h\": disabled && !vertical && !mask,\n \"disabled-v\": disabled && vertical && !mask,\n }),\n className\n );\n}\n\n/**\n * @since 6.0.0\n */\nexport type SliderTooltipVisibility = \"auto\" | \"hover\" | \"always\";\n\n/**\n * @since 2.5.0\n */\nexport interface SliderThumbPresentation {\n /**\n * Boolean if the slider should act as a discrete slider which will render a\n * tooltip above the thumb while dragging to visualize the current value for\n * the slider.\n *\n * @defaultValue `false`\n */\n discrete?: boolean;\n\n /**\n * A function that is used to help with accessibility by creating a better\n * value string if just a number isn't representative enough of your range.\n *\n * Example:\n *\n * ```tsx\n * const [value, controls] = useSlider(0, {\n * // format to be `$100`, etc\n * getValueText: value => `$${value}`,\n * });\n *\n * return <Slider baseId=\"price-slider\" label=\"Price\" {...controls} />;\n * ```\n *\n * @defaultValue `() => \"\"`\n */\n getValueText?: (value: number) => string;\n\n /**\n * Set this to `true` if the slider's thumb position should only update when\n * the user has dragged to the next value instead of with the mouse.\n *\n * @see {@link marks}\n * @defaultValue `!!marks`\n */\n disableSmoothDragging?: boolean;\n\n /**\n * The discrete slider's value tooltip will only become visible when:\n *\n * - `\"auto\"` - the user is dragging with touch/mouse or focused with a keyboard\n * - `\"hover\"` - the behavior of `\"auto\"` plus while hovering the thumb with a mouse\n * - `\"always\"` - ... always\n *\n * This only applies when the {@link discrete} prop is `true`.\n *\n * @defaultValue `\"auto\"`\n */\n tooltipVisibility?: SliderTooltipVisibility;\n}\n\n/**\n * @internal\n * @since 2.5.0\n * @since 6.0.0 Internal only component.\n */\nexport interface SliderThumbProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, \"onChange\">,\n Required<SliderValueOptions>,\n Required<SliderThumbPresentation> {\n id: string;\n name?: string;\n value: number;\n index: 1 | 2;\n active: boolean;\n animate: boolean;\n disabled: boolean;\n vertical: boolean;\n onChange: ChangeEventHandler<HTMLInputElement>;\n tooltipProps?: Partial<TooltipProps>;\n getTooltipProps: (\n value: number,\n isFirstThumb: boolean\n ) => Partial<TooltipProps> | undefined;\n getTooltipChildren: (value: number, isFirstThumb: boolean) => ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * @internal\n * @since 2.5.0\n * @since 6.0.0 Internal only component.\n */\nexport const SliderThumb = forwardRef<\n HTMLSpanElement,\n LabelRequiredForA11y<SliderThumbProps>\n>(function SliderThumb(props, ref) {\n const {\n id,\n min,\n max,\n name,\n value,\n onChange,\n index,\n getValueText,\n step,\n active,\n animate,\n disabled,\n vertical,\n discrete,\n tabIndex = disabled ? -1 : 0,\n className,\n onFocus = noop,\n onKeyDown = noop,\n onMouseEnter = noop,\n onMouseLeave = noop,\n tooltipProps,\n getTooltipProps,\n getTooltipChildren,\n disableSmoothDragging,\n tooltipVisibility = \"auto\",\n ...remaining\n } = props;\n const { \"aria-label\": ariaLabel, \"aria-labelledby\": ariaLabelledBy } = props;\n\n const isFirstThumb = index === 1;\n const mode = useUserInteractionMode();\n const keyboard = mode === \"keyboard\";\n const touch = mode === \"touch\";\n const [mouseVisible, setMouseVisible] = useState(false);\n const [keyboardVisible, setKeyboardVisible] = useState(false);\n useEffect(() => {\n if (disabled || !discrete) {\n setKeyboardVisible(false);\n return;\n }\n\n // if the mode changes away from keyboard, need to disable the keyboard\n // state\n setKeyboardVisible((prevVisible) => prevVisible && mode === \"keyboard\");\n }, [disabled, discrete, mode]);\n useEffect(() => {\n if (disabled || !discrete) {\n setMouseVisible(false);\n return;\n }\n\n setMouseVisible((prevVisible) => prevVisible && mode !== \"touch\");\n }, [disabled, discrete, mode]);\n useEffect(() => {\n if (!keyboardVisible) {\n return;\n }\n\n const callback = (): void => {\n setKeyboardVisible(false);\n };\n\n window.addEventListener(\"blur\", callback, true);\n return () => {\n window.removeEventListener(\"blur\", callback);\n };\n }, [keyboardVisible]);\n\n const classNameOptions = {\n index,\n active,\n animate: !disableSmoothDragging && animate,\n disabled,\n vertical,\n className,\n } as const;\n\n return (\n <>\n {disabled && (\n <span\n className={sliderThumb({\n ...classNameOptions,\n mask: true,\n })}\n />\n )}\n <span\n {...remaining}\n id={id}\n ref={ref}\n role=\"slider\"\n aria-disabled={disabled || undefined}\n aria-orientation={vertical ? \"vertical\" : undefined}\n aria-valuemax={max}\n aria-valuemin={min}\n aria-valuenow={value}\n aria-valuetext={getValueText(value) || undefined}\n tabIndex={tabIndex}\n className={sliderThumb(classNameOptions)}\n onFocus={(event) => {\n onFocus(event);\n\n if (discrete && keyboard) {\n setKeyboardVisible(true);\n }\n }}\n onKeyDown={(event) => {\n onKeyDown(event);\n\n // this allows the tooltip to be visible when switching from mouse to\n // keyboard\n if (discrete && event.key !== \"Tab\") {\n setKeyboardVisible(true);\n }\n }}\n onMouseEnter={(event) => {\n onMouseEnter(event);\n if (discrete && tooltipVisibility === \"hover\" && !touch) {\n setMouseVisible(true);\n }\n }}\n onMouseLeave={(event) => {\n onMouseLeave(event);\n if (discrete && tooltipVisibility === \"hover\" && !touch) {\n setMouseVisible(false);\n }\n }}\n />\n <input\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-hidden\n id={`${id}-value`}\n type=\"range\"\n name={name}\n min={min}\n max={max}\n step={step}\n value={value}\n disabled={disabled}\n tabIndex={-1}\n onChange={onChange}\n className={styles(\"input\")}\n />\n {discrete && (\n <SliderValueTooltip\n position={vertical ? \"left\" : \"above\"}\n vertical={vertical}\n animate={!disableSmoothDragging && !active}\n visible={\n tooltipVisibility === \"always\" ||\n active ||\n keyboardVisible ||\n mouseVisible\n }\n {...tooltipProps}\n {...getTooltipProps(value, isFirstThumb)}\n index={index}\n >\n {getTooltipChildren(value, isFirstThumb)}\n </SliderValueTooltip>\n )}\n </>\n );\n});\n"],"names":["cnb","forwardRef","useEffect","useState","useUserInteractionMode","bem","SliderValueTooltip","styles","noop","sliderThumb","options","className","mask","index","active","animate","disabled","vertical","isSecondThumb","h","h1","h2","v","v1","v2","SliderThumb","props","ref","id","min","max","name","value","onChange","getValueText","step","discrete","tabIndex","onFocus","onKeyDown","onMouseEnter","onMouseLeave","tooltipProps","getTooltipProps","getTooltipChildren","disableSmoothDragging","tooltipVisibility","remaining","ariaLabel","ariaLabelledBy","isFirstThumb","mode","keyboard","touch","mouseVisible","setMouseVisible","keyboardVisible","setKeyboardVisible","prevVisible","callback","window","addEventListener","removeEventListener","classNameOptions","span","role","aria-disabled","undefined","aria-orientation","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","event","key","input","aria-label","aria-labelledby","aria-hidden","type","position","visible"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/SliderTrack.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { bem } from \"../utils/bem.js\";\nimport {\n getClosestThumbEventHandlers,\n getThumbOffsets,\n type ClosestThumbEventHandlersOptions,\n type ThumbOffsetsOptions,\n} from \"./sliderUtils.js\";\n\nconst styles = bem(\"rmd-slider-track\");\n\n/**\n * @internal\n * @since 2.5.0\n * @since 6.0.0 Updated to be internal only.\n */\nexport interface SliderTrackProps\n extends HTMLAttributes<HTMLSpanElement>,\n ClosestThumbEventHandlersOptions,\n ThumbOffsetsOptions {\n animate: boolean;\n disabled: boolean;\n}\n\n/**\n * @internal\n * @since 2.5.0\n * @since 6.0.0 Updated to be internal only.\n */\nexport const SliderTrack = forwardRef<HTMLSpanElement, SliderTrackProps>(\n function SliderTrack(props, ref) {\n const {\n style,\n className,\n animate,\n vertical,\n disabled,\n min,\n max,\n thumb1Ref,\n thumb1Value,\n thumb1Dragging,\n thumb1DragPercentage,\n thumb1OnMouseUp,\n thumb1OnMouseDown,\n thumb1OnMouseMove,\n thumb1OnTouchStart,\n thumb1OnTouchMove,\n thumb2Ref,\n thumb2Value,\n thumb2Dragging,\n thumb2DragPercentage,\n thumb2OnMouseUp,\n thumb2OnMouseDown,\n thumb2OnMouseMove,\n thumb2OnTouchStart,\n thumb2OnTouchMove,\n isRangeSlider,\n children,\n ...remaining\n } = props;\n\n return (\n <span\n {...remaining}\n ref={ref}\n style={{\n ...style,\n ...getThumbOffsets({\n min,\n max,\n thumb1Value,\n thumb1Dragging,\n thumb1DragPercentage,\n thumb2Value,\n thumb2Dragging,\n thumb2DragPercentage,\n isRangeSlider,\n }),\n }}\n className={cnb(\n styles({\n animate,\n disabled,\n hoverable: !disabled,\n h: !vertical,\n h1: !vertical && !isRangeSlider,\n h2: !vertical && isRangeSlider,\n v: vertical,\n v1: vertical && !isRangeSlider,\n v2: vertical && isRangeSlider,\n }),\n className\n )}\n {...getClosestThumbEventHandlers({\n vertical,\n isRangeSlider,\n thumb1Ref,\n thumb1Dragging,\n thumb1OnMouseUp,\n thumb1OnMouseDown,\n thumb1OnMouseMove,\n thumb1OnTouchStart,\n thumb1OnTouchMove,\n thumb2Ref,\n thumb2Dragging,\n thumb2OnMouseUp,\n thumb2OnMouseDown,\n thumb2OnMouseMove,\n thumb2OnTouchStart,\n thumb2OnTouchMove,\n })}\n >\n {children}\n </span>\n );\n }\n);\n"],"names":["cnb","forwardRef","bem","getClosestThumbEventHandlers","getThumbOffsets","styles","SliderTrack","props","ref","style","className","animate","vertical","disabled","min","max","thumb1Ref","thumb1Value","thumb1Dragging","thumb1DragPercentage","thumb1OnMouseUp","thumb1OnMouseDown","thumb1OnMouseMove","thumb1OnTouchStart","thumb1OnTouchMove","thumb2Ref","thumb2Value","thumb2Dragging","thumb2DragPercentage","thumb2OnMouseUp","thumb2OnMouseDown","thumb2OnMouseMove","thumb2OnTouchStart","thumb2OnTouchMove","isRangeSlider","children","remaining","span","hoverable","h","h1","h2","v","v1","v2"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,UAAU,QAA6B,QAAQ;AACxD,SAASC,GAAG,QAAQ,kBAAkB;AACtC,SACEC,4BAA4B,EAC5BC,eAAe,QAGV,mBAAmB;AAE1B,MAAMC,SAASH,IAAI;AAenB;;;;CAIC,GACD,OAAO,MAAMI,4BAAcL,WACzB,SAASK,YAAYC,KAAK,EAAEC,GAAG;IAC7B,MAAM,EACJC,KAAK,EACLC,SAAS,EACTC,OAAO,EACPC,QAAQ,EACRC,QAAQ,EACRC,GAAG,EACHC,GAAG,EACHC,SAAS,EACTC,WAAW,EACXC,cAAc,EACdC,oBAAoB,EACpBC,eAAe,EACfC,iBAAiB,EACjBC,iBAAiB,EACjBC,kBAAkB,EAClBC,iBAAiB,EACjBC,SAAS,EACTC,WAAW,EACXC,cAAc,EACdC,oBAAoB,EACpBC,eAAe,EACfC,iBAAiB,EACjBC,iBAAiB,EACjBC,kBAAkB,EAClBC,iBAAiB,EACjBC,aAAa,EACbC,QAAQ,EACR,GAAGC,WACJ,GAAG7B;IAEJ,qBACE,KAAC8B;QACE,GAAGD,SAAS;QACb5B,KAAKA;QACLC,OAAO;YACL,GAAGA,KAAK;YACR,GAAGL,gBAAgB;gBACjBU;gBACAC;gBACAE;gBACAC;gBACAC;gBACAO;gBACAC;gBACAC;gBACAM;YACF,EAAE;QACJ;QACAxB,WAAWV,IACTK,OAAO;YACLM;YACAE;YACAyB,WAAW,CAACzB;YACZ0B,GAAG,CAAC3B;YACJ4B,IAAI,CAAC5B,YAAY,CAACsB;YAClBO,IAAI,CAAC7B,YAAYsB;YACjBQ,GAAG9B;YACH+B,IAAI/B,YAAY,CAACsB;YACjBU,IAAIhC,YAAYsB;QAClB,IACAxB;QAED,GAAGP,6BAA6B;YAC/BS;YACAsB;YACAlB;YACAE;YACAE;YACAC;YACAC;YACAC;YACAC;YACAC;YACAE;YACAE;YACAC;YACAC;YACAC;YACAC;QACF,EAAE;kBAEDE;;AAGP,GACA"}
1
+ {"version":3,"sources":["../../src/form/SliderTrack.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { type HTMLAttributes, forwardRef } from \"react\";\n\nimport { bem } from \"../utils/bem.js\";\nimport {\n type ClosestThumbEventHandlersOptions,\n type ThumbOffsetsOptions,\n getClosestThumbEventHandlers,\n getThumbOffsets,\n} from \"./sliderUtils.js\";\n\nconst styles = bem(\"rmd-slider-track\");\n\n/**\n * @internal\n * @since 2.5.0\n * @since 6.0.0 Updated to be internal only.\n */\nexport interface SliderTrackProps\n extends HTMLAttributes<HTMLSpanElement>,\n ClosestThumbEventHandlersOptions,\n ThumbOffsetsOptions {\n animate: boolean;\n disabled: boolean;\n}\n\n/**\n * @internal\n * @since 2.5.0\n * @since 6.0.0 Updated to be internal only.\n */\nexport const SliderTrack = forwardRef<HTMLSpanElement, SliderTrackProps>(\n function SliderTrack(props, ref) {\n const {\n style,\n className,\n animate,\n vertical,\n disabled,\n min,\n max,\n thumb1Ref,\n thumb1Value,\n thumb1Dragging,\n thumb1DragPercentage,\n thumb1OnMouseUp,\n thumb1OnMouseDown,\n thumb1OnMouseMove,\n thumb1OnTouchStart,\n thumb1OnTouchMove,\n thumb2Ref,\n thumb2Value,\n thumb2Dragging,\n thumb2DragPercentage,\n thumb2OnMouseUp,\n thumb2OnMouseDown,\n thumb2OnMouseMove,\n thumb2OnTouchStart,\n thumb2OnTouchMove,\n isRangeSlider,\n children,\n ...remaining\n } = props;\n\n return (\n <span\n {...remaining}\n ref={ref}\n style={{\n ...style,\n ...getThumbOffsets({\n min,\n max,\n thumb1Value,\n thumb1Dragging,\n thumb1DragPercentage,\n thumb2Value,\n thumb2Dragging,\n thumb2DragPercentage,\n isRangeSlider,\n }),\n }}\n className={cnb(\n styles({\n animate,\n disabled,\n hoverable: !disabled,\n h: !vertical,\n h1: !vertical && !isRangeSlider,\n h2: !vertical && isRangeSlider,\n v: vertical,\n v1: vertical && !isRangeSlider,\n v2: vertical && isRangeSlider,\n }),\n className\n )}\n {...getClosestThumbEventHandlers({\n vertical,\n isRangeSlider,\n thumb1Ref,\n thumb1Dragging,\n thumb1OnMouseUp,\n thumb1OnMouseDown,\n thumb1OnMouseMove,\n thumb1OnTouchStart,\n thumb1OnTouchMove,\n thumb2Ref,\n thumb2Dragging,\n thumb2OnMouseUp,\n thumb2OnMouseDown,\n thumb2OnMouseMove,\n thumb2OnTouchStart,\n thumb2OnTouchMove,\n })}\n >\n {children}\n </span>\n );\n }\n);\n"],"names":["cnb","forwardRef","bem","getClosestThumbEventHandlers","getThumbOffsets","styles","SliderTrack","props","ref","style","className","animate","vertical","disabled","min","max","thumb1Ref","thumb1Value","thumb1Dragging","thumb1DragPercentage","thumb1OnMouseUp","thumb1OnMouseDown","thumb1OnMouseMove","thumb1OnTouchStart","thumb1OnTouchMove","thumb2Ref","thumb2Value","thumb2Dragging","thumb2DragPercentage","thumb2OnMouseUp","thumb2OnMouseDown","thumb2OnMouseMove","thumb2OnTouchStart","thumb2OnTouchMove","isRangeSlider","children","remaining","span","hoverable","h","h1","h2","v","v1","v2"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAA8BC,UAAU,QAAQ,QAAQ;AAExD,SAASC,GAAG,QAAQ,kBAAkB;AACtC,SAGEC,4BAA4B,EAC5BC,eAAe,QACV,mBAAmB;AAE1B,MAAMC,SAASH,IAAI;AAenB;;;;CAIC,GACD,OAAO,MAAMI,4BAAcL,WACzB,SAASK,YAAYC,KAAK,EAAEC,GAAG;IAC7B,MAAM,EACJC,KAAK,EACLC,SAAS,EACTC,OAAO,EACPC,QAAQ,EACRC,QAAQ,EACRC,GAAG,EACHC,GAAG,EACHC,SAAS,EACTC,WAAW,EACXC,cAAc,EACdC,oBAAoB,EACpBC,eAAe,EACfC,iBAAiB,EACjBC,iBAAiB,EACjBC,kBAAkB,EAClBC,iBAAiB,EACjBC,SAAS,EACTC,WAAW,EACXC,cAAc,EACdC,oBAAoB,EACpBC,eAAe,EACfC,iBAAiB,EACjBC,iBAAiB,EACjBC,kBAAkB,EAClBC,iBAAiB,EACjBC,aAAa,EACbC,QAAQ,EACR,GAAGC,WACJ,GAAG7B;IAEJ,qBACE,KAAC8B;QACE,GAAGD,SAAS;QACb5B,KAAKA;QACLC,OAAO;YACL,GAAGA,KAAK;YACR,GAAGL,gBAAgB;gBACjBU;gBACAC;gBACAE;gBACAC;gBACAC;gBACAO;gBACAC;gBACAC;gBACAM;YACF,EAAE;QACJ;QACAxB,WAAWV,IACTK,OAAO;YACLM;YACAE;YACAyB,WAAW,CAACzB;YACZ0B,GAAG,CAAC3B;YACJ4B,IAAI,CAAC5B,YAAY,CAACsB;YAClBO,IAAI,CAAC7B,YAAYsB;YACjBQ,GAAG9B;YACH+B,IAAI/B,YAAY,CAACsB;YACjBU,IAAIhC,YAAYsB;QAClB,IACAxB;QAED,GAAGP,6BAA6B;YAC/BS;YACAsB;YACAlB;YACAE;YACAE;YACAC;YACAC;YACAC;YACAC;YACAC;YACAE;YACAE;YACAC;YACAC;YACAC;YACAC;QACF,EAAE;kBAEDE;;AAGP,GACA"}