@react-md/core 6.5.1 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (648) hide show
  1. package/dist/_utils.scss +3 -0
  2. package/dist/app-bar/AppBar.d.ts +3 -2
  3. package/dist/app-bar/AppBar.js +3 -4
  4. package/dist/app-bar/AppBar.js.map +1 -1
  5. package/dist/app-bar/AppBarTitle.d.ts +3 -1
  6. package/dist/app-bar/AppBarTitle.js +3 -4
  7. package/dist/app-bar/AppBarTitle.js.map +1 -1
  8. package/dist/autocomplete/AutocompleteChip.d.ts +2 -1
  9. package/dist/autocomplete/AutocompleteChip.js +3 -4
  10. package/dist/autocomplete/AutocompleteChip.js.map +1 -1
  11. package/dist/autocomplete/types.d.ts +1 -0
  12. package/dist/autocomplete/types.js.map +1 -1
  13. package/dist/autocomplete/utils.d.ts +4 -4
  14. package/dist/autocomplete/utils.js.map +1 -1
  15. package/dist/avatar/Avatar.d.ts +3 -2
  16. package/dist/avatar/Avatar.js +3 -4
  17. package/dist/avatar/Avatar.js.map +1 -1
  18. package/dist/badge/Badge.d.ts +3 -2
  19. package/dist/badge/Badge.js +3 -4
  20. package/dist/badge/Badge.js.map +1 -1
  21. package/dist/box/Box.d.ts +3 -2
  22. package/dist/box/Box.js +3 -4
  23. package/dist/box/Box.js.map +1 -1
  24. package/dist/button/AsyncButton.d.ts +3 -2
  25. package/dist/button/AsyncButton.js +3 -4
  26. package/dist/button/AsyncButton.js.map +1 -1
  27. package/dist/button/Button.d.ts +3 -2
  28. package/dist/button/Button.js +3 -4
  29. package/dist/button/Button.js.map +1 -1
  30. package/dist/button/ButtonUnstyled.d.ts +5 -3
  31. package/dist/button/ButtonUnstyled.js +3 -4
  32. package/dist/button/ButtonUnstyled.js.map +1 -1
  33. package/dist/button/FloatingActionButton.d.ts +3 -2
  34. package/dist/button/FloatingActionButton.js +3 -4
  35. package/dist/button/FloatingActionButton.js.map +1 -1
  36. package/dist/button/TooltippedButton.d.ts +3 -2
  37. package/dist/button/TooltippedButton.js +3 -4
  38. package/dist/button/TooltippedButton.js.map +1 -1
  39. package/dist/card/Card.d.ts +3 -2
  40. package/dist/card/Card.js +3 -4
  41. package/dist/card/Card.js.map +1 -1
  42. package/dist/card/CardContent.d.ts +3 -2
  43. package/dist/card/CardContent.js +3 -4
  44. package/dist/card/CardContent.js.map +1 -1
  45. package/dist/card/CardFooter.d.ts +3 -1
  46. package/dist/card/CardFooter.js +3 -4
  47. package/dist/card/CardFooter.js.map +1 -1
  48. package/dist/card/CardHeader.d.ts +3 -2
  49. package/dist/card/CardHeader.js +3 -4
  50. package/dist/card/CardHeader.js.map +1 -1
  51. package/dist/card/CardSubtitle.d.ts +3 -1
  52. package/dist/card/CardSubtitle.js +3 -4
  53. package/dist/card/CardSubtitle.js.map +1 -1
  54. package/dist/card/CardTitle.d.ts +3 -1
  55. package/dist/card/CardTitle.js +3 -4
  56. package/dist/card/CardTitle.js.map +1 -1
  57. package/dist/card/ClickableCard.d.ts +3 -2
  58. package/dist/card/ClickableCard.js +3 -4
  59. package/dist/card/ClickableCard.js.map +1 -1
  60. package/dist/chip/Chip.d.ts +4 -2
  61. package/dist/chip/Chip.js +4 -4
  62. package/dist/chip/Chip.js.map +1 -1
  63. package/dist/datetime/NativeDateField.d.ts +3 -1
  64. package/dist/datetime/NativeDateField.js +3 -4
  65. package/dist/datetime/NativeDateField.js.map +1 -1
  66. package/dist/datetime/NativeTimeField.d.ts +3 -1
  67. package/dist/datetime/NativeTimeField.js +3 -4
  68. package/dist/datetime/NativeTimeField.js.map +1 -1
  69. package/dist/dialog/Dialog.d.ts +3 -2
  70. package/dist/dialog/Dialog.js +4 -4
  71. package/dist/dialog/Dialog.js.map +1 -1
  72. package/dist/dialog/DialogContainer.d.ts +3 -2
  73. package/dist/dialog/DialogContainer.js +3 -4
  74. package/dist/dialog/DialogContainer.js.map +1 -1
  75. package/dist/dialog/DialogContent.d.ts +3 -2
  76. package/dist/dialog/DialogContent.js +3 -4
  77. package/dist/dialog/DialogContent.js.map +1 -1
  78. package/dist/dialog/DialogFooter.d.ts +3 -2
  79. package/dist/dialog/DialogFooter.js +3 -4
  80. package/dist/dialog/DialogFooter.js.map +1 -1
  81. package/dist/dialog/DialogHeader.d.ts +3 -1
  82. package/dist/dialog/DialogHeader.js +3 -4
  83. package/dist/dialog/DialogHeader.js.map +1 -1
  84. package/dist/dialog/DialogTitle.d.ts +3 -1
  85. package/dist/dialog/DialogTitle.js +3 -4
  86. package/dist/dialog/DialogTitle.js.map +1 -1
  87. package/dist/dialog/FixedDialog.d.ts +4 -3
  88. package/dist/dialog/FixedDialog.js +4 -4
  89. package/dist/dialog/FixedDialog.js.map +1 -1
  90. package/dist/divider/Divider.d.ts +3 -2
  91. package/dist/divider/Divider.js +3 -4
  92. package/dist/divider/Divider.js.map +1 -1
  93. package/dist/draggable/useDraggable.d.ts +3 -3
  94. package/dist/draggable/useDraggable.js.map +1 -1
  95. package/dist/draggable/utils.d.ts +1 -1
  96. package/dist/draggable/utils.js.map +1 -1
  97. package/dist/expansion-panel/ExpansionList.d.ts +3 -2
  98. package/dist/expansion-panel/ExpansionList.js +3 -4
  99. package/dist/expansion-panel/ExpansionList.js.map +1 -1
  100. package/dist/expansion-panel/ExpansionPanel.d.ts +3 -2
  101. package/dist/expansion-panel/ExpansionPanel.js +3 -4
  102. package/dist/expansion-panel/ExpansionPanel.js.map +1 -1
  103. package/dist/expansion-panel/ExpansionPanelHeader.d.ts +3 -2
  104. package/dist/expansion-panel/ExpansionPanelHeader.js +3 -4
  105. package/dist/expansion-panel/ExpansionPanelHeader.js.map +1 -1
  106. package/dist/files/FileInput.d.ts +3 -2
  107. package/dist/files/FileInput.js +3 -4
  108. package/dist/files/FileInput.js.map +1 -1
  109. package/dist/focus/useFocusContainer.d.ts +1 -1
  110. package/dist/focus/useFocusContainer.js.map +1 -1
  111. package/dist/form/Checkbox.d.ts +2 -1
  112. package/dist/form/Checkbox.js +4 -4
  113. package/dist/form/Checkbox.js.map +1 -1
  114. package/dist/form/Fieldset.d.ts +3 -2
  115. package/dist/form/Fieldset.js +3 -4
  116. package/dist/form/Fieldset.js.map +1 -1
  117. package/dist/form/Form.d.ts +3 -2
  118. package/dist/form/Form.js +3 -4
  119. package/dist/form/Form.js.map +1 -1
  120. package/dist/form/FormMessage.d.ts +8 -2
  121. package/dist/form/FormMessage.js +3 -4
  122. package/dist/form/FormMessage.js.map +1 -1
  123. package/dist/form/FormMessageContainer.d.ts +5 -4
  124. package/dist/form/FormMessageContainer.js +3 -4
  125. package/dist/form/FormMessageContainer.js.map +1 -1
  126. package/dist/form/FormMessageCounter.d.ts +3 -2
  127. package/dist/form/FormMessageCounter.js +3 -4
  128. package/dist/form/FormMessageCounter.js.map +1 -1
  129. package/dist/form/InputToggle.d.ts +3 -2
  130. package/dist/form/InputToggle.js +3 -4
  131. package/dist/form/InputToggle.js.map +1 -1
  132. package/dist/form/InputToggleIcon.d.ts +3 -2
  133. package/dist/form/InputToggleIcon.js +3 -4
  134. package/dist/form/InputToggleIcon.js.map +1 -1
  135. package/dist/form/Label.d.ts +2 -1
  136. package/dist/form/Label.js +3 -4
  137. package/dist/form/Label.js.map +1 -1
  138. package/dist/form/Legend.d.ts +3 -1
  139. package/dist/form/Legend.js +3 -4
  140. package/dist/form/Legend.js.map +1 -1
  141. package/dist/form/NativeSelect.d.ts +3 -2
  142. package/dist/form/NativeSelect.js +3 -4
  143. package/dist/form/NativeSelect.js.map +1 -1
  144. package/dist/form/OptGroup.d.ts +3 -2
  145. package/dist/form/OptGroup.js +3 -4
  146. package/dist/form/OptGroup.js.map +1 -1
  147. package/dist/form/Option.d.ts +3 -2
  148. package/dist/form/Option.js +4 -4
  149. package/dist/form/Option.js.map +1 -1
  150. package/dist/form/Password.d.ts +2 -2
  151. package/dist/form/Password.js +3 -4
  152. package/dist/form/Password.js.map +1 -1
  153. package/dist/form/Radio.d.ts +2 -1
  154. package/dist/form/Radio.js +4 -4
  155. package/dist/form/Radio.js.map +1 -1
  156. package/dist/form/ResizingTextAreaWrapper.d.ts +3 -2
  157. package/dist/form/ResizingTextAreaWrapper.js +3 -4
  158. package/dist/form/ResizingTextAreaWrapper.js.map +1 -1
  159. package/dist/form/SliderContainer.d.ts +3 -2
  160. package/dist/form/SliderContainer.js +3 -4
  161. package/dist/form/SliderContainer.js.map +1 -1
  162. package/dist/form/SliderThumb.d.ts +3 -2
  163. package/dist/form/SliderThumb.js +4 -4
  164. package/dist/form/SliderThumb.js.map +1 -1
  165. package/dist/form/SliderTrack.d.ts +3 -2
  166. package/dist/form/SliderTrack.js +3 -4
  167. package/dist/form/SliderTrack.js.map +1 -1
  168. package/dist/form/Switch.d.ts +3 -2
  169. package/dist/form/Switch.js +3 -4
  170. package/dist/form/Switch.js.map +1 -1
  171. package/dist/form/SwitchTrack.d.ts +3 -2
  172. package/dist/form/SwitchTrack.js +3 -4
  173. package/dist/form/SwitchTrack.js.map +1 -1
  174. package/dist/form/TextArea.d.ts +3 -2
  175. package/dist/form/TextArea.js +3 -4
  176. package/dist/form/TextArea.js.map +1 -1
  177. package/dist/form/TextField.d.ts +3 -2
  178. package/dist/form/TextField.js +3 -4
  179. package/dist/form/TextField.js.map +1 -1
  180. package/dist/form/TextFieldAddon.d.ts +2 -1
  181. package/dist/form/TextFieldAddon.js +3 -4
  182. package/dist/form/TextFieldAddon.js.map +1 -1
  183. package/dist/form/TextFieldContainer.d.ts +3 -2
  184. package/dist/form/TextFieldContainer.js +3 -4
  185. package/dist/form/TextFieldContainer.js.map +1 -1
  186. package/dist/form/sliderUtils.d.ts +1 -1
  187. package/dist/form/sliderUtils.js.map +1 -1
  188. package/dist/form/types.d.ts +11 -5
  189. package/dist/form/types.js.map +1 -1
  190. package/dist/form/useCombobox.d.ts +6 -6
  191. package/dist/form/useCombobox.js.map +1 -1
  192. package/dist/form/useFormReset.d.ts +1 -1
  193. package/dist/form/useFormReset.js.map +1 -1
  194. package/dist/form/useTextField.d.ts +4 -4
  195. package/dist/form/useTextField.js.map +1 -1
  196. package/dist/hoverMode/useHoverMode.js +1 -1
  197. package/dist/hoverMode/useHoverMode.js.map +1 -1
  198. package/dist/hoverMode/useHoverModeProvider.d.ts +5 -5
  199. package/dist/hoverMode/useHoverModeProvider.js +1 -1
  200. package/dist/hoverMode/useHoverModeProvider.js.map +1 -1
  201. package/dist/icon/FontIcon.d.ts +3 -2
  202. package/dist/icon/FontIcon.js +3 -4
  203. package/dist/icon/FontIcon.js.map +1 -1
  204. package/dist/icon/IconRotator.d.ts +3 -2
  205. package/dist/icon/IconRotator.js +4 -4
  206. package/dist/icon/IconRotator.js.map +1 -1
  207. package/dist/icon/MaterialIcon.d.ts +3 -2
  208. package/dist/icon/MaterialIcon.js +3 -4
  209. package/dist/icon/MaterialIcon.js.map +1 -1
  210. package/dist/icon/MaterialSymbol.d.ts +3 -2
  211. package/dist/icon/MaterialSymbol.js +3 -4
  212. package/dist/icon/MaterialSymbol.js.map +1 -1
  213. package/dist/icon/SVGIcon.d.ts +3 -2
  214. package/dist/icon/SVGIcon.js +3 -4
  215. package/dist/icon/SVGIcon.js.map +1 -1
  216. package/dist/layout/LayoutAppBar.d.ts +3 -1
  217. package/dist/layout/LayoutAppBar.js +3 -4
  218. package/dist/layout/LayoutAppBar.js.map +1 -1
  219. package/dist/layout/LayoutNav.d.ts +3 -2
  220. package/dist/layout/LayoutNav.js +3 -4
  221. package/dist/layout/LayoutNav.js.map +1 -1
  222. package/dist/layout/LayoutWindowSplitter.d.ts +4 -2
  223. package/dist/layout/LayoutWindowSplitter.js +4 -4
  224. package/dist/layout/LayoutWindowSplitter.js.map +1 -1
  225. package/dist/layout/Main.d.ts +4 -3
  226. package/dist/layout/Main.js +3 -4
  227. package/dist/layout/Main.js.map +1 -1
  228. package/dist/link/Link.d.ts +10 -2
  229. package/dist/link/Link.js +4 -4
  230. package/dist/link/Link.js.map +1 -1
  231. package/dist/link/SkipToMainContent.d.ts +3 -2
  232. package/dist/link/SkipToMainContent.js +4 -4
  233. package/dist/link/SkipToMainContent.js.map +1 -1
  234. package/dist/list/List.d.ts +3 -2
  235. package/dist/list/List.js +3 -4
  236. package/dist/list/List.js.map +1 -1
  237. package/dist/list/ListItem.d.ts +3 -2
  238. package/dist/list/ListItem.js +3 -4
  239. package/dist/list/ListItem.js.map +1 -1
  240. package/dist/list/ListItemLink.d.ts +3 -2
  241. package/dist/list/ListItemLink.js +3 -4
  242. package/dist/list/ListItemLink.js.map +1 -1
  243. package/dist/list/ListItemText.d.ts +3 -2
  244. package/dist/list/ListItemText.js +3 -4
  245. package/dist/list/ListItemText.js.map +1 -1
  246. package/dist/list/ListSubheader.d.ts +3 -2
  247. package/dist/list/ListSubheader.js +3 -4
  248. package/dist/list/ListSubheader.js.map +1 -1
  249. package/dist/menu/DropdownMenu.js.map +1 -1
  250. package/dist/menu/Menu.d.ts +4 -2
  251. package/dist/menu/Menu.js +5 -4
  252. package/dist/menu/Menu.js.map +1 -1
  253. package/dist/menu/MenuBar.d.ts +3 -1
  254. package/dist/menu/MenuBar.js +3 -4
  255. package/dist/menu/MenuBar.js.map +1 -1
  256. package/dist/menu/MenuButton.d.ts +2 -1
  257. package/dist/menu/MenuButton.js +3 -4
  258. package/dist/menu/MenuButton.js.map +1 -1
  259. package/dist/menu/MenuItem.d.ts +3 -1
  260. package/dist/menu/MenuItem.js +3 -4
  261. package/dist/menu/MenuItem.js.map +1 -1
  262. package/dist/menu/MenuItemButton.d.ts +2 -1
  263. package/dist/menu/MenuItemButton.js +4 -4
  264. package/dist/menu/MenuItemButton.js.map +1 -1
  265. package/dist/menu/MenuItemCheckbox.d.ts +2 -1
  266. package/dist/menu/MenuItemCheckbox.js +4 -4
  267. package/dist/menu/MenuItemCheckbox.js.map +1 -1
  268. package/dist/menu/MenuItemCircularProgress.d.ts +3 -2
  269. package/dist/menu/MenuItemCircularProgress.js +3 -4
  270. package/dist/menu/MenuItemCircularProgress.js.map +1 -1
  271. package/dist/menu/MenuItemFileInput.d.ts +2 -2
  272. package/dist/menu/MenuItemFileInput.js +3 -4
  273. package/dist/menu/MenuItemFileInput.js.map +1 -1
  274. package/dist/menu/MenuItemGroup.d.ts +3 -3
  275. package/dist/menu/MenuItemGroup.js +4 -4
  276. package/dist/menu/MenuItemGroup.js.map +1 -1
  277. package/dist/menu/MenuItemInputToggle.d.ts +3 -2
  278. package/dist/menu/MenuItemInputToggle.js +3 -4
  279. package/dist/menu/MenuItemInputToggle.js.map +1 -1
  280. package/dist/menu/MenuItemRadio.d.ts +3 -1
  281. package/dist/menu/MenuItemRadio.js +4 -4
  282. package/dist/menu/MenuItemRadio.js.map +1 -1
  283. package/dist/menu/MenuItemSeparator.d.ts +3 -2
  284. package/dist/menu/MenuItemSeparator.js +3 -4
  285. package/dist/menu/MenuItemSeparator.js.map +1 -1
  286. package/dist/menu/MenuItemSwitch.d.ts +2 -1
  287. package/dist/menu/MenuItemSwitch.js +4 -4
  288. package/dist/menu/MenuItemSwitch.js.map +1 -1
  289. package/dist/menu/MenuItemTextField.d.ts +2 -2
  290. package/dist/menu/MenuItemTextField.js +3 -4
  291. package/dist/menu/MenuItemTextField.js.map +1 -1
  292. package/dist/menu/MenuVisibilityProvider.d.ts +3 -3
  293. package/dist/menu/MenuVisibilityProvider.js.map +1 -1
  294. package/dist/menu/MenuWidget.d.ts +4 -4
  295. package/dist/menu/MenuWidget.js +4 -4
  296. package/dist/menu/MenuWidget.js.map +1 -1
  297. package/dist/menu/useContextMenu.d.ts +4 -4
  298. package/dist/menu/useContextMenu.js.map +1 -1
  299. package/dist/movement/types.d.ts +5 -5
  300. package/dist/movement/types.js.map +1 -1
  301. package/dist/navigation/CollapsibleNavGroup.d.ts +2 -2
  302. package/dist/navigation/CollapsibleNavGroup.js +3 -4
  303. package/dist/navigation/CollapsibleNavGroup.js.map +1 -1
  304. package/dist/navigation/NavGroup.d.ts +3 -2
  305. package/dist/navigation/NavGroup.js +3 -4
  306. package/dist/navigation/NavGroup.js.map +1 -1
  307. package/dist/navigation/NavItem.d.ts +3 -2
  308. package/dist/navigation/NavItem.js +3 -4
  309. package/dist/navigation/NavItem.js.map +1 -1
  310. package/dist/navigation/NavItemButton.d.ts +2 -2
  311. package/dist/navigation/NavItemButton.js +3 -4
  312. package/dist/navigation/NavItemButton.js.map +1 -1
  313. package/dist/navigation/NavItemLink.d.ts +3 -2
  314. package/dist/navigation/NavItemLink.js +4 -4
  315. package/dist/navigation/NavItemLink.js.map +1 -1
  316. package/dist/navigation/NavSubheader.d.ts +2 -1
  317. package/dist/navigation/NavSubheader.js +3 -4
  318. package/dist/navigation/NavSubheader.js.map +1 -1
  319. package/dist/navigation/Navigation.d.ts +1 -1
  320. package/dist/navigation/Navigation.js +1 -1
  321. package/dist/navigation/Navigation.js.map +1 -1
  322. package/dist/navigation/types.d.ts +5 -2
  323. package/dist/navigation/types.js.map +1 -1
  324. package/dist/navigation/useActiveHeadingId.js +1 -1
  325. package/dist/navigation/useActiveHeadingId.js.map +1 -1
  326. package/dist/overlay/Overlay.d.ts +3 -2
  327. package/dist/overlay/Overlay.js +3 -4
  328. package/dist/overlay/Overlay.js.map +1 -1
  329. package/dist/positioning/useFixedPositioning.d.ts +1 -1
  330. package/dist/positioning/useFixedPositioning.js.map +1 -1
  331. package/dist/progress/CircularProgress.d.ts +2 -2
  332. package/dist/progress/CircularProgress.js +4 -4
  333. package/dist/progress/CircularProgress.js.map +1 -1
  334. package/dist/progress/LinearProgress.d.ts +2 -2
  335. package/dist/progress/LinearProgress.js +4 -4
  336. package/dist/progress/LinearProgress.js.map +1 -1
  337. package/dist/progress/types.d.ts +2 -0
  338. package/dist/progress/types.js.map +1 -1
  339. package/dist/responsive-item/ResponsiveItem.d.ts +3 -2
  340. package/dist/responsive-item/ResponsiveItem.js +3 -4
  341. package/dist/responsive-item/ResponsiveItem.js.map +1 -1
  342. package/dist/responsive-item/ResponsiveItemOverlay.d.ts +3 -2
  343. package/dist/responsive-item/ResponsiveItemOverlay.js +3 -4
  344. package/dist/responsive-item/ResponsiveItemOverlay.js.map +1 -1
  345. package/dist/segmented-button/SegmentedButton.d.ts +3 -2
  346. package/dist/segmented-button/SegmentedButton.js +3 -4
  347. package/dist/segmented-button/SegmentedButton.js.map +1 -1
  348. package/dist/segmented-button/SegmentedButtonContainer.d.ts +4 -3
  349. package/dist/segmented-button/SegmentedButtonContainer.js +4 -5
  350. package/dist/segmented-button/SegmentedButtonContainer.js.map +1 -1
  351. package/dist/sheet/Sheet.d.ts +2 -1
  352. package/dist/sheet/Sheet.js +3 -4
  353. package/dist/sheet/Sheet.js.map +1 -1
  354. package/dist/snackbar/Snackbar.d.ts +3 -2
  355. package/dist/snackbar/Snackbar.js +3 -4
  356. package/dist/snackbar/Snackbar.js.map +1 -1
  357. package/dist/snackbar/Toast.d.ts +3 -2
  358. package/dist/snackbar/Toast.js +4 -4
  359. package/dist/snackbar/Toast.js.map +1 -1
  360. package/dist/snackbar/ToastActionButton.d.ts +2 -1
  361. package/dist/snackbar/ToastActionButton.js +3 -4
  362. package/dist/snackbar/ToastActionButton.js.map +1 -1
  363. package/dist/snackbar/ToastCloseButton.d.ts +2 -1
  364. package/dist/snackbar/ToastCloseButton.js +3 -4
  365. package/dist/snackbar/ToastCloseButton.js.map +1 -1
  366. package/dist/snackbar/ToastContent.d.ts +3 -2
  367. package/dist/snackbar/ToastContent.js +4 -4
  368. package/dist/snackbar/ToastContent.js.map +1 -1
  369. package/dist/spinbutton/SpinButton.d.ts +4 -3
  370. package/dist/spinbutton/SpinButton.js +3 -4
  371. package/dist/spinbutton/SpinButton.js.map +1 -1
  372. package/dist/spinbutton/types.d.ts +1 -1
  373. package/dist/spinbutton/types.js.map +1 -1
  374. package/dist/table/StickyTableSection.d.ts +3 -2
  375. package/dist/table/StickyTableSection.js +3 -4
  376. package/dist/table/StickyTableSection.js.map +1 -1
  377. package/dist/table/Table.d.ts +3 -2
  378. package/dist/table/Table.js +4 -4
  379. package/dist/table/Table.js.map +1 -1
  380. package/dist/table/TableBody.d.ts +3 -2
  381. package/dist/table/TableBody.js +4 -4
  382. package/dist/table/TableBody.js.map +1 -1
  383. package/dist/table/TableCell.d.ts +3 -2
  384. package/dist/table/TableCell.js +3 -4
  385. package/dist/table/TableCell.js.map +1 -1
  386. package/dist/table/TableCellContent.d.ts +3 -2
  387. package/dist/table/TableCellContent.js +3 -4
  388. package/dist/table/TableCellContent.js.map +1 -1
  389. package/dist/table/TableCheckbox.d.ts +3 -2
  390. package/dist/table/TableCheckbox.js +3 -4
  391. package/dist/table/TableCheckbox.js.map +1 -1
  392. package/dist/table/TableContainer.d.ts +5 -3
  393. package/dist/table/TableContainer.js +4 -4
  394. package/dist/table/TableContainer.js.map +1 -1
  395. package/dist/table/TableContainerProvider.d.ts +1 -1
  396. package/dist/table/TableContainerProvider.js.map +1 -1
  397. package/dist/table/TableFooter.d.ts +3 -2
  398. package/dist/table/TableFooter.js +4 -5
  399. package/dist/table/TableFooter.js.map +1 -1
  400. package/dist/table/TableHeader.d.ts +3 -2
  401. package/dist/table/TableHeader.js +4 -5
  402. package/dist/table/TableHeader.js.map +1 -1
  403. package/dist/table/TableRadio.d.ts +3 -2
  404. package/dist/table/TableRadio.js +3 -4
  405. package/dist/table/TableRadio.js.map +1 -1
  406. package/dist/table/TableRow.d.ts +3 -2
  407. package/dist/table/TableRow.js +3 -4
  408. package/dist/table/TableRow.js.map +1 -1
  409. package/dist/tabs/SimpleTabPanel.d.ts +3 -2
  410. package/dist/tabs/SimpleTabPanel.js +3 -4
  411. package/dist/tabs/SimpleTabPanel.js.map +1 -1
  412. package/dist/tabs/SimpleTabPanels.d.ts +3 -2
  413. package/dist/tabs/SimpleTabPanels.js +3 -4
  414. package/dist/tabs/SimpleTabPanels.js.map +1 -1
  415. package/dist/tabs/TabList.d.ts +3 -2
  416. package/dist/tabs/TabList.js +4 -4
  417. package/dist/tabs/TabList.js.map +1 -1
  418. package/dist/tabs/TabListScrollButton.d.ts +3 -2
  419. package/dist/tabs/TabListScrollButton.js +4 -4
  420. package/dist/tabs/TabListScrollButton.js.map +1 -1
  421. package/dist/tabs/useTabList.d.ts +2 -2
  422. package/dist/tabs/useTabList.js.map +1 -1
  423. package/dist/theme/useCSSVariables.d.ts +1 -1
  424. package/dist/theme/useCSSVariables.js.map +1 -1
  425. package/dist/tooltip/Tooltip.d.ts +3 -2
  426. package/dist/tooltip/Tooltip.js +3 -4
  427. package/dist/tooltip/Tooltip.js.map +1 -1
  428. package/dist/tooltip/useTooltip.d.ts +3 -3
  429. package/dist/tooltip/useTooltip.js.map +1 -1
  430. package/dist/transition/SkeletonPlaceholder.d.ts +3 -2
  431. package/dist/transition/SkeletonPlaceholder.js +3 -4
  432. package/dist/transition/SkeletonPlaceholder.js.map +1 -1
  433. package/dist/transition/Slide.d.ts +3 -2
  434. package/dist/transition/Slide.js +3 -4
  435. package/dist/transition/Slide.js.map +1 -1
  436. package/dist/transition/SlideContainer.d.ts +3 -2
  437. package/dist/transition/SlideContainer.js +3 -4
  438. package/dist/transition/SlideContainer.js.map +1 -1
  439. package/dist/tree/TreeGroup.d.ts +2 -2
  440. package/dist/tree/TreeGroup.js +3 -4
  441. package/dist/tree/TreeGroup.js.map +1 -1
  442. package/dist/tree/TreeProvider.d.ts +2 -3
  443. package/dist/tree/TreeProvider.js.map +1 -1
  444. package/dist/tree/useTreeMovement.d.ts +6 -7
  445. package/dist/tree/useTreeMovement.js.map +1 -1
  446. package/dist/types.d.ts +1 -15
  447. package/dist/types.js.map +1 -1
  448. package/dist/typography/Mark.d.ts +3 -2
  449. package/dist/typography/Mark.js +3 -4
  450. package/dist/typography/Mark.js.map +1 -1
  451. package/dist/typography/SrOnly.d.ts +3 -2
  452. package/dist/typography/SrOnly.js +3 -4
  453. package/dist/typography/SrOnly.js.map +1 -1
  454. package/dist/typography/TextContainer.d.ts +3 -2
  455. package/dist/typography/TextContainer.js +3 -4
  456. package/dist/typography/TextContainer.js.map +1 -1
  457. package/dist/typography/Typography.d.ts +3 -2
  458. package/dist/typography/Typography.js +3 -4
  459. package/dist/typography/Typography.js.map +1 -1
  460. package/dist/useAsyncFunction.d.ts +3 -2
  461. package/dist/useAsyncFunction.js.map +1 -1
  462. package/dist/useDebouncedFunction.js +1 -1
  463. package/dist/useDebouncedFunction.js.map +1 -1
  464. package/dist/useDropzone.js +1 -1
  465. package/dist/useDropzone.js.map +1 -1
  466. package/dist/useEnsuredRef.d.ts +3 -3
  467. package/dist/useEnsuredRef.js +1 -1
  468. package/dist/useEnsuredRef.js.map +1 -1
  469. package/dist/useThrottledFunction.js +3 -3
  470. package/dist/useThrottledFunction.js.map +1 -1
  471. package/dist/useUnmounted.d.ts +2 -2
  472. package/dist/useUnmounted.js.map +1 -1
  473. package/dist/utils/applyRef.d.ts +1 -1
  474. package/dist/utils/applyRef.js.map +1 -1
  475. package/dist/window-splitter/WindowSplitter.d.ts +3 -2
  476. package/dist/window-splitter/WindowSplitter.js +3 -4
  477. package/dist/window-splitter/WindowSplitter.js.map +1 -1
  478. package/package.json +9 -9
  479. package/src/app-bar/AppBar.tsx +54 -54
  480. package/src/app-bar/AppBarTitle.tsx +29 -27
  481. package/src/autocomplete/AutocompleteChip.tsx +4 -6
  482. package/src/autocomplete/types.ts +2 -0
  483. package/src/autocomplete/utils.ts +4 -4
  484. package/src/avatar/Avatar.tsx +47 -45
  485. package/src/badge/Badge.tsx +17 -11
  486. package/src/box/Box.tsx +51 -50
  487. package/src/button/AsyncButton.tsx +125 -119
  488. package/src/button/Button.tsx +74 -73
  489. package/src/button/ButtonUnstyled.tsx +9 -9
  490. package/src/button/FloatingActionButton.tsx +9 -7
  491. package/src/button/TooltippedButton.tsx +6 -6
  492. package/src/card/Card.tsx +36 -35
  493. package/src/card/CardContent.tsx +31 -28
  494. package/src/card/CardFooter.tsx +22 -16
  495. package/src/card/CardHeader.tsx +36 -30
  496. package/src/card/CardSubtitle.tsx +8 -6
  497. package/src/card/CardTitle.tsx +26 -25
  498. package/src/card/ClickableCard.tsx +57 -54
  499. package/src/chip/Chip.tsx +122 -120
  500. package/src/datetime/NativeDateField.tsx +7 -7
  501. package/src/datetime/NativeTimeField.tsx +7 -7
  502. package/src/dialog/Dialog.tsx +156 -150
  503. package/src/dialog/DialogContainer.tsx +35 -29
  504. package/src/dialog/DialogContent.tsx +26 -19
  505. package/src/dialog/DialogFooter.tsx +22 -19
  506. package/src/dialog/DialogHeader.tsx +24 -23
  507. package/src/dialog/DialogTitle.tsx +27 -26
  508. package/src/dialog/FixedDialog.tsx +70 -69
  509. package/src/divider/Divider.tsx +32 -26
  510. package/src/draggable/useDraggable.ts +3 -6
  511. package/src/draggable/utils.ts +1 -1
  512. package/src/expansion-panel/ExpansionList.tsx +24 -19
  513. package/src/expansion-panel/ExpansionPanel.tsx +11 -6
  514. package/src/expansion-panel/ExpansionPanelHeader.tsx +9 -6
  515. package/src/files/FileInput.tsx +79 -79
  516. package/src/focus/useFocusContainer.ts +1 -1
  517. package/src/form/Checkbox.tsx +6 -6
  518. package/src/form/Fieldset.tsx +33 -28
  519. package/src/form/Form.tsx +26 -25
  520. package/src/form/FormMessage.tsx +13 -7
  521. package/src/form/FormMessageContainer.tsx +12 -9
  522. package/src/form/FormMessageCounter.tsx +8 -7
  523. package/src/form/InputToggle.tsx +105 -107
  524. package/src/form/InputToggleIcon.tsx +12 -6
  525. package/src/form/Label.tsx +40 -41
  526. package/src/form/Legend.tsx +44 -43
  527. package/src/form/NativeSelect.tsx +116 -114
  528. package/src/form/OptGroup.tsx +15 -15
  529. package/src/form/Option.tsx +123 -122
  530. package/src/form/Password.tsx +66 -67
  531. package/src/form/Radio.tsx +6 -6
  532. package/src/form/ResizingTextAreaWrapper.tsx +7 -6
  533. package/src/form/SliderContainer.tsx +35 -29
  534. package/src/form/SliderThumb.tsx +8 -6
  535. package/src/form/SliderTrack.tsx +80 -80
  536. package/src/form/Switch.tsx +80 -79
  537. package/src/form/SwitchTrack.tsx +35 -34
  538. package/src/form/TextArea.tsx +167 -165
  539. package/src/form/TextField.tsx +106 -104
  540. package/src/form/TextFieldAddon.tsx +33 -32
  541. package/src/form/TextFieldContainer.tsx +8 -6
  542. package/src/form/sliderUtils.ts +1 -1
  543. package/src/form/types.ts +15 -5
  544. package/src/form/useCombobox.ts +6 -10
  545. package/src/form/useFormReset.ts +1 -1
  546. package/src/form/useTextField.ts +4 -4
  547. package/src/hoverMode/useHoverMode.ts +1 -1
  548. package/src/hoverMode/useHoverModeProvider.ts +13 -8
  549. package/src/icon/FontIcon.tsx +32 -30
  550. package/src/icon/IconRotator.tsx +30 -28
  551. package/src/icon/MaterialIcon.tsx +36 -30
  552. package/src/icon/MaterialSymbol.tsx +50 -44
  553. package/src/icon/SVGIcon.tsx +47 -41
  554. package/src/layout/LayoutAppBar.tsx +23 -28
  555. package/src/layout/LayoutNav.tsx +68 -62
  556. package/src/layout/LayoutWindowSplitter.tsx +9 -7
  557. package/src/layout/Main.tsx +30 -29
  558. package/src/link/Link.tsx +16 -11
  559. package/src/link/SkipToMainContent.tsx +6 -6
  560. package/src/list/List.tsx +31 -29
  561. package/src/list/ListItem.tsx +126 -125
  562. package/src/list/ListItemLink.tsx +128 -126
  563. package/src/list/ListItemText.tsx +42 -37
  564. package/src/list/ListSubheader.tsx +27 -26
  565. package/src/menu/DropdownMenu.tsx +2 -2
  566. package/src/menu/Menu.tsx +327 -326
  567. package/src/menu/MenuBar.tsx +51 -50
  568. package/src/menu/MenuButton.tsx +69 -70
  569. package/src/menu/MenuItem.tsx +37 -37
  570. package/src/menu/MenuItemButton.tsx +132 -133
  571. package/src/menu/MenuItemCheckbox.tsx +6 -7
  572. package/src/menu/MenuItemCircularProgress.tsx +13 -6
  573. package/src/menu/MenuItemFileInput.tsx +4 -6
  574. package/src/menu/MenuItemGroup.tsx +18 -18
  575. package/src/menu/MenuItemInputToggle.tsx +8 -6
  576. package/src/menu/MenuItemRadio.tsx +6 -6
  577. package/src/menu/MenuItemSeparator.tsx +7 -7
  578. package/src/menu/MenuItemSwitch.tsx +6 -6
  579. package/src/menu/MenuItemTextField.tsx +5 -7
  580. package/src/menu/MenuVisibilityProvider.tsx +3 -2
  581. package/src/menu/MenuWidget.tsx +123 -119
  582. package/src/menu/useContextMenu.ts +7 -4
  583. package/src/movement/types.ts +5 -9
  584. package/src/navigation/CollapsibleNavGroup.tsx +10 -6
  585. package/src/navigation/NavGroup.tsx +18 -19
  586. package/src/navigation/NavItem.tsx +16 -11
  587. package/src/navigation/NavItemButton.tsx +69 -66
  588. package/src/navigation/NavItemLink.tsx +102 -100
  589. package/src/navigation/NavSubheader.tsx +14 -16
  590. package/src/navigation/Navigation.tsx +1 -1
  591. package/src/navigation/types.ts +13 -4
  592. package/src/navigation/useActiveHeadingId.ts +1 -1
  593. package/src/overlay/Overlay.tsx +66 -65
  594. package/src/positioning/useFixedPositioning.ts +1 -1
  595. package/src/progress/CircularProgress.tsx +6 -6
  596. package/src/progress/LinearProgress.tsx +6 -6
  597. package/src/progress/types.ts +4 -0
  598. package/src/responsive-item/ResponsiveItem.tsx +29 -28
  599. package/src/responsive-item/ResponsiveItemOverlay.tsx +9 -8
  600. package/src/segmented-button/SegmentedButton.tsx +11 -6
  601. package/src/segmented-button/SegmentedButtonContainer.tsx +14 -8
  602. package/src/sheet/Sheet.tsx +42 -43
  603. package/src/snackbar/Snackbar.tsx +44 -38
  604. package/src/snackbar/Toast.tsx +110 -109
  605. package/src/snackbar/ToastActionButton.tsx +6 -6
  606. package/src/snackbar/ToastCloseButton.tsx +4 -6
  607. package/src/snackbar/ToastContent.tsx +56 -49
  608. package/src/spinbutton/SpinButton.tsx +9 -8
  609. package/src/spinbutton/types.ts +1 -1
  610. package/src/table/StickyTableSection.tsx +8 -6
  611. package/src/table/Table.tsx +47 -41
  612. package/src/table/TableBody.tsx +46 -42
  613. package/src/table/TableCell.tsx +83 -81
  614. package/src/table/TableCellContent.tsx +11 -6
  615. package/src/table/TableCheckbox.tsx +6 -6
  616. package/src/table/TableContainer.tsx +31 -26
  617. package/src/table/TableContainerProvider.ts +1 -1
  618. package/src/table/TableFooter.tsx +7 -12
  619. package/src/table/TableHeader.tsx +15 -9
  620. package/src/table/TableRadio.tsx +59 -58
  621. package/src/table/TableRow.tsx +34 -33
  622. package/src/tabs/SimpleTabPanel.tsx +18 -13
  623. package/src/tabs/SimpleTabPanels.tsx +11 -7
  624. package/src/tabs/TabList.tsx +106 -105
  625. package/src/tabs/TabListScrollButton.tsx +9 -6
  626. package/src/tabs/useTabList.ts +2 -2
  627. package/src/theme/useCSSVariables.ts +1 -1
  628. package/src/tooltip/Tooltip.tsx +61 -61
  629. package/src/tooltip/useTooltip.ts +2 -3
  630. package/src/transition/SkeletonPlaceholder.tsx +8 -6
  631. package/src/transition/Slide.tsx +54 -48
  632. package/src/transition/SlideContainer.tsx +16 -16
  633. package/src/tree/TreeGroup.tsx +54 -55
  634. package/src/tree/TreeProvider.tsx +2 -2
  635. package/src/tree/useTreeMovement.ts +6 -6
  636. package/src/types.ts +1 -16
  637. package/src/typography/Mark.tsx +16 -11
  638. package/src/typography/SrOnly.tsx +41 -35
  639. package/src/typography/TextContainer.tsx +12 -12
  640. package/src/typography/Typography.tsx +42 -41
  641. package/src/useAsyncFunction.ts +3 -3
  642. package/src/useDebouncedFunction.ts +1 -1
  643. package/src/useDropzone.ts +1 -1
  644. package/src/useEnsuredRef.ts +3 -3
  645. package/src/useThrottledFunction.ts +3 -3
  646. package/src/useUnmounted.ts +2 -4
  647. package/src/utils/applyRef.ts +2 -2
  648. package/src/window-splitter/WindowSplitter.tsx +6 -6
