@react-md/core 1.0.0-next.15 → 1.0.0-next.16

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 (815) hide show
  1. package/dist/RootHtml.d.ts +0 -2
  2. package/dist/RootHtml.js +0 -2
  3. package/dist/RootHtml.js.map +1 -1
  4. package/dist/app-bar/AppBar.d.ts +0 -2
  5. package/dist/app-bar/AppBar.js +0 -2
  6. package/dist/app-bar/AppBar.js.map +1 -1
  7. package/dist/app-bar/AppBarTitle.d.ts +0 -3
  8. package/dist/app-bar/AppBarTitle.js +0 -2
  9. package/dist/app-bar/AppBarTitle.js.map +1 -1
  10. package/dist/avatar/Avatar.d.ts +0 -2
  11. package/dist/avatar/Avatar.js +0 -2
  12. package/dist/avatar/Avatar.js.map +1 -1
  13. package/dist/badge/Badge.d.ts +1 -3
  14. package/dist/badge/Badge.js +0 -2
  15. package/dist/badge/Badge.js.map +1 -1
  16. package/dist/box/Box.d.ts +0 -2
  17. package/dist/box/Box.js +0 -2
  18. package/dist/box/Box.js.map +1 -1
  19. package/dist/button/ButtonUnstyled.d.ts +0 -2
  20. package/dist/button/ButtonUnstyled.js +0 -2
  21. package/dist/button/ButtonUnstyled.js.map +1 -1
  22. package/dist/card/Card.d.ts +0 -2
  23. package/dist/card/Card.js +0 -2
  24. package/dist/card/Card.js.map +1 -1
  25. package/dist/card/CardContent.d.ts +0 -2
  26. package/dist/card/CardContent.js +0 -2
  27. package/dist/card/CardContent.js.map +1 -1
  28. package/dist/card/CardFooter.d.ts +0 -3
  29. package/dist/card/CardFooter.js +0 -2
  30. package/dist/card/CardFooter.js.map +1 -1
  31. package/dist/card/CardHeader.d.ts +0 -2
  32. package/dist/card/CardHeader.js +0 -2
  33. package/dist/card/CardHeader.js.map +1 -1
  34. package/dist/card/CardSubtitle.d.ts +0 -3
  35. package/dist/card/CardSubtitle.js +0 -2
  36. package/dist/card/CardSubtitle.js.map +1 -1
  37. package/dist/card/CardTitle.d.ts +0 -3
  38. package/dist/card/CardTitle.js +0 -2
  39. package/dist/card/CardTitle.js.map +1 -1
  40. package/dist/chip/Chip.d.ts +0 -2
  41. package/dist/chip/Chip.js +0 -2
  42. package/dist/chip/Chip.js.map +1 -1
  43. package/dist/dialog/DialogContainer.d.ts +0 -2
  44. package/dist/dialog/DialogContainer.js +0 -2
  45. package/dist/dialog/DialogContainer.js.map +1 -1
  46. package/dist/dialog/DialogContent.d.ts +3 -3
  47. package/dist/dialog/DialogContent.js +3 -3
  48. package/dist/dialog/DialogContent.js.map +1 -1
  49. package/dist/dialog/DialogFooter.d.ts +2 -3
  50. package/dist/dialog/DialogFooter.js +2 -3
  51. package/dist/dialog/DialogFooter.js.map +1 -1
  52. package/dist/dialog/DialogHeader.d.ts +3 -3
  53. package/dist/dialog/DialogHeader.js +3 -3
  54. package/dist/dialog/DialogHeader.js.map +1 -1
  55. package/dist/dialog/DialogTitle.d.ts +3 -4
  56. package/dist/dialog/DialogTitle.js +3 -3
  57. package/dist/dialog/DialogTitle.js.map +1 -1
  58. package/dist/dialog/NestedDialogProvider.d.ts +0 -1
  59. package/dist/divider/Divider.d.ts +0 -2
  60. package/dist/divider/Divider.js +0 -2
  61. package/dist/divider/Divider.js.map +1 -1
  62. package/dist/expansion-panel/ExpansionList.d.ts +1 -1
  63. package/dist/expansion-panel/ExpansionList.js +1 -1
  64. package/dist/expansion-panel/ExpansionList.js.map +1 -1
  65. package/dist/expansion-panel/ExpansionPanel.d.ts +8 -24
  66. package/dist/expansion-panel/ExpansionPanel.js +1 -12
  67. package/dist/expansion-panel/ExpansionPanel.js.map +1 -1
  68. package/dist/expansion-panel/ExpansionPanelHeader.d.ts +0 -1
  69. package/dist/expansion-panel/ExpansionPanelHeader.js +0 -1
  70. package/dist/expansion-panel/ExpansionPanelHeader.js.map +1 -1
  71. package/dist/expansion-panel/expansionPanelStyles.d.ts +19 -0
  72. package/dist/expansion-panel/expansionPanelStyles.js +14 -0
  73. package/dist/expansion-panel/expansionPanelStyles.js.map +1 -0
  74. package/dist/form/Checkbox.d.ts +0 -1
  75. package/dist/form/Fieldset.d.ts +0 -2
  76. package/dist/form/Fieldset.js.map +1 -1
  77. package/dist/form/FormMessage.d.ts +0 -3
  78. package/dist/form/FormMessage.js +0 -2
  79. package/dist/form/FormMessage.js.map +1 -1
  80. package/dist/form/FormMessageContainer.d.ts +0 -1
  81. package/dist/form/FormMessageContainer.js +0 -1
  82. package/dist/form/FormMessageContainer.js.map +1 -1
  83. package/dist/form/FormMessageCounter.d.ts +0 -2
  84. package/dist/form/FormMessageCounter.js +0 -2
  85. package/dist/form/FormMessageCounter.js.map +1 -1
  86. package/dist/form/InputToggle.js.map +1 -1
  87. package/dist/form/InputToggleIcon.d.ts +0 -2
  88. package/dist/form/InputToggleIcon.js +0 -2
  89. package/dist/form/InputToggleIcon.js.map +1 -1
  90. package/dist/form/Label.d.ts +0 -3
  91. package/dist/form/Label.js +0 -2
  92. package/dist/form/Label.js.map +1 -1
  93. package/dist/form/Legend.d.ts +0 -3
  94. package/dist/form/Legend.js +0 -2
  95. package/dist/form/Legend.js.map +1 -1
  96. package/dist/form/MenuItemCheckbox.d.ts +0 -1
  97. package/dist/form/MenuItemRadio.d.ts +0 -1
  98. package/dist/form/MenuItemSwitch.d.ts +0 -1
  99. package/dist/form/NativeSelect.d.ts +0 -2
  100. package/dist/form/NativeSelect.js +0 -2
  101. package/dist/form/NativeSelect.js.map +1 -1
  102. package/dist/form/Option.js.map +1 -1
  103. package/dist/form/Radio.d.ts +0 -1
  104. package/dist/form/SelectedOption.d.ts +0 -2
  105. package/dist/form/SelectedOption.js +0 -2
  106. package/dist/form/SelectedOption.js.map +1 -1
  107. package/dist/form/SliderContainer.d.ts +0 -2
  108. package/dist/form/SliderContainer.js +0 -2
  109. package/dist/form/SliderContainer.js.map +1 -1
  110. package/dist/form/SliderMark.d.ts +0 -2
  111. package/dist/form/SliderMark.js +0 -2
  112. package/dist/form/SliderMark.js.map +1 -1
  113. package/dist/form/SliderMarkLabel.d.ts +0 -2
  114. package/dist/form/SliderMarkLabel.js +0 -2
  115. package/dist/form/SliderMarkLabel.js.map +1 -1
  116. package/dist/form/SliderTrack.d.ts +0 -2
  117. package/dist/form/SliderTrack.js +0 -2
  118. package/dist/form/SliderTrack.js.map +1 -1
  119. package/dist/form/SliderValueMarks.d.ts +0 -2
  120. package/dist/form/SliderValueMarks.js +0 -2
  121. package/dist/form/SliderValueMarks.js.map +1 -1
  122. package/dist/form/Switch.d.ts +0 -2
  123. package/dist/form/Switch.js +0 -2
  124. package/dist/form/Switch.js.map +1 -1
  125. package/dist/form/SwitchTrack.d.ts +2 -1
  126. package/dist/form/SwitchTrack.js +2 -1
  127. package/dist/form/SwitchTrack.js.map +1 -1
  128. package/dist/form/TextField.d.ts +0 -2
  129. package/dist/form/TextField.js +0 -2
  130. package/dist/form/TextField.js.map +1 -1
  131. package/dist/form/TextFieldAddon.d.ts +1 -4
  132. package/dist/form/TextFieldAddon.js +1 -3
  133. package/dist/form/TextFieldAddon.js.map +1 -1
  134. package/dist/icon/FontIcon.d.ts +0 -2
  135. package/dist/icon/FontIcon.js +0 -2
  136. package/dist/icon/FontIcon.js.map +1 -1
  137. package/dist/icon/IconRotator.d.ts +0 -2
  138. package/dist/icon/IconRotator.js +0 -2
  139. package/dist/icon/IconRotator.js.map +1 -1
  140. package/dist/icon/MaterialIcon.d.ts +0 -2
  141. package/dist/icon/MaterialIcon.js +0 -2
  142. package/dist/icon/MaterialIcon.js.map +1 -1
  143. package/dist/icon/MaterialSymbol.d.ts +0 -1
  144. package/dist/icon/MaterialSymbol.js +0 -1
  145. package/dist/icon/MaterialSymbol.js.map +1 -1
  146. package/dist/icon/SVGIcon.d.ts +0 -2
  147. package/dist/icon/SVGIcon.js +0 -2
  148. package/dist/icon/SVGIcon.js.map +1 -1
  149. package/dist/icon/TextIconSpacing.d.ts +0 -2
  150. package/dist/icon/TextIconSpacing.js +0 -2
  151. package/dist/icon/TextIconSpacing.js.map +1 -1
  152. package/dist/icon/_icon.scss +2 -2
  153. package/dist/icon/styles.js +1 -1
  154. package/dist/icon/styles.js.map +1 -1
  155. package/dist/interaction/RippleContainer.d.ts +0 -2
  156. package/dist/interaction/RippleContainer.js +0 -2
  157. package/dist/interaction/RippleContainer.js.map +1 -1
  158. package/dist/layout/LayoutAppBar.d.ts +0 -1
  159. package/dist/layout/LayoutNav.js +1 -2
  160. package/dist/layout/LayoutNav.js.map +1 -1
  161. package/dist/layout/LayoutWindowSplitter.d.ts +0 -1
  162. package/dist/layout/useHorizontalLayoutTransition.js +1 -1
  163. package/dist/layout/useHorizontalLayoutTransition.js.map +1 -1
  164. package/dist/layout/useLayoutTree.d.ts +2 -2
  165. package/dist/layout/useLayoutTree.js.map +1 -1
  166. package/dist/link/Link.d.ts +0 -2
  167. package/dist/link/Link.js +0 -2
  168. package/dist/link/Link.js.map +1 -1
  169. package/dist/list/List.d.ts +0 -20
  170. package/dist/list/List.js +1 -14
  171. package/dist/list/List.js.map +1 -1
  172. package/dist/list/ListItem.d.ts +0 -16
  173. package/dist/list/ListItem.js.map +1 -1
  174. package/dist/list/ListItemAddon.d.ts +0 -2
  175. package/dist/list/ListItemAddon.js +0 -2
  176. package/dist/list/ListItemAddon.js.map +1 -1
  177. package/dist/list/ListItemChildren.d.ts +0 -2
  178. package/dist/list/ListItemChildren.js +0 -2
  179. package/dist/list/ListItemChildren.js.map +1 -1
  180. package/dist/list/ListItemText.d.ts +0 -2
  181. package/dist/list/ListItemText.js +0 -2
  182. package/dist/list/ListItemText.js.map +1 -1
  183. package/dist/list/ListSubheader.d.ts +3 -2
  184. package/dist/list/ListSubheader.js +0 -2
  185. package/dist/list/ListSubheader.js.map +1 -1
  186. package/dist/list/getListItemHeight.d.ts +2 -2
  187. package/dist/list/getListItemHeight.js +2 -2
  188. package/dist/list/getListItemHeight.js.map +1 -1
  189. package/dist/list/listItemStyles.d.ts +17 -1
  190. package/dist/list/listItemStyles.js.map +1 -1
  191. package/dist/list/listStyles.d.ts +18 -0
  192. package/dist/list/listStyles.js +14 -0
  193. package/dist/list/listStyles.js.map +1 -0
  194. package/dist/list/types.d.ts +9 -3
  195. package/dist/list/types.js +6 -1
  196. package/dist/list/types.js.map +1 -1
  197. package/dist/media-queries/AppSizeProvider.d.ts +8 -0
  198. package/dist/media-queries/AppSizeProvider.js +2 -0
  199. package/dist/media-queries/AppSizeProvider.js.map +1 -1
  200. package/dist/media-queries/appSize.d.ts +5 -5
  201. package/dist/media-queries/useMediaQuery.d.ts +1 -1
  202. package/dist/media-queries/useMediaQuery.js +1 -1
  203. package/dist/media-queries/useMediaQuery.js.map +1 -1
  204. package/dist/menu/MenuBar.d.ts +0 -1
  205. package/dist/menu/MenuButton.d.ts +0 -1
  206. package/dist/menu/MenuConfigurationProvider.js.map +1 -1
  207. package/dist/menu/MenuItem.d.ts +0 -1
  208. package/dist/menu/MenuItemButton.d.ts +0 -1
  209. package/dist/menu/useMenuBarProvider.d.ts +0 -1
  210. package/dist/movement/useKeyboardMovementProvider.d.ts +0 -1
  211. package/dist/navigation/NavGroup.d.ts +0 -2
  212. package/dist/navigation/NavGroup.js +0 -2
  213. package/dist/navigation/NavGroup.js.map +1 -1
  214. package/dist/navigation/NavItem.d.ts +0 -2
  215. package/dist/navigation/NavItem.js +0 -2
  216. package/dist/navigation/NavItem.js.map +1 -1
  217. package/dist/navigation/NavSubheader.d.ts +0 -3
  218. package/dist/navigation/NavSubheader.js +0 -2
  219. package/dist/navigation/NavSubheader.js.map +1 -1
  220. package/dist/progress/CircularProgress.d.ts +0 -2
  221. package/dist/progress/CircularProgress.js +0 -2
  222. package/dist/progress/CircularProgress.js.map +1 -1
  223. package/dist/progress/LinearProgress.d.ts +0 -2
  224. package/dist/progress/LinearProgress.js +0 -2
  225. package/dist/progress/LinearProgress.js.map +1 -1
  226. package/dist/responsive-item/ResponsiveItemContainer.d.ts +0 -2
  227. package/dist/responsive-item/ResponsiveItemContainer.js +0 -2
  228. package/dist/responsive-item/ResponsiveItemContainer.js.map +1 -1
  229. package/dist/responsive-item/ResponsiveItemOverlay.d.ts +0 -2
  230. package/dist/responsive-item/ResponsiveItemOverlay.js +0 -2
  231. package/dist/responsive-item/ResponsiveItemOverlay.js.map +1 -1
  232. package/dist/segmented-button/SegmentedButtonContainer.d.ts +0 -2
  233. package/dist/segmented-button/SegmentedButtonContainer.js +0 -2
  234. package/dist/segmented-button/SegmentedButtonContainer.js.map +1 -1
  235. package/dist/sheet/Sheet.d.ts +30 -16
  236. package/dist/sheet/Sheet.js +24 -14
  237. package/dist/sheet/Sheet.js.map +1 -1
  238. package/dist/sheet/styles.d.ts +29 -0
  239. package/dist/sheet/styles.js +13 -0
  240. package/dist/sheet/styles.js.map +1 -1
  241. package/dist/snackbar/ToastActionButton.d.ts +0 -1
  242. package/dist/snackbar/ToastCloseButton.d.ts +0 -1
  243. package/dist/snackbar/ToastManager.js.map +1 -1
  244. package/dist/snackbar/useCurrentToastActions.d.ts +0 -1
  245. package/dist/suspense/CircularProgressSuspense.d.ts +0 -2
  246. package/dist/suspense/CircularProgressSuspense.js +0 -2
  247. package/dist/suspense/CircularProgressSuspense.js.map +1 -1
  248. package/dist/suspense/NullSuspense.d.ts +0 -2
  249. package/dist/suspense/NullSuspense.js +0 -2
  250. package/dist/suspense/NullSuspense.js.map +1 -1
  251. package/dist/table/TableCellContent.d.ts +0 -3
  252. package/dist/table/TableCellContent.js +0 -3
  253. package/dist/table/TableCellContent.js.map +1 -1
  254. package/dist/table/TableConfigurationProvider.d.ts +0 -1
  255. package/dist/tabs/Tab.d.ts +3 -0
  256. package/dist/tabs/Tab.js.map +1 -1
  257. package/dist/tabs/TabListScrollButton.js +5 -1
  258. package/dist/tabs/TabListScrollButton.js.map +1 -1
  259. package/dist/tabs/_tabs.scss +21 -3
  260. package/dist/tabs/tabListScrollButtonStyles.d.ts +2 -0
  261. package/dist/tabs/tabListScrollButtonStyles.js +9 -5
  262. package/dist/tabs/tabListScrollButtonStyles.js.map +1 -1
  263. package/dist/tabs/useTabList.d.ts +2 -0
  264. package/dist/tabs/useTabList.js +4 -2
  265. package/dist/tabs/useTabList.js.map +1 -1
  266. package/dist/tabs/useTabs.d.ts +33 -11
  267. package/dist/tabs/useTabs.js +9 -3
  268. package/dist/tabs/useTabs.js.map +1 -1
  269. package/dist/test-utils/IntersectionObserver.js.map +1 -1
  270. package/dist/test-utils/data-testid.d.ts +0 -1
  271. package/dist/theme/useColorScheme.d.ts +0 -1
  272. package/dist/transition/SlideContainer.d.ts +2 -48
  273. package/dist/transition/SlideContainer.js +2 -48
  274. package/dist/transition/SlideContainer.js.map +1 -1
  275. package/dist/tree/DefaultTreeItemRenderer.d.ts +2 -3
  276. package/dist/tree/DefaultTreeItemRenderer.js +1 -1
  277. package/dist/tree/DefaultTreeItemRenderer.js.map +1 -1
  278. package/dist/tree/Tree.d.ts +3 -4
  279. package/dist/tree/Tree.js.map +1 -1
  280. package/dist/tree/TreeItem.d.ts +10 -3
  281. package/dist/tree/TreeItem.js +5 -2
  282. package/dist/tree/TreeItem.js.map +1 -1
  283. package/dist/tree/types.d.ts +11 -6
  284. package/dist/tree/types.js +1 -26
  285. package/dist/tree/types.js.map +1 -1
  286. package/dist/tree/useTree.d.ts +3 -3
  287. package/dist/tree/useTree.js.map +1 -1
  288. package/dist/tree/useTreeExpansion.d.ts +3 -3
  289. package/dist/tree/useTreeExpansion.js.map +1 -1
  290. package/dist/tree/useTreeSelection.d.ts +3 -3
  291. package/dist/tree/useTreeSelection.js.map +1 -1
  292. package/dist/typography/SrOnly.d.ts +2 -1
  293. package/dist/typography/SrOnly.js +2 -1
  294. package/dist/typography/SrOnly.js.map +1 -1
  295. package/dist/typography/TextContainer.d.ts +0 -2
  296. package/dist/typography/TextContainer.js +0 -2
  297. package/dist/typography/TextContainer.js.map +1 -1
  298. package/dist/typography/Typography.d.ts +0 -2
  299. package/dist/typography/Typography.js +0 -2
  300. package/dist/typography/Typography.js.map +1 -1
  301. package/dist/typography/WritingDirectionProvider.d.ts +2 -2
  302. package/dist/typography/WritingDirectionProvider.js +2 -2
  303. package/dist/typography/WritingDirectionProvider.js.map +1 -1
  304. package/dist/useResizeListener.d.ts +7 -1
  305. package/dist/useResizeListener.js.map +1 -1
  306. package/dist/useResizeObserver.d.ts +3 -3
  307. package/dist/useResizeObserver.js.map +1 -1
  308. package/dist/useToggle.d.ts +4 -4
  309. package/dist/useToggle.js +1 -1
  310. package/dist/useToggle.js.map +1 -1
  311. package/dist/window-splitter/WindowSplitter.d.ts +2 -2
  312. package/dist/window-splitter/WindowSplitter.js +2 -2
  313. package/dist/window-splitter/WindowSplitter.js.map +1 -1
  314. package/package.json +15 -15
  315. package/src/RootHtml.tsx +0 -2
  316. package/src/app-bar/AppBar.tsx +0 -2
  317. package/src/app-bar/AppBarTitle.tsx +0 -2
  318. package/src/avatar/Avatar.tsx +0 -2
  319. package/src/badge/Badge.tsx +1 -3
  320. package/src/box/Box.tsx +0 -2
  321. package/src/button/ButtonUnstyled.tsx +0 -2
  322. package/src/card/Card.tsx +0 -2
  323. package/src/card/CardContent.tsx +0 -2
  324. package/src/card/CardFooter.tsx +0 -2
  325. package/src/card/CardHeader.tsx +0 -2
  326. package/src/card/CardSubtitle.tsx +0 -2
  327. package/src/card/CardTitle.tsx +0 -2
  328. package/src/chip/Chip.tsx +0 -2
  329. package/src/dialog/DialogContainer.tsx +0 -2
  330. package/src/dialog/DialogContent.tsx +3 -3
  331. package/src/dialog/DialogFooter.tsx +2 -3
  332. package/src/dialog/DialogHeader.tsx +3 -3
  333. package/src/dialog/DialogTitle.tsx +3 -3
  334. package/src/divider/Divider.tsx +0 -2
  335. package/src/expansion-panel/ExpansionList.tsx +1 -1
  336. package/src/expansion-panel/ExpansionPanel.tsx +9 -38
  337. package/src/expansion-panel/ExpansionPanelHeader.tsx +0 -1
  338. package/src/expansion-panel/expansionPanelStyles.ts +33 -0
  339. package/src/form/Fieldset.tsx +0 -2
  340. package/src/form/FormMessage.tsx +0 -2
  341. package/src/form/FormMessageContainer.tsx +0 -1
  342. package/src/form/FormMessageCounter.tsx +0 -2
  343. package/src/form/InputToggle.tsx +1 -1
  344. package/src/form/InputToggleIcon.tsx +0 -2
  345. package/src/form/Label.tsx +0 -2
  346. package/src/form/Legend.tsx +0 -2
  347. package/src/form/NativeSelect.tsx +0 -2
  348. package/src/form/Option.tsx +1 -1
  349. package/src/form/SelectedOption.tsx +0 -2
  350. package/src/form/SliderContainer.tsx +0 -2
  351. package/src/form/SliderMark.tsx +0 -2
  352. package/src/form/SliderMarkLabel.tsx +0 -2
  353. package/src/form/SliderTrack.tsx +0 -2
  354. package/src/form/SliderValueMarks.tsx +0 -2
  355. package/src/form/Switch.tsx +0 -2
  356. package/src/form/SwitchTrack.tsx +2 -1
  357. package/src/form/TextField.tsx +0 -2
  358. package/src/form/TextFieldAddon.tsx +1 -3
  359. package/src/icon/FontIcon.tsx +0 -2
  360. package/src/icon/IconRotator.tsx +0 -2
  361. package/src/icon/MaterialIcon.tsx +0 -2
  362. package/src/icon/MaterialSymbol.tsx +0 -1
  363. package/src/icon/SVGIcon.tsx +0 -2
  364. package/src/icon/TextIconSpacing.tsx +0 -2
  365. package/src/icon/styles.ts +1 -1
  366. package/src/interaction/RippleContainer.tsx +0 -2
  367. package/src/layout/LayoutNav.tsx +3 -2
  368. package/src/layout/useHorizontalLayoutTransition.ts +1 -1
  369. package/src/layout/useLayoutTree.ts +2 -2
  370. package/src/link/Link.tsx +0 -2
  371. package/src/list/List.tsx +1 -33
  372. package/src/list/ListItem.tsx +0 -17
  373. package/src/list/ListItemAddon.tsx +0 -2
  374. package/src/list/ListItemChildren.tsx +0 -2
  375. package/src/list/ListItemText.tsx +0 -2
  376. package/src/list/ListSubheader.tsx +3 -2
  377. package/src/list/getListItemHeight.ts +2 -2
  378. package/src/list/listItemStyles.ts +21 -4
  379. package/src/list/listStyles.ts +31 -0
  380. package/src/list/types.ts +9 -3
  381. package/src/media-queries/AppSizeProvider.tsx +8 -0
  382. package/src/media-queries/useMediaQuery.ts +1 -1
  383. package/src/menu/MenuConfigurationProvider.tsx +2 -2
  384. package/src/navigation/NavGroup.tsx +0 -2
  385. package/src/navigation/NavItem.tsx +0 -2
  386. package/src/navigation/NavSubheader.tsx +0 -2
  387. package/src/progress/CircularProgress.tsx +0 -2
  388. package/src/progress/LinearProgress.tsx +0 -2
  389. package/src/responsive-item/ResponsiveItemContainer.tsx +0 -2
  390. package/src/responsive-item/ResponsiveItemOverlay.tsx +0 -2
  391. package/src/segmented-button/SegmentedButtonContainer.tsx +0 -2
  392. package/src/sheet/Sheet.tsx +36 -33
  393. package/src/sheet/styles.ts +50 -0
  394. package/src/suspense/CircularProgressSuspense.tsx +0 -2
  395. package/src/suspense/NullSuspense.tsx +0 -2
  396. package/src/table/TableCellContent.tsx +0 -3
  397. package/src/tabs/Tab.tsx +3 -0
  398. package/src/tabs/TabListScrollButton.tsx +9 -2
  399. package/src/tabs/tabListScrollButtonStyles.ts +9 -5
  400. package/src/tabs/useTabList.ts +4 -0
  401. package/src/tabs/useTabs.ts +61 -14
  402. package/src/test-utils/IntersectionObserver.ts +1 -1
  403. package/src/transition/SlideContainer.tsx +2 -48
  404. package/src/tree/DefaultTreeItemRenderer.tsx +3 -4
  405. package/src/tree/Tree.tsx +4 -6
  406. package/src/tree/TreeItem.tsx +11 -4
  407. package/src/tree/types.ts +16 -6
  408. package/src/tree/useTree.ts +3 -3
  409. package/src/tree/useTreeExpansion.ts +3 -3
  410. package/src/tree/useTreeSelection.ts +3 -3
  411. package/src/typography/SrOnly.tsx +2 -1
  412. package/src/typography/TextContainer.tsx +0 -2
  413. package/src/typography/Typography.tsx +0 -2
  414. package/src/typography/WritingDirectionProvider.tsx +2 -2
  415. package/src/useResizeListener.ts +7 -1
  416. package/src/useResizeObserver.ts +3 -3
  417. package/src/useToggle.ts +4 -4
  418. package/src/window-splitter/WindowSplitter.tsx +2 -2
  419. package/.eslintrc.cjs +0 -34
  420. package/.stylelintrc.json +0 -14
  421. package/.swcrc +0 -17
  422. package/.turbo/turbo-build.log +0 -22
  423. package/.turbo/turbo-lint.log +0 -12
  424. package/.turbo/turbo-test.log +0 -5516
  425. package/.turbo/turbo-typecheck.log +0 -4
  426. package/CHANGELOG.md +0 -323
  427. package/coverage/clover.xml +0 -842
  428. package/coverage/coverage-final.json +0 -6
  429. package/coverage/lcov-report/autocomplete/Autocomplete.tsx.html +0 -1033
  430. package/coverage/lcov-report/autocomplete/AutocompleteClearButton.tsx.html +0 -262
  431. package/coverage/lcov-report/autocomplete/FilterAutocompleteOptions.tsx.html +0 -364
  432. package/coverage/lcov-report/autocomplete/index.html +0 -146
  433. package/coverage/lcov-report/base.css +0 -224
  434. package/coverage/lcov-report/block-navigation.js +0 -87
  435. package/coverage/lcov-report/button/Button.tsx.html +0 -676
  436. package/coverage/lcov-report/button/index.html +0 -116
  437. package/coverage/lcov-report/card/Card.tsx.html +0 -349
  438. package/coverage/lcov-report/card/CardSubtitle.tsx.html +0 -265
  439. package/coverage/lcov-report/card/index.html +0 -146
  440. package/coverage/lcov-report/card/styles.ts.html +0 -682
  441. package/coverage/lcov-report/createHorizontalPosition.ts.html +0 -1075
  442. package/coverage/lcov-report/createVerticalPosition.ts.html +0 -997
  443. package/coverage/lcov-report/favicon.png +0 -0
  444. package/coverage/lcov-report/form/Option.tsx.html +0 -727
  445. package/coverage/lcov-report/form/index.html +0 -131
  446. package/coverage/lcov-report/form/useListboxProvider.ts.html +0 -253
  447. package/coverage/lcov-report/index.html +0 -146
  448. package/coverage/lcov-report/prettify.css +0 -1
  449. package/coverage/lcov-report/prettify.js +0 -2
  450. package/coverage/lcov-report/searching/fuzzy.ts.html +0 -607
  451. package/coverage/lcov-report/searching/index.html +0 -116
  452. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  453. package/coverage/lcov-report/sorter.js +0 -196
  454. package/coverage/lcov-report/src/card/Card.tsx.html +0 -349
  455. package/coverage/lcov-report/src/card/CardSubtitle.tsx.html +0 -277
  456. package/coverage/lcov-report/src/card/index.html +0 -146
  457. package/coverage/lcov-report/src/card/styles.ts.html +0 -682
  458. package/coverage/lcov-report/src/cssUtils.ts.html +0 -787
  459. package/coverage/lcov-report/src/index.html +0 -116
  460. package/coverage/lcov-report/src/transition/index.html +0 -116
  461. package/coverage/lcov-report/src/transition/useCSSTransition.ts.html +0 -766
  462. package/coverage/lcov-report/transition/index.html +0 -116
  463. package/coverage/lcov-report/transition/useCSSTransition.ts.html +0 -766
  464. package/coverage/lcov-report/typography/SrOnly.tsx.html +0 -325
  465. package/coverage/lcov-report/typography/index.html +0 -116
  466. package/coverage/lcov-report/utils.ts.html +0 -1225
  467. package/coverage/lcov.info +0 -952
  468. package/jest.config.ts +0 -68
  469. package/jest.setup.ts +0 -3
  470. package/scripts/copySassFiles.ts +0 -70
  471. package/scripts/getExportMap.ts +0 -66
  472. package/scripts/tsconfig.json +0 -18
  473. package/src/__tests__/NoSsr.node.tsx +0 -26
  474. package/src/__tests__/NoSsr.tsx +0 -89
  475. package/src/__tests__/RootHtml.node.tsx +0 -46
  476. package/src/__tests__/__snapshots__/RootHtml.node.tsx.snap +0 -19
  477. package/src/__tests__/useAsyncFunction.tsx +0 -124
  478. package/src/__tests__/useDebouncedFunction.tsx +0 -108
  479. package/src/__tests__/useDropzone.tsx +0 -131
  480. package/src/__tests__/useElementSize.tsx +0 -181
  481. package/src/__tests__/useEnsuredId.tsx +0 -25
  482. package/src/__tests__/useEnsuredState.tsx +0 -74
  483. package/src/__tests__/useHtmlClassName.tsx +0 -54
  484. package/src/__tests__/useLocalStorage.tsx +0 -377
  485. package/src/__tests__/useOrientation.node.tsx +0 -20
  486. package/src/__tests__/useOrientation.tsx +0 -63
  487. package/src/__tests__/useResizeObserver.tsx +0 -258
  488. package/src/__tests__/useThrottledFunction.tsx +0 -226
  489. package/src/__tests__/useToggle.tsx +0 -78
  490. package/src/__tests__/useWindowSize.node.tsx +0 -56
  491. package/src/__tests__/useWindowSize.tsx +0 -155
  492. package/src/_box-shadows.scss +0 -219
  493. package/src/_core.scss +0 -432
  494. package/src/_utils.scss +0 -348
  495. package/src/app-bar/__tests__/AppBar.tsx +0 -121
  496. package/src/app-bar/__tests__/AppBarTitle.tsx +0 -39
  497. package/src/app-bar/__tests__/__snapshots__/AppBar.tsx.snap +0 -186
  498. package/src/app-bar/__tests__/__snapshots__/AppBarTitle.tsx.snap +0 -47
  499. package/src/app-bar/_app-bar.scss +0 -248
  500. package/src/autocomplete/__tests__/Autocomplete.tsx +0 -458
  501. package/src/autocomplete/__tests__/__snapshots__/Autocomplete.tsx.snap +0 -144
  502. package/src/autocomplete/_autocomplete.scss +0 -75
  503. package/src/avatar/__tests__/Avatar.tsx +0 -75
  504. package/src/avatar/__tests__/__snapshots__/Avatar.tsx.snap +0 -73
  505. package/src/avatar/_avatar.scss +0 -157
  506. package/src/badge/__tests__/Badge.tsx +0 -42
  507. package/src/badge/__tests__/__snapshots__/Badge.tsx.snap +0 -54
  508. package/src/badge/_badge.scss +0 -145
  509. package/src/box/__tests__/Box.tsx +0 -158
  510. package/src/box/__tests__/__snapshots__/Box.tsx.snap +0 -544
  511. package/src/box/_box.scss +0 -168
  512. package/src/button/__tests__/AsyncButton.tsx +0 -211
  513. package/src/button/__tests__/Button.tsx +0 -198
  514. package/src/button/__tests__/ButtonUnstyled.tsx +0 -37
  515. package/src/button/__tests__/TooltippedButton.tsx +0 -60
  516. package/src/button/__tests__/__snapshots__/AsyncButton.tsx.snap +0 -418
  517. package/src/button/__tests__/__snapshots__/Button.tsx.snap +0 -573
  518. package/src/button/__tests__/__snapshots__/ButtonUnstyled.tsx.snap +0 -22
  519. package/src/button/__tests__/__snapshots__/TooltippedButton.tsx.snap +0 -26
  520. package/src/button/__tests__/__snapshots__/buttonStyles.ts.snap +0 -11
  521. package/src/button/__tests__/buttonStyles.ts +0 -15
  522. package/src/button/_button.scss +0 -330
  523. package/src/card/__tests__/Card.tsx +0 -37
  524. package/src/card/__tests__/CardContent.tsx +0 -40
  525. package/src/card/__tests__/CardFooter.tsx +0 -34
  526. package/src/card/__tests__/CardHeader.tsx +0 -66
  527. package/src/card/__tests__/CardSubtitle.tsx +0 -30
  528. package/src/card/__tests__/CardTitle.tsx +0 -30
  529. package/src/card/__tests__/ClickableCard.tsx +0 -66
  530. package/src/card/__tests__/__snapshots__/Card.tsx.snap +0 -40
  531. package/src/card/__tests__/__snapshots__/CardContent.tsx.snap +0 -50
  532. package/src/card/__tests__/__snapshots__/CardFooter.tsx.snap +0 -30
  533. package/src/card/__tests__/__snapshots__/CardHeader.tsx.snap +0 -74
  534. package/src/card/__tests__/__snapshots__/CardSubtitle.tsx.snap +0 -18
  535. package/src/card/__tests__/__snapshots__/CardTitle.tsx.snap +0 -18
  536. package/src/card/__tests__/__snapshots__/ClickableCard.tsx.snap +0 -20
  537. package/src/card/__tests__/__snapshots__/styles.ts.snap +0 -13
  538. package/src/card/__tests__/styles.ts +0 -45
  539. package/src/card/_card.scss +0 -189
  540. package/src/chip/__tests__/Chip.tsx +0 -327
  541. package/src/chip/__tests__/__snapshots__/Chip.tsx.snap +0 -597
  542. package/src/chip/__tests__/__snapshots__/styles.ts.snap +0 -5
  543. package/src/chip/__tests__/styles.ts +0 -14
  544. package/src/chip/_chip.scss +0 -324
  545. package/src/dialog/__tests__/Dialog.tsx +0 -316
  546. package/src/dialog/__tests__/DialogContent.tsx +0 -53
  547. package/src/dialog/__tests__/DialogFooter.tsx +0 -70
  548. package/src/dialog/__tests__/DialogHeader.tsx +0 -37
  549. package/src/dialog/__tests__/DialogTitle.tsx +0 -41
  550. package/src/dialog/__tests__/__snapshots__/Dialog.tsx.snap +0 -84
  551. package/src/dialog/__tests__/__snapshots__/DialogContent.tsx.snap +0 -36
  552. package/src/dialog/__tests__/__snapshots__/DialogFooter.tsx.snap +0 -186
  553. package/src/dialog/__tests__/__snapshots__/DialogHeader.tsx.snap +0 -18
  554. package/src/dialog/__tests__/__snapshots__/DialogTitle.tsx.snap +0 -26
  555. package/src/dialog/_dialog.scss +0 -273
  556. package/src/divider/__tests__/Divider.tsx +0 -36
  557. package/src/divider/__tests__/__snapshots__/Divider.tsx.snap +0 -26
  558. package/src/divider/_divider.scss +0 -124
  559. package/src/draggable/__tests__/__snapshots__/useDraggable.tsx.snap +0 -49
  560. package/src/draggable/__tests__/useDraggable.tsx +0 -540
  561. package/src/draggable/_draggable.scss +0 -29
  562. package/src/expansion-panel/__tests__/ExpansionPanel.tsx +0 -290
  563. package/src/expansion-panel/__tests__/__snapshots__/ExpansionPanel.tsx.snap +0 -197
  564. package/src/expansion-panel/_expansion-panel.scss +0 -107
  565. package/src/focus/__tests__/useFocusContainer.tsx +0 -280
  566. package/src/form/__tests__/Checkbox.tsx +0 -42
  567. package/src/form/__tests__/Fieldset.tsx +0 -44
  568. package/src/form/__tests__/FileInput.tsx +0 -120
  569. package/src/form/__tests__/Label.tsx +0 -69
  570. package/src/form/__tests__/Legend.tsx +0 -34
  571. package/src/form/__tests__/MenuItemCheckbox.tsx +0 -53
  572. package/src/form/__tests__/MenuItemRadio.tsx +0 -53
  573. package/src/form/__tests__/Radio.tsx +0 -35
  574. package/src/form/__tests__/Select.tsx +0 -439
  575. package/src/form/__tests__/Switch.tsx +0 -152
  576. package/src/form/__tests__/TextArea.tsx +0 -433
  577. package/src/form/__tests__/TextField.tsx +0 -195
  578. package/src/form/__tests__/__snapshots__/Checkbox.tsx.snap +0 -99
  579. package/src/form/__tests__/__snapshots__/Fieldset.tsx.snap +0 -58
  580. package/src/form/__tests__/__snapshots__/FileInput.tsx.snap +0 -612
  581. package/src/form/__tests__/__snapshots__/Label.tsx.snap +0 -140
  582. package/src/form/__tests__/__snapshots__/Legend.tsx.snap +0 -30
  583. package/src/form/__tests__/__snapshots__/MenuItemCheckbox.tsx.snap +0 -96
  584. package/src/form/__tests__/__snapshots__/MenuItemRadio.tsx.snap +0 -96
  585. package/src/form/__tests__/__snapshots__/Radio.tsx.snap +0 -99
  586. package/src/form/__tests__/__snapshots__/Select.tsx.snap +0 -492
  587. package/src/form/__tests__/__snapshots__/Switch.tsx.snap +0 -428
  588. package/src/form/__tests__/__snapshots__/TextArea.tsx.snap +0 -548
  589. package/src/form/__tests__/__snapshots__/TextField.tsx.snap +0 -279
  590. package/src/form/__tests__/__snapshots__/useCheckboxGroup.tsx.snap +0 -481
  591. package/src/form/__tests__/__snapshots__/useRadioGroup.tsx.snap +0 -704
  592. package/src/form/__tests__/useCheckboxGroup.tsx +0 -292
  593. package/src/form/__tests__/useFileUpload.tsx +0 -289
  594. package/src/form/__tests__/useFormReset.tsx +0 -194
  595. package/src/form/__tests__/useRadioGroup.tsx +0 -227
  596. package/src/form/__tests__/utils.ts +0 -247
  597. package/src/form/_form.scss +0 -2190
  598. package/src/icon/__tests__/FontIcon.tsx +0 -45
  599. package/src/icon/__tests__/IconRotator.tsx +0 -120
  600. package/src/icon/__tests__/MaterialIcon.tsx +0 -79
  601. package/src/icon/__tests__/MaterialSymbol.tsx +0 -100
  602. package/src/icon/__tests__/SVGIcon.tsx +0 -40
  603. package/src/icon/__tests__/TextIconSpacing.tsx +0 -108
  604. package/src/icon/__tests__/__snapshots__/FontIcon.tsx.snap +0 -35
  605. package/src/icon/__tests__/__snapshots__/IconRotator.tsx.snap +0 -165
  606. package/src/icon/__tests__/__snapshots__/MaterialIcon.tsx.snap +0 -82
  607. package/src/icon/__tests__/__snapshots__/MaterialSymbol.tsx.snap +0 -42
  608. package/src/icon/__tests__/__snapshots__/SVGIcon.tsx.snap +0 -47
  609. package/src/icon/__tests__/__snapshots__/TextIconSpacing.tsx.snap +0 -101
  610. package/src/icon/__tests__/__snapshots__/styles.ts.snap +0 -29
  611. package/src/icon/__tests__/styles.ts +0 -28
  612. package/src/icon/_icon.scss +0 -213
  613. package/src/interaction/__tests__/UserInteractionModeProvider.tsx +0 -121
  614. package/src/interaction/__tests__/__snapshots__/useHigherContrastChildren.tsx.snap +0 -79
  615. package/src/interaction/__tests__/useHigherContrastChildren.tsx +0 -97
  616. package/src/interaction/_interaction.scss +0 -436
  617. package/src/layout/__tests__/LayoutAppBar.tsx +0 -117
  618. package/src/layout/__tests__/LayoutNav.tsx +0 -78
  619. package/src/layout/__tests__/LayoutWindowSplitter.tsx +0 -63
  620. package/src/layout/__tests__/Main.tsx +0 -51
  621. package/src/layout/__tests__/__snapshots__/LayoutAppBar.tsx.snap +0 -78
  622. package/src/layout/__tests__/__snapshots__/LayoutNav.tsx.snap +0 -31
  623. package/src/layout/__tests__/__snapshots__/LayoutWindowSplitter.tsx.snap +0 -60
  624. package/src/layout/__tests__/__snapshots__/Main.tsx.snap +0 -32
  625. package/src/layout/__tests__/__snapshots__/useExpandableLayout.tsx.snap +0 -116
  626. package/src/layout/__tests__/__snapshots__/useLayoutTree.tsx.snap +0 -676
  627. package/src/layout/__tests__/__snapshots__/useResizableLayout.tsx.snap +0 -95
  628. package/src/layout/__tests__/__snapshots__/useTemporaryLayout.tsx.snap +0 -141
  629. package/src/layout/__tests__/useExpandableLayout.tsx +0 -279
  630. package/src/layout/__tests__/useLayoutTree.tsx +0 -212
  631. package/src/layout/__tests__/useResizableLayout.tsx +0 -170
  632. package/src/layout/__tests__/useTemporaryLayout.tsx +0 -109
  633. package/src/layout/_layout.scss +0 -163
  634. package/src/link/__tests__/Link.tsx +0 -31
  635. package/src/link/__tests__/SkipToMainContent.tsx +0 -125
  636. package/src/link/__tests__/__snapshots__/Link.tsx.snap +0 -20
  637. package/src/link/__tests__/__snapshots__/SkipToMainContent.tsx.snap +0 -22
  638. package/src/link/_link.scss +0 -149
  639. package/src/list/__tests__/List.tsx +0 -58
  640. package/src/list/__tests__/ListItem.tsx +0 -280
  641. package/src/list/__tests__/ListItemLink.tsx +0 -89
  642. package/src/list/__tests__/ListSubheader.tsx +0 -81
  643. package/src/list/__tests__/__snapshots__/List.tsx.snap +0 -41
  644. package/src/list/__tests__/__snapshots__/ListItem.tsx.snap +0 -414
  645. package/src/list/__tests__/__snapshots__/ListItemLink.tsx.snap +0 -73
  646. package/src/list/__tests__/__snapshots__/ListSubheader.tsx.snap +0 -99
  647. package/src/list/__tests__/getListItemHeight.ts +0 -176
  648. package/src/list/_list.scss +0 -322
  649. package/src/media-queries/__tests__/AppSizeProvider.node.tsx +0 -37
  650. package/src/media-queries/__tests__/AppSizeProvider.tsx +0 -119
  651. package/src/media-queries/__tests__/useMediaQuery.node.tsx +0 -20
  652. package/src/media-queries/__tests__/useMediaQuery.tsx +0 -59
  653. package/src/media-queries/_media-queries.scss +0 -63
  654. package/src/menu/__tests__/DropdownMenu.tsx +0 -627
  655. package/src/menu/__tests__/MenuBar.tsx +0 -354
  656. package/src/menu/__tests__/MenuItemCircularProgress.tsx +0 -39
  657. package/src/menu/__tests__/MenuVisibilityProvider.tsx +0 -34
  658. package/src/menu/__tests__/__snapshots__/DropdownMenu.tsx.snap +0 -292
  659. package/src/menu/__tests__/__snapshots__/MenuBar.tsx.snap +0 -87
  660. package/src/menu/__tests__/__snapshots__/MenuItemCircularProgress.tsx.snap +0 -68
  661. package/src/menu/__tests__/__snapshots__/useContextMenu.tsx.snap +0 -54
  662. package/src/menu/__tests__/useContextMenu.tsx +0 -41
  663. package/src/menu/__tests__/utils.ts +0 -121
  664. package/src/menu/_menu.scss +0 -116
  665. package/src/movement/__tests__/findMatchIndex.ts +0 -244
  666. package/src/movement/__tests__/utils.ts +0 -710
  667. package/src/navigation/__tests__/Navigation.tsx +0 -97
  668. package/src/navigation/__tests__/__snapshots__/Navigation.tsx.snap +0 -165
  669. package/src/navigation/_navigation.scss +0 -99
  670. package/src/overlay/__tests__/Overlay.tsx +0 -198
  671. package/src/overlay/__tests__/__snapshots__/Overlay.tsx.snap +0 -77
  672. package/src/overlay/_overlay.scss +0 -74
  673. package/src/portal/__tests__/PortalContainerProvider.node.tsx +0 -26
  674. package/src/portal/__tests__/PortalContainerProvider.tsx +0 -84
  675. package/src/positioning/__tests__/__snapshots__/useFixedPositioning.tsx.snap +0 -87
  676. package/src/positioning/__tests__/createHorizontalPosition.ts +0 -777
  677. package/src/positioning/__tests__/createVerticalPosition.ts +0 -464
  678. package/src/positioning/__tests__/useFixedPositioning.tsx +0 -205
  679. package/src/positioning/__tests__/utils.ts +0 -1311
  680. package/src/progress/__tests__/CircularProgress.tsx +0 -153
  681. package/src/progress/__tests__/LinearProgress.tsx +0 -131
  682. package/src/progress/__tests__/__snapshots__/CircularProgress.tsx.snap +0 -499
  683. package/src/progress/__tests__/__snapshots__/LinearProgress.tsx.snap +0 -321
  684. package/src/progress/__tests__/getProgressA11y.ts +0 -16
  685. package/src/progress/_progress.scss +0 -577
  686. package/src/responsive-item/__tests__/ResponsiveItemContainer.tsx +0 -56
  687. package/src/responsive-item/__tests__/ResponsiveItemOverlay.tsx +0 -66
  688. package/src/responsive-item/__tests__/__snapshots__/ResponsiveItemContainer.tsx.snap +0 -85
  689. package/src/responsive-item/__tests__/__snapshots__/ResponsiveItemOverlay.tsx.snap +0 -151
  690. package/src/responsive-item/__tests__/__snapshots__/styles.ts.snap +0 -9
  691. package/src/responsive-item/__tests__/styles.ts +0 -32
  692. package/src/responsive-item/_responsive-item.scss +0 -199
  693. package/src/searching/__tests__/caseInsensitive.ts +0 -165
  694. package/src/searching/__tests__/fuzzy.ts +0 -169
  695. package/src/searching/__tests__/toSearchQuery.ts +0 -21
  696. package/src/searching/__tests__/useFuzzyMatch.tsx +0 -200
  697. package/src/segmented-button/__tests__/SegmentedButton.tsx +0 -61
  698. package/src/segmented-button/__tests__/SegmentedButtonContainer.tsx +0 -38
  699. package/src/segmented-button/__tests__/__snapshots__/SegmentedButton.tsx.snap +0 -116
  700. package/src/segmented-button/__tests__/__snapshots__/SegmentedButtonContainer.tsx.snap +0 -22
  701. package/src/segmented-button/_segmented-button.scss +0 -208
  702. package/src/sheet/_sheet.scss +0 -189
  703. package/src/snackbar/__tests__/Snackbar.tsx +0 -85
  704. package/src/snackbar/__tests__/Toast.tsx +0 -105
  705. package/src/snackbar/__tests__/ToastActionButton.tsx +0 -112
  706. package/src/snackbar/__tests__/ToastCloseButton.tsx +0 -140
  707. package/src/snackbar/__tests__/ToastContent.tsx +0 -88
  708. package/src/snackbar/__tests__/ToastManagerProvider.tsx +0 -852
  709. package/src/snackbar/__tests__/__snapshots__/Snackbar.tsx.snap +0 -176
  710. package/src/snackbar/__tests__/__snapshots__/Toast.tsx.snap +0 -52
  711. package/src/snackbar/__tests__/__snapshots__/ToastActionButton.tsx.snap +0 -36
  712. package/src/snackbar/__tests__/__snapshots__/ToastCloseButton.tsx.snap +0 -104
  713. package/src/snackbar/__tests__/__snapshots__/ToastContent.tsx.snap +0 -26
  714. package/src/snackbar/__tests__/__snapshots__/ToastManagerProvider.tsx.snap +0 -290
  715. package/src/snackbar/_snackbar.scss +0 -266
  716. package/src/suspense/__tests__/CircularProgressSuspense.tsx +0 -90
  717. package/src/suspense/__tests__/NullSuspense.tsx +0 -46
  718. package/src/suspense/__tests__/__snapshots__/CircularProgressSuspense.tsx.snap +0 -24
  719. package/src/table/__tests__/Table.tsx +0 -315
  720. package/src/table/__tests__/TableBody.tsx +0 -52
  721. package/src/table/__tests__/TableCheckbox.tsx +0 -89
  722. package/src/table/__tests__/TableContainer.tsx +0 -31
  723. package/src/table/__tests__/TableRadio.tsx +0 -112
  724. package/src/table/__tests__/TableRow.tsx +0 -63
  725. package/src/table/__tests__/__snapshots__/Table.tsx.snap +0 -2426
  726. package/src/table/__tests__/__snapshots__/TableBody.tsx.snap +0 -54
  727. package/src/table/__tests__/__snapshots__/TableCheckbox.tsx.snap +0 -142
  728. package/src/table/__tests__/__snapshots__/TableContainer.tsx.snap +0 -16
  729. package/src/table/__tests__/__snapshots__/TableRadio.tsx.snap +0 -138
  730. package/src/table/__tests__/__snapshots__/TableRow.tsx.snap +0 -56
  731. package/src/table/__tests__/__snapshots__/tableContainerStyles.ts.snap +0 -3
  732. package/src/table/__tests__/__snapshots__/tableRowStyles.ts.snap +0 -3
  733. package/src/table/__tests__/__snapshots__/tableStyles.ts.snap +0 -3
  734. package/src/table/__tests__/tableContainerStyles.ts +0 -8
  735. package/src/table/__tests__/tableRowStyles.ts +0 -8
  736. package/src/table/__tests__/tableStyles.ts +0 -8
  737. package/src/table/_table.scss +0 -447
  738. package/src/tabs/__tests__/Tab.tsx +0 -51
  739. package/src/tabs/__tests__/TabList.tsx +0 -640
  740. package/src/tabs/__tests__/__snapshots__/Tab.tsx.snap +0 -85
  741. package/src/tabs/__tests__/__snapshots__/TabList.tsx.snap +0 -51
  742. package/src/tabs/__tests__/useTabs.tsx +0 -212
  743. package/src/tabs/_tabs.scss +0 -273
  744. package/src/test-utils/__tests__/ResizeObserver.ts +0 -171
  745. package/src/theme/__tests__/LocalStorageColorSchemeProvider.tsx +0 -162
  746. package/src/theme/__tests__/ThemeProvider.tsx +0 -90
  747. package/src/theme/__tests__/__snapshots__/useCSSVariables.tsx.snap +0 -27
  748. package/src/theme/__tests__/__snapshots__/useColorSchemeMetaTag.tsx.snap +0 -15
  749. package/src/theme/__tests__/useCSSVariables.tsx +0 -177
  750. package/src/theme/__tests__/useColorSchemeMetaTag.tsx +0 -36
  751. package/src/theme/__tests__/utils.ts +0 -67
  752. package/src/theme/_a11y.scss +0 -114
  753. package/src/theme/_colors.scss +0 -1057
  754. package/src/theme/_theme.scss +0 -520
  755. package/src/tooltip/__tests__/Tooltip.tsx +0 -501
  756. package/src/tooltip/__tests__/TooltipHoverModeProvider.tsx +0 -94
  757. package/src/tooltip/__tests__/__snapshots__/Tooltip.tsx.snap +0 -34
  758. package/src/tooltip/__tests__/utils.ts +0 -94
  759. package/src/tooltip/_tooltip.scss +0 -155
  760. package/src/transition/__tests__/CSSTransition.tsx +0 -182
  761. package/src/transition/__tests__/Collapse.tsx +0 -209
  762. package/src/transition/__tests__/CrossFade.tsx +0 -227
  763. package/src/transition/__tests__/ScaleTransition.tsx +0 -204
  764. package/src/transition/__tests__/SkeletonPlaceholder.tsx +0 -72
  765. package/src/transition/__tests__/__snapshots__/CSSTransition.tsx.snap +0 -145
  766. package/src/transition/__tests__/__snapshots__/Collapse.tsx.snap +0 -224
  767. package/src/transition/__tests__/__snapshots__/CrossFade.tsx.snap +0 -240
  768. package/src/transition/__tests__/__snapshots__/ScaleTransition.tsx.snap +0 -239
  769. package/src/transition/__tests__/__snapshots__/SkeletonPlaceholder.tsx.snap +0 -24
  770. package/src/transition/__tests__/__snapshots__/useCollapseTransition.tsx.snap +0 -361
  771. package/src/transition/__tests__/__snapshots__/useCrossFadeTransition.tsx.snap +0 -258
  772. package/src/transition/__tests__/__snapshots__/useMaxWidthTransition.tsx.snap +0 -68
  773. package/src/transition/__tests__/__snapshots__/useScaleTransition.tsx.snap +0 -209
  774. package/src/transition/__tests__/useCSSTransition.tsx +0 -190
  775. package/src/transition/__tests__/useCollapseTransition.tsx +0 -316
  776. package/src/transition/__tests__/useCrossFadeTransition.tsx +0 -229
  777. package/src/transition/__tests__/useMaxWidthTransition.tsx +0 -123
  778. package/src/transition/__tests__/useScaleTransition.tsx +0 -212
  779. package/src/transition/__tests__/useTransition.tsx +0 -569
  780. package/src/transition/__tests__/utils.ts +0 -620
  781. package/src/transition/_transition.scss +0 -365
  782. package/src/tree/__tests__/Tree.tsx +0 -735
  783. package/src/tree/__tests__/TreeGroup.tsx +0 -76
  784. package/src/tree/__tests__/TreeItemExpander.tsx +0 -74
  785. package/src/tree/__tests__/__snapshots__/Tree.tsx.snap +0 -3618
  786. package/src/tree/__tests__/__snapshots__/TreeItemExpander.tsx.snap +0 -11
  787. package/src/tree/__tests__/utils.ts +0 -98
  788. package/src/tree/_tree.scss +0 -176
  789. package/src/typography/__tests__/SrOnly.tsx +0 -43
  790. package/src/typography/__tests__/TextContainer.tsx +0 -45
  791. package/src/typography/__tests__/Typography.tsx +0 -87
  792. package/src/typography/__tests__/WritingDirectionProvider.node.tsx +0 -27
  793. package/src/typography/__tests__/WritingDirectionProvider.tsx +0 -119
  794. package/src/typography/__tests__/__snapshots__/SrOnly.tsx.snap +0 -56
  795. package/src/typography/__tests__/__snapshots__/TextContainer.tsx.snap +0 -29
  796. package/src/typography/__tests__/__snapshots__/Typography.tsx.snap +0 -112
  797. package/src/typography/_typography.scss +0 -399
  798. package/src/utils/__tests__/RenderRecursively.tsx +0 -87
  799. package/src/utils/__tests__/__snapshots__/RenderRecursively.tsx.snap +0 -80
  800. package/src/utils/__tests__/applyRef.ts +0 -30
  801. package/src/utils/__tests__/bem.ts +0 -54
  802. package/src/utils/__tests__/getMiddleOfRange.ts +0 -12
  803. package/src/utils/__tests__/getPercentage.ts +0 -104
  804. package/src/utils/__tests__/getRangeDefaultValue.ts +0 -47
  805. package/src/utils/__tests__/getRangeSteps.ts +0 -14
  806. package/src/utils/__tests__/loop.ts +0 -50
  807. package/src/utils/__tests__/nearest.ts +0 -83
  808. package/src/utils/__tests__/parseCssLengthUnit.node.ts +0 -28
  809. package/src/utils/__tests__/parseCssLengthUnit.ts +0 -47
  810. package/src/utils/__tests__/wait.ts +0 -12
  811. package/src/utils/__tests__/withinRange.ts +0 -24
  812. package/src/window-splitter/_window-splitter.scss +0 -143
  813. package/tsconfig.json +0 -19
  814. package/tsconfig.types.json +0 -12
  815. package/tsdoc.json +0 -14
