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

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 (665) hide show
  1. package/dist/_box-shadows.scss +76 -0
  2. package/dist/_colors.scss +279 -277
  3. package/dist/_core.scss +107 -16
  4. package/dist/_object-fit.scss +86 -0
  5. package/dist/_utils.scss +246 -72
  6. package/dist/app-bar/AppBar.d.ts +1 -90
  7. package/dist/app-bar/AppBar.js +1 -40
  8. package/dist/app-bar/AppBar.js.map +1 -1
  9. package/dist/app-bar/AppBarTitle.d.ts +1 -27
  10. package/dist/app-bar/AppBarTitle.js +1 -15
  11. package/dist/app-bar/AppBarTitle.js.map +1 -1
  12. package/dist/app-bar/_app-bar.scss +156 -25
  13. package/dist/app-bar/styles.d.ts +117 -0
  14. package/dist/app-bar/styles.js +55 -0
  15. package/dist/app-bar/styles.js.map +1 -0
  16. package/dist/autocomplete/Autocomplete.d.ts +8 -79
  17. package/dist/autocomplete/Autocomplete.js +112 -83
  18. package/dist/autocomplete/Autocomplete.js.map +1 -1
  19. package/dist/autocomplete/AutocompleteChip.d.ts +8 -0
  20. package/dist/autocomplete/AutocompleteChip.js +34 -0
  21. package/dist/autocomplete/AutocompleteChip.js.map +1 -0
  22. package/dist/autocomplete/AutocompleteCircularProgress.d.ts +5 -11
  23. package/dist/autocomplete/AutocompleteCircularProgress.js +4 -0
  24. package/dist/autocomplete/AutocompleteCircularProgress.js.map +1 -1
  25. package/dist/autocomplete/AutocompleteClearButton.d.ts +9 -0
  26. package/dist/autocomplete/AutocompleteClearButton.js +29 -0
  27. package/dist/autocomplete/AutocompleteClearButton.js.map +1 -0
  28. package/dist/autocomplete/AutocompleteDropdownButton.d.ts +4 -26
  29. package/dist/autocomplete/AutocompleteDropdownButton.js +5 -1
  30. package/dist/autocomplete/AutocompleteDropdownButton.js.map +1 -1
  31. package/dist/autocomplete/AutocompleteListboxChildren.d.ts +22 -0
  32. package/dist/autocomplete/AutocompleteListboxChildren.js +37 -0
  33. package/dist/autocomplete/AutocompleteListboxChildren.js.map +1 -0
  34. package/dist/autocomplete/_autocomplete.scss +362 -34
  35. package/dist/autocomplete/autocompleteStyles.d.ts +22 -0
  36. package/dist/autocomplete/autocompleteStyles.js +17 -8
  37. package/dist/autocomplete/autocompleteStyles.js.map +1 -1
  38. package/dist/autocomplete/defaults.d.ts +9 -9
  39. package/dist/autocomplete/defaults.js +13 -13
  40. package/dist/autocomplete/defaults.js.map +1 -1
  41. package/dist/autocomplete/types.d.ts +554 -56
  42. package/dist/autocomplete/types.js.map +1 -1
  43. package/dist/autocomplete/useAutocomplete.d.ts +22 -0
  44. package/dist/autocomplete/useAutocomplete.js +281 -0
  45. package/dist/autocomplete/useAutocomplete.js.map +1 -0
  46. package/dist/autocomplete/utils.d.ts +81 -0
  47. package/dist/autocomplete/utils.js +108 -0
  48. package/dist/autocomplete/utils.js.map +1 -0
  49. package/dist/avatar/_avatar.scss +93 -2
  50. package/dist/badge/Badge.d.ts +1 -20
  51. package/dist/badge/Badge.js +1 -14
  52. package/dist/badge/Badge.js.map +1 -1
  53. package/dist/badge/_badge.scss +90 -3
  54. package/dist/badge/styles.d.ts +26 -0
  55. package/dist/badge/styles.js +18 -0
  56. package/dist/badge/styles.js.map +1 -0
  57. package/dist/box/Box.js +2 -1
  58. package/dist/box/Box.js.map +1 -1
  59. package/dist/box/_box.scss +130 -17
  60. package/dist/box/styles.d.ts +6 -0
  61. package/dist/box/styles.js +2 -1
  62. package/dist/box/styles.js.map +1 -1
  63. package/dist/button/AsyncButton.d.ts +1 -1
  64. package/dist/button/AsyncButton.js.map +1 -1
  65. package/dist/button/Button.d.ts +2 -1
  66. package/dist/button/Button.js +2 -1
  67. package/dist/button/Button.js.map +1 -1
  68. package/dist/button/_button.scss +157 -25
  69. package/dist/card/Card.d.ts +16 -0
  70. package/dist/card/Card.js +11 -3
  71. package/dist/card/Card.js.map +1 -1
  72. package/dist/card/ClickableCard.d.ts +2 -1
  73. package/dist/card/ClickableCard.js +5 -2
  74. package/dist/card/ClickableCard.js.map +1 -1
  75. package/dist/card/_card.scss +90 -19
  76. package/dist/card/styles.d.ts +0 -7
  77. package/dist/card/styles.js +2 -3
  78. package/dist/card/styles.js.map +1 -1
  79. package/dist/chip/Chip.d.ts +2 -1
  80. package/dist/chip/Chip.js +2 -1
  81. package/dist/chip/Chip.js.map +1 -1
  82. package/dist/chip/_chip.scss +45 -22
  83. package/dist/chip/styles.d.ts +12 -10
  84. package/dist/chip/styles.js.map +1 -1
  85. package/dist/cssUtils.js.map +1 -1
  86. package/dist/delegateEvent.d.ts +2 -2
  87. package/dist/delegateEvent.js.map +1 -1
  88. package/dist/dialog/Dialog.d.ts +8 -21
  89. package/dist/dialog/Dialog.js +27 -27
  90. package/dist/dialog/Dialog.js.map +1 -1
  91. package/dist/dialog/FixedDialog.d.ts +1 -3
  92. package/dist/dialog/FixedDialog.js +0 -8
  93. package/dist/dialog/FixedDialog.js.map +1 -1
  94. package/dist/dialog/_dialog.scss +67 -13
  95. package/dist/dialog/styles.d.ts +56 -0
  96. package/dist/dialog/styles.js +29 -2
  97. package/dist/dialog/styles.js.map +1 -1
  98. package/dist/divider/Divider.d.ts +0 -11
  99. package/dist/divider/Divider.js.map +1 -1
  100. package/dist/divider/_divider.scss +7 -1
  101. package/dist/divider/styles.d.ts +11 -0
  102. package/dist/divider/styles.js.map +1 -1
  103. package/dist/draggable/useDraggable.d.ts +6 -6
  104. package/dist/draggable/useDraggable.js.map +1 -1
  105. package/dist/draggable/utils.d.ts +3 -3
  106. package/dist/draggable/utils.js.map +1 -1
  107. package/dist/expansion-panel/ExpansionPanel.d.ts +1 -1
  108. package/dist/expansion-panel/ExpansionPanel.js.map +1 -1
  109. package/dist/expansion-panel/_expansion-panel.scss +5 -1
  110. package/dist/expansion-panel/useExpansionPanels.js +12 -24
  111. package/dist/expansion-panel/useExpansionPanels.js.map +1 -1
  112. package/dist/{form → files}/FileInput.d.ts +3 -6
  113. package/dist/{form → files}/FileInput.js +3 -6
  114. package/dist/files/FileInput.js.map +1 -0
  115. package/dist/files/_files.scss +22 -0
  116. package/dist/files/styles.d.ts +5 -0
  117. package/dist/files/styles.js +7 -0
  118. package/dist/files/styles.js.map +1 -0
  119. package/dist/{form → files}/useFileUpload.d.ts +7 -9
  120. package/dist/{form → files}/useFileUpload.js +5 -7
  121. package/dist/files/useFileUpload.js.map +1 -0
  122. package/dist/files/utils.d.ts +169 -0
  123. package/dist/files/utils.js +114 -0
  124. package/dist/files/utils.js.map +1 -0
  125. package/dist/{form/fileUtils.d.ts → files/validation.d.ts} +11 -176
  126. package/dist/{form/fileUtils.js → files/validation.js} +10 -135
  127. package/dist/files/validation.js.map +1 -0
  128. package/dist/focus/useFocusContainer.d.ts +2 -2
  129. package/dist/focus/useFocusContainer.js.map +1 -1
  130. package/dist/focus/utils.js.map +1 -1
  131. package/dist/form/FormMessage.js.map +1 -1
  132. package/dist/form/FormMessageContainer.js +4 -2
  133. package/dist/form/FormMessageContainer.js.map +1 -1
  134. package/dist/form/InputToggle.d.ts +2 -1
  135. package/dist/form/InputToggle.js +2 -1
  136. package/dist/form/InputToggle.js.map +1 -1
  137. package/dist/form/InputToggleIcon.js.map +1 -1
  138. package/dist/form/Label.js +2 -2
  139. package/dist/form/Label.js.map +1 -1
  140. package/dist/form/Listbox.d.ts +24 -0
  141. package/dist/form/Listbox.js +46 -0
  142. package/dist/form/Listbox.js.map +1 -0
  143. package/dist/form/ListboxProvider.d.ts +21 -0
  144. package/dist/form/{useListboxProvider.js → ListboxProvider.js} +1 -1
  145. package/dist/form/ListboxProvider.js.map +1 -0
  146. package/dist/form/MenuItemTextField.js +1 -2
  147. package/dist/form/MenuItemTextField.js.map +1 -1
  148. package/dist/form/NativeSelect.js +7 -4
  149. package/dist/form/NativeSelect.js.map +1 -1
  150. package/dist/form/Option.d.ts +49 -10
  151. package/dist/form/Option.js +11 -9
  152. package/dist/form/Option.js.map +1 -1
  153. package/dist/form/Password.js.map +1 -1
  154. package/dist/form/Select.d.ts +2 -2
  155. package/dist/form/Select.js +81 -85
  156. package/dist/form/Select.js.map +1 -1
  157. package/dist/form/SelectedOption.js +2 -1
  158. package/dist/form/SelectedOption.js.map +1 -1
  159. package/dist/form/Slider.d.ts +4 -4
  160. package/dist/form/Slider.js +6 -2
  161. package/dist/form/Slider.js.map +1 -1
  162. package/dist/form/SliderThumb.d.ts +3 -3
  163. package/dist/form/SliderThumb.js.map +1 -1
  164. package/dist/form/SliderValueMarks.d.ts +2 -2
  165. package/dist/form/SliderValueMarks.js.map +1 -1
  166. package/dist/form/SliderValueTooltip.js.map +1 -1
  167. package/dist/form/TextArea.js +1 -2
  168. package/dist/form/TextArea.js.map +1 -1
  169. package/dist/form/TextField.js +1 -2
  170. package/dist/form/TextField.js.map +1 -1
  171. package/dist/form/TextFieldContainer.js +1 -2
  172. package/dist/form/TextFieldContainer.js.map +1 -1
  173. package/dist/form/_form.scss +193 -124
  174. package/dist/form/formMessageContainerStyles.d.ts +10 -0
  175. package/dist/form/formMessageContainerStyles.js +11 -0
  176. package/dist/form/formMessageContainerStyles.js.map +1 -0
  177. package/dist/form/inputToggleStyles.js.map +1 -1
  178. package/dist/form/optionStyles.d.ts +1 -0
  179. package/dist/form/optionStyles.js +2 -2
  180. package/dist/form/optionStyles.js.map +1 -1
  181. package/dist/form/selectUtils.js.map +1 -1
  182. package/dist/form/sliderUtils.d.ts +1 -1
  183. package/dist/form/sliderUtils.js.map +1 -1
  184. package/dist/form/textFieldContainerStyles.d.ts +0 -2
  185. package/dist/form/textFieldContainerStyles.js +1 -2
  186. package/dist/form/textFieldContainerStyles.js.map +1 -1
  187. package/dist/form/types.d.ts +3 -10
  188. package/dist/form/types.js.map +1 -1
  189. package/dist/form/useCheckboxGroup.d.ts +17 -17
  190. package/dist/form/useCheckboxGroup.js +9 -17
  191. package/dist/form/useCheckboxGroup.js.map +1 -1
  192. package/dist/form/useCombobox.d.ts +56 -21
  193. package/dist/form/useCombobox.js +19 -4
  194. package/dist/form/useCombobox.js.map +1 -1
  195. package/dist/form/useEditableCombobox.d.ts +24 -4
  196. package/dist/form/useEditableCombobox.js +5 -0
  197. package/dist/form/useEditableCombobox.js.map +1 -1
  198. package/dist/form/useNumberField.js.map +1 -1
  199. package/dist/form/useRadioGroup.d.ts +6 -6
  200. package/dist/form/useRadioGroup.js.map +1 -1
  201. package/dist/form/useResizingTextArea.js.map +1 -1
  202. package/dist/form/useSelectCombobox.d.ts +3 -4
  203. package/dist/form/useSelectCombobox.js.map +1 -1
  204. package/dist/form/useTextField.d.ts +1 -1
  205. package/dist/form/useTextField.js.map +1 -1
  206. package/dist/form/useTextFieldContainerAddons.js.map +1 -1
  207. package/dist/hoverMode/useHoverMode.d.ts +3 -3
  208. package/dist/hoverMode/useHoverMode.js.map +1 -1
  209. package/dist/hoverMode/useHoverModeProvider.d.ts +4 -4
  210. package/dist/hoverMode/useHoverModeProvider.js.map +1 -1
  211. package/dist/icon/FontIcon.d.ts +4 -2
  212. package/dist/icon/FontIcon.js.map +1 -1
  213. package/dist/icon/TextIconSpacing.d.ts +3 -1
  214. package/dist/icon/TextIconSpacing.js.map +1 -1
  215. package/dist/icon/_icon.scss +151 -2
  216. package/dist/icon/iconConfig.d.ts +10 -0
  217. package/dist/icon/iconConfig.js +7 -0
  218. package/dist/icon/iconConfig.js.map +1 -1
  219. package/dist/icon/materialConfig.js.map +1 -1
  220. package/dist/icon/styles.js.map +1 -1
  221. package/dist/interaction/UserInteractionModeProvider.d.ts +5 -5
  222. package/dist/interaction/UserInteractionModeProvider.js +12 -8
  223. package/dist/interaction/UserInteractionModeProvider.js.map +1 -1
  224. package/dist/interaction/types.d.ts +20 -2
  225. package/dist/interaction/types.js.map +1 -1
  226. package/dist/interaction/useElementInteraction.d.ts +7 -1
  227. package/dist/interaction/useElementInteraction.js +1 -2
  228. package/dist/interaction/useElementInteraction.js.map +1 -1
  229. package/dist/interaction/utils.d.ts +2 -2
  230. package/dist/interaction/utils.js +2 -2
  231. package/dist/interaction/utils.js.map +1 -1
  232. package/dist/layout/LayoutWindowSplitter.js.map +1 -1
  233. package/dist/layout/_layout.scss +23 -10
  234. package/dist/layout/useExpandableLayout.d.ts +3 -3
  235. package/dist/layout/useExpandableLayout.js.map +1 -1
  236. package/dist/layout/useLayoutAppBarHeight.d.ts +2 -3
  237. package/dist/layout/useLayoutAppBarHeight.js.map +1 -1
  238. package/dist/layout/useTemporaryLayout.d.ts +2 -2
  239. package/dist/layout/useTemporaryLayout.js.map +1 -1
  240. package/dist/link/SkipToMainContent.js.map +1 -1
  241. package/dist/list/ListItem.d.ts +2 -1
  242. package/dist/list/ListItem.js +2 -1
  243. package/dist/list/ListItem.js.map +1 -1
  244. package/dist/list/ListItemChildren.js.map +1 -1
  245. package/dist/list/ListItemLink.d.ts +2 -1
  246. package/dist/list/ListItemLink.js +2 -1
  247. package/dist/list/ListItemLink.js.map +1 -1
  248. package/dist/list/_list.scss +6 -5
  249. package/dist/media-queries/_media-queries.scss +12 -0
  250. package/dist/media-queries/appSize.js.map +1 -1
  251. package/dist/media-queries/useMediaQuery.js +3 -1
  252. package/dist/media-queries/useMediaQuery.js.map +1 -1
  253. package/dist/menu/DropdownMenu.js.map +1 -1
  254. package/dist/menu/Menu.d.ts +8 -3
  255. package/dist/menu/Menu.js +2 -1
  256. package/dist/menu/Menu.js.map +1 -1
  257. package/dist/menu/MenuItemButton.js +6 -2
  258. package/dist/menu/MenuItemButton.js.map +1 -1
  259. package/dist/menu/useContextMenu.d.ts +3 -3
  260. package/dist/menu/useContextMenu.js.map +1 -1
  261. package/dist/movement/types.d.ts +5 -5
  262. package/dist/movement/types.js.map +1 -1
  263. package/dist/navigation/CollapsibleNavGroup.d.ts +5 -3
  264. package/dist/navigation/CollapsibleNavGroup.js +3 -4
  265. package/dist/navigation/CollapsibleNavGroup.js.map +1 -1
  266. package/dist/navigation/DefaultNavigationRenderer.d.ts +1 -2
  267. package/dist/navigation/DefaultNavigationRenderer.js +6 -2
  268. package/dist/navigation/DefaultNavigationRenderer.js.map +1 -1
  269. package/dist/navigation/NavItemButton.d.ts +1 -1
  270. package/dist/navigation/NavItemButton.js +1 -0
  271. package/dist/navigation/NavItemButton.js.map +1 -1
  272. package/dist/navigation/NavItemLink.d.ts +3 -2
  273. package/dist/navigation/NavItemLink.js +6 -2
  274. package/dist/navigation/NavItemLink.js.map +1 -1
  275. package/dist/navigation/NavSubheader.d.ts +2 -3
  276. package/dist/navigation/NavSubheader.js.map +1 -1
  277. package/dist/navigation/Navigation.d.ts +1 -1
  278. package/dist/navigation/Navigation.js.map +1 -1
  279. package/dist/navigation/_navigation.scss +6 -5
  280. package/dist/navigation/types.d.ts +54 -6
  281. package/dist/navigation/types.js.map +1 -1
  282. package/dist/navigation/useActiveHeadingId.d.ts +1 -1
  283. package/dist/navigation/useActiveHeadingId.js.map +1 -1
  284. package/dist/navigation/useNavigationExpansion.d.ts +104 -0
  285. package/dist/navigation/useNavigationExpansion.js +77 -0
  286. package/dist/navigation/useNavigationExpansion.js.map +1 -0
  287. package/dist/navigation/utils.d.ts +13 -0
  288. package/dist/navigation/utils.js +36 -0
  289. package/dist/navigation/utils.js.map +1 -0
  290. package/dist/objectFit.d.ts +69 -0
  291. package/dist/objectFit.js +52 -0
  292. package/dist/objectFit.js.map +1 -0
  293. package/dist/overlay/_overlay.scss +2 -1
  294. package/dist/positioning/useFixedPositioning.d.ts +17 -4
  295. package/dist/positioning/useFixedPositioning.js +10 -5
  296. package/dist/positioning/useFixedPositioning.js.map +1 -1
  297. package/dist/positioning/utils.js.map +1 -1
  298. package/dist/progress/LinearProgress.js.map +1 -1
  299. package/dist/progress/_progress.scss +20 -14
  300. package/dist/responsive-item/ResponsiveItem.d.ts +64 -0
  301. package/dist/responsive-item/ResponsiveItem.js +68 -0
  302. package/dist/responsive-item/ResponsiveItem.js.map +1 -0
  303. package/dist/responsive-item/ResponsiveItemOverlay.d.ts +1 -19
  304. package/dist/responsive-item/ResponsiveItemOverlay.js +1 -12
  305. package/dist/responsive-item/ResponsiveItemOverlay.js.map +1 -1
  306. package/dist/responsive-item/_responsive-item.scss +110 -133
  307. package/dist/responsive-item/responsiveItemOverlayStyles.d.ts +19 -0
  308. package/dist/responsive-item/responsiveItemOverlayStyles.js +14 -0
  309. package/dist/responsive-item/responsiveItemOverlayStyles.js.map +1 -0
  310. package/dist/responsive-item/responsiveItemStyles.d.ts +52 -0
  311. package/dist/responsive-item/responsiveItemStyles.js +15 -0
  312. package/dist/responsive-item/responsiveItemStyles.js.map +1 -0
  313. package/dist/scroll/useScrollLock.d.ts +5 -0
  314. package/dist/scroll/useScrollLock.js.map +1 -1
  315. package/dist/searching/utils.d.ts +2 -2
  316. package/dist/searching/utils.js.map +1 -1
  317. package/dist/segmented-button/SegmentedButton.d.ts +2 -1
  318. package/dist/segmented-button/SegmentedButton.js +2 -1
  319. package/dist/segmented-button/SegmentedButton.js.map +1 -1
  320. package/dist/segmented-button/_segmented-button.scss +6 -6
  321. package/dist/sheet/_sheet.scss +18 -6
  322. package/dist/snackbar/ToastManager.js +15 -5
  323. package/dist/snackbar/ToastManager.js.map +1 -1
  324. package/dist/snackbar/_snackbar.scss +30 -17
  325. package/dist/snackbar/useCurrentToastActions.d.ts +5 -5
  326. package/dist/snackbar/useCurrentToastActions.js.map +1 -1
  327. package/dist/table/_table.scss +15 -3
  328. package/dist/table/tableCellStyles.d.ts +7 -3
  329. package/dist/table/tableCellStyles.js +2 -2
  330. package/dist/table/tableCellStyles.js.map +1 -1
  331. package/dist/tabs/Tab.d.ts +2 -1
  332. package/dist/tabs/Tab.js +2 -1
  333. package/dist/tabs/Tab.js.map +1 -1
  334. package/dist/tabs/TabList.d.ts +2 -2
  335. package/dist/tabs/TabList.js.map +1 -1
  336. package/dist/tabs/TabListScrollButton.d.ts +1 -1
  337. package/dist/tabs/TabListScrollButton.js +1 -1
  338. package/dist/tabs/TabListScrollButton.js.map +1 -1
  339. package/dist/tabs/_tabs.scss +30 -9
  340. package/dist/tabs/getTabListScrollToOptions.d.ts +18 -0
  341. package/dist/tabs/getTabListScrollToOptions.js +19 -0
  342. package/dist/tabs/getTabListScrollToOptions.js.map +1 -0
  343. package/dist/tabs/tabStyles.d.ts +3 -0
  344. package/dist/tabs/tabStyles.js.map +1 -1
  345. package/dist/tabs/useTabList.d.ts +1 -8
  346. package/dist/tabs/useTabList.js +1 -0
  347. package/dist/tabs/useTabList.js.map +1 -1
  348. package/dist/tabs/useTabs.d.ts +6 -6
  349. package/dist/tabs/useTabs.js.map +1 -1
  350. package/dist/tabs/utils.d.ts +0 -18
  351. package/dist/tabs/utils.js +0 -15
  352. package/dist/tabs/utils.js.map +1 -1
  353. package/dist/test-utils/ResizeObserver.d.ts +11 -12
  354. package/dist/test-utils/ResizeObserver.js +11 -12
  355. package/dist/test-utils/ResizeObserver.js.map +1 -1
  356. package/dist/test-utils/matchMedia.d.ts +3 -3
  357. package/dist/test-utils/matchMedia.js +6 -6
  358. package/dist/test-utils/matchMedia.js.map +1 -1
  359. package/dist/test-utils/polyfills/TextDecoder.js +0 -1
  360. package/dist/test-utils/polyfills/TextDecoder.js.map +1 -1
  361. package/dist/test-utils/timers.d.ts +9 -5
  362. package/dist/test-utils/timers.js +5 -5
  363. package/dist/test-utils/timers.js.map +1 -1
  364. package/dist/theme/LocalStorageColorSchemeProvider.d.ts +1 -1
  365. package/dist/theme/LocalStorageColorSchemeProvider.js +2 -1
  366. package/dist/theme/LocalStorageColorSchemeProvider.js.map +1 -1
  367. package/dist/theme/ThemeProvider.js +3 -1
  368. package/dist/theme/ThemeProvider.js.map +1 -1
  369. package/dist/theme/_a11y.scss +86 -13
  370. package/dist/theme/_colors.scss +279 -277
  371. package/dist/theme/_theme.scss +308 -37
  372. package/dist/theme/isColorScheme.d.ts +16 -0
  373. package/dist/theme/isColorScheme.js +19 -0
  374. package/dist/theme/isColorScheme.js.map +1 -0
  375. package/dist/theme/types.d.ts +53 -1
  376. package/dist/theme/types.js +1 -23
  377. package/dist/theme/types.js.map +1 -1
  378. package/dist/theme/useCSSVariables.d.ts +2 -19
  379. package/dist/theme/useCSSVariables.js.map +1 -1
  380. package/dist/theme/useColorScheme.d.ts +1 -35
  381. package/dist/theme/useColorScheme.js.map +1 -1
  382. package/dist/theme/useColorSchemeMetaTag.d.ts +1 -1
  383. package/dist/theme/useColorSchemeMetaTag.js.map +1 -1
  384. package/dist/theme/useColorSchemeProvider.d.ts +1 -1
  385. package/dist/theme/useColorSchemeProvider.js +1 -1
  386. package/dist/theme/useColorSchemeProvider.js.map +1 -1
  387. package/dist/theme/{usePrefersColorScheme.js → usePrefersDarkScheme.js} +1 -1
  388. package/dist/theme/usePrefersDarkScheme.js.map +1 -0
  389. package/dist/theme/utils.js.map +1 -1
  390. package/dist/tooltip/useTooltip.d.ts +14 -9
  391. package/dist/tooltip/useTooltip.js +2 -1
  392. package/dist/tooltip/useTooltip.js.map +1 -1
  393. package/dist/transition/_transition.scss +16 -9
  394. package/dist/transition/skeletonPlaceholderUtils.js.map +1 -1
  395. package/dist/transition/types.d.ts +1 -1
  396. package/dist/transition/types.js.map +1 -1
  397. package/dist/transition/useCarousel.d.ts +3 -3
  398. package/dist/transition/useCarousel.js.map +1 -1
  399. package/dist/transition/useCollapseTransition.js.map +1 -1
  400. package/dist/transition/useTransition.js +1 -0
  401. package/dist/transition/useTransition.js.map +1 -1
  402. package/dist/transition/utils.js.map +1 -1
  403. package/dist/tree/TreeItem.d.ts +2 -1
  404. package/dist/tree/TreeItem.js +4 -3
  405. package/dist/tree/TreeItem.js.map +1 -1
  406. package/dist/tree/TreeItemExpander.js.map +1 -1
  407. package/dist/tree/_tree.scss +8 -6
  408. package/dist/tree/useTreeExpansion.d.ts +1 -1
  409. package/dist/tree/useTreeExpansion.js +6 -18
  410. package/dist/tree/useTreeExpansion.js.map +1 -1
  411. package/dist/tree/useTreeSelection.d.ts +1 -1
  412. package/dist/tree/useTreeSelection.js +7 -25
  413. package/dist/tree/useTreeSelection.js.map +1 -1
  414. package/dist/tree/utils.d.ts +1 -1
  415. package/dist/tree/utils.js.map +1 -1
  416. package/dist/types.d.ts +12 -4
  417. package/dist/types.js.map +1 -1
  418. package/dist/typography/WritingDirectionProvider.d.ts +1 -1
  419. package/dist/typography/WritingDirectionProvider.js.map +1 -1
  420. package/dist/typography/_typography.scss +94 -37
  421. package/dist/typography/typographyStyles.js.map +1 -1
  422. package/dist/useDebouncedFunction.d.ts +1 -5
  423. package/dist/useDebouncedFunction.js +3 -1
  424. package/dist/useDebouncedFunction.js.map +1 -1
  425. package/dist/useDropzone.d.ts +4 -4
  426. package/dist/useDropzone.js.map +1 -1
  427. package/dist/useEnsuredId.js.map +1 -1
  428. package/dist/useIntersectionObserver.d.ts +5 -5
  429. package/dist/useIntersectionObserver.js.map +1 -1
  430. package/dist/useLocalStorage.d.ts +3 -3
  431. package/dist/useLocalStorage.js +1 -1
  432. package/dist/useLocalStorage.js.map +1 -1
  433. package/dist/useMutationObserver.d.ts +1 -1
  434. package/dist/useMutationObserver.js.map +1 -1
  435. package/dist/useOrientation.js +3 -1
  436. package/dist/useOrientation.js.map +1 -1
  437. package/dist/usePageInactive.d.ts +2 -2
  438. package/dist/usePageInactive.js.map +1 -1
  439. package/dist/useReadonlySet.d.ts +76 -0
  440. package/dist/useReadonlySet.js +72 -0
  441. package/dist/useReadonlySet.js.map +1 -0
  442. package/dist/useResizeListener.d.ts +1 -1
  443. package/dist/useResizeListener.js.map +1 -1
  444. package/dist/useResizeObserver.d.ts +19 -0
  445. package/dist/useResizeObserver.js +19 -0
  446. package/dist/useResizeObserver.js.map +1 -1
  447. package/dist/useThrottledFunction.d.ts +1 -5
  448. package/dist/useThrottledFunction.js +3 -1
  449. package/dist/useThrottledFunction.js.map +1 -1
  450. package/dist/useToggle.d.ts +3 -3
  451. package/dist/useToggle.js.map +1 -1
  452. package/dist/utils/RenderRecursively.d.ts +2 -2
  453. package/dist/utils/RenderRecursively.js.map +1 -1
  454. package/dist/utils/alphaNumericSort.d.ts +5 -5
  455. package/dist/utils/alphaNumericSort.js.map +1 -1
  456. package/dist/utils/bem.d.ts +1 -1
  457. package/dist/utils/bem.js +1 -1
  458. package/dist/utils/bem.js.map +1 -1
  459. package/dist/utils/debounce.d.ts +5 -0
  460. package/dist/utils/debounce.js +17 -0
  461. package/dist/utils/debounce.js.map +1 -0
  462. package/dist/utils/nearest.js.map +1 -1
  463. package/dist/utils/parseCssLengthUnit.js.map +1 -1
  464. package/dist/utils/throttle.d.ts +5 -0
  465. package/dist/utils/throttle.js +30 -0
  466. package/dist/utils/throttle.js.map +1 -0
  467. package/dist/utils/wait.js +3 -1
  468. package/dist/utils/wait.js.map +1 -1
  469. package/dist/window-splitter/WindowSplitter.d.ts +37 -15
  470. package/dist/window-splitter/WindowSplitter.js +38 -17
  471. package/dist/window-splitter/WindowSplitter.js.map +1 -1
  472. package/dist/window-splitter/_window-splitter.scss +32 -14
  473. package/dist/window-splitter/styles.d.ts +14 -0
  474. package/dist/window-splitter/styles.js +18 -0
  475. package/dist/window-splitter/styles.js.map +1 -0
  476. package/package.json +25 -24
  477. package/src/app-bar/AppBar.tsx +1 -170
  478. package/src/app-bar/AppBarTitle.tsx +1 -44
  479. package/src/app-bar/styles.ts +206 -0
  480. package/src/autocomplete/Autocomplete.tsx +194 -211
  481. package/src/autocomplete/AutocompleteChip.tsx +48 -0
  482. package/src/autocomplete/AutocompleteCircularProgress.tsx +6 -17
  483. package/src/autocomplete/AutocompleteClearButton.tsx +44 -0
  484. package/src/autocomplete/AutocompleteDropdownButton.tsx +16 -37
  485. package/src/autocomplete/AutocompleteListboxChildren.tsx +68 -0
  486. package/src/autocomplete/autocompleteStyles.ts +48 -9
  487. package/src/autocomplete/defaults.ts +26 -17
  488. package/src/autocomplete/types.ts +744 -61
  489. package/src/autocomplete/useAutocomplete.ts +428 -0
  490. package/src/autocomplete/utils.ts +211 -0
  491. package/src/badge/Badge.tsx +1 -39
  492. package/src/badge/styles.ts +45 -0
  493. package/src/box/Box.tsx +11 -9
  494. package/src/box/styles.ts +14 -5
  495. package/src/button/AsyncButton.tsx +1 -1
  496. package/src/button/Button.tsx +5 -1
  497. package/src/card/Card.tsx +35 -4
  498. package/src/card/ClickableCard.tsx +9 -2
  499. package/src/card/styles.ts +1 -10
  500. package/src/chip/Chip.tsx +6 -1
  501. package/src/chip/styles.ts +12 -10
  502. package/src/delegateEvent.ts +5 -5
  503. package/src/dialog/Dialog.tsx +48 -61
  504. package/src/dialog/FixedDialog.tsx +1 -11
  505. package/src/dialog/styles.ts +97 -0
  506. package/src/divider/Divider.tsx +0 -12
  507. package/src/divider/styles.ts +12 -0
  508. package/src/draggable/useDraggable.ts +17 -10
  509. package/src/draggable/utils.ts +3 -3
  510. package/src/expansion-panel/ExpansionPanel.tsx +1 -1
  511. package/src/expansion-panel/useExpansionPanels.ts +18 -27
  512. package/src/{form → files}/FileInput.tsx +7 -15
  513. package/src/files/styles.ts +10 -0
  514. package/src/{form → files}/useFileUpload.ts +30 -34
  515. package/src/files/utils.ts +234 -0
  516. package/src/{form/fileUtils.ts → files/validation.ts} +15 -244
  517. package/src/focus/useFocusContainer.ts +16 -8
  518. package/src/form/FormMessageContainer.tsx +2 -2
  519. package/src/form/InputToggle.tsx +5 -1
  520. package/src/form/Label.tsx +18 -18
  521. package/src/form/Listbox.tsx +87 -0
  522. package/src/form/ListboxProvider.ts +37 -0
  523. package/src/form/MenuItemTextField.tsx +1 -2
  524. package/src/form/NativeSelect.tsx +14 -10
  525. package/src/form/Option.tsx +74 -22
  526. package/src/form/Select.tsx +89 -85
  527. package/src/form/SelectedOption.tsx +2 -0
  528. package/src/form/Slider.tsx +14 -11
  529. package/src/form/SliderThumb.tsx +4 -4
  530. package/src/form/SliderValueMarks.tsx +4 -4
  531. package/src/form/TextArea.tsx +6 -8
  532. package/src/form/TextField.tsx +0 -2
  533. package/src/form/TextFieldContainer.tsx +9 -11
  534. package/src/form/formMessageContainerStyles.ts +22 -0
  535. package/src/form/optionStyles.ts +7 -2
  536. package/src/form/sliderUtils.ts +1 -1
  537. package/src/form/textFieldContainerStyles.ts +9 -14
  538. package/src/form/types.ts +3 -11
  539. package/src/form/useCheckboxGroup.ts +28 -36
  540. package/src/form/useCombobox.ts +86 -38
  541. package/src/form/useEditableCombobox.ts +43 -8
  542. package/src/form/useRadioGroup.ts +6 -6
  543. package/src/form/useSelectCombobox.ts +4 -4
  544. package/src/form/useTextField.ts +1 -1
  545. package/src/hoverMode/useHoverMode.ts +3 -3
  546. package/src/hoverMode/useHoverModeProvider.ts +4 -4
  547. package/src/icon/FontIcon.tsx +4 -2
  548. package/src/icon/TextIconSpacing.tsx +1 -1
  549. package/src/icon/iconConfig.tsx +12 -0
  550. package/src/interaction/UserInteractionModeProvider.tsx +12 -8
  551. package/src/interaction/types.ts +21 -2
  552. package/src/interaction/useElementInteraction.tsx +9 -2
  553. package/src/interaction/utils.ts +7 -7
  554. package/src/layout/useExpandableLayout.ts +3 -3
  555. package/src/layout/useLayoutAppBarHeight.ts +3 -4
  556. package/src/layout/useTemporaryLayout.ts +2 -2
  557. package/src/list/ListItem.tsx +5 -1
  558. package/src/list/ListItemLink.tsx +5 -1
  559. package/src/media-queries/useMediaQuery.ts +2 -1
  560. package/src/menu/Menu.tsx +11 -3
  561. package/src/menu/MenuItemButton.tsx +7 -1
  562. package/src/menu/useContextMenu.ts +3 -3
  563. package/src/movement/types.ts +5 -5
  564. package/src/navigation/CollapsibleNavGroup.tsx +16 -8
  565. package/src/navigation/DefaultNavigationRenderer.tsx +8 -6
  566. package/src/navigation/NavItemButton.tsx +2 -1
  567. package/src/navigation/NavItemLink.tsx +11 -3
  568. package/src/navigation/NavSubheader.tsx +1 -1
  569. package/src/navigation/Navigation.tsx +1 -1
  570. package/src/navigation/types.ts +60 -10
  571. package/src/navigation/useActiveHeadingId.ts +1 -1
  572. package/src/navigation/useNavigationExpansion.ts +170 -0
  573. package/src/navigation/utils.ts +47 -0
  574. package/src/objectFit.ts +88 -0
  575. package/src/positioning/useFixedPositioning.ts +34 -11
  576. package/src/responsive-item/ResponsiveItem.tsx +96 -0
  577. package/src/responsive-item/ResponsiveItemOverlay.tsx +6 -46
  578. package/src/responsive-item/responsiveItemOverlayStyles.ts +46 -0
  579. package/src/responsive-item/responsiveItemStyles.ts +81 -0
  580. package/src/scroll/useScrollLock.ts +6 -0
  581. package/src/searching/utils.ts +3 -3
  582. package/src/segmented-button/SegmentedButton.tsx +5 -1
  583. package/src/snackbar/ToastManager.tsx +16 -5
  584. package/src/snackbar/useCurrentToastActions.ts +5 -5
  585. package/src/table/tableCellStyles.ts +10 -6
  586. package/src/tabs/Tab.tsx +4 -1
  587. package/src/tabs/TabList.tsx +2 -2
  588. package/src/tabs/TabListScrollButton.tsx +4 -4
  589. package/src/tabs/getTabListScrollToOptions.ts +37 -0
  590. package/src/tabs/tabStyles.ts +4 -0
  591. package/src/tabs/useTabList.ts +2 -9
  592. package/src/tabs/useTabs.ts +6 -6
  593. package/src/tabs/utils.ts +0 -38
  594. package/src/test-utils/ResizeObserver.ts +11 -12
  595. package/src/test-utils/matchMedia.ts +7 -7
  596. package/src/test-utils/polyfills/TextDecoder.ts +0 -1
  597. package/src/test-utils/timers.ts +10 -7
  598. package/src/theme/LocalStorageColorSchemeProvider.tsx +4 -4
  599. package/src/theme/ThemeProvider.tsx +3 -3
  600. package/src/theme/isColorScheme.ts +22 -0
  601. package/src/theme/types.ts +67 -1
  602. package/src/theme/useCSSVariables.ts +7 -30
  603. package/src/theme/useColorScheme.ts +1 -40
  604. package/src/theme/useColorSchemeMetaTag.ts +1 -1
  605. package/src/theme/useColorSchemeProvider.ts +2 -2
  606. package/src/tooltip/useTooltip.ts +17 -9
  607. package/src/transition/types.ts +1 -1
  608. package/src/transition/useCarousel.ts +3 -3
  609. package/src/transition/useTransition.ts +1 -0
  610. package/src/tree/TreeItem.tsx +7 -1
  611. package/src/tree/TreeItemExpander.tsx +1 -1
  612. package/src/tree/useTreeExpansion.ts +7 -25
  613. package/src/tree/useTreeSelection.ts +8 -32
  614. package/src/tree/utils.ts +6 -2
  615. package/src/types.ts +20 -4
  616. package/src/typography/WritingDirectionProvider.tsx +1 -1
  617. package/src/useDebouncedFunction.ts +4 -9
  618. package/src/useDropzone.ts +4 -4
  619. package/src/useIntersectionObserver.ts +5 -5
  620. package/src/useLocalStorage.ts +6 -6
  621. package/src/useMutationObserver.ts +1 -1
  622. package/src/useOrientation.ts +3 -1
  623. package/src/usePageInactive.ts +2 -2
  624. package/src/useReadonlySet.ts +122 -0
  625. package/src/useResizeListener.ts +1 -1
  626. package/src/useResizeObserver.ts +19 -0
  627. package/src/useThrottledFunction.ts +6 -9
  628. package/src/useToggle.ts +3 -3
  629. package/src/utils/RenderRecursively.tsx +2 -2
  630. package/src/utils/alphaNumericSort.ts +5 -5
  631. package/src/utils/bem.ts +1 -1
  632. package/src/utils/debounce.ts +22 -0
  633. package/src/utils/throttle.ts +38 -0
  634. package/src/utils/wait.ts +5 -1
  635. package/src/window-splitter/WindowSplitter.tsx +38 -43
  636. package/src/window-splitter/styles.ts +42 -0
  637. package/dist/autocomplete/FilterAutocompleteOptions.d.ts +0 -8
  638. package/dist/autocomplete/FilterAutocompleteOptions.js +0 -57
  639. package/dist/autocomplete/FilterAutocompleteOptions.js.map +0 -1
  640. package/dist/dialog/DialogContainer.d.ts +0 -14
  641. package/dist/dialog/DialogContainer.js +0 -20
  642. package/dist/dialog/DialogContainer.js.map +0 -1
  643. package/dist/form/FileInput.js.map +0 -1
  644. package/dist/form/fileUtils.js.map +0 -1
  645. package/dist/form/useFileUpload.js.map +0 -1
  646. package/dist/form/useListboxProvider.d.ts +0 -31
  647. package/dist/form/useListboxProvider.js.map +0 -1
  648. package/dist/navigation/getHrefFromParents.d.ts +0 -5
  649. package/dist/navigation/getHrefFromParents.js +0 -13
  650. package/dist/navigation/getHrefFromParents.js.map +0 -1
  651. package/dist/responsive-item/ResponsiveItemContainer.d.ts +0 -115
  652. package/dist/responsive-item/ResponsiveItemContainer.js +0 -80
  653. package/dist/responsive-item/ResponsiveItemContainer.js.map +0 -1
  654. package/dist/responsive-item/styles.d.ts +0 -34
  655. package/dist/responsive-item/styles.js +0 -17
  656. package/dist/responsive-item/styles.js.map +0 -1
  657. package/dist/theme/usePrefersColorScheme.js.map +0 -1
  658. package/src/autocomplete/FilterAutocompleteOptions.tsx +0 -86
  659. package/src/dialog/DialogContainer.tsx +0 -28
  660. package/src/form/useListboxProvider.ts +0 -45
  661. package/src/navigation/getHrefFromParents.ts +0 -15
  662. package/src/responsive-item/ResponsiveItemContainer.tsx +0 -174
  663. package/src/responsive-item/styles.ts +0 -58
  664. /package/dist/theme/{usePrefersColorScheme.d.ts → usePrefersDarkScheme.d.ts} +0 -0
  665. /package/src/theme/{usePrefersColorScheme.ts → usePrefersDarkScheme.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tabs/TabList.tsx"],"sourcesContent":["\"use client\";\nimport {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n} from \"react\";\nimport { useAppSize } from \"../media-queries/AppSizeProvider.js\";\nimport { KeyboardMovementProvider } from \"../movement/useKeyboardMovementProvider.js\";\nimport {\n TabListScrollButton,\n type BaseTabListScrollButtonProps,\n} from \"./TabListScrollButton.js\";\nimport { tabList, type TabsAlignment } from \"./tabListStyles.js\";\nimport { useTabList } from \"./useTabList.js\";\nimport { type GetTabListScrollToOptions } from \"./utils.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { type useTabs } from \"./useTabs.js\";\n\n/**\n * @since 6.0.0\n */\nexport interface TabListProps extends HTMLAttributes<HTMLDivElement> {\n activeIndex: number;\n setActiveIndex(nextActiveIndex: number): void;\n\n /**\n * @defaultValue `\"left\"`\n */\n align?: TabsAlignment;\n\n /**\n * @defaultValue `false`\n */\n padded?: boolean;\n\n /**\n * @defaultValue `false`\n */\n vertical?: boolean;\n\n /**\n * @defaultValue `false`\n */\n inline?: boolean;\n\n /**\n * Set this to `true` to show a scrollbar when the number of tabs cause\n * overflow.\n *\n * @see {@link scrollButtons}\n * @defaultValue `false`\n */\n scrollbar?: boolean;\n\n /**\n * Set this to `true` to disable the active tab indicator from animating\n * when a new tab is selected.\n *\n * @defaultValue `false`\n */\n disableTransition?: boolean;\n\n /**\n * This should be equal to the `$tabs-transition-duration` variable.\n *\n * @defaultValue `150`\n */\n transitionDuration?: number;\n\n /**\n * @defaultValue `\"manual\"`\n */\n activationMode?: \"manual\" | \"automatic\";\n\n /**\n * Set this to `true` to render buttons that can scroll forwards or backwards\n * within the tab list if there is overflow **on desktop**. If you want to\n * display the scroll buttons on mobile as well, set this to `\"allow-phone\"` .\n *\n * @defaultValue `false`\n */\n scrollButtons?: boolean | \"allow-phone\";\n\n /**\n * A convenience prop for the {@link BaseTabListScrollButtonProps.getScrollToOptions}\n * on {@link forwardScrollButtonProps} and {@link backwardScrollButtonProps}.\n */\n getScrollToOptions?: GetTabListScrollToOptions;\n\n /**\n * Any additional props that should be passed to the scroll forward button.\n *\n * @example\n * ```tsx\n * forwardScrollButtonProps={{\n * \"aria-label\": \"Scroll right\",\n * theme: \"primary\",\n * themeType: \"contained\",\n * className: styles.buttonContainer,\n * buttonProps: {\n * className: styles.button,\n * }\n * }}\n * ```\n */\n forwardScrollButtonProps?: BaseTabListScrollButtonProps;\n\n /**\n * Any additional props that should be passed to the scroll backward button.\n *\n * @example\n * ```tsx\n * forwardScrollButtonProps={{\n * \"aria-label\": \"Scroll left\",\n * theme: \"primary\",\n * themeType: \"contained\",\n * className: styles.buttonContainer,\n * buttonProps: {\n * className: styles.button,\n * }\n * }}\n * ```\n */\n backwardScrollButtonProps?: BaseTabListScrollButtonProps;\n}\n\n/**\n * **Client Component**\n *\n * @see {@link useTabs} for example usage.\n *\n * @since 6.0.0\n */\nexport const TabList = forwardRef<HTMLDivElement, TabListProps>(\n function TabList(props, ref) {\n const {\n style,\n onClick,\n onFocus,\n onKeyDown,\n className,\n children,\n activeIndex,\n setActiveIndex,\n activationMode = \"manual\",\n align = \"left\",\n padded = false,\n inline = false,\n vertical = false,\n scrollbar = false,\n scrollButtons = false,\n disableTransition = false,\n transitionDuration = 150,\n getScrollToOptions,\n forwardScrollButtonProps,\n backwardScrollButtonProps,\n ...remaining\n } = props;\n\n const { isPhone } = useAppSize();\n const showScrollButtons =\n !!scrollButtons && (scrollButtons === \"allow-phone\" || !isPhone);\n\n const { elementProps, movementContext, backwardProps, forwardProps } =\n useTabList({\n ref,\n style,\n onClick,\n onFocus,\n onKeyDown,\n vertical,\n activeIndex,\n setActiveIndex,\n activationMode,\n scrollButtons: showScrollButtons,\n disableTransition,\n });\n\n const prevActiveIndex = useRef(activeIndex);\n const [animate, setAnimate] = useState(false);\n useEffect(() => {\n const isSameIndex = activeIndex === prevActiveIndex.current;\n prevActiveIndex.current = activeIndex;\n if (disableTransition || isSameIndex) {\n return;\n }\n\n setAnimate(true);\n const timeout = window.setTimeout(() => {\n setAnimate(false);\n }, transitionDuration);\n\n return () => {\n window.clearTimeout(timeout);\n };\n }, [activeIndex, disableTransition, transitionDuration]);\n\n return (\n <KeyboardMovementProvider value={movementContext}>\n <div\n {...remaining}\n {...elementProps}\n role=\"tablist\"\n className={tabList({\n align,\n padded,\n inline,\n animate: !disableTransition && animate,\n vertical,\n scrollbar,\n indicator: !disableTransition,\n className,\n })}\n >\n {showScrollButtons && (\n <TabListScrollButton\n getScrollToOptions={getScrollToOptions}\n {...backwardScrollButtonProps}\n {...backwardProps}\n />\n )}\n {children}\n {showScrollButtons && (\n <TabListScrollButton\n getScrollToOptions={getScrollToOptions}\n {...forwardScrollButtonProps}\n {...forwardProps}\n />\n )}\n </div>\n </KeyboardMovementProvider>\n );\n }\n);\n"],"names":["forwardRef","useEffect","useRef","useState","useAppSize","KeyboardMovementProvider","TabListScrollButton","tabList","useTabList","TabList","props","ref","style","onClick","onFocus","onKeyDown","className","children","activeIndex","setActiveIndex","activationMode","align","padded","inline","vertical","scrollbar","scrollButtons","disableTransition","transitionDuration","getScrollToOptions","forwardScrollButtonProps","backwardScrollButtonProps","remaining","isPhone","showScrollButtons","elementProps","movementContext","backwardProps","forwardProps","prevActiveIndex","animate","setAnimate","isSameIndex","current","timeout","window","setTimeout","clearTimeout","value","div","role","indicator"],"mappings":"AAAA;;AACA,SACEA,UAAU,EACVC,SAAS,EACTC,MAAM,EACNC,QAAQ,QAEH,QAAQ;AACf,SAASC,UAAU,QAAQ,sCAAsC;AACjE,SAASC,wBAAwB,QAAQ,6CAA6C;AACtF,SACEC,mBAAmB,QAEd,2BAA2B;AAClC,SAASC,OAAO,QAA4B,qBAAqB;AACjE,SAASC,UAAU,QAAQ,kBAAkB;AAkH7C;;;;;;CAMC,GACD,OAAO,MAAMC,wBAAUT,WACrB,SAASS,QAAQC,KAAK,EAAEC,GAAG;IACzB,MAAM,EACJC,KAAK,EACLC,OAAO,EACPC,OAAO,EACPC,SAAS,EACTC,SAAS,EACTC,QAAQ,EACRC,WAAW,EACXC,cAAc,EACdC,iBAAiB,QAAQ,EACzBC,QAAQ,MAAM,EACdC,SAAS,KAAK,EACdC,SAAS,KAAK,EACdC,WAAW,KAAK,EAChBC,YAAY,KAAK,EACjBC,gBAAgB,KAAK,EACrBC,oBAAoB,KAAK,EACzBC,qBAAqB,GAAG,EACxBC,kBAAkB,EAClBC,wBAAwB,EACxBC,yBAAyB,EACzB,GAAGC,WACJ,GAAGtB;IAEJ,MAAM,EAAEuB,OAAO,EAAE,GAAG7B;IACpB,MAAM8B,oBACJ,CAAC,CAACR,iBAAkBA,CAAAA,kBAAkB,iBAAiB,CAACO,OAAM;IAEhE,MAAM,EAAEE,YAAY,EAAEC,eAAe,EAAEC,aAAa,EAAEC,YAAY,EAAE,GAClE9B,WAAW;QACTG;QACAC;QACAC;QACAC;QACAC;QACAS;QACAN;QACAC;QACAC;QACAM,eAAeQ;QACfP;IACF;IAEF,MAAMY,kBAAkBrC,OAAOgB;IAC/B,MAAM,CAACsB,SAASC,WAAW,GAAGtC,SAAS;IACvCF,UAAU;QACR,MAAMyC,cAAcxB,gBAAgBqB,gBAAgBI,OAAO;QAC3DJ,gBAAgBI,OAAO,GAAGzB;QAC1B,IAAIS,qBAAqBe,aAAa;YACpC;QACF;QAEAD,WAAW;QACX,MAAMG,UAAUC,OAAOC,UAAU,CAAC;YAChCL,WAAW;QACb,GAAGb;QAEH,OAAO;YACLiB,OAAOE,YAAY,CAACH;QACtB;IACF,GAAG;QAAC1B;QAAaS;QAAmBC;KAAmB;IAEvD,qBACE,KAACvB;QAAyB2C,OAAOZ;kBAC/B,cAAA,MAACa;YACE,GAAGjB,SAAS;YACZ,GAAGG,YAAY;YAChBe,MAAK;YACLlC,WAAWT,QAAQ;gBACjBc;gBACAC;gBACAC;gBACAiB,SAAS,CAACb,qBAAqBa;gBAC/BhB;gBACAC;gBACA0B,WAAW,CAACxB;gBACZX;YACF;;gBAECkB,mCACC,KAAC5B;oBACCuB,oBAAoBA;oBACnB,GAAGE,yBAAyB;oBAC5B,GAAGM,aAAa;;gBAGpBpB;gBACAiB,mCACC,KAAC5B;oBACCuB,oBAAoBA;oBACnB,GAAGC,wBAAwB;oBAC3B,GAAGQ,YAAY;;;;;AAM5B,GACA"}