@@ -28,13 +28,13 @@ export interface TabListHookReturnValue {
28
28
  };
29
29
  movementContext: KeyboardMovementContext;
30
30
  backwardProps: {
31
- ref: RefObject<HTMLDivElement>;
31
+ ref: RefObject<HTMLDivElement | null>;
32
32
  type: "back";
33
33
  vertical: boolean;
34
34
  disableTransition?: boolean;
35
35
  };
36
36
  forwardProps: {
37
- ref: RefObject<HTMLDivElement>;
37
+ ref: RefObject<HTMLDivElement | null>;
38
38
  type: "forward";
39
39
  vertical: boolean;
40
40
  disableTransition?: boolean;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tabs/useTabList.ts"],"sourcesContent":["\"use client\";\n\nimport type {\n CSSProperties,\n FocusEventHandler,\n KeyboardEventHandler,\n MouseEventHandler,\n Ref,\n RefObject,\n} from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { useAppSize } from \"../media-queries/AppSizeProvider.js\";\nimport type {\n KeyboardMovementContext,\n KeyboardMovementProps,\n} from \"../movement/types.js\";\nimport { useKeyboardMovementProvider } from \"../movement/useKeyboardMovementProvider.js\";\nimport { useDir } from \"../typography/WritingDirectionProvider.js\";\nimport { useEnsuredRef } from \"../useEnsuredRef.js\";\nimport { useResizeObserver } from \"../useResizeObserver.js\";\nimport {\n type TabListActivationMode,\n type TabListScrollButtonsBehavior,\n} from \"./types.js\";\nimport { getTabRoleOnly, scrollTabIntoView } from \"./utils.js\";\n\nconst TAB_SIZE_VAR = \"--rmd-tab-size\";\nconst TAB_OFFSET_VAR = \"--rmd-tab-offset\";\n\nconst noop = (): void => {\n // do nothing\n};\n\nexport type TabWidthVar = typeof TAB_SIZE_VAR;\nexport type TabOffsetVar = typeof TAB_OFFSET_VAR;\n\nexport type IndicatorCSSProperties = CSSProperties &\n Record<TabWidthVar | TabOffsetVar, string>;\n\nexport interface TabListHookOptions {\n ref: Ref<HTMLDivElement> | undefined;\n style: CSSProperties | undefined;\n activeIndex: number;\n setActiveIndex: (nextActiveIndex: number) => void;\n scrollButtons: TabListScrollButtonsBehavior;\n activationMode: TabListActivationMode;\n vertical: boolean;\n onClick: MouseEventHandler<HTMLDivElement> | undefined;\n onFocus: FocusEventHandler<HTMLDivElement> | undefined;\n onKeyDown: KeyboardEventHandler<HTMLDivElement> | undefined;\n disableTransition: boolean;\n}\n\nexport interface TabListHookReturnValue {\n elementProps: KeyboardMovementProps<HTMLDivElement> & {\n \"aria-orientation\": \"horizontal\" | \"vertical\";\n style: CSSProperties;\n ref: Ref<HTMLDivElement>;\n onClick: MouseEventHandler<HTMLDivElement>;\n };\n movementContext: KeyboardMovementContext;\n backwardProps: {\n ref: RefObject<HTMLDivElement>;\n type: \"back\";\n vertical: boolean;\n disableTransition?: boolean;\n };\n forwardProps: {\n ref: RefObject<HTMLDivElement>;\n type: \"forward\";\n vertical: boolean;\n disableTransition?: boolean;\n };\n showScrollButtons: boolean;\n}\n\n/**\n * @internal\n */\nexport function useTabList(\n options: TabListHookOptions\n): TabListHookReturnValue {\n const {\n ref: propRef,\n style,\n activeIndex,\n scrollButtons,\n onClick = noop,\n onFocus,\n onKeyDown,\n activationMode,\n vertical,\n setActiveIndex,\n disableTransition,\n } = options;\n\n const isRTL = useDir().dir === \"rtl\";\n const { isPhone } = useAppSize();\n const isScrollObserverEnabled =\n scrollButtons === \"auto\" ||\n (scrollButtons === \"auto-tablet-or-above\" && !isPhone);\n const [autoScrollButtons, setAutoScrollButtons] = useState(false);\n const showScrollButtons =\n scrollButtons === true ||\n (scrollButtons === \"tablet-or-above\" && !isPhone) ||\n (isScrollObserverEnabled && autoScrollButtons);\n\n const [indicatorStyles, setIndicatorStyles] =\n useState<IndicatorCSSProperties>(() => {\n const tabWidth = `${100 / 3}%`;\n return {\n [TAB_SIZE_VAR]: tabWidth,\n [TAB_OFFSET_VAR]: \"0px\",\n };\n });\n\n const [nodeRef, ref] = useEnsuredRef(propRef);\n const tabListRef = useResizeObserver({\n ref,\n disabled: disableTransition && !isScrollObserverEnabled,\n disableHeight: disableTransition && !isScrollObserverEnabled && !vertical,\n disableWidth: disableTransition && !isScrollObserverEnabled && vertical,\n onUpdate: useCallback(\n (entry) => {\n // this is kind of hacky -- the styles should update when switching\n // between RTL or when the scroll buttons appear, but they aren't\n // required for any styles. Just reference them so that the hooks\n // eslint rule doesn't show a warning...\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n isRTL;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n showScrollButtons;\n\n if (isScrollObserverEnabled && nodeRef.current) {\n setAutoScrollButtons(\n nodeRef.current.scrollWidth > nodeRef.current.offsetWidth\n );\n }\n\n const activeTab = getTabRoleOnly(entry.target)[activeIndex];\n if (!activeTab || disableTransition) {\n return;\n }\n\n const size = vertical ? activeTab.offsetHeight : activeTab.offsetWidth;\n const offset = vertical ? activeTab.offsetTop : activeTab.offsetLeft;\n const cssVars: IndicatorCSSProperties = {\n [TAB_SIZE_VAR]: `${size}px`,\n [TAB_OFFSET_VAR]: `${offset}px`,\n };\n\n setIndicatorStyles((prevStyles) => {\n if (\n prevStyles &&\n prevStyles[TAB_SIZE_VAR] === cssVars[TAB_SIZE_VAR] &&\n prevStyles[TAB_OFFSET_VAR] === cssVars[TAB_OFFSET_VAR]\n ) {\n return prevStyles;\n }\n\n return cssVars;\n });\n },\n [\n activeIndex,\n disableTransition,\n isRTL,\n isScrollObserverEnabled,\n nodeRef,\n showScrollButtons,\n vertical,\n ]\n ),\n });\n const forwardRef = useRef<HTMLDivElement>(null);\n const backwardRef = useRef<HTMLDivElement>(null);\n const { movementProps, movementContext } = useKeyboardMovementProvider({\n ref: tabListRef,\n onClick(event) {\n onClick(event);\n if (event.isPropagationStopped() || !(event.target instanceof Element)) {\n return;\n }\n\n const clickedTab = event.target.closest<HTMLElement>(\"[role='tab']\");\n const tabs = getTabRoleOnly(event.currentTarget);\n const i = clickedTab ? tabs.indexOf(clickedTab) : -1;\n if (i !== -1) {\n setActiveIndex(i);\n }\n },\n onFocus,\n onKeyDown,\n onFocusChange(event) {\n const { index } = event;\n if (activationMode === \"automatic\") {\n setActiveIndex(index);\n } else if (scrollButtons) {\n scrollTabIntoView({\n activeIndex: index,\n backward: backwardRef.current,\n container: nodeRef.current,\n forward: forwardRef.current,\n vertical,\n });\n }\n },\n loopable: true,\n searchable: true,\n horizontal: !vertical,\n includeDisabled: true,\n tabIndexBehavior: \"roving\",\n getFocusableElements: getTabRoleOnly,\n });\n\n useEffect(() => {\n scrollTabIntoView({\n activeIndex,\n backward: backwardRef.current,\n container: nodeRef.current,\n forward: forwardRef.current,\n vertical,\n });\n }, [activeIndex, nodeRef, vertical]);\n\n return {\n elementProps: {\n \"aria-orientation\": vertical ? \"vertical\" : \"horizontal\",\n style: {\n ...style,\n ...(disableTransition ? undefined : indicatorStyles),\n },\n ...movementProps,\n },\n backwardProps: {\n ref: backwardRef,\n type: \"back\",\n vertical,\n disableTransition,\n },\n forwardProps: {\n ref: forwardRef,\n type: \"forward\",\n vertical,\n disableTransition,\n },\n movementContext,\n showScrollButtons,\n };\n}\n"],"names":["useCallback","useEffect","useRef","useState","useAppSize","useKeyboardMovementProvider","useDir","useEnsuredRef","useResizeObserver","getTabRoleOnly","scrollTabIntoView","TAB_SIZE_VAR","TAB_OFFSET_VAR","noop","useTabList","options","ref","propRef","style","activeIndex","scrollButtons","onClick","onFocus","onKeyDown","activationMode","vertical","setActiveIndex","disableTransition","isRTL","dir","isPhone","isScrollObserverEnabled","autoScrollButtons","setAutoScrollButtons","showScrollButtons","indicatorStyles","setIndicatorStyles","tabWidth","nodeRef","tabListRef","disabled","disableHeight","disableWidth","onUpdate","entry","current","scrollWidth","offsetWidth","activeTab","target","size","offsetHeight","offset","offsetTop","offsetLeft","cssVars","prevStyles","forwardRef","backwardRef","movementProps","movementContext","event","isPropagationStopped","Element","clickedTab","closest","tabs","currentTarget","i","indexOf","onFocusChange","index","backward","container","forward","loopable","searchable","horizontal","includeDisabled","tabIndexBehavior","getFocusableElements","elementProps","undefined","backwardProps","type","forwardProps"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/tabs/useTabList.ts"],"sourcesContent":["\"use client\";\n\nimport type {\n CSSProperties,\n FocusEventHandler,\n KeyboardEventHandler,\n MouseEventHandler,\n Ref,\n RefObject,\n} from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { useAppSize } from \"../media-queries/AppSizeProvider.js\";\nimport type {\n KeyboardMovementContext,\n KeyboardMovementProps,\n} from \"../movement/types.js\";\nimport { useKeyboardMovementProvider } from \"../movement/useKeyboardMovementProvider.js\";\nimport { useDir } from \"../typography/WritingDirectionProvider.js\";\nimport { useEnsuredRef } from \"../useEnsuredRef.js\";\nimport { useResizeObserver } from \"../useResizeObserver.js\";\nimport {\n type TabListActivationMode,\n type TabListScrollButtonsBehavior,\n} from \"./types.js\";\nimport { getTabRoleOnly, scrollTabIntoView } from \"./utils.js\";\n\nconst TAB_SIZE_VAR = \"--rmd-tab-size\";\nconst TAB_OFFSET_VAR = \"--rmd-tab-offset\";\n\nconst noop = (): void => {\n // do nothing\n};\n\nexport type TabWidthVar = typeof TAB_SIZE_VAR;\nexport type TabOffsetVar = typeof TAB_OFFSET_VAR;\n\nexport type IndicatorCSSProperties = CSSProperties &\n Record<TabWidthVar | TabOffsetVar, string>;\n\nexport interface TabListHookOptions {\n ref: Ref<HTMLDivElement> | undefined;\n style: CSSProperties | undefined;\n activeIndex: number;\n setActiveIndex: (nextActiveIndex: number) => void;\n scrollButtons: TabListScrollButtonsBehavior;\n activationMode: TabListActivationMode;\n vertical: boolean;\n onClick: MouseEventHandler<HTMLDivElement> | undefined;\n onFocus: FocusEventHandler<HTMLDivElement> | undefined;\n onKeyDown: KeyboardEventHandler<HTMLDivElement> | undefined;\n disableTransition: boolean;\n}\n\nexport interface TabListHookReturnValue {\n elementProps: KeyboardMovementProps<HTMLDivElement> & {\n \"aria-orientation\": \"horizontal\" | \"vertical\";\n style: CSSProperties;\n ref: Ref<HTMLDivElement>;\n onClick: MouseEventHandler<HTMLDivElement>;\n };\n movementContext: KeyboardMovementContext;\n backwardProps: {\n ref: RefObject<HTMLDivElement | null>;\n type: \"back\";\n vertical: boolean;\n disableTransition?: boolean;\n };\n forwardProps: {\n ref: RefObject<HTMLDivElement | null>;\n type: \"forward\";\n vertical: boolean;\n disableTransition?: boolean;\n };\n showScrollButtons: boolean;\n}\n\n/**\n * @internal\n */\nexport function useTabList(\n options: TabListHookOptions\n): TabListHookReturnValue {\n const {\n ref: propRef,\n style,\n activeIndex,\n scrollButtons,\n onClick = noop,\n onFocus,\n onKeyDown,\n activationMode,\n vertical,\n setActiveIndex,\n disableTransition,\n } = options;\n\n const isRTL = useDir().dir === \"rtl\";\n const { isPhone } = useAppSize();\n const isScrollObserverEnabled =\n scrollButtons === \"auto\" ||\n (scrollButtons === \"auto-tablet-or-above\" && !isPhone);\n const [autoScrollButtons, setAutoScrollButtons] = useState(false);\n const showScrollButtons =\n scrollButtons === true ||\n (scrollButtons === \"tablet-or-above\" && !isPhone) ||\n (isScrollObserverEnabled && autoScrollButtons);\n\n const [indicatorStyles, setIndicatorStyles] =\n useState<IndicatorCSSProperties>(() => {\n const tabWidth = `${100 / 3}%`;\n return {\n [TAB_SIZE_VAR]: tabWidth,\n [TAB_OFFSET_VAR]: \"0px\",\n };\n });\n\n const [nodeRef, ref] = useEnsuredRef(propRef);\n const tabListRef = useResizeObserver({\n ref,\n disabled: disableTransition && !isScrollObserverEnabled,\n disableHeight: disableTransition && !isScrollObserverEnabled && !vertical,\n disableWidth: disableTransition && !isScrollObserverEnabled && vertical,\n onUpdate: useCallback(\n (entry) => {\n // this is kind of hacky -- the styles should update when switching\n // between RTL or when the scroll buttons appear, but they aren't\n // required for any styles. Just reference them so that the hooks\n // eslint rule doesn't show a warning...\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n isRTL;\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n showScrollButtons;\n\n if (isScrollObserverEnabled && nodeRef.current) {\n setAutoScrollButtons(\n nodeRef.current.scrollWidth > nodeRef.current.offsetWidth\n );\n }\n\n const activeTab = getTabRoleOnly(entry.target)[activeIndex];\n if (!activeTab || disableTransition) {\n return;\n }\n\n const size = vertical ? activeTab.offsetHeight : activeTab.offsetWidth;\n const offset = vertical ? activeTab.offsetTop : activeTab.offsetLeft;\n const cssVars: IndicatorCSSProperties = {\n [TAB_SIZE_VAR]: `${size}px`,\n [TAB_OFFSET_VAR]: `${offset}px`,\n };\n\n setIndicatorStyles((prevStyles) => {\n if (\n prevStyles &&\n prevStyles[TAB_SIZE_VAR] === cssVars[TAB_SIZE_VAR] &&\n prevStyles[TAB_OFFSET_VAR] === cssVars[TAB_OFFSET_VAR]\n ) {\n return prevStyles;\n }\n\n return cssVars;\n });\n },\n [\n activeIndex,\n disableTransition,\n isRTL,\n isScrollObserverEnabled,\n nodeRef,\n showScrollButtons,\n vertical,\n ]\n ),\n });\n const forwardRef = useRef<HTMLDivElement>(null);\n const backwardRef = useRef<HTMLDivElement>(null);\n const { movementProps, movementContext } = useKeyboardMovementProvider({\n ref: tabListRef,\n onClick(event) {\n onClick(event);\n if (event.isPropagationStopped() || !(event.target instanceof Element)) {\n return;\n }\n\n const clickedTab = event.target.closest<HTMLElement>(\"[role='tab']\");\n const tabs = getTabRoleOnly(event.currentTarget);\n const i = clickedTab ? tabs.indexOf(clickedTab) : -1;\n if (i !== -1) {\n setActiveIndex(i);\n }\n },\n onFocus,\n onKeyDown,\n onFocusChange(event) {\n const { index } = event;\n if (activationMode === \"automatic\") {\n setActiveIndex(index);\n } else if (scrollButtons) {\n scrollTabIntoView({\n activeIndex: index,\n backward: backwardRef.current,\n container: nodeRef.current,\n forward: forwardRef.current,\n vertical,\n });\n }\n },\n loopable: true,\n searchable: true,\n horizontal: !vertical,\n includeDisabled: true,\n tabIndexBehavior: \"roving\",\n getFocusableElements: getTabRoleOnly,\n });\n\n useEffect(() => {\n scrollTabIntoView({\n activeIndex,\n backward: backwardRef.current,\n container: nodeRef.current,\n forward: forwardRef.current,\n vertical,\n });\n }, [activeIndex, nodeRef, vertical]);\n\n return {\n elementProps: {\n \"aria-orientation\": vertical ? \"vertical\" : \"horizontal\",\n style: {\n ...style,\n ...(disableTransition ? undefined : indicatorStyles),\n },\n ...movementProps,\n },\n backwardProps: {\n ref: backwardRef,\n type: \"back\",\n vertical,\n disableTransition,\n },\n forwardProps: {\n ref: forwardRef,\n type: \"forward\",\n vertical,\n disableTransition,\n },\n movementContext,\n showScrollButtons,\n };\n}\n"],"names":["useCallback","useEffect","useRef","useState","useAppSize","useKeyboardMovementProvider","useDir","useEnsuredRef","useResizeObserver","getTabRoleOnly","scrollTabIntoView","TAB_SIZE_VAR","TAB_OFFSET_VAR","noop","useTabList","options","ref","propRef","style","activeIndex","scrollButtons","onClick","onFocus","onKeyDown","activationMode","vertical","setActiveIndex","disableTransition","isRTL","dir","isPhone","isScrollObserverEnabled","autoScrollButtons","setAutoScrollButtons","showScrollButtons","indicatorStyles","setIndicatorStyles","tabWidth","nodeRef","tabListRef","disabled","disableHeight","disableWidth","onUpdate","entry","current","scrollWidth","offsetWidth","activeTab","target","size","offsetHeight","offset","offsetTop","offsetLeft","cssVars","prevStyles","forwardRef","backwardRef","movementProps","movementContext","event","isPropagationStopped","Element","clickedTab","closest","tabs","currentTarget","i","indexOf","onFocusChange","index","backward","container","forward","loopable","searchable","horizontal","includeDisabled","tabIndexBehavior","getFocusableElements","elementProps","undefined","backwardProps","type","forwardProps"],"mappings":"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"}
