@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/formMessageContainerStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-form-message-container\");\n\n/**\n * @since 6.0.0\n */\nexport interface FormMessageContainerClassNameOptions {\n className?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function formMessageContainer(\n options: FormMessageContainerClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(), className);\n}\n"],"names":["cnb","bem","styles","formMessageContainer","options","className"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AASnB;;CAEC,GACD,OAAO,SAASE,qBACdC,UAAgD,CAAC,CAAC;IAElD,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOJ,IAAIE,UAAUG;AACvB"}
1
+ {"version":3,"sources":["../../src/form/formMessageContainerStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\n\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-form-message-container\");\n\n/**\n * @since 6.0.0\n */\nexport interface FormMessageContainerClassNameOptions {\n className?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function formMessageContainer(\n options: FormMessageContainerClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(), className);\n}\n"],"names":["cnb","bem","styles","formMessageContainer","options","className"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AASnB;;CAEC,GACD,OAAO,SAASE,qBACdC,UAAgD,CAAC,CAAC;IAElD,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOJ,IAAIE,UAAUG;AACvB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/formMessageStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { cssUtils } from \"../cssUtils.js\";\nimport { bem } from \"../utils/bem.js\";\nimport { type FormMessageClassNameOptions } from \"./types.js\";\n\nconst styles = bem(\"rmd-form-message\");\n\n/**\n * @since 6.0.0\n */\nexport function formMessage(options: FormMessageClassNameOptions = {}): string {\n const { className, error = false, theme = \"none\" } = options;\n\n return cnb(\n styles({ [theme]: theme !== \"none\" }),\n cssUtils({ textColor: error ? \"error\" : \"text-secondary\" }),\n className\n );\n}\n\n/** @since 6.0.0 */\nexport interface FormMessageTextClassNameOptions {\n className?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function formMessageText(\n options: FormMessageTextClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(\"message\"), className);\n}\n\n/** @since 6.0.0 */\nexport interface FormMessageCounterClassNameOptions {\n className?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function formMessageCounter(\n options: FormMessageCounterClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(\"counter\"), className);\n}\n"],"names":["cnb","cssUtils","bem","styles","formMessage","options","className","error","theme","textColor","formMessageText","formMessageCounter"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,GAAG,QAAQ,kBAAkB;AAGtC,MAAMC,SAASD,IAAI;AAEnB;;CAEC,GACD,OAAO,SAASE,YAAYC,UAAuC,CAAC,CAAC;IACnE,MAAM,EAAEC,SAAS,EAAEC,QAAQ,KAAK,EAAEC,QAAQ,MAAM,EAAE,GAAGH;IAErD,OAAOL,IACLG,OAAO;QAAE,CAACK,MAAM,EAAEA,UAAU;IAAO,IACnCP,SAAS;QAAEQ,WAAWF,QAAQ,UAAU;IAAiB,IACzDD;AAEJ;AAOA;;CAEC,GACD,OAAO,SAASI,gBACdL,UAA2C,CAAC,CAAC;IAE7C,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOL,IAAIG,OAAO,YAAYG;AAChC;AAOA;;CAEC,GACD,OAAO,SAASK,mBACdN,UAA8C,CAAC,CAAC;IAEhD,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOL,IAAIG,OAAO,YAAYG;AAChC"}
1
+ {"version":3,"sources":["../../src/form/formMessageStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\n\nimport { cssUtils } from \"../cssUtils.js\";\nimport { bem } from \"../utils/bem.js\";\nimport { type FormMessageClassNameOptions } from \"./types.js\";\n\nconst styles = bem(\"rmd-form-message\");\n\n/**\n * @since 6.0.0\n */\nexport function formMessage(options: FormMessageClassNameOptions = {}): string {\n const { className, error = false, theme = \"none\" } = options;\n\n return cnb(\n styles({ [theme]: theme !== \"none\" }),\n cssUtils({ textColor: error ? \"error\" : \"text-secondary\" }),\n className\n );\n}\n\n/** @since 6.0.0 */\nexport interface FormMessageTextClassNameOptions {\n className?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function formMessageText(\n options: FormMessageTextClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(\"message\"), className);\n}\n\n/** @since 6.0.0 */\nexport interface FormMessageCounterClassNameOptions {\n className?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function formMessageCounter(\n options: FormMessageCounterClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(\"counter\"), className);\n}\n"],"names":["cnb","cssUtils","bem","styles","formMessage","options","className","error","theme","textColor","formMessageText","formMessageCounter"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,GAAG,QAAQ,kBAAkB;AAGtC,MAAMC,SAASD,IAAI;AAEnB;;CAEC,GACD,OAAO,SAASE,YAAYC,UAAuC,CAAC,CAAC;IACnE,MAAM,EAAEC,SAAS,EAAEC,QAAQ,KAAK,EAAEC,QAAQ,MAAM,EAAE,GAAGH;IAErD,OAAOL,IACLG,OAAO;QAAE,CAACK,MAAM,EAAEA,UAAU;IAAO,IACnCP,SAAS;QAAEQ,WAAWF,QAAQ,UAAU;IAAiB,IACzDD;AAEJ;AAOA;;CAEC,GACD,OAAO,SAASI,gBACdL,UAA2C,CAAC,CAAC;IAE7C,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOL,IAAIG,OAAO,YAAYG;AAChC;AAOA;;CAEC,GACD,OAAO,SAASK,mBACdN,UAA8C,CAAC,CAAC;IAEhD,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOL,IAAIG,OAAO,YAAYG;AAChC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/inputToggleStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { cssUtils } from \"../cssUtils.js\";\nimport { bem } from \"../utils/bem.js\";\nimport { type FormComponentStates } from \"./types.js\";\n\nconst styles = bem(\"rmd-input-toggle\");\n\n/**\n * The size to use for the `Checkbox` or `Radio` component. Each of these values\n * except for `\"auto\"` map to Sass variables:\n * - `\"small\"` - `$input-toggle-small-size`\n * - `\"dense\"` - `$input-toggle-dense-size`\n * - `\"normal\"` - `$input-toggle-large-size`\n * - `\"large\"` - `$input-toggle-large-size`\n *\n * When this is set to `\"auto\"`, the size will be determined by the current\n * `font-size` of the `Label` element.\n *\n * @since 6.0.0\n */\nexport type InputToggleSize = \"auto\" | \"small\" | \"dense\" | \"normal\" | \"large\";\n\n/** @since 6.0.0 */\nexport interface InputToggleClassNameOptions\n extends Omit<FormComponentStates, \"readOnly\"> {\n className?: string;\n type: \"checkbox\" | \"radio\";\n\n /**\n * Set the icon size to `1em` to allow easy sizing through font size.\n *\n * @defaultValue `true`\n */\n em?: boolean;\n\n /**\n * @see {@link InputToggleSize}\n * @defaultValue `\"auto\"`\n */\n size?: InputToggleSize;\n\n uncontrolled?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function inputToggle(options: InputToggleClassNameOptions): string {\n const {\n className,\n em = true,\n type,\n size = \"auto\",\n error,\n active = false,\n disabled = false,\n uncontrolled,\n } = options;\n\n return cnb(\n `rmd-${type}`,\n styles({\n em,\n active: active && !disabled,\n disabled,\n small: size === \"small\",\n dense: size === \"dense\",\n normal: size === \"normal\",\n large: size === \"large\",\n uncontrolled,\n }),\n cssUtils({\n textColor: disabled ? \"text-disabled\" : error ? \"error\" : undefined,\n }),\n className\n );\n}\n"],"names":["cnb","cssUtils","bem","styles","inputToggle","options","className","em","type","size","error","active","disabled","uncontrolled","small","dense","normal","large","textColor","undefined"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,GAAG,QAAQ,kBAAkB;AAGtC,MAAMC,SAASD,IAAI;AAuCnB;;CAEC,GACD,OAAO,SAASE,YAAYC,OAAoC;IAC9D,MAAM,EACJC,SAAS,EACTC,KAAK,IAAI,EACTC,IAAI,EACJC,OAAO,MAAM,EACbC,KAAK,EACLC,SAAS,KAAK,EACdC,WAAW,KAAK,EAChBC,YAAY,EACb,GAAGR;IAEJ,OAAOL,IACL,CAAC,IAAI,EAAEQ,MAAM,EACbL,OAAO;QACLI;QACAI,QAAQA,UAAU,CAACC;QACnBA;QACAE,OAAOL,SAAS;QAChBM,OAAON,SAAS;QAChBO,QAAQP,SAAS;QACjBQ,OAAOR,SAAS;QAChBI;IACF,IACAZ,SAAS;QACPiB,WAAWN,WAAW,kBAAkBF,QAAQ,UAAUS;IAC5D,IACAb;AAEJ"}
1
+ {"version":3,"sources":["../../src/form/inputToggleStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\n\nimport { cssUtils } from \"../cssUtils.js\";\nimport { bem } from \"../utils/bem.js\";\nimport { type FormComponentStates } from \"./types.js\";\n\nconst styles = bem(\"rmd-input-toggle\");\n\n/**\n * The size to use for the `Checkbox` or `Radio` component. Each of these values\n * except for `\"auto\"` map to Sass variables:\n * - `\"small\"` - `$input-toggle-small-size`\n * - `\"dense\"` - `$input-toggle-dense-size`\n * - `\"normal\"` - `$input-toggle-large-size`\n * - `\"large\"` - `$input-toggle-large-size`\n *\n * When this is set to `\"auto\"`, the size will be determined by the current\n * `font-size` of the `Label` element.\n *\n * @since 6.0.0\n */\nexport type InputToggleSize = \"auto\" | \"small\" | \"dense\" | \"normal\" | \"large\";\n\n/** @since 6.0.0 */\nexport interface InputToggleClassNameOptions\n extends Omit<FormComponentStates, \"readOnly\"> {\n className?: string;\n type: \"checkbox\" | \"radio\";\n\n /**\n * Set the icon size to `1em` to allow easy sizing through font size.\n *\n * @defaultValue `true`\n */\n em?: boolean;\n\n /**\n * @see {@link InputToggleSize}\n * @defaultValue `\"auto\"`\n */\n size?: InputToggleSize;\n\n uncontrolled?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function inputToggle(options: InputToggleClassNameOptions): string {\n const {\n className,\n em = true,\n type,\n size = \"auto\",\n error,\n active = false,\n disabled = false,\n uncontrolled,\n } = options;\n\n return cnb(\n `rmd-${type}`,\n styles({\n em,\n active: active && !disabled,\n disabled,\n small: size === \"small\",\n dense: size === \"dense\",\n normal: size === \"normal\",\n large: size === \"large\",\n uncontrolled,\n }),\n cssUtils({\n textColor: disabled ? \"text-disabled\" : error ? \"error\" : undefined,\n }),\n className\n );\n}\n"],"names":["cnb","cssUtils","bem","styles","inputToggle","options","className","em","type","size","error","active","disabled","uncontrolled","small","dense","normal","large","textColor","undefined"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,GAAG,QAAQ,kBAAkB;AAGtC,MAAMC,SAASD,IAAI;AAuCnB;;CAEC,GACD,OAAO,SAASE,YAAYC,OAAoC;IAC9D,MAAM,EACJC,SAAS,EACTC,KAAK,IAAI,EACTC,IAAI,EACJC,OAAO,MAAM,EACbC,KAAK,EACLC,SAAS,KAAK,EACdC,WAAW,KAAK,EAChBC,YAAY,EACb,GAAGR;IAEJ,OAAOL,IACL,CAAC,IAAI,EAAEQ,MAAM,EACbL,OAAO;QACLI;QACAI,QAAQA,UAAU,CAACC;QACnBA;QACAE,OAAOL,SAAS;QAChBM,OAAON,SAAS;QAChBO,QAAQP,SAAS;QACjBQ,OAAOR,SAAS;QAChBI;IACF,IACAZ,SAAS;QACPiB,WAAWN,WAAW,kBAAkBF,QAAQ,UAAUS;IAC5D,IACAb;AAEJ"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/menuItemInputToggleStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-menu-item-input-toggle\");\n\n/** @since 6.0.0 */\nexport interface MenuItemInputToggleClassNameOptions {\n className?: string;\n type: \"radio\" | \"checkbox\" | \"switch\";\n}\n\n/**\n * @since 6.0.0\n */\nexport function menuItemInputToggle(\n options: MenuItemInputToggleClassNameOptions\n): string {\n const { className, type } = options;\n return cnb(\n `rmd-${type}-menu-item`,\n styles({ switch: type === \"switch\" }),\n className\n );\n}\n\n/**\n * @since 6.0.0\n */\nexport interface MenuItemInputToggleTrackClassNameOptions {\n className?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function menuItemInputToggleTrack(\n options: MenuItemInputToggleTrackClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(\"track\"), className);\n}\n\n/**\n * @since 6.0.0\n */\nexport interface MenuItemInputToggleBallClassNameOptions {\n className?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function menuItemInputToggleBall(\n options: MenuItemInputToggleBallClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(\"ball\"), className);\n}\n\n/**\n * @since 6.0.0\n */\nexport interface MenuItemInputToggleIconClassNameOptions {\n className?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function menuItemInputToggleIcon(\n options: MenuItemInputToggleIconClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(\"icon\"), className);\n}\n"],"names":["cnb","bem","styles","menuItemInputToggle","options","className","type","switch","menuItemInputToggleTrack","menuItemInputToggleBall","menuItemInputToggleIcon"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAQnB;;CAEC,GACD,OAAO,SAASE,oBACdC,OAA4C;IAE5C,MAAM,EAAEC,SAAS,EAAEC,IAAI,EAAE,GAAGF;IAC5B,OAAOJ,IACL,CAAC,IAAI,EAAEM,KAAK,UAAU,CAAC,EACvBJ,OAAO;QAAEK,QAAQD,SAAS;IAAS,IACnCD;AAEJ;AASA;;CAEC,GACD,OAAO,SAASG,yBACdJ,UAAoD,CAAC,CAAC;IAEtD,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOJ,IAAIE,OAAO,UAAUG;AAC9B;AASA;;CAEC,GACD,OAAO,SAASI,wBACdL,UAAmD,CAAC,CAAC;IAErD,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOJ,IAAIE,OAAO,SAASG;AAC7B;AASA;;CAEC,GACD,OAAO,SAASK,wBACdN,UAAmD,CAAC,CAAC;IAErD,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOJ,IAAIE,OAAO,SAASG;AAC7B"}
1
+ {"version":3,"sources":["../../src/form/menuItemInputToggleStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\n\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-menu-item-input-toggle\");\n\n/** @since 6.0.0 */\nexport interface MenuItemInputToggleClassNameOptions {\n className?: string;\n type: \"radio\" | \"checkbox\" | \"switch\";\n}\n\n/**\n * @since 6.0.0\n */\nexport function menuItemInputToggle(\n options: MenuItemInputToggleClassNameOptions\n): string {\n const { className, type } = options;\n return cnb(\n `rmd-${type}-menu-item`,\n styles({ switch: type === \"switch\" }),\n className\n );\n}\n\n/**\n * @since 6.0.0\n */\nexport interface MenuItemInputToggleTrackClassNameOptions {\n className?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function menuItemInputToggleTrack(\n options: MenuItemInputToggleTrackClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(\"track\"), className);\n}\n\n/**\n * @since 6.0.0\n */\nexport interface MenuItemInputToggleBallClassNameOptions {\n className?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function menuItemInputToggleBall(\n options: MenuItemInputToggleBallClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(\"ball\"), className);\n}\n\n/**\n * @since 6.0.0\n */\nexport interface MenuItemInputToggleIconClassNameOptions {\n className?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function menuItemInputToggleIcon(\n options: MenuItemInputToggleIconClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(\"icon\"), className);\n}\n"],"names":["cnb","bem","styles","menuItemInputToggle","options","className","type","switch","menuItemInputToggleTrack","menuItemInputToggleBall","menuItemInputToggleIcon"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAQnB;;CAEC,GACD,OAAO,SAASE,oBACdC,OAA4C;IAE5C,MAAM,EAAEC,SAAS,EAAEC,IAAI,EAAE,GAAGF;IAC5B,OAAOJ,IACL,CAAC,IAAI,EAAEM,KAAK,UAAU,CAAC,EACvBJ,OAAO;QAAEK,QAAQD,SAAS;IAAS,IACnCD;AAEJ;AASA;;CAEC,GACD,OAAO,SAASG,yBACdJ,UAAoD,CAAC,CAAC;IAEtD,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOJ,IAAIE,OAAO,UAAUG;AAC9B;AASA;;CAEC,GACD,OAAO,SAASI,wBACdL,UAAmD,CAAC,CAAC;IAErD,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOJ,IAAIE,OAAO,SAASG;AAC7B;AASA;;CAEC,GACD,OAAO,SAASK,wBACdN,UAAmD,CAAC,CAAC;IAErD,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOJ,IAAIE,OAAO,SAASG;AAC7B"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/nativeSelectStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-native-select\");\nconst containerStyles = bem(\"rmd-native-select-container\");\n\n/** @since 6.0.0 */\nexport interface NativeSelectClassNameOptions {\n className?: string;\n\n /**\n * Set to `true` if using a custom icon instead of the default `<select>`\n * appearance.\n *\n * @defaultValue `false`\n */\n icon?: boolean;\n}\n\n/** @since 6.0.0 */\nexport function nativeSelect(\n options: NativeSelectClassNameOptions = {}\n): string {\n const { className, icon = false } = options;\n\n return cnb(styles({ icon }), className);\n}\n\n/**\n * @since 6.0.0\n */\nexport interface NativeSelectContainerClassNameOptions {\n className?: string;\n label?: boolean;\n multiple?: boolean;\n underlined?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function nativeSelectContainer(\n options: NativeSelectContainerClassNameOptions = {}\n): string {\n const { className, label, multiple, underlined } = options;\n\n return cnb(\n containerStyles({\n multi: multiple,\n padded: label && multiple && !underlined,\n underline: multiple && underlined,\n \"underline-padded\": label && multiple && underlined,\n }),\n className\n );\n}\n"],"names":["cnb","bem","styles","containerStyles","nativeSelect","options","className","icon","nativeSelectContainer","label","multiple","underlined","multi","padded","underline"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AACnB,MAAME,kBAAkBF,IAAI;AAe5B,iBAAiB,GACjB,OAAO,SAASG,aACdC,UAAwC,CAAC,CAAC;IAE1C,MAAM,EAAEC,SAAS,EAAEC,OAAO,KAAK,EAAE,GAAGF;IAEpC,OAAOL,IAAIE,OAAO;QAAEK;IAAK,IAAID;AAC/B;AAYA;;CAEC,GACD,OAAO,SAASE,sBACdH,UAAiD,CAAC,CAAC;IAEnD,MAAM,EAAEC,SAAS,EAAEG,KAAK,EAAEC,QAAQ,EAAEC,UAAU,EAAE,GAAGN;IAEnD,OAAOL,IACLG,gBAAgB;QACdS,OAAOF;QACPG,QAAQJ,SAASC,YAAY,CAACC;QAC9BG,WAAWJ,YAAYC;QACvB,oBAAoBF,SAASC,YAAYC;IAC3C,IACAL;AAEJ"}
1
+ {"version":3,"sources":["../../src/form/nativeSelectStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\n\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-native-select\");\nconst containerStyles = bem(\"rmd-native-select-container\");\n\n/** @since 6.0.0 */\nexport interface NativeSelectClassNameOptions {\n className?: string;\n\n /**\n * Set to `true` if using a custom icon instead of the default `<select>`\n * appearance.\n *\n * @defaultValue `false`\n */\n icon?: boolean;\n}\n\n/** @since 6.0.0 */\nexport function nativeSelect(\n options: NativeSelectClassNameOptions = {}\n): string {\n const { className, icon = false } = options;\n\n return cnb(styles({ icon }), className);\n}\n\n/**\n * @since 6.0.0\n */\nexport interface NativeSelectContainerClassNameOptions {\n className?: string;\n label?: boolean;\n multiple?: boolean;\n underlined?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function nativeSelectContainer(\n options: NativeSelectContainerClassNameOptions = {}\n): string {\n const { className, label, multiple, underlined } = options;\n\n return cnb(\n containerStyles({\n multi: multiple,\n padded: label && multiple && !underlined,\n underline: multiple && underlined,\n \"underline-padded\": label && multiple && underlined,\n }),\n className\n );\n}\n"],"names":["cnb","bem","styles","containerStyles","nativeSelect","options","className","icon","nativeSelectContainer","label","multiple","underlined","multi","padded","underline"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AACnB,MAAME,kBAAkBF,IAAI;AAe5B,iBAAiB,GACjB,OAAO,SAASG,aACdC,UAAwC,CAAC,CAAC;IAE1C,MAAM,EAAEC,SAAS,EAAEC,OAAO,KAAK,EAAE,GAAGF;IAEpC,OAAOL,IAAIE,OAAO;QAAEK;IAAK,IAAID;AAC/B;AAYA;;CAEC,GACD,OAAO,SAASE,sBACdH,UAAiD,CAAC,CAAC;IAEnD,MAAM,EAAEC,SAAS,EAAEG,KAAK,EAAEC,QAAQ,EAAEC,UAAU,EAAE,GAAGN;IAEnD,OAAOL,IACLG,gBAAgB;QACdS,OAAOF;QACPG,QAAQJ,SAASC,YAAY,CAACC;QAC9BG,WAAWJ,YAAYC;QACvB,oBAAoBF,SAASC,YAAYC;IAC3C,IACAL;AAEJ"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/optionStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-option\");\n\n/**\n * @since 6.0.0\n */\nexport interface OptionClassNameOptions {\n className?: string;\n icon: boolean;\n selected: boolean;\n selectedClassName?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function option(options: OptionClassNameOptions): string {\n const { className, icon, selected, selectedClassName } = options;\n\n return cnb(\n styles({ icon, selected }),\n selected && selectedClassName,\n className\n );\n}\n"],"names":["cnb","bem","styles","option","options","className","icon","selected","selectedClassName"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAYnB;;CAEC,GACD,OAAO,SAASE,OAAOC,OAA+B;IACpD,MAAM,EAAEC,SAAS,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,iBAAiB,EAAE,GAAGJ;IAEzD,OAAOJ,IACLE,OAAO;QAAEI;QAAMC;IAAS,IACxBA,YAAYC,mBACZH;AAEJ"}
1
+ {"version":3,"sources":["../../src/form/optionStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\n\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-option\");\n\n/**\n * @since 6.0.0\n */\nexport interface OptionClassNameOptions {\n className?: string;\n icon: boolean;\n selected: boolean;\n selectedClassName?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function option(options: OptionClassNameOptions): string {\n const { className, icon, selected, selectedClassName } = options;\n\n return cnb(\n styles({ icon, selected }),\n selected && selectedClassName,\n className\n );\n}\n"],"names":["cnb","bem","styles","option","options","className","icon","selected","selectedClassName"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAYnB;;CAEC,GACD,OAAO,SAASE,OAAOC,OAA+B;IACpD,MAAM,EAAEC,SAAS,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,iBAAiB,EAAE,GAAGJ;IAEzD,OAAOJ,IACLE,OAAO;QAAEI;QAAMC;IAAS,IACxBA,YAAYC,mBACZH;AAEJ"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/passwordStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-password\");\n\n/**\n * @since 6.0.0\n */\nexport interface PasswordClassNameOptions {\n className?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function password(options: PasswordClassNameOptions = {}): string {\n const { className } = options;\n\n return cnb(styles(), className);\n}\n\n/**\n * @since 6.0.0\n */\nexport interface PasswordInputClassNameOptions {\n className?: string;\n}\n\nexport function passwordInput(\n options: PasswordInputClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(\"input\"), className);\n}\n\n/**\n * @since 6.0.0\n */\nexport interface PasswordInputToggleClassNameOptions {\n className?: string;\n}\n\nexport function passwordInputToggle(\n options: PasswordInputToggleClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(\"toggle\"), className);\n}\n"],"names":["cnb","bem","styles","password","options","className","passwordInput","passwordInputToggle"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AASnB;;CAEC,GACD,OAAO,SAASE,SAASC,UAAoC,CAAC,CAAC;IAC7D,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOJ,IAAIE,UAAUG;AACvB;AASA,OAAO,SAASC,cACdF,UAAyC,CAAC,CAAC;IAE3C,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOJ,IAAIE,OAAO,UAAUG;AAC9B;AASA,OAAO,SAASE,oBACdH,UAA+C,CAAC,CAAC;IAEjD,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOJ,IAAIE,OAAO,WAAWG;AAC/B"}
1
+ {"version":3,"sources":["../../src/form/passwordStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\n\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-password\");\n\n/**\n * @since 6.0.0\n */\nexport interface PasswordClassNameOptions {\n className?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function password(options: PasswordClassNameOptions = {}): string {\n const { className } = options;\n\n return cnb(styles(), className);\n}\n\n/**\n * @since 6.0.0\n */\nexport interface PasswordInputClassNameOptions {\n className?: string;\n}\n\nexport function passwordInput(\n options: PasswordInputClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(\"input\"), className);\n}\n\n/**\n * @since 6.0.0\n */\nexport interface PasswordInputToggleClassNameOptions {\n className?: string;\n}\n\nexport function passwordInputToggle(\n options: PasswordInputToggleClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(\"toggle\"), className);\n}\n"],"names":["cnb","bem","styles","password","options","className","passwordInput","passwordInputToggle"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AASnB;;CAEC,GACD,OAAO,SAASE,SAASC,UAAoC,CAAC,CAAC;IAC7D,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOJ,IAAIE,UAAUG;AACvB;AASA,OAAO,SAASC,cACdF,UAAyC,CAAC,CAAC;IAE3C,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOJ,IAAIE,OAAO,UAAUG;AAC9B;AASA,OAAO,SAASE,oBACdH,UAA+C,CAAC,CAAC;IAEjD,MAAM,EAAEC,SAAS,EAAE,GAAGD;IAEtB,OAAOJ,IAAIE,OAAO,WAAWG;AAC/B"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/selectStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { bem } from \"../utils/bem.js\";\nimport { type FormTheme } from \"./types.js\";\n\nconst styles = bem(\"rmd-select\");\n\n/**\n * @since 6.0.0\n */\nexport interface SelectClassNameOptions {\n className?: string;\n /**\n * @defaultValue `\"outline\"`\n */\n theme?: FormTheme;\n}\n\n/**\n * @since 6.0.0\n */\nexport function select(options: SelectClassNameOptions = {}): string {\n const { className, theme = \"outline\" } = options;\n\n return cnb(\n styles({\n filled: theme === \"filled\",\n outline: theme === \"outline\",\n underline: theme === \"underline\",\n }),\n className\n );\n}\n"],"names":["cnb","bem","styles","select","options","className","theme","filled","outline","underline"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,GAAG,QAAQ,kBAAkB;AAGtC,MAAMC,SAASD,IAAI;AAanB;;CAEC,GACD,OAAO,SAASE,OAAOC,UAAkC,CAAC,CAAC;IACzD,MAAM,EAAEC,SAAS,EAAEC,QAAQ,SAAS,EAAE,GAAGF;IAEzC,OAAOJ,IACLE,OAAO;QACLK,QAAQD,UAAU;QAClBE,SAASF,UAAU;QACnBG,WAAWH,UAAU;IACvB,IACAD;AAEJ"}
1
+ {"version":3,"sources":["../../src/form/selectStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\n\nimport { bem } from \"../utils/bem.js\";\nimport { type FormTheme } from \"./types.js\";\n\nconst styles = bem(\"rmd-select\");\n\n/**\n * @since 6.0.0\n */\nexport interface SelectClassNameOptions {\n className?: string;\n /**\n * @defaultValue `\"outline\"`\n */\n theme?: FormTheme;\n}\n\n/**\n * @since 6.0.0\n */\nexport function select(options: SelectClassNameOptions = {}): string {\n const { className, theme = \"outline\" } = options;\n\n return cnb(\n styles({\n filled: theme === \"filled\",\n outline: theme === \"outline\",\n underline: theme === \"underline\",\n }),\n className\n );\n}\n"],"names":["cnb","bem","styles","select","options","className","theme","filled","outline","underline"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SAASC,GAAG,QAAQ,kBAAkB;AAGtC,MAAMC,SAASD,IAAI;AAanB;;CAEC,GACD,OAAO,SAASE,OAAOC,UAAkC,CAAC,CAAC;IACzD,MAAM,EAAEC,SAAS,EAAEC,QAAQ,SAAS,EAAE,GAAGF;IAEzC,OAAOJ,IACLE,OAAO;QACLK,QAAQD,UAAU;QAClBE,SAASF,UAAU;QACnBG,WAAWH,UAAU;IACvB,IACAD;AAEJ"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/selectUtils.ts"],"sourcesContent":["import { Children, isValidElement, type ReactNode } from \"react\";\nimport { type MenuItemProps } from \"../menu/MenuItem.js\";\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport interface SelectOption<Value extends string | number = string>\n extends MenuItemProps {\n value: Value;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nfunction getLabelFromChildren(children: ReactNode): string {\n if (!children) {\n return \"\";\n }\n\n if (typeof children === \"string\" || typeof children === \"number\") {\n return `${children}`;\n }\n\n if (isValidElement<{ children: ReactNode; hidden?: boolean }>(children)) {\n if (children.props.hidden) {\n return \"\";\n }\n\n return getLabelFromChildren(children.props.children);\n }\n\n const childList = Children.toArray(children);\n for (const child of childList) {\n if (typeof child === \"string\" || typeof child === \"number\") {\n return `${child}`[0].toUpperCase();\n }\n\n if (\n isValidElement<{ children: ReactNode; hidden?: boolean }>(child) &&\n !child.props.hidden\n ) {\n return getLabelFromChildren(child.props.children);\n }\n }\n\n return \"\";\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\ninterface ExtractedOptions<Value extends string | number> {\n options: readonly Value[];\n currentOption: SelectOption<Value> | undefined;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport function extractOptionsFromChildren<Value extends string | number>(\n children: ReactNode,\n currentValue: Value | undefined\n): ExtractedOptions<Value> {\n let currentOption: SelectOption<Value> | undefined;\n\n const options: Value[] = [];\n const searchValues: string[] = [];\n Children.forEach(children, (child) => {\n if (!isValidElement<SelectOption<Value>>(child)) {\n return;\n }\n\n const { value, disabled, children } = child.props;\n if (typeof value !== \"undefined\") {\n if (\n value === currentValue ||\n (!currentOption && typeof currentValue === \"undefined\")\n ) {\n currentOption = child.props;\n }\n\n if (!disabled) {\n options.push(child.props.value);\n searchValues.push(getLabelFromChildren(children));\n }\n } else if (children) {\n const result = extractOptionsFromChildren(children, currentValue);\n if (!currentOption) {\n ({ currentOption } = result);\n }\n\n options.push(...result.options);\n }\n });\n\n return {\n options,\n currentOption,\n };\n}\n"],"names":["Children","isValidElement","getLabelFromChildren","children","props","hidden","childList","toArray","child","toUpperCase","extractOptionsFromChildren","currentValue","currentOption","options","searchValues","forEach","value","disabled","push","result"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,cAAc,QAAwB,QAAQ;AAYjE;;;CAGC,GACD,SAASC,qBAAqBC,QAAmB;IAC/C,IAAI,CAACA,UAAU;QACb,OAAO;IACT;IAEA,IAAI,OAAOA,aAAa,YAAY,OAAOA,aAAa,UAAU;QAChE,OAAO,GAAGA,UAAU;IACtB;IAEA,IAAIF,eAA0DE,WAAW;QACvE,IAAIA,SAASC,KAAK,CAACC,MAAM,EAAE;YACzB,OAAO;QACT;QAEA,OAAOH,qBAAqBC,SAASC,KAAK,CAACD,QAAQ;IACrD;IAEA,MAAMG,YAAYN,SAASO,OAAO,CAACJ;IACnC,KAAK,MAAMK,SAASF,UAAW;QAC7B,IAAI,OAAOE,UAAU,YAAY,OAAOA,UAAU,UAAU;YAC1D,OAAO,GAAGA,OAAO,CAAC,EAAE,CAACC,WAAW;QAClC;QAEA,IACER,eAA0DO,UAC1D,CAACA,MAAMJ,KAAK,CAACC,MAAM,EACnB;YACA,OAAOH,qBAAqBM,MAAMJ,KAAK,CAACD,QAAQ;QAClD;IACF;IAEA,OAAO;AACT;AAWA;;;CAGC,GACD,OAAO,SAASO,2BACdP,QAAmB,EACnBQ,YAA+B;IAE/B,IAAIC;IAEJ,MAAMC,UAAmB,EAAE;IAC3B,MAAMC,eAAyB,EAAE;IACjCd,SAASe,OAAO,CAACZ,UAAU,CAACK;QAC1B,IAAI,CAACP,eAAoCO,QAAQ;YAC/C;QACF;QAEA,MAAM,EAAEQ,KAAK,EAAEC,QAAQ,EAAEd,QAAQ,EAAE,GAAGK,MAAMJ,KAAK;QACjD,IAAI,OAAOY,UAAU,aAAa;YAChC,IACEA,UAAUL,gBACT,CAACC,iBAAiB,OAAOD,iBAAiB,aAC3C;gBACAC,gBAAgBJ,MAAMJ,KAAK;YAC7B;YAEA,IAAI,CAACa,UAAU;gBACbJ,QAAQK,IAAI,CAACV,MAAMJ,KAAK,CAACY,KAAK;gBAC9BF,aAAaI,IAAI,CAAChB,qBAAqBC;YACzC;QACF,OAAO,IAAIA,UAAU;YACnB,MAAMgB,SAAST,2BAA2BP,UAAUQ;YACpD,IAAI,CAACC,eAAe;gBACjB,CAAA,EAAEA,aAAa,EAAE,GAAGO,MAAK;YAC5B;YAEAN,QAAQK,IAAI,IAAIC,OAAON,OAAO;QAChC;IACF;IAEA,OAAO;QACLA;QACAD;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/form/selectUtils.ts"],"sourcesContent":["import { Children, type ReactNode, isValidElement } from \"react\";\n\nimport { type MenuItemProps } from \"../menu/MenuItem.js\";\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport interface SelectOption<Value extends string | number = string>\n extends MenuItemProps {\n value: Value;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nfunction getLabelFromChildren(children: ReactNode): string {\n if (!children) {\n return \"\";\n }\n\n if (typeof children === \"string\" || typeof children === \"number\") {\n return `${children}`;\n }\n\n if (isValidElement<{ children: ReactNode; hidden?: boolean }>(children)) {\n if (children.props.hidden) {\n return \"\";\n }\n\n return getLabelFromChildren(children.props.children);\n }\n\n const childList = Children.toArray(children);\n for (const child of childList) {\n if (typeof child === \"string\" || typeof child === \"number\") {\n return `${child}`[0].toUpperCase();\n }\n\n if (\n isValidElement<{ children: ReactNode; hidden?: boolean }>(child) &&\n !child.props.hidden\n ) {\n return getLabelFromChildren(child.props.children);\n }\n }\n\n return \"\";\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\ninterface ExtractedOptions<Value extends string | number> {\n options: readonly Value[];\n currentOption: SelectOption<Value> | undefined;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport function extractOptionsFromChildren<Value extends string | number>(\n children: ReactNode,\n currentValue: Value | undefined\n): ExtractedOptions<Value> {\n let currentOption: SelectOption<Value> | undefined;\n\n const options: Value[] = [];\n const searchValues: string[] = [];\n Children.forEach(children, (child) => {\n if (!isValidElement<SelectOption<Value>>(child)) {\n return;\n }\n\n const { value, disabled, children } = child.props;\n if (typeof value !== \"undefined\") {\n if (\n value === currentValue ||\n (!currentOption && typeof currentValue === \"undefined\")\n ) {\n currentOption = child.props;\n }\n\n if (!disabled) {\n options.push(child.props.value);\n searchValues.push(getLabelFromChildren(children));\n }\n } else if (children) {\n const result = extractOptionsFromChildren(children, currentValue);\n if (!currentOption) {\n ({ currentOption } = result);\n }\n\n options.push(...result.options);\n }\n });\n\n return {\n options,\n currentOption,\n };\n}\n"],"names":["Children","isValidElement","getLabelFromChildren","children","props","hidden","childList","toArray","child","toUpperCase","extractOptionsFromChildren","currentValue","currentOption","options","searchValues","forEach","value","disabled","push","result"],"mappings":"AAAA,SAASA,QAAQ,EAAkBC,cAAc,QAAQ,QAAQ;AAajE;;;CAGC,GACD,SAASC,qBAAqBC,QAAmB;IAC/C,IAAI,CAACA,UAAU;QACb,OAAO;IACT;IAEA,IAAI,OAAOA,aAAa,YAAY,OAAOA,aAAa,UAAU;QAChE,OAAO,GAAGA,UAAU;IACtB;IAEA,IAAIF,eAA0DE,WAAW;QACvE,IAAIA,SAASC,KAAK,CAACC,MAAM,EAAE;YACzB,OAAO;QACT;QAEA,OAAOH,qBAAqBC,SAASC,KAAK,CAACD,QAAQ;IACrD;IAEA,MAAMG,YAAYN,SAASO,OAAO,CAACJ;IACnC,KAAK,MAAMK,SAASF,UAAW;QAC7B,IAAI,OAAOE,UAAU,YAAY,OAAOA,UAAU,UAAU;YAC1D,OAAO,GAAGA,OAAO,CAAC,EAAE,CAACC,WAAW;QAClC;QAEA,IACER,eAA0DO,UAC1D,CAACA,MAAMJ,KAAK,CAACC,MAAM,EACnB;YACA,OAAOH,qBAAqBM,MAAMJ,KAAK,CAACD,QAAQ;QAClD;IACF;IAEA,OAAO;AACT;AAWA;;;CAGC,GACD,OAAO,SAASO,2BACdP,QAAmB,EACnBQ,YAA+B;IAE/B,IAAIC;IAEJ,MAAMC,UAAmB,EAAE;IAC3B,MAAMC,eAAyB,EAAE;IACjCd,SAASe,OAAO,CAACZ,UAAU,CAACK;QAC1B,IAAI,CAACP,eAAoCO,QAAQ;YAC/C;QACF;QAEA,MAAM,EAAEQ,KAAK,EAAEC,QAAQ,EAAEd,QAAQ,EAAE,GAAGK,MAAMJ,KAAK;QACjD,IAAI,OAAOY,UAAU,aAAa;YAChC,IACEA,UAAUL,gBACT,CAACC,iBAAiB,OAAOD,iBAAiB,aAC3C;gBACAC,gBAAgBJ,MAAMJ,KAAK;YAC7B;YAEA,IAAI,CAACa,UAAU;gBACbJ,QAAQK,IAAI,CAACV,MAAMJ,KAAK,CAACY,KAAK;gBAC9BF,aAAaI,IAAI,CAAChB,qBAAqBC;YACzC;QACF,OAAO,IAAIA,UAAU;YACnB,MAAMgB,SAAST,2BAA2BP,UAAUQ;YACpD,IAAI,CAACC,eAAe;gBACjB,CAAA,EAAEA,aAAa,EAAE,GAAGO,MAAK;YAC5B;YAEAN,QAAQK,IAAI,IAAIC,OAAON,OAAO;QAChC;IACF;IAEA,OAAO;QACLA;QACAD;IACF;AACF"}
@@ -20,7 +20,7 @@ export declare const getJumpValue: (options: JumpOptions) => number;
20
20
  * @since 6.0.0
21
21
  * @internal
22
22
  */
23
- type RequiredThumbProps = Pick<DraggableImplementation, "dragging" | keyof DraggableMouseEventHandlers<HTMLElement> | keyof DraggableTouchEventHandlers<HTMLElement>> & {
23
+ export type RequiredThumbProps = Pick<DraggableImplementation, "dragging" | keyof DraggableMouseEventHandlers<HTMLElement> | keyof DraggableTouchEventHandlers<HTMLElement>> & {
24
24
  ref: RefObject<HTMLSpanElement>;
25
25
  };
26
26
  /**
@@ -38,11 +38,6 @@ export type ClosestThumbEventHandlersOptions = RenameKeysWithPrefix<RequiredThum
38
38
  * @internal
39
39
  */
40
40
  export declare const getClosestThumbEventHandlers: (options: ClosestThumbEventHandlersOptions) => DraggableEventHandlers<HTMLElement>;
41
- /**
42
- * @internal
43
- * @since 6.0.0
44
- */
45
- export declare function getThumbOffset(offset: number | undefined, fallback: number): string | undefined;
46
41
  /**
47
42
  * @since 6.0.0
48
43
  * @internal
@@ -70,5 +65,5 @@ interface ThumbOffsets {
70
65
  * @since 6.0.0
71
66
  * @internal
72
67
  */
73
- export declare const getThumbOffsets: (options: ThumbOffsetsOptions) => ThumbOffsets;
68
+ export declare function getThumbOffsets(options: ThumbOffsetsOptions): ThumbOffsets;
74
69
  export {};
@@ -13,7 +13,7 @@ import { getRangeSteps } from "../utils/getRangeSteps.js";
13
13
  });
14
14
  const value = jump ?? steps / 10 * step;
15
15
  if (Number.isInteger(step)) {
16
- return Math.ceil(value);
16
+ return Math.max(step, Math.ceil(value));
17
17
  }
18
18
  return value;
19
19
  };
@@ -47,7 +47,7 @@ import { getRangeSteps } from "../utils/getRangeSteps.js";
47
47
  const thumb2Rect = thumb2.getBoundingClientRect();
48
48
  const thumb1Position = vertical ? thumb1Rect.y : thumb1Rect.x;
49
49
  const thumb2Position = vertical ? thumb2Rect.y : thumb2Rect.x;
50
- return Math.abs(clientPosition - thumb1Position) < Math.abs(clientPosition - thumb2Position);
50
+ return Math.abs(clientPosition - thumb1Position) <= Math.abs(clientPosition - thumb2Position);
51
51
  }
52
52
  return true;
53
53
  };
@@ -85,7 +85,7 @@ import { getRangeSteps } from "../utils/getRangeSteps.js";
85
85
  /**
86
86
  * @internal
87
87
  * @since 6.0.0
88
- */ export function getThumbOffset(offset, fallback) {
88
+ */ function getThumbOffset(offset, fallback) {
89
89
  if (typeof offset !== "number") {
90
90
  return;
91
91
  }
@@ -98,7 +98,7 @@ import { getRangeSteps } from "../utils/getRangeSteps.js";
98
98
  /**
99
99
  * @since 6.0.0
100
100
  * @internal
101
- */ export const getThumbOffsets = (options)=>{
101
+ */ export function getThumbOffsets(options) {
102
102
  const { min, max, thumb1Value, thumb1Dragging, thumb1DragPercentage, thumb2Value, thumb2Dragging, thumb2DragPercentage, isRangeSlider } = options;
103
103
  let thumb1Percentage = thumb1Dragging ? thumb1DragPercentage : getPercentage({
104
104
  min,
@@ -119,6 +119,6 @@ import { getRangeSteps } from "../utils/getRangeSteps.js";
119
119
  "--rmd-slider-offset-1": getThumbOffset(thumb1Percentage, 0),
120
120
  "--rmd-slider-offset-2": getThumbOffset(thumb2Percentage, 1)
121
121
  };
122
- };
122
+ }
123
123
 
124
124
  //# sourceMappingURL=sliderUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/sliderUtils.ts"],"sourcesContent":["import { type RefObject } from \"react\";\nimport {\n type DraggableEventHandlers,\n type DraggableImplementation,\n type DraggableMouseEventHandlers,\n type DraggableTouchEventHandlers,\n} from \"../draggable/useDraggable.js\";\nimport { type RenameKeysWithPrefix } from \"../types.js\";\nimport {\n getClientPosition,\n type ClientPositionEvent,\n} from \"../utils/getClientPosition.js\";\nimport { getPercentage } from \"../utils/getPercentage.js\";\nimport { getRangeSteps } from \"../utils/getRangeSteps.js\";\n\n/**\n * @since 6.0.0\n * @internal\n */\ninterface JumpOptions {\n min: number;\n max: number;\n step: number;\n jump: number | undefined;\n}\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport const getJumpValue = (options: JumpOptions): number => {\n const { min, max, step, jump } = options;\n\n const steps = getRangeSteps({ min, max, step });\n const value = jump ?? (steps / 10) * step;\n if (Number.isInteger(step)) {\n return Math.ceil(value);\n }\n\n return value;\n};\n\n/**\n * @since 6.0.0\n * @internal\n */\ntype RequiredThumbProps = Pick<\n DraggableImplementation,\n | \"dragging\"\n | keyof DraggableMouseEventHandlers<HTMLElement>\n | keyof DraggableTouchEventHandlers<HTMLElement>\n> & { ref: RefObject<HTMLSpanElement> };\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport type ClosestThumbEventHandlersOptions = RenameKeysWithPrefix<\n RequiredThumbProps,\n \"thumb1\"\n> &\n RenameKeysWithPrefix<RequiredThumbProps, \"thumb2\"> & {\n vertical: boolean;\n isRangeSlider: boolean;\n };\n\n/**\n * NOTE: I do not need the mousemove events for this one to work.\n *\n * @since 6.0.0\n * @internal\n */\nexport const getClosestThumbEventHandlers = (\n options: ClosestThumbEventHandlersOptions\n): DraggableEventHandlers<HTMLElement> => {\n const {\n thumb1Ref,\n thumb1Dragging,\n thumb1OnMouseUp,\n thumb1OnMouseDown,\n thumb1OnTouchStart,\n thumb1OnTouchMove,\n thumb2Ref,\n thumb2Dragging,\n thumb2OnMouseUp,\n thumb2OnMouseDown,\n thumb2OnTouchStart,\n thumb2OnTouchMove,\n isRangeSlider,\n vertical,\n } = options;\n\n if (!isRangeSlider) {\n return {\n onMouseDown: thumb1OnMouseDown,\n onMouseUp: thumb1OnMouseUp,\n onTouchStart: thumb1OnTouchStart,\n onTouchMove: thumb1OnTouchMove,\n };\n }\n\n const isThumbOneClosest = (event: ClientPositionEvent): boolean => {\n if (thumb2Dragging) {\n return false;\n }\n\n const thumb1 = thumb1Ref.current;\n const thumb2 = thumb2Ref.current;\n if (!thumb1Dragging && thumb1 && thumb2) {\n const clientPosition = getClientPosition({ event, vertical });\n const thumb1Rect = thumb1.getBoundingClientRect();\n const thumb2Rect = thumb2.getBoundingClientRect();\n const thumb1Position = vertical ? thumb1Rect.y : thumb1Rect.x;\n const thumb2Position = vertical ? thumb2Rect.y : thumb2Rect.x;\n\n return (\n Math.abs(clientPosition - thumb1Position) <\n Math.abs(clientPosition - thumb2Position)\n );\n }\n\n return true;\n };\n\n return {\n onMouseDown(event) {\n if (isThumbOneClosest(event)) {\n thumb1OnMouseDown(event);\n } else {\n thumb2OnMouseDown(event);\n }\n },\n onMouseUp(event) {\n if (isThumbOneClosest(event)) {\n thumb1OnMouseUp(event);\n } else {\n thumb2OnMouseUp(event);\n }\n },\n onTouchStart(event) {\n if (isThumbOneClosest(event)) {\n thumb1OnTouchStart(event);\n } else {\n thumb2OnTouchStart(event);\n }\n },\n onTouchMove(event) {\n if (isThumbOneClosest(event)) {\n thumb1OnTouchMove(event);\n } else {\n thumb2OnTouchMove(event);\n }\n },\n };\n};\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport function getThumbOffset(\n offset: number | undefined,\n fallback: number\n): string | undefined {\n if (typeof offset !== \"number\") {\n return;\n }\n\n // the `offset` will be NaN when there are no possible steps to take because\n // the first thumb is at the maximum value or the second thumb is at the\n // minimum value\n const value = Number.isNaN(offset) ? fallback : offset;\n return `${value * 100}%`;\n}\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport interface ThumbOffsetsOptions {\n min: number;\n max: number;\n thumb1Value: number;\n thumb1Dragging: boolean;\n thumb1DragPercentage: number;\n thumb2Value: number;\n thumb2Dragging: boolean;\n thumb2DragPercentage: number;\n isRangeSlider: boolean;\n}\n\n/**\n * @since 6.0.0\n * @internal\n */\ninterface ThumbOffsets {\n \"--rmd-slider-offset-1\"?: string;\n \"--rmd-slider-offset-2\"?: string;\n}\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport const getThumbOffsets = (options: ThumbOffsetsOptions): ThumbOffsets => {\n const {\n min,\n max,\n thumb1Value,\n thumb1Dragging,\n thumb1DragPercentage,\n thumb2Value,\n thumb2Dragging,\n thumb2DragPercentage,\n isRangeSlider,\n } = options;\n let thumb1Percentage = thumb1Dragging\n ? thumb1DragPercentage\n : getPercentage({ min, max, value: thumb1Value });\n\n let thumb2Percentage: number | undefined;\n if (isRangeSlider) {\n const percentage = getPercentage({ min, max, value: thumb2Value });\n\n thumb1Percentage = Math.min(thumb1Percentage, percentage);\n thumb2Percentage = thumb2Dragging\n ? Math.max(thumb1Percentage, thumb2DragPercentage)\n : percentage;\n }\n\n return {\n \"--rmd-slider-offset-1\": getThumbOffset(thumb1Percentage, 0),\n \"--rmd-slider-offset-2\": getThumbOffset(thumb2Percentage, 1),\n };\n};\n"],"names":["getClientPosition","getPercentage","getRangeSteps","getJumpValue","options","min","max","step","jump","steps","value","Number","isInteger","Math","ceil","getClosestThumbEventHandlers","thumb1Ref","thumb1Dragging","thumb1OnMouseUp","thumb1OnMouseDown","thumb1OnTouchStart","thumb1OnTouchMove","thumb2Ref","thumb2Dragging","thumb2OnMouseUp","thumb2OnMouseDown","thumb2OnTouchStart","thumb2OnTouchMove","isRangeSlider","vertical","onMouseDown","onMouseUp","onTouchStart","onTouchMove","isThumbOneClosest","event","thumb1","current","thumb2","clientPosition","thumb1Rect","getBoundingClientRect","thumb2Rect","thumb1Position","y","x","thumb2Position","abs","getThumbOffset","offset","fallback","isNaN","getThumbOffsets","thumb1Value","thumb1DragPercentage","thumb2Value","thumb2DragPercentage","thumb1Percentage","thumb2Percentage","percentage"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/form/sliderUtils.ts"],"sourcesContent":["import { type RefObject } from \"react\";\n\nimport {\n type DraggableEventHandlers,\n type DraggableImplementation,\n type DraggableMouseEventHandlers,\n type DraggableTouchEventHandlers,\n} from \"../draggable/useDraggable.js\";\nimport { type RenameKeysWithPrefix } from \"../types.js\";\nimport {\n type ClientPositionEvent,\n getClientPosition,\n} from \"../utils/getClientPosition.js\";\nimport { getPercentage } from \"../utils/getPercentage.js\";\nimport { getRangeSteps } from \"../utils/getRangeSteps.js\";\n\n/**\n * @since 6.0.0\n * @internal\n */\ninterface JumpOptions {\n min: number;\n max: number;\n step: number;\n jump: number | undefined;\n}\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport const getJumpValue = (options: JumpOptions): number => {\n const { min, max, step, jump } = options;\n\n const steps = getRangeSteps({ min, max, step });\n const value = jump ?? (steps / 10) * step;\n if (Number.isInteger(step)) {\n return Math.max(step, Math.ceil(value));\n }\n\n return value;\n};\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport type RequiredThumbProps = Pick<\n DraggableImplementation,\n | \"dragging\"\n | keyof DraggableMouseEventHandlers<HTMLElement>\n | keyof DraggableTouchEventHandlers<HTMLElement>\n> & { ref: RefObject<HTMLSpanElement> };\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport type ClosestThumbEventHandlersOptions = RenameKeysWithPrefix<\n RequiredThumbProps,\n \"thumb1\"\n> &\n RenameKeysWithPrefix<RequiredThumbProps, \"thumb2\"> & {\n vertical: boolean;\n isRangeSlider: boolean;\n };\n\n/**\n * NOTE: I do not need the mousemove events for this one to work.\n *\n * @since 6.0.0\n * @internal\n */\nexport const getClosestThumbEventHandlers = (\n options: ClosestThumbEventHandlersOptions\n): DraggableEventHandlers<HTMLElement> => {\n const {\n thumb1Ref,\n thumb1Dragging,\n thumb1OnMouseUp,\n thumb1OnMouseDown,\n thumb1OnTouchStart,\n thumb1OnTouchMove,\n thumb2Ref,\n thumb2Dragging,\n thumb2OnMouseUp,\n thumb2OnMouseDown,\n thumb2OnTouchStart,\n thumb2OnTouchMove,\n isRangeSlider,\n vertical,\n } = options;\n\n if (!isRangeSlider) {\n return {\n onMouseDown: thumb1OnMouseDown,\n onMouseUp: thumb1OnMouseUp,\n onTouchStart: thumb1OnTouchStart,\n onTouchMove: thumb1OnTouchMove,\n };\n }\n\n const isThumbOneClosest = (event: ClientPositionEvent): boolean => {\n if (thumb2Dragging) {\n return false;\n }\n\n const thumb1 = thumb1Ref.current;\n const thumb2 = thumb2Ref.current;\n if (!thumb1Dragging && thumb1 && thumb2) {\n const clientPosition = getClientPosition({ event, vertical });\n const thumb1Rect = thumb1.getBoundingClientRect();\n const thumb2Rect = thumb2.getBoundingClientRect();\n const thumb1Position = vertical ? thumb1Rect.y : thumb1Rect.x;\n const thumb2Position = vertical ? thumb2Rect.y : thumb2Rect.x;\n\n return (\n Math.abs(clientPosition - thumb1Position) <=\n Math.abs(clientPosition - thumb2Position)\n );\n }\n\n return true;\n };\n\n return {\n onMouseDown(event) {\n if (isThumbOneClosest(event)) {\n thumb1OnMouseDown(event);\n } else {\n thumb2OnMouseDown(event);\n }\n },\n onMouseUp(event) {\n if (isThumbOneClosest(event)) {\n thumb1OnMouseUp(event);\n } else {\n thumb2OnMouseUp(event);\n }\n },\n onTouchStart(event) {\n if (isThumbOneClosest(event)) {\n thumb1OnTouchStart(event);\n } else {\n thumb2OnTouchStart(event);\n }\n },\n onTouchMove(event) {\n if (isThumbOneClosest(event)) {\n thumb1OnTouchMove(event);\n } else {\n thumb2OnTouchMove(event);\n }\n },\n };\n};\n\n/**\n * @internal\n * @since 6.0.0\n */\nfunction getThumbOffset(\n offset: number | undefined,\n fallback: number\n): string | undefined {\n if (typeof offset !== \"number\") {\n return;\n }\n\n // the `offset` will be NaN when there are no possible steps to take because\n // the first thumb is at the maximum value or the second thumb is at the\n // minimum value\n const value = Number.isNaN(offset) ? fallback : offset;\n return `${value * 100}%`;\n}\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport interface ThumbOffsetsOptions {\n min: number;\n max: number;\n thumb1Value: number;\n thumb1Dragging: boolean;\n thumb1DragPercentage: number;\n thumb2Value: number;\n thumb2Dragging: boolean;\n thumb2DragPercentage: number;\n isRangeSlider: boolean;\n}\n\n/**\n * @since 6.0.0\n * @internal\n */\ninterface ThumbOffsets {\n \"--rmd-slider-offset-1\"?: string;\n \"--rmd-slider-offset-2\"?: string;\n}\n\n/**\n * @since 6.0.0\n * @internal\n */\nexport function getThumbOffsets(options: ThumbOffsetsOptions): ThumbOffsets {\n const {\n min,\n max,\n thumb1Value,\n thumb1Dragging,\n thumb1DragPercentage,\n thumb2Value,\n thumb2Dragging,\n thumb2DragPercentage,\n isRangeSlider,\n } = options;\n let thumb1Percentage = thumb1Dragging\n ? thumb1DragPercentage\n : getPercentage({ min, max, value: thumb1Value });\n\n let thumb2Percentage: number | undefined;\n if (isRangeSlider) {\n const percentage = getPercentage({ min, max, value: thumb2Value });\n\n thumb1Percentage = Math.min(thumb1Percentage, percentage);\n thumb2Percentage = thumb2Dragging\n ? Math.max(thumb1Percentage, thumb2DragPercentage)\n : percentage;\n }\n\n return {\n \"--rmd-slider-offset-1\": getThumbOffset(thumb1Percentage, 0),\n \"--rmd-slider-offset-2\": getThumbOffset(thumb2Percentage, 1),\n };\n}\n"],"names":["getClientPosition","getPercentage","getRangeSteps","getJumpValue","options","min","max","step","jump","steps","value","Number","isInteger","Math","ceil","getClosestThumbEventHandlers","thumb1Ref","thumb1Dragging","thumb1OnMouseUp","thumb1OnMouseDown","thumb1OnTouchStart","thumb1OnTouchMove","thumb2Ref","thumb2Dragging","thumb2OnMouseUp","thumb2OnMouseDown","thumb2OnTouchStart","thumb2OnTouchMove","isRangeSlider","vertical","onMouseDown","onMouseUp","onTouchStart","onTouchMove","isThumbOneClosest","event","thumb1","current","thumb2","clientPosition","thumb1Rect","getBoundingClientRect","thumb2Rect","thumb1Position","y","x","thumb2Position","abs","getThumbOffset","offset","fallback","isNaN","getThumbOffsets","thumb1Value","thumb1DragPercentage","thumb2Value","thumb2DragPercentage","thumb1Percentage","thumb2Percentage","percentage"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/switchStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { bem } from \"../utils/bem.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-switch-track-background-color\"?: string;\n \"--rmd-switch-ball-background-color\"?: string;\n }\n}\n\nconst styles = bem(\"rmd-switch\");\n\n/**\n * @since 6.0.0\n */\nexport interface SwitchClassNameOptions {\n className?: string;\n clickable?: boolean;\n currentColor?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function switchStyles(options: SwitchClassNameOptions = {}): string {\n const { className, clickable, currentColor } = options;\n\n return cnb(styles({ \"current-color\": currentColor, clickable }), className);\n}\n"],"names":["cnb","bem","styles","switchStyles","options","className","clickable","currentColor"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,GAAG,QAAQ,kBAAkB;AAStC,MAAMC,SAASD,IAAI;AAWnB;;CAEC,GACD,OAAO,SAASE,aAAaC,UAAkC,CAAC,CAAC;IAC/D,MAAM,EAAEC,SAAS,EAAEC,SAAS,EAAEC,YAAY,EAAE,GAAGH;IAE/C,OAAOJ,IAAIE,OAAO;QAAE,iBAAiBK;QAAcD;IAAU,IAAID;AACnE"}
1
+ {"version":3,"sources":["../../src/form/switchStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\n\nimport { bem } from \"../utils/bem.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-switch-track-background-color\"?: string;\n \"--rmd-switch-ball-background-color\"?: string;\n }\n}\n\nconst styles = bem(\"rmd-switch\");\n\n/**\n * @since 6.0.0\n */\nexport interface SwitchClassNameOptions {\n className?: string;\n clickable?: boolean;\n currentColor?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function switchStyles(options: SwitchClassNameOptions = {}): string {\n const { className, clickable, currentColor } = options;\n\n return cnb(styles({ \"current-color\": currentColor, clickable }), className);\n}\n"],"names":["cnb","bem","styles","switchStyles","options","className","clickable","currentColor"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SAASC,GAAG,QAAQ,kBAAkB;AAStC,MAAMC,SAASD,IAAI;AAWnB;;CAEC,GACD,OAAO,SAASE,aAAaC,UAAkC,CAAC,CAAC;IAC/D,MAAM,EAAEC,SAAS,EAAEC,SAAS,EAAEC,YAAY,EAAE,GAAGH;IAE/C,OAAOJ,IAAIE,OAAO;QAAE,iBAAiBK;QAAcD;IAAU,IAAID;AACnE"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/textAreaStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { bem } from \"../utils/bem.js\";\nimport {\n textField,\n type TextFieldClassNameOptions,\n} from \"./textFieldStyles.js\";\nimport { type TextAreaResize } from \"./useResizingTextArea.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-textarea-height\"?: string | number;\n \"--rmd-textarea-padding\"?: string | number;\n }\n}\n\nconst styles = bem(\"rmd-textarea\");\nconst containerStyles = bem(\"rmd-textarea-container\");\n\n/**\n * @since 6.0.0\n */\nexport interface TextareaClassNameOptions extends TextFieldClassNameOptions {\n className?: string;\n\n /**\n * This should not be used externally and is only used for creating the hidden\n * textarea mask for the auto resizing behavior.\n *\n * @defaultValue `false`\n */\n mask?: boolean;\n\n /**\n * @see {@link TextAreaResize}\n * @defaultValue `\"auto\"`\n */\n resize?: TextAreaResize;\n\n /**\n * Set this to `true` if the textarea should display a scrollbar.\n *\n * @defaultValue `false`\n */\n scrollable?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function textArea(options: TextareaClassNameOptions = {}): string {\n const {\n className,\n mask,\n resize = \"auto\",\n scrollable,\n placeholderHidden,\n } = options;\n\n return cnb(\n textField({ placeholderHidden }),\n styles({\n rh: resize === \"horizontal\",\n rv: resize === \"vertical\",\n rn: resize === \"auto\" || resize === \"none\",\n mask,\n scrollable: scrollable || resize === \"none\",\n }),\n className\n );\n}\n\n/**\n * @since 6.0.0\n */\nexport interface TextareaContainerClassNameOptions {\n className?: string;\n height?: boolean;\n disabled?: boolean;\n animate?: boolean;\n underlineLabelled?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function textAreaContainer(\n options: TextareaContainerClassNameOptions = {}\n): string {\n const { className, height, animate, disabled, underlineLabelled } = options;\n\n return cnb(\n containerStyles({\n height,\n animate,\n cursor: !disabled,\n \"underline-labelled\": underlineLabelled,\n }),\n className\n );\n}\n"],"names":["cnb","bem","textField","styles","containerStyles","textArea","options","className","mask","resize","scrollable","placeholderHidden","rh","rv","rn","textAreaContainer","height","animate","disabled","underlineLabelled","cursor"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,GAAG,QAAQ,kBAAkB;AACtC,SACEC,SAAS,QAEJ,uBAAuB;AAU9B,MAAMC,SAASF,IAAI;AACnB,MAAMG,kBAAkBH,IAAI;AA8B5B;;CAEC,GACD,OAAO,SAASI,SAASC,UAAoC,CAAC,CAAC;IAC7D,MAAM,EACJC,SAAS,EACTC,IAAI,EACJC,SAAS,MAAM,EACfC,UAAU,EACVC,iBAAiB,EAClB,GAAGL;IAEJ,OAAON,IACLE,UAAU;QAAES;IAAkB,IAC9BR,OAAO;QACLS,IAAIH,WAAW;QACfI,IAAIJ,WAAW;QACfK,IAAIL,WAAW,UAAUA,WAAW;QACpCD;QACAE,YAAYA,cAAcD,WAAW;IACvC,IACAF;AAEJ;AAaA;;CAEC,GACD,OAAO,SAASQ,kBACdT,UAA6C,CAAC,CAAC;IAE/C,MAAM,EAAEC,SAAS,EAAES,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,iBAAiB,EAAE,GAAGb;IAEpE,OAAON,IACLI,gBAAgB;QACdY;QACAC;QACAG,QAAQ,CAACF;QACT,sBAAsBC;IACxB,IACAZ;AAEJ"}
1
+ {"version":3,"sources":["../../src/form/textAreaStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\n\nimport { bem } from \"../utils/bem.js\";\nimport {\n type TextFieldClassNameOptions,\n textField,\n} from \"./textFieldStyles.js\";\nimport { type TextAreaResize } from \"./useResizingTextArea.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-textarea-height\"?: string | number;\n \"--rmd-textarea-padding\"?: string | number;\n }\n}\n\nconst styles = bem(\"rmd-textarea\");\nconst containerStyles = bem(\"rmd-textarea-container\");\n\n/**\n * @since 6.0.0\n */\nexport interface TextareaClassNameOptions extends TextFieldClassNameOptions {\n className?: string;\n\n /**\n * This should not be used externally and is only used for creating the hidden\n * textarea mask for the auto resizing behavior.\n *\n * @defaultValue `false`\n */\n mask?: boolean;\n\n /**\n * @see {@link TextAreaResize}\n * @defaultValue `\"auto\"`\n */\n resize?: TextAreaResize;\n\n /**\n * Set this to `true` if the textarea should display a scrollbar.\n *\n * @defaultValue `false`\n */\n scrollable?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function textArea(options: TextareaClassNameOptions = {}): string {\n const {\n className,\n mask,\n resize = \"auto\",\n scrollable,\n placeholderHidden,\n } = options;\n\n return cnb(\n textField({ placeholderHidden }),\n styles({\n rh: resize === \"horizontal\",\n rv: resize === \"vertical\",\n rn: resize === \"auto\" || resize === \"none\",\n mask,\n scrollable: scrollable || resize === \"none\",\n }),\n className\n );\n}\n\n/**\n * @since 6.0.0\n */\nexport interface TextareaContainerClassNameOptions {\n className?: string;\n height?: boolean;\n disabled?: boolean;\n animate?: boolean;\n underlineLabelled?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function textAreaContainer(\n options: TextareaContainerClassNameOptions = {}\n): string {\n const { className, height, animate, disabled, underlineLabelled } = options;\n\n return cnb(\n containerStyles({\n height,\n animate,\n cursor: !disabled,\n \"underline-labelled\": underlineLabelled,\n }),\n className\n );\n}\n"],"names":["cnb","bem","textField","styles","containerStyles","textArea","options","className","mask","resize","scrollable","placeholderHidden","rh","rv","rn","textAreaContainer","height","animate","disabled","underlineLabelled","cursor"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SAASC,GAAG,QAAQ,kBAAkB;AACtC,SAEEC,SAAS,QACJ,uBAAuB;AAU9B,MAAMC,SAASF,IAAI;AACnB,MAAMG,kBAAkBH,IAAI;AA8B5B;;CAEC,GACD,OAAO,SAASI,SAASC,UAAoC,CAAC,CAAC;IAC7D,MAAM,EACJC,SAAS,EACTC,IAAI,EACJC,SAAS,MAAM,EACfC,UAAU,EACVC,iBAAiB,EAClB,GAAGL;IAEJ,OAAON,IACLE,UAAU;QAAES;IAAkB,IAC9BR,OAAO;QACLS,IAAIH,WAAW;QACfI,IAAIJ,WAAW;QACfK,IAAIL,WAAW,UAAUA,WAAW;QACpCD;QACAE,YAAYA,cAAcD,WAAW;IACvC,IACAF;AAEJ;AAaA;;CAEC,GACD,OAAO,SAASQ,kBACdT,UAA6C,CAAC,CAAC;IAE/C,MAAM,EAAEC,SAAS,EAAES,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,iBAAiB,EAAE,GAAGb;IAEpE,OAAON,IACLI,gBAAgB;QACdY;QACAC;QACAG,QAAQ,CAACF;QACT,sBAAsBC;IACxB,IACAZ;AAEJ"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/textFieldContainerStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { cssUtils, type TextColor, type ThemeColor } from \"../cssUtils.js\";\nimport { bem } from \"../utils/bem.js\";\nimport { type FormComponentStates, type FormThemeOptions } from \"./types.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-text-field-height\"?: string | number;\n \"--rmd-text-field-padding-left\"?: string | number;\n \"--rmd-text-field-padding-right\"?: string | number;\n \"--rmd-text-field-padding-top\"?: string | number;\n \"--rmd-text-field-border-color\"?: string;\n \"--rmd-text-field-hover-border-color\"?: string;\n \"--rmd-text-field-filled-color\"?: string;\n \"--rmd-form-addon-top\"?: string | number;\n \"--rmd-form-addon-margin-top\"?: string | number;\n }\n}\n\nconst styles = bem(\"rmd-text-field-container\");\n\n/** @since 6.0.0 */\nexport interface TextFieldContainerClassNameOptions\n extends FormThemeOptions,\n FormComponentStates {\n className?: string;\n\n /** @defaultValue `false` */\n dense?: boolean;\n\n /** @defaultValue `false` */\n inline?: boolean;\n\n /** @defaultValue `false` */\n label?: boolean;\n\n /** @defaultValue `false` */\n leftAddon?: boolean;\n\n /** @defaultValue `false` */\n rightAddon?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function textFieldContainer(\n options: TextFieldContainerClassNameOptions = {}\n): string {\n const {\n className,\n theme = \"outline\",\n dense,\n error,\n label,\n active,\n inline,\n readOnly,\n disabled,\n leftAddon,\n rightAddon,\n underlineDirection = \"left\",\n } = options;\n const underline = theme === \"underline\";\n const outline = theme === \"outline\";\n const filled = theme === \"filled\";\n const isUnderlined = underline || filled;\n const isOutlineActive = outline && active;\n\n let textColor: ThemeColor | TextColor | undefined;\n if (disabled) {\n textColor = \"text-disabled\";\n } else if (error) {\n textColor = \"error\";\n }\n\n return cnb(\n styles({\n error,\n inline,\n filled,\n outline,\n disabled: disabled || readOnly,\n hoverable: !disabled && !isOutlineActive,\n label: label && !dense,\n dense: !label && dense,\n \"dense-label\": label && dense,\n \"dense-placeholder\": !label && dense && isUnderlined,\n \"outline-active\": isOutlineActive,\n \"outline-error\": outline && error,\n \"outline-left\": outline && leftAddon,\n \"outline-right\": outline && rightAddon,\n underline: isUnderlined,\n \"underline-placeholder\": isUnderlined && !label,\n \"underline-placeholder-only\":\n isUnderlined && !label && !leftAddon && !rightAddon,\n \"underline-labelled\": isUnderlined && label,\n \"underline-active\": isUnderlined && active,\n [`underline-${underlineDirection}`]: isUnderlined,\n \"underline-left-addon\": isUnderlined && leftAddon,\n \"underline-right-addon\": isUnderlined && rightAddon,\n }),\n cssUtils({ textColor }),\n className\n );\n}\n"],"names":["cnb","cssUtils","bem","styles","textFieldContainer","options","className","theme","dense","error","label","active","inline","readOnly","disabled","leftAddon","rightAddon","underlineDirection","underline","outline","filled","isUnderlined","isOutlineActive","textColor","hoverable"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,QAAQ,QAAyC,iBAAiB;AAC3E,SAASC,GAAG,QAAQ,kBAAkB;AAiBtC,MAAMC,SAASD,IAAI;AAwBnB;;CAEC,GACD,OAAO,SAASE,mBACdC,UAA8C,CAAC,CAAC;IAEhD,MAAM,EACJC,SAAS,EACTC,QAAQ,SAAS,EACjBC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,MAAM,EACNC,MAAM,EACNC,QAAQ,EACRC,QAAQ,EACRC,SAAS,EACTC,UAAU,EACVC,qBAAqB,MAAM,EAC5B,GAAGZ;IACJ,MAAMa,YAAYX,UAAU;IAC5B,MAAMY,UAAUZ,UAAU;IAC1B,MAAMa,SAASb,UAAU;IACzB,MAAMc,eAAeH,aAAaE;IAClC,MAAME,kBAAkBH,WAAWR;IAEnC,IAAIY;IACJ,IAAIT,UAAU;QACZS,YAAY;IACd,OAAO,IAAId,OAAO;QAChBc,YAAY;IACd;IAEA,OAAOvB,IACLG,OAAO;QACLM;QACAG;QACAQ;QACAD;QACAL,UAAUA,YAAYD;QACtBW,WAAW,CAACV,YAAY,CAACQ;QACzBZ,OAAOA,SAAS,CAACF;QACjBA,OAAO,CAACE,SAASF;QACjB,eAAeE,SAASF;QACxB,qBAAqB,CAACE,SAASF,SAASa;QACxC,kBAAkBC;QAClB,iBAAiBH,WAAWV;QAC5B,gBAAgBU,WAAWJ;QAC3B,iBAAiBI,WAAWH;QAC5BE,WAAWG;QACX,yBAAyBA,gBAAgB,CAACX;QAC1C,8BACEW,gBAAgB,CAACX,SAAS,CAACK,aAAa,CAACC;QAC3C,sBAAsBK,gBAAgBX;QACtC,oBAAoBW,gBAAgBV;QACpC,CAAC,CAAC,UAAU,EAAEM,oBAAoB,CAAC,EAAEI;QACrC,wBAAwBA,gBAAgBN;QACxC,yBAAyBM,gBAAgBL;IAC3C,IACAf,SAAS;QAAEsB;IAAU,IACrBjB;AAEJ"}
1
+ {"version":3,"sources":["../../src/form/textFieldContainerStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\n\nimport { type TextColor, type ThemeColor, cssUtils } from \"../cssUtils.js\";\nimport { bem } from \"../utils/bem.js\";\nimport { type FormComponentStates, type FormThemeOptions } from \"./types.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-text-field-height\"?: string | number;\n \"--rmd-text-field-padding-left\"?: string | number;\n \"--rmd-text-field-padding-right\"?: string | number;\n \"--rmd-text-field-padding-top\"?: string | number;\n \"--rmd-text-field-border-color\"?: string;\n \"--rmd-text-field-hover-border-color\"?: string;\n \"--rmd-text-field-filled-color\"?: string;\n \"--rmd-form-addon-top\"?: string | number;\n \"--rmd-form-addon-margin-top\"?: string | number;\n }\n}\n\nconst styles = bem(\"rmd-text-field-container\");\n\n/** @since 6.0.0 */\nexport interface TextFieldContainerClassNameOptions\n extends FormThemeOptions,\n FormComponentStates {\n className?: string;\n\n /** @defaultValue `false` */\n dense?: boolean;\n\n /** @defaultValue `false` */\n inline?: boolean;\n\n /** @defaultValue `false` */\n label?: boolean;\n\n /** @defaultValue `false` */\n leftAddon?: boolean;\n\n /** @defaultValue `false` */\n rightAddon?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function textFieldContainer(\n options: TextFieldContainerClassNameOptions = {}\n): string {\n const {\n className,\n theme = \"outline\",\n dense,\n error,\n label,\n active,\n inline,\n readOnly,\n disabled,\n leftAddon,\n rightAddon,\n underlineDirection = \"left\",\n } = options;\n const underline = theme === \"underline\";\n const outline = theme === \"outline\";\n const filled = theme === \"filled\";\n const isUnderlined = underline || filled;\n const isOutlineActive = outline && active;\n\n let textColor: ThemeColor | TextColor | undefined;\n if (disabled) {\n textColor = \"text-disabled\";\n } else if (error) {\n textColor = \"error\";\n }\n\n return cnb(\n styles({\n error,\n inline,\n filled,\n outline,\n disabled: disabled || readOnly,\n hoverable: !disabled && !isOutlineActive,\n label: label && !dense,\n dense: !label && dense,\n \"dense-label\": label && dense,\n \"dense-placeholder\": !label && dense && isUnderlined,\n \"outline-active\": isOutlineActive,\n \"outline-error\": outline && error,\n \"outline-left\": outline && leftAddon,\n \"outline-right\": outline && rightAddon,\n underline: isUnderlined,\n \"underline-placeholder\": isUnderlined && !label,\n \"underline-placeholder-only\":\n isUnderlined && !label && !leftAddon && !rightAddon,\n \"underline-labelled\": isUnderlined && label,\n \"underline-active\": isUnderlined && active,\n [`underline-${underlineDirection}`]: isUnderlined,\n \"underline-left-addon\": isUnderlined && leftAddon,\n \"underline-right-addon\": isUnderlined && rightAddon,\n }),\n cssUtils({ textColor }),\n className\n );\n}\n"],"names":["cnb","cssUtils","bem","styles","textFieldContainer","options","className","theme","dense","error","label","active","inline","readOnly","disabled","leftAddon","rightAddon","underlineDirection","underline","outline","filled","isUnderlined","isOutlineActive","textColor","hoverable"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SAA0CC,QAAQ,QAAQ,iBAAiB;AAC3E,SAASC,GAAG,QAAQ,kBAAkB;AAiBtC,MAAMC,SAASD,IAAI;AAwBnB;;CAEC,GACD,OAAO,SAASE,mBACdC,UAA8C,CAAC,CAAC;IAEhD,MAAM,EACJC,SAAS,EACTC,QAAQ,SAAS,EACjBC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,MAAM,EACNC,MAAM,EACNC,QAAQ,EACRC,QAAQ,EACRC,SAAS,EACTC,UAAU,EACVC,qBAAqB,MAAM,EAC5B,GAAGZ;IACJ,MAAMa,YAAYX,UAAU;IAC5B,MAAMY,UAAUZ,UAAU;IAC1B,MAAMa,SAASb,UAAU;IACzB,MAAMc,eAAeH,aAAaE;IAClC,MAAME,kBAAkBH,WAAWR;IAEnC,IAAIY;IACJ,IAAIT,UAAU;QACZS,YAAY;IACd,OAAO,IAAId,OAAO;QAChBc,YAAY;IACd;IAEA,OAAOvB,IACLG,OAAO;QACLM;QACAG;QACAQ;QACAD;QACAL,UAAUA,YAAYD;QACtBW,WAAW,CAACV,YAAY,CAACQ;QACzBZ,OAAOA,SAAS,CAACF;QACjBA,OAAO,CAACE,SAASF;QACjB,eAAeE,SAASF;QACxB,qBAAqB,CAACE,SAASF,SAASa;QACxC,kBAAkBC;QAClB,iBAAiBH,WAAWV;QAC5B,gBAAgBU,WAAWJ;QAC3B,iBAAiBI,WAAWH;QAC5BE,WAAWG;QACX,yBAAyBA,gBAAgB,CAACX;QAC1C,8BACEW,gBAAgB,CAACX,SAAS,CAACK,aAAa,CAACC;QAC3C,sBAAsBK,gBAAgBX;QACtC,oBAAoBW,gBAAgBV;QACpC,CAAC,CAAC,UAAU,EAAEM,oBAAoB,CAAC,EAAEI;QACrC,wBAAwBA,gBAAgBN;QACxC,yBAAyBM,gBAAgBL;IAC3C,IACAf,SAAS;QAAEsB;IAAU,IACrBjB;AAEJ"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/textFieldStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-text-field\");\n\n/** @since 6.0.0 */\nexport interface TextFieldClassNameOptions {\n className?: string;\n\n /**\n * Set this value to `true` when a text field has a floating label the text\n * field is not focused or valued so that the placeholder is hidden by setting\n * the opacity to 0. This makes it so the placeholder and label to not cover\n * each other.\n *\n * @defaultValue `false`\n */\n placeholderHidden?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function textField(options: TextFieldClassNameOptions = {}): string {\n const { className, placeholderHidden = false } = options;\n\n return cnb(\n styles({\n \"placeholder-hidden\": placeholderHidden,\n }),\n className\n );\n}\n"],"names":["cnb","bem","styles","textField","options","className","placeholderHidden"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAiBnB;;CAEC,GACD,OAAO,SAASE,UAAUC,UAAqC,CAAC,CAAC;IAC/D,MAAM,EAAEC,SAAS,EAAEC,oBAAoB,KAAK,EAAE,GAAGF;IAEjD,OAAOJ,IACLE,OAAO;QACL,sBAAsBI;IACxB,IACAD;AAEJ"}
1
+ {"version":3,"sources":["../../src/form/textFieldStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\n\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-text-field\");\n\n/** @since 6.0.0 */\nexport interface TextFieldClassNameOptions {\n className?: string;\n\n /**\n * Set this value to `true` when a text field has a floating label the text\n * field is not focused or valued so that the placeholder is hidden by setting\n * the opacity to 0. This makes it so the placeholder and label to not cover\n * each other.\n *\n * @defaultValue `false`\n */\n placeholderHidden?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function textField(options: TextFieldClassNameOptions = {}): string {\n const { className, placeholderHidden = false } = options;\n\n return cnb(\n styles({\n \"placeholder-hidden\": placeholderHidden,\n }),\n className\n );\n}\n"],"names":["cnb","bem","styles","textField","options","className","placeholderHidden"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAEhC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAiBnB;;CAEC,GACD,OAAO,SAASE,UAAUC,UAAqC,CAAC,CAAC;IAC/D,MAAM,EAAEC,SAAS,EAAEC,oBAAoB,KAAK,EAAE,GAAGF;IAEjD,OAAOJ,IACLE,OAAO;QACL,sBAAsBI;IACxB,IACAD;AAEJ"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/types.ts"],"sourcesContent":["import {\n type CSSProperties,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type LabelHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { type PropsWithRef } from \"../types.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-form-active-color\"?: string;\n \"--rmd-form-focus-color\"?: string;\n }\n}\n\n/**\n * The supported themes for the `TextField`, `TextArea`, and `Select`\n * components.\n *\n * - \"none\" - display as an unstyled text field without any border or background\n * colors.\n * - \"underline\" - display with only an underline that gains the form active\n * color and animates from the left or right to the other side when the field\n * is focused.\n * - \"filled\" - an extension of the `\"underline\"` state that will also have a\n * slightly dark background applied.\n * - \"outline\" - outlines the entire text field in a border and applies the\n * active color as box shadow when the field is focused.\n */\nexport type FormTheme = \"none\" | \"underline\" | \"filled\" | \"outline\";\n\n/**\n * The direction that the underline should appear from when the theme is\n * `\"underline\"` or `\"filled\"`.\n */\nexport type FormUnderlineDirection = \"left\" | \"center\" | \"right\";\n\nexport interface FormThemeOptions {\n /**\n * The current theme type.\n *\n * @defaultValue `\"outline\"`\n */\n theme?: FormTheme;\n\n /**\n * The current underline direction.\n *\n * @defaultValue `\"left\"`\n */\n underlineDirection?: FormUnderlineDirection;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface FormConfiguration extends Required<FormThemeOptions> {\n /**\n * Set this to `false` if the `$disable-uncontrolled-input-toggles` variable\n * is set to `true` in the Sass configuration.\n *\n * Since the `checked` state only changes for the radio that has been clicked,\n * the previously checked radio would also be shown as checked with no way of\n * fixing it without controlling the radio component. When this flag is\n * enabled, the checked icons and state are handled through css instead of\n * `useState`.\n *\n * @defaultValue `true`\n */\n uncontrolledToggles: boolean;\n}\n\nexport interface FormComponentStates {\n /** @defaultValue `false` */\n error?: boolean;\n\n /** @defaultValue `false` */\n active?: boolean;\n\n /** @defaultValue `false` */\n disabled?: boolean;\n\n /** @defaultValue `false` */\n readOnly?: boolean;\n}\n\n/**\n * @since 6.0.0\n * @see https://html.spec.whatwg.org/multipage/forms.html#autofill\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#values\n */\nexport type AutocompleteAttributeValue =\n | \"off\"\n | \"on\"\n | \"name\"\n | \"honorific-prefix\"\n | \"given-name\"\n | \"additional-name\"\n | \"family-name\"\n | \"honorific-suffix\"\n | \"nickname\"\n | \"email\"\n | \"username\"\n | \"new-password\"\n | \"current-password\"\n | \"one-time-code\"\n | \"organization-title\"\n | \"organization\"\n | \"street-address\"\n | \"address-line1\"\n | \"address-line2\"\n | \"address-line3\"\n | \"address-level1\"\n | \"address-level2\"\n | \"address-level3\"\n | \"address-level4\"\n | \"country\"\n | \"country-name\"\n | \"postal-code\"\n | \"cc-name\"\n | \"cc-given-name\"\n | \"cc-additional-name\"\n | \"cc-family-name\"\n | \"cc-number\"\n | \"cc-exp\"\n | \"cc-exp-month\"\n | \"cc-exp-year\"\n | \"cc-csc\"\n | \"cc-type\"\n | \"transaction-currency\"\n | \"transaction-amount\"\n | \"language\"\n | \"bday\"\n | \"bday-day\"\n | \"bday-month\"\n | \"bday-year\"\n | \"sex\"\n | \"tel\"\n | \"tel-country-code\"\n | \"tel-national\"\n | \"tek-area-code\"\n | \"tel-local\"\n | \"tel-extension\"\n | \"impp\"\n | \"url\"\n | \"photo\";\n\n/**\n * @since 6.0.0\n */\nexport interface UserAgentAutocompleteProps {\n /**\n * Set this to enable additional autocompletion suggestions for a user for\n * different form fields. Using this prop will update the\n * {@link UserAgentAutocompleteProps.name} and {@link autoComplete} to default to\n * this value.\n *\n * @example\n * ```tsx\n * <Form>\n * <TextField\n * label=\"Enter your credit card number\"\n * autoCompleteValue=\"cc-number\"\n * {...creditCardProps}\n * inputMode=\"number\"\n * />\n * <TextField\n * label=\"Name on card\"\n * autoCompleteValue=\"cc-name\"\n * {...creditCardNameProps}\n * />\n * <TextField\n * label=\"Security code\"\n * autoCompleteValue=\"cc-csc\"\n * {...securityCodeProps}\n * inputMode=\"number\"\n * />\n * <Button type=\"submit\">Submit</Button>\n * </Form>\n * ```\n *\n * @see https://html.spec.whatwg.org/multipage/forms.html#autofill\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#values\n * @see {@link AutocompleteAttributeValue}\n * @see {@link autoComplete}\n * @see {@link UserAgentAutocompleteProps.name}\n */\n autoCompleteValue?: AutocompleteAttributeValue;\n\n /**\n * @see {@link autoCompleteValue}\n * @defaultValue `autoCompleteValue`\n */\n autoComplete?: InputHTMLAttributes<HTMLInputElement>[\"autoComplete\"];\n\n /**\n * @see {@link autoCompleteValue}\n * @defaultValue `autoCompleteValue`\n */\n name?: string;\n}\n\nexport interface FormMessageClassNameOptions {\n className?: string;\n\n /**\n * Boolean if the message should gain the error state which changes the text\n * color to `red` by default.\n *\n * @defaultValue `false`\n */\n error?: boolean;\n\n /**\n * The current theme for the related text field. This is really only used to\n * match the current horizontal padding of the text field.\n *\n * @defaultValue `\"outline\"`\n */\n theme?: FormTheme;\n}\n\nexport interface FormMessageProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"minLength\" | \"maxLength\">,\n FormMessageClassNameOptions {\n /**\n * If this component is acting as a form-level error message handler, the role\n * should be updated to be `\"alert\"` for additional accessibility.\n *\n * Note: when creating a form-level error message handler, the messages should\n * no longer appear as the user types and instead once the user tries to\n * submit the form. Having an alert role disrupts normal screen reader\n * behavior by immediately reading changes in this element.\n *\n * @defaultValue `undefined`\n */\n role?: \"alert\";\n\n /**\n * Boolean if the children should no longer be wrapped in a `<p>` tag. This\n * should normally only be disabled if using a custom error message wrapper or\n * the counter behavior is not being used. To get correct alignments of the\n * message and counter, the `children` must be wrapped in some element and\n * cannot be plain test.\n *\n * Note: this will always be considered `true` if the `role` is set to\n * `\"alert\"`.\n *\n * @defaultValue `false`\n */\n disableWrap?: boolean;\n\n /**\n * An optional style to apply to the `<p>` tag that surrounds the `children`.\n * This will not be used if `role=\"alert\"` or `disableWrap={true}`.\n */\n messageStyle?: CSSProperties;\n\n /**\n * An optional className to apply to the `<p>` tag that surrounds the\n * `children`. This will not be used if `role=\"alert\"` or\n * `disableWrap={true}`.\n */\n messageClassName?: string;\n}\n\n/**\n * Props that are used to automatically add a counter for the remaining letters\n * available for the text field. The counter will always be created to the right\n * of the optional message.\n *\n * The counter is really a simple string of: `${length} / ${maxLength}`.\n *\n * If you need additional customization, it is recommended to create your own\n * implementation such as:\n *\n * ```tsx\n * <FormMessage>\n * {errorMessage}\n * <MyCounter {...props} />\n * </FormMessage>\n * ```\n *\n * Note: this should not be used alongside form-level messages.\n *\n * @since 2.9.0 Renamed from `FormMessageCounterProps` to\n * `FormMessageInputLengthCounterProps` since a `FormMessageCounter` component\n * was added\n */\nexport interface FormMessageInputLengthCounterProps {\n /**\n * The current length of the value in the related text field.\n */\n length: number;\n\n /**\n * The max length allowed for the value in the related text field.\n */\n maxLength: number;\n\n /**\n * An optional style to apply to the counter wrapper element.\n */\n counterStyle?: CSSProperties;\n\n /**\n * An optional className to apply to the counter wrapper element.\n */\n counterClassName?: string;\n}\n\nexport interface FormMessageWithCounterProps\n extends FormMessageProps,\n FormMessageInputLengthCounterProps {}\n\n/**\n * @since 6.0.0\n */\nexport interface FormMessageWithoutCounterProps extends FormMessageProps {\n length?: never;\n maxLength?: never;\n counterStyle?: never;\n counterClassName?: never;\n}\n\nexport interface FormMessageContainerExtension {\n /**\n * If the extension doesn't actually want to render the `FormMessage`\n * component, these props are optional. It kind of eliminates the whole\n * purpose of this component though.\n */\n messageProps?: PropsWithRef<\n FormMessageProps & Partial<FormMessageInputLengthCounterProps>,\n HTMLDivElement\n >;\n\n /**\n * Any props (and an optional ref) to provide to the `<div>` surrounding the\n * children and `FormMessage` component.\n *\n * Note: This will not be used if the `messageProps` are not provided since\n * only the `children` will be returned without the container.\n */\n messageContainerProps?: PropsWithRef<\n HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n >;\n}\n\n/** @since 6.0.0 */\nexport interface LabelClassNameOptions {\n className?: string;\n\n /**\n * Set this to `true` to remove the `gap` style from the label.\n *\n * @see `$label-gap`\n * @defaultValue `false`\n */\n gap?: boolean;\n\n /**\n * Set this to `true` when the parent `TextFieldContainer` has the `dense`\n * spec enabled. This updates the floating styles to match the smaller height.\n *\n * @defaultValue `false`\n */\n dense?: boolean;\n\n /**\n * Set this to `true` to update the label's color to the error color.\n *\n * @see `$error-color`\n * @defaultValue `false`\n */\n error?: boolean;\n\n /**\n * Set this to `true` to update the label's color to the active color.\n *\n * @see `$active-color`\n * @defaultValue `false`\n */\n active?: boolean;\n\n /**\n * Set this to `true` if the label should gain `flex-direction: column`\n * styling.\n *\n * @defaultValue `false`\n */\n stacked?: boolean;\n\n /**\n * Set this to `true` to update the label's color to be the disabled color.\n *\n * @see `$disabled-color`\n * @defaultValue `false`\n */\n disabled?: boolean;\n\n /**\n * Set this to true when label can floating above an input, textarea, or\n * select inside of a `TextFieldContainer`.\n *\n * @defaultValue `false`\n */\n floating?: boolean;\n\n /**\n * Set this to true when label is currently floating above an input,\n * textarea, or selected inside of a `TextFieldContainer`.\n *\n * @see {@link active}\n * @defaultValue `active`\n */\n floatingActive?: boolean;\n\n /**\n * Set this to `true` to gain `flex-direction: row-reversed` styling. If the\n * {@link stacked} prop is also `true`, `flex-direction: column-reversed` will\n * be applied.\n *\n * @defaultValue `false`\n */\n reversed?: boolean;\n\n /**\n * @defaultValue `false`\n */\n inactive?: boolean;\n}\n\nexport interface LabelProps\n extends LabelHTMLAttributes<HTMLLabelElement>,\n LabelClassNameOptions {}\n\n/**\n * @since 6.0.0\n */\nexport interface ConfigurableTextFieldAddonProps\n extends HTMLAttributes<HTMLSpanElement> {\n /**\n * Boolean if the addon should be presentational only and prevent pointer\n * events.\n *\n * @defaultValue `false`\n */\n pointerEvents?: boolean;\n}\n\n/**\n * @since 6.0.0 Added support for `leftAddonProps` and\n * `rightAddonProps`.\n */\nexport interface TextFieldContainerOptions\n extends FormThemeOptions,\n FormComponentStates {\n /**\n * Set this to `true` to enable the dense spec which reduces the height.\n *\n * @defaultValue `false`\n */\n dense?: boolean;\n\n /**\n * Set this to `true` to change the style from `display: flex` to\n * `display: inline-flex`.\n *\n * @defaultValue `false`\n */\n inline?: boolean;\n\n /**\n * This should generally be an icon or a button that will be placed before the\n * `TextField` or `TextArea`.\n */\n leftAddon?: ReactNode;\n\n /**\n * Any additional props to pass to the `<span>` surrounding the {@link leftAddon}.\n *\n * @since 6.0.0\n */\n leftAddonProps?: PropsWithRef<\n ConfigurableTextFieldAddonProps,\n HTMLSpanElement\n >;\n\n /**\n * @see {@link TextFieldAddonProps.disabled}\n *\n * @defaultValue `false`\n */\n disableLeftAddonStyles?: boolean;\n\n /**\n * This should generally be an icon or a button that will be placed after the\n * `TextField` or `TextArea`.\n */\n rightAddon?: ReactNode;\n\n /**\n * Any additional props to pass to the `<span>` surrounding the {@link rightAddon}.\n *\n * @since 6.0.0\n */\n rightAddonProps?: PropsWithRef<\n ConfigurableTextFieldAddonProps,\n HTMLSpanElement\n >;\n\n /**\n * @see {@link TextFieldAddonProps.disabled}\n *\n * @defaultValue `false`\n */\n disableRightAddonStyles?: boolean;\n}\n\nexport interface FormFieldOptions\n extends TextFieldContainerOptions,\n FormMessageContainerExtension {\n /**\n * An optional floating label to use with the text field. A label is generally\n * recommended for accessibility, but can be omitted if an `aria-label` or\n * `aria-labelledby` is provided.\n */\n label?: ReactNode;\n\n /**\n * Any additional props and/or ref that should be passed to the `<label>`\n * element when a {@link label} is provided.\n *\n * @example\n * ```tsx\n * labelProps={{\n * ref: labelRef,\n * style: {},\n * className: \"some-custom-class-name\",\n * onClick: (event) => {\n * // do something\n * }\n * }}\n * ```\n */\n labelProps?: PropsWithRef<LabelProps, HTMLLabelElement>;\n\n /**\n * A convenience prop to apply a custom style to a label. This is equivalent\n * to:\n *\n * ```ts\n * labelProps={{\n * style: // some style here\n * }}\n * ```\n */\n labelStyle?: CSSProperties;\n\n /**\n * A convenience prop to apply a custom className to a label. This is\n * equivalent to:\n *\n * ```ts\n * labelProps={{\n * className: \"some-class-name\",\n * }}\n * ```\n */\n labelClassName?: string;\n}\n"],"names":[],"mappings":"AAygBA,WAmDC"}
1
+ {"version":3,"sources":["../../src/form/types.ts"],"sourcesContent":["import {\n type CSSProperties,\n type HTMLAttributes,\n type InputHTMLAttributes,\n type LabelHTMLAttributes,\n type ReactNode,\n} from \"react\";\n\nimport { type PropsWithRef } from \"../types.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-form-active-color\"?: string;\n \"--rmd-form-focus-color\"?: string;\n }\n}\n\n/**\n * The supported themes for the `TextField`, `TextArea`, and `Select`\n * components.\n *\n * - \"none\" - display as an unstyled text field without any border or background\n * colors.\n * - \"underline\" - display with only an underline that gains the form active\n * color and animates from the left or right to the other side when the field\n * is focused.\n * - \"filled\" - an extension of the `\"underline\"` state that will also have a\n * slightly dark background applied.\n * - \"outline\" - outlines the entire text field in a border and applies the\n * active color as box shadow when the field is focused.\n */\nexport type FormTheme = \"none\" | \"underline\" | \"filled\" | \"outline\";\n\n/**\n * The direction that the underline should appear from when the theme is\n * `\"underline\"` or `\"filled\"`.\n */\nexport type FormUnderlineDirection = \"left\" | \"center\" | \"right\";\n\nexport interface FormThemeOptions {\n /**\n * The current theme type.\n *\n * @defaultValue `\"outline\"`\n */\n theme?: FormTheme;\n\n /**\n * The current underline direction.\n *\n * @defaultValue `\"left\"`\n */\n underlineDirection?: FormUnderlineDirection;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface FormConfiguration extends Required<FormThemeOptions> {\n /**\n * Set this to `false` if the `$disable-uncontrolled-input-toggles` variable\n * is set to `true` in the Sass configuration.\n *\n * Since the `checked` state only changes for the radio that has been clicked,\n * the previously checked radio would also be shown as checked with no way of\n * fixing it without controlling the radio component. When this flag is\n * enabled, the checked icons and state are handled through css instead of\n * `useState`.\n *\n * @defaultValue `true`\n */\n uncontrolledToggles: boolean;\n}\n\nexport interface FormComponentStates {\n /** @defaultValue `false` */\n error?: boolean;\n\n /** @defaultValue `false` */\n active?: boolean;\n\n /** @defaultValue `false` */\n disabled?: boolean;\n\n /** @defaultValue `false` */\n readOnly?: boolean;\n}\n\n/**\n * @since 6.0.0\n * @see https://html.spec.whatwg.org/multipage/forms.html#autofill\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#values\n */\nexport type AutocompleteAttributeValue =\n | \"off\"\n | \"on\"\n | \"name\"\n | \"honorific-prefix\"\n | \"given-name\"\n | \"additional-name\"\n | \"family-name\"\n | \"honorific-suffix\"\n | \"nickname\"\n | \"email\"\n | \"username\"\n | \"new-password\"\n | \"current-password\"\n | \"one-time-code\"\n | \"organization-title\"\n | \"organization\"\n | \"street-address\"\n | \"address-line1\"\n | \"address-line2\"\n | \"address-line3\"\n | \"address-level1\"\n | \"address-level2\"\n | \"address-level3\"\n | \"address-level4\"\n | \"country\"\n | \"country-name\"\n | \"postal-code\"\n | \"cc-name\"\n | \"cc-given-name\"\n | \"cc-additional-name\"\n | \"cc-family-name\"\n | \"cc-number\"\n | \"cc-exp\"\n | \"cc-exp-month\"\n | \"cc-exp-year\"\n | \"cc-csc\"\n | \"cc-type\"\n | \"transaction-currency\"\n | \"transaction-amount\"\n | \"language\"\n | \"bday\"\n | \"bday-day\"\n | \"bday-month\"\n | \"bday-year\"\n | \"sex\"\n | \"tel\"\n | \"tel-country-code\"\n | \"tel-national\"\n | \"tek-area-code\"\n | \"tel-local\"\n | \"tel-extension\"\n | \"impp\"\n | \"url\"\n | \"photo\";\n\n/**\n * @since 6.0.0\n */\nexport interface UserAgentAutocompleteProps {\n /**\n * Set this to enable additional autocompletion suggestions for a user for\n * different form fields. Using this prop will update the\n * {@link UserAgentAutocompleteProps.name} and {@link autoComplete} to default to\n * this value.\n *\n * @example\n * ```tsx\n * <Form>\n * <TextField\n * label=\"Enter your credit card number\"\n * autoCompleteValue=\"cc-number\"\n * {...creditCardProps}\n * inputMode=\"number\"\n * />\n * <TextField\n * label=\"Name on card\"\n * autoCompleteValue=\"cc-name\"\n * {...creditCardNameProps}\n * />\n * <TextField\n * label=\"Security code\"\n * autoCompleteValue=\"cc-csc\"\n * {...securityCodeProps}\n * inputMode=\"number\"\n * />\n * <Button type=\"submit\">Submit</Button>\n * </Form>\n * ```\n *\n * @see https://html.spec.whatwg.org/multipage/forms.html#autofill\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete#values\n * @see {@link AutocompleteAttributeValue}\n * @see {@link autoComplete}\n * @see {@link UserAgentAutocompleteProps.name}\n */\n autoCompleteValue?: AutocompleteAttributeValue;\n\n /**\n * @see {@link autoCompleteValue}\n * @defaultValue `autoCompleteValue`\n */\n autoComplete?: InputHTMLAttributes<HTMLInputElement>[\"autoComplete\"];\n\n /**\n * @see {@link autoCompleteValue}\n * @defaultValue `autoCompleteValue`\n */\n name?: string;\n}\n\nexport interface FormMessageClassNameOptions {\n className?: string;\n\n /**\n * Boolean if the message should gain the error state which changes the text\n * color to `red` by default.\n *\n * @defaultValue `false`\n */\n error?: boolean;\n\n /**\n * The current theme for the related text field. This is really only used to\n * match the current horizontal padding of the text field.\n *\n * @defaultValue `\"outline\"`\n */\n theme?: FormTheme;\n}\n\nexport interface FormMessageProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"minLength\" | \"maxLength\">,\n FormMessageClassNameOptions {\n /**\n * If this component is acting as a form-level error message handler, the role\n * should be updated to be `\"alert\"` for additional accessibility.\n *\n * Note: when creating a form-level error message handler, the messages should\n * no longer appear as the user types and instead once the user tries to\n * submit the form. Having an alert role disrupts normal screen reader\n * behavior by immediately reading changes in this element.\n *\n * @defaultValue `undefined`\n */\n role?: \"alert\";\n\n /**\n * Boolean if the children should no longer be wrapped in a `<p>` tag. This\n * should normally only be disabled if using a custom error message wrapper or\n * the counter behavior is not being used. To get correct alignments of the\n * message and counter, the `children` must be wrapped in some element and\n * cannot be plain test.\n *\n * Note: this will always be considered `true` if the `role` is set to\n * `\"alert\"`.\n *\n * @defaultValue `false`\n */\n disableWrap?: boolean;\n\n /**\n * An optional style to apply to the `<p>` tag that surrounds the `children`.\n * This will not be used if `role=\"alert\"` or `disableWrap={true}`.\n */\n messageStyle?: CSSProperties;\n\n /**\n * An optional className to apply to the `<p>` tag that surrounds the\n * `children`. This will not be used if `role=\"alert\"` or\n * `disableWrap={true}`.\n */\n messageClassName?: string;\n}\n\n/**\n * Props that are used to automatically add a counter for the remaining letters\n * available for the text field. The counter will always be created to the right\n * of the optional message.\n *\n * The counter is really a simple string of: `${length} / ${maxLength}`.\n *\n * If you need additional customization, it is recommended to create your own\n * implementation such as:\n *\n * ```tsx\n * <FormMessage>\n * {errorMessage}\n * <MyCounter {...props} />\n * </FormMessage>\n * ```\n *\n * Note: this should not be used alongside form-level messages.\n *\n * @since 2.9.0 Renamed from `FormMessageCounterProps` to\n * `FormMessageInputLengthCounterProps` since a `FormMessageCounter` component\n * was added\n */\nexport interface FormMessageInputLengthCounterProps {\n /**\n * The current length of the value in the related text field.\n */\n length: number;\n\n /**\n * The max length allowed for the value in the related text field.\n */\n maxLength: number;\n\n /**\n * An optional style to apply to the counter wrapper element.\n */\n counterStyle?: CSSProperties;\n\n /**\n * An optional className to apply to the counter wrapper element.\n */\n counterClassName?: string;\n}\n\nexport interface FormMessageWithCounterProps\n extends FormMessageProps,\n FormMessageInputLengthCounterProps {}\n\n/**\n * @since 6.0.0\n */\nexport interface FormMessageWithoutCounterProps extends FormMessageProps {\n length?: never;\n maxLength?: never;\n counterStyle?: never;\n counterClassName?: never;\n}\n\nexport interface FormMessageContainerExtension {\n /**\n * If the extension doesn't actually want to render the `FormMessage`\n * component, these props are optional. It kind of eliminates the whole\n * purpose of this component though.\n */\n messageProps?: PropsWithRef<\n FormMessageProps & Partial<FormMessageInputLengthCounterProps>,\n HTMLDivElement\n >;\n\n /**\n * Any props (and an optional ref) to provide to the `<div>` surrounding the\n * children and `FormMessage` component.\n *\n * Note: This will not be used if the `messageProps` are not provided since\n * only the `children` will be returned without the container.\n */\n messageContainerProps?: PropsWithRef<\n HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n >;\n}\n\n/** @since 6.0.0 */\nexport interface LabelClassNameOptions {\n className?: string;\n\n /**\n * Set this to `true` to remove the `gap` style from the label.\n *\n * @see `$label-gap`\n * @defaultValue `false`\n */\n gap?: boolean;\n\n /**\n * Set this to `true` when the parent `TextFieldContainer` has the `dense`\n * spec enabled. This updates the floating styles to match the smaller height.\n *\n * @defaultValue `false`\n */\n dense?: boolean;\n\n /**\n * Set this to `true` to update the label's color to the error color.\n *\n * @see `$error-color`\n * @defaultValue `false`\n */\n error?: boolean;\n\n /**\n * Set this to `true` to update the label's color to the active color.\n *\n * @see `$active-color`\n * @defaultValue `false`\n */\n active?: boolean;\n\n /**\n * Set this to `true` if the label should gain `flex-direction: column`\n * styling.\n *\n * @defaultValue `false`\n */\n stacked?: boolean;\n\n /**\n * Set this to `true` to update the label's color to be the disabled color.\n *\n * @see `$disabled-color`\n * @defaultValue `false`\n */\n disabled?: boolean;\n\n /**\n * Set this to true when label can floating above an input, textarea, or\n * select inside of a `TextFieldContainer`.\n *\n * @defaultValue `false`\n */\n floating?: boolean;\n\n /**\n * Set this to true when label is currently floating above an input,\n * textarea, or selected inside of a `TextFieldContainer`.\n *\n * @see {@link active}\n * @defaultValue `active`\n */\n floatingActive?: boolean;\n\n /**\n * Set this to `true` to gain `flex-direction: row-reversed` styling. If the\n * {@link stacked} prop is also `true`, `flex-direction: column-reversed` will\n * be applied.\n *\n * @defaultValue `false`\n */\n reversed?: boolean;\n\n /**\n * @defaultValue `false`\n */\n inactive?: boolean;\n}\n\nexport interface LabelProps\n extends LabelHTMLAttributes<HTMLLabelElement>,\n LabelClassNameOptions {}\n\n/**\n * @since 6.0.0\n */\nexport interface ConfigurableTextFieldAddonProps\n extends HTMLAttributes<HTMLSpanElement> {\n /**\n * Boolean if the addon should be presentational only and prevent pointer\n * events.\n *\n * @defaultValue `false`\n */\n pointerEvents?: boolean;\n}\n\n/**\n * @since 6.0.0 Added support for `leftAddonProps` and\n * `rightAddonProps`.\n */\nexport interface TextFieldContainerOptions\n extends FormThemeOptions,\n FormComponentStates {\n /**\n * Set this to `true` to enable the dense spec which reduces the height.\n *\n * @defaultValue `false`\n */\n dense?: boolean;\n\n /**\n * Set this to `true` to change the style from `display: flex` to\n * `display: inline-flex`.\n *\n * @defaultValue `false`\n */\n inline?: boolean;\n\n /**\n * This should generally be an icon or a button that will be placed before the\n * `TextField` or `TextArea`.\n */\n leftAddon?: ReactNode;\n\n /**\n * Any additional props to pass to the `<span>` surrounding the {@link leftAddon}.\n *\n * @since 6.0.0\n */\n leftAddonProps?: PropsWithRef<\n ConfigurableTextFieldAddonProps,\n HTMLSpanElement\n >;\n\n /**\n * @see {@link TextFieldAddonProps.disabled}\n *\n * @defaultValue `false`\n */\n disableLeftAddonStyles?: boolean;\n\n /**\n * This should generally be an icon or a button that will be placed after the\n * `TextField` or `TextArea`.\n */\n rightAddon?: ReactNode;\n\n /**\n * Any additional props to pass to the `<span>` surrounding the {@link rightAddon}.\n *\n * @since 6.0.0\n */\n rightAddonProps?: PropsWithRef<\n ConfigurableTextFieldAddonProps,\n HTMLSpanElement\n >;\n\n /**\n * @see {@link TextFieldAddonProps.disabled}\n *\n * @defaultValue `false`\n */\n disableRightAddonStyles?: boolean;\n}\n\nexport interface FormFieldOptions\n extends TextFieldContainerOptions,\n FormMessageContainerExtension {\n /**\n * An optional floating label to use with the text field. A label is generally\n * recommended for accessibility, but can be omitted if an `aria-label` or\n * `aria-labelledby` is provided.\n */\n label?: ReactNode;\n\n /**\n * Any additional props and/or ref that should be passed to the `<label>`\n * element when a {@link label} is provided.\n *\n * @example\n * ```tsx\n * labelProps={{\n * ref: labelRef,\n * style: {},\n * className: \"some-custom-class-name\",\n * onClick: (event) => {\n * // do something\n * }\n * }}\n * ```\n */\n labelProps?: PropsWithRef<LabelProps, HTMLLabelElement>;\n\n /**\n * A convenience prop to apply a custom style to a label. This is equivalent\n * to:\n *\n * ```ts\n * labelProps={{\n * style: // some style here\n * }}\n * ```\n */\n labelStyle?: CSSProperties;\n\n /**\n * A convenience prop to apply a custom className to a label. This is\n * equivalent to:\n *\n * ```ts\n * labelProps={{\n * className: \"some-class-name\",\n * }}\n * ```\n */\n labelClassName?: string;\n}\n"],"names":[],"mappings":"AA0gBA,WAmDC"}
@@ -15,7 +15,7 @@ export interface CheckboxGroupOptions<V> {
15
15
  menu?: boolean;
16
16
  /**
17
17
  * This prop **must** be defined to enable the indeterminate checkbox feature
18
- * from the hook. This should be a list of all the possible checkbox values in
18
+ * from the hook and should be a list of all the possible checkbox values in
19
19
  * the group. This will be used to select all values when the indeterminate
20
20
  * checkbox is checked and determine if all the checkboxes have manually be
21
21
  * selected.
@@ -26,7 +26,7 @@ export interface CheckboxGroupOptions<V> {
26
26
  * { label: "First", value: "a" },
27
27
  * { label: "Second", value: "b" },
28
28
  * { label: "Third", value: "c" },
29
- * ] as const:
29
+ * ] as const;
30
30
  * const VALUES = OPTIONS.map(({ value }) => value) as const;
31
31
  *
32
32
  * const {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/useCheckboxGroup.ts"],"sourcesContent":["\"use client\";\nimport { useCallback, useRef } from \"react\";\nimport { type UseStateInitializer, type UseStateSetter } from \"../types.js\";\nimport { useReadonlySet } from \"../useReadonlySet.js\";\n\nconst EMPTY_LIST = [] as const;\n\n/** @since 6.0.0 */\nexport interface CheckboxGroupOptions<V> {\n /**\n * A `name` to apply to all the checkboxes within the group. This is required\n * if the {@link menu} option is set to `true`.\n */\n name?: string;\n\n /**\n * Set this to `true` if using the `MenuItemCheckbox` component instead of the\n * `Checkbox` so the correct props can be provided.\n *\n * @defaultValue `false`\n */\n menu?: boolean;\n\n /**\n * This prop **must** be defined to enable the indeterminate checkbox feature\n * from the hook. This should be a list of all the possible checkbox values in\n * the group. This will be used to select all values when the indeterminate\n * checkbox is checked and determine if all the checkboxes have manually be\n * selected.\n *\n * @example Indeterminate Behavior\n * ```tsx\n * const OPTIONS = [\n * { label: \"First\", value: \"a\" },\n * { label: \"Second\", value: \"b\" },\n * { label: \"Third\", value: \"c\" },\n * ] as const:\n * const VALUES = OPTIONS.map(({ value }) => value) as const;\n *\n * const {\n * getCheckboxProps,\n * getIndeterminateProps,\n * checkedValues,\n * } = useCheckboxGroup({ name: \"group\", values: VALUES });\n * ```\n */\n values?: readonly V[];\n\n /**\n * Set this to a list of checkbox values that should be checked by default.\n *\n * @defaultValue `[]`\n */\n defaultCheckedValues?: UseStateInitializer<readonly V[]>;\n}\n\n/** @since 6.0.0 */\nexport interface CheckboxGroupImplementation<V extends string> {\n reset: () => void;\n checkedValues: ReadonlySet<V>;\n setCheckedValues: UseStateSetter<ReadonlySet<V>>;\n getCheckboxProps: (value: V) => {\n name: string;\n value: V;\n checked: boolean;\n onChange: () => void;\n };\n}\n\n/** @since 6.0.0 */\nexport interface IndeterminateCheckboxGroupImplementation<V extends string>\n extends CheckboxGroupImplementation<V> {\n getIndeterminateProps: () => {\n \"aria-checked\": \"mixed\" | undefined;\n name: string;\n checked: boolean;\n indeterminate: boolean;\n onChange: () => void;\n };\n}\n\n/** @since 6.0.0 */\nexport interface MenuItemCheckboxGroupImplementation<V extends string> {\n reset: () => void;\n checkedValues: ReadonlySet<V>;\n setCheckedValues: UseStateSetter<ReadonlySet<V>>;\n getCheckboxProps: (value: V) => {\n checked: boolean;\n onCheckedChange: () => void;\n };\n}\n\n/** @since 6.0.0 */\nexport interface IndeterminateMenuItemCheckboxGroupImplementation<\n V extends string,\n> extends MenuItemCheckboxGroupImplementation<V> {\n getIndeterminateProps: () => {\n \"aria-checked\": \"mixed\" | undefined;\n checked: boolean;\n indeterminate: boolean;\n onCheckedChange: () => void;\n };\n}\n\n/** @since 6.0.0 */\nexport interface CombinedCheckboxGroupReturnValue<V extends string> {\n reset: () => void;\n checkedValues: ReadonlySet<V>;\n setCheckedValues: UseStateSetter<ReadonlySet<V>>;\n getCheckboxProps: (value: V) => {\n name?: string;\n value?: V;\n checked: boolean;\n onChange?: () => void;\n onCheckedChange?: () => void;\n };\n getIndeterminateProps?: () => {\n \"aria-checked\": \"mixed\" | undefined;\n name?: string;\n checked: boolean;\n indeterminate: boolean;\n onChange?: () => void;\n onCheckedChange?: () => void;\n };\n}\n\n/**\n * @example Checkbox Group\n * ```tsx\n * const { getCheckboxProps, checkedValues } = useCheckboxGroup({ name: \"example\" });\n *\n * return (\n * <>\n * <Checkbox {...getCheckboxProps(\"a\")}>\n * First\n * </Checkbox>\n * <Checkbox {...getCheckboxProps(\"b\")}>\n * Second\n * </Checkbox>\n * <Checkbox {...getCheckboxProps(\"c\")}>\n * Third\n * </Checkbox>\n * </>\n * );\n * ```\n *\n * @since 6.0.0\n */\nexport function useCheckboxGroup<V extends string>(\n options: CheckboxGroupOptions<V> & {\n menu?: false;\n name: string;\n values?: never;\n }\n): CheckboxGroupImplementation<V>;\n/**\n * @example Indeterminate Checkbox Group\n * ```tsx\n * const OPTIONS = [\n * { label: \"First\", value: \"a\" },\n * { label: \"Second\", value: \"b\" },\n * { label: \"Third\", value: \"c\" },\n * ] as const:\n * const VALUES = OPTIONS.map(({ value }) => value) as const;\n *\n * const {\n * getCheckboxProps,\n * getIndeterminateProps,\n * checkedValues\n * } = useCheckboxGroup({\n * name: \"example\",\n * values: VALUES,\n * });\n *\n * return (\n * <>\n * <Checkbox {...getIndeterminateProps()} label=\"Select all\" />\n * {VALUES.map(({ label, value }) => (\n * <Checkbox key={value} label={label} {...getCheckboxProps(value)} />\n * ))}\n * </>\n * );\n * ```\n *\n * @since 6.0.0\n */\nexport function useCheckboxGroup<V extends string>(\n options: CheckboxGroupOptions<V> & {\n menu?: false;\n name: string;\n values: readonly V[];\n }\n): IndeterminateCheckboxGroupImplementation<V>;\n/**\n * @example MenuItemCheckbox Group\n * ```tsx\n * const { getCheckboxProps, checkedValues } = useCheckboxGroup({ menu: true });\n *\n * return (\n * <>\n * <MenuItemCheckbox {...getCheckboxProps(\"a\")}>\n * First\n * </MenuItemCheckbox>\n * <MenuItemCheckbox {...getCheckboxProps(\"b\")}>\n * Second\n * </MenuItemCheckbox>\n * <MenuItemCheckbox {...getCheckboxProps(\"c\")}>\n * Third\n * </MenuItemCheckbox>\n * </>\n * );\n * ```\n *\n * @since 6.0.0\n */\nexport function useCheckboxGroup<V extends string>(\n options: CheckboxGroupOptions<V> & {\n menu: true;\n name?: never;\n values?: never;\n }\n): MenuItemCheckboxGroupImplementation<V>;\n/**\n * @example Indeterminate MenuItemCheckbox Group\n * ```tsx\n * const OPTIONS = [\n * { label: \"First\", value: \"a\" },\n * { label: \"Second\", value: \"b\" },\n * { label: \"Third\", value: \"c\" },\n * ] as const:\n * const VALUES = OPTIONS.map(({ value }) => value) as const;\n *\n * const { getCheckboxProps, getIndeterminateProps, checkedValues } = useCheckboxGroup({\n * menu: true,\n * values: VALUES,\n * });\n *\n * return (\n * <>\n * <MenuItemCheckbox {...getIndeterminateProps()}>\n * All\n * <MenuItemCheckbox>\n * {OPTIONS.map(({ label, value }) => (\n * <MenuItemCheckbox key={value} {...getCheckboxProps(value)}>\n * {label}\n * </MenuItemCheckbox>\n * ))}\n * </>\n * );\n * ```\n *\n * @since 6.0.0\n */\nexport function useCheckboxGroup<V extends string>(\n options: CheckboxGroupOptions<V> & {\n menu: true;\n name?: never;\n values: readonly V[];\n }\n): IndeterminateMenuItemCheckboxGroupImplementation<V>;\nexport function useCheckboxGroup<V extends string>(\n options: CheckboxGroupOptions<V>\n): CombinedCheckboxGroupReturnValue<V> {\n const {\n name,\n menu = false,\n values,\n defaultCheckedValues = EMPTY_LIST,\n } = options;\n const {\n value: checkedValues,\n setValue: setCheckedValues,\n toggleValue,\n } = useReadonlySet({\n defaultValue: defaultCheckedValues,\n });\n const initial = useRef(checkedValues);\n\n let getIndeterminateProps: CombinedCheckboxGroupReturnValue<V>[\"getIndeterminateProps\"];\n if (values) {\n getIndeterminateProps = () => {\n const checked = checkedValues.size > 0;\n const indeterminate = checked && checkedValues.size < values.length;\n\n return {\n \"aria-checked\": indeterminate ? \"mixed\" : undefined,\n name,\n checked,\n indeterminate,\n [menu ? \"onCheckedChange\" : \"onChange\"]() {\n setCheckedValues((checkedValues) => {\n if (checkedValues.size === 0 || indeterminate) {\n return new Set(values);\n }\n\n return new Set();\n });\n },\n };\n };\n }\n\n return {\n reset: useCallback(() => {\n setCheckedValues(initial.current);\n }, [setCheckedValues]),\n checkedValues,\n setCheckedValues,\n getIndeterminateProps,\n getCheckboxProps(value) {\n return {\n name,\n value: menu ? undefined : value,\n checked: checkedValues.has(value),\n [menu ? \"onCheckedChange\" : \"onChange\"]() {\n toggleValue(value);\n },\n };\n },\n };\n}\n"],"names":["useCallback","useRef","useReadonlySet","EMPTY_LIST","useCheckboxGroup","options","name","menu","values","defaultCheckedValues","value","checkedValues","setValue","setCheckedValues","toggleValue","defaultValue","initial","getIndeterminateProps","checked","size","indeterminate","length","undefined","Set","reset","current","getCheckboxProps","has"],"mappings":"AAAA;AACA,SAASA,WAAW,EAAEC,MAAM,QAAQ,QAAQ;AAE5C,SAASC,cAAc,QAAQ,uBAAuB;AAEtD,MAAMC,aAAa,EAAE;AA+PrB,OAAO,SAASC,iBACdC,OAAgC;IAEhC,MAAM,EACJC,IAAI,EACJC,OAAO,KAAK,EACZC,MAAM,EACNC,uBAAuBN,UAAU,EAClC,GAAGE;IACJ,MAAM,EACJK,OAAOC,aAAa,EACpBC,UAAUC,gBAAgB,EAC1BC,WAAW,EACZ,GAAGZ,eAAe;QACjBa,cAAcN;IAChB;IACA,MAAMO,UAAUf,OAAOU;IAEvB,IAAIM;IACJ,IAAIT,QAAQ;QACVS,wBAAwB;YACtB,MAAMC,UAAUP,cAAcQ,IAAI,GAAG;YACrC,MAAMC,gBAAgBF,WAAWP,cAAcQ,IAAI,GAAGX,OAAOa,MAAM;YAEnE,OAAO;gBACL,gBAAgBD,gBAAgB,UAAUE;gBAC1ChB;gBACAY;gBACAE;gBACA,CAACb,OAAO,oBAAoB,WAAW;oBACrCM,iBAAiB,CAACF;wBAChB,IAAIA,cAAcQ,IAAI,KAAK,KAAKC,eAAe;4BAC7C,OAAO,IAAIG,IAAIf;wBACjB;wBAEA,OAAO,IAAIe;oBACb;gBACF;YACF;QACF;IACF;IAEA,OAAO;QACLC,OAAOxB,YAAY;YACjBa,iBAAiBG,QAAQS,OAAO;QAClC,GAAG;YAACZ;SAAiB;QACrBF;QACAE;QACAI;QACAS,kBAAiBhB,KAAK;YACpB,OAAO;gBACLJ;gBACAI,OAAOH,OAAOe,YAAYZ;gBAC1BQ,SAASP,cAAcgB,GAAG,CAACjB;gBAC3B,CAACH,OAAO,oBAAoB,WAAW;oBACrCO,YAAYJ;gBACd;YACF;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/form/useCheckboxGroup.ts"],"sourcesContent":["\"use client\";\n\nimport { useCallback, useRef } from \"react\";\n\nimport { type UseStateInitializer, type UseStateSetter } from \"../types.js\";\nimport { useReadonlySet } from \"../useReadonlySet.js\";\n\nconst EMPTY_LIST = [] as const;\n\n/** @since 6.0.0 */\nexport interface CheckboxGroupOptions<V> {\n /**\n * A `name` to apply to all the checkboxes within the group. This is required\n * if the {@link menu} option is set to `true`.\n */\n name?: string;\n\n /**\n * Set this to `true` if using the `MenuItemCheckbox` component instead of the\n * `Checkbox` so the correct props can be provided.\n *\n * @defaultValue `false`\n */\n menu?: boolean;\n\n /**\n * This prop **must** be defined to enable the indeterminate checkbox feature\n * from the hook and should be a list of all the possible checkbox values in\n * the group. This will be used to select all values when the indeterminate\n * checkbox is checked and determine if all the checkboxes have manually be\n * selected.\n *\n * @example Indeterminate Behavior\n * ```tsx\n * const OPTIONS = [\n * { label: \"First\", value: \"a\" },\n * { label: \"Second\", value: \"b\" },\n * { label: \"Third\", value: \"c\" },\n * ] as const;\n * const VALUES = OPTIONS.map(({ value }) => value) as const;\n *\n * const {\n * getCheckboxProps,\n * getIndeterminateProps,\n * checkedValues,\n * } = useCheckboxGroup({ name: \"group\", values: VALUES });\n * ```\n */\n values?: readonly V[];\n\n /**\n * Set this to a list of checkbox values that should be checked by default.\n *\n * @defaultValue `[]`\n */\n defaultCheckedValues?: UseStateInitializer<readonly V[]>;\n}\n\n/** @since 6.0.0 */\nexport interface CheckboxGroupImplementation<V extends string> {\n reset: () => void;\n checkedValues: ReadonlySet<V>;\n setCheckedValues: UseStateSetter<ReadonlySet<V>>;\n getCheckboxProps: (value: V) => {\n name: string;\n value: V;\n checked: boolean;\n onChange: () => void;\n };\n}\n\n/** @since 6.0.0 */\nexport interface IndeterminateCheckboxGroupImplementation<V extends string>\n extends CheckboxGroupImplementation<V> {\n getIndeterminateProps: () => {\n \"aria-checked\": \"mixed\" | undefined;\n name: string;\n checked: boolean;\n indeterminate: boolean;\n onChange: () => void;\n };\n}\n\n/** @since 6.0.0 */\nexport interface MenuItemCheckboxGroupImplementation<V extends string> {\n reset: () => void;\n checkedValues: ReadonlySet<V>;\n setCheckedValues: UseStateSetter<ReadonlySet<V>>;\n getCheckboxProps: (value: V) => {\n checked: boolean;\n onCheckedChange: () => void;\n };\n}\n\n/** @since 6.0.0 */\nexport interface IndeterminateMenuItemCheckboxGroupImplementation<\n V extends string,\n> extends MenuItemCheckboxGroupImplementation<V> {\n getIndeterminateProps: () => {\n \"aria-checked\": \"mixed\" | undefined;\n checked: boolean;\n indeterminate: boolean;\n onCheckedChange: () => void;\n };\n}\n\n/** @since 6.0.0 */\nexport interface CombinedCheckboxGroupReturnValue<V extends string> {\n reset: () => void;\n checkedValues: ReadonlySet<V>;\n setCheckedValues: UseStateSetter<ReadonlySet<V>>;\n getCheckboxProps: (value: V) => {\n name?: string;\n value?: V;\n checked: boolean;\n onChange?: () => void;\n onCheckedChange?: () => void;\n };\n getIndeterminateProps?: () => {\n \"aria-checked\": \"mixed\" | undefined;\n name?: string;\n checked: boolean;\n indeterminate: boolean;\n onChange?: () => void;\n onCheckedChange?: () => void;\n };\n}\n\n/**\n * @example Checkbox Group\n * ```tsx\n * const { getCheckboxProps, checkedValues } = useCheckboxGroup({ name: \"example\" });\n *\n * return (\n * <>\n * <Checkbox {...getCheckboxProps(\"a\")}>\n * First\n * </Checkbox>\n * <Checkbox {...getCheckboxProps(\"b\")}>\n * Second\n * </Checkbox>\n * <Checkbox {...getCheckboxProps(\"c\")}>\n * Third\n * </Checkbox>\n * </>\n * );\n * ```\n *\n * @since 6.0.0\n */\nexport function useCheckboxGroup<V extends string>(\n options: CheckboxGroupOptions<V> & {\n menu?: false;\n name: string;\n values?: never;\n }\n): CheckboxGroupImplementation<V>;\n/**\n * @example Indeterminate Checkbox Group\n * ```tsx\n * const OPTIONS = [\n * { label: \"First\", value: \"a\" },\n * { label: \"Second\", value: \"b\" },\n * { label: \"Third\", value: \"c\" },\n * ] as const:\n * const VALUES = OPTIONS.map(({ value }) => value) as const;\n *\n * const {\n * getCheckboxProps,\n * getIndeterminateProps,\n * checkedValues\n * } = useCheckboxGroup({\n * name: \"example\",\n * values: VALUES,\n * });\n *\n * return (\n * <>\n * <Checkbox {...getIndeterminateProps()} label=\"Select all\" />\n * {VALUES.map(({ label, value }) => (\n * <Checkbox key={value} label={label} {...getCheckboxProps(value)} />\n * ))}\n * </>\n * );\n * ```\n *\n * @since 6.0.0\n */\nexport function useCheckboxGroup<V extends string>(\n options: CheckboxGroupOptions<V> & {\n menu?: false;\n name: string;\n values: readonly V[];\n }\n): IndeterminateCheckboxGroupImplementation<V>;\n/**\n * @example MenuItemCheckbox Group\n * ```tsx\n * const { getCheckboxProps, checkedValues } = useCheckboxGroup({ menu: true });\n *\n * return (\n * <>\n * <MenuItemCheckbox {...getCheckboxProps(\"a\")}>\n * First\n * </MenuItemCheckbox>\n * <MenuItemCheckbox {...getCheckboxProps(\"b\")}>\n * Second\n * </MenuItemCheckbox>\n * <MenuItemCheckbox {...getCheckboxProps(\"c\")}>\n * Third\n * </MenuItemCheckbox>\n * </>\n * );\n * ```\n *\n * @since 6.0.0\n */\nexport function useCheckboxGroup<V extends string>(\n options: CheckboxGroupOptions<V> & {\n menu: true;\n name?: never;\n values?: never;\n }\n): MenuItemCheckboxGroupImplementation<V>;\n/**\n * @example Indeterminate MenuItemCheckbox Group\n * ```tsx\n * const OPTIONS = [\n * { label: \"First\", value: \"a\" },\n * { label: \"Second\", value: \"b\" },\n * { label: \"Third\", value: \"c\" },\n * ] as const:\n * const VALUES = OPTIONS.map(({ value }) => value) as const;\n *\n * const { getCheckboxProps, getIndeterminateProps, checkedValues } = useCheckboxGroup({\n * menu: true,\n * values: VALUES,\n * });\n *\n * return (\n * <>\n * <MenuItemCheckbox {...getIndeterminateProps()}>\n * All\n * <MenuItemCheckbox>\n * {OPTIONS.map(({ label, value }) => (\n * <MenuItemCheckbox key={value} {...getCheckboxProps(value)}>\n * {label}\n * </MenuItemCheckbox>\n * ))}\n * </>\n * );\n * ```\n *\n * @since 6.0.0\n */\nexport function useCheckboxGroup<V extends string>(\n options: CheckboxGroupOptions<V> & {\n menu: true;\n name?: never;\n values: readonly V[];\n }\n): IndeterminateMenuItemCheckboxGroupImplementation<V>;\nexport function useCheckboxGroup<V extends string>(\n options: CheckboxGroupOptions<V>\n): CombinedCheckboxGroupReturnValue<V> {\n const {\n name,\n menu = false,\n values,\n defaultCheckedValues = EMPTY_LIST,\n } = options;\n const {\n value: checkedValues,\n setValue: setCheckedValues,\n toggleValue,\n } = useReadonlySet({\n defaultValue: defaultCheckedValues,\n });\n const initial = useRef(checkedValues);\n\n let getIndeterminateProps: CombinedCheckboxGroupReturnValue<V>[\"getIndeterminateProps\"];\n if (values) {\n getIndeterminateProps = () => {\n const checked = checkedValues.size > 0;\n const indeterminate = checked && checkedValues.size < values.length;\n\n return {\n \"aria-checked\": indeterminate ? \"mixed\" : undefined,\n name,\n checked,\n indeterminate,\n [menu ? \"onCheckedChange\" : \"onChange\"]() {\n setCheckedValues((checkedValues) => {\n if (checkedValues.size === 0 || indeterminate) {\n return new Set(values);\n }\n\n return new Set();\n });\n },\n };\n };\n }\n\n return {\n reset: useCallback(() => {\n setCheckedValues(initial.current);\n }, [setCheckedValues]),\n checkedValues,\n setCheckedValues,\n getIndeterminateProps,\n getCheckboxProps(value) {\n return {\n name,\n value: menu ? undefined : value,\n checked: checkedValues.has(value),\n [menu ? \"onCheckedChange\" : \"onChange\"]() {\n toggleValue(value);\n },\n };\n },\n };\n}\n"],"names":["useCallback","useRef","useReadonlySet","EMPTY_LIST","useCheckboxGroup","options","name","menu","values","defaultCheckedValues","value","checkedValues","setValue","setCheckedValues","toggleValue","defaultValue","initial","getIndeterminateProps","checked","size","indeterminate","length","undefined","Set","reset","current","getCheckboxProps","has"],"mappings":"AAAA;AAEA,SAASA,WAAW,EAAEC,MAAM,QAAQ,QAAQ;AAG5C,SAASC,cAAc,QAAQ,uBAAuB;AAEtD,MAAMC,aAAa,EAAE;AA+PrB,OAAO,SAASC,iBACdC,OAAgC;IAEhC,MAAM,EACJC,IAAI,EACJC,OAAO,KAAK,EACZC,MAAM,EACNC,uBAAuBN,UAAU,EAClC,GAAGE;IACJ,MAAM,EACJK,OAAOC,aAAa,EACpBC,UAAUC,gBAAgB,EAC1BC,WAAW,EACZ,GAAGZ,eAAe;QACjBa,cAAcN;IAChB;IACA,MAAMO,UAAUf,OAAOU;IAEvB,IAAIM;IACJ,IAAIT,QAAQ;QACVS,wBAAwB;YACtB,MAAMC,UAAUP,cAAcQ,IAAI,GAAG;YACrC,MAAMC,gBAAgBF,WAAWP,cAAcQ,IAAI,GAAGX,OAAOa,MAAM;YAEnE,OAAO;gBACL,gBAAgBD,gBAAgB,UAAUE;gBAC1ChB;gBACAY;gBACAE;gBACA,CAACb,OAAO,oBAAoB,WAAW;oBACrCM,iBAAiB,CAACF;wBAChB,IAAIA,cAAcQ,IAAI,KAAK,KAAKC,eAAe;4BAC7C,OAAO,IAAIG,IAAIf;wBACjB;wBAEA,OAAO,IAAIe;oBACb;gBACF;YACF;QACF;IACF;IAEA,OAAO;QACLC,OAAOxB,YAAY;YACjBa,iBAAiBG,QAAQS,OAAO;QAClC,GAAG;YAACZ;SAAiB;QACrBF;QACAE;QACAI;QACAS,kBAAiBhB,KAAK;YACpB,OAAO;gBACLJ;gBACAI,OAAOH,OAAOe,YAAYZ;gBAC1BQ,SAASP,cAAcgB,GAAG,CAACjB;gBAC3B,CAACH,OAAO,oBAAoB,WAAW;oBACrCO,YAAYJ;gBACd;YACF;QACF;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/form/useCombobox.ts"],"sourcesContent":["\"use client\";\nimport {\n useCallback,\n useRef,\n type FocusEventHandler,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type Ref,\n type RefCallback,\n type RefObject,\n} from \"react\";\nimport { type MenuProps } from \"../menu/Menu.js\";\nimport { type MenuSheetConfigurableProps } from \"../menu/MenuSheet.js\";\nimport {\n type GetDefaultFocusedIndex,\n type GetFocusableElements,\n type KeyboardMovementExtensionData,\n type KeyboardMovementProviderImplementation,\n type KeyboardMovementProviderOptions,\n} from \"../movement/types.js\";\nimport { useKeyboardMovementProvider } from \"../movement/useKeyboardMovementProvider.js\";\nimport { BELOW_CENTER_ANCHOR } from \"../positioning/constants.js\";\nimport {\n type PositionAnchor,\n type PositionWidth,\n} from \"../positioning/types.js\";\nimport { TRANSITION_CONFIG } from \"../transition/config.js\";\nimport {\n type TransitionCallbacks,\n type TransitionEnterHandler,\n type TransitionExitHandler,\n} from \"../transition/types.js\";\nimport {\n type NonNullMutableRef,\n type UseStateInitializer,\n type UseStateSetter,\n} from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredRef } from \"../useEnsuredRef.js\";\nimport { useEnsuredState } from \"../useEnsuredState.js\";\nimport { tryToSubmitRelatedForm } from \"./utils.js\";\n\nconst noop = (): void => {\n // do nothing\n};\n\n/**\n * @since 6.0.0\n */\nexport const getNonDisabledOptions = (\n container: HTMLElement\n): readonly HTMLElement[] => [\n ...container.querySelectorAll<HTMLLIElement>(\n '[role=\"option\"]:not([aria-disabled])'\n ),\n];\n\n/**\n * @since 6.0.0\n */\nexport type SupportedComboboxPopup = \"listbox\" | \"grid\" | \"dialog\";\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxKeyboardMovementData<\n E extends HTMLElement = HTMLInputElement,\n> extends KeyboardMovementExtensionData<E> {\n show: () => void;\n hide: () => void;\n visible: boolean;\n focusLast: NonNullMutableRef<boolean>;\n}\n\n/**\n * @since 6.0.0\n */\nexport type ExtendComboboxKeyDown<E extends HTMLElement = HTMLInputElement> = (\n movementData: ComboboxKeyboardMovementData<E>\n) => void;\n\n/**\n * @since 6.0.0\n */\nexport type ComboboxKeyboardMovementOptions<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n> = Pick<\n KeyboardMovementProviderOptions<ComboboxEl>,\n | \"onClick\"\n | \"onFocus\"\n | \"onKeyDown\"\n | \"disabled\"\n | \"loopable\"\n | \"searchable\"\n | \"onFocusChange\"\n | \"isNegativeOneAllowed\"\n>;\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxVisibilityOptions {\n /**\n * This can be used to control the popup's visibility and **must** be used\n * along with {@link setVisible}.\n */\n visible?: boolean;\n\n /**\n * Used to control the popup's visibility and should generally be a `useState`\n * setter.\n *\n * @example Controlling the Visibility\n * ```tsx\n * const [visible, setVisible] = useState(false);\n *\n * useCombobox({\n * visible,\n * setVisible,\n * });\n * ```\n */\n setVisible?: UseStateSetter<boolean>;\n\n /**\n * Set this to `true` to have the combobox's popup visible by default.\n *\n * @defaultValue `false`\n */\n defaultVisible?: UseStateInitializer<boolean>;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ConfigurableComboboxOptions<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n> extends ComboboxKeyboardMovementOptions<ComboboxEl>,\n ComboboxVisibilityOptions {\n /**\n * This is the {@link InputHTMLAttributes.form} attribute and is used to\n * attempt submitting a form when the enter key is pressed.\n */\n form?: string;\n\n /**\n * @defaultValue `\"combobox-popup-\" + useId()`\n */\n popupId?: string;\n popupRef?: Ref<PopupEl>;\n\n /**\n * @defaultValue `\"combobox-\" + useId()`\n */\n comboboxId?: string;\n comboboxRef?: Ref<ComboboxEl>;\n\n /**\n * @defaultValue `\"listbox\"`\n */\n popup?: \"listbox\" | \"grid\" | \"dialog\";\n\n /**\n * @defaultValue `false`\n */\n multiselect?: boolean;\n\n extendKeyDown?: ExtendComboboxKeyDown<ComboboxEl>;\n\n /**\n * @defaultValue {@link getNonDisabledOptions}\n */\n getFocusableElements?: GetFocusableElements;\n\n getDefaultFocusedIndex?: GetDefaultFocusedIndex;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxGetEnterDefaultFocusedIndexOptions {\n focusLast: boolean;\n focusables: readonly HTMLElement[];\n currentFocusIndex: number;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxOptions<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n> extends ConfigurableComboboxOptions<ComboboxEl, PopupEl> {\n getEnterDefaultFocusedIndex: (\n options: ComboboxGetEnterDefaultFocusedIndexOptions\n ) => number;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxWidgetProps<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n> {\n \"aria-controls\": string;\n \"aria-disabled\": true | undefined;\n \"aria-expanded\": boolean;\n \"aria-haspopup\": SupportedComboboxPopup;\n id: string;\n ref: RefCallback<ComboboxEl>;\n role: \"combobox\";\n onClick: MouseEventHandler<ComboboxEl>;\n onFocus: FocusEventHandler<ComboboxEl>;\n onKeyDown: KeyboardEventHandler<ComboboxEl>;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxWidgetPopupProps<\n PopupEl extends HTMLElement = HTMLElement,\n> {\n \"aria-multiselectable\": true | undefined;\n id: string;\n ref: RefCallback<PopupEl>;\n role: \"listbox\" | \"dialog\" | \"grid\";\n}\n\n/**\n * @since 6.0.0\n */\nexport type ComboboxTransitionCallbacks = Pick<\n TransitionCallbacks,\n \"onEntering\" | \"onEntered\" | \"onExiting\" | \"onExited\"\n>;\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxTransitionOptions extends ComboboxTransitionCallbacks {\n disableTransition?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport type ConfigurableComboboxMenuProps = Partial<\n Omit<MenuProps, \"visible\" | \"onRequestClose\" | keyof ComboboxWidgetPopupProps>\n>;\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedComboboxMenuProps<\n PopupEl extends HTMLElement = HTMLDivElement,\n> extends Required<ComboboxTransitionCallbacks>,\n ComboboxWidgetPopupProps<PopupEl> {\n visible: boolean;\n onRequestClose: () => void;\n /** @defaultValue `\"min\"` */\n width: PositionWidth;\n /** @defaultValue `BELOW_CENTER_ANCHOR` */\n anchor: PositionAnchor;\n fixedTo: RefObject<HTMLElement>;\n sheetProps: MenuSheetConfigurableProps &\n Required<ComboboxTransitionCallbacks>;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxMenuProps<PopupEl extends HTMLElement = HTMLDivElement>\n extends Omit<ConfigurableComboboxMenuProps, keyof ProvidedComboboxMenuProps>,\n ProvidedComboboxMenuProps<PopupEl> {}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxImplementation<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n> extends KeyboardMovementProviderImplementation<ComboboxEl> {\n show: () => void;\n hide: () => void;\n visible: boolean;\n setVisible: UseStateSetter<boolean>;\n focusLast: NonNullMutableRef<boolean>;\n popupRef: RefObject<PopupEl>;\n popupProps: ComboboxWidgetPopupProps<PopupEl>;\n comboboxRef: RefObject<ComboboxEl>;\n comboboxProps: ComboboxWidgetProps<ComboboxEl>;\n /**\n * Since the combobox usually uses the `Menu` as a popup element, this is a\n * helper util to create the required props and merge any additional props\n * with reasonable defaults.\n */\n getMenuProps: (\n overrides?: ConfigurableComboboxMenuProps\n ) => ComboboxMenuProps<PopupEl>;\n getTransitionCallbacks: (\n options: ComboboxTransitionOptions\n ) => Required<ComboboxTransitionCallbacks>;\n}\n\n/**\n * @since 6.0.0\n */\nexport function useCombobox<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n>(\n options: ComboboxOptions<ComboboxEl, PopupEl>\n): ComboboxImplementation<ComboboxEl, PopupEl> {\n const {\n form,\n popup = \"listbox\",\n onClick = noop,\n onFocus,\n onKeyDown,\n searchable,\n multiselect,\n isNegativeOneAllowed,\n loopable,\n disabled,\n visible: propVisible,\n setVisible: propSetVisible,\n defaultVisible = false,\n comboboxId: propComboboxId,\n comboboxRef: propComboboxRef,\n popupId: propPopupId,\n popupRef: propPopupRef,\n onFocusChange = noop,\n extendKeyDown = noop,\n getFocusableElements = getNonDisabledOptions,\n getEnterDefaultFocusedIndex,\n getDefaultFocusedIndex,\n } = options;\n\n const [visible, setVisible] = useEnsuredState({\n value: propVisible,\n setValue: propSetVisible,\n defaultValue: defaultVisible,\n });\n const show = useCallback(() => {\n setVisible(true);\n }, [setVisible]);\n const hide = useCallback(() => {\n setVisible(false);\n }, [setVisible]);\n\n const popupId = useEnsuredId(propPopupId, \"combobox-popup\");\n const comboboxId = useEnsuredId(propComboboxId, \"combobox\");\n const [comboboxRef, comboboxRefCallback] = useEnsuredRef(propComboboxRef);\n const [popupRef, popupRefCallback] = useEnsuredRef(propPopupRef);\n const focusLast = useRef(false);\n const {\n movementProps,\n movementContext,\n currentFocusIndex,\n activeDescendantId,\n setActiveDescendantId,\n } = useKeyboardMovementProvider<ComboboxEl>({\n onFocus,\n onKeyDown,\n onClick(event) {\n onClick(event);\n if (disabled) {\n return;\n }\n\n show();\n },\n extendKeyDown(movementData) {\n extendKeyDown({\n ...movementData,\n show,\n hide,\n visible,\n focusLast,\n });\n const { event } = movementData;\n if (event.isPropagationStopped()) {\n return;\n }\n\n if (visible) {\n switch (event.key) {\n case \"Tab\":\n case \"Escape\":\n event.stopPropagation();\n hide();\n break;\n case \"Enter\":\n event.preventDefault();\n break;\n }\n\n // while visible, always use the default keyboard movement behavior\n return;\n }\n\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowDown\":\n event.preventDefault();\n event.stopPropagation();\n focusLast.current = event.key === \"ArrowUp\";\n show();\n break;\n case \"Enter\":\n tryToSubmitRelatedForm(event, form);\n break;\n }\n },\n disabled,\n loopable,\n searchable,\n onFocusChange,\n programmatic: true,\n includeDisabled: false,\n tabIndexBehavior: \"virtual\",\n getFocusableElements(container, programmatic) {\n const popup = popupRef.current;\n if (!popup) {\n return [];\n }\n\n return getFocusableElements(popup || container, programmatic);\n },\n isNegativeOneAllowed,\n getDefaultFocusedIndex,\n });\n const getTransitionCallbacks = (\n options: ComboboxTransitionOptions = {}\n ): Required<ComboboxTransitionCallbacks> => {\n const { onEntered, onEntering, onExiting, onExited, disableTransition } =\n options;\n\n const handleEntering =\n (callback: TransitionEnterHandler = noop, skipped: boolean) =>\n (appearing: boolean) => {\n callback(appearing);\n\n const popup = popupRef.current;\n if (!popup || skipped) {\n // Chrome does not trigger the scrollIntoView behavior correctly while\n // using a scale transition, so need to trigger this on the entered\n // flow to really make sure the item is in view.\n // An alternative would be to implement a custom scrollIntoView\n // behavior again like the previous versions of react-md, but this is\n // less lines of code\n const activeOption = document.getElementById(activeDescendantId);\n if (activeOption) {\n activeOption.scrollIntoView({ block: \"nearest\" });\n }\n return;\n }\n\n const focusables = getFocusableElements(popup, true);\n const index = getEnterDefaultFocusedIndex({\n focusLast: focusLast.current,\n focusables,\n currentFocusIndex: currentFocusIndex.current,\n });\n focusLast.current = false;\n currentFocusIndex.current = index;\n\n const option = focusables[index];\n if (!option) {\n return;\n }\n\n onFocusChange({\n index,\n element: option,\n });\n\n option.scrollIntoView({ block: \"nearest\" });\n setActiveDescendantId(option.id || \"\");\n };\n const handleExiting =\n (callback: TransitionExitHandler = noop, skipped: boolean) =>\n (): void => {\n callback();\n\n if (!skipped) {\n // since the menu is unmounted or set to hidden while not visible, need\n // to clear the aria-activedescendant and current focus index when\n // hiding\n currentFocusIndex.current = -1;\n setActiveDescendantId(\"\");\n }\n };\n\n const isTransitionCompleteSkipped =\n !disableTransition && !TRANSITION_CONFIG.disabled;\n\n return {\n onEntering: handleEntering(onEntering, false),\n onEntered: handleEntering(onEntered, isTransitionCompleteSkipped),\n onExiting: handleExiting(onExiting, false),\n onExited: handleExiting(onExited, isTransitionCompleteSkipped),\n };\n };\n\n const popupProps: ComboboxWidgetPopupProps<PopupEl> = {\n \"aria-multiselectable\": multiselect || undefined,\n id: popupId,\n ref: popupRefCallback,\n role: popup,\n };\n\n return {\n show,\n hide,\n visible,\n setVisible,\n focusLast,\n popupRef,\n popupProps,\n comboboxRef,\n comboboxProps: {\n ...movementProps,\n \"aria-controls\": popupId,\n \"aria-disabled\": disabled || undefined,\n \"aria-expanded\": visible,\n \"aria-haspopup\": popup,\n id: comboboxId,\n ref: comboboxRefCallback,\n role: \"combobox\",\n },\n movementProps,\n movementContext,\n currentFocusIndex,\n activeDescendantId,\n setActiveDescendantId,\n getTransitionCallbacks,\n getMenuProps(props = {}) {\n const { sheetProps, disableTransition } = props;\n return {\n anchor: BELOW_CENTER_ANCHOR,\n width: \"min\",\n fixedTo: comboboxRef,\n ...props,\n ...popupProps,\n visible,\n onRequestClose: hide,\n ...getTransitionCallbacks(props),\n sheetProps: {\n ...sheetProps,\n ...getTransitionCallbacks({\n ...sheetProps,\n disableTransition:\n sheetProps?.disableTransition ?? disableTransition,\n }),\n },\n };\n },\n };\n}\n"],"names":["useCallback","useRef","useKeyboardMovementProvider","BELOW_CENTER_ANCHOR","TRANSITION_CONFIG","useEnsuredId","useEnsuredRef","useEnsuredState","tryToSubmitRelatedForm","noop","getNonDisabledOptions","container","querySelectorAll","useCombobox","options","form","popup","onClick","onFocus","onKeyDown","searchable","multiselect","isNegativeOneAllowed","loopable","disabled","visible","propVisible","setVisible","propSetVisible","defaultVisible","comboboxId","propComboboxId","comboboxRef","propComboboxRef","popupId","propPopupId","popupRef","propPopupRef","onFocusChange","extendKeyDown","getFocusableElements","getEnterDefaultFocusedIndex","getDefaultFocusedIndex","value","setValue","defaultValue","show","hide","comboboxRefCallback","popupRefCallback","focusLast","movementProps","movementContext","currentFocusIndex","activeDescendantId","setActiveDescendantId","event","movementData","isPropagationStopped","key","stopPropagation","preventDefault","current","programmatic","includeDisabled","tabIndexBehavior","getTransitionCallbacks","onEntered","onEntering","onExiting","onExited","disableTransition","handleEntering","callback","skipped","appearing","activeOption","document","getElementById","scrollIntoView","block","focusables","index","option","element","id","handleExiting","isTransitionCompleteSkipped","popupProps","undefined","ref","role","comboboxProps","getMenuProps","props","sheetProps","anchor","width","fixedTo","onRequestClose"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/form/useCombobox.ts"],"sourcesContent":["\"use client\";\n\nimport {\n type FocusEventHandler,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type Ref,\n type RefCallback,\n type RefObject,\n useCallback,\n useRef,\n} from \"react\";\n\nimport { type MenuProps } from \"../menu/Menu.js\";\nimport { type MenuSheetConfigurableProps } from \"../menu/MenuSheet.js\";\nimport {\n type GetDefaultFocusedIndex,\n type GetFocusableElements,\n type KeyboardMovementExtensionData,\n type KeyboardMovementProviderImplementation,\n type KeyboardMovementProviderOptions,\n} from \"../movement/types.js\";\nimport { useKeyboardMovementProvider } from \"../movement/useKeyboardMovementProvider.js\";\nimport { BELOW_CENTER_ANCHOR } from \"../positioning/constants.js\";\nimport {\n type PositionAnchor,\n type PositionWidth,\n} from \"../positioning/types.js\";\nimport { TRANSITION_CONFIG } from \"../transition/config.js\";\nimport {\n type TransitionCallbacks,\n type TransitionEnterHandler,\n type TransitionExitHandler,\n} from \"../transition/types.js\";\nimport {\n type NonNullMutableRef,\n type UseStateInitializer,\n type UseStateSetter,\n} from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredRef } from \"../useEnsuredRef.js\";\nimport { useEnsuredState } from \"../useEnsuredState.js\";\nimport { tryToSubmitRelatedForm } from \"./utils.js\";\n\nconst noop = (): void => {\n // do nothing\n};\n\n/**\n * @since 6.0.0\n */\nexport const getNonDisabledOptions = (\n container: HTMLElement\n): readonly HTMLElement[] => [\n ...container.querySelectorAll<HTMLLIElement>(\n '[role=\"option\"]:not([aria-disabled])'\n ),\n];\n\n/**\n * @since 6.0.0\n */\nexport type SupportedComboboxPopup = \"listbox\" | \"grid\" | \"dialog\";\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxKeyboardMovementData<\n E extends HTMLElement = HTMLInputElement,\n> extends KeyboardMovementExtensionData<E> {\n show: () => void;\n hide: () => void;\n visible: boolean;\n focusLast: NonNullMutableRef<boolean>;\n}\n\n/**\n * @since 6.0.0\n */\nexport type ExtendComboboxKeyDown<E extends HTMLElement = HTMLInputElement> = (\n movementData: ComboboxKeyboardMovementData<E>\n) => void;\n\n/**\n * @since 6.0.0\n */\nexport type ComboboxKeyboardMovementOptions<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n> = Pick<\n KeyboardMovementProviderOptions<ComboboxEl>,\n | \"onClick\"\n | \"onFocus\"\n | \"onKeyDown\"\n | \"disabled\"\n | \"loopable\"\n | \"searchable\"\n | \"onFocusChange\"\n | \"isNegativeOneAllowed\"\n>;\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxVisibilityOptions {\n /**\n * This can be used to control the popup's visibility and **must** be used\n * along with {@link setVisible}.\n */\n visible?: boolean;\n\n /**\n * Used to control the popup's visibility and should generally be a `useState`\n * setter.\n *\n * @example Controlling the Visibility\n * ```tsx\n * const [visible, setVisible] = useState(false);\n *\n * useCombobox({\n * visible,\n * setVisible,\n * });\n * ```\n */\n setVisible?: UseStateSetter<boolean>;\n\n /**\n * Set this to `true` to have the combobox's popup visible by default.\n *\n * @defaultValue `false`\n */\n defaultVisible?: UseStateInitializer<boolean>;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ConfigurableComboboxOptions<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n> extends ComboboxKeyboardMovementOptions<ComboboxEl>,\n ComboboxVisibilityOptions {\n /**\n * This is the {@link InputHTMLAttributes.form} attribute and is used to\n * attempt submitting a form when the enter key is pressed.\n */\n form?: string;\n\n /**\n * @defaultValue `\"combobox-popup-\" + useId()`\n */\n popupId?: string;\n popupRef?: Ref<PopupEl>;\n\n /**\n * @defaultValue `\"combobox-\" + useId()`\n */\n comboboxId?: string;\n comboboxRef?: Ref<ComboboxEl>;\n\n /**\n * @defaultValue `\"listbox\"`\n */\n popup?: \"listbox\" | \"grid\" | \"dialog\";\n\n /**\n * @defaultValue `false`\n */\n multiselect?: boolean;\n\n extendKeyDown?: ExtendComboboxKeyDown<ComboboxEl>;\n\n /**\n * @defaultValue {@link getNonDisabledOptions}\n */\n getFocusableElements?: GetFocusableElements;\n\n getDefaultFocusedIndex?: GetDefaultFocusedIndex;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxGetEnterDefaultFocusedIndexOptions {\n focusLast: boolean;\n focusables: readonly HTMLElement[];\n currentFocusIndex: number;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxOptions<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n> extends ConfigurableComboboxOptions<ComboboxEl, PopupEl> {\n getEnterDefaultFocusedIndex: (\n options: ComboboxGetEnterDefaultFocusedIndexOptions\n ) => number;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxWidgetProps<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n> {\n \"aria-controls\": string;\n \"aria-disabled\": true | undefined;\n \"aria-expanded\": boolean;\n \"aria-haspopup\": SupportedComboboxPopup;\n id: string;\n ref: RefCallback<ComboboxEl>;\n role: \"combobox\";\n onClick: MouseEventHandler<ComboboxEl>;\n onFocus: FocusEventHandler<ComboboxEl>;\n onKeyDown: KeyboardEventHandler<ComboboxEl>;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxWidgetPopupProps<\n PopupEl extends HTMLElement = HTMLElement,\n> {\n \"aria-multiselectable\": true | undefined;\n id: string;\n ref: RefCallback<PopupEl>;\n role: \"listbox\" | \"dialog\" | \"grid\";\n}\n\n/**\n * @since 6.0.0\n */\nexport type ComboboxTransitionCallbacks = Pick<\n TransitionCallbacks,\n \"onEntering\" | \"onEntered\" | \"onExiting\" | \"onExited\"\n>;\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxTransitionOptions extends ComboboxTransitionCallbacks {\n disableTransition?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport type ConfigurableComboboxMenuProps = Partial<\n Omit<MenuProps, \"visible\" | \"onRequestClose\" | keyof ComboboxWidgetPopupProps>\n>;\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedComboboxMenuProps<\n PopupEl extends HTMLElement = HTMLDivElement,\n> extends Required<ComboboxTransitionCallbacks>,\n ComboboxWidgetPopupProps<PopupEl> {\n visible: boolean;\n onRequestClose: () => void;\n /** @defaultValue `\"min\"` */\n width: PositionWidth;\n /** @defaultValue `BELOW_CENTER_ANCHOR` */\n anchor: PositionAnchor;\n fixedTo: RefObject<HTMLElement>;\n sheetProps: MenuSheetConfigurableProps &\n Required<ComboboxTransitionCallbacks>;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxMenuProps<PopupEl extends HTMLElement = HTMLDivElement>\n extends Omit<ConfigurableComboboxMenuProps, keyof ProvidedComboboxMenuProps>,\n ProvidedComboboxMenuProps<PopupEl> {}\n\n/**\n * @since 6.0.0\n */\nexport interface ComboboxImplementation<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n> extends KeyboardMovementProviderImplementation<ComboboxEl> {\n show: () => void;\n hide: () => void;\n visible: boolean;\n setVisible: UseStateSetter<boolean>;\n focusLast: NonNullMutableRef<boolean>;\n popupRef: RefObject<PopupEl>;\n popupProps: ComboboxWidgetPopupProps<PopupEl>;\n comboboxRef: RefObject<ComboboxEl>;\n comboboxProps: ComboboxWidgetProps<ComboboxEl>;\n /**\n * Since the combobox usually uses the `Menu` as a popup element, this is a\n * helper util to create the required props and merge any additional props\n * with reasonable defaults.\n */\n getMenuProps: (\n overrides?: ConfigurableComboboxMenuProps\n ) => ComboboxMenuProps<PopupEl>;\n getTransitionCallbacks: (\n options: ComboboxTransitionOptions\n ) => Required<ComboboxTransitionCallbacks>;\n}\n\n/**\n * @since 6.0.0\n */\nexport function useCombobox<\n ComboboxEl extends HTMLElement = HTMLInputElement,\n PopupEl extends HTMLElement = HTMLElement,\n>(\n options: ComboboxOptions<ComboboxEl, PopupEl>\n): ComboboxImplementation<ComboboxEl, PopupEl> {\n const {\n form,\n popup = \"listbox\",\n onClick = noop,\n onFocus,\n onKeyDown,\n searchable,\n multiselect,\n isNegativeOneAllowed,\n loopable,\n disabled,\n visible: propVisible,\n setVisible: propSetVisible,\n defaultVisible = false,\n comboboxId: propComboboxId,\n comboboxRef: propComboboxRef,\n popupId: propPopupId,\n popupRef: propPopupRef,\n onFocusChange = noop,\n extendKeyDown = noop,\n getFocusableElements = getNonDisabledOptions,\n getEnterDefaultFocusedIndex,\n getDefaultFocusedIndex,\n } = options;\n\n const [visible, setVisible] = useEnsuredState({\n value: propVisible,\n setValue: propSetVisible,\n defaultValue: defaultVisible,\n });\n const show = useCallback(() => {\n setVisible(true);\n }, [setVisible]);\n const hide = useCallback(() => {\n setVisible(false);\n }, [setVisible]);\n\n const popupId = useEnsuredId(propPopupId, \"combobox-popup\");\n const comboboxId = useEnsuredId(propComboboxId, \"combobox\");\n const [comboboxRef, comboboxRefCallback] = useEnsuredRef(propComboboxRef);\n const [popupRef, popupRefCallback] = useEnsuredRef(propPopupRef);\n const focusLast = useRef(false);\n const {\n movementProps,\n movementContext,\n currentFocusIndex,\n activeDescendantId,\n setActiveDescendantId,\n } = useKeyboardMovementProvider<ComboboxEl>({\n onFocus,\n onKeyDown,\n onClick(event) {\n onClick(event);\n if (disabled) {\n return;\n }\n\n show();\n },\n extendKeyDown(movementData) {\n extendKeyDown({\n ...movementData,\n show,\n hide,\n visible,\n focusLast,\n });\n const { event } = movementData;\n if (event.isPropagationStopped()) {\n return;\n }\n\n if (visible) {\n switch (event.key) {\n case \"Tab\":\n case \"Escape\":\n event.stopPropagation();\n hide();\n break;\n case \"Enter\":\n event.preventDefault();\n break;\n }\n\n // while visible, always use the default keyboard movement behavior\n return;\n }\n\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowDown\":\n event.preventDefault();\n event.stopPropagation();\n focusLast.current = event.key === \"ArrowUp\";\n show();\n break;\n case \"Enter\":\n tryToSubmitRelatedForm(event, form);\n break;\n }\n },\n disabled,\n loopable,\n searchable,\n onFocusChange,\n programmatic: true,\n includeDisabled: false,\n tabIndexBehavior: \"virtual\",\n getFocusableElements(container, programmatic) {\n const popup = popupRef.current;\n if (!popup) {\n return [];\n }\n\n return getFocusableElements(popup || container, programmatic);\n },\n isNegativeOneAllowed,\n getDefaultFocusedIndex,\n });\n const getTransitionCallbacks = (\n options: ComboboxTransitionOptions = {}\n ): Required<ComboboxTransitionCallbacks> => {\n const { onEntered, onEntering, onExiting, onExited, disableTransition } =\n options;\n\n const handleEntering =\n (callback: TransitionEnterHandler = noop, skipped: boolean) =>\n (appearing: boolean) => {\n callback(appearing);\n\n const popup = popupRef.current;\n if (!popup || skipped) {\n // Chrome does not trigger the scrollIntoView behavior correctly while\n // using a scale transition, so need to trigger this on the entered\n // flow to really make sure the item is in view.\n // An alternative would be to implement a custom scrollIntoView\n // behavior again like the previous versions of react-md, but this is\n // less lines of code\n const activeOption = document.getElementById(activeDescendantId);\n if (activeOption) {\n activeOption.scrollIntoView({ block: \"nearest\" });\n }\n return;\n }\n\n const focusables = getFocusableElements(popup, true);\n const index = getEnterDefaultFocusedIndex({\n focusLast: focusLast.current,\n focusables,\n currentFocusIndex: currentFocusIndex.current,\n });\n focusLast.current = false;\n currentFocusIndex.current = index;\n\n const option = focusables[index];\n if (!option) {\n return;\n }\n\n onFocusChange({\n index,\n element: option,\n });\n\n option.scrollIntoView({ block: \"nearest\" });\n setActiveDescendantId(option.id || \"\");\n };\n const handleExiting =\n (callback: TransitionExitHandler = noop, skipped: boolean) =>\n (): void => {\n callback();\n\n if (!skipped) {\n // since the menu is unmounted or set to hidden while not visible, need\n // to clear the aria-activedescendant and current focus index when\n // hiding\n currentFocusIndex.current = -1;\n setActiveDescendantId(\"\");\n }\n };\n\n const isTransitionCompleteSkipped =\n !disableTransition && !TRANSITION_CONFIG.disabled;\n\n return {\n onEntering: handleEntering(onEntering, false),\n onEntered: handleEntering(onEntered, isTransitionCompleteSkipped),\n onExiting: handleExiting(onExiting, false),\n onExited: handleExiting(onExited, isTransitionCompleteSkipped),\n };\n };\n\n const popupProps: ComboboxWidgetPopupProps<PopupEl> = {\n \"aria-multiselectable\": multiselect || undefined,\n id: popupId,\n ref: popupRefCallback,\n role: popup,\n };\n\n return {\n show,\n hide,\n visible,\n setVisible,\n focusLast,\n popupRef,\n popupProps,\n comboboxRef,\n comboboxProps: {\n ...movementProps,\n \"aria-controls\": popupId,\n \"aria-disabled\": disabled || undefined,\n \"aria-expanded\": visible,\n \"aria-haspopup\": popup,\n id: comboboxId,\n ref: comboboxRefCallback,\n role: \"combobox\",\n },\n movementProps,\n movementContext,\n currentFocusIndex,\n activeDescendantId,\n setActiveDescendantId,\n getTransitionCallbacks,\n getMenuProps(props = {}) {\n const { sheetProps, disableTransition } = props;\n return {\n anchor: BELOW_CENTER_ANCHOR,\n width: \"min\",\n fixedTo: comboboxRef,\n ...props,\n ...popupProps,\n visible,\n onRequestClose: hide,\n ...getTransitionCallbacks(props),\n sheetProps: {\n ...sheetProps,\n ...getTransitionCallbacks({\n ...sheetProps,\n disableTransition:\n sheetProps?.disableTransition ?? disableTransition,\n }),\n },\n };\n },\n };\n}\n"],"names":["useCallback","useRef","useKeyboardMovementProvider","BELOW_CENTER_ANCHOR","TRANSITION_CONFIG","useEnsuredId","useEnsuredRef","useEnsuredState","tryToSubmitRelatedForm","noop","getNonDisabledOptions","container","querySelectorAll","useCombobox","options","form","popup","onClick","onFocus","onKeyDown","searchable","multiselect","isNegativeOneAllowed","loopable","disabled","visible","propVisible","setVisible","propSetVisible","defaultVisible","comboboxId","propComboboxId","comboboxRef","propComboboxRef","popupId","propPopupId","popupRef","propPopupRef","onFocusChange","extendKeyDown","getFocusableElements","getEnterDefaultFocusedIndex","getDefaultFocusedIndex","value","setValue","defaultValue","show","hide","comboboxRefCallback","popupRefCallback","focusLast","movementProps","movementContext","currentFocusIndex","activeDescendantId","setActiveDescendantId","event","movementData","isPropagationStopped","key","stopPropagation","preventDefault","current","programmatic","includeDisabled","tabIndexBehavior","getTransitionCallbacks","onEntered","onEntering","onExiting","onExited","disableTransition","handleEntering","callback","skipped","appearing","activeOption","document","getElementById","scrollIntoView","block","focusables","index","option","element","id","handleExiting","isTransitionCompleteSkipped","popupProps","undefined","ref","role","comboboxProps","getMenuProps","props","sheetProps","anchor","width","fixedTo","onRequestClose"],"mappings":"AAAA;AAEA,SASEA,WAAW,EACXC,MAAM,QACD,QAAQ;AAWf,SAASC,2BAA2B,QAAQ,6CAA6C;AACzF,SAASC,mBAAmB,QAAQ,8BAA8B;AAKlE,SAASC,iBAAiB,QAAQ,0BAA0B;AAW5D,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SAASC,aAAa,QAAQ,sBAAsB;AACpD,SAASC,eAAe,QAAQ,wBAAwB;AACxD,SAASC,sBAAsB,QAAQ,aAAa;AAEpD,MAAMC,OAAO;AACX,aAAa;AACf;AAEA;;CAEC,GACD,OAAO,MAAMC,wBAAwB,CACnCC,YAC2B;WACxBA,UAAUC,gBAAgB,CAC3B;KAEH,CAAC;AA0PF;;CAEC,GACD,OAAO,SAASC,YAIdC,OAA6C;IAE7C,MAAM,EACJC,IAAI,EACJC,QAAQ,SAAS,EACjBC,UAAUR,IAAI,EACdS,OAAO,EACPC,SAAS,EACTC,UAAU,EACVC,WAAW,EACXC,oBAAoB,EACpBC,QAAQ,EACRC,QAAQ,EACRC,SAASC,WAAW,EACpBC,YAAYC,cAAc,EAC1BC,iBAAiB,KAAK,EACtBC,YAAYC,cAAc,EAC1BC,aAAaC,eAAe,EAC5BC,SAASC,WAAW,EACpBC,UAAUC,YAAY,EACtBC,gBAAgB7B,IAAI,EACpB8B,gBAAgB9B,IAAI,EACpB+B,uBAAuB9B,qBAAqB,EAC5C+B,2BAA2B,EAC3BC,sBAAsB,EACvB,GAAG5B;IAEJ,MAAM,CAACW,SAASE,WAAW,GAAGpB,gBAAgB;QAC5CoC,OAAOjB;QACPkB,UAAUhB;QACViB,cAAchB;IAChB;IACA,MAAMiB,OAAO9C,YAAY;QACvB2B,WAAW;IACb,GAAG;QAACA;KAAW;IACf,MAAMoB,OAAO/C,YAAY;QACvB2B,WAAW;IACb,GAAG;QAACA;KAAW;IAEf,MAAMO,UAAU7B,aAAa8B,aAAa;IAC1C,MAAML,aAAazB,aAAa0B,gBAAgB;IAChD,MAAM,CAACC,aAAagB,oBAAoB,GAAG1C,cAAc2B;IACzD,MAAM,CAACG,UAAUa,iBAAiB,GAAG3C,cAAc+B;IACnD,MAAMa,YAAYjD,OAAO;IACzB,MAAM,EACJkD,aAAa,EACbC,eAAe,EACfC,iBAAiB,EACjBC,kBAAkB,EAClBC,qBAAqB,EACtB,GAAGrD,4BAAwC;QAC1CgB;QACAC;QACAF,SAAQuC,KAAK;YACXvC,QAAQuC;YACR,IAAIhC,UAAU;gBACZ;YACF;YAEAsB;QACF;QACAP,eAAckB,YAAY;YACxBlB,cAAc;gBACZ,GAAGkB,YAAY;gBACfX;gBACAC;gBACAtB;gBACAyB;YACF;YACA,MAAM,EAAEM,KAAK,EAAE,GAAGC;YAClB,IAAID,MAAME,oBAAoB,IAAI;gBAChC;YACF;YAEA,IAAIjC,SAAS;gBACX,OAAQ+B,MAAMG,GAAG;oBACf,KAAK;oBACL,KAAK;wBACHH,MAAMI,eAAe;wBACrBb;wBACA;oBACF,KAAK;wBACHS,MAAMK,cAAc;wBACpB;gBACJ;gBAEA,mEAAmE;gBACnE;YACF;YAEA,OAAQL,MAAMG,GAAG;gBACf,KAAK;gBACL,KAAK;oBACHH,MAAMK,cAAc;oBACpBL,MAAMI,eAAe;oBACrBV,UAAUY,OAAO,GAAGN,MAAMG,GAAG,KAAK;oBAClCb;oBACA;gBACF,KAAK;oBACHtC,uBAAuBgD,OAAOzC;oBAC9B;YACJ;QACF;QACAS;QACAD;QACAH;QACAkB;QACAyB,cAAc;QACdC,iBAAiB;QACjBC,kBAAkB;QAClBzB,sBAAqB7B,SAAS,EAAEoD,YAAY;YAC1C,MAAM/C,QAAQoB,SAAS0B,OAAO;YAC9B,IAAI,CAAC9C,OAAO;gBACV,OAAO,EAAE;YACX;YAEA,OAAOwB,qBAAqBxB,SAASL,WAAWoD;QAClD;QACAzC;QACAoB;IACF;IACA,MAAMwB,yBAAyB,CAC7BpD,UAAqC,CAAC,CAAC;QAEvC,MAAM,EAAEqD,SAAS,EAAEC,UAAU,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,iBAAiB,EAAE,GACrEzD;QAEF,MAAM0D,iBACJ,CAACC,WAAmChE,IAAI,EAAEiE,UAC1C,CAACC;gBACCF,SAASE;gBAET,MAAM3D,QAAQoB,SAAS0B,OAAO;gBAC9B,IAAI,CAAC9C,SAAS0D,SAAS;oBACrB,sEAAsE;oBACtE,mEAAmE;oBACnE,gDAAgD;oBAChD,+DAA+D;oBAC/D,qEAAqE;oBACrE,qBAAqB;oBACrB,MAAME,eAAeC,SAASC,cAAc,CAACxB;oBAC7C,IAAIsB,cAAc;wBAChBA,aAAaG,cAAc,CAAC;4BAAEC,OAAO;wBAAU;oBACjD;oBACA;gBACF;gBAEA,MAAMC,aAAazC,qBAAqBxB,OAAO;gBAC/C,MAAMkE,QAAQzC,4BAA4B;oBACxCS,WAAWA,UAAUY,OAAO;oBAC5BmB;oBACA5B,mBAAmBA,kBAAkBS,OAAO;gBAC9C;gBACAZ,UAAUY,OAAO,GAAG;gBACpBT,kBAAkBS,OAAO,GAAGoB;gBAE5B,MAAMC,SAASF,UAAU,CAACC,MAAM;gBAChC,IAAI,CAACC,QAAQ;oBACX;gBACF;gBAEA7C,cAAc;oBACZ4C;oBACAE,SAASD;gBACX;gBAEAA,OAAOJ,cAAc,CAAC;oBAAEC,OAAO;gBAAU;gBACzCzB,sBAAsB4B,OAAOE,EAAE,IAAI;YACrC;QACF,MAAMC,gBACJ,CAACb,WAAkChE,IAAI,EAAEiE,UACzC;gBACED;gBAEA,IAAI,CAACC,SAAS;oBACZ,uEAAuE;oBACvE,kEAAkE;oBAClE,SAAS;oBACTrB,kBAAkBS,OAAO,GAAG,CAAC;oBAC7BP,sBAAsB;gBACxB;YACF;QAEF,MAAMgC,8BACJ,CAAChB,qBAAqB,CAACnE,kBAAkBoB,QAAQ;QAEnD,OAAO;YACL4C,YAAYI,eAAeJ,YAAY;YACvCD,WAAWK,eAAeL,WAAWoB;YACrClB,WAAWiB,cAAcjB,WAAW;YACpCC,UAAUgB,cAAchB,UAAUiB;QACpC;IACF;IAEA,MAAMC,aAAgD;QACpD,wBAAwBnE,eAAeoE;QACvCJ,IAAInD;QACJwD,KAAKzC;QACL0C,MAAM3E;IACR;IAEA,OAAO;QACL8B;QACAC;QACAtB;QACAE;QACAuB;QACAd;QACAoD;QACAxD;QACA4D,eAAe;YACb,GAAGzC,aAAa;YAChB,iBAAiBjB;YACjB,iBAAiBV,YAAYiE;YAC7B,iBAAiBhE;YACjB,iBAAiBT;YACjBqE,IAAIvD;YACJ4D,KAAK1C;YACL2C,MAAM;QACR;QACAxC;QACAC;QACAC;QACAC;QACAC;QACAW;QACA2B,cAAaC,QAAQ,CAAC,CAAC;YACrB,MAAM,EAAEC,UAAU,EAAExB,iBAAiB,EAAE,GAAGuB;YAC1C,OAAO;gBACLE,QAAQ7F;gBACR8F,OAAO;gBACPC,SAASlE;gBACT,GAAG8D,KAAK;gBACR,GAAGN,UAAU;gBACb/D;gBACA0E,gBAAgBpD;gBAChB,GAAGmB,uBAAuB4B,MAAM;gBAChCC,YAAY;oBACV,GAAGA,UAAU;oBACb,GAAG7B,uBAAuB;wBACxB,GAAG6B,UAAU;wBACbxB,mBACEwB,YAAYxB,qBAAqBA;oBACrC,EAAE;gBACJ;YACF;QACF;IACF;AACF"}