1
+ {"version":3,"sources":["../../src/tabs/TabList.tsx"],"sourcesContent":["\"use client\";\nimport {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n} from \"react\";\nimport { useAppSize } from \"../media-queries/AppSizeProvider.js\";\nimport { KeyboardMovementProvider } from \"../movement/useKeyboardMovementProvider.js\";\nimport { type GetTabListScrollToOptions } from \"./getTabListScrollToOptions.js\";\nimport {\n TabListScrollButton,\n type BaseTabListScrollButtonProps,\n} from \"./TabListScrollButton.js\";\nimport { tabList, type TabsAlignment } from \"./tabListStyles.js\";\nimport { useTabList } from \"./useTabList.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { type useTabs } from \"./useTabs.js\";\n\n/**\n * @since 6.0.0\n */\nexport interface TabListProps extends HTMLAttributes<HTMLDivElement> {\n activeIndex: number;\n setActiveIndex: (nextActiveIndex: number) => void;\n\n /**\n * @defaultValue `\"left\"`\n */\n align?: TabsAlignment;\n\n /**\n * @defaultValue `false`\n */\n padded?: boolean;\n\n /**\n * @defaultValue `false`\n */\n vertical?: boolean;\n\n /**\n * @defaultValue `false`\n */\n inline?: boolean;\n\n /**\n * Set this to `true` to show a scrollbar when the number of tabs cause\n * overflow.\n *\n * @see {@link scrollButtons}\n * @defaultValue `false`\n */\n scrollbar?: boolean;\n\n /**\n * Set this to `true` to disable the active tab indicator from animating\n * when a new tab is selected.\n *\n * @defaultValue `false`\n */\n disableTransition?: boolean;\n\n /**\n * This should be equal to the `$tabs-transition-duration` variable.\n *\n * @defaultValue `150`\n */\n transitionDuration?: number;\n\n /**\n * @defaultValue `\"manual\"`\n */\n activationMode?: \"manual\" | \"automatic\";\n\n /**\n * Set this to `true` to render buttons that can scroll forwards or backwards\n * within the tab list if there is overflow **on desktop**. If you want to\n * display the scroll buttons on mobile as well, set this to `\"allow-phone\"` .\n *\n * @defaultValue `false`\n */\n scrollButtons?: boolean | \"allow-phone\";\n\n /**\n * A convenience prop for the {@link BaseTabListScrollButtonProps.getScrollToOptions}\n * on {@link forwardScrollButtonProps} and {@link backwardScrollButtonProps}.\n */\n getScrollToOptions?: GetTabListScrollToOptions;\n\n /**\n * Any additional props that should be passed to the scroll forward button.\n *\n * @example\n * ```tsx\n * forwardScrollButtonProps={{\n * \"aria-label\": \"Scroll right\",\n * theme: \"primary\",\n * themeType: \"contained\",\n * className: styles.buttonContainer,\n * buttonProps: {\n * className: styles.button,\n * }\n * }}\n * ```\n */\n forwardScrollButtonProps?: BaseTabListScrollButtonProps;\n\n /**\n * Any additional props that should be passed to the scroll backward button.\n *\n * @example\n * ```tsx\n * forwardScrollButtonProps={{\n * \"aria-label\": \"Scroll left\",\n * theme: \"primary\",\n * themeType: \"contained\",\n * className: styles.buttonContainer,\n * buttonProps: {\n * className: styles.button,\n * }\n * }}\n * ```\n */\n backwardScrollButtonProps?: BaseTabListScrollButtonProps;\n}\n\n/**\n * **Client Component**\n *\n * @see {@link useTabs} for example usage.\n *\n * @since 6.0.0\n */\nexport const TabList = forwardRef<HTMLDivElement, TabListProps>(\n function TabList(props, ref) {\n const {\n style,\n onClick,\n onFocus,\n onKeyDown,\n className,\n children,\n activeIndex,\n setActiveIndex,\n activationMode = \"manual\",\n align = \"left\",\n padded = false,\n inline = false,\n vertical = false,\n scrollbar = false,\n scrollButtons = false,\n disableTransition = false,\n transitionDuration = 150,\n getScrollToOptions,\n forwardScrollButtonProps,\n backwardScrollButtonProps,\n ...remaining\n } = props;\n\n const { isPhone } = useAppSize();\n const showScrollButtons =\n !!scrollButtons && (scrollButtons === \"allow-phone\" || !isPhone);\n\n const { elementProps, movementContext, backwardProps, forwardProps } =\n useTabList({\n ref,\n style,\n onClick,\n onFocus,\n onKeyDown,\n vertical,\n activeIndex,\n setActiveIndex,\n activationMode,\n scrollButtons: showScrollButtons,\n disableTransition,\n });\n\n const prevActiveIndex = useRef(activeIndex);\n const [animate, setAnimate] = useState(false);\n useEffect(() => {\n const isSameIndex = activeIndex === prevActiveIndex.current;\n prevActiveIndex.current = activeIndex;\n if (disableTransition || isSameIndex) {\n return;\n }\n\n setAnimate(true);\n const timeout = window.setTimeout(() => {\n setAnimate(false);\n }, transitionDuration);\n\n return () => {\n window.clearTimeout(timeout);\n };\n }, [activeIndex, disableTransition, transitionDuration]);\n\n return (\n <KeyboardMovementProvider value={movementContext}>\n <div\n {...remaining}\n {...elementProps}\n role=\"tablist\"\n className={tabList({\n align,\n padded,\n inline,\n animate: !disableTransition && animate,\n vertical,\n scrollbar,\n indicator: !disableTransition,\n className,\n })}\n >\n {showScrollButtons && (\n <TabListScrollButton\n getScrollToOptions={getScrollToOptions}\n {...backwardScrollButtonProps}\n {...backwardProps}\n />\n )}\n {children}\n {showScrollButtons && (\n <TabListScrollButton\n getScrollToOptions={getScrollToOptions}\n {...forwardScrollButtonProps}\n {...forwardProps}\n />\n )}\n </div>\n </KeyboardMovementProvider>\n );\n }\n);\n"],"names":["forwardRef","useEffect","useRef","useState","useAppSize","KeyboardMovementProvider","TabListScrollButton","tabList","useTabList","TabList","props","ref","style","onClick","onFocus","onKeyDown","className","children","activeIndex","setActiveIndex","activationMode","align","padded","inline","vertical","scrollbar","scrollButtons","disableTransition","transitionDuration","getScrollToOptions","forwardScrollButtonProps","backwardScrollButtonProps","remaining","isPhone","showScrollButtons","elementProps","movementContext","backwardProps","forwardProps","prevActiveIndex","animate","setAnimate","isSameIndex","current","timeout","window","setTimeout","clearTimeout","value","div","role","indicator"],"mappings":"AAAA;;AACA,SACEA,UAAU,EACVC,SAAS,EACTC,MAAM,EACNC,QAAQ,QAEH,QAAQ;AACf,SAASC,UAAU,QAAQ,sCAAsC;AACjE,SAASC,wBAAwB,QAAQ,6CAA6C;AAEtF,SACEC,mBAAmB,QAEd,2BAA2B;AAClC,SAASC,OAAO,QAA4B,qBAAqB;AACjE,SAASC,UAAU,QAAQ,kBAAkB;AAiH7C;;;;;;CAMC,GACD,OAAO,MAAMC,wBAAUT,WACrB,SAASS,QAAQC,KAAK,EAAEC,GAAG;IACzB,MAAM,EACJC,KAAK,EACLC,OAAO,EACPC,OAAO,EACPC,SAAS,EACTC,SAAS,EACTC,QAAQ,EACRC,WAAW,EACXC,cAAc,EACdC,iBAAiB,QAAQ,EACzBC,QAAQ,MAAM,EACdC,SAAS,KAAK,EACdC,SAAS,KAAK,EACdC,WAAW,KAAK,EAChBC,YAAY,KAAK,EACjBC,gBAAgB,KAAK,EACrBC,oBAAoB,KAAK,EACzBC,qBAAqB,GAAG,EACxBC,kBAAkB,EAClBC,wBAAwB,EACxBC,yBAAyB,EACzB,GAAGC,WACJ,GAAGtB;IAEJ,MAAM,EAAEuB,OAAO,EAAE,GAAG7B;IACpB,MAAM8B,oBACJ,CAAC,CAACR,iBAAkBA,CAAAA,kBAAkB,iBAAiB,CAACO,OAAM;IAEhE,MAAM,EAAEE,YAAY,EAAEC,eAAe,EAAEC,aAAa,EAAEC,YAAY,EAAE,GAClE9B,WAAW;QACTG;QACAC;QACAC;QACAC;QACAC;QACAS;QACAN;QACAC;QACAC;QACAM,eAAeQ;QACfP;IACF;IAEF,MAAMY,kBAAkBrC,OAAOgB;IAC/B,MAAM,CAACsB,SAASC,WAAW,GAAGtC,SAAS;IACvCF,UAAU;QACR,MAAMyC,cAAcxB,gBAAgBqB,gBAAgBI,OAAO;QAC3DJ,gBAAgBI,OAAO,GAAGzB;QAC1B,IAAIS,qBAAqBe,aAAa;YACpC;QACF;QAEAD,WAAW;QACX,MAAMG,UAAUC,OAAOC,UAAU,CAAC;YAChCL,WAAW;QACb,GAAGb;QAEH,OAAO;YACLiB,OAAOE,YAAY,CAACH;QACtB;IACF,GAAG;QAAC1B;QAAaS;QAAmBC;KAAmB;IAEvD,qBACE,KAACvB;QAAyB2C,OAAOZ;kBAC/B,cAAA,MAACa;YACE,GAAGjB,SAAS;YACZ,GAAGG,YAAY;YAChBe,MAAK;YACLlC,WAAWT,QAAQ;gBACjBc;gBACAC;gBACAC;gBACAiB,SAAS,CAACb,qBAAqBa;gBAC/BhB;gBACAC;gBACA0B,WAAW,CAACxB;gBACZX;YACF;;gBAECkB,mCACC,KAAC5B;oBACCuB,oBAAoBA;oBACnB,GAAGE,yBAAyB;oBAC5B,GAAGM,aAAa;;gBAGpBpB;gBACAiB,mCACC,KAAC5B;oBACCuB,oBAAoBA;oBACnB,GAAGC,wBAAwB;oBAC3B,GAAGQ,YAAY;;;;;AAM5B,GACA"}
@@ -2,7 +2,7 @@ import { type HTMLAttributes } from "react";
2
2
  import { type ButtonProps } from "../button/Button.js";