@@ -30,4 +30,4 @@ import { type CSSVariableName, type ReadonlyCSSVariableList } from "./types.js";
30
30
  *
31
31
  * @since 6.0.0
32
32
  */
33
- export declare function useCSSVariables<Name extends CSSVariableName>(variables: ReadonlyCSSVariableList<Name>, rootNode?: RefObject<HTMLElement> | HTMLElement): void;
33
+ export declare function useCSSVariables<Name extends CSSVariableName>(variables: ReadonlyCSSVariableList<Name>, rootNode?: RefObject<HTMLElement | null> | HTMLElement): void;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/theme/useCSSVariables.ts"],"sourcesContent":["\"use client\";\n\nimport { type RefObject, useEffect } from \"react\";\n\nimport { type CSSVariableName, type ReadonlyCSSVariableList } from \"./types.js\";\n\n/**\n * @example Applying Variables the root html element\n * ```ts\n * import { purple500 } from \"@react-md/core/theme/colors\";\n * import { useCSSVariables } from \"@react-md/core/theme/useCSSVariables\";\n * import { contrastColor } from \"@react-md/core/theme/utils\";\n * import { useMemo } from \"react\";\n *\n * function Example(): null {\n * // Note: You should use `useMemo` so that the custom variables are not\n * // added and removed during each render.\n * useCSSVariables(useMemo(() => {\n * return [\n * {\n * name: \"--rmd-primary-color\",\n * value: purple500,\n * },\n * {\n * name: \"--rmd-on-primary-color\",\n * value: contrastColor(purple500),\n * },\n * ];\n * }, []));\n *\n * return null;\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useCSSVariables<Name extends CSSVariableName>(\n variables: ReadonlyCSSVariableList<Name>,\n rootNode?: RefObject<HTMLElement> | HTMLElement\n): void {\n useEffect(() => {\n if (variables.length === 0) {\n return;\n }\n\n // use an iife so that hoisting doesn't cause a possible \"null\" issue for\n // the root\n const root = (() => {\n if (!rootNode) {\n return document.documentElement;\n }\n\n if (\"current\" in rootNode) {\n return rootNode.current;\n }\n\n return rootNode;\n })();\n\n if (!root) {\n return;\n }\n\n // const root = document.documentElement;\n for (const { name, value } of variables) {\n if (\n process.env.NODE_ENV !== \"production\" &&\n root.style.getPropertyValue(name)\n ) {\n const currentValue = root.style.getPropertyValue(name);\n const overwritten =\n currentValue !== value\n ? ` and will be overwritten to \"${value}\"`\n : \"\";\n // eslint-disable-next-line no-console\n console.warn(\n `The \"${name}\" css variable has already been set to \"${currentValue}\" ` +\n `on the root element${overwritten}. There might be conflicting overrides.`\n );\n }\n\n root.style.setProperty(name, `${value}`);\n }\n return () => {\n for (const { name } of variables) {\n root.style.removeProperty(name);\n }\n };\n }, [variables, rootNode]);\n}\n"],"names":["useEffect","useCSSVariables","variables","rootNode","length","root","document","documentElement","current","name","value","process","env","NODE_ENV","style","getPropertyValue","currentValue","overwritten","console","warn","setProperty","removeProperty"],"mappings":"AAAA;AAEA,SAAyBA,SAAS,QAAQ,QAAQ;AAIlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BC,GACD,OAAO,SAASC,gBACdC,SAAwC,EACxCC,QAA+C;IAE/CH,UAAU;QACR,IAAIE,UAAUE,MAAM,KAAK,GAAG;YAC1B;QACF;QAEA,yEAAyE;QACzE,WAAW;QACX,MAAMC,OAAO,AAAC,CAAA;YACZ,IAAI,CAACF,UAAU;gBACb,OAAOG,SAASC,eAAe;YACjC;YAEA,IAAI,aAAaJ,UAAU;gBACzB,OAAOA,SAASK,OAAO;YACzB;YAEA,OAAOL;QACT,CAAA;QAEA,IAAI,CAACE,MAAM;YACT;QACF;QAEA,yCAAyC;QACzC,KAAK,MAAM,EAAEI,IAAI,EAAEC,KAAK,EAAE,IAAIR,UAAW;YACvC,IACES,QAAQC,GAAG,CAACC,QAAQ,KAAK,gBACzBR,KAAKS,KAAK,CAACC,gBAAgB,CAACN,OAC5B;gBACA,MAAMO,eAAeX,KAAKS,KAAK,CAACC,gBAAgB,CAACN;gBACjD,MAAMQ,cACJD,iBAAiBN,QACb,CAAC,6BAA6B,EAAEA,MAAM,CAAC,CAAC,GACxC;gBACN,sCAAsC;gBACtCQ,QAAQC,IAAI,CACV,CAAC,KAAK,EAAEV,KAAK,wCAAwC,EAAEO,aAAa,EAAE,CAAC,GACrE,CAAC,mBAAmB,EAAEC,YAAY,uCAAuC,CAAC;YAEhF;YAEAZ,KAAKS,KAAK,CAACM,WAAW,CAACX,MAAM,GAAGC,OAAO;QACzC;QACA,OAAO;YACL,KAAK,MAAM,EAAED,IAAI,EAAE,IAAIP,UAAW;gBAChCG,KAAKS,KAAK,CAACO,cAAc,CAACZ;YAC5B;QACF;IACF,GAAG;QAACP;QAAWC;KAAS;AAC1B"}
1
+ {"version":3,"sources":["../../src/theme/useCSSVariables.ts"],"sourcesContent":["\"use client\";\n\nimport { type RefObject, useEffect } from \"react\";\n\nimport { type CSSVariableName, type ReadonlyCSSVariableList } from \"./types.js\";\n\n/**\n * @example Applying Variables the root html element\n * ```ts\n * import { purple500 } from \"@react-md/core/theme/colors\";\n * import { useCSSVariables } from \"@react-md/core/theme/useCSSVariables\";\n * import { contrastColor } from \"@react-md/core/theme/utils\";\n * import { useMemo } from \"react\";\n *\n * function Example(): null {\n * // Note: You should use `useMemo` so that the custom variables are not\n * // added and removed during each render.\n * useCSSVariables(useMemo(() => {\n * return [\n * {\n * name: \"--rmd-primary-color\",\n * value: purple500,\n * },\n * {\n * name: \"--rmd-on-primary-color\",\n * value: contrastColor(purple500),\n * },\n * ];\n * }, []));\n *\n * return null;\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useCSSVariables<Name extends CSSVariableName>(\n variables: ReadonlyCSSVariableList<Name>,\n rootNode?: RefObject<HTMLElement | null> | HTMLElement\n): void {\n useEffect(() => {\n if (variables.length === 0) {\n return;\n }\n\n // use an iife so that hoisting doesn't cause a possible \"null\" issue for\n // the root\n const root = (() => {\n if (!rootNode) {\n return document.documentElement;\n }\n\n if (\"current\" in rootNode) {\n return rootNode.current;\n }\n\n return rootNode;\n })();\n\n if (!root) {\n return;\n }\n\n // const root = document.documentElement;\n for (const { name, value } of variables) {\n if (\n process.env.NODE_ENV !== \"production\" &&\n root.style.getPropertyValue(name)\n ) {\n const currentValue = root.style.getPropertyValue(name);\n const overwritten =\n currentValue !== value\n ? ` and will be overwritten to \"${value}\"`\n : \"\";\n // eslint-disable-next-line no-console\n console.warn(\n `The \"${name}\" css variable has already been set to \"${currentValue}\" ` +\n `on the root element${overwritten}. There might be conflicting overrides.`\n );\n }\n\n root.style.setProperty(name, `${value}`);\n }\n return () => {\n for (const { name } of variables) {\n root.style.removeProperty(name);\n }\n };\n }, [variables, rootNode]);\n}\n"],"names":["useEffect","useCSSVariables","variables","rootNode","length","root","document","documentElement","current","name","value","process","env","NODE_ENV","style","getPropertyValue","currentValue","overwritten","console","warn","setProperty","removeProperty"],"mappings":"AAAA;AAEA,SAAyBA,SAAS,QAAQ,QAAQ;AAIlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BC,GACD,OAAO,SAASC,gBACdC,SAAwC,EACxCC,QAAsD;IAEtDH,UAAU;QACR,IAAIE,UAAUE,MAAM,KAAK,GAAG;YAC1B;QACF;QAEA,yEAAyE;QACzE,WAAW;QACX,MAAMC,OAAO,AAAC,CAAA;YACZ,IAAI,CAACF,UAAU;gBACb,OAAOG,SAASC,eAAe;YACjC;YAEA,IAAI,aAAaJ,UAAU;gBACzB,OAAOA,SAASK,OAAO;YACzB;YAEA,OAAOL;QACT,CAAA;QAEA,IAAI,CAACE,MAAM;YACT;QACF;QAEA,yCAAyC;QACzC,KAAK,MAAM,EAAEI,IAAI,EAAEC,KAAK,EAAE,IAAIR,UAAW;YACvC,IACES,QAAQC,GAAG,CAACC,QAAQ,KAAK,gBACzBR,KAAKS,KAAK,CAACC,gBAAgB,CAACN,OAC5B;gBACA,MAAMO,eAAeX,KAAKS,KAAK,CAACC,gBAAgB,CAACN;gBACjD,MAAMQ,cACJD,iBAAiBN,QACb,CAAC,6BAA6B,EAAEA,MAAM,CAAC,CAAC,GACxC;gBACN,sCAAsC;gBACtCQ,QAAQC,IAAI,CACV,CAAC,KAAK,EAAEV,KAAK,wCAAwC,EAAEO,aAAa,EAAE,CAAC,GACrE,CAAC,mBAAmB,EAAEC,YAAY,uCAAuC,CAAC;YAEhF;YAEAZ,KAAKS,KAAK,CAACM,WAAW,CAACX,MAAM,GAAGC,OAAO;QACzC;QACA,OAAO;YACL,KAAK,MAAM,EAAED,IAAI,EAAE,IAAIP,UAAW;gBAChCG,KAAKS,KAAK,CAACO,cAAc,CAACZ;YAC5B;QACF;IACF,GAAG;QAACP;QAAWC;KAAS;AAC1B"}
@@ -1,4 +1,4 @@
1
- import { type HTMLAttributes } from "react";
1
+ import { type HTMLAttributes, type ReactElement, type Ref } from "react";
2
2
  import { type CSSTransitionClassNames, type CSSTransitionComponentProps, type SSRTransitionOptions, type TransitionActions, type TransitionTimeout } from "../transition/types.js";