@@ -1,8 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Suspense } from "react";
3
3
  /**
4
- * **Server Component**
5
- *
6
4
  * This is just a convenience component to set the `fallback` to `null`.
7
5
  *
8
6
  * @example Simple Example
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/suspense/NullSuspense.tsx"],"sourcesContent":["import { Suspense, type ReactElement, type ReactNode } from \"react\";\n\n/**\n * @since 6.0.0\n */\nexport interface NullSuspenseProps {\n children: ReactNode;\n}\n\n/**\n * **Server Component**\n *\n * This is just a convenience component to set the `fallback` to `null`.\n *\n * @example Simple Example\n * ```tsx\n * import { NullSuspense } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n * import { lazy } from \"react\";\n *\n * const Component = lazy(() => import('./Some/Path/To/Component'));\n *\n * function Example() {\n * return (\n * <NullSuspense>\n * <Component />\n * </NullSuspense>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function NullSuspense(props: NullSuspenseProps): ReactElement {\n const { children } = props;\n\n return <Suspense fallback={null}>{children}</Suspense>;\n}\n"],"names":["Suspense","NullSuspense","props","children","fallback"],"mappings":";AAAA,SAASA,QAAQ,QAA2C,QAAQ;AASpE;;;;;;;;;;;;;;;;;;;;;;;CAuBC,GACD,OAAO,SAASC,aAAaC,KAAwB;IACnD,MAAM,EAAEC,QAAQ,EAAE,GAAGD;IAErB,qBAAO,KAACF;QAASI,UAAU;kBAAOD;;AACpC"}
1
+ {"version":3,"sources":["../../src/suspense/NullSuspense.tsx"],"sourcesContent":["import { Suspense, type ReactElement, type ReactNode } from \"react\";\n\n/**\n * @since 6.0.0\n */\nexport interface NullSuspenseProps {\n children: ReactNode;\n}\n\n/**\n * This is just a convenience component to set the `fallback` to `null`.\n *\n * @example Simple Example\n * ```tsx\n * import { NullSuspense } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n * import { lazy } from \"react\";\n *\n * const Component = lazy(() => import('./Some/Path/To/Component'));\n *\n * function Example() {\n * return (\n * <NullSuspense>\n * <Component />\n * </NullSuspense>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function NullSuspense(props: NullSuspenseProps): ReactElement {\n const { children } = props;\n\n return <Suspense fallback={null}>{children}</Suspense>;\n}\n"],"names":["Suspense","NullSuspense","props","children","fallback"],"mappings":";AAAA,SAASA,QAAQ,QAA2C,QAAQ;AASpE;;;;;;;;;;;;;;;;;;;;;CAqBC,GACD,OAAO,SAASC,aAAaC,KAAwB;IACnD,MAAM,EAAEC,QAAQ,EAAE,GAAGD;IAErB,qBAAO,KAACF;QAASI,UAAU;kBAAOD;;AACpC"}
@@ -37,9 +37,6 @@ export interface TableCellContentProps extends ButtonHTMLAttributes<HTMLButtonEl
37
37
  hAlign?: TableCellHorizontalAlignment;
38
38
  }
39
39
  /**
40
- * **Server Component**
41
- * This might actually be a client component.
42
- *
43
40
  * This is mostly an internal component since it is automatically used within
44
41
  * the `TableCell` component but this will conditionally wrap the `children`
45
42
  * within an `UnstyledButton` to make a clickable cell. This is really to help
@@ -6,9 +6,6 @@ import { IconRotator } from "../icon/IconRotator.js";
6
6
  import { bem } from "../utils/bem.js";
7
7
  const styles = bem("rmd-table-cell");
8
8
  /**
9
- * **Server Component**
10
- * This might actually be a client component.
11
- *
12
9
  * This is mostly an internal component since it is automatically used within
13
10
  * the `TableCell` component but this will conditionally wrap the `children`
14
11
  * within an `UnstyledButton` to make a clickable cell. This is really to help
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/table/TableCellContent.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { forwardRef, type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport { ButtonUnstyled } from \"../button/ButtonUnstyled.js\";\nimport { IconRotator, type IconRotatorProps } from \"../icon/IconRotator.js\";\nimport { bem } from \"../utils/bem.js\";\nimport { type SortOrder, type TableCellHorizontalAlignment } from \"./types.js\";\n\n/**\n * @since 6.0.0\n */\nexport type TableCellContentsIconRotatorProps = Omit<\n IconRotatorProps,\n \"children\" | \"rotated\"\n>;\n\n/**\n * @since 6.0.0 Extends the `ButtonHTMLAttributes` so the extra props\n * can be passed to the `ButtonUnstyled`\n * @internal\n */\nexport interface TableCellContentProps\n extends ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * The current sort order for this cell. Setting this to `null` will prevent\n * the button from being rendered.\n */\n sortOrder?: SortOrder;\n\n /**\n * This should normally be the `getIcon(\"sort\")`\n */\n icon?: ReactNode;\n\n /** @defaultValue `false` */\n iconAfter?: boolean;\n\n /**\n * Boolean if the icon should be rotated.\n */\n rotated?: boolean;\n\n /**\n * Any additional props to pass to the `IconRotator`.\n */\n iconRotatorProps?: TableCellContentsIconRotatorProps;\n\n /**\n * @since 4.0.3\n * @see {@link TableCellHorizontalAlignment}\n */\n hAlign?: TableCellHorizontalAlignment;\n}\n\nconst styles = bem(\"rmd-table-cell\");\n\n/**\n * **Server Component**\n * This might actually be a client component.\n *\n * This is mostly an internal component since it is automatically used within\n * the `TableCell` component but this will conditionally wrap the `children`\n * within an `UnstyledButton` to make a clickable cell. This is really to help\n * with sort behavior within headers.\n *\n * @internal\n */\nexport const TableCellContent = forwardRef<\n HTMLButtonElement,\n TableCellContentProps\n>(function TableCellContent(props, ref) {\n const {\n icon: propIcon,\n style,\n className,\n sortOrder,\n children,\n rotated: propRotated,\n hAlign = \"left\",\n iconAfter,\n iconRotatorProps,\n ...remaining\n } = props;\n if (!sortOrder || propIcon === null) {\n return <>{children}</>;\n }\n\n let icon: ReactNode = null;\n if (sortOrder !== \"none\") {\n const rotated = propRotated ?? sortOrder === \"descending\";\n\n icon = (\n <IconRotator {...iconRotatorProps} rotated={rotated}>\n {propIcon}\n </IconRotator>\n );\n }\n\n return (\n <ButtonUnstyled\n {...remaining}\n ref={ref}\n style={style}\n className={cnb(\n styles(\"content\", {\n [hAlign]: hAlign !== \"left\",\n }),\n className\n )}\n >\n {!iconAfter && icon}\n {children}\n {iconAfter && icon}\n </ButtonUnstyled>\n );\n});\n"],"names":["cnb","forwardRef","ButtonUnstyled","IconRotator","bem","styles","TableCellContent","props","ref","icon","propIcon","style","className","sortOrder","children","rotated","propRotated","hAlign","iconAfter","iconRotatorProps","remaining"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,UAAU,QAAmD,QAAQ;AAC9E,SAASC,cAAc,QAAQ,8BAA8B;AAC7D,SAASC,WAAW,QAA+B,yBAAyB;AAC5E,SAASC,GAAG,QAAQ,kBAAkB;AAiDtC,MAAMC,SAASD,IAAI;AAEnB;;;;;;;;;;CAUC,GACD,OAAO,MAAME,iCAAmBL,WAG9B,SAASK,iBAAiBC,KAAK,EAAEC,GAAG;IACpC,MAAM,EACJC,MAAMC,QAAQ,EACdC,KAAK,EACLC,SAAS,EACTC,SAAS,EACTC,QAAQ,EACRC,SAASC,WAAW,EACpBC,SAAS,MAAM,EACfC,SAAS,EACTC,gBAAgB,EAChB,GAAGC,WACJ,GAAGb;IACJ,IAAI,CAACM,aAAaH,aAAa,MAAM;QACnC,qBAAO;sBAAGI;;IACZ;IAEA,IAAIL,OAAkB;IACtB,IAAII,cAAc,QAAQ;QACxB,MAAME,UAAUC,eAAeH,cAAc;QAE7CJ,qBACE,KAACN;YAAa,GAAGgB,gBAAgB;YAAEJ,SAASA;sBACzCL;;IAGP;IAEA,qBACE,MAACR;QACE,GAAGkB,SAAS;QACbZ,KAAKA;QACLG,OAAOA;QACPC,WAAWZ,IACTK,OAAO,WAAW;YAChB,CAACY,OAAO,EAAEA,WAAW;QACvB,IACAL;;YAGD,CAACM,aAAaT;YACdK;YACAI,aAAaT;;;AAGpB,GAAG"}
1
+ {"version":3,"sources":["../../src/table/TableCellContent.tsx"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { forwardRef, type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport { ButtonUnstyled } from \"../button/ButtonUnstyled.js\";\nimport { IconRotator, type IconRotatorProps } from \"../icon/IconRotator.js\";\nimport { bem } from \"../utils/bem.js\";\nimport { type SortOrder, type TableCellHorizontalAlignment } from \"./types.js\";\n\n/**\n * @since 6.0.0\n */\nexport type TableCellContentsIconRotatorProps = Omit<\n IconRotatorProps,\n \"children\" | \"rotated\"\n>;\n\n/**\n * @since 6.0.0 Extends the `ButtonHTMLAttributes` so the extra props\n * can be passed to the `ButtonUnstyled`\n * @internal\n */\nexport interface TableCellContentProps\n extends ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * The current sort order for this cell. Setting this to `null` will prevent\n * the button from being rendered.\n */\n sortOrder?: SortOrder;\n\n /**\n * This should normally be the `getIcon(\"sort\")`\n */\n icon?: ReactNode;\n\n /** @defaultValue `false` */\n iconAfter?: boolean;\n\n /**\n * Boolean if the icon should be rotated.\n */\n rotated?: boolean;\n\n /**\n * Any additional props to pass to the `IconRotator`.\n */\n iconRotatorProps?: TableCellContentsIconRotatorProps;\n\n /**\n * @since 4.0.3\n * @see {@link TableCellHorizontalAlignment}\n */\n hAlign?: TableCellHorizontalAlignment;\n}\n\nconst styles = bem(\"rmd-table-cell\");\n\n/**\n * This is mostly an internal component since it is automatically used within\n * the `TableCell` component but this will conditionally wrap the `children`\n * within an `UnstyledButton` to make a clickable cell. This is really to help\n * with sort behavior within headers.\n *\n * @internal\n */\nexport const TableCellContent = forwardRef<\n HTMLButtonElement,\n TableCellContentProps\n>(function TableCellContent(props, ref) {\n const {\n icon: propIcon,\n style,\n className,\n sortOrder,\n children,\n rotated: propRotated,\n hAlign = \"left\",\n iconAfter,\n iconRotatorProps,\n ...remaining\n } = props;\n if (!sortOrder || propIcon === null) {\n return <>{children}</>;\n }\n\n let icon: ReactNode = null;\n if (sortOrder !== \"none\") {\n const rotated = propRotated ?? sortOrder === \"descending\";\n\n icon = (\n <IconRotator {...iconRotatorProps} rotated={rotated}>\n {propIcon}\n </IconRotator>\n );\n }\n\n return (\n <ButtonUnstyled\n {...remaining}\n ref={ref}\n style={style}\n className={cnb(\n styles(\"content\", {\n [hAlign]: hAlign !== \"left\",\n }),\n className\n )}\n >\n {!iconAfter && icon}\n {children}\n {iconAfter && icon}\n </ButtonUnstyled>\n );\n});\n"],"names":["cnb","forwardRef","ButtonUnstyled","IconRotator","bem","styles","TableCellContent","props","ref","icon","propIcon","style","className","sortOrder","children","rotated","propRotated","hAlign","iconAfter","iconRotatorProps","remaining"],"mappings":";AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,UAAU,QAAmD,QAAQ;AAC9E,SAASC,cAAc,QAAQ,8BAA8B;AAC7D,SAASC,WAAW,QAA+B,yBAAyB;AAC5E,SAASC,GAAG,QAAQ,kBAAkB;AAiDtC,MAAMC,SAASD,IAAI;AAEnB;;;;;;;CAOC,GACD,OAAO,MAAME,iCAAmBL,WAG9B,SAASK,iBAAiBC,KAAK,EAAEC,GAAG;IACpC,MAAM,EACJC,MAAMC,QAAQ,EACdC,KAAK,EACLC,SAAS,EACTC,SAAS,EACTC,QAAQ,EACRC,SAASC,WAAW,EACpBC,SAAS,MAAM,EACfC,SAAS,EACTC,gBAAgB,EAChB,GAAGC,WACJ,GAAGb;IACJ,IAAI,CAACM,aAAaH,aAAa,MAAM;QACnC,qBAAO;sBAAGI;;IACZ;IAEA,IAAIL,OAAkB;IACtB,IAAII,cAAc,QAAQ;QACxB,MAAME,UAAUC,eAAeH,cAAc;QAE7CJ,qBACE,KAACN;YAAa,GAAGgB,gBAAgB;YAAEJ,SAASA;sBACzCL;;IAGP;IAEA,qBACE,MAACR;QACE,GAAGkB,SAAS;QACbZ,KAAKA;QACLG,OAAOA;QACPC,WAAWZ,IACTK,OAAO,WAAW;YAChB,CAACY,OAAO,EAAEA,WAAW;QACvB,IACAL;;YAGD,CAACM,aAAaT;YACdK;YACAI,aAAaT;;;AAGpB,GAAG"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { type TableConfig, type TableConfigContext } from "./types.js";
3
2
  /**
4
3
  * An internal hook for getting the current table configuration in child
@@ -53,6 +53,9 @@ export interface BaseTabProps {
53
53
  export interface TabButtonProps extends BaseTabProps, ButtonHTMLAttributes<HTMLButtonElement> {
54
54
  as?: "button";
55
55
  }
56
+ /**
57
+ * @since 6.0.0
58
+ */
56
59
  export interface TabLinkProps extends BaseTabProps, AnchorHTMLAttributes<HTMLAnchorElement> {
57
60
  as: CustomLinkComponent;
58
61
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tabs/Tab.tsx"],"sourcesContent":["\"use client\";\nimport {\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { useElementInteraction } from \"../interaction/useElementInteraction.js\";\nimport { useHigherContrastChildren } from \"../interaction/useHigherContrastChildren.js\";\nimport { type CustomLinkComponent } from \"../link/Link.js\";\nimport { useKeyboardMovementContext } from \"../movement/useKeyboardMovementProvider.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { tab } from \"./tabStyles.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { type useTabs } from \"./useTabs.js\";\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { type TabListProps } from \"./TabList.js\";\n\n/**\n * @since 6.0.0\n */\nexport interface BaseTabProps {\n /**\n * Set this to `true` if the tab is currently active.\n *\n * This is normally provided by the {@link useTabs} hook.\n */\n active: boolean;\n\n /**\n * Set this to `true` if the {@link TabListProps.disableTransition} prop has\n * also been set to `true` to disable an active indicator below the tab when\n * {@link active} is `true`.\n *\n * @defaultValue `false`\n */\n activeIndicator?: boolean;\n\n /**\n * Set this to `true` when rendering the tabs vertically and\n * {@link activeIndicator} has been enabled.\n *\n * @defaultValue !false\n */\n verticalActiveIndicator?: boolean;\n\n /**\n * An optional icon to render with the with the {@link children}. The default\n * behavior will render this icon before the children.\n *\n * @see {@link iconAfter}\n * @see {@link stacked}\n */\n icon?: ReactNode;\n\n /**\n * Set this to `true` to render the {@link icon} after the {@link children}.\n *\n * @defaultValue `false`\n */\n iconAfter?: boolean;\n\n /**\n * Set this to `true` to render the {@link icon} and {@link children} stacked\n * instead of horizontally.\n *\n * @defaultValue `false`\n */\n stacked?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface TabButtonProps\n extends BaseTabProps,\n ButtonHTMLAttributes<HTMLButtonElement> {\n as?: \"button\";\n}\n\nexport interface TabLinkProps\n extends BaseTabProps,\n AnchorHTMLAttributes<HTMLAnchorElement> {\n as: CustomLinkComponent;\n}\n\n/**\n * @since 6.0.0\n */\nexport type TabProps = TabButtonProps | TabLinkProps;\n\n/**\n * **Client Component**\n *\n * This component should usually be used with the `TabsList` component and\n * `useTabs` hook.\n *\n * @see {@link useTabs}\n *\n * @since 6.0.0\n */\nexport function Tab(props: TabProps): ReactElement {\n const {\n id: propId,\n as: Component = \"button\",\n active,\n activeIndicator,\n verticalActiveIndicator,\n icon,\n iconAfter,\n stacked,\n className,\n children: propChildren,\n onBlur,\n onClick,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n onMouseUp,\n onMouseLeave,\n onDragStart,\n onTouchStart,\n onTouchEnd,\n onTouchMove,\n ...remaining\n } = props as TabButtonProps;\n const { disabled } = props as TabButtonProps;\n\n const id = useEnsuredId(propId, \"tab\");\n const { activeDescendantId } = useKeyboardMovementContext();\n const { ripples, handlers } = useElementInteraction({\n onBlur,\n onClick,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n onMouseUp,\n onMouseLeave,\n onDragStart,\n onTouchStart,\n onTouchEnd,\n onTouchMove,\n disabled,\n });\n\n const isLink = Component !== \"button\";\n const children = useHigherContrastChildren(propChildren);\n let buttonOnlyProps: Record<string, unknown> | undefined;\n if (!isLink) {\n buttonOnlyProps = { type: \"button\" };\n }\n\n return (\n <Component\n {...remaining}\n {...buttonOnlyProps}\n {...handlers}\n aria-selected={active}\n id={id}\n role=\"tab\"\n tabIndex={id === activeDescendantId ? 0 : -1}\n className={tab({\n className,\n active,\n isLink,\n stacked: !!icon && stacked,\n disabled,\n reversed: !!icon && iconAfter,\n activeIndicator,\n verticalActiveIndicator,\n })}\n >\n {icon}\n {children}\n {ripples}\n </Component>\n );\n}\n"],"names":["useElementInteraction","useHigherContrastChildren","useKeyboardMovementContext","useEnsuredId","tab","Tab","props","id","propId","as","Component","active","activeIndicator","verticalActiveIndicator","icon","iconAfter","stacked","className","children","propChildren","onBlur","onClick","onKeyDown","onKeyUp","onMouseDown","onMouseUp","onMouseLeave","onDragStart","onTouchStart","onTouchEnd","onTouchMove","remaining","disabled","activeDescendantId","ripples","handlers","isLink","buttonOnlyProps","type","aria-selected","role","tabIndex","reversed"],"mappings":"AAAA;;AAOA,SAASA,qBAAqB,QAAQ,0CAA0C;AAChF,SAASC,yBAAyB,QAAQ,8CAA8C;AAExF,SAASC,0BAA0B,QAAQ,6CAA6C;AACxF,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SAASC,GAAG,QAAQ,iBAAiB;AAgFrC;;;;;;;;;CASC,GACD,OAAO,SAASC,IAAIC,KAAe;IACjC,MAAM,EACJC,IAAIC,MAAM,EACVC,IAAIC,YAAY,QAAQ,EACxBC,MAAM,EACNC,eAAe,EACfC,uBAAuB,EACvBC,IAAI,EACJC,SAAS,EACTC,OAAO,EACPC,SAAS,EACTC,UAAUC,YAAY,EACtBC,MAAM,EACNC,OAAO,EACPC,SAAS,EACTC,OAAO,EACPC,WAAW,EACXC,SAAS,EACTC,YAAY,EACZC,WAAW,EACXC,YAAY,EACZC,UAAU,EACVC,WAAW,EACX,GAAGC,WACJ,GAAGzB;IACJ,MAAM,EAAE0B,QAAQ,EAAE,GAAG1B;IAErB,MAAMC,KAAKJ,aAAaK,QAAQ;IAChC,MAAM,EAAEyB,kBAAkB,EAAE,GAAG/B;IAC/B,MAAM,EAAEgC,OAAO,EAAEC,QAAQ,EAAE,GAAGnC,sBAAsB;QAClDoB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;IACF;IAEA,MAAMI,SAAS1B,cAAc;IAC7B,MAAMQ,WAAWjB,0BAA0BkB;IAC3C,IAAIkB;IACJ,IAAI,CAACD,QAAQ;QACXC,kBAAkB;YAAEC,MAAM;QAAS;IACrC;IAEA,qBACE,MAAC5B;QACE,GAAGqB,SAAS;QACZ,GAAGM,eAAe;QAClB,GAAGF,QAAQ;QACZI,iBAAe5B;QACfJ,IAAIA;QACJiC,MAAK;QACLC,UAAUlC,OAAO0B,qBAAqB,IAAI,CAAC;QAC3ChB,WAAWb,IAAI;YACba;YACAN;YACAyB;YACApB,SAAS,CAAC,CAACF,QAAQE;YACnBgB;YACAU,UAAU,CAAC,CAAC5B,QAAQC;YACpBH;YACAC;QACF;;YAECC;YACAI;YACAgB;;;AAGP"}
1
+ {"version":3,"sources":["../../src/tabs/Tab.tsx"],"sourcesContent":["\"use client\";\nimport {\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { useElementInteraction } from \"../interaction/useElementInteraction.js\";\nimport { useHigherContrastChildren } from \"../interaction/useHigherContrastChildren.js\";\nimport { type CustomLinkComponent } from \"../link/Link.js\";\nimport { useKeyboardMovementContext } from \"../movement/useKeyboardMovementProvider.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { tab } from \"./tabStyles.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { type useTabs } from \"./useTabs.js\";\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { type TabListProps } from \"./TabList.js\";\n\n/**\n * @since 6.0.0\n */\nexport interface BaseTabProps {\n /**\n * Set this to `true` if the tab is currently active.\n *\n * This is normally provided by the {@link useTabs} hook.\n */\n active: boolean;\n\n /**\n * Set this to `true` if the {@link TabListProps.disableTransition} prop has\n * also been set to `true` to disable an active indicator below the tab when\n * {@link active} is `true`.\n *\n * @defaultValue `false`\n */\n activeIndicator?: boolean;\n\n /**\n * Set this to `true` when rendering the tabs vertically and\n * {@link activeIndicator} has been enabled.\n *\n * @defaultValue !false\n */\n verticalActiveIndicator?: boolean;\n\n /**\n * An optional icon to render with the with the {@link children}. The default\n * behavior will render this icon before the children.\n *\n * @see {@link iconAfter}\n * @see {@link stacked}\n */\n icon?: ReactNode;\n\n /**\n * Set this to `true` to render the {@link icon} after the {@link children}.\n *\n * @defaultValue `false`\n */\n iconAfter?: boolean;\n\n /**\n * Set this to `true` to render the {@link icon} and {@link children} stacked\n * instead of horizontally.\n *\n * @defaultValue `false`\n */\n stacked?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface TabButtonProps\n extends BaseTabProps,\n ButtonHTMLAttributes<HTMLButtonElement> {\n as?: \"button\";\n}\n\n/**\n * @since 6.0.0\n */\nexport interface TabLinkProps\n extends BaseTabProps,\n AnchorHTMLAttributes<HTMLAnchorElement> {\n as: CustomLinkComponent;\n}\n\n/**\n * @since 6.0.0\n */\nexport type TabProps = TabButtonProps | TabLinkProps;\n\n/**\n * **Client Component**\n *\n * This component should usually be used with the `TabsList` component and\n * `useTabs` hook.\n *\n * @see {@link useTabs}\n *\n * @since 6.0.0\n */\nexport function Tab(props: TabProps): ReactElement {\n const {\n id: propId,\n as: Component = \"button\",\n active,\n activeIndicator,\n verticalActiveIndicator,\n icon,\n iconAfter,\n stacked,\n className,\n children: propChildren,\n onBlur,\n onClick,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n onMouseUp,\n onMouseLeave,\n onDragStart,\n onTouchStart,\n onTouchEnd,\n onTouchMove,\n ...remaining\n } = props as TabButtonProps;\n const { disabled } = props as TabButtonProps;\n\n const id = useEnsuredId(propId, \"tab\");\n const { activeDescendantId } = useKeyboardMovementContext();\n const { ripples, handlers } = useElementInteraction({\n onBlur,\n onClick,\n onKeyDown,\n onKeyUp,\n onMouseDown,\n onMouseUp,\n onMouseLeave,\n onDragStart,\n onTouchStart,\n onTouchEnd,\n onTouchMove,\n disabled,\n });\n\n const isLink = Component !== \"button\";\n const children = useHigherContrastChildren(propChildren);\n let buttonOnlyProps: Record<string, unknown> | undefined;\n if (!isLink) {\n buttonOnlyProps = { type: \"button\" };\n }\n\n return (\n <Component\n {...remaining}\n {...buttonOnlyProps}\n {...handlers}\n aria-selected={active}\n id={id}\n role=\"tab\"\n tabIndex={id === activeDescendantId ? 0 : -1}\n className={tab({\n className,\n active,\n isLink,\n stacked: !!icon && stacked,\n disabled,\n reversed: !!icon && iconAfter,\n activeIndicator,\n verticalActiveIndicator,\n })}\n >\n {icon}\n {children}\n {ripples}\n </Component>\n );\n}\n"],"names":["useElementInteraction","useHigherContrastChildren","useKeyboardMovementContext","useEnsuredId","tab","Tab","props","id","propId","as","Component","active","activeIndicator","verticalActiveIndicator","icon","iconAfter","stacked","className","children","propChildren","onBlur","onClick","onKeyDown","onKeyUp","onMouseDown","onMouseUp","onMouseLeave","onDragStart","onTouchStart","onTouchEnd","onTouchMove","remaining","disabled","activeDescendantId","ripples","handlers","isLink","buttonOnlyProps","type","aria-selected","role","tabIndex","reversed"],"mappings":"AAAA;;AAOA,SAASA,qBAAqB,QAAQ,0CAA0C;AAChF,SAASC,yBAAyB,QAAQ,8CAA8C;AAExF,SAASC,0BAA0B,QAAQ,6CAA6C;AACxF,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SAASC,GAAG,QAAQ,iBAAiB;AAmFrC;;;;;;;;;CASC,GACD,OAAO,SAASC,IAAIC,KAAe;IACjC,MAAM,EACJC,IAAIC,MAAM,EACVC,IAAIC,YAAY,QAAQ,EACxBC,MAAM,EACNC,eAAe,EACfC,uBAAuB,EACvBC,IAAI,EACJC,SAAS,EACTC,OAAO,EACPC,SAAS,EACTC,UAAUC,YAAY,EACtBC,MAAM,EACNC,OAAO,EACPC,SAAS,EACTC,OAAO,EACPC,WAAW,EACXC,SAAS,EACTC,YAAY,EACZC,WAAW,EACXC,YAAY,EACZC,UAAU,EACVC,WAAW,EACX,GAAGC,WACJ,GAAGzB;IACJ,MAAM,EAAE0B,QAAQ,EAAE,GAAG1B;IAErB,MAAMC,KAAKJ,aAAaK,QAAQ;IAChC,MAAM,EAAEyB,kBAAkB,EAAE,GAAG/B;IAC/B,MAAM,EAAEgC,OAAO,EAAEC,QAAQ,EAAE,GAAGnC,sBAAsB;QAClDoB;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAE;IACF;IAEA,MAAMI,SAAS1B,cAAc;IAC7B,MAAMQ,WAAWjB,0BAA0BkB;IAC3C,IAAIkB;IACJ,IAAI,CAACD,QAAQ;QACXC,kBAAkB;YAAEC,MAAM;QAAS;IACrC;IAEA,qBACE,MAAC5B;QACE,GAAGqB,SAAS;QACZ,GAAGM,eAAe;QAClB,GAAGF,QAAQ;QACZI,iBAAe5B;QACfJ,IAAIA;QACJiC,MAAK;QACLC,UAAUlC,OAAO0B,qBAAqB,IAAI,CAAC;QAC3ChB,WAAWb,IAAI;YACba;YACAN;YACAyB;YACApB,SAAS,CAAC,CAACF,QAAQE;YACnBgB;YACAU,UAAU,CAAC,CAAC5B,QAAQC;YACpBH;YACAC;QACF;;YAECC;YACAI;YACAgB;;;AAGP"}
@@ -41,6 +41,7 @@ import { getTabListScrollToOptions } from "./utils.js";
41
41
  },
42
42
  className: tabListScrollButtonContainer({
43
43
  forward,
44
+ vertical,
44
45
  className
45
46
  }),
46
47
  children: /*#__PURE__*/ _jsx(Button, {
@@ -50,7 +51,10 @@ import { getTabListScrollToOptions } from "./utils.js";
50
51
  buttonType: buttonType,
51
52
  disabled: propDisabled || disabled,
52
53
  ...buttonProps,
53
- className: tabListScrollButton(buttonProps),
54
+ className: tabListScrollButton({
55
+ className: buttonProps?.className,
56
+ vertical
57
+ }),
54
58
  onClick: (event)=>{
55
59
  buttonProps?.onClick?.(event);
56
60
  const container = root.current;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tabs/TabListScrollButton.tsx"],"sourcesContent":["\"use client\";\nimport {\n forwardRef,\n useCallback,\n useRef,\n useState,\n type HTMLAttributes,\n} from \"react\";\nimport { Button, type ButtonProps } from \"../button/Button.js\";\nimport { type ButtonClassNameThemeOptions } from \"../button/buttonStyles.js\";\nimport { getIcon } from \"../icon/iconConfig.js\";\nimport { type PropsWithRef } from \"../types.js\";\nimport { useDir } from \"../typography/WritingDirectionProvider.js\";\nimport { useIntersectionObserver } from \"../useIntersectionObserver.js\";\nimport { applyRef } from \"../utils/applyRef.js\";\nimport {\n tabListScrollButton,\n tabListScrollButtonContainer,\n} from \"./tabListScrollButtonStyles.js\";\nimport {\n getTabListScrollToOptions,\n type GetTabListScrollToOptions,\n} from \"./utils.js\";\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport interface BaseTabListScrollButtonProps\n extends HTMLAttributes<HTMLDivElement>,\n ButtonClassNameThemeOptions {\n buttonProps?: PropsWithRef<ButtonProps, HTMLButtonElement>;\n\n /** @defaultValue `false` */\n disableTransition?: boolean;\n\n /** @defaultValue {@link getTabListScrollToOptions} */\n getScrollToOptions?: GetTabListScrollToOptions;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport interface TabListScrollButtonProps extends BaseTabListScrollButtonProps {\n type: \"back\" | \"forward\";\n /** @defaultValue `false` */\n vertical?: boolean;\n}\n\n/**\n * **Client Component**\n *\n * @internal\n * @since 6.0.0\n */\nexport const TabListScrollButton = forwardRef<\n HTMLDivElement,\n TabListScrollButtonProps\n>(function TabListScrollButton(props, ref) {\n const {\n \"aria-label\": ariaLabel,\n className,\n buttonProps,\n type,\n theme,\n themeType,\n buttonType = \"icon\",\n disabled: propDisabled,\n children: propChildren,\n getScrollToOptions = getTabListScrollToOptions,\n vertical = false,\n disableTransition = false,\n ...remaining\n } = props;\n\n const forward = type === \"forward\";\n const iconButton = buttonType === \"icon\";\n const icon = getIcon(type);\n const children = propChildren || icon;\n\n const root = useRef<HTMLElement | null>(null);\n const isRTL = useDir().dir === \"rtl\";\n const [disabled, setDisabled] = useState(!forward);\n const nodeRef = useIntersectionObserver({\n root,\n onUpdate: useCallback(([entry]) => {\n setDisabled(entry.intersectionRatio === 1);\n }, []),\n });\n\n return (\n <>\n {!forward && <span ref={nodeRef} />}\n <div\n {...remaining}\n ref={(instance) => {\n applyRef(instance, ref);\n root.current = instance?.parentElement || null;\n }}\n className={tabListScrollButtonContainer({ forward, className })}\n >\n <Button\n aria-label={ariaLabel || (iconButton ? type : undefined)}\n theme={theme}\n themeType={themeType}\n buttonType={buttonType}\n disabled={propDisabled || disabled}\n {...buttonProps}\n className={tabListScrollButton(buttonProps)}\n onClick={(event) => {\n buttonProps?.onClick?.(event);\n const container = root.current;\n if (!container) {\n return;\n }\n\n container.scrollTo(\n getScrollToOptions({\n isRTL,\n animate: !disableTransition,\n vertical,\n container,\n increment: forward,\n })\n );\n }}\n >\n {children}\n </Button>\n </div>\n {forward && <span ref={nodeRef} />}\n </>\n );\n});\n"],"names":["forwardRef","useCallback","useRef","useState","Button","getIcon","useDir","useIntersectionObserver","applyRef","tabListScrollButton","tabListScrollButtonContainer","getTabListScrollToOptions","TabListScrollButton","props","ref","ariaLabel","className","buttonProps","type","theme","themeType","buttonType","disabled","propDisabled","children","propChildren","getScrollToOptions","vertical","disableTransition","remaining","forward","iconButton","icon","root","isRTL","dir","setDisabled","nodeRef","onUpdate","entry","intersectionRatio","span","div","instance","current","parentElement","aria-label","undefined","onClick","event","container","scrollTo","animate","increment"],"mappings":"AAAA;;AACA,SACEA,UAAU,EACVC,WAAW,EACXC,MAAM,EACNC,QAAQ,QAEH,QAAQ;AACf,SAASC,MAAM,QAA0B,sBAAsB;AAE/D,SAASC,OAAO,QAAQ,wBAAwB;AAEhD,SAASC,MAAM,QAAQ,4CAA4C;AACnE,SAASC,uBAAuB,QAAQ,gCAAgC;AACxE,SAASC,QAAQ,QAAQ,uBAAuB;AAChD,SACEC,mBAAmB,EACnBC,4BAA4B,QACvB,iCAAiC;AACxC,SACEC,yBAAyB,QAEpB,aAAa;AA4BpB;;;;;CAKC,GACD,OAAO,MAAMC,oCAAsBZ,WAGjC,SAASY,oBAAoBC,KAAK,EAAEC,GAAG;IACvC,MAAM,EACJ,cAAcC,SAAS,EACvBC,SAAS,EACTC,WAAW,EACXC,IAAI,EACJC,KAAK,EACLC,SAAS,EACTC,aAAa,MAAM,EACnBC,UAAUC,YAAY,EACtBC,UAAUC,YAAY,EACtBC,qBAAqBf,yBAAyB,EAC9CgB,WAAW,KAAK,EAChBC,oBAAoB,KAAK,EACzB,GAAGC,WACJ,GAAGhB;IAEJ,MAAMiB,UAAUZ,SAAS;IACzB,MAAMa,aAAaV,eAAe;IAClC,MAAMW,OAAO3B,QAAQa;IACrB,MAAMM,WAAWC,gBAAgBO;IAEjC,MAAMC,OAAO/B,OAA2B;IACxC,MAAMgC,QAAQ5B,SAAS6B,GAAG,KAAK;IAC/B,MAAM,CAACb,UAAUc,YAAY,GAAGjC,SAAS,CAAC2B;IAC1C,MAAMO,UAAU9B,wBAAwB;QACtC0B;QACAK,UAAUrC,YAAY,CAAC,CAACsC,MAAM;YAC5BH,YAAYG,MAAMC,iBAAiB,KAAK;QAC1C,GAAG,EAAE;IACP;IAEA,qBACE;;YACG,CAACV,yBAAW,KAACW;gBAAK3B,KAAKuB;;0BACxB,KAACK;gBACE,GAAGb,SAAS;gBACbf,KAAK,CAAC6B;oBACJnC,SAASmC,UAAU7B;oBACnBmB,KAAKW,OAAO,GAAGD,UAAUE,iBAAiB;gBAC5C;gBACA7B,WAAWN,6BAA6B;oBAAEoB;oBAASd;gBAAU;0BAE7D,cAAA,KAACZ;oBACC0C,cAAY/B,aAAcgB,CAAAA,aAAab,OAAO6B,SAAQ;oBACtD5B,OAAOA;oBACPC,WAAWA;oBACXC,YAAYA;oBACZC,UAAUC,gBAAgBD;oBACzB,GAAGL,WAAW;oBACfD,WAAWP,oBAAoBQ;oBAC/B+B,SAAS,CAACC;wBACRhC,aAAa+B,UAAUC;wBACvB,MAAMC,YAAYjB,KAAKW,OAAO;wBAC9B,IAAI,CAACM,WAAW;4BACd;wBACF;wBAEAA,UAAUC,QAAQ,CAChBzB,mBAAmB;4BACjBQ;4BACAkB,SAAS,CAACxB;4BACVD;4BACAuB;4BACAG,WAAWvB;wBACb;oBAEJ;8BAECN;;;YAGJM,yBAAW,KAACW;gBAAK3B,KAAKuB;;;;AAG7B,GAAG"}
1
+ {"version":3,"sources":["../../src/tabs/TabListScrollButton.tsx"],"sourcesContent":["\"use client\";\nimport {\n forwardRef,\n useCallback,\n useRef,\n useState,\n type HTMLAttributes,\n} from \"react\";\nimport { Button, type ButtonProps } from \"../button/Button.js\";\nimport { type ButtonClassNameThemeOptions } from \"../button/buttonStyles.js\";\nimport { getIcon } from \"../icon/iconConfig.js\";\nimport { type PropsWithRef } from \"../types.js\";\nimport { useDir } from \"../typography/WritingDirectionProvider.js\";\nimport { useIntersectionObserver } from \"../useIntersectionObserver.js\";\nimport { applyRef } from \"../utils/applyRef.js\";\nimport {\n tabListScrollButton,\n tabListScrollButtonContainer,\n} from \"./tabListScrollButtonStyles.js\";\nimport {\n getTabListScrollToOptions,\n type GetTabListScrollToOptions,\n} from \"./utils.js\";\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport interface BaseTabListScrollButtonProps\n extends HTMLAttributes<HTMLDivElement>,\n ButtonClassNameThemeOptions {\n buttonProps?: PropsWithRef<ButtonProps, HTMLButtonElement>;\n\n /** @defaultValue `false` */\n disableTransition?: boolean;\n\n /** @defaultValue {@link getTabListScrollToOptions} */\n getScrollToOptions?: GetTabListScrollToOptions;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport interface TabListScrollButtonProps extends BaseTabListScrollButtonProps {\n type: \"back\" | \"forward\";\n /** @defaultValue `false` */\n vertical?: boolean;\n}\n\n/**\n * **Client Component**\n *\n * @internal\n * @since 6.0.0\n */\nexport const TabListScrollButton = forwardRef<\n HTMLDivElement,\n TabListScrollButtonProps\n>(function TabListScrollButton(props, ref) {\n const {\n \"aria-label\": ariaLabel,\n className,\n buttonProps,\n type,\n theme,\n themeType,\n buttonType = \"icon\",\n disabled: propDisabled,\n children: propChildren,\n getScrollToOptions = getTabListScrollToOptions,\n vertical = false,\n disableTransition = false,\n ...remaining\n } = props;\n\n const forward = type === \"forward\";\n const iconButton = buttonType === \"icon\";\n const icon = getIcon(type);\n const children = propChildren || icon;\n\n const root = useRef<HTMLElement | null>(null);\n const isRTL = useDir().dir === \"rtl\";\n const [disabled, setDisabled] = useState(!forward);\n const nodeRef = useIntersectionObserver({\n root,\n onUpdate: useCallback(([entry]) => {\n setDisabled(entry.intersectionRatio === 1);\n }, []),\n });\n\n return (\n <>\n {!forward && <span ref={nodeRef} />}\n <div\n {...remaining}\n ref={(instance) => {\n applyRef(instance, ref);\n root.current = instance?.parentElement || null;\n }}\n className={tabListScrollButtonContainer({\n forward,\n vertical,\n className,\n })}\n >\n <Button\n aria-label={ariaLabel || (iconButton ? type : undefined)}\n theme={theme}\n themeType={themeType}\n buttonType={buttonType}\n disabled={propDisabled || disabled}\n {...buttonProps}\n className={tabListScrollButton({\n className: buttonProps?.className,\n vertical,\n })}\n onClick={(event) => {\n buttonProps?.onClick?.(event);\n const container = root.current;\n if (!container) {\n return;\n }\n\n container.scrollTo(\n getScrollToOptions({\n isRTL,\n animate: !disableTransition,\n vertical,\n container,\n increment: forward,\n })\n );\n }}\n >\n {children}\n </Button>\n </div>\n {forward && <span ref={nodeRef} />}\n </>\n );\n});\n"],"names":["forwardRef","useCallback","useRef","useState","Button","getIcon","useDir","useIntersectionObserver","applyRef","tabListScrollButton","tabListScrollButtonContainer","getTabListScrollToOptions","TabListScrollButton","props","ref","ariaLabel","className","buttonProps","type","theme","themeType","buttonType","disabled","propDisabled","children","propChildren","getScrollToOptions","vertical","disableTransition","remaining","forward","iconButton","icon","root","isRTL","dir","setDisabled","nodeRef","onUpdate","entry","intersectionRatio","span","div","instance","current","parentElement","aria-label","undefined","onClick","event","container","scrollTo","animate","increment"],"mappings":"AAAA;;AACA,SACEA,UAAU,EACVC,WAAW,EACXC,MAAM,EACNC,QAAQ,QAEH,QAAQ;AACf,SAASC,MAAM,QAA0B,sBAAsB;AAE/D,SAASC,OAAO,QAAQ,wBAAwB;AAEhD,SAASC,MAAM,QAAQ,4CAA4C;AACnE,SAASC,uBAAuB,QAAQ,gCAAgC;AACxE,SAASC,QAAQ,QAAQ,uBAAuB;AAChD,SACEC,mBAAmB,EACnBC,4BAA4B,QACvB,iCAAiC;AACxC,SACEC,yBAAyB,QAEpB,aAAa;AA4BpB;;;;;CAKC,GACD,OAAO,MAAMC,oCAAsBZ,WAGjC,SAASY,oBAAoBC,KAAK,EAAEC,GAAG;IACvC,MAAM,EACJ,cAAcC,SAAS,EACvBC,SAAS,EACTC,WAAW,EACXC,IAAI,EACJC,KAAK,EACLC,SAAS,EACTC,aAAa,MAAM,EACnBC,UAAUC,YAAY,EACtBC,UAAUC,YAAY,EACtBC,qBAAqBf,yBAAyB,EAC9CgB,WAAW,KAAK,EAChBC,oBAAoB,KAAK,EACzB,GAAGC,WACJ,GAAGhB;IAEJ,MAAMiB,UAAUZ,SAAS;IACzB,MAAMa,aAAaV,eAAe;IAClC,MAAMW,OAAO3B,QAAQa;IACrB,MAAMM,WAAWC,gBAAgBO;IAEjC,MAAMC,OAAO/B,OAA2B;IACxC,MAAMgC,QAAQ5B,SAAS6B,GAAG,KAAK;IAC/B,MAAM,CAACb,UAAUc,YAAY,GAAGjC,SAAS,CAAC2B;IAC1C,MAAMO,UAAU9B,wBAAwB;QACtC0B;QACAK,UAAUrC,YAAY,CAAC,CAACsC,MAAM;YAC5BH,YAAYG,MAAMC,iBAAiB,KAAK;QAC1C,GAAG,EAAE;IACP;IAEA,qBACE;;YACG,CAACV,yBAAW,KAACW;gBAAK3B,KAAKuB;;0BACxB,KAACK;gBACE,GAAGb,SAAS;gBACbf,KAAK,CAAC6B;oBACJnC,SAASmC,UAAU7B;oBACnBmB,KAAKW,OAAO,GAAGD,UAAUE,iBAAiB;gBAC5C;gBACA7B,WAAWN,6BAA6B;oBACtCoB;oBACAH;oBACAX;gBACF;0BAEA,cAAA,KAACZ;oBACC0C,cAAY/B,aAAcgB,CAAAA,aAAab,OAAO6B,SAAQ;oBACtD5B,OAAOA;oBACPC,WAAWA;oBACXC,YAAYA;oBACZC,UAAUC,gBAAgBD;oBACzB,GAAGL,WAAW;oBACfD,WAAWP,oBAAoB;wBAC7BO,WAAWC,aAAaD;wBACxBW;oBACF;oBACAqB,SAAS,CAACC;wBACRhC,aAAa+B,UAAUC;wBACvB,MAAMC,YAAYjB,KAAKW,OAAO;wBAC9B,IAAI,CAACM,WAAW;4BACd;wBACF;wBAEAA,UAAUC,QAAQ,CAChBzB,mBAAmB;4BACjBQ;4BACAkB,SAAS,CAACxB;4BACVD;4BACAuB;4BACAG,WAAWvB;wBACb;oBAEJ;8BAECN;;;YAGJM,yBAAW,KAACW;gBAAK3B,KAAKuB;;;;AAG7B,GAAG"}
@@ -17,8 +17,9 @@ $disable-tablist-indicator: false !default;
17
17
  $disable-tablist-hidden-scrollbar: false !default;
18
18
  $disable-tablist-scroll-button: false !default;
19
19
  $disable-tablist-active-indicator-transition: false !default;
20
+ $disable-tablist-scroll-button-vertical: $disable-tablist-vertical !default;
20
21
  $disable-indicator: false !default;
21
- $disable-indicator-vertical: false !default;
22
+ $disable-indicator-vertical: $disable-tablist-vertical !default;
22
23
 
23
24
  $typography: map.remove(typography.$button-styles, line-height) !default;
24
25
  $gap: icon.$spacing !default;
@@ -133,7 +134,7 @@ $variables: (
133
134
  // make sure it can enable scrollbars in flex/grid containers
134
135
  max-width: 100%;
135
136
  outline: none;
136
- overflow-x: auto;
137
+ overflow: auto;
137
138
  position: relative;
138
139
 
139
140
  &--full-width {
@@ -172,6 +173,7 @@ $variables: (
172
173
  display: inline-flex;
173
174
  flex-shrink: 0;
174
175
  justify-content: center;
176
+ max-width: $max-width;
175
177
  position: sticky;
176
178
  z-index: $tablist-scroller-z-index;
177
179
 
@@ -183,10 +185,26 @@ $variables: (
183
185
  @include utils.auto-rtl(right, 0);
184
186
  }
185
187
 
188
+ @if not $disable-tablist-scroll-button-vertical {
189
+ &--above {
190
+ top: 0;
191
+ }
192
+
193
+ &--below {
194
+ bottom: 0;
195
+ }
196
+ }
197
+
186
198
  &__button {
187
199
  @include utils.rtl {
188
200
  transform: rotate(180deg);
189
201
  }
202
+
203
+ @if not $disable-tablist-scroll-button-vertical {
204
+ &--v {
205
+ transform: rotate(90deg);
206
+ }
207
+ }
190
208
  }
191
209
  }
192
210
  }
@@ -205,9 +223,9 @@ $variables: (
205
223
  display: inline-flex;
206
224
  flex: 1 1 auto;
207
225
  gap: $gap;
208
- height: $height;
209
226
  justify-content: center;
210
227
  max-width: $max-width;
228
+ min-height: $height;
211
229
  min-width: $min-width;
212
230
  padding: 0 $horizontal-padding;
213
231
  transition: color $transition-duration $transition-timing-function;
@@ -4,6 +4,7 @@
4
4
  export interface TabListScrollButtonContainerClassNameOptions {
5
5
  className?: string;
6
6
  forward: boolean;
7
+ vertical?: boolean;
7
8
  }
8
9
  /**
9
10
  * @since 6.0.0
@@ -14,6 +15,7 @@ export declare function tabListScrollButtonContainer(options: TabListScrollButto
14
15
  */
15
16
  export interface TabListScrollButtonClassNameOptions {
16
17
  className?: string;
18
+ vertical?: boolean;
17
19
  }
18
20
  /**
19
21
  * @since 6.0.0
@@ -4,17 +4,21 @@ const styles = bem("rmd-tablist-button");
4
4
  /**
5
5
  * @since 6.0.0
6
6
  */ export function tabListScrollButtonContainer(options) {
7
- const { forward, className } = options;
7
+ const { forward, vertical, className } = options;
8
8
  return cnb(styles({
9
- left: !forward,
10
- right: forward
9
+ left: !vertical && !forward,
10
+ right: !vertical && forward,
11
+ above: vertical && !forward,
12
+ below: vertical && forward
11
13
  }), className);
12
14
  }
13
15
  /**
14
16
  * @since 6.0.0
15
17
  */ export function tabListScrollButton(options = {}) {
16
- const { className } = options;
17
- return cnb(styles("button"), className);
18
+ const { className, vertical } = options;
19
+ return cnb(styles("button", {
20
+ v: vertical
21
+ }), className);
18
22
  }
19
23
 
20
24
  //# sourceMappingURL=tabListScrollButtonStyles.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tabs/tabListScrollButtonStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-tablist-button\");\n\n/**\n * @since 6.0.0\n */\nexport interface TabListScrollButtonContainerClassNameOptions {\n className?: string;\n forward: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function tabListScrollButtonContainer(\n options: TabListScrollButtonContainerClassNameOptions\n): string {\n const { forward, className } = options;\n\n return cnb(\n styles({\n left: !forward,\n right: forward,\n }),\n className\n );\n}\n\n/**\n * @since 6.0.0\n */\nexport interface TabListScrollButtonClassNameOptions {\n className?: string;\n}\n\n/**\n * @since 6.0.0\n */\nexport function tabListScrollButton(\n options: TabListScrollButtonClassNameOptions = {}\n): string {\n const { className } = options;\n\n return cnb(styles(\"button\"), className);\n}\n"],"names":["cnb","bem","styles","tabListScrollButtonContainer","options","forward","className","left","right","tabListScrollButton"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAUnB;;CAEC,GACD,OAAO,SAASE,6BACdC,OAAqD;IAErD,MAAM,EAAEC,OAAO,EAAEC,SAAS,EAAE,GAAGF;IAE/B,OAAOJ,IACLE,OAAO;QACLK,MAAM,CAACF;QACPG,OAAOH;IACT,IACAC;AAEJ;AASA;;CAEC,GACD,OAAO,SAASG,oBACdL,UAA+C,CAAC,CAAC;IAEjD,MAAM,EAAEE,SAAS,EAAE,GAAGF;IAEtB,OAAOJ,IAAIE,OAAO,WAAWI;AAC/B"}
1
+ {"version":3,"sources":["../../src/tabs/tabListScrollButtonStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { bem } from \"../utils/bem.js\";\n\nconst styles = bem(\"rmd-tablist-button\");\n\n/**\n * @since 6.0.0\n */\nexport interface TabListScrollButtonContainerClassNameOptions {\n className?: string;\n forward: boolean;\n vertical?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function tabListScrollButtonContainer(\n options: TabListScrollButtonContainerClassNameOptions\n): string {\n const { forward, vertical, className } = options;\n\n return cnb(\n styles({\n left: !vertical && !forward,\n right: !vertical && forward,\n above: vertical && !forward,\n below: vertical && forward,\n }),\n className\n );\n}\n\n/**\n * @since 6.0.0\n */\nexport interface TabListScrollButtonClassNameOptions {\n className?: string;\n vertical?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function tabListScrollButton(\n options: TabListScrollButtonClassNameOptions = {}\n): string {\n const { className, vertical } = options;\n\n return cnb(styles(\"button\", { v: vertical }), className);\n}\n"],"names":["cnb","bem","styles","tabListScrollButtonContainer","options","forward","vertical","className","left","right","above","below","tabListScrollButton","v"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,GAAG,QAAQ,kBAAkB;AAEtC,MAAMC,SAASD,IAAI;AAWnB;;CAEC,GACD,OAAO,SAASE,6BACdC,OAAqD;IAErD,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,SAAS,EAAE,GAAGH;IAEzC,OAAOJ,IACLE,OAAO;QACLM,MAAM,CAACF,YAAY,CAACD;QACpBI,OAAO,CAACH,YAAYD;QACpBK,OAAOJ,YAAY,CAACD;QACpBM,OAAOL,YAAYD;IACrB,IACAE;AAEJ;AAUA;;CAEC,GACD,OAAO,SAASK,oBACdR,UAA+C,CAAC,CAAC;IAEjD,MAAM,EAAEG,SAAS,EAAED,QAAQ,EAAE,GAAGF;IAEhC,OAAOJ,IAAIE,OAAO,UAAU;QAAEW,GAAGP;IAAS,IAAIC;AAChD"}
@@ -37,11 +37,13 @@ export interface TabListHookReturnValue {
37
37
  ref: RefObject<HTMLDivElement>;
38
38
  type: "back";
39
39
  vertical: boolean;
40
+ disableTransition?: boolean;
40
41
  };
41
42
  forwardProps: {
42
43
  ref: RefObject<HTMLDivElement>;
43
44
  type: "forward";
44
45
  vertical: boolean;
46
+ disableTransition?: boolean;
45
47
  };
46
48
  }
47
49
  /**
@@ -117,12 +117,14 @@ const noop = ()=>{
117
117
  backwardProps: {
118
118
  ref: backwardRef,
119
119
  type: "back",
120
- vertical
120
+ vertical,
121
+ disableTransition
121
122
  },
122
123
  forwardProps: {
123
124
  ref: forwardRef,
124
125
  type: "forward",
125
- vertical
126
+ vertical,
127
+ disableTransition
126
128
  },
127
129
  movementContext
128
130
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tabs/useTabList.ts"],"sourcesContent":["\"use client\";\nimport type {\n CSSProperties,\n FocusEventHandler,\n KeyboardEventHandler,\n MouseEventHandler,\n Ref,\n RefObject,\n} from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\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 { getTabRoleOnly, scrollTabIntoView } from \"./utils.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-tab-size\"?: string;\n \"--rmd-tab-offset\"?: string | number;\n \"--rmd-tab-indicator-background\"?: string;\n }\n}\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: boolean;\n activationMode: \"manual\" | \"automatic\";\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 };\n forwardProps: {\n ref: RefObject<HTMLDivElement>;\n type: \"forward\";\n vertical: boolean;\n };\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\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,\n onUpdate: useCallback(\n (entry) => {\n // this is kind of hacky -- the styles should update when switching between\n // RTL, but the RTL state isn't required for any styles. Just reference it\n // so that the hooks eslint rule doesn't show a warning...\n isRTL;\n\n const activeTab = getTabRoleOnly(entry.target)[activeIndex];\n if (!activeTab) {\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 [activeIndex, isRTL, vertical]\n ),\n });\n const forwardRef = useRef<HTMLDivElement>(null);\n const backwardRef = useRef<HTMLDivElement>(null);\n const { movementProps, movementContext } = useKeyboardMovementProvider({\n onClick(event) {\n onClick(event);\n if (event.isPropagationStopped() || !(event.target instanceof Element)) {\n return;\n }\n\n const clickedTab = event.target.closest(\"[role='tab']\");\n const tabs = getTabRoleOnly(event.currentTarget);\n const i = tabs.findIndex((tab) => tab === clickedTab);\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 ref: tabListRef,\n style: {\n ...style,\n ...(disableTransition ? undefined : indicatorStyles),\n },\n ...movementProps,\n },\n backwardProps: {\n ref: backwardRef,\n type: \"back\",\n vertical,\n },\n forwardProps: {\n ref: forwardRef,\n type: \"forward\",\n vertical,\n },\n movementContext,\n };\n}\n"],"names":["useCallback","useEffect","useRef","useState","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","indicatorStyles","setIndicatorStyles","tabWidth","nodeRef","tabListRef","disabled","onUpdate","entry","activeTab","target","size","offsetHeight","offsetWidth","offset","offsetTop","offsetLeft","cssVars","prevStyles","forwardRef","backwardRef","movementProps","movementContext","event","isPropagationStopped","Element","clickedTab","closest","tabs","currentTarget","i","findIndex","tab","onFocusChange","index","backward","current","container","forward","loopable","searchable","horizontal","includeDisabled","tabIndexBehavior","getFocusableElements","elementProps","undefined","backwardProps","type","forwardProps"],"mappings":"AAAA;AASA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AAKjE,SAASC,2BAA2B,QAAQ,6CAA6C;AACzF,SAASC,MAAM,QAAQ,4CAA4C;AACnE,SAASC,aAAa,QAAQ,sBAAsB;AACpD,SAASC,iBAAiB,QAAQ,0BAA0B;AAC5D,SAASC,cAAc,EAAEC,iBAAiB,QAAQ,aAAa;AAU/D,MAAMC,eAAe;AACrB,MAAMC,iBAAiB;AAEvB,MAAMC,OAAO;AACX,aAAa;AACf;AA0CA;;CAEC,GACD,OAAO,SAASC,WACdC,OAA2B;IAE3B,MAAM,EACJC,KAAKC,OAAO,EACZC,KAAK,EACLC,WAAW,EACXC,aAAa,EACbC,UAAUR,IAAI,EACdS,OAAO,EACPC,SAAS,EACTC,cAAc,EACdC,QAAQ,EACRC,cAAc,EACdC,iBAAiB,EAClB,GAAGZ;IAEJ,MAAMa,QAAQtB,SAASuB,GAAG,KAAK;IAE/B,MAAM,CAACC,iBAAiBC,mBAAmB,GACzC3B,SAAiC;QAC/B,MAAM4B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9B,OAAO;YACL,CAACrB,aAAa,EAAEqB;YAChB,CAACpB,eAAe,EAAE;QACpB;IACF;IAEF,MAAM,CAACqB,SAASjB,IAAI,GAAGT,cAAcU;IACrC,MAAMiB,aAAa1B,kBAAkB;QACnCQ;QACAmB,UAAUR;QACVS,UAAUnC,YACR,CAACoC;YACC,2EAA2E;YAC3E,0EAA0E;YAC1E,0DAA0D;YAC1DT;YAEA,MAAMU,YAAY7B,eAAe4B,MAAME,MAAM,CAAC,CAACpB,YAAY;YAC3D,IAAI,CAACmB,WAAW;gBACd;YACF;YAEA,MAAME,OAAOf,WAAWa,UAAUG,YAAY,GAAGH,UAAUI,WAAW;YACtE,MAAMC,SAASlB,WAAWa,UAAUM,SAAS,GAAGN,UAAUO,UAAU;YACpE,MAAMC,UAAkC;gBACtC,CAACnC,aAAa,EAAE,CAAC,EAAE6B,KAAK,EAAE,CAAC;gBAC3B,CAAC5B,eAAe,EAAE,CAAC,EAAE+B,OAAO,EAAE,CAAC;YACjC;YAEAZ,mBAAmB,CAACgB;gBAClB,IACEA,cACAA,UAAU,CAACpC,aAAa,KAAKmC,OAAO,CAACnC,aAAa,IAClDoC,UAAU,CAACnC,eAAe,KAAKkC,OAAO,CAAClC,eAAe,EACtD;oBACA,OAAOmC;gBACT;gBAEA,OAAOD;YACT;QACF,GACA;YAAC3B;YAAaS;YAAOH;SAAS;IAElC;IACA,MAAMuB,aAAa7C,OAAuB;IAC1C,MAAM8C,cAAc9C,OAAuB;IAC3C,MAAM,EAAE+C,aAAa,EAAEC,eAAe,EAAE,GAAG9C,4BAA4B;QACrEgB,SAAQ+B,KAAK;YACX/B,QAAQ+B;YACR,IAAIA,MAAMC,oBAAoB,MAAM,CAAED,CAAAA,MAAMb,MAAM,YAAYe,OAAM,GAAI;gBACtE;YACF;YAEA,MAAMC,aAAaH,MAAMb,MAAM,CAACiB,OAAO,CAAC;YACxC,MAAMC,OAAOhD,eAAe2C,MAAMM,aAAa;YAC/C,MAAMC,IAAIF,KAAKG,SAAS,CAAC,CAACC,MAAQA,QAAQN;YAC1C,IAAII,MAAM,CAAC,GAAG;gBACZjC,eAAeiC;YACjB;QACF;QACArC;QACAC;QACAuC,eAAcV,KAAK;YACjB,MAAM,EAAEW,KAAK,EAAE,GAAGX;YAClB,IAAI5B,mBAAmB,aAAa;gBAClCE,eAAeqC;YACjB,OAAO,IAAI3C,eAAe;gBACxBV,kBAAkB;oBAChBS,aAAa4C;oBACbC,UAAUf,YAAYgB,OAAO;oBAC7BC,WAAWjC,QAAQgC,OAAO;oBAC1BE,SAASnB,WAAWiB,OAAO;oBAC3BxC;gBACF;YACF;QACF;QACA2C,UAAU;QACVC,YAAY;QACZC,YAAY,CAAC7C;QACb8C,iBAAiB;QACjBC,kBAAkB;QAClBC,sBAAsBhE;IACxB;IAEAP,UAAU;QACRQ,kBAAkB;YAChBS;YACA6C,UAAUf,YAAYgB,OAAO;YAC7BC,WAAWjC,QAAQgC,OAAO;YAC1BE,SAASnB,WAAWiB,OAAO;YAC3BxC;QACF;IACF,GAAG;QAACN;QAAac;QAASR;KAAS;IAEnC,OAAO;QACLiD,cAAc;YACZ,oBAAoBjD,WAAW,aAAa;YAC5CT,KAAKkB;YACLhB,OAAO;gBACL,GAAGA,KAAK;gBACR,GAAIS,oBAAoBgD,YAAY7C,eAAe;YACrD;YACA,GAAGoB,aAAa;QAClB;QACA0B,eAAe;YACb5D,KAAKiC;YACL4B,MAAM;YACNpD;QACF;QACAqD,cAAc;YACZ9D,KAAKgC;YACL6B,MAAM;YACNpD;QACF;QACA0B;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/tabs/useTabList.ts"],"sourcesContent":["\"use client\";\nimport type {\n CSSProperties,\n FocusEventHandler,\n KeyboardEventHandler,\n MouseEventHandler,\n Ref,\n RefObject,\n} from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\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 { getTabRoleOnly, scrollTabIntoView } from \"./utils.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-tab-size\"?: string;\n \"--rmd-tab-offset\"?: string | number;\n \"--rmd-tab-indicator-background\"?: string;\n }\n}\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: boolean;\n activationMode: \"manual\" | \"automatic\";\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}\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\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,\n onUpdate: useCallback(\n (entry) => {\n // this is kind of hacky -- the styles should update when switching between\n // RTL, but the RTL state isn't required for any styles. Just reference it\n // so that the hooks eslint rule doesn't show a warning...\n isRTL;\n\n const activeTab = getTabRoleOnly(entry.target)[activeIndex];\n if (!activeTab) {\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 [activeIndex, isRTL, vertical]\n ),\n });\n const forwardRef = useRef<HTMLDivElement>(null);\n const backwardRef = useRef<HTMLDivElement>(null);\n const { movementProps, movementContext } = useKeyboardMovementProvider({\n onClick(event) {\n onClick(event);\n if (event.isPropagationStopped() || !(event.target instanceof Element)) {\n return;\n }\n\n const clickedTab = event.target.closest(\"[role='tab']\");\n const tabs = getTabRoleOnly(event.currentTarget);\n const i = tabs.findIndex((tab) => tab === clickedTab);\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 ref: tabListRef,\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 };\n}\n"],"names":["useCallback","useEffect","useRef","useState","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","indicatorStyles","setIndicatorStyles","tabWidth","nodeRef","tabListRef","disabled","onUpdate","entry","activeTab","target","size","offsetHeight","offsetWidth","offset","offsetTop","offsetLeft","cssVars","prevStyles","forwardRef","backwardRef","movementProps","movementContext","event","isPropagationStopped","Element","clickedTab","closest","tabs","currentTarget","i","findIndex","tab","onFocusChange","index","backward","current","container","forward","loopable","searchable","horizontal","includeDisabled","tabIndexBehavior","getFocusableElements","elementProps","undefined","backwardProps","type","forwardProps"],"mappings":"AAAA;AASA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AAKjE,SAASC,2BAA2B,QAAQ,6CAA6C;AACzF,SAASC,MAAM,QAAQ,4CAA4C;AACnE,SAASC,aAAa,QAAQ,sBAAsB;AACpD,SAASC,iBAAiB,QAAQ,0BAA0B;AAC5D,SAASC,cAAc,EAAEC,iBAAiB,QAAQ,aAAa;AAU/D,MAAMC,eAAe;AACrB,MAAMC,iBAAiB;AAEvB,MAAMC,OAAO;AACX,aAAa;AACf;AA4CA;;CAEC,GACD,OAAO,SAASC,WACdC,OAA2B;IAE3B,MAAM,EACJC,KAAKC,OAAO,EACZC,KAAK,EACLC,WAAW,EACXC,aAAa,EACbC,UAAUR,IAAI,EACdS,OAAO,EACPC,SAAS,EACTC,cAAc,EACdC,QAAQ,EACRC,cAAc,EACdC,iBAAiB,EAClB,GAAGZ;IAEJ,MAAMa,QAAQtB,SAASuB,GAAG,KAAK;IAE/B,MAAM,CAACC,iBAAiBC,mBAAmB,GACzC3B,SAAiC;QAC/B,MAAM4B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9B,OAAO;YACL,CAACrB,aAAa,EAAEqB;YAChB,CAACpB,eAAe,EAAE;QACpB;IACF;IAEF,MAAM,CAACqB,SAASjB,IAAI,GAAGT,cAAcU;IACrC,MAAMiB,aAAa1B,kBAAkB;QACnCQ;QACAmB,UAAUR;QACVS,UAAUnC,YACR,CAACoC;YACC,2EAA2E;YAC3E,0EAA0E;YAC1E,0DAA0D;YAC1DT;YAEA,MAAMU,YAAY7B,eAAe4B,MAAME,MAAM,CAAC,CAACpB,YAAY;YAC3D,IAAI,CAACmB,WAAW;gBACd;YACF;YAEA,MAAME,OAAOf,WAAWa,UAAUG,YAAY,GAAGH,UAAUI,WAAW;YACtE,MAAMC,SAASlB,WAAWa,UAAUM,SAAS,GAAGN,UAAUO,UAAU;YACpE,MAAMC,UAAkC;gBACtC,CAACnC,aAAa,EAAE,CAAC,EAAE6B,KAAK,EAAE,CAAC;gBAC3B,CAAC5B,eAAe,EAAE,CAAC,EAAE+B,OAAO,EAAE,CAAC;YACjC;YAEAZ,mBAAmB,CAACgB;gBAClB,IACEA,cACAA,UAAU,CAACpC,aAAa,KAAKmC,OAAO,CAACnC,aAAa,IAClDoC,UAAU,CAACnC,eAAe,KAAKkC,OAAO,CAAClC,eAAe,EACtD;oBACA,OAAOmC;gBACT;gBAEA,OAAOD;YACT;QACF,GACA;YAAC3B;YAAaS;YAAOH;SAAS;IAElC;IACA,MAAMuB,aAAa7C,OAAuB;IAC1C,MAAM8C,cAAc9C,OAAuB;IAC3C,MAAM,EAAE+C,aAAa,EAAEC,eAAe,EAAE,GAAG9C,4BAA4B;QACrEgB,SAAQ+B,KAAK;YACX/B,QAAQ+B;YACR,IAAIA,MAAMC,oBAAoB,MAAM,CAAED,CAAAA,MAAMb,MAAM,YAAYe,OAAM,GAAI;gBACtE;YACF;YAEA,MAAMC,aAAaH,MAAMb,MAAM,CAACiB,OAAO,CAAC;YACxC,MAAMC,OAAOhD,eAAe2C,MAAMM,aAAa;YAC/C,MAAMC,IAAIF,KAAKG,SAAS,CAAC,CAACC,MAAQA,QAAQN;YAC1C,IAAII,MAAM,CAAC,GAAG;gBACZjC,eAAeiC;YACjB;QACF;QACArC;QACAC;QACAuC,eAAcV,KAAK;YACjB,MAAM,EAAEW,KAAK,EAAE,GAAGX;YAClB,IAAI5B,mBAAmB,aAAa;gBAClCE,eAAeqC;YACjB,OAAO,IAAI3C,eAAe;gBACxBV,kBAAkB;oBAChBS,aAAa4C;oBACbC,UAAUf,YAAYgB,OAAO;oBAC7BC,WAAWjC,QAAQgC,OAAO;oBAC1BE,SAASnB,WAAWiB,OAAO;oBAC3BxC;gBACF;YACF;QACF;QACA2C,UAAU;QACVC,YAAY;QACZC,YAAY,CAAC7C;QACb8C,iBAAiB;QACjBC,kBAAkB;QAClBC,sBAAsBhE;IACxB;IAEAP,UAAU;QACRQ,kBAAkB;YAChBS;YACA6C,UAAUf,YAAYgB,OAAO;YAC7BC,WAAWjC,QAAQgC,OAAO;YAC1BE,SAASnB,WAAWiB,OAAO;YAC3BxC;QACF;IACF,GAAG;QAACN;QAAac;QAASR;KAAS;IAEnC,OAAO;QACLiD,cAAc;YACZ,oBAAoBjD,WAAW,aAAa;YAC5CT,KAAKkB;YACLhB,OAAO;gBACL,GAAGA,KAAK;gBACR,GAAIS,oBAAoBgD,YAAY7C,eAAe;YACrD;YACA,GAAGoB,aAAa;QAClB;QACA0B,eAAe;YACb5D,KAAKiC;YACL4B,MAAM;YACNpD;YACAE;QACF;QACAmD,cAAc;YACZ9D,KAAKgC;YACL6B,MAAM;YACNpD;YACAE;QACF;QACAwB;IACF;AACF"}
@@ -1,6 +1,6 @@
1
- import type { Dispatch, Ref } from "react";
2
- import type { SlideDirection } from "../transition/SlideContainer.js";
3
- import type { UseStateInitializer, UseStateSetter } from "../types.js";
1
+ import { type Dispatch, type Ref } from "react";
2
+ import { type SlideDirection } from "../transition/SlideContainer.js";
3
+ import { type UseStateInitializer, type UseStateSetter } from "../types.js";
4
4
  /**
5
5
  * @since 6.0.0
6
6
  */
@@ -12,14 +12,6 @@ export interface TabsHookOptions<TabValue extends string | number = number> {
12
12
  * @defaultValue `"tab-" + useId()`
13
13
  */
14
14
  baseId?: string;
15
- /**
16
- * Set this to `true` if changing active tabs should no longer attempt to
17
- * scroll to the top of the tab panels container when using the
18
- * {@link TabsImplementation.getTabPanelsProps}.
19
- *
20
- * @defaultValue `false`
21
- */
22
- disableScrollFix?: boolean;
23
15
  /**
24
16
  * Set this to an **ordered** list of tab values when:
25
17
  * - using a `string` tab value
@@ -42,6 +34,26 @@ export interface TabsHookOptions<TabValue extends string | number = number> {
42
34
  * @defaultValue `0`
43
35
  */
44
36
  defaultActiveTab?: UseStateInitializer<TabValue>;
37
+ /** Convenience pass-through prop to {@link TabProps.stacked} */
38
+ stacked?: boolean;
39
+ /** Convenience pass-through prop to {@link TabProps.iconAfter} */
40
+ iconAfter?: boolean;
41
+ /** Convenience pass-through props to {@link TabListProps.vertical} */
42
+ vertical?: boolean;
43
+ /**
44
+ * Set this to `true` if changing active tabs should no longer attempt to
45
+ * scroll to the top of the tab panels container when using the
46
+ * {@link TabsImplementation.getTabPanelsProps}.
47
+ *
48
+ * @defaultValue `false`
49
+ */
50
+ disableScrollFix?: boolean;
51
+ /**
52
+ * Convenience prop to disable all transitions for the
53
+ * {@link TabsImplementation.getTabProps} and
54
+ * {@link TabsImplementation.getTabListProps}.
55
+ */
56
+ disableTransition?: boolean;
45
57
  }
46
58
  /**
47
59
  * @since 6.0.0
@@ -50,6 +62,14 @@ export interface ProvidedTabProps {
50
62
  "aria-controls": string;
51
63
  id: string;
52
64
  active: boolean;
65
+ /** Convenience pass-through prop from {@link TabsHookOptions.stacked} */
66
+ stacked?: boolean;
67
+ /** Convenience pass-through prop from {@link TabsHookOptions.iconAfter} */
68
+ iconAfter?: boolean;
69
+ /** Convenience pass-through prop from {@link TabsHookOptions.disableTransition} */
70
+ activeIndicator?: boolean;
71
+ /** Convenience pass-through prop from {@link TabsHookOptions.vertical} and {@link TabsHookOptions.disableTransition} */
72
+ verticalActiveIndicator?: boolean;
53
73
  }
54
74
  /**
55
75
  * @since 6.0.0
@@ -57,6 +77,8 @@ export interface ProvidedTabProps {
57
77
  export interface ProvidedTabListProps {
58
78
  activeIndex: number;
59
79
  setActiveIndex: Dispatch<number>;
80
+ vertical?: boolean;
81
+ disableTransition?: boolean;
60
82
  }
61
83
  /**
62
84
  * @since 6.0.0
@@ -10,7 +10,7 @@ const PANEL_PREFIX = "panel-";
10
10
  *
11
11
  * @since 6.0.0
12
12
  */ export function useTabs(options = {}) {
13
- const { baseId: propBaseId, disableScrollFix, tabs = EMPTY_LIST, activeTab: propActiveTab, setActiveTab: propSetActiveTab, defaultActiveTab } = options;
13
+ const { baseId: propBaseId, tabs = EMPTY_LIST, stacked, vertical, iconAfter, activeTab: propActiveTab, setActiveTab: propSetActiveTab, defaultActiveTab, disableScrollFix, disableTransition } = options;
14
14
  const baseId = useEnsuredId(propBaseId, "tab");
15
15
  const [direction, setDirection] = useState("left");
16
16
  const [activeTab, setActiveTab] = useEnsuredState({
@@ -41,7 +41,11 @@ const PANEL_PREFIX = "panel-";
41
41
  return {
42
42
  "aria-controls": getTabId(tabValue, PANEL_PREFIX),
43
43
  id: getTabId(tabValue),
44
- active: tabValue === activeTab
44
+ active: tabValue === activeTab,
45
+ stacked,
46
+ iconAfter,
47
+ activeIndicator: disableTransition,
48
+ verticalActiveIndicator: vertical && disableTransition
45
49
  };
46
50
  },
47
51
  getTabListProps () {
@@ -54,7 +58,9 @@ const PANEL_PREFIX = "panel-";
54
58
  } else {
55
59
  setActiveTab(nextActiveIndex);
56
60
  }
57
- }
61
+ },
62
+ vertical,
63
+ disableTransition
58
64
  };
59
65
  },
60
66
  getTabPanelProps (tabValue) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tabs/useTabs.ts"],"sourcesContent":["\"use client\";\nimport type { Dispatch, Ref, RefObject } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { SlideDirection } from \"../transition/SlideContainer.js\";\nimport type { UseStateInitializer, UseStateSetter } from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredState } from \"../useEnsuredState.js\";\n\nconst EMPTY_LIST = [] as const;\nconst PANEL_PREFIX = \"panel-\";\n\n/**\n * @since 6.0.0\n */\nexport interface TabsHookOptions<TabValue extends string | number = number> {\n /**\n * This can be used to generate the ids for the different components within\n * the tab widget.\n *\n * @defaultValue `\"tab-\" + useId()`\n */\n baseId?: string;\n\n /**\n * Set this to `true` if changing active tabs should no longer attempt to\n * scroll to the top of the tab panels container when using the\n * {@link TabsImplementation.getTabPanelsProps}.\n *\n * @defaultValue `false`\n */\n disableScrollFix?: boolean;\n\n /**\n * Set this to an **ordered** list of tab values when:\n * - using a `string` tab value\n * - using a `number` tab value does not represent a tab index\n *\n * See the examples on the {@link useTabs} for usage.\n */\n tabs?: readonly TabValue[];\n\n /**\n * Provide this value and {@link setActiveTab} to control the active tab\n * behavior.\n */\n activeTab?: TabValue;\n\n /** @see {@link activeTab} */\n setActiveTab?: Dispatch<TabValue>;\n\n /**\n * Set this to the default tab index when not controlling the active tab value\n * through {@link activeTab} and {@link setActiveTab}.\n *\n * @defaultValue `0`\n */\n defaultActiveTab?: UseStateInitializer<TabValue>;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabProps {\n \"aria-controls\": string;\n id: string;\n active: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabListProps {\n activeIndex: number;\n setActiveIndex: Dispatch<number>;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabPanelProps {\n \"aria-labelledby\": string;\n id: string;\n role: \"tabpanel\";\n active: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabPanelsProps<E extends HTMLElement> {\n ref: Ref<E>;\n direction: SlideDirection;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface TabsImplementation<TabValue extends string | number = number> {\n direction: SlideDirection;\n setDirection: UseStateSetter<SlideDirection>;\n activeTab?: TabValue;\n setActiveTab?(nextActiveTab: TabValue): void;\n getTabProps(tabValue: TabValue): ProvidedTabProps;\n getTabListProps(): ProvidedTabListProps;\n getTabPanelProps(tabValue: TabValue): ProvidedTabPanelProps;\n getTabPanelsProps<E extends HTMLElement>(): ProvidedTabPanelsProps<E>;\n}\n\n/**\n * @example Super Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * function Example(): ReactElement {\n * const {\n * activeTab,\n * setActiveTab,\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs();\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <Tab {...getTabProps(0)}>Tab 1</Tab>\n * <Tab {...getTabProps(1)}>Tab 2</Tab>\n * <Tab {...getTabProps(2)}>Tab 3</Tab>\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * <Slide {...getTabPanelProps(0)}>Tab 1 Content</Slide>\n * <Slide {...getTabPanelProps(1)}>Tab 2 Content</Slide>\n * <Slide {...getTabPanelProps(2)}>Tab 3 Content</Slide>\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs(): TabsImplementation<number> & {\n activeTab: number;\n setActiveTab: number;\n};\n/**\n * The tab behavior can be controlled by providing the `activeTab` and\n * `setActiveTab` options.\n *\n * @example Controlled\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n * import { useState } from \"react\";\n *\n * function Example(): ReactElement {\n * const [activeTab, setActiveTab] = useState(1);\n *\n * const {\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({\n * activeTab,\n * setActiveTab,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <Tab {...getTabProps(0)}>Tab 1</Tab>\n * <Tab {...getTabProps(1)}>Tab 2</Tab>\n * <Tab {...getTabProps(2)}>Tab 3</Tab>\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * <Slide {...getTabPanelProps(0)}>Tab 1 Content</Slide>\n * <Slide {...getTabPanelProps(1)}>Tab 2 Content</Slide>\n * <Slide {...getTabPanelProps(2)}>Tab 3 Content</Slide>\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends number>(\n options: TabsHookOptions<TabValue> & {\n tabs?: readonly TabValue[];\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n defaultActiveTab?: never;\n }\n): TabsImplementation<TabValue> & { activeTab?: never; setActiveTab?: never };\nexport function useTabs<TabValue extends number>(\n options: TabsHookOptions<TabValue> & {\n tabs?: readonly TabValue[];\n activeTab?: never;\n setActiveTab?: never;\n defaultActiveTab?: UseStateInitializer<TabValue>;\n }\n): TabsImplementation<TabValue> & {\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n};\n/**\n * When using string values, the {@link TabsHookOptions.tabs} option **must** be\n * provided to determine the correct active tab index.\n *\n * @example String Value Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * const tabs = [\"value-1\", \"value-2\", \"value-3\"];\n *\n * function Example(): ReactElement {\n * const {\n * activeTab,\n * setActiveTab,\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({ tabs });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * {tabs.map((value) => (\n * <Tab key={value} {...getTabProps(value)}>{value}</Tab>\n * ))}\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * {tabs.map((value) => (\n * <Slide key={value}>{value} Content</Slide>\n * ))}\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string>(\n options: TabsHookOptions<TabValue> & {\n tabs: readonly TabValue[];\n activeTab?: never;\n setActiveTab?: never;\n defaultActiveTab?: UseStateInitializer<TabValue>;\n }\n): TabsImplementation<TabValue> & {\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n};\n/**\n * When using string values, the {@link TabsHookOptions.tabs} option **must** be\n * provided to determine the correct active tab index.\n *\n * @example String Controlled Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * const tabs = [\"value-1\", \"value-2\", \"value-3\"] as const;\n *\n * function Example(): ReactElement {\n * const [activeTab, setActiveTab] = useState(tabs[0]);\n *\n * const {\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({\n * tabs,\n * activeTab,\n * setActiveTab,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * {tabs.map((value) => (\n * <Tab key={value} {...getTabProps(value)}>{value}</Tab>\n * ))}\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * {tabs.map((value) => (\n * <Slide key={value}>{value} Content</Slide>\n * ))}\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @example Navigation Tabs\n * ```tsx\n * \"use client\";\n * import {\n * RippleContainer,\n * Tab,\n * TabList,\n * useElementInteraction,\n * useEnsuredId,\n * useHigherContrastChildren,\n * useKeyboardMovementContext,\n * useTabs,\n * } from \"@react-md/core\";\n * import type { LinkProps } from \"next/link\";\n * import Link from \"next/link\";\n * import type { PropsWithChildren, ReactElement } from \"react\";\n * import { usePathname } from \"next/navigation\";\n *\n * interface TabLinkProps extends LinkProps {\n * active: boolean;\n * }\n *\n * function TabLink(props: LinkProps): ReactElement {\n * const {\n * id: propId,\n * children: propChildren,\n * active,\n * className,\n * ...remaining,\n * } = props;\n *\n * const id = useEnsuredId(propId, \"tab\");\n * const { activeDescendantId } = useKeyboardMovementContext();\n * const { handlers, ripples } = useElementInteraction(props);\n * const children = useHigherContrastChildren(propChildren);\n *\n * return (\n * <Link\n * {...props}\n * {...handlers}\n * id={id}\n * aria-selected={active}\n * role=\"tab\"\n * tabIndex={id === activeDescendantId ? 0 : -1}\n * className={tab({\n * className,\n * active,\n * // stacked,\n * // reversed,\n * })}\n * >\n * {children}\n * {ripples}\n * </Link>\n * );\n * }\n *\n * const noop = (): void => {\n * // do nothing\n * };\n *\n * const PATHNAME_TABS = [\"/\", \"/page-1\", \"/page-2\"];\n *\n * function Layout({ children }: PropsWithChildren) {\n * const pathname = usePathname();\n * const { getTabListProps, getTabProps } = useTabs({\n * tabs: PATHNAME_TABS,\n * activeTab: pathname,\n * setActiveTab: noop,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <TabLink {...getTabProps(\"/\")} href=\"/\">Home</TabLink>\n * <TabLink {...getTabProps(\"/page-1\")} href=\"/page-1\">Page 1</TabLink>\n * <TabLink {...getTabProps(\"/page-2\")} href=\"/page-2\">Page 2</TabLink>\n * </TabList>\n * <main>{children}</main>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string>(\n options: TabsHookOptions<TabValue> & {\n tabs: readonly TabValue[];\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n defaultActiveTab?: never;\n }\n): TabsImplementation<TabValue> & { activeTab?: never; setActiveTab?: never };\n/**\n * This hook can be uncontrolled/controlled and supports strongly typing the tab\n * values if needed. Check out the overloads for examples.\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string | number>(\n options: TabsHookOptions<TabValue> = {}\n): TabsImplementation<TabValue> {\n const {\n baseId: propBaseId,\n disableScrollFix,\n tabs = EMPTY_LIST,\n activeTab: propActiveTab,\n setActiveTab: propSetActiveTab,\n defaultActiveTab,\n } = options;\n\n const baseId = useEnsuredId(propBaseId, \"tab\");\n const [direction, setDirection] = useState<SlideDirection>(\"left\");\n\n const [activeTab, setActiveTab] = useEnsuredState({\n value: propActiveTab,\n setValue: propSetActiveTab,\n defaultValue: defaultActiveTab ?? (0 as TabValue),\n });\n\n const getTabIndex = (tabValue: TabValue): number =>\n typeof tabValue === \"string\" || tabs.length > 0\n ? tabs.indexOf(tabValue)\n : tabValue;\n const getTabId = (tabValue: TabValue, prefix = \"\"): string =>\n `${baseId}-${prefix}${getTabIndex(tabValue) + 1}`;\n\n const activeIndex = getTabIndex(activeTab);\n const tabPanelsRef = useRef<HTMLElement>(null);\n useEffect(() => {\n const container = tabPanelsRef.current;\n if (!container || disableScrollFix) {\n return;\n }\n\n container.scrollTop = 0;\n }, [disableScrollFix, activeTab]);\n\n return {\n activeTab,\n setActiveTab,\n direction,\n setDirection,\n getTabProps(tabValue) {\n return {\n \"aria-controls\": getTabId(tabValue, PANEL_PREFIX),\n id: getTabId(tabValue),\n active: tabValue === activeTab,\n };\n },\n getTabListProps() {\n return {\n activeIndex,\n setActiveIndex: (nextActiveIndex) => {\n setDirection(activeIndex < nextActiveIndex ? \"left\" : \"right\");\n if (typeof activeTab === \"string\" || tabs.length > 0) {\n setActiveTab(tabs[nextActiveIndex]);\n } else {\n setActiveTab(nextActiveIndex as TabValue);\n }\n },\n };\n },\n getTabPanelProps(tabValue) {\n return {\n \"aria-labelledby\": getTabId(tabValue),\n id: getTabId(tabValue, PANEL_PREFIX),\n role: \"tabpanel\",\n active: tabValue === activeTab,\n };\n },\n getTabPanelsProps<E>() {\n return {\n ref: tabPanelsRef as RefObject<E>,\n direction,\n };\n },\n };\n}\n"],"names":["useEffect","useRef","useState","useEnsuredId","useEnsuredState","EMPTY_LIST","PANEL_PREFIX","useTabs","options","baseId","propBaseId","disableScrollFix","tabs","activeTab","propActiveTab","setActiveTab","propSetActiveTab","defaultActiveTab","direction","setDirection","value","setValue","defaultValue","getTabIndex","tabValue","length","indexOf","getTabId","prefix","activeIndex","tabPanelsRef","container","current","scrollTop","getTabProps","id","active","getTabListProps","setActiveIndex","nextActiveIndex","getTabPanelProps","role","getTabPanelsProps","ref"],"mappings":"AAAA;AAEA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AAGpD,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SAASC,eAAe,QAAQ,wBAAwB;AAExD,MAAMC,aAAa,EAAE;AACrB,MAAMC,eAAe;AA0YrB;;;;;CAKC,GACD,OAAO,SAASC,QACdC,UAAqC,CAAC,CAAC;IAEvC,MAAM,EACJC,QAAQC,UAAU,EAClBC,gBAAgB,EAChBC,OAAOP,UAAU,EACjBQ,WAAWC,aAAa,EACxBC,cAAcC,gBAAgB,EAC9BC,gBAAgB,EACjB,GAAGT;IAEJ,MAAMC,SAASN,aAAaO,YAAY;IACxC,MAAM,CAACQ,WAAWC,aAAa,GAAGjB,SAAyB;IAE3D,MAAM,CAACW,WAAWE,aAAa,GAAGX,gBAAgB;QAChDgB,OAAON;QACPO,UAAUL;QACVM,cAAcL,oBAAqB;IACrC;IAEA,MAAMM,cAAc,CAACC,WACnB,OAAOA,aAAa,YAAYZ,KAAKa,MAAM,GAAG,IAC1Cb,KAAKc,OAAO,CAACF,YACbA;IACN,MAAMG,WAAW,CAACH,UAAoBI,SAAS,EAAE,GAC/C,CAAC,EAAEnB,OAAO,CAAC,EAAEmB,OAAO,EAAEL,YAAYC,YAAY,EAAE,CAAC;IAEnD,MAAMK,cAAcN,YAAYV;IAChC,MAAMiB,eAAe7B,OAAoB;IACzCD,UAAU;QACR,MAAM+B,YAAYD,aAAaE,OAAO;QACtC,IAAI,CAACD,aAAapB,kBAAkB;YAClC;QACF;QAEAoB,UAAUE,SAAS,GAAG;IACxB,GAAG;QAACtB;QAAkBE;KAAU;IAEhC,OAAO;QACLA;QACAE;QACAG;QACAC;QACAe,aAAYV,QAAQ;YAClB,OAAO;gBACL,iBAAiBG,SAASH,UAAUlB;gBACpC6B,IAAIR,SAASH;gBACbY,QAAQZ,aAAaX;YACvB;QACF;QACAwB;YACE,OAAO;gBACLR;gBACAS,gBAAgB,CAACC;oBACfpB,aAAaU,cAAcU,kBAAkB,SAAS;oBACtD,IAAI,OAAO1B,cAAc,YAAYD,KAAKa,MAAM,GAAG,GAAG;wBACpDV,aAAaH,IAAI,CAAC2B,gBAAgB;oBACpC,OAAO;wBACLxB,aAAawB;oBACf;gBACF;YACF;QACF;QACAC,kBAAiBhB,QAAQ;YACvB,OAAO;gBACL,mBAAmBG,SAASH;gBAC5BW,IAAIR,SAASH,UAAUlB;gBACvBmC,MAAM;gBACNL,QAAQZ,aAAaX;YACvB;QACF;QACA6B;YACE,OAAO;gBACLC,KAAKb;gBACLZ;YACF;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/tabs/useTabs.ts"],"sourcesContent":["\"use client\";\nimport {\n type Dispatch,\n type Ref,\n type RefObject,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { type SlideDirection } from \"../transition/SlideContainer.js\";\nimport { type UseStateInitializer, type UseStateSetter } from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredState } from \"../useEnsuredState.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { type TabProps } from \"./Tab.js\";\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { type TabListProps } from \"./TabList.js\";\n\nconst EMPTY_LIST = [] as const;\nconst PANEL_PREFIX = \"panel-\";\n\n/**\n * @since 6.0.0\n */\nexport interface TabsHookOptions<TabValue extends string | number = number> {\n /**\n * This can be used to generate the ids for the different components within\n * the tab widget.\n *\n * @defaultValue `\"tab-\" + useId()`\n */\n baseId?: string;\n\n /**\n * Set this to an **ordered** list of tab values when:\n * - using a `string` tab value\n * - using a `number` tab value does not represent a tab index\n *\n * See the examples on the {@link useTabs} for usage.\n */\n tabs?: readonly TabValue[];\n\n /**\n * Provide this value and {@link setActiveTab} to control the active tab\n * behavior.\n */\n activeTab?: TabValue;\n\n /** @see {@link activeTab} */\n setActiveTab?: Dispatch<TabValue>;\n\n /**\n * Set this to the default tab index when not controlling the active tab value\n * through {@link activeTab} and {@link setActiveTab}.\n *\n * @defaultValue `0`\n */\n defaultActiveTab?: UseStateInitializer<TabValue>;\n\n /** Convenience pass-through prop to {@link TabProps.stacked} */\n stacked?: boolean;\n /** Convenience pass-through prop to {@link TabProps.iconAfter} */\n iconAfter?: boolean;\n\n /** Convenience pass-through props to {@link TabListProps.vertical} */\n vertical?: boolean;\n\n /**\n * Set this to `true` if changing active tabs should no longer attempt to\n * scroll to the top of the tab panels container when using the\n * {@link TabsImplementation.getTabPanelsProps}.\n *\n * @defaultValue `false`\n */\n disableScrollFix?: boolean;\n\n /**\n * Convenience prop to disable all transitions for the\n * {@link TabsImplementation.getTabProps} and\n * {@link TabsImplementation.getTabListProps}.\n */\n disableTransition?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabProps {\n \"aria-controls\": string;\n id: string;\n active: boolean;\n\n /** Convenience pass-through prop from {@link TabsHookOptions.stacked} */\n stacked?: boolean;\n /** Convenience pass-through prop from {@link TabsHookOptions.iconAfter} */\n iconAfter?: boolean;\n /** Convenience pass-through prop from {@link TabsHookOptions.disableTransition} */\n activeIndicator?: boolean;\n /** Convenience pass-through prop from {@link TabsHookOptions.vertical} and {@link TabsHookOptions.disableTransition} */\n verticalActiveIndicator?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabListProps {\n activeIndex: number;\n setActiveIndex: Dispatch<number>;\n vertical?: boolean;\n disableTransition?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabPanelProps {\n \"aria-labelledby\": string;\n id: string;\n role: \"tabpanel\";\n active: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabPanelsProps<E extends HTMLElement> {\n ref: Ref<E>;\n direction: SlideDirection;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface TabsImplementation<TabValue extends string | number = number> {\n direction: SlideDirection;\n setDirection: UseStateSetter<SlideDirection>;\n activeTab?: TabValue;\n setActiveTab?(nextActiveTab: TabValue): void;\n getTabProps(tabValue: TabValue): ProvidedTabProps;\n getTabListProps(): ProvidedTabListProps;\n getTabPanelProps(tabValue: TabValue): ProvidedTabPanelProps;\n getTabPanelsProps<E extends HTMLElement>(): ProvidedTabPanelsProps<E>;\n}\n\n/**\n * @example Super Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * function Example(): ReactElement {\n * const {\n * activeTab,\n * setActiveTab,\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs();\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <Tab {...getTabProps(0)}>Tab 1</Tab>\n * <Tab {...getTabProps(1)}>Tab 2</Tab>\n * <Tab {...getTabProps(2)}>Tab 3</Tab>\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * <Slide {...getTabPanelProps(0)}>Tab 1 Content</Slide>\n * <Slide {...getTabPanelProps(1)}>Tab 2 Content</Slide>\n * <Slide {...getTabPanelProps(2)}>Tab 3 Content</Slide>\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs(): TabsImplementation<number> & {\n activeTab: number;\n setActiveTab: number;\n};\n/**\n * The tab behavior can be controlled by providing the `activeTab` and\n * `setActiveTab` options.\n *\n * @example Controlled\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n * import { useState } from \"react\";\n *\n * function Example(): ReactElement {\n * const [activeTab, setActiveTab] = useState(1);\n *\n * const {\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({\n * activeTab,\n * setActiveTab,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <Tab {...getTabProps(0)}>Tab 1</Tab>\n * <Tab {...getTabProps(1)}>Tab 2</Tab>\n * <Tab {...getTabProps(2)}>Tab 3</Tab>\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * <Slide {...getTabPanelProps(0)}>Tab 1 Content</Slide>\n * <Slide {...getTabPanelProps(1)}>Tab 2 Content</Slide>\n * <Slide {...getTabPanelProps(2)}>Tab 3 Content</Slide>\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends number>(\n options: TabsHookOptions<TabValue> & {\n tabs?: readonly TabValue[];\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n defaultActiveTab?: never;\n }\n): TabsImplementation<TabValue> & { activeTab?: never; setActiveTab?: never };\nexport function useTabs<TabValue extends number>(\n options: TabsHookOptions<TabValue> & {\n tabs?: readonly TabValue[];\n activeTab?: never;\n setActiveTab?: never;\n defaultActiveTab?: UseStateInitializer<TabValue>;\n }\n): TabsImplementation<TabValue> & {\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n};\n/**\n * When using string values, the {@link TabsHookOptions.tabs} option **must** be\n * provided to determine the correct active tab index.\n *\n * @example String Value Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * const tabs = [\"value-1\", \"value-2\", \"value-3\"];\n *\n * function Example(): ReactElement {\n * const {\n * activeTab,\n * setActiveTab,\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({ tabs });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * {tabs.map((value) => (\n * <Tab key={value} {...getTabProps(value)}>{value}</Tab>\n * ))}\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * {tabs.map((value) => (\n * <Slide key={value}>{value} Content</Slide>\n * ))}\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string>(\n options: TabsHookOptions<TabValue> & {\n tabs: readonly TabValue[];\n activeTab?: never;\n setActiveTab?: never;\n defaultActiveTab?: UseStateInitializer<TabValue>;\n }\n): TabsImplementation<TabValue> & {\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n};\n/**\n * When using string values, the {@link TabsHookOptions.tabs} option **must** be\n * provided to determine the correct active tab index.\n *\n * @example String Controlled Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * const tabs = [\"value-1\", \"value-2\", \"value-3\"] as const;\n *\n * function Example(): ReactElement {\n * const [activeTab, setActiveTab] = useState(tabs[0]);\n *\n * const {\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({\n * tabs,\n * activeTab,\n * setActiveTab,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * {tabs.map((value) => (\n * <Tab key={value} {...getTabProps(value)}>{value}</Tab>\n * ))}\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * {tabs.map((value) => (\n * <Slide key={value}>{value} Content</Slide>\n * ))}\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @example Navigation Tabs\n * ```tsx\n * \"use client\";\n * import {\n * RippleContainer,\n * Tab,\n * TabList,\n * useElementInteraction,\n * useEnsuredId,\n * useHigherContrastChildren,\n * useKeyboardMovementContext,\n * useTabs,\n * } from \"@react-md/core\";\n * import type { LinkProps } from \"next/link\";\n * import Link from \"next/link\";\n * import type { PropsWithChildren, ReactElement } from \"react\";\n * import { usePathname } from \"next/navigation\";\n *\n * interface TabLinkProps extends LinkProps {\n * active: boolean;\n * }\n *\n * function TabLink(props: LinkProps): ReactElement {\n * const {\n * id: propId,\n * children: propChildren,\n * active,\n * className,\n * ...remaining,\n * } = props;\n *\n * const id = useEnsuredId(propId, \"tab\");\n * const { activeDescendantId } = useKeyboardMovementContext();\n * const { handlers, ripples } = useElementInteraction(props);\n * const children = useHigherContrastChildren(propChildren);\n *\n * return (\n * <Link\n * {...props}\n * {...handlers}\n * id={id}\n * aria-selected={active}\n * role=\"tab\"\n * tabIndex={id === activeDescendantId ? 0 : -1}\n * className={tab({\n * className,\n * active,\n * // stacked,\n * // reversed,\n * })}\n * >\n * {children}\n * {ripples}\n * </Link>\n * );\n * }\n *\n * const noop = (): void => {\n * // do nothing\n * };\n *\n * const PATHNAME_TABS = [\"/\", \"/page-1\", \"/page-2\"];\n *\n * function Layout({ children }: PropsWithChildren) {\n * const pathname = usePathname();\n * const { getTabListProps, getTabProps } = useTabs({\n * tabs: PATHNAME_TABS,\n * activeTab: pathname,\n * setActiveTab: noop,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <TabLink {...getTabProps(\"/\")} href=\"/\">Home</TabLink>\n * <TabLink {...getTabProps(\"/page-1\")} href=\"/page-1\">Page 1</TabLink>\n * <TabLink {...getTabProps(\"/page-2\")} href=\"/page-2\">Page 2</TabLink>\n * </TabList>\n * <main>{children}</main>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string>(\n options: TabsHookOptions<TabValue> & {\n tabs: readonly TabValue[];\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n defaultActiveTab?: never;\n }\n): TabsImplementation<TabValue> & { activeTab?: never; setActiveTab?: never };\n/**\n * This hook can be uncontrolled/controlled and supports strongly typing the tab\n * values if needed. Check out the overloads for examples.\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string | number>(\n options: TabsHookOptions<TabValue> = {}\n): TabsImplementation<TabValue> {\n const {\n baseId: propBaseId,\n tabs = EMPTY_LIST,\n stacked,\n vertical,\n iconAfter,\n activeTab: propActiveTab,\n setActiveTab: propSetActiveTab,\n defaultActiveTab,\n disableScrollFix,\n disableTransition,\n } = options;\n\n const baseId = useEnsuredId(propBaseId, \"tab\");\n const [direction, setDirection] = useState<SlideDirection>(\"left\");\n\n const [activeTab, setActiveTab] = useEnsuredState({\n value: propActiveTab,\n setValue: propSetActiveTab,\n defaultValue: defaultActiveTab ?? (0 as TabValue),\n });\n\n const getTabIndex = (tabValue: TabValue): number =>\n typeof tabValue === \"string\" || tabs.length > 0\n ? tabs.indexOf(tabValue)\n : tabValue;\n const getTabId = (tabValue: TabValue, prefix = \"\"): string =>\n `${baseId}-${prefix}${getTabIndex(tabValue) + 1}`;\n\n const activeIndex = getTabIndex(activeTab);\n const tabPanelsRef = useRef<HTMLElement>(null);\n useEffect(() => {\n const container = tabPanelsRef.current;\n if (!container || disableScrollFix) {\n return;\n }\n\n container.scrollTop = 0;\n }, [disableScrollFix, activeTab]);\n\n return {\n activeTab,\n setActiveTab,\n direction,\n setDirection,\n getTabProps(tabValue) {\n return {\n \"aria-controls\": getTabId(tabValue, PANEL_PREFIX),\n id: getTabId(tabValue),\n active: tabValue === activeTab,\n stacked,\n iconAfter,\n activeIndicator: disableTransition,\n verticalActiveIndicator: vertical && disableTransition,\n };\n },\n getTabListProps() {\n return {\n activeIndex,\n setActiveIndex: (nextActiveIndex) => {\n setDirection(activeIndex < nextActiveIndex ? \"left\" : \"right\");\n if (typeof activeTab === \"string\" || tabs.length > 0) {\n setActiveTab(tabs[nextActiveIndex]);\n } else {\n setActiveTab(nextActiveIndex as TabValue);\n }\n },\n vertical,\n disableTransition,\n };\n },\n getTabPanelProps(tabValue) {\n return {\n \"aria-labelledby\": getTabId(tabValue),\n id: getTabId(tabValue, PANEL_PREFIX),\n role: \"tabpanel\",\n active: tabValue === activeTab,\n };\n },\n getTabPanelsProps<E>() {\n return {\n ref: tabPanelsRef as RefObject<E>,\n direction,\n };\n },\n };\n}\n"],"names":["useEffect","useRef","useState","useEnsuredId","useEnsuredState","EMPTY_LIST","PANEL_PREFIX","useTabs","options","baseId","propBaseId","tabs","stacked","vertical","iconAfter","activeTab","propActiveTab","setActiveTab","propSetActiveTab","defaultActiveTab","disableScrollFix","disableTransition","direction","setDirection","value","setValue","defaultValue","getTabIndex","tabValue","length","indexOf","getTabId","prefix","activeIndex","tabPanelsRef","container","current","scrollTop","getTabProps","id","active","activeIndicator","verticalActiveIndicator","getTabListProps","setActiveIndex","nextActiveIndex","getTabPanelProps","role","getTabPanelsProps","ref"],"mappings":"AAAA;AACA,SAIEA,SAAS,EACTC,MAAM,EACNC,QAAQ,QACH,QAAQ;AAGf,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SAASC,eAAe,QAAQ,wBAAwB;AAOxD,MAAMC,aAAa,EAAE;AACrB,MAAMC,eAAe;AAoarB;;;;;CAKC,GACD,OAAO,SAASC,QACdC,UAAqC,CAAC,CAAC;IAEvC,MAAM,EACJC,QAAQC,UAAU,EAClBC,OAAON,UAAU,EACjBO,OAAO,EACPC,QAAQ,EACRC,SAAS,EACTC,WAAWC,aAAa,EACxBC,cAAcC,gBAAgB,EAC9BC,gBAAgB,EAChBC,gBAAgB,EAChBC,iBAAiB,EAClB,GAAGb;IAEJ,MAAMC,SAASN,aAAaO,YAAY;IACxC,MAAM,CAACY,WAAWC,aAAa,GAAGrB,SAAyB;IAE3D,MAAM,CAACa,WAAWE,aAAa,GAAGb,gBAAgB;QAChDoB,OAAOR;QACPS,UAAUP;QACVQ,cAAcP,oBAAqB;IACrC;IAEA,MAAMQ,cAAc,CAACC,WACnB,OAAOA,aAAa,YAAYjB,KAAKkB,MAAM,GAAG,IAC1ClB,KAAKmB,OAAO,CAACF,YACbA;IACN,MAAMG,WAAW,CAACH,UAAoBI,SAAS,EAAE,GAC/C,CAAC,EAAEvB,OAAO,CAAC,EAAEuB,OAAO,EAAEL,YAAYC,YAAY,EAAE,CAAC;IAEnD,MAAMK,cAAcN,YAAYZ;IAChC,MAAMmB,eAAejC,OAAoB;IACzCD,UAAU;QACR,MAAMmC,YAAYD,aAAaE,OAAO;QACtC,IAAI,CAACD,aAAaf,kBAAkB;YAClC;QACF;QAEAe,UAAUE,SAAS,GAAG;IACxB,GAAG;QAACjB;QAAkBL;KAAU;IAEhC,OAAO;QACLA;QACAE;QACAK;QACAC;QACAe,aAAYV,QAAQ;YAClB,OAAO;gBACL,iBAAiBG,SAASH,UAAUtB;gBACpCiC,IAAIR,SAASH;gBACbY,QAAQZ,aAAab;gBACrBH;gBACAE;gBACA2B,iBAAiBpB;gBACjBqB,yBAAyB7B,YAAYQ;YACvC;QACF;QACAsB;YACE,OAAO;gBACLV;gBACAW,gBAAgB,CAACC;oBACftB,aAAaU,cAAcY,kBAAkB,SAAS;oBACtD,IAAI,OAAO9B,cAAc,YAAYJ,KAAKkB,MAAM,GAAG,GAAG;wBACpDZ,aAAaN,IAAI,CAACkC,gBAAgB;oBACpC,OAAO;wBACL5B,aAAa4B;oBACf;gBACF;gBACAhC;gBACAQ;YACF;QACF;QACAyB,kBAAiBlB,QAAQ;YACvB,OAAO;gBACL,mBAAmBG,SAASH;gBAC5BW,IAAIR,SAASH,UAAUtB;gBACvByC,MAAM;gBACNP,QAAQZ,aAAab;YACvB;QACF;QACAiC;YACE,OAAO;gBACLC,KAAKf;gBACLZ;YACF;QACF;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/test-utils/IntersectionObserver.ts"],"sourcesContent":["export class IntersectionObserverMock implements IntersectionObserver {\n root: Document | Element | null;\n rootMargin: string;\n thresholds: readonly number[];\n\n elements: Set<Element>;\n\n constructor(\n public callback: IntersectionObserverCallback,\n options: IntersectionObserverInit = {}\n ) {\n this.root = options.root || null;\n this.rootMargin = options.rootMargin || \"\";\n this.thresholds =\n typeof options.threshold === \"number\"\n ? [options.threshold]\n : options.threshold ?? [];\n\n this.elements = new Set();\n }\n\n observe(target: Element): void {\n this.elements.add(target);\n\n this.callback(this.takeRecords(), this);\n }\n\n unobserve(target: Element): void {\n this.elements.delete(target);\n }\n\n takeRecords(): IntersectionObserverEntry[] {\n return [...this.elements].map<IntersectionObserverEntry>((target) => ({\n time: Date.now(),\n target,\n boundingClientRect: target.getBoundingClientRect(),\n intersectionRatio: 0,\n intersectionRect: target.getBoundingClientRect(),\n isIntersecting: false,\n rootBounds:\n this.root && \"getBoundingClientRect\" in this.root\n ? this.root.getBoundingClientRect()\n : null,\n }));\n }\n\n disconnect(): void {\n this.elements.clear();\n }\n}\n"],"names":["IntersectionObserverMock","observe","target","elements","add","callback","takeRecords","unobserve","delete","map","time","Date","now","boundingClientRect","getBoundingClientRect","intersectionRatio","intersectionRect","isIntersecting","rootBounds","root","disconnect","clear","constructor","options","rootMargin","thresholds","threshold","Set"],"mappings":";;;;;;;;;;;;;AAAA,OAAO,MAAMA;IAqBXC,QAAQC,MAAe,EAAQ;QAC7B,IAAI,CAACC,QAAQ,CAACC,GAAG,CAACF;QAElB,IAAI,CAACG,QAAQ,CAAC,IAAI,CAACC,WAAW,IAAI,IAAI;IACxC;IAEAC,UAAUL,MAAe,EAAQ;QAC/B,IAAI,CAACC,QAAQ,CAACK,MAAM,CAACN;IACvB;IAEAI,cAA2C;QACzC,OAAO;eAAI,IAAI,CAACH,QAAQ;SAAC,CAACM,GAAG,CAA4B,CAACP,SAAY,CAAA;gBACpEQ,MAAMC,KAAKC,GAAG;gBACdV;gBACAW,oBAAoBX,OAAOY,qBAAqB;gBAChDC,mBAAmB;gBACnBC,kBAAkBd,OAAOY,qBAAqB;gBAC9CG,gBAAgB;gBAChBC,YACE,IAAI,CAACC,IAAI,IAAI,2BAA2B,IAAI,CAACA,IAAI,GAC7C,IAAI,CAACA,IAAI,CAACL,qBAAqB,KAC/B;YACR,CAAA;IACF;IAEAM,aAAmB;QACjB,IAAI,CAACjB,QAAQ,CAACkB,KAAK;IACrB;IAzCAC,YACE,AAAOjB,QAAsC,EAC7CkB,UAAoC,CAAC,CAAC,CACtC;;QATFJ,uBAAAA,QAAAA,KAAAA;QACAK,uBAAAA,cAAAA,KAAAA;QACAC,uBAAAA,cAAAA,KAAAA;QAEAtB,uBAAAA,YAAAA,KAAAA;aAGSE,WAAAA;QAGP,IAAI,CAACc,IAAI,GAAGI,QAAQJ,IAAI,IAAI;QAC5B,IAAI,CAACK,UAAU,GAAGD,QAAQC,UAAU,IAAI;QACxC,IAAI,CAACC,UAAU,GACb,OAAOF,QAAQG,SAAS,KAAK,WACzB;YAACH,QAAQG,SAAS;SAAC,GACnBH,QAAQG,SAAS,IAAI,EAAE;QAE7B,IAAI,CAACvB,QAAQ,GAAG,IAAIwB;IACtB;AA8BF"}