3
3
  import { type ButtonClassNameThemeOptions } from "../button/buttonStyles.js";
4
4
  import { type PropsWithRef } from "../types.js";
5
- import { type GetTabListScrollToOptions } from "./utils.js";
5
+ import { type GetTabListScrollToOptions } from "./getTabListScrollToOptions.js";
6
6
  /**
7
7
  * @internal
8
8
  * @since 6.0.0
@@ -6,8 +6,8 @@ import { getIcon } from "../icon/iconConfig.js";
6
6
  import { useDir } from "../typography/WritingDirectionProvider.js";
7
7
  import { useIntersectionObserver } from "../useIntersectionObserver.js";
8
8
  import { applyRef } from "../utils/applyRef.js";
9
+ import { getTabListScrollToOptions } from "./getTabListScrollToOptions.js";
9
10
  import { tabListScrollButton, tabListScrollButtonContainer } from "./tabListScrollButtonStyles.js";
10
- import { getTabListScrollToOptions } from "./utils.js";
11
11
  /**
12
12
  * **Client Component**
13
13
  *
@@ -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({\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"}
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 getTabListScrollToOptions,\n type GetTabListScrollToOptions,\n} from \"./getTabListScrollToOptions.js\";\nimport {\n tabListScrollButton,\n tabListScrollButtonContainer,\n} from \"./tabListScrollButtonStyles.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","getTabListScrollToOptions","tabListScrollButton","tabListScrollButtonContainer","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,yBAAyB,QAEpB,iCAAiC;AACxC,SACEC,mBAAmB,EACnBC,4BAA4B,QACvB,iCAAiC;AA4BxC;;;;;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,qBAAqBjB,yBAAyB,EAC9CkB,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,WAAWL,6BAA6B;oBACtCmB;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,WAAWN,oBAAoB;wBAC7BM,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"}
@@ -91,11 +91,15 @@ $variables: (
91
91
 
92
92
  @if not $disable-indicator-vertical {
93
93
  &--v::after {
94
- @include utils.auto-rtl(left, $tablist-vertical-indicator-left);
95
-
96
94
  height: 100%;
95
+ left: $tablist-vertical-indicator-left;
97
96
  top: 0;
98
97
  width: $indicator-height;
98
+
99
+ @include utils.rtl {
100
+ left: auto;
101
+ right: $tablist-vertical-indicator-left;
102
+ }
99
103
  }
100
104
  }
101
105
 
@@ -156,7 +160,12 @@ $variables: (
156
160
 
157
161
  @if not $disable-tablist-padded {
158
162
  &--padded {
159
- @include utils.auto-rtl(padding-left, $tablist-padding-left);
163
+ padding-left: $tablist-padding-left;
164
+
165
+ @include utils.rtl {
166
+ padding-left: 0;
167
+ padding-right: $tablist-padding-left;
168
+ }
160
169
  }
161
170
  }
162
171
 
@@ -178,11 +187,11 @@ $variables: (
178
187
  z-index: $tablist-scroller-z-index;
179
188
 
180
189
  &--left {
181
- @include utils.auto-rtl(left, 0);
190
+ left: 0;
182
191
  }
183
192
 
184
193
  &--right {
185
- @include utils.auto-rtl(right, 0);
194
+ right: 0;
186
195
  }
187
196
 
188
197
  @if not $disable-tablist-scroll-button-vertical {
@@ -196,16 +205,28 @@ $variables: (
196
205
  }
197
206
 
198
207
  &__button {
199
- @include utils.rtl {
200
- transform: rotate(180deg);
201
- }
202
-
203
208
  @if not $disable-tablist-scroll-button-vertical {
204
209
  &--v {
205
210
  transform: rotate(90deg);
206
211
  }
207
212
  }
208
213
  }
214
+
215
+ @include utils.rtl {
216
+ &--left {
217
+ left: auto;
218
+ right: 0;
219
+ }
220
+
221
+ &--right {
222
+ left: 0;
223
+ right: auto;
224
+ }
225
+
226
+ &__button {
227
+ transform: rotate(180deg);
228
+ }
229
+ }
209
230
  }
210
231
  }
211
232
 
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @since 6.0.0
3
+ */
4
+ export interface TabListScrollToOptions {
5
+ isRTL: boolean;
6
+ animate: boolean;
7
+ vertical: boolean;
8
+ increment: boolean;
9
+ container: HTMLElement;
10
+ }
11
+ /**
12
+ * @since 6.0.0
13
+ */
14
+ export type GetTabListScrollToOptions = (options: TabListScrollToOptions) => ScrollToOptions | undefined;
15
+ /**
16
+ * @since 6.0.0
17
+ */
18
+ export declare const getTabListScrollToOptions: GetTabListScrollToOptions;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @since 6.0.0
3
+ */ /**
4
+ * @since 6.0.0
5
+ */ export const getTabListScrollToOptions = (options)=>{
6
+ const { isRTL, animate, vertical, increment, container } = options;
7
+ const { scrollLeft, scrollTop, scrollWidth, scrollHeight } = container;
8
+ const currentScroll = vertical ? scrollTop : scrollLeft;
9
+ const scrollDistance = vertical ? scrollHeight : scrollWidth;
10
+ const amount = scrollDistance / 10 * (increment ? 1 : -1);
11
+ const distance = currentScroll + amount * (vertical || !isRTL ? 1 : -1);
12
+ return {
13
+ left: vertical ? undefined : distance,
14
+ top: vertical ? distance : undefined,
15
+ behavior: animate ? "smooth" : "auto"
16
+ };
17
+ };
18
+
19
+ //# sourceMappingURL=getTabListScrollToOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/tabs/getTabListScrollToOptions.ts"],"sourcesContent":["/**\n * @since 6.0.0\n */\nexport interface TabListScrollToOptions {\n isRTL: boolean;\n animate: boolean;\n vertical: boolean;\n increment: boolean;\n container: HTMLElement;\n}\n\n/**\n * @since 6.0.0\n */\nexport type GetTabListScrollToOptions = (\n options: TabListScrollToOptions\n) => ScrollToOptions | undefined;\n\n/**\n * @since 6.0.0\n */\nexport const getTabListScrollToOptions: GetTabListScrollToOptions = (\n options\n) => {\n const { isRTL, animate, vertical, increment, container } = options;\n const { scrollLeft, scrollTop, scrollWidth, scrollHeight } = container;\n const currentScroll = vertical ? scrollTop : scrollLeft;\n const scrollDistance = vertical ? scrollHeight : scrollWidth;\n const amount = (scrollDistance / 10) * (increment ? 1 : -1);\n const distance = currentScroll + amount * (vertical || !isRTL ? 1 : -1);\n\n return {\n left: vertical ? undefined : distance,\n top: vertical ? distance : undefined,\n behavior: animate ? \"smooth\" : \"auto\",\n };\n};\n"],"names":["getTabListScrollToOptions","options","isRTL","animate","vertical","increment","container","scrollLeft","scrollTop","scrollWidth","scrollHeight","currentScroll","scrollDistance","amount","distance","left","undefined","top","behavior"],"mappings":"AAAA;;CAEC,GAgBD;;CAEC,GACD,OAAO,MAAMA,4BAAuD,CAClEC;IAEA,MAAM,EAAEC,KAAK,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,SAAS,EAAE,GAAGL;IAC3D,MAAM,EAAEM,UAAU,EAAEC,SAAS,EAAEC,WAAW,EAAEC,YAAY,EAAE,GAAGJ;IAC7D,MAAMK,gBAAgBP,WAAWI,YAAYD;IAC7C,MAAMK,iBAAiBR,WAAWM,eAAeD;IACjD,MAAMI,SAAS,AAACD,iBAAiB,KAAOP,CAAAA,YAAY,IAAI,CAAC,CAAA;IACzD,MAAMS,WAAWH,gBAAgBE,SAAUT,CAAAA,YAAY,CAACF,QAAQ,IAAI,CAAC,CAAA;IAErE,OAAO;QACLa,MAAMX,WAAWY,YAAYF;QAC7BG,KAAKb,WAAWU,WAAWE;QAC3BE,UAAUf,UAAU,WAAW;IACjC;AACF,EAAE"}
@@ -4,6 +4,9 @@ declare module "react" {
4
4
  "--rmd-tab-active-color"?: string;
5
5
  "--rmd-tab-inactive-color"?: string;
6
6
  "--rmd-tab-disabled-color"?: string;
7
+ "--rmd-tab-size"?: string;
8
+ "--rmd-tab-offset"?: string | number;
9
+ "--rmd-tab-indicator-background"?: string;
7
10
  }