3
3
  import { type TooltipClassNameOptions } from "./styles.js";
4
4
  /**
@@ -14,6 +14,7 @@ import { type TooltipClassNameOptions } from "./styles.js";
14
14
  * augmentation.
15
15
  */
16
16
  export interface TooltipProps extends HTMLAttributes<HTMLSpanElement>, TooltipClassNameOptions, CSSTransitionComponentProps, SSRTransitionOptions, TransitionActions {
17
+ ref?: Ref<HTMLSpanElement>;
17
18
  visible: boolean;
18
19
  /**
19
20
  * @see {@link CSSTransitionComponentProps.temporary}
@@ -61,4 +62,4 @@ export interface TooltipProps extends HTMLAttributes<HTMLSpanElement>, TooltipCl
61
62
  *
62
63
  * @see {@link https://react-md.dev/components/tooltip | Tooltip Demos}
63
64
  */
64
- export declare const Tooltip: import("react").ForwardRefExoticComponent<TooltipProps & import("react").RefAttributes<HTMLSpanElement>>;
65
+ export declare function Tooltip(props: TooltipProps): ReactElement;
@@ -1,6 +1,5 @@
1
1
  "use client";
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { forwardRef } from "react";
4
3
  import { Portal } from "../portal/Portal.js";
5
4
  import { useCSSTransition } from "../transition/useCSSTransition.js";
6
5
  import { useEnsuredId } from "../useEnsuredId.js";
@@ -35,8 +34,8 @@ import { tooltip } from "./styles.js";
35
34
  * ```
36
35
  *
37
36
  * @see {@link https://react-md.dev/components/tooltip | Tooltip Demos}
38
- */ export const Tooltip = /*#__PURE__*/ forwardRef(function Tooltip(props, nodeRef) {
39
- const { id: propId, dense, visible, children, appear, enter, exit, onEnter, onEntering, onEntered, onExit, onExiting, onExited, timeout = DEFAULT_TOOLTIP_TIMEOUT, classNames = DEFAULT_TOOLTIP_CLASSNAMES, className, position = DEFAULT_TOOLTIP_POSITION, temporary = true, exitedHidden = !temporary, textOverflow, disablePortal: propDisablePortal, ...remaining } = props;
37
+ */ export function Tooltip(props) {
38
+ const { id: propId, ref: nodeRef, dense, visible, children, appear, enter, exit, onEnter, onEntering, onEntered, onExit, onExiting, onExited, timeout = DEFAULT_TOOLTIP_TIMEOUT, classNames = DEFAULT_TOOLTIP_CLASSNAMES, className, position = DEFAULT_TOOLTIP_POSITION, temporary = true, exitedHidden = !temporary, textOverflow, disablePortal: propDisablePortal, ...remaining } = props;
40
39
  const id = useEnsuredId(propId, "tooltip");
41
40
  const { rendered, elementProps, disablePortal } = useCSSTransition({
42
41
  nodeRef,
@@ -72,6 +71,6 @@ import { tooltip } from "./styles.js";
72
71
  children: children
73
72
  })
74
73
  });
75
- });
74
+ }
76
75
 
77
76
  //# sourceMappingURL=Tooltip.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tooltip/Tooltip.tsx"],"sourcesContent":["\"use client\";\n\nimport { type HTMLAttributes, forwardRef } from \"react\";\n\nimport { Portal } from \"../portal/Portal.js\";\nimport {\n type CSSTransitionClassNames,\n type CSSTransitionComponentProps,\n type SSRTransitionOptions,\n type TransitionActions,\n type TransitionTimeout,\n} from \"../transition/types.js\";\nimport { useCSSTransition } from \"../transition/useCSSTransition.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport {\n DEFAULT_TOOLTIP_CLASSNAMES,\n DEFAULT_TOOLTIP_POSITION,\n DEFAULT_TOOLTIP_TIMEOUT,\n} from \"./constants.js\";\nimport { type TooltipClassNameOptions, tooltip } from \"./styles.js\";\n\n/**\n * The base props for the `Tooltip` component. This can be extended when\n * creating custom tooltip implementations.\n *\n * @since 2.8.0 Supports the `RenderConditionalPortalProps`\n * @since 6.0.0 The `id` prop is optional.\n * @since 6.0.0 Removed `lineWrap` for `textOverflow`\n * @since 6.0.0 No longer supports the `RenderConditionalPortalProps` other than\n * `portal` with the `disablePortal` prop.\n * @since 6.3.1 Extends TooltipClassNameOptions for CSSProperties module\n * augmentation.\n */\nexport interface TooltipProps\n extends\n HTMLAttributes<HTMLSpanElement>,\n TooltipClassNameOptions,\n CSSTransitionComponentProps,\n SSRTransitionOptions,\n TransitionActions {\n visible: boolean;\n\n /**\n * @see {@link CSSTransitionComponentProps.temporary}\n * @defaultValue `true`\n */\n temporary?: boolean;\n\n /**\n * @see {@link CSSTransitionComponentProps.timeout}\n * @defaultValue `DEFAULT_TOOLTIP_TIMEOUT`\n */\n timeout?: TransitionTimeout;\n\n /**\n * @see {@link CSSTransitionComponentProps.classNames}\n * @defaultValue `DEFAULT_TOOLTIP_CLASSNAMES`\n */\n classNames?: CSSTransitionClassNames;\n}\n\n/**\n * **Client Component**\n *\n * This is the base tooltip component that can only be used to render a tooltip\n * with an animation when the visibility changes. If this component is used, you\n * will need to manually add all the event listeners and triggers to change the\n * `visible` prop.\n *\n * @example Simple Usage\n * ```tsx\n * import { Button } from \"@react-md/core/button/Button\";\n * import { Tooltip } from \"@react-md/core/tooltip/Tooltip\";\n * import { useTooltip } from \"@react-md/core/tooltip/useTooltip\";\n *\n * function Example() {\n * const { elementProps, tooltipProps } = useTooltip();\n *\n * return (\n * <>\n * <Button {...elementProps}>Button</Button>\n * <Tooltip {...tooltipProps}>\n * Tooltip Content\n * </Tooltip>\n * </>\n * );\n * }\n * ```\n *\n * @see {@link https://react-md.dev/components/tooltip | Tooltip Demos}\n */\nexport const Tooltip = forwardRef<HTMLSpanElement, TooltipProps>(\n function Tooltip(props, nodeRef) {\n const {\n id: propId,\n dense,\n visible,\n children,\n appear,\n enter,\n exit,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n timeout = DEFAULT_TOOLTIP_TIMEOUT,\n classNames = DEFAULT_TOOLTIP_CLASSNAMES,\n className,\n position = DEFAULT_TOOLTIP_POSITION,\n temporary = true,\n exitedHidden = !temporary,\n textOverflow,\n disablePortal: propDisablePortal,\n ...remaining\n } = props;\n const id = useEnsuredId(propId, \"tooltip\");\n\n const { rendered, elementProps, disablePortal } = useCSSTransition({\n nodeRef,\n appear,\n enter,\n exit,\n transitionIn: visible,\n timeout,\n classNames,\n className: tooltip({\n dense,\n position,\n className,\n textOverflow,\n }),\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n temporary,\n exitedHidden,\n disablePortal: propDisablePortal,\n });\n\n return (\n <Portal disabled={disablePortal}>\n {rendered && (\n <span {...remaining} {...elementProps} id={id} role=\"tooltip\">\n {children}\n </span>\n )}\n </Portal>\n );\n }\n);\n"],"names":["forwardRef","Portal","useCSSTransition","useEnsuredId","DEFAULT_TOOLTIP_CLASSNAMES","DEFAULT_TOOLTIP_POSITION","DEFAULT_TOOLTIP_TIMEOUT","tooltip","Tooltip","props","nodeRef","id","propId","dense","visible","children","appear","enter","exit","onEnter","onEntering","onEntered","onExit","onExiting","onExited","timeout","classNames","className","position","temporary","exitedHidden","textOverflow","disablePortal","propDisablePortal","remaining","rendered","elementProps","transitionIn","disabled","span","role"],"mappings":"AAAA;;AAEA,SAA8BA,UAAU,QAAQ,QAAQ;AAExD,SAASC,MAAM,QAAQ,sBAAsB;AAQ7C,SAASC,gBAAgB,QAAQ,oCAAoC;AACrE,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SACEC,0BAA0B,EAC1BC,wBAAwB,EACxBC,uBAAuB,QAClB,iBAAiB;AACxB,SAAuCC,OAAO,QAAQ,cAAc;AA0CpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BC,GACD,OAAO,MAAMC,wBAAUR,WACrB,SAASQ,QAAQC,KAAK,EAAEC,OAAO;IAC7B,MAAM,EACJC,IAAIC,MAAM,EACVC,KAAK,EACLC,OAAO,EACPC,QAAQ,EACRC,MAAM,EACNC,KAAK,EACLC,IAAI,EACJC,OAAO,EACPC,UAAU,EACVC,SAAS,EACTC,MAAM,EACNC,SAAS,EACTC,QAAQ,EACRC,UAAUnB,uBAAuB,EACjCoB,aAAatB,0BAA0B,EACvCuB,SAAS,EACTC,WAAWvB,wBAAwB,EACnCwB,YAAY,IAAI,EAChBC,eAAe,CAACD,SAAS,EACzBE,YAAY,EACZC,eAAeC,iBAAiB,EAChC,GAAGC,WACJ,GAAGzB;IACJ,MAAME,KAAKR,aAAaS,QAAQ;IAEhC,MAAM,EAAEuB,QAAQ,EAAEC,YAAY,EAAEJ,aAAa,EAAE,GAAG9B,iBAAiB;QACjEQ;QACAM;QACAC;QACAC;QACAmB,cAAcvB;QACdW;QACAC;QACAC,WAAWpB,QAAQ;YACjBM;YACAe;YACAD;YACAI;QACF;QACAZ;QACAC;QACAC;QACAC;QACAC;QACAC;QACAK;QACAC;QACAE,eAAeC;IACjB;IAEA,qBACE,KAAChC;QAAOqC,UAAUN;kBACfG,0BACC,KAACI;YAAM,GAAGL,SAAS;YAAG,GAAGE,YAAY;YAAEzB,IAAIA;YAAI6B,MAAK;sBACjDzB;;;AAKX,GACA"}
1
+ {"version":3,"sources":["../../src/tooltip/Tooltip.tsx"],"sourcesContent":["\"use client\";\n\nimport { type HTMLAttributes, type ReactElement, type Ref } from \"react\";\n\nimport { Portal } from \"../portal/Portal.js\";\nimport {\n type CSSTransitionClassNames,\n type CSSTransitionComponentProps,\n type SSRTransitionOptions,\n type TransitionActions,\n type TransitionTimeout,\n} from \"../transition/types.js\";\nimport { useCSSTransition } from \"../transition/useCSSTransition.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport {\n DEFAULT_TOOLTIP_CLASSNAMES,\n DEFAULT_TOOLTIP_POSITION,\n DEFAULT_TOOLTIP_TIMEOUT,\n} from \"./constants.js\";\nimport { type TooltipClassNameOptions, tooltip } from \"./styles.js\";\n\n/**\n * The base props for the `Tooltip` component. This can be extended when\n * creating custom tooltip implementations.\n *\n * @since 2.8.0 Supports the `RenderConditionalPortalProps`\n * @since 6.0.0 The `id` prop is optional.\n * @since 6.0.0 Removed `lineWrap` for `textOverflow`\n * @since 6.0.0 No longer supports the `RenderConditionalPortalProps` other than\n * `portal` with the `disablePortal` prop.\n * @since 6.3.1 Extends TooltipClassNameOptions for CSSProperties module\n * augmentation.\n */\nexport interface TooltipProps\n extends\n HTMLAttributes<HTMLSpanElement>,\n TooltipClassNameOptions,\n CSSTransitionComponentProps,\n SSRTransitionOptions,\n TransitionActions {\n ref?: Ref<HTMLSpanElement>;\n visible: boolean;\n\n /**\n * @see {@link CSSTransitionComponentProps.temporary}\n * @defaultValue `true`\n */\n temporary?: boolean;\n\n /**\n * @see {@link CSSTransitionComponentProps.timeout}\n * @defaultValue `DEFAULT_TOOLTIP_TIMEOUT`\n */\n timeout?: TransitionTimeout;\n\n /**\n * @see {@link CSSTransitionComponentProps.classNames}\n * @defaultValue `DEFAULT_TOOLTIP_CLASSNAMES`\n */\n classNames?: CSSTransitionClassNames;\n}\n\n/**\n * **Client Component**\n *\n * This is the base tooltip component that can only be used to render a tooltip\n * with an animation when the visibility changes. If this component is used, you\n * will need to manually add all the event listeners and triggers to change the\n * `visible` prop.\n *\n * @example Simple Usage\n * ```tsx\n * import { Button } from \"@react-md/core/button/Button\";\n * import { Tooltip } from \"@react-md/core/tooltip/Tooltip\";\n * import { useTooltip } from \"@react-md/core/tooltip/useTooltip\";\n *\n * function Example() {\n * const { elementProps, tooltipProps } = useTooltip();\n *\n * return (\n * <>\n * <Button {...elementProps}>Button</Button>\n * <Tooltip {...tooltipProps}>\n * Tooltip Content\n * </Tooltip>\n * </>\n * );\n * }\n * ```\n *\n * @see {@link https://react-md.dev/components/tooltip | Tooltip Demos}\n */\nexport function Tooltip(props: TooltipProps): ReactElement {\n const {\n id: propId,\n ref: nodeRef,\n dense,\n visible,\n children,\n appear,\n enter,\n exit,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n timeout = DEFAULT_TOOLTIP_TIMEOUT,\n classNames = DEFAULT_TOOLTIP_CLASSNAMES,\n className,\n position = DEFAULT_TOOLTIP_POSITION,\n temporary = true,\n exitedHidden = !temporary,\n textOverflow,\n disablePortal: propDisablePortal,\n ...remaining\n } = props;\n const id = useEnsuredId(propId, \"tooltip\");\n\n const { rendered, elementProps, disablePortal } = useCSSTransition({\n nodeRef,\n appear,\n enter,\n exit,\n transitionIn: visible,\n timeout,\n classNames,\n className: tooltip({\n dense,\n position,\n className,\n textOverflow,\n }),\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n temporary,\n exitedHidden,\n disablePortal: propDisablePortal,\n });\n\n return (\n <Portal disabled={disablePortal}>\n {rendered && (\n <span {...remaining} {...elementProps} id={id} role=\"tooltip\">\n {children}\n </span>\n )}\n </Portal>\n );\n}\n"],"names":["Portal","useCSSTransition","useEnsuredId","DEFAULT_TOOLTIP_CLASSNAMES","DEFAULT_TOOLTIP_POSITION","DEFAULT_TOOLTIP_TIMEOUT","tooltip","Tooltip","props","id","propId","ref","nodeRef","dense","visible","children","appear","enter","exit","onEnter","onEntering","onEntered","onExit","onExiting","onExited","timeout","classNames","className","position","temporary","exitedHidden","textOverflow","disablePortal","propDisablePortal","remaining","rendered","elementProps","transitionIn","disabled","span","role"],"mappings":"AAAA;;AAIA,SAASA,MAAM,QAAQ,sBAAsB;AAQ7C,SAASC,gBAAgB,QAAQ,oCAAoC;AACrE,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SACEC,0BAA0B,EAC1BC,wBAAwB,EACxBC,uBAAuB,QAClB,iBAAiB;AACxB,SAAuCC,OAAO,QAAQ,cAAc;AA2CpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BC,GACD,OAAO,SAASC,QAAQC,KAAmB;IACzC,MAAM,EACJC,IAAIC,MAAM,EACVC,KAAKC,OAAO,EACZC,KAAK,EACLC,OAAO,EACPC,QAAQ,EACRC,MAAM,EACNC,KAAK,EACLC,IAAI,EACJC,OAAO,EACPC,UAAU,EACVC,SAAS,EACTC,MAAM,EACNC,SAAS,EACTC,QAAQ,EACRC,UAAUpB,uBAAuB,EACjCqB,aAAavB,0BAA0B,EACvCwB,SAAS,EACTC,WAAWxB,wBAAwB,EACnCyB,YAAY,IAAI,EAChBC,eAAe,CAACD,SAAS,EACzBE,YAAY,EACZC,eAAeC,iBAAiB,EAChC,GAAGC,WACJ,GAAG1B;IACJ,MAAMC,KAAKP,aAAaQ,QAAQ;IAEhC,MAAM,EAAEyB,QAAQ,EAAEC,YAAY,EAAEJ,aAAa,EAAE,GAAG/B,iBAAiB;QACjEW;QACAI;QACAC;QACAC;QACAmB,cAAcvB;QACdW;QACAC;QACAC,WAAWrB,QAAQ;YACjBO;YACAe;YACAD;YACAI;QACF;QACAZ;QACAC;QACAC;QACAC;QACAC;QACAC;QACAK;QACAC;QACAE,eAAeC;IACjB;IAEA,qBACE,KAACjC;QAAOsC,UAAUN;kBACfG,0BACC,KAACI;YAAM,GAAGL,SAAS;YAAG,GAAGE,YAAY;YAAE3B,IAAIA;YAAI+B,MAAK;sBACjDzB;;;AAKX"}
@@ -1,4 +1,4 @@
1
- import { type CSSProperties, type FocusEvent, type MouseEvent, type MutableRefObject, type Ref, type RefObject, type TouchEvent } from "react";
1
+ import { type CSSProperties, type FocusEvent, type MouseEvent, type Ref, type RefObject, type TouchEvent } from "react";
2
2
  import { type ControlledHoverModeImplementation } from "../hoverMode/useHoverMode.js";