1
+ {"version":3,"sources":["../../src/test-utils/IntersectionObserver.ts"],"sourcesContent":["export class IntersectionObserverMock implements IntersectionObserver {\n root: Document | Element | null;\n rootMargin: string;\n thresholds: readonly number[];\n\n elements: Set<Element>;\n\n constructor(\n public callback: IntersectionObserverCallback,\n options: IntersectionObserverInit = {}\n ) {\n this.root = options.root || null;\n this.rootMargin = options.rootMargin || \"\";\n this.thresholds =\n typeof options.threshold === \"number\"\n ? [options.threshold]\n : (options.threshold ?? []);\n\n this.elements = new Set();\n }\n\n observe(target: Element): void {\n this.elements.add(target);\n\n this.callback(this.takeRecords(), this);\n }\n\n unobserve(target: Element): void {\n this.elements.delete(target);\n }\n\n takeRecords(): IntersectionObserverEntry[] {\n return [...this.elements].map<IntersectionObserverEntry>((target) => ({\n time: Date.now(),\n target,\n boundingClientRect: target.getBoundingClientRect(),\n intersectionRatio: 0,\n intersectionRect: target.getBoundingClientRect(),\n isIntersecting: false,\n rootBounds:\n this.root && \"getBoundingClientRect\" in this.root\n ? this.root.getBoundingClientRect()\n : null,\n }));\n }\n\n disconnect(): void {\n this.elements.clear();\n }\n}\n"],"names":["IntersectionObserverMock","observe","target","elements","add","callback","takeRecords","unobserve","delete","map","time","Date","now","boundingClientRect","getBoundingClientRect","intersectionRatio","intersectionRect","isIntersecting","rootBounds","root","disconnect","clear","constructor","options","rootMargin","thresholds","threshold","Set"],"mappings":";;;;;;;;;;;;;AAAA,OAAO,MAAMA;IAqBXC,QAAQC,MAAe,EAAQ;QAC7B,IAAI,CAACC,QAAQ,CAACC,GAAG,CAACF;QAElB,IAAI,CAACG,QAAQ,CAAC,IAAI,CAACC,WAAW,IAAI,IAAI;IACxC;IAEAC,UAAUL,MAAe,EAAQ;QAC/B,IAAI,CAACC,QAAQ,CAACK,MAAM,CAACN;IACvB;IAEAI,cAA2C;QACzC,OAAO;eAAI,IAAI,CAACH,QAAQ;SAAC,CAACM,GAAG,CAA4B,CAACP,SAAY,CAAA;gBACpEQ,MAAMC,KAAKC,GAAG;gBACdV;gBACAW,oBAAoBX,OAAOY,qBAAqB;gBAChDC,mBAAmB;gBACnBC,kBAAkBd,OAAOY,qBAAqB;gBAC9CG,gBAAgB;gBAChBC,YACE,IAAI,CAACC,IAAI,IAAI,2BAA2B,IAAI,CAACA,IAAI,GAC7C,IAAI,CAACA,IAAI,CAACL,qBAAqB,KAC/B;YACR,CAAA;IACF;IAEAM,aAAmB;QACjB,IAAI,CAACjB,QAAQ,CAACkB,KAAK;IACrB;IAzCAC,YACE,AAAOjB,QAAsC,EAC7CkB,UAAoC,CAAC,CAAC,CACtC;;QATFJ,uBAAAA,QAAAA,KAAAA;QACAK,uBAAAA,cAAAA,KAAAA;QACAC,uBAAAA,cAAAA,KAAAA;QAEAtB,uBAAAA,YAAAA,KAAAA;aAGSE,WAAAA;QAGP,IAAI,CAACc,IAAI,GAAGI,QAAQJ,IAAI,IAAI;QAC5B,IAAI,CAACK,UAAU,GAAGD,QAAQC,UAAU,IAAI;QACxC,IAAI,CAACC,UAAU,GACb,OAAOF,QAAQG,SAAS,KAAK,WACzB;YAACH,QAAQG,SAAS;SAAC,GAClBH,QAAQG,SAAS,IAAI,EAAE;QAE9B,IAAI,CAACvB,QAAQ,GAAG,IAAIwB;IACtB;AA8BF"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  declare module "react" {
3
2
  interface HTMLAttributes<T> extends React.AriaAttributes, React.DOMAttributes<T> {
4
3
  "data-testid"?: string | number;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import type { UseStateSetter } from "../types.js";
3
2
  /** @since 6.0.0 */
4
3
  export type ColorScheme = "light" | "dark";