8
11
  }
9
12
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tabs/tabStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { cssUtils } from \"../cssUtils.js\";\nimport { bem } from \"../utils/bem.js\";\nimport { tabIndicator } from \"./tabIndicatorStyles.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-tab-color\"?: string;\n \"--rmd-tab-active-color\"?: string;\n \"--rmd-tab-inactive-color\"?: string;\n \"--rmd-tab-disabled-color\"?: string;\n }\n}\n\nconst styles = bem(\"rmd-tab\");\n\n/**\n * @since 6.0.0\n */\nexport interface TabClassNameOptions {\n className?: string;\n active?: boolean;\n isLink?: boolean;\n activeIndicator?: boolean;\n verticalActiveIndicator?: boolean;\n stacked?: boolean;\n reversed?: boolean;\n disabled?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function tab(options: TabClassNameOptions = {}): string {\n const {\n className,\n active,\n isLink,\n stacked,\n reversed,\n disabled,\n activeIndicator,\n verticalActiveIndicator,\n } = options;\n\n return cnb(\n styles({\n active,\n reversed: reversed && !stacked,\n stacked,\n \"stacked-reversed\": stacked && reversed,\n disabled,\n }),\n active &&\n activeIndicator &&\n tabIndicator({ vertical: verticalActiveIndicator }),\n cssUtils({ surface: true, textDecoration: isLink ? \"none\" : undefined }),\n className\n );\n}\n"],"names":["cnb","cssUtils","bem","tabIndicator","styles","tab","options","className","active","isLink","stacked","reversed","disabled","activeIndicator","verticalActiveIndicator","vertical","surface","textDecoration","undefined"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,GAAG,QAAQ,kBAAkB;AACtC,SAASC,YAAY,QAAQ,0BAA0B;AAWvD,MAAMC,SAASF,IAAI;AAgBnB;;CAEC,GACD,OAAO,SAASG,IAAIC,UAA+B,CAAC,CAAC;IACnD,MAAM,EACJC,SAAS,EACTC,MAAM,EACNC,MAAM,EACNC,OAAO,EACPC,QAAQ,EACRC,QAAQ,EACRC,eAAe,EACfC,uBAAuB,EACxB,GAAGR;IAEJ,OAAON,IACLI,OAAO;QACLI;QACAG,UAAUA,YAAY,CAACD;QACvBA;QACA,oBAAoBA,WAAWC;QAC/BC;IACF,IACAJ,UACEK,mBACAV,aAAa;QAAEY,UAAUD;IAAwB,IACnDb,SAAS;QAAEe,SAAS;QAAMC,gBAAgBR,SAAS,SAASS;IAAU,IACtEX;AAEJ"}
1
+ {"version":3,"sources":["../../src/tabs/tabStyles.ts"],"sourcesContent":["import { cnb } from \"cnbuilder\";\nimport { cssUtils } from \"../cssUtils.js\";\nimport { bem } from \"../utils/bem.js\";\nimport { tabIndicator } from \"./tabIndicatorStyles.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-tab-color\"?: string;\n \"--rmd-tab-active-color\"?: string;\n \"--rmd-tab-inactive-color\"?: string;\n \"--rmd-tab-disabled-color\"?: string;\n\n \"--rmd-tab-size\"?: string;\n \"--rmd-tab-offset\"?: string | number;\n \"--rmd-tab-indicator-background\"?: string;\n }\n}\n\nconst styles = bem(\"rmd-tab\");\n\n/**\n * @since 6.0.0\n */\nexport interface TabClassNameOptions {\n className?: string;\n active?: boolean;\n isLink?: boolean;\n activeIndicator?: boolean;\n verticalActiveIndicator?: boolean;\n stacked?: boolean;\n reversed?: boolean;\n disabled?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport function tab(options: TabClassNameOptions = {}): string {\n const {\n className,\n active,\n isLink,\n stacked,\n reversed,\n disabled,\n activeIndicator,\n verticalActiveIndicator,\n } = options;\n\n return cnb(\n styles({\n active,\n reversed: reversed && !stacked,\n stacked,\n \"stacked-reversed\": stacked && reversed,\n disabled,\n }),\n active &&\n activeIndicator &&\n tabIndicator({ vertical: verticalActiveIndicator }),\n cssUtils({ surface: true, textDecoration: isLink ? \"none\" : undefined }),\n className\n );\n}\n"],"names":["cnb","cssUtils","bem","tabIndicator","styles","tab","options","className","active","isLink","stacked","reversed","disabled","activeIndicator","verticalActiveIndicator","vertical","surface","textDecoration","undefined"],"mappings":"AAAA,SAASA,GAAG,QAAQ,YAAY;AAChC,SAASC,QAAQ,QAAQ,iBAAiB;AAC1C,SAASC,GAAG,QAAQ,kBAAkB;AACtC,SAASC,YAAY,QAAQ,0BAA0B;AAevD,MAAMC,SAASF,IAAI;AAgBnB;;CAEC,GACD,OAAO,SAASG,IAAIC,UAA+B,CAAC,CAAC;IACnD,MAAM,EACJC,SAAS,EACTC,MAAM,EACNC,MAAM,EACNC,OAAO,EACPC,QAAQ,EACRC,QAAQ,EACRC,eAAe,EACfC,uBAAuB,EACxB,GAAGR;IAEJ,OAAON,IACLI,OAAO;QACLI;QACAG,UAAUA,YAAY,CAACD;QACvBA;QACA,oBAAoBA,WAAWC;QAC/BC;IACF,IACAJ,UACEK,mBACAV,aAAa;QAAEY,UAAUD;IAAwB,IACnDb,SAAS;QAAEe,SAAS;QAAMC,gBAAgBR,SAAS,SAASS;IAAU,IACtEX;AAEJ"}
@@ -1,12 +1,5 @@
1
1
  import type { CSSProperties, FocusEventHandler, KeyboardEventHandler, MouseEventHandler, Ref, RefObject } from "react";
2
2
  import type { KeyboardMovementContext, KeyboardMovementProps } from "../movement/types.js";
3
- declare module "react" {
4
- interface CSSProperties {
5
- "--rmd-tab-size"?: string;
6
- "--rmd-tab-offset"?: string | number;
7
- "--rmd-tab-indicator-background"?: string;
8
- }
9
- }
10
3
  declare const TAB_SIZE_VAR = "--rmd-tab-size";
11
4
  declare const TAB_OFFSET_VAR = "--rmd-tab-offset";
12
5
  export type TabWidthVar = typeof TAB_SIZE_VAR;
@@ -16,7 +9,7 @@ export interface TabListHookOptions {
16
9
  ref: Ref<HTMLDivElement> | undefined;
17
10
  style: CSSProperties | undefined;
18
11
  activeIndex: number;
19
- setActiveIndex(nextActiveIndex: number): void;
12
+ setActiveIndex: (nextActiveIndex: number) => void;
20
13
  scrollButtons: boolean;
21
14
  activationMode: "manual" | "automatic";
22
15
  vertical: boolean;
@@ -30,6 +30,7 @@ const noop = ()=>{
30
30
  // this is kind of hacky -- the styles should update when switching between
31
31
  // RTL, but the RTL state isn't required for any styles. Just reference it
32
32
  // so that the hooks eslint rule doesn't show a warning...
33
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
33
34
  isRTL;
34
35
  const activeTab = getTabRoleOnly(entry.target)[activeIndex];
35
36
  if (!activeTab) {
@@ -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 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
+ {"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\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 // eslint-disable-next-line @typescript-eslint/no-unused-expressions\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;AAE/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,GAAG,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;YAC1D,oEAAoE;YACpET;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,GAAG6B,KAAK,EAAE,CAAC;gBAC3B,CAAC5B,eAAe,EAAE,GAAG+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"}
@@ -103,11 +103,11 @@ export interface TabsImplementation<TabValue extends string | number = number> {
103
103
  direction: SlideDirection;
104
104
  setDirection: UseStateSetter<SlideDirection>;
105
105
  activeTab?: TabValue;
106
- setActiveTab?(nextActiveTab: TabValue): void;
107
- getTabProps(tabValue: TabValue): ProvidedTabProps;
108
- getTabListProps(): ProvidedTabListProps;
109
- getTabPanelProps(tabValue: TabValue): ProvidedTabPanelProps;
110
- getTabPanelsProps<E extends HTMLElement>(): ProvidedTabPanelsProps<E>;
106
+ setActiveTab?: (nextActiveTab: TabValue) => void;
107
+ getTabProps: (tabValue: TabValue) => ProvidedTabProps;
108
+ getTabListProps: () => ProvidedTabListProps;
109
+ getTabPanelProps: (tabValue: TabValue) => ProvidedTabPanelProps;
110
+ getTabPanelsProps: <E extends HTMLElement>() => ProvidedTabPanelsProps<E>;
111
111
  }
112
112
  /**
113
113
  * @example Super Simple
@@ -146,7 +146,7 @@ export interface TabsImplementation<TabValue extends string | number = number> {
146
146
  *
147
147
  * @since 6.0.0
148
148
  */
149
- export declare function useTabs(): TabsImplementation<number> & {
149
+ export declare function useTabs(): TabsImplementation & {
150
150
  activeTab: number;
151
151
  setActiveTab: number;
152
152
  };
@@ -1 +1 @@
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
+ {"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 & {\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,GAAGvB,OAAO,CAAC,EAAEuB,SAASL,YAAYC,YAAY,GAAG;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"}
@@ -14,22 +14,4 @@ interface ScrollOptions {
14
14
  * @internal
15
15
  */
16
16
  export declare const scrollTabIntoView: (options: ScrollOptions) => void;
17
- /**
18
- * @since 6.0.0
19
- */
20
- export interface TabListScrollToOptions {
21
- isRTL: boolean;
22
- animate: boolean;
23
- vertical: boolean;
24
- increment: boolean;
25
- container: HTMLElement;
26
- }
27
- /**
28
- * @since 6.0.0
29
- */
30
- export type GetTabListScrollToOptions = (options: TabListScrollToOptions) => ScrollToOptions | undefined;
31
- /**
32
- * @since 6.0.0
33
- */
34
- export declare const getTabListScrollToOptions: GetTabListScrollToOptions;
35
17
  export {};
@@ -30,20 +30,5 @@
30
30
  container[scrollAttribute] = elementStart - firstOffset;
31
31
  }
32
32
  };
33
- /**
34
- * @since 6.0.0
35
- */ export const getTabListScrollToOptions = (options)=>{
36
- const { isRTL, animate, vertical, increment, container } = options;
37
- const { scrollLeft, scrollTop, scrollWidth, scrollHeight } = container;
38
- const currentScroll = vertical ? scrollTop : scrollLeft;
39
- const scrollDistance = vertical ? scrollHeight : scrollWidth;
40
- const amount = scrollDistance / 10 * (increment ? 1 : -1);
41
- const distance = currentScroll + amount * (vertical || !isRTL ? 1 : -1);
42
- return {
43
- left: vertical ? undefined : distance,
44
- top: vertical ? distance : undefined,
45
- behavior: animate ? "smooth" : "auto"
46
- };
47
- };
48
33
 
49
34
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tabs/utils.ts"],"sourcesContent":["/**\n * @internal\n */\nexport const getTabRoleOnly = (container: Element): readonly HTMLElement[] => [\n ...container.querySelectorAll<HTMLElement>('[role=\"tab\"]'),\n];\n\n/** @internal */\ninterface ScrollOptions {\n container: HTMLElement | null;\n forward: HTMLElement | null;\n backward: HTMLElement | null;\n vertical: boolean;\n activeIndex: number;\n}\n\n/**\n * @internal\n */\nexport const scrollTabIntoView = (options: ScrollOptions): void => {\n const { container, vertical, forward, backward, activeIndex } = options;\n if (!container) {\n return;\n }\n\n const activeTab = getTabRoleOnly(container)[activeIndex];\n if (!activeTab) {\n return;\n }\n\n const sizeAttribute = vertical ? \"offsetHeight\" : \"offsetWidth\";\n const offsetAttribute = vertical ? \"offsetTop\" : \"offsetLeft\";\n const scrollAttribute = vertical ? \"scrollTop\" : \"scrollLeft\";\n const firstOffset = backward?.[sizeAttribute] || 0;\n const lastOffset = forward?.[sizeAttribute] || 0;\n const elementStart = activeTab[offsetAttribute];\n const elementEnd = elementStart + activeTab[sizeAttribute];\n const containerStart = container[scrollAttribute];\n const containerEnd = containerStart + container[sizeAttribute] - lastOffset;\n if (elementEnd > containerEnd) {\n const containerSize = container[sizeAttribute] - lastOffset;\n container[scrollAttribute] = elementEnd - containerSize;\n } else if (elementStart < containerStart + firstOffset) {\n container[scrollAttribute] = elementStart - firstOffset;\n }\n};\n\n/**\n * @since 6.0.0\n */\nexport interface TabListScrollToOptions {\n isRTL: boolean;\n animate: boolean;\n vertical: boolean;\n increment: boolean;\n container: HTMLElement;\n}\n\n/**\n * @since 6.0.0\n */\nexport type GetTabListScrollToOptions = (\n options: TabListScrollToOptions\n) => ScrollToOptions | undefined;\n\n/**\n * @since 6.0.0\n */\nexport const getTabListScrollToOptions: GetTabListScrollToOptions = (\n options\n) => {\n const { isRTL, animate, vertical, increment, container } = options;\n const { scrollLeft, scrollTop, scrollWidth, scrollHeight } = container;\n const currentScroll = vertical ? scrollTop : scrollLeft;\n const scrollDistance = vertical ? scrollHeight : scrollWidth;\n const amount = (scrollDistance / 10) * (increment ? 1 : -1);\n const distance = currentScroll + amount * (vertical || !isRTL ? 1 : -1);\n\n return {\n left: vertical ? undefined : distance,\n top: vertical ? distance : undefined,\n behavior: animate ? \"smooth\" : \"auto\",\n };\n};\n"],"names":["getTabRoleOnly","container","querySelectorAll","scrollTabIntoView","options","vertical","forward","backward","activeIndex","activeTab","sizeAttribute","offsetAttribute","scrollAttribute","firstOffset","lastOffset","elementStart","elementEnd","containerStart","containerEnd","containerSize","getTabListScrollToOptions","isRTL","animate","increment","scrollLeft","scrollTop","scrollWidth","scrollHeight","currentScroll","scrollDistance","amount","distance","left","undefined","top","behavior"],"mappings":"AAAA;;CAEC,GACD,OAAO,MAAMA,iBAAiB,CAACC,YAA+C;WACzEA,UAAUC,gBAAgB,CAAc;KAC5C,CAAC;AAWF;;CAEC,GACD,OAAO,MAAMC,oBAAoB,CAACC;IAChC,MAAM,EAAEH,SAAS,EAAEI,QAAQ,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,WAAW,EAAE,GAAGJ;IAChE,IAAI,CAACH,WAAW;QACd;IACF;IAEA,MAAMQ,YAAYT,eAAeC,UAAU,CAACO,YAAY;IACxD,IAAI,CAACC,WAAW;QACd;IACF;IAEA,MAAMC,gBAAgBL,WAAW,iBAAiB;IAClD,MAAMM,kBAAkBN,WAAW,cAAc;IACjD,MAAMO,kBAAkBP,WAAW,cAAc;IACjD,MAAMQ,cAAcN,UAAU,CAACG,cAAc,IAAI;IACjD,MAAMI,aAAaR,SAAS,CAACI,cAAc,IAAI;IAC/C,MAAMK,eAAeN,SAAS,CAACE,gBAAgB;IAC/C,MAAMK,aAAaD,eAAeN,SAAS,CAACC,cAAc;IAC1D,MAAMO,iBAAiBhB,SAAS,CAACW,gBAAgB;IACjD,MAAMM,eAAeD,iBAAiBhB,SAAS,CAACS,cAAc,GAAGI;IACjE,IAAIE,aAAaE,cAAc;QAC7B,MAAMC,gBAAgBlB,SAAS,CAACS,cAAc,GAAGI;QACjDb,SAAS,CAACW,gBAAgB,GAAGI,aAAaG;IAC5C,OAAO,IAAIJ,eAAeE,iBAAiBJ,aAAa;QACtDZ,SAAS,CAACW,gBAAgB,GAAGG,eAAeF;IAC9C;AACF,EAAE;AAoBF;;CAEC,GACD,OAAO,MAAMO,4BAAuD,CAClEhB;IAEA,MAAM,EAAEiB,KAAK,EAAEC,OAAO,EAAEjB,QAAQ,EAAEkB,SAAS,EAAEtB,SAAS,EAAE,GAAGG;IAC3D,MAAM,EAAEoB,UAAU,EAAEC,SAAS,EAAEC,WAAW,EAAEC,YAAY,EAAE,GAAG1B;IAC7D,MAAM2B,gBAAgBvB,WAAWoB,YAAYD;IAC7C,MAAMK,iBAAiBxB,WAAWsB,eAAeD;IACjD,MAAMI,SAAS,AAACD,iBAAiB,KAAON,CAAAA,YAAY,IAAI,CAAC,CAAA;IACzD,MAAMQ,WAAWH,gBAAgBE,SAAUzB,CAAAA,YAAY,CAACgB,QAAQ,IAAI,CAAC,CAAA;IAErE,OAAO;QACLW,MAAM3B,WAAW4B,YAAYF;QAC7BG,KAAK7B,WAAW0B,WAAWE;QAC3BE,UAAUb,UAAU,WAAW;IACjC;AACF,EAAE"}
1
+ {"version":3,"sources":["../../src/tabs/utils.ts"],"sourcesContent":["/**\n * @internal\n */\nexport const getTabRoleOnly = (container: Element): readonly HTMLElement[] => [\n ...container.querySelectorAll<HTMLElement>('[role=\"tab\"]'),\n];\n\n/** @internal */\ninterface ScrollOptions {\n container: HTMLElement | null;\n forward: HTMLElement | null;\n backward: HTMLElement | null;\n vertical: boolean;\n activeIndex: number;\n}\n\n/**\n * @internal\n */\nexport const scrollTabIntoView = (options: ScrollOptions): void => {\n const { container, vertical, forward, backward, activeIndex } = options;\n if (!container) {\n return;\n }\n\n const activeTab = getTabRoleOnly(container)[activeIndex];\n if (!activeTab) {\n return;\n }\n\n const sizeAttribute = vertical ? \"offsetHeight\" : \"offsetWidth\";\n const offsetAttribute = vertical ? \"offsetTop\" : \"offsetLeft\";\n const scrollAttribute = vertical ? \"scrollTop\" : \"scrollLeft\";\n const firstOffset = backward?.[sizeAttribute] || 0;\n const lastOffset = forward?.[sizeAttribute] || 0;\n const elementStart = activeTab[offsetAttribute];\n const elementEnd = elementStart + activeTab[sizeAttribute];\n const containerStart = container[scrollAttribute];\n const containerEnd = containerStart + container[sizeAttribute] - lastOffset;\n if (elementEnd > containerEnd) {\n const containerSize = container[sizeAttribute] - lastOffset;\n container[scrollAttribute] = elementEnd - containerSize;\n } else if (elementStart < containerStart + firstOffset) {\n container[scrollAttribute] = elementStart - firstOffset;\n }\n};\n"],"names":["getTabRoleOnly","container","querySelectorAll","scrollTabIntoView","options","vertical","forward","backward","activeIndex","activeTab","sizeAttribute","offsetAttribute","scrollAttribute","firstOffset","lastOffset","elementStart","elementEnd","containerStart","containerEnd","containerSize"],"mappings":"AAAA;;CAEC,GACD,OAAO,MAAMA,iBAAiB,CAACC,YAA+C;WACzEA,UAAUC,gBAAgB,CAAc;KAC5C,CAAC;AAWF;;CAEC,GACD,OAAO,MAAMC,oBAAoB,CAACC;IAChC,MAAM,EAAEH,SAAS,EAAEI,QAAQ,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,WAAW,EAAE,GAAGJ;IAChE,IAAI,CAACH,WAAW;QACd;IACF;IAEA,MAAMQ,YAAYT,eAAeC,UAAU,CAACO,YAAY;IACxD,IAAI,CAACC,WAAW;QACd;IACF;IAEA,MAAMC,gBAAgBL,WAAW,iBAAiB;IAClD,MAAMM,kBAAkBN,WAAW,cAAc;IACjD,MAAMO,kBAAkBP,WAAW,cAAc;IACjD,MAAMQ,cAAcN,UAAU,CAACG,cAAc,IAAI;IACjD,MAAMI,aAAaR,SAAS,CAACI,cAAc,IAAI;IAC/C,MAAMK,eAAeN,SAAS,CAACE,gBAAgB;IAC/C,MAAMK,aAAaD,eAAeN,SAAS,CAACC,cAAc;IAC1D,MAAMO,iBAAiBhB,SAAS,CAACW,gBAAgB;IACjD,MAAMM,eAAeD,iBAAiBhB,SAAS,CAACS,cAAc,GAAGI;IACjE,IAAIE,aAAaE,cAAc;QAC7B,MAAMC,gBAAgBlB,SAAS,CAACS,cAAc,GAAGI;QACjDb,SAAS,CAACW,gBAAgB,GAAGI,aAAaG;IAC5C,OAAO,IAAIJ,eAAeE,iBAAiBJ,aAAa;QACtDZ,SAAS,CAACW,gBAAgB,GAAGG,eAAeF;IAC9C;AACF,EAAE"}
@@ -139,14 +139,14 @@ export interface SetupResizeObserverMockOptions {
139
139
  *
140
140
  * @example Main Usage
141
141
  * ```tsx
142
- * import { useCallback, useState } from "react";
143
142
  * import {
144
143
  * cleanupResizeObserverAfterEach,
145
144
  * render,
146
145
  * screen,
147
146
  * setupResizeObserverMock,
148
147
  * } from "@react-md/core/test-utils";
149
- * import { useResizeObserver } from "@react-md/core";
148
+ * import { useResizeObserver } from "@react-md/core/useResizeObserver";
149
+ * import { useCallback, useState } from "react";
150
150
  *
151
151
  * function ExampleComponent() {
152
152
  * const [size, setSize] = useState({ height: 0, width: 0 });
@@ -156,7 +156,7 @@ export interface SetupResizeObserverMockOptions {
156
156
  * height: entry.contentRect.height,
157
157
  * width: entry.contentRect.width,
158
158
  * });
159
- * });
159
+ * }, []),
160
160
  * });
161
161
  *
162
162
  * return (
@@ -172,10 +172,10 @@ export interface SetupResizeObserverMockOptions {
172
172
  * describe("ExampleComponent", () => {
173
173
  * it("should do stuff", () => {
174
174
  * const observer = setupResizeObserverMock();
175
- * render(<ExampleComponent />)
175
+ * render(<ExampleComponent />);
176
176
  *
177
177
  * const size = screen.getByTestId("size");
178
- * const resizeTarget = screen.getByTestId("resize-target")
178
+ * const resizeTarget = screen.getByTestId("resize-target");
179
179
  *
180
180
  * // jsdom sets all element sizes to 0 by default
181
181
  * expect(size).toHaveTextContent(JSON.stringify({ height: 0, width: 0 }));
@@ -187,19 +187,18 @@ export interface SetupResizeObserverMockOptions {
187
187
  * expect(size).toHaveTextContent(JSON.stringify({ height: 100, width: 100 }));
188
188
  *
189
189
  * // or you can mock the `getBoundingClientRect` result
190
- * jest.spyOn(resizeTarget, "getBoundingClientRect")
191
- * .mockReturnValue({
192
- * ...document.body.getBoundingClientRect(),
193
- * height: 200,
194
- * width: 200,
195
- * }):
190
+ * jest.spyOn(resizeTarget, "getBoundingClientRect").mockReturnValue({
191
+ * ...document.body.getBoundingClientRect(),
192
+ * height: 200,
193
+ * width: 200,
194
+ * });
196
195
  *
197
196
  * act(() => {
198
197
  * observer.resizeElement(resizeTarget);
199
198
  * });
200
199
  * expect(size).toHaveTextContent(JSON.stringify({ height: 200, width: 200 }));
201
200
  * });
202
- * })
201
+ * });
203
202
  * ```
204
203
  *
205
204
  * @since 6.0.0