3
3
  import { type UserInteractionMode } from "../interaction/UserInteractionModeProvider.js";
4
4
  import { type SimplePosition } from "../positioning/types.js";
@@ -209,7 +209,7 @@ export interface TooltipImplementation<TooltippedElement extends HTMLElement = H
209
209
  visible: boolean;
210
210
  setVisible: UseStateSetter<boolean>;
211
211
  animatedOnce: boolean;
212
- initiatedBy: MutableRefObject<UserInteractionMode | null>;
212
+ initiatedBy: RefObject<UserInteractionMode | null>;
213
213
  elementProps: ProvidedTooltippedElementProps<TooltippedElement>;
214
214
  tooltipProps: ProvidedTooltipProps<TooltipElement>;
215
215
  /**
@@ -220,7 +220,7 @@ export interface TooltipImplementation<TooltippedElement extends HTMLElement = H
220
220
  /**
221
221
  * @since 6.0.0
222
222
  */
223
- overflowRef: RefObject<HTMLElement>;
223
+ overflowRef: RefObject<HTMLElement | null>;
224
224
  }
225
225
  /**
226
226
  * @example Simple Usage
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tooltip/useTooltip.ts"],"sourcesContent":["\"use client\";\n\nimport { cnb } from \"cnbuilder\";\nimport {\n type CSSProperties,\n type FocusEvent,\n type MouseEvent,\n type MutableRefObject,\n type Ref,\n type RefObject,\n type TouchEvent,\n useCallback,\n useEffect,\n useId,\n useRef,\n} from \"react\";\n\nimport {\n type ControlledHoverModeImplementation,\n useHoverMode,\n} from \"../hoverMode/useHoverMode.js\";\nimport {\n type UserInteractionMode,\n useUserInteractionMode,\n} from \"../interaction/UserInteractionModeProvider.js\";\nimport { type SimplePosition } from \"../positioning/types.js\";\nimport {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n type FixedPositioningOptions,\n type FixedPositioningTransitionCallbacks,\n useFixedPositioning,\n} from \"../positioning/useFixedPositioning.js\";\nimport { type UseStateSetter } from \"../types.js\";\nimport { usePageInactive } from \"../usePageInactive.js\";\nimport { parseCssLengthUnit } from \"../utils/parseCssLengthUnit.js\";\nimport { useTooltipHoverMode } from \"./TooltipHoverModeProvider.js\";\nimport {\n DEFAULT_TOOLTIP_DENSE_SPACING,\n DEFAULT_TOOLTIP_MARGIN,\n DEFAULT_TOOLTIP_POSITION,\n DEFAULT_TOOLTIP_SPACING,\n DEFAULT_TOOLTIP_THRESHOLD,\n TOOLTIP_SPACING_VAR,\n} from \"./constants.js\";\nimport {\n type TooltipPositionHookOptions,\n useTooltipPosition,\n} from \"./useTooltipPosition.js\";\nimport { getAnchor } from \"./utils.js\";\n\nconst noop = (): void => {\n // do nothing\n};\n\n/** @since 2.8.0 */\nexport interface TooltipPositioningOptions {\n style?: CSSProperties;\n\n /**\n * @see {@link FixedPositioningOptions.vwMargin}\n * @defaultValue `16`\n */\n vwMargin?: number;\n\n /**\n * @see {@link FixedPositioningOptions.vhMargin}\n * @defaultValue `16`\n */\n vhMargin?: number;\n\n /**\n * Set this to `true` to reduce the font size and padding on the tooltip and\n * the amount of spacing between the tooltipped element and the tooltip.\n *\n * @defaultValue `false`\n */\n dense?: boolean;\n\n /**\n * The amount of spacing to use between the tooltipped element and the tooltip\n * when {@link disableAutoSpacing} is `false`.\n *\n * @defaultValue `\"1.5rem`\n */\n spacing?: number | string;\n\n /**\n * The amount of spacing to use between the tooltipped element and the tooltip\n * when {@link disableAutoSpacing} is `false` and {@link dense} is `true`.\n *\n * @defaultValue `\"0.875rem`\n */\n denseSpacing?: number | string;\n\n /**\n * Set this to `true` to prevent the {@link defaultPosition} to swap to the\n * other side of the tooltipped element when it is too close to the viewport\n * edge. This will always be `true` if a {@link position} is provided.\n *\n * @defaultValue `false`\n */\n disableSwapping?: boolean;\n\n /**\n * @defaultValue `false`\n */\n disableAutoSpacing?: boolean;\n}\n\n/**\n * @since 2.8.0\n * @since 6.0.0 Removed the `TooltipTouchEventHandlers` and\n * `TooltipKeyboardEventHandlers` types, removed the need for the `onKeyDown`\n * event.\n */\nexport interface TooltippedElementEventHandlers<\n E extends HTMLElement = HTMLButtonElement,\n> {\n onBlur?: (event: FocusEvent<E>) => void;\n onFocus?: (event: FocusEvent<E>) => void;\n onMouseEnter?: (event: MouseEvent<E>) => void;\n onMouseLeave?: (event: MouseEvent<E>) => void;\n onTouchStart?: (event: TouchEvent<E>) => void;\n onTouchEnd?: (event: TouchEvent<E>) => void;\n onContextMenu?: (event: MouseEvent<E>) => void;\n}\n\n/**\n * @since 2.8.0\n * @since 6.0.0 Renamed from `TooltipHookProvidedElementProps`\n */\nexport interface ProvidedTooltippedElementProps<\n E extends HTMLElement,\n> extends Required<TooltippedElementEventHandlers<E>> {\n \"aria-describedby\": string | undefined;\n id: string;\n}\n\n/**\n * @since 2.8.0\n * @since 6.0.0 A major API change for the hover mode behavior and no longer\n * requires a `baseId`/`id` for the tooltip. Also renamed from\n * `TooltipHookOptions` to `TooltipOptions` to match other hook naming\n * conventions.\n */\nexport interface TooltipOptions<\n TooltippedElement extends HTMLElement = HTMLButtonElement,\n>\n extends\n FixedPositioningTransitionCallbacks,\n TooltippedElementEventHandlers<TooltippedElement>,\n TooltipPositioningOptions,\n TooltipPositionHookOptions {\n /**\n * @defaultValue `\"tooltip-\" + useId()`\n */\n id?: string;\n\n /**\n * An optional override for the `aria-describedby`\n */\n describedBy?: string;\n\n /**\n * Any styles to be merged with the fixed positioning styles for the tooltip.\n */\n style?: CSSProperties;\n\n /**\n * Boolean if the event handlers should no longer attempt to show a tooltip. This\n * should be set to `true` when your component might not have a tooltip associated\n * with it.\n *\n * @example Real World Example\n * ```tsx\n * // This is _almost_ the source code for the `TooltippedButton` provided by react-md\n * import { Button } from \"@react-md/core/button/Button\";\n * import { Tooltip } from \"@react-md/core/tooltip/Tooltip\";\n * import { useTooltip } from \"@react-md/core/tooltip/useTooltip\";\n * import { type ReactElement, type ReactNode } from \"react\";\n *\n * export interface TooltippedButtonProps extends ButtonProps {\n * tooltip?: ReactNode;\n * }\n *\n * export function TooltippedButton({\n * id,\n * tooltip,\n * children,\n * onBlur,\n * onFocus,\n * onMouseEnter,\n * onMouseLeave,\n * onTouchStart,\n * onTouchEnd,\n * onContextMenu,\n * ...props\n * }: TooltippedButtonProps): ReactElement {\n * const { elementProps, tooltipProps } = useTooltip({\n * id,\n * disabled: !tooltip,\n * onBlur,\n * onFocus,\n * onMouseEnter,\n * onMouseLeave,\n * onTouchStart,\n * onTouchEnd,\n * onContextMenu,\n * });\n *\n * return (\n * <>\n * <Button {...props} {...elementProps}>\n * {children}\n * </Button>\n * <Tooltip {...tooltipProps}>{tooltip}</Tooltip>\n * </>\n * );\n * }\n * ```\n *\n * @defaultValue `false`\n * @since 5.1.0\n */\n disabled?: boolean;\n\n /**\n * The amount of time (in ms) to hover an element before the tooltip becomes\n * visible.\n *\n * The default value is really the current hover timeout from the\n * `TooltipHoverModeProvider`.\n *\n * @defaultValue `1000`\n */\n hoverTimeout?: number;\n\n /**\n * The amount of time to wait before triggering the exit animation for the\n * tooltip.\n *\n * The default value is really the current leaveTimeout timeout from the\n * `TooltipHoverModeProvider`.\n *\n * @defaultValue `0`\n */\n leaveTimeout?: number;\n\n /**\n * Set this to `true` to only allow the tooltip to become visible when the\n * `event .currentTarget` or `overflowRef` has text overflow.\n *\n * @defaultValue `false`\n * @since 6.0.0\n */\n overflowOnly?: boolean;\n\n /**\n * @see {@link FixedPositioningOptions.disabled}\n * @defaultValue `false`\n */\n disableFixedPositioning?: boolean;\n}\n\n/**\n * @since 2.8.0\n * @since 6.0.0 This was renamed from `TooltipHookProvidedTooltipProps`\n */\nexport interface ProvidedTooltipProps<\n E extends HTMLElement = HTMLSpanElement,\n> extends Required<FixedPositioningTransitionCallbacks> {\n id: string;\n ref: Ref<E>;\n dense: boolean;\n style: CSSProperties | undefined;\n visible: boolean;\n position: SimplePosition;\n}\n\n/**\n * @since 2.8.0\n * @since 6.0.0 No longer returns any properties from the hover mode provider\n * because of the major API change to hover mode.. Also renamed from\n * `TooltipHookReturnValue` to `TooltipImplementation` to match other hook\n * naming conventions.\n */\nexport interface TooltipImplementation<\n TooltippedElement extends HTMLElement = HTMLButtonElement,\n TooltipElement extends HTMLElement = HTMLSpanElement,\n> extends ControlledHoverModeImplementation {\n visible: boolean;\n setVisible: UseStateSetter<boolean>;\n animatedOnce: boolean;\n initiatedBy: MutableRefObject<UserInteractionMode | null>;\n elementProps: ProvidedTooltippedElementProps<TooltippedElement>;\n tooltipProps: ProvidedTooltipProps<TooltipElement>;\n\n /**\n * This is a wrapper around the {@link setVisible} behavior that will also\n * clear any pending timeouts.\n */\n hideTooltip: () => void;\n\n /**\n * @since 6.0.0\n */\n overflowRef: RefObject<HTMLElement>;\n}\n\n/**\n * @example Simple Usage\n * ```tsx\n * import { Button } from \"@react-md/core/button/Button\";\n * import { Tooltip } from \"@react-md/core/tooltip/Tooltip\";\n * import { useTooltip } from \"@react-md/core/tooltip/useTooltip\";\n *\n * function Example() {\n * const { elementProps, tooltipProps } = useTooltip();\n *\n * return (\n * <>\n * <Button {...elementProps}>Button</Button>\n * <Tooltip {...tooltipProps}>\n * Tooltip Content\n * </Tooltip>\n * </>\n * );\n * }\n * ```\n *\n * @example Overflow-only Tooltips\n * ```tsx\n * import { cssUtils } from \"@react-md/core/cssUtils\";\n * import { Link, type LinkProps } from \"@react-md/core/link/Link\";\n * import { Tooltip } from \"@react-md/core/tooltip/Tooltip\";\n * import { useTooltip } from \"@react-md/core/tooltip/useTooltip\";\n * import { type ReactElement } from \"react\";\n *\n * function NavigationLink(props: LinkProps): ReactElement {\n * const { children, ...remaining } = props;\n *\n * // using the `overflowRef` is optional and will default to the\n * // `event.currentTarget` when `null`\n * const { overflowRef, elementProps, tooltipProps } = useOverflowTooltip({\n * // just to pass any event handlers\n * ...remaining,\n * overflowOnly: true,\n * });\n *\n * return (\n * <Link {...remaining} {...elementProps} style={{ width: \"100%\" }}>\n * <span ref={overflowRef} className={cssUtils({ textOverflow: \"ellipsis\" })}>\n * {children}\n * </span>\n * <Tooltip {...tooltipProps}>\n * {children}\n * </Tooltip>\n * </Link>\n * );\n * }\n *\n * function Example(): ReactElement {\n * return (\n * <div style={{ width: \"10rem\", overflow: \"auto\" }}>\n * <NavigationLink href=\"/\">Home</NavigationLink>\n * <NavigationLink href=\"/some-path\">\n * Super long text that will be truncated with ellipsis and\n * have a tooltip appear\n * </NavigationLink>\n * </div>\n * );\n * }\n * ```\n *\n * ## Inspecting Tooltip Styles\n *\n * Since tooltips will disappear on blur, mouseleave, etc, it is a bit hard to\n * inspect the tooltip styles. In dev mode, you can manually set the visibility\n * to `true` through the dev tools.\n * - find your tooltip implementation\n * - expand the Tooltip hook\n * - expand the HoverMode hook\n * - set the first boolean state to `true`\n *\n * The tooltip will now remain visible allowing you to find it within the\n * \"Inspector\" tab in the dev tools.\n *\n * @see {@link https://react-md.dev/components/tooltip | Tooltip Demos}\n * @since 2.8.0\n * @since 6.0.0 Uses a separate `TooltipHoverModeProvider`.\n *\n * TODO: I need to fix the tooltip for click events and history changes since\n * the mouseleave event will not be correctly bubbled if hovering a child\n * element when the click or history update happens. this causes the tooltip to\n * stay visible\n */\nexport function useTooltip<\n TooltippedElement extends HTMLElement = HTMLButtonElement,\n TooltipElement extends HTMLElement = HTMLSpanElement,\n>(\n options: TooltipOptions<TooltippedElement> = {}\n): TooltipImplementation<TooltippedElement, TooltipElement> {\n const {\n id: propId,\n style: propStyle,\n disabled = false,\n describedBy,\n dense = false,\n hoverTimeout,\n leaveTimeout,\n vwMargin = DEFAULT_TOOLTIP_MARGIN,\n vhMargin = DEFAULT_TOOLTIP_MARGIN,\n spacing = DEFAULT_TOOLTIP_SPACING,\n denseSpacing = DEFAULT_TOOLTIP_DENSE_SPACING,\n disableSwapping,\n disableAutoSpacing,\n position: determinedPosition,\n defaultPosition = DEFAULT_TOOLTIP_POSITION,\n threshold = DEFAULT_TOOLTIP_THRESHOLD,\n onBlur = noop,\n onFocus = noop,\n onMouseEnter = noop,\n onMouseLeave = noop,\n onTouchStart = noop,\n onTouchEnd = noop,\n onContextMenu = noop,\n onEnter = noop,\n onEntering,\n onEntered = noop,\n onExited,\n overflowOnly,\n disableFixedPositioning,\n } = options;\n\n const fallbackId = useId();\n const id = propId || fallbackId;\n const tooltipId = `${id}-tooltip`;\n const {\n animatedOnceRef,\n hoverTimeoutRef,\n leaveTimeoutRef,\n enableHoverMode,\n disableHoverMode,\n startDisableTimer,\n clearDisableTimer,\n } = useTooltipHoverMode();\n const {\n visible,\n setVisible,\n startShowFlow,\n startHideFlow,\n clearVisibilityTimeout,\n } = useHoverMode({\n hoverTimeout,\n hoverTimeoutRef,\n leaveTimeout,\n leaveTimeoutRef,\n enableHoverMode,\n disableHoverMode,\n startDisableTimer,\n clearDisableTimer,\n });\n const [position, updatePosition] = useTooltipPosition({\n position: determinedPosition,\n defaultPosition,\n threshold,\n });\n\n const mode = useUserInteractionMode();\n const elementRef = useRef<HTMLElement | null>(null);\n const tooltipRef = useRef<TooltipElement>(null);\n const overflowRef = useRef<HTMLElement>(null);\n const initiatedBy = useRef<UserInteractionMode | null>(null);\n const { ref, style, callbacks } = useFixedPositioning({\n nodeRef: tooltipRef,\n style: propStyle,\n fixedTo: elementRef,\n anchor: getAnchor(position),\n disableSwapping: disableSwapping ?? !!determinedPosition,\n disabled: disableFixedPositioning,\n getFixedPositionOptions() {\n let tooltipSpacing = dense ? denseSpacing : spacing;\n const tooltip = tooltipRef.current;\n if (!disableAutoSpacing && tooltip) {\n tooltipSpacing =\n globalThis\n .getComputedStyle(tooltip)\n .getPropertyValue(TOOLTIP_SPACING_VAR) || spacing;\n }\n\n const currentSpacing = parseCssLengthUnit({\n value: tooltipSpacing,\n });\n const horizontal = position === \"left\" || position === \"right\";\n\n return {\n vwMargin,\n vhMargin,\n xMargin: horizontal ? currentSpacing : undefined,\n yMargin: horizontal ? undefined : currentSpacing,\n };\n },\n onEnter(appearing) {\n onEnter(appearing);\n\n // This allows you to inspect the tooltip styles through the element\n // inspector without first hovering or focusing the tooltipped element\n // beforehand by setting the `HoverMode` hook to `true`\n if (process.env.NODE_ENV !== \"production\" && !elementRef.current) {\n elementRef.current = document.getElementById(id);\n }\n },\n onEntering,\n onEntered(appearing) {\n onEntered(appearing);\n\n animatedOnceRef.current = true;\n },\n onExited,\n });\n\n const hideTooltip = useCallback(() => {\n initiatedBy.current = null;\n disableHoverMode();\n clearVisibilityTimeout();\n setVisible(false);\n }, [clearVisibilityTimeout, disableHoverMode, setVisible]);\n\n useEffect(() => {\n if (!visible) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key === \"Escape\") {\n hideTooltip();\n }\n };\n\n globalThis.addEventListener(\"keydown\", handleKeyDown);\n window.addEventListener(\"scroll\", hideTooltip, true);\n globalThis.addEventListener(\"touchend\", hideTooltip, true);\n return () => {\n globalThis.removeEventListener(\"keydown\", handleKeyDown);\n window.removeEventListener(\"scroll\", hideTooltip, true);\n globalThis.removeEventListener(\"touchend\", hideTooltip, true);\n };\n }, [hideTooltip, visible]);\n\n const refocusFrame = useRef(0);\n const pageInactive = useRef(false);\n usePageInactive({\n disabled,\n onDisabledCleanup: hideTooltip,\n onChange(active) {\n if (active) {\n refocusFrame.current = globalThis.requestAnimationFrame(() => {\n pageInactive.current = false;\n });\n return;\n }\n\n pageInactive.current = true;\n hideTooltip();\n },\n });\n\n const isNotOverflown = (currentTarget: HTMLElement): boolean => {\n if (!overflowOnly) {\n return false;\n }\n\n const element = overflowRef.current || currentTarget;\n return !element || element.offsetWidth >= element.scrollWidth;\n };\n\n return {\n visible,\n setVisible,\n hideTooltip,\n animatedOnce: animatedOnceRef.current,\n initiatedBy,\n overflowRef,\n startShowFlow,\n startHideFlow,\n clearVisibilityTimeout,\n tooltipProps: {\n id: tooltipId,\n ref,\n dense,\n style,\n visible,\n position,\n ...callbacks,\n },\n elementProps: {\n \"aria-describedby\": cnb(visible && tooltipId, describedBy) || undefined,\n id,\n onMouseEnter(event) {\n onMouseEnter(event);\n if (\n disabled ||\n mode === \"touch\" ||\n initiatedBy.current !== null ||\n isNotOverflown(event.currentTarget)\n ) {\n return;\n }\n\n initiatedBy.current = \"mouse\";\n elementRef.current = event.currentTarget;\n updatePosition(event.currentTarget);\n startShowFlow(id);\n },\n onMouseLeave(event) {\n onMouseLeave(event);\n if (disabled || initiatedBy.current !== \"mouse\") {\n return;\n }\n\n startHideFlow();\n initiatedBy.current = null;\n },\n onBlur(event) {\n onBlur(event);\n if (disabled) {\n return;\n }\n\n initiatedBy.current = null;\n startHideFlow();\n },\n onFocus(event) {\n onFocus(event);\n // skip the focus events when the browser is re-focused if the user\n // pressed alt-tab, minimized the browser, etc\n if (\n disabled ||\n mode !== \"keyboard\" ||\n initiatedBy.current !== null ||\n pageInactive.current ||\n isNotOverflown(event.currentTarget)\n ) {\n pageInactive.current = false;\n return;\n }\n\n initiatedBy.current = \"keyboard\";\n elementRef.current = event.currentTarget;\n updatePosition(event.currentTarget);\n startShowFlow(id);\n },\n onTouchStart(event) {\n onTouchStart(event);\n if (\n disabled ||\n initiatedBy.current !== null ||\n isNotOverflown(event.currentTarget)\n ) {\n return;\n }\n\n initiatedBy.current = \"touch\";\n elementRef.current = event.currentTarget;\n updatePosition(event.currentTarget);\n startShowFlow(id);\n },\n onTouchEnd(event) {\n onTouchEnd(event);\n if (disabled) {\n return;\n }\n\n initiatedBy.current = null;\n startHideFlow();\n },\n onContextMenu(event) {\n onContextMenu(event);\n if (\n disabled ||\n initiatedBy.current !== \"touch\" ||\n isNotOverflown(event.currentTarget)\n ) {\n return;\n }\n\n event.preventDefault();\n const selection = globalThis.getSelection();\n const node = selection?.anchorNode?.parentElement;\n if (node && event.currentTarget.contains(node)) {\n selection.empty();\n }\n },\n },\n };\n}\n"],"names":["cnb","useCallback","useEffect","useId","useRef","useHoverMode","useUserInteractionMode","useFixedPositioning","usePageInactive","parseCssLengthUnit","useTooltipHoverMode","DEFAULT_TOOLTIP_DENSE_SPACING","DEFAULT_TOOLTIP_MARGIN","DEFAULT_TOOLTIP_POSITION","DEFAULT_TOOLTIP_SPACING","DEFAULT_TOOLTIP_THRESHOLD","TOOLTIP_SPACING_VAR","useTooltipPosition","getAnchor","noop","useTooltip","options","id","propId","style","propStyle","disabled","describedBy","dense","hoverTimeout","leaveTimeout","vwMargin","vhMargin","spacing","denseSpacing","disableSwapping","disableAutoSpacing","position","determinedPosition","defaultPosition","threshold","onBlur","onFocus","onMouseEnter","onMouseLeave","onTouchStart","onTouchEnd","onContextMenu","onEnter","onEntering","onEntered","onExited","overflowOnly","disableFixedPositioning","fallbackId","tooltipId","animatedOnceRef","hoverTimeoutRef","leaveTimeoutRef","enableHoverMode","disableHoverMode","startDisableTimer","clearDisableTimer","visible","setVisible","startShowFlow","startHideFlow","clearVisibilityTimeout","updatePosition","mode","elementRef","tooltipRef","overflowRef","initiatedBy","ref","callbacks","nodeRef","fixedTo","anchor","getFixedPositionOptions","tooltipSpacing","tooltip","current","globalThis","getComputedStyle","getPropertyValue","currentSpacing","value","horizontal","xMargin","undefined","yMargin","appearing","process","env","NODE_ENV","document","getElementById","hideTooltip","handleKeyDown","event","key","addEventListener","window","removeEventListener","refocusFrame","pageInactive","onDisabledCleanup","onChange","active","requestAnimationFrame","isNotOverflown","currentTarget","element","offsetWidth","scrollWidth","animatedOnce","tooltipProps","elementProps","preventDefault","selection","getSelection","node","anchorNode","parentElement","contains","empty"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/tooltip/useTooltip.ts"],"sourcesContent":["\"use client\";\n\nimport { cnb } from \"cnbuilder\";\nimport {\n type CSSProperties,\n type FocusEvent,\n type MouseEvent,\n type Ref,\n type RefObject,\n type TouchEvent,\n useCallback,\n useEffect,\n useId,\n useRef,\n} from \"react\";\n\nimport {\n type ControlledHoverModeImplementation,\n useHoverMode,\n} from \"../hoverMode/useHoverMode.js\";\nimport {\n type UserInteractionMode,\n useUserInteractionMode,\n} from \"../interaction/UserInteractionModeProvider.js\";\nimport { type SimplePosition } from \"../positioning/types.js\";\nimport {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n type FixedPositioningOptions,\n type FixedPositioningTransitionCallbacks,\n useFixedPositioning,\n} from \"../positioning/useFixedPositioning.js\";\nimport { type UseStateSetter } from \"../types.js\";\nimport { usePageInactive } from \"../usePageInactive.js\";\nimport { parseCssLengthUnit } from \"../utils/parseCssLengthUnit.js\";\nimport { useTooltipHoverMode } from \"./TooltipHoverModeProvider.js\";\nimport {\n DEFAULT_TOOLTIP_DENSE_SPACING,\n DEFAULT_TOOLTIP_MARGIN,\n DEFAULT_TOOLTIP_POSITION,\n DEFAULT_TOOLTIP_SPACING,\n DEFAULT_TOOLTIP_THRESHOLD,\n TOOLTIP_SPACING_VAR,\n} from \"./constants.js\";\nimport {\n type TooltipPositionHookOptions,\n useTooltipPosition,\n} from \"./useTooltipPosition.js\";\nimport { getAnchor } from \"./utils.js\";\n\nconst noop = (): void => {\n // do nothing\n};\n\n/** @since 2.8.0 */\nexport interface TooltipPositioningOptions {\n style?: CSSProperties;\n\n /**\n * @see {@link FixedPositioningOptions.vwMargin}\n * @defaultValue `16`\n */\n vwMargin?: number;\n\n /**\n * @see {@link FixedPositioningOptions.vhMargin}\n * @defaultValue `16`\n */\n vhMargin?: number;\n\n /**\n * Set this to `true` to reduce the font size and padding on the tooltip and\n * the amount of spacing between the tooltipped element and the tooltip.\n *\n * @defaultValue `false`\n */\n dense?: boolean;\n\n /**\n * The amount of spacing to use between the tooltipped element and the tooltip\n * when {@link disableAutoSpacing} is `false`.\n *\n * @defaultValue `\"1.5rem`\n */\n spacing?: number | string;\n\n /**\n * The amount of spacing to use between the tooltipped element and the tooltip\n * when {@link disableAutoSpacing} is `false` and {@link dense} is `true`.\n *\n * @defaultValue `\"0.875rem`\n */\n denseSpacing?: number | string;\n\n /**\n * Set this to `true` to prevent the {@link defaultPosition} to swap to the\n * other side of the tooltipped element when it is too close to the viewport\n * edge. This will always be `true` if a {@link position} is provided.\n *\n * @defaultValue `false`\n */\n disableSwapping?: boolean;\n\n /**\n * @defaultValue `false`\n */\n disableAutoSpacing?: boolean;\n}\n\n/**\n * @since 2.8.0\n * @since 6.0.0 Removed the `TooltipTouchEventHandlers` and\n * `TooltipKeyboardEventHandlers` types, removed the need for the `onKeyDown`\n * event.\n */\nexport interface TooltippedElementEventHandlers<\n E extends HTMLElement = HTMLButtonElement,\n> {\n onBlur?: (event: FocusEvent<E>) => void;\n onFocus?: (event: FocusEvent<E>) => void;\n onMouseEnter?: (event: MouseEvent<E>) => void;\n onMouseLeave?: (event: MouseEvent<E>) => void;\n onTouchStart?: (event: TouchEvent<E>) => void;\n onTouchEnd?: (event: TouchEvent<E>) => void;\n onContextMenu?: (event: MouseEvent<E>) => void;\n}\n\n/**\n * @since 2.8.0\n * @since 6.0.0 Renamed from `TooltipHookProvidedElementProps`\n */\nexport interface ProvidedTooltippedElementProps<\n E extends HTMLElement,\n> extends Required<TooltippedElementEventHandlers<E>> {\n \"aria-describedby\": string | undefined;\n id: string;\n}\n\n/**\n * @since 2.8.0\n * @since 6.0.0 A major API change for the hover mode behavior and no longer\n * requires a `baseId`/`id` for the tooltip. Also renamed from\n * `TooltipHookOptions` to `TooltipOptions` to match other hook naming\n * conventions.\n */\nexport interface TooltipOptions<\n TooltippedElement extends HTMLElement = HTMLButtonElement,\n>\n extends\n FixedPositioningTransitionCallbacks,\n TooltippedElementEventHandlers<TooltippedElement>,\n TooltipPositioningOptions,\n TooltipPositionHookOptions {\n /**\n * @defaultValue `\"tooltip-\" + useId()`\n */\n id?: string;\n\n /**\n * An optional override for the `aria-describedby`\n */\n describedBy?: string;\n\n /**\n * Any styles to be merged with the fixed positioning styles for the tooltip.\n */\n style?: CSSProperties;\n\n /**\n * Boolean if the event handlers should no longer attempt to show a tooltip. This\n * should be set to `true` when your component might not have a tooltip associated\n * with it.\n *\n * @example Real World Example\n * ```tsx\n * // This is _almost_ the source code for the `TooltippedButton` provided by react-md\n * import { Button } from \"@react-md/core/button/Button\";\n * import { Tooltip } from \"@react-md/core/tooltip/Tooltip\";\n * import { useTooltip } from \"@react-md/core/tooltip/useTooltip\";\n * import { type ReactElement, type ReactNode } from \"react\";\n *\n * export interface TooltippedButtonProps extends ButtonProps {\n * tooltip?: ReactNode;\n * }\n *\n * export function TooltippedButton({\n * id,\n * tooltip,\n * children,\n * onBlur,\n * onFocus,\n * onMouseEnter,\n * onMouseLeave,\n * onTouchStart,\n * onTouchEnd,\n * onContextMenu,\n * ...props\n * }: TooltippedButtonProps): ReactElement {\n * const { elementProps, tooltipProps } = useTooltip({\n * id,\n * disabled: !tooltip,\n * onBlur,\n * onFocus,\n * onMouseEnter,\n * onMouseLeave,\n * onTouchStart,\n * onTouchEnd,\n * onContextMenu,\n * });\n *\n * return (\n * <>\n * <Button {...props} {...elementProps}>\n * {children}\n * </Button>\n * <Tooltip {...tooltipProps}>{tooltip}</Tooltip>\n * </>\n * );\n * }\n * ```\n *\n * @defaultValue `false`\n * @since 5.1.0\n */\n disabled?: boolean;\n\n /**\n * The amount of time (in ms) to hover an element before the tooltip becomes\n * visible.\n *\n * The default value is really the current hover timeout from the\n * `TooltipHoverModeProvider`.\n *\n * @defaultValue `1000`\n */\n hoverTimeout?: number;\n\n /**\n * The amount of time to wait before triggering the exit animation for the\n * tooltip.\n *\n * The default value is really the current leaveTimeout timeout from the\n * `TooltipHoverModeProvider`.\n *\n * @defaultValue `0`\n */\n leaveTimeout?: number;\n\n /**\n * Set this to `true` to only allow the tooltip to become visible when the\n * `event .currentTarget` or `overflowRef` has text overflow.\n *\n * @defaultValue `false`\n * @since 6.0.0\n */\n overflowOnly?: boolean;\n\n /**\n * @see {@link FixedPositioningOptions.disabled}\n * @defaultValue `false`\n */\n disableFixedPositioning?: boolean;\n}\n\n/**\n * @since 2.8.0\n * @since 6.0.0 This was renamed from `TooltipHookProvidedTooltipProps`\n */\nexport interface ProvidedTooltipProps<\n E extends HTMLElement = HTMLSpanElement,\n> extends Required<FixedPositioningTransitionCallbacks> {\n id: string;\n ref: Ref<E>;\n dense: boolean;\n style: CSSProperties | undefined;\n visible: boolean;\n position: SimplePosition;\n}\n\n/**\n * @since 2.8.0\n * @since 6.0.0 No longer returns any properties from the hover mode provider\n * because of the major API change to hover mode.. Also renamed from\n * `TooltipHookReturnValue` to `TooltipImplementation` to match other hook\n * naming conventions.\n */\nexport interface TooltipImplementation<\n TooltippedElement extends HTMLElement = HTMLButtonElement,\n TooltipElement extends HTMLElement = HTMLSpanElement,\n> extends ControlledHoverModeImplementation {\n visible: boolean;\n setVisible: UseStateSetter<boolean>;\n animatedOnce: boolean;\n initiatedBy: RefObject<UserInteractionMode | null>;\n elementProps: ProvidedTooltippedElementProps<TooltippedElement>;\n tooltipProps: ProvidedTooltipProps<TooltipElement>;\n\n /**\n * This is a wrapper around the {@link setVisible} behavior that will also\n * clear any pending timeouts.\n */\n hideTooltip: () => void;\n\n /**\n * @since 6.0.0\n */\n overflowRef: RefObject<HTMLElement | null>;\n}\n\n/**\n * @example Simple Usage\n * ```tsx\n * import { Button } from \"@react-md/core/button/Button\";\n * import { Tooltip } from \"@react-md/core/tooltip/Tooltip\";\n * import { useTooltip } from \"@react-md/core/tooltip/useTooltip\";\n *\n * function Example() {\n * const { elementProps, tooltipProps } = useTooltip();\n *\n * return (\n * <>\n * <Button {...elementProps}>Button</Button>\n * <Tooltip {...tooltipProps}>\n * Tooltip Content\n * </Tooltip>\n * </>\n * );\n * }\n * ```\n *\n * @example Overflow-only Tooltips\n * ```tsx\n * import { cssUtils } from \"@react-md/core/cssUtils\";\n * import { Link, type LinkProps } from \"@react-md/core/link/Link\";\n * import { Tooltip } from \"@react-md/core/tooltip/Tooltip\";\n * import { useTooltip } from \"@react-md/core/tooltip/useTooltip\";\n * import { type ReactElement } from \"react\";\n *\n * function NavigationLink(props: LinkProps): ReactElement {\n * const { children, ...remaining } = props;\n *\n * // using the `overflowRef` is optional and will default to the\n * // `event.currentTarget` when `null`\n * const { overflowRef, elementProps, tooltipProps } = useOverflowTooltip({\n * // just to pass any event handlers\n * ...remaining,\n * overflowOnly: true,\n * });\n *\n * return (\n * <Link {...remaining} {...elementProps} style={{ width: \"100%\" }}>\n * <span ref={overflowRef} className={cssUtils({ textOverflow: \"ellipsis\" })}>\n * {children}\n * </span>\n * <Tooltip {...tooltipProps}>\n * {children}\n * </Tooltip>\n * </Link>\n * );\n * }\n *\n * function Example(): ReactElement {\n * return (\n * <div style={{ width: \"10rem\", overflow: \"auto\" }}>\n * <NavigationLink href=\"/\">Home</NavigationLink>\n * <NavigationLink href=\"/some-path\">\n * Super long text that will be truncated with ellipsis and\n * have a tooltip appear\n * </NavigationLink>\n * </div>\n * );\n * }\n * ```\n *\n * ## Inspecting Tooltip Styles\n *\n * Since tooltips will disappear on blur, mouseleave, etc, it is a bit hard to\n * inspect the tooltip styles. In dev mode, you can manually set the visibility\n * to `true` through the dev tools.\n * - find your tooltip implementation\n * - expand the Tooltip hook\n * - expand the HoverMode hook\n * - set the first boolean state to `true`\n *\n * The tooltip will now remain visible allowing you to find it within the\n * \"Inspector\" tab in the dev tools.\n *\n * @see {@link https://react-md.dev/components/tooltip | Tooltip Demos}\n * @since 2.8.0\n * @since 6.0.0 Uses a separate `TooltipHoverModeProvider`.\n *\n * TODO: I need to fix the tooltip for click events and history changes since\n * the mouseleave event will not be correctly bubbled if hovering a child\n * element when the click or history update happens. this causes the tooltip to\n * stay visible\n */\nexport function useTooltip<\n TooltippedElement extends HTMLElement = HTMLButtonElement,\n TooltipElement extends HTMLElement = HTMLSpanElement,\n>(\n options: TooltipOptions<TooltippedElement> = {}\n): TooltipImplementation<TooltippedElement, TooltipElement> {\n const {\n id: propId,\n style: propStyle,\n disabled = false,\n describedBy,\n dense = false,\n hoverTimeout,\n leaveTimeout,\n vwMargin = DEFAULT_TOOLTIP_MARGIN,\n vhMargin = DEFAULT_TOOLTIP_MARGIN,\n spacing = DEFAULT_TOOLTIP_SPACING,\n denseSpacing = DEFAULT_TOOLTIP_DENSE_SPACING,\n disableSwapping,\n disableAutoSpacing,\n position: determinedPosition,\n defaultPosition = DEFAULT_TOOLTIP_POSITION,\n threshold = DEFAULT_TOOLTIP_THRESHOLD,\n onBlur = noop,\n onFocus = noop,\n onMouseEnter = noop,\n onMouseLeave = noop,\n onTouchStart = noop,\n onTouchEnd = noop,\n onContextMenu = noop,\n onEnter = noop,\n onEntering,\n onEntered = noop,\n onExited,\n overflowOnly,\n disableFixedPositioning,\n } = options;\n\n const fallbackId = useId();\n const id = propId || fallbackId;\n const tooltipId = `${id}-tooltip`;\n const {\n animatedOnceRef,\n hoverTimeoutRef,\n leaveTimeoutRef,\n enableHoverMode,\n disableHoverMode,\n startDisableTimer,\n clearDisableTimer,\n } = useTooltipHoverMode();\n const {\n visible,\n setVisible,\n startShowFlow,\n startHideFlow,\n clearVisibilityTimeout,\n } = useHoverMode({\n hoverTimeout,\n hoverTimeoutRef,\n leaveTimeout,\n leaveTimeoutRef,\n enableHoverMode,\n disableHoverMode,\n startDisableTimer,\n clearDisableTimer,\n });\n const [position, updatePosition] = useTooltipPosition({\n position: determinedPosition,\n defaultPosition,\n threshold,\n });\n\n const mode = useUserInteractionMode();\n const elementRef = useRef<HTMLElement | null>(null);\n const tooltipRef = useRef<TooltipElement>(null);\n const overflowRef = useRef<HTMLElement>(null);\n const initiatedBy = useRef<UserInteractionMode | null>(null);\n const { ref, style, callbacks } = useFixedPositioning({\n nodeRef: tooltipRef,\n style: propStyle,\n fixedTo: elementRef,\n anchor: getAnchor(position),\n disableSwapping: disableSwapping ?? !!determinedPosition,\n disabled: disableFixedPositioning,\n getFixedPositionOptions() {\n let tooltipSpacing = dense ? denseSpacing : spacing;\n const tooltip = tooltipRef.current;\n if (!disableAutoSpacing && tooltip) {\n tooltipSpacing =\n globalThis\n .getComputedStyle(tooltip)\n .getPropertyValue(TOOLTIP_SPACING_VAR) || spacing;\n }\n\n const currentSpacing = parseCssLengthUnit({\n value: tooltipSpacing,\n });\n const horizontal = position === \"left\" || position === \"right\";\n\n return {\n vwMargin,\n vhMargin,\n xMargin: horizontal ? currentSpacing : undefined,\n yMargin: horizontal ? undefined : currentSpacing,\n };\n },\n onEnter(appearing) {\n onEnter(appearing);\n\n // This allows you to inspect the tooltip styles through the element\n // inspector without first hovering or focusing the tooltipped element\n // beforehand by setting the `HoverMode` hook to `true`\n if (process.env.NODE_ENV !== \"production\" && !elementRef.current) {\n elementRef.current = document.getElementById(id);\n }\n },\n onEntering,\n onEntered(appearing) {\n onEntered(appearing);\n\n animatedOnceRef.current = true;\n },\n onExited,\n });\n\n const hideTooltip = useCallback(() => {\n initiatedBy.current = null;\n disableHoverMode();\n clearVisibilityTimeout();\n setVisible(false);\n }, [clearVisibilityTimeout, disableHoverMode, setVisible]);\n\n useEffect(() => {\n if (!visible) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key === \"Escape\") {\n hideTooltip();\n }\n };\n\n globalThis.addEventListener(\"keydown\", handleKeyDown);\n window.addEventListener(\"scroll\", hideTooltip, true);\n globalThis.addEventListener(\"touchend\", hideTooltip, true);\n return () => {\n globalThis.removeEventListener(\"keydown\", handleKeyDown);\n window.removeEventListener(\"scroll\", hideTooltip, true);\n globalThis.removeEventListener(\"touchend\", hideTooltip, true);\n };\n }, [hideTooltip, visible]);\n\n const refocusFrame = useRef(0);\n const pageInactive = useRef(false);\n usePageInactive({\n disabled,\n onDisabledCleanup: hideTooltip,\n onChange(active) {\n if (active) {\n refocusFrame.current = globalThis.requestAnimationFrame(() => {\n pageInactive.current = false;\n });\n return;\n }\n\n pageInactive.current = true;\n hideTooltip();\n },\n });\n\n const isNotOverflown = (currentTarget: HTMLElement): boolean => {\n if (!overflowOnly) {\n return false;\n }\n\n const element = overflowRef.current || currentTarget;\n return !element || element.offsetWidth >= element.scrollWidth;\n };\n\n return {\n visible,\n setVisible,\n hideTooltip,\n animatedOnce: animatedOnceRef.current,\n initiatedBy,\n overflowRef,\n startShowFlow,\n startHideFlow,\n clearVisibilityTimeout,\n tooltipProps: {\n id: tooltipId,\n ref,\n dense,\n style,\n visible,\n position,\n ...callbacks,\n },\n elementProps: {\n \"aria-describedby\": cnb(visible && tooltipId, describedBy) || undefined,\n id,\n onMouseEnter(event) {\n onMouseEnter(event);\n if (\n disabled ||\n mode === \"touch\" ||\n initiatedBy.current !== null ||\n isNotOverflown(event.currentTarget)\n ) {\n return;\n }\n\n initiatedBy.current = \"mouse\";\n elementRef.current = event.currentTarget;\n updatePosition(event.currentTarget);\n startShowFlow(id);\n },\n onMouseLeave(event) {\n onMouseLeave(event);\n if (disabled || initiatedBy.current !== \"mouse\") {\n return;\n }\n\n startHideFlow();\n initiatedBy.current = null;\n },\n onBlur(event) {\n onBlur(event);\n if (disabled) {\n return;\n }\n\n initiatedBy.current = null;\n startHideFlow();\n },\n onFocus(event) {\n onFocus(event);\n // skip the focus events when the browser is re-focused if the user\n // pressed alt-tab, minimized the browser, etc\n if (\n disabled ||\n mode !== \"keyboard\" ||\n initiatedBy.current !== null ||\n pageInactive.current ||\n isNotOverflown(event.currentTarget)\n ) {\n pageInactive.current = false;\n return;\n }\n\n initiatedBy.current = \"keyboard\";\n elementRef.current = event.currentTarget;\n updatePosition(event.currentTarget);\n startShowFlow(id);\n },\n onTouchStart(event) {\n onTouchStart(event);\n if (\n disabled ||\n initiatedBy.current !== null ||\n isNotOverflown(event.currentTarget)\n ) {\n return;\n }\n\n initiatedBy.current = \"touch\";\n elementRef.current = event.currentTarget;\n updatePosition(event.currentTarget);\n startShowFlow(id);\n },\n onTouchEnd(event) {\n onTouchEnd(event);\n if (disabled) {\n return;\n }\n\n initiatedBy.current = null;\n startHideFlow();\n },\n onContextMenu(event) {\n onContextMenu(event);\n if (\n disabled ||\n initiatedBy.current !== \"touch\" ||\n isNotOverflown(event.currentTarget)\n ) {\n return;\n }\n\n event.preventDefault();\n const selection = globalThis.getSelection();\n const node = selection?.anchorNode?.parentElement;\n if (node && event.currentTarget.contains(node)) {\n selection.empty();\n }\n },\n },\n };\n}\n"],"names":["cnb","useCallback","useEffect","useId","useRef","useHoverMode","useUserInteractionMode","useFixedPositioning","usePageInactive","parseCssLengthUnit","useTooltipHoverMode","DEFAULT_TOOLTIP_DENSE_SPACING","DEFAULT_TOOLTIP_MARGIN","DEFAULT_TOOLTIP_POSITION","DEFAULT_TOOLTIP_SPACING","DEFAULT_TOOLTIP_THRESHOLD","TOOLTIP_SPACING_VAR","useTooltipPosition","getAnchor","noop","useTooltip","options","id","propId","style","propStyle","disabled","describedBy","dense","hoverTimeout","leaveTimeout","vwMargin","vhMargin","spacing","denseSpacing","disableSwapping","disableAutoSpacing","position","determinedPosition","defaultPosition","threshold","onBlur","onFocus","onMouseEnter","onMouseLeave","onTouchStart","onTouchEnd","onContextMenu","onEnter","onEntering","onEntered","onExited","overflowOnly","disableFixedPositioning","fallbackId","tooltipId","animatedOnceRef","hoverTimeoutRef","leaveTimeoutRef","enableHoverMode","disableHoverMode","startDisableTimer","clearDisableTimer","visible","setVisible","startShowFlow","startHideFlow","clearVisibilityTimeout","updatePosition","mode","elementRef","tooltipRef","overflowRef","initiatedBy","ref","callbacks","nodeRef","fixedTo","anchor","getFixedPositionOptions","tooltipSpacing","tooltip","current","globalThis","getComputedStyle","getPropertyValue","currentSpacing","value","horizontal","xMargin","undefined","yMargin","appearing","process","env","NODE_ENV","document","getElementById","hideTooltip","handleKeyDown","event","key","addEventListener","window","removeEventListener","refocusFrame","pageInactive","onDisabledCleanup","onChange","active","requestAnimationFrame","isNotOverflown","currentTarget","element","offsetWidth","scrollWidth","animatedOnce","tooltipProps","elementProps","preventDefault","selection","getSelection","node","anchorNode","parentElement","contains","empty"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import { type HTMLAttributes, type ReactNode } from "react";
1
+ import { type HTMLAttributes, type ReactElement, type ReactNode, type Ref } from "react";
2
2
  import { type SkeletonPlaceholderOptions } from "./useSkeletonPlaceholder.js";
3
3
  /** @since 6.0.0 */
4
4
  export interface SkeletonPlaceholderProps extends HTMLAttributes<HTMLDivElement>, SkeletonPlaceholderOptions {
5
+ ref?: Ref<HTMLDivElement>;
5
6
  /**
6
7
  * @defaultValue `!!children`
7
8
  * @see {@link SkeletonPlaceholderOptions.disabled}
@@ -114,4 +115,4 @@ export interface SkeletonPlaceholderProps extends HTMLAttributes<HTMLDivElement>
114
115
  * @see {@link https://react-md.dev/components/skeleton-placeholder | SkeletonPlaceholder Demos}
115
116
  * @since 6.0.0
116
117
  */
117
- export declare const SkeletonPlaceholder: import("react").ForwardRefExoticComponent<SkeletonPlaceholderProps & import("react").RefAttributes<HTMLDivElement>>;
118
+ export declare function SkeletonPlaceholder(props: SkeletonPlaceholderProps): ReactElement;
@@ -1,6 +1,5 @@
1
1
  "use client";
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { forwardRef } from "react";
4
3
  import { useSkeletonPlaceholder } from "./useSkeletonPlaceholder.js";
5
4
  /**
6
5
  * **Client Component**
@@ -105,8 +104,8 @@ import { useSkeletonPlaceholder } from "./useSkeletonPlaceholder.js";
105
104
  *
106
105
  * @see {@link https://react-md.dev/components/skeleton-placeholder | SkeletonPlaceholder Demos}
107
106
  * @since 6.0.0
108
- */ export const SkeletonPlaceholder = /*#__PURE__*/ forwardRef(function SkeletonPlaceholder(props, ref) {
109
- const { style, className, height, width, children, disabled = !!children, delay, minDelay, maxDelay, minPercentage, maxPercentage, ...remaining } = props;
107
+ */ export function SkeletonPlaceholder(props) {
108
+ const { ref, style, className, height, width, children, disabled = !!children, delay, minDelay, maxDelay, minPercentage, maxPercentage, ...remaining } = props;
110
109
  const skeleton = useSkeletonPlaceholder({
111
110
  disabled,
112
111
  style,
@@ -125,6 +124,6 @@ import { useSkeletonPlaceholder } from "./useSkeletonPlaceholder.js";
125
124
  ...skeleton,
126
125
  children: children
127
126
  });
128
- });
127
+ }
129
128
 
130
129
  //# sourceMappingURL=SkeletonPlaceholder.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/transition/SkeletonPlaceholder.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n forwardRef,\n} from \"react\";\n\nimport {\n type SkeletonPlaceholderOptions,\n useSkeletonPlaceholder,\n} from \"./useSkeletonPlaceholder.js\";\n\n/** @since 6.0.0 */\nexport interface SkeletonPlaceholderProps\n extends HTMLAttributes<HTMLDivElement>, SkeletonPlaceholderOptions {\n /**\n * @defaultValue `!!children`\n * @see {@link SkeletonPlaceholderOptions.disabled}\n */\n disabled?: boolean;\n\n /** @see {@link SkeletonPlaceholderOptions.disabled} for an example */\n children?: ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * @example Simple Example\n * ```tsx\n * import type { ReactElement } from \"@react\";\n * import { SkeletonPlaceholder } from \"@react-md/core/transition/SkeletonPlaceholder\";\n *\n * interface ExampleProps {\n * loading: boolean;\n * children: ReactNode;\n * }\n *\n * export default function Example({ loading, children }: ExampleProps): ReactElement {\n * if (loading) {\n * return <SkeletonPlaceholder />;\n * }\n *\n * return <>{children}</>;\n * }\n * ```\n *\n * @example Pre-rendered Layout\n * ```tsx\n * import type { ReactElement } from \"@react\";\n * import { SkeletonPlaceholder } from \"@react-md/core/transition/SkeletonPlaceholder\";\n *\n * interface Data {\n * id: string;\n * name: string;\n * createdBy: string\n * createdOn: string;\n * modifiedBy: string;\n * modifiedOn: string;\n * }\n *\n * function ShowData({\n * id,\n * name,\n * createdBy,\n * createdOn,\n * modifiedBy,\n * modifiedOn,\n * }: Partial<Data>:: ReactElement {\n * const loading =\n * !name &&\n * !createdBy &&\n * !createdOn &&\n * !modifiedBy &&\n * !modifiedOn;\n *\n * return (\n * <Box grid gridName=\"custom-class-name\">\n * <SkeletonPlaceholder disabled={!loading}>\n * {id}\n * </SkeletonPlaceholder>\n * <SkeletonPlaceholder disabled={!loading}>\n * {name}\n * </SkeletonPlaceholder>\n * <SkeletonPlaceholder disabled={!loading}>\n * {createdOn}\n * </SkeletonPlaceholder>\n * <SkeletonPlaceholder disabled={!loading}>\n * {createdBy}\n * </SkeletonPlaceholder>\n * <SkeletonPlaceholder disabled={!loading}>\n * {modifiedOn}\n * </SkeletonPlaceholder>\n * <SkeletonPlaceholder disabled={!loading}>\n * {modifiedBy}\n * </SkeletonPlaceholder>\n * </Box>\n * );\n * }\n *\n * export function Example(): ReactElement {\n * const { data } = useLoadSomeDataQuery();\n *\n * const items = useMemo(() => {\n * // if the data has been fetched, just return the data\n * if (data) {\n * return data;\n * }\n *\n * // if the data does not exist, set up a skeleton of your layout by\n * // rendering a random number of items.\n * //\n * // NOTE: This is memoized so you don't create a random length each\n * // render\n * const length = randomInt({ min: 3, max: 10 })\n * return Array.from({ length }, (_, i) => ({ id: `placeholder-${i}` }));\n * }, [data])\n *\n * return (\n * <List>\n * {items.map((item) => <ShowData {...item} />)}\n * </List>\n * );\n * }\n * ```\n *\n * @see {@link https://react-md.dev/components/skeleton-placeholder | SkeletonPlaceholder Demos}\n * @since 6.0.0\n */\nexport const SkeletonPlaceholder = forwardRef<\n HTMLDivElement,\n SkeletonPlaceholderProps\n>(function SkeletonPlaceholder(props, ref): ReactElement {\n const {\n style,\n className,\n height,\n width,\n children,\n disabled = !!children,\n delay,\n minDelay,\n maxDelay,\n minPercentage,\n maxPercentage,\n ...remaining\n } = props;\n const skeleton = useSkeletonPlaceholder({\n disabled,\n style,\n className,\n height,\n width,\n delay,\n minDelay,\n maxDelay,\n minPercentage,\n maxPercentage,\n });\n\n return (\n <div {...remaining} ref={ref} {...skeleton}>\n {children}\n </div>\n );\n});\n"],"names":["forwardRef","useSkeletonPlaceholder","SkeletonPlaceholder","props","ref","style","className","height","width","children","disabled","delay","minDelay","maxDelay","minPercentage","maxPercentage","remaining","skeleton","div"],"mappings":"AAAA;;AAEA,SAIEA,UAAU,QACL,QAAQ;AAEf,SAEEC,sBAAsB,QACjB,8BAA8B;AAerC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGC,GACD,OAAO,MAAMC,oCAAsBF,WAGjC,SAASE,oBAAoBC,KAAK,EAAEC,GAAG;IACvC,MAAM,EACJC,KAAK,EACLC,SAAS,EACTC,MAAM,EACNC,KAAK,EACLC,QAAQ,EACRC,WAAW,CAAC,CAACD,QAAQ,EACrBE,KAAK,EACLC,QAAQ,EACRC,QAAQ,EACRC,aAAa,EACbC,aAAa,EACb,GAAGC,WACJ,GAAGb;IACJ,MAAMc,WAAWhB,uBAAuB;QACtCS;QACAL;QACAC;QACAC;QACAC;QACAG;QACAC;QACAC;QACAC;QACAC;IACF;IAEA,qBACE,KAACG;QAAK,GAAGF,SAAS;QAAEZ,KAAKA;QAAM,GAAGa,QAAQ;kBACvCR;;AAGP,GAAG"}
1
+ {"version":3,"sources":["../../src/transition/SkeletonPlaceholder.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\n\nimport {\n type SkeletonPlaceholderOptions,\n useSkeletonPlaceholder,\n} from \"./useSkeletonPlaceholder.js\";\n\n/** @since 6.0.0 */\nexport interface SkeletonPlaceholderProps\n extends HTMLAttributes<HTMLDivElement>, SkeletonPlaceholderOptions {\n ref?: Ref<HTMLDivElement>;\n\n /**\n * @defaultValue `!!children`\n * @see {@link SkeletonPlaceholderOptions.disabled}\n */\n disabled?: boolean;\n\n /** @see {@link SkeletonPlaceholderOptions.disabled} for an example */\n children?: ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * @example Simple Example\n * ```tsx\n * import type { ReactElement } from \"@react\";\n * import { SkeletonPlaceholder } from \"@react-md/core/transition/SkeletonPlaceholder\";\n *\n * interface ExampleProps {\n * loading: boolean;\n * children: ReactNode;\n * }\n *\n * export default function Example({ loading, children }: ExampleProps): ReactElement {\n * if (loading) {\n * return <SkeletonPlaceholder />;\n * }\n *\n * return <>{children}</>;\n * }\n * ```\n *\n * @example Pre-rendered Layout\n * ```tsx\n * import type { ReactElement } from \"@react\";\n * import { SkeletonPlaceholder } from \"@react-md/core/transition/SkeletonPlaceholder\";\n *\n * interface Data {\n * id: string;\n * name: string;\n * createdBy: string\n * createdOn: string;\n * modifiedBy: string;\n * modifiedOn: string;\n * }\n *\n * function ShowData({\n * id,\n * name,\n * createdBy,\n * createdOn,\n * modifiedBy,\n * modifiedOn,\n * }: Partial<Data>:: ReactElement {\n * const loading =\n * !name &&\n * !createdBy &&\n * !createdOn &&\n * !modifiedBy &&\n * !modifiedOn;\n *\n * return (\n * <Box grid gridName=\"custom-class-name\">\n * <SkeletonPlaceholder disabled={!loading}>\n * {id}\n * </SkeletonPlaceholder>\n * <SkeletonPlaceholder disabled={!loading}>\n * {name}\n * </SkeletonPlaceholder>\n * <SkeletonPlaceholder disabled={!loading}>\n * {createdOn}\n * </SkeletonPlaceholder>\n * <SkeletonPlaceholder disabled={!loading}>\n * {createdBy}\n * </SkeletonPlaceholder>\n * <SkeletonPlaceholder disabled={!loading}>\n * {modifiedOn}\n * </SkeletonPlaceholder>\n * <SkeletonPlaceholder disabled={!loading}>\n * {modifiedBy}\n * </SkeletonPlaceholder>\n * </Box>\n * );\n * }\n *\n * export function Example(): ReactElement {\n * const { data } = useLoadSomeDataQuery();\n *\n * const items = useMemo(() => {\n * // if the data has been fetched, just return the data\n * if (data) {\n * return data;\n * }\n *\n * // if the data does not exist, set up a skeleton of your layout by\n * // rendering a random number of items.\n * //\n * // NOTE: This is memoized so you don't create a random length each\n * // render\n * const length = randomInt({ min: 3, max: 10 })\n * return Array.from({ length }, (_, i) => ({ id: `placeholder-${i}` }));\n * }, [data])\n *\n * return (\n * <List>\n * {items.map((item) => <ShowData {...item} />)}\n * </List>\n * );\n * }\n * ```\n *\n * @see {@link https://react-md.dev/components/skeleton-placeholder | SkeletonPlaceholder Demos}\n * @since 6.0.0\n */\nexport function SkeletonPlaceholder(\n props: SkeletonPlaceholderProps\n): ReactElement {\n const {\n ref,\n style,\n className,\n height,\n width,\n children,\n disabled = !!children,\n delay,\n minDelay,\n maxDelay,\n minPercentage,\n maxPercentage,\n ...remaining\n } = props;\n const skeleton = useSkeletonPlaceholder({\n disabled,\n style,\n className,\n height,\n width,\n delay,\n minDelay,\n maxDelay,\n minPercentage,\n maxPercentage,\n });\n\n return (\n <div {...remaining} ref={ref} {...skeleton}>\n {children}\n </div>\n );\n}\n"],"names":["useSkeletonPlaceholder","SkeletonPlaceholder","props","ref","style","className","height","width","children","disabled","delay","minDelay","maxDelay","minPercentage","maxPercentage","remaining","skeleton","div"],"mappings":"AAAA;;AASA,SAEEA,sBAAsB,QACjB,8BAA8B;AAiBrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGC,GACD,OAAO,SAASC,oBACdC,KAA+B;IAE/B,MAAM,EACJC,GAAG,EACHC,KAAK,EACLC,SAAS,EACTC,MAAM,EACNC,KAAK,EACLC,QAAQ,EACRC,WAAW,CAAC,CAACD,QAAQ,EACrBE,KAAK,EACLC,QAAQ,EACRC,QAAQ,EACRC,aAAa,EACbC,aAAa,EACb,GAAGC,WACJ,GAAGb;IACJ,MAAMc,WAAWhB,uBAAuB;QACtCS;QACAL;QACAC;QACAC;QACAC;QACAG;QACAC;QACAC;QACAC;QACAC;IACF;IAEA,qBACE,KAACG;QAAK,GAAGF,SAAS;QAAEZ,KAAKA;QAAM,GAAGa,QAAQ;kBACvCR;;AAGP"}
@@ -1,4 +1,4 @@
1
- import { type HTMLAttributes, type ReactNode } from "react";
1
+ import { type HTMLAttributes, type ReactElement, type ReactNode, type Ref } from "react";
2
2
  import { type CSSTransitionComponentProps, type TransitionActions, type TransitionTimeout } from "./types.js";
3
3
  declare module "react" {
4
4
  interface CSSProperties {
@@ -7,6 +7,7 @@ declare module "react" {
7
7
  }
8
8
  /** @since 6.0.0 */
9
9
  export interface SlideProps extends HTMLAttributes<HTMLDivElement>, CSSTransitionComponentProps, TransitionActions {
10
+ ref?: Ref<HTMLDivElement>;
10
11
  /**
11
12
  * Set this to `true` to animate this slide into view within a
12
13
  * `SlideContainer`. When this switches from `true` to `false`, it will
@@ -27,4 +28,4 @@ export interface SlideProps extends HTMLAttributes<HTMLDivElement>, CSSTransitio
27
28
  * @see {@link SlideContainer} for example usage.
28
29
  * @since 6.0.0
29
30
  */
30
- export declare const Slide: import("react").ForwardRefExoticComponent<SlideProps & import("react").RefAttributes<HTMLDivElement>>;
31
+ export declare function Slide(props: SlideProps): ReactElement | null;
@@ -1,6 +1,5 @@
1
1
  "use client";
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { forwardRef } from "react";
4
3
  import { DEFAULT_SLIDE_TRANSITION_TIMEOUT, useSlideTransition } from "./useSlideTransition.js";
5
4
  /**
6
5
  * **Client Component**
@@ -11,8 +10,8 @@ import { DEFAULT_SLIDE_TRANSITION_TIMEOUT, useSlideTransition } from "./useSlide
11
10
  * @see {@link https://react-md.dev/components/slide | Slide Demos}
12
11
  * @see {@link SlideContainer} for example usage.
13
12
  * @since 6.0.0
14
- */ export const Slide = /*#__PURE__*/ forwardRef(function Slide(props, nodeRef) {
15
- const { active, appear, enter, exit, onEnter, onEntering, onEntered, onExit, onExiting, onExited, className, children, timeout = DEFAULT_SLIDE_TRANSITION_TIMEOUT, temporary = false, exitedHidden = true, ...remaining } = props;
13
+ */ export function Slide(props) {
14
+ const { ref: nodeRef, active, appear, enter, exit, onEnter, onEntering, onEntered, onExit, onExiting, onExited, className, children, timeout = DEFAULT_SLIDE_TRANSITION_TIMEOUT, temporary = false, exitedHidden = true, ...remaining } = props;
16
15
  const { rendered, elementProps } = useSlideTransition({
17
16
  nodeRef,
18
17
  appear,
@@ -38,6 +37,6 @@ import { DEFAULT_SLIDE_TRANSITION_TIMEOUT, useSlideTransition } from "./useSlide
38
37
  ...elementProps,
39
38
  children: children
40
39
  });
41
- });
40
+ }
42
41
 
43
42
  //# sourceMappingURL=Slide.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/transition/Slide.tsx"],"sourcesContent":["\"use client\";\n\nimport { type HTMLAttributes, type ReactNode, forwardRef } from \"react\";\n\nimport {\n type CSSTransitionComponentProps,\n type TransitionActions,\n type TransitionTimeout,\n} from \"./types.js\";\nimport {\n DEFAULT_SLIDE_TRANSITION_TIMEOUT,\n useSlideTransition,\n} from \"./useSlideTransition.js\";\n\n// NOTE: Tis is in both `useSlideTransition` and `Slide` since there are no\n// reusable types between these two files.\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-slide-duration\"?: string | number;\n }\n}\n\n/** @since 6.0.0 */\nexport interface SlideProps\n extends\n HTMLAttributes<HTMLDivElement>,\n CSSTransitionComponentProps,\n TransitionActions {\n /**\n * Set this to `true` to animate this slide into view within a\n * `SlideContainer`. When this switches from `true` to `false`, it will\n * animate out.\n */\n active: boolean;\n\n /** @defaultValue {@link DEFAULT_SLIDE_TRANSITION_DURATION} */\n timeout?: TransitionTimeout;\n children: ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * A reasonable default for handling a slide transition using\n * {@link useSlideTransition}.\n *\n * @see {@link https://react-md.dev/components/slide | Slide Demos}\n * @see {@link SlideContainer} for example usage.\n * @since 6.0.0\n */\nexport const Slide = forwardRef<HTMLDivElement, SlideProps>(\n function Slide(props, nodeRef) {\n const {\n active,\n appear,\n enter,\n exit,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n className,\n children,\n timeout = DEFAULT_SLIDE_TRANSITION_TIMEOUT,\n temporary = false,\n exitedHidden = true,\n ...remaining\n } = props;\n\n const { rendered, elementProps } = useSlideTransition({\n nodeRef,\n appear,\n enter,\n exit,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n className,\n timeout,\n temporary,\n transitionIn: active,\n exitedHidden,\n });\n\n if (!rendered) {\n return null;\n }\n\n return (\n <div {...remaining} {...elementProps}>\n {children}\n </div>\n );\n }\n);\n"],"names":["forwardRef","DEFAULT_SLIDE_TRANSITION_TIMEOUT","useSlideTransition","Slide","props","nodeRef","active","appear","enter","exit","onEnter","onEntering","onEntered","onExit","onExiting","onExited","className","children","timeout","temporary","exitedHidden","remaining","rendered","elementProps","transitionIn","div"],"mappings":"AAAA;;AAEA,SAA8CA,UAAU,QAAQ,QAAQ;AAOxE,SACEC,gCAAgC,EAChCC,kBAAkB,QACb,0BAA0B;AA4BjC;;;;;;;;;CASC,GACD,OAAO,MAAMC,sBAAQH,WACnB,SAASG,MAAMC,KAAK,EAAEC,OAAO;IAC3B,MAAM,EACJC,MAAM,EACNC,MAAM,EACNC,KAAK,EACLC,IAAI,EACJC,OAAO,EACPC,UAAU,EACVC,SAAS,EACTC,MAAM,EACNC,SAAS,EACTC,QAAQ,EACRC,SAAS,EACTC,QAAQ,EACRC,UAAUjB,gCAAgC,EAC1CkB,YAAY,KAAK,EACjBC,eAAe,IAAI,EACnB,GAAGC,WACJ,GAAGjB;IAEJ,MAAM,EAAEkB,QAAQ,EAAEC,YAAY,EAAE,GAAGrB,mBAAmB;QACpDG;QACAE;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;QACAC;QACAK,cAAclB;QACdc;IACF;IAEA,IAAI,CAACE,UAAU;QACb,OAAO;IACT;IAEA,qBACE,KAACG;QAAK,GAAGJ,SAAS;QAAG,GAAGE,YAAY;kBACjCN;;AAGP,GACA"}
1
+ {"version":3,"sources":["../../src/transition/Slide.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\n\nimport {\n type CSSTransitionComponentProps,\n type TransitionActions,\n type TransitionTimeout,\n} from \"./types.js\";\nimport {\n DEFAULT_SLIDE_TRANSITION_TIMEOUT,\n useSlideTransition,\n} from \"./useSlideTransition.js\";\n\n// NOTE: Tis is in both `useSlideTransition` and `Slide` since there are no\n// reusable types between these two files.\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-slide-duration\"?: string | number;\n }\n}\n\n/** @since 6.0.0 */\nexport interface SlideProps\n extends\n HTMLAttributes<HTMLDivElement>,\n CSSTransitionComponentProps,\n TransitionActions {\n ref?: Ref<HTMLDivElement>;\n\n /**\n * Set this to `true` to animate this slide into view within a\n * `SlideContainer`. When this switches from `true` to `false`, it will\n * animate out.\n */\n active: boolean;\n\n /** @defaultValue {@link DEFAULT_SLIDE_TRANSITION_DURATION} */\n timeout?: TransitionTimeout;\n children: ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * A reasonable default for handling a slide transition using\n * {@link useSlideTransition}.\n *\n * @see {@link https://react-md.dev/components/slide | Slide Demos}\n * @see {@link SlideContainer} for example usage.\n * @since 6.0.0\n */\nexport function Slide(props: SlideProps): ReactElement | null {\n const {\n ref: nodeRef,\n active,\n appear,\n enter,\n exit,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n className,\n children,\n timeout = DEFAULT_SLIDE_TRANSITION_TIMEOUT,\n temporary = false,\n exitedHidden = true,\n ...remaining\n } = props;\n\n const { rendered, elementProps } = useSlideTransition({\n nodeRef,\n appear,\n enter,\n exit,\n onEnter,\n onEntering,\n onEntered,\n onExit,\n onExiting,\n onExited,\n className,\n timeout,\n temporary,\n transitionIn: active,\n exitedHidden,\n });\n\n if (!rendered) {\n return null;\n }\n\n return (\n <div {...remaining} {...elementProps}>\n {children}\n </div>\n );\n}\n"],"names":["DEFAULT_SLIDE_TRANSITION_TIMEOUT","useSlideTransition","Slide","props","ref","nodeRef","active","appear","enter","exit","onEnter","onEntering","onEntered","onExit","onExiting","onExited","className","children","timeout","temporary","exitedHidden","remaining","rendered","elementProps","transitionIn","div"],"mappings":"AAAA;;AAcA,SACEA,gCAAgC,EAChCC,kBAAkB,QACb,0BAA0B;AA8BjC;;;;;;;;;CASC,GACD,OAAO,SAASC,MAAMC,KAAiB;IACrC,MAAM,EACJC,KAAKC,OAAO,EACZC,MAAM,EACNC,MAAM,EACNC,KAAK,EACLC,IAAI,EACJC,OAAO,EACPC,UAAU,EACVC,SAAS,EACTC,MAAM,EACNC,SAAS,EACTC,QAAQ,EACRC,SAAS,EACTC,QAAQ,EACRC,UAAUlB,gCAAgC,EAC1CmB,YAAY,KAAK,EACjBC,eAAe,IAAI,EACnB,GAAGC,WACJ,GAAGlB;IAEJ,MAAM,EAAEmB,QAAQ,EAAEC,YAAY,EAAE,GAAGtB,mBAAmB;QACpDI;QACAE;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;QACAC;QACAK,cAAclB;QACdc;IACF;IAEA,IAAI,CAACE,UAAU;QACb,OAAO;IACT;IAEA,qBACE,KAACG;QAAK,GAAGJ,SAAS;QAAG,GAAGE,YAAY;kBACjCN;;AAGP"}
@@ -1,4 +1,4 @@
1
- import { type HTMLAttributes } from "react";
1
+ import { type HTMLAttributes, type ReactElement, type Ref } from "react";
2
2
  /**
3
3
  * @example Direction "forward"
4
4
  * ```
@@ -55,6 +55,7 @@ export interface SlideContainerClassNameOptions {
55
55
  export declare function slideContainer(options: SlideContainerClassNameOptions): string;
56
56
  /** @since 6.0.0 */
57
57
  export interface SlideContainerProps extends HTMLAttributes<HTMLDivElement>, SlideContainerClassNameOptions {
58
+ ref?: Ref<HTMLDivElement>;
58
59
  }
59
60
  /**
60
61
  * The `SlideContainer` is used to enable a slide transition when child `Slide`
@@ -107,4 +108,4 @@ export interface SlideContainerProps extends HTMLAttributes<HTMLDivElement>, Sli
107
108
  * @see {@link https://react-md.dev/components/slide | Slide Demos}
108
109
  * @since 6.0.0
109
110
  */
110
- export declare const SlideContainer: import("react").ForwardRefExoticComponent<SlideContainerProps & import("react").RefAttributes<HTMLDivElement>>;
111
+ export declare function SlideContainer(props: SlideContainerProps): ReactElement;
@@ -1,6 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cnb } from "cnbuilder";
3
- import { forwardRef } from "react";
4
3
  import { bem } from "../utils/bem.js";
5
4
  const styles = bem("rmd-slide-container");
6
5
  /**
@@ -63,8 +62,8 @@ const styles = bem("rmd-slide-container");
63
62
  *
64
63
  * @see {@link https://react-md.dev/components/slide | Slide Demos}
65
64
  * @since 6.0.0
66
- */ export const SlideContainer = /*#__PURE__*/ forwardRef(function SlideContainer(props, ref) {
67
- const { className, direction, vertical, children, ...remaining } = props;
65
+ */ export function SlideContainer(props) {
66
+ const { ref, className, direction, vertical, children, ...remaining } = props;
68
67
  return /*#__PURE__*/ _jsx("div", {
69
68
  ...remaining,
70
69
  ref: ref,
@@ -75,6 +74,6 @@ const styles = bem("rmd-slide-container");
75
74
  }),
76
75
  children: children
77
76
  });
78
- });
77
+ }
79
78
 
80
79
  //# sourceMappingURL=SlideContainer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/transition/SlideContainer.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { type HTMLAttributes, forwardRef } from \"react\";\n\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-slide-container\");\n\n/**\n * @example Direction \"forward\"\n * ```\n * -------------\n * | |\n * | Slide 1 | Slide 2\n * | |\n * -------------\n * -------------\n * | |\n * Slide 1 Slide 2\n * | |\n * -------------\n * -------------\n * | |\n * Slide 1 | Slide 2 |\n * | |\n * -------------\n * ```\n *\n * @example Direction \"backward\"\n * ```\n * -------------\n * | |\n * Slide 1 | Slide 2 |\n * | |\n * -------------\n * -------------\n * | |\n * Slide 1 Slide 2\n * | |\n * -------------\n * -------------\n * | |\n * | Slide 1 | Slide 2\n * | |\n * -------------\n * ```\n *\n * @since 6.0.0\n */\nexport type SlideDirection = \"backward\" | \"forward\";\n\n/** @since 6.0.0 */\nexport interface SlideContainerClassNameOptions {\n className?: string;\n\n /** @see {@link SlideDirection} */\n direction: SlideDirection;\n\n vertical?: boolean;\n}\n\n/**\n * @see {@link useSlideTransition} for an example\n * @since 6.0.0\n */\nexport function slideContainer(\n options: SlideContainerClassNameOptions\n): string {\n const { className, direction, vertical } = options;\n\n return cnb(styles({ [direction]: true, vertical }), className);\n}\n\n/** @since 6.0.0 */\nexport interface SlideContainerProps\n extends HTMLAttributes<HTMLDivElement>, SlideContainerClassNameOptions {}\n\n/**\n * The `SlideContainer` is used to enable a slide transition when child `Slide`\n * components change.\n *\n * @example Simple Example\n * ```tsx\n * import { Slide } from \"@react-md/core/transition/Slide\";\n * import { SlideContainer } from \"@react-md/core/transition/SlideContainer\";\n * import type { ReactElement, ReactNode } from \"react\";\n * import { useState } from \"react\";\n *\n * interface State {\n * direction: SlideDirection;\n * activeIndex: number;\n * }\n *\n * function Example(): ReactElement {\n * const [state, setState] = useState<State>({\n * direction: \"forward\",\n * activeIndex: 0,\n * });\n * const { direction, activeIndex } = state;\n *\n * // when changing a slide, `direction` should be set to \"forward\" if the\n * // previous `activeIndex` is less than the next index\n * //\n * // i.e.\n * // setState((prevState) => ({\n * // direction: prevState.activeIndex < index ? \"forward\" : \"backward\",\n * // activeIndex: index,\n * // }))\n *\n * return (\n * <SlideContainer direction={direction}>\n * <Slide active={activeIndex === 0}>\n * Slide 1\n * </Slide>\n * <Slide active={activeIndex === 1}>\n * Slide 2\n * </Slide>\n * <Slide active={activeIndex === 2}>\n * Slide 3\n * </Slide>\n * </SlideContainer>\n * );\n * }\n * ```\n *\n * @see {@link https://react-md.dev/components/slide | Slide Demos}\n * @since 6.0.0\n */\nexport const SlideContainer = forwardRef<HTMLDivElement, SlideContainerProps>(\n function SlideContainer(props, ref) {\n const { className, direction, vertical, children, ...remaining } = props;\n\n return (\n <div\n {...remaining}\n ref={ref}\n className={slideContainer({ className, direction, vertical })}\n >\n {children}\n </div>\n );\n }\n);\n"],"names":["cnb","forwardRef","bem","styles","slideContainer","options","className","direction","vertical","SlideContainer","props","ref","children","remaining","div"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAA8BC,UAAU,QAAQ,QAAQ;AAExD,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAuDnB;;;CAGC,GACD,OAAO,SAASE,eACdC,OAAuC;IAEvC,MAAM,EAAEC,SAAS,EAAEC,SAAS,EAAEC,QAAQ,EAAE,GAAGH;IAE3C,OAAOL,IAAIG,OAAO;QAAE,CAACI,UAAU,EAAE;QAAMC;IAAS,IAAIF;AACtD;AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDC,GACD,OAAO,MAAMG,+BAAiBR,WAC5B,SAASQ,eAAeC,KAAK,EAAEC,GAAG;IAChC,MAAM,EAAEL,SAAS,EAAEC,SAAS,EAAEC,QAAQ,EAAEI,QAAQ,EAAE,GAAGC,WAAW,GAAGH;IAEnE,qBACE,KAACI;QACE,GAAGD,SAAS;QACbF,KAAKA;QACLL,WAAWF,eAAe;YAAEE;YAAWC;YAAWC;QAAS;kBAE1DI;;AAGP,GACA"}
1
+ {"version":3,"sources":["../../src/transition/SlideContainer.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { type HTMLAttributes, type ReactElement, type Ref } from \"react\";\n\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-slide-container\");\n\n/**\n * @example Direction \"forward\"\n * ```\n * -------------\n * | |\n * | Slide 1 | Slide 2\n * | |\n * -------------\n * -------------\n * | |\n * Slide 1 Slide 2\n * | |\n * -------------\n * -------------\n * | |\n * Slide 1 | Slide 2 |\n * | |\n * -------------\n * ```\n *\n * @example Direction \"backward\"\n * ```\n * -------------\n * | |\n * Slide 1 | Slide 2 |\n * | |\n * -------------\n * -------------\n * | |\n * Slide 1 Slide 2\n * | |\n * -------------\n * -------------\n * | |\n * | Slide 1 | Slide 2\n * | |\n * -------------\n * ```\n *\n * @since 6.0.0\n */\nexport type SlideDirection = \"backward\" | \"forward\";\n\n/** @since 6.0.0 */\nexport interface SlideContainerClassNameOptions {\n className?: string;\n\n /** @see {@link SlideDirection} */\n direction: SlideDirection;\n\n vertical?: boolean;\n}\n\n/**\n * @see {@link useSlideTransition} for an example\n * @since 6.0.0\n */\nexport function slideContainer(\n options: SlideContainerClassNameOptions\n): string {\n const { className, direction, vertical } = options;\n\n return cnb(styles({ [direction]: true, vertical }), className);\n}\n\n/** @since 6.0.0 */\nexport interface SlideContainerProps\n extends HTMLAttributes<HTMLDivElement>, SlideContainerClassNameOptions {\n ref?: Ref<HTMLDivElement>;\n}\n\n/**\n * The `SlideContainer` is used to enable a slide transition when child `Slide`\n * components change.\n *\n * @example Simple Example\n * ```tsx\n * import { Slide } from \"@react-md/core/transition/Slide\";\n * import { SlideContainer } from \"@react-md/core/transition/SlideContainer\";\n * import type { ReactElement, ReactNode } from \"react\";\n * import { useState } from \"react\";\n *\n * interface State {\n * direction: SlideDirection;\n * activeIndex: number;\n * }\n *\n * function Example(): ReactElement {\n * const [state, setState] = useState<State>({\n * direction: \"forward\",\n * activeIndex: 0,\n * });\n * const { direction, activeIndex } = state;\n *\n * // when changing a slide, `direction` should be set to \"forward\" if the\n * // previous `activeIndex` is less than the next index\n * //\n * // i.e.\n * // setState((prevState) => ({\n * // direction: prevState.activeIndex < index ? \"forward\" : \"backward\",\n * // activeIndex: index,\n * // }))\n *\n * return (\n * <SlideContainer direction={direction}>\n * <Slide active={activeIndex === 0}>\n * Slide 1\n * </Slide>\n * <Slide active={activeIndex === 1}>\n * Slide 2\n * </Slide>\n * <Slide active={activeIndex === 2}>\n * Slide 3\n * </Slide>\n * </SlideContainer>\n * );\n * }\n * ```\n *\n * @see {@link https://react-md.dev/components/slide | Slide Demos}\n * @since 6.0.0\n */\nexport function SlideContainer(props: SlideContainerProps): ReactElement {\n const { ref, className, direction, vertical, children, ...remaining } = props;\n\n return (\n <div\n {...remaining}\n ref={ref}\n className={slideContainer({ className, direction, vertical })}\n >\n {children}\n </div>\n );\n}\n"],"names":["cnb","bem","styles","slideContainer","options","className","direction","vertical","SlideContainer","props","ref","children","remaining","div"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAGhC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAuDnB;;;CAGC,GACD,OAAO,SAASE,eACdC,OAAuC;IAEvC,MAAM,EAAEC,SAAS,EAAEC,SAAS,EAAEC,QAAQ,EAAE,GAAGH;IAE3C,OAAOJ,IAAIE,OAAO;QAAE,CAACI,UAAU,EAAE;QAAMC;IAAS,IAAIF;AACtD;AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDC,GACD,OAAO,SAASG,eAAeC,KAA0B;IACvD,MAAM,EAAEC,GAAG,EAAEL,SAAS,EAAEC,SAAS,EAAEC,QAAQ,EAAEI,QAAQ,EAAE,GAAGC,WAAW,GAAGH;IAExE,qBACE,KAACI;QACE,GAAGD,SAAS;QACbF,KAAKA;QACLL,WAAWF,eAAe;YAAEE;YAAWC;YAAWC;QAAS;kBAE1DI;;AAGP"}
@@ -1,4 +1,4 @@
1
- import { type ReactNode } from "react";
1
+ import { type ReactElement, type ReactNode } from "react";
2
2
  import { type ListProps } from "../list/List.js";
3
3
  /**
4
4
  * @since 6.0.0
@@ -25,4 +25,4 @@ export interface TreeGroupProps extends OverridableTreeGroupProps {
25
25
  * @since 6.0.0 Removed the collapse options and is no longer a
26
26
  * "public" component.
27
27
  */
28
- export declare const TreeGroup: import("react").ForwardRefExoticComponent<TreeGroupProps & import("react").RefAttributes<HTMLUListElement>>;
28
+ export declare function TreeGroup(props: TreeGroupProps): ReactElement | null;