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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1165) hide show
  1. package/dist/CoreProviders.js.map +1 -1
  2. package/dist/NoSsr.js.map +1 -1
  3. package/dist/RootHtml.d.ts +0 -2
  4. package/dist/RootHtml.js +0 -2
  5. package/dist/RootHtml.js.map +1 -1
  6. package/dist/SsrProvider.js.map +1 -1
  7. package/dist/app-bar/AppBar.d.ts +0 -2
  8. package/dist/app-bar/AppBar.js +0 -2
  9. package/dist/app-bar/AppBar.js.map +1 -1
  10. package/dist/app-bar/AppBarTitle.d.ts +8 -7
  11. package/dist/app-bar/AppBarTitle.js +3 -4
  12. package/dist/app-bar/AppBarTitle.js.map +1 -1
  13. package/dist/autocomplete/Autocomplete.js.map +1 -1
  14. package/dist/autocomplete/AutocompleteCircularProgress.js.map +1 -1
  15. package/dist/autocomplete/AutocompleteDropdownButton.js.map +1 -1
  16. package/dist/autocomplete/FilterAutocompleteOptions.js.map +1 -1
  17. package/dist/autocomplete/autocompleteStyles.js.map +1 -1
  18. package/dist/autocomplete/defaults.d.ts +2 -2
  19. package/dist/autocomplete/defaults.js +3 -3
  20. package/dist/autocomplete/defaults.js.map +1 -1
  21. package/dist/autocomplete/types.js.map +1 -1
  22. package/dist/avatar/Avatar.d.ts +1 -4
  23. package/dist/avatar/Avatar.js +1 -4
  24. package/dist/avatar/Avatar.js.map +1 -1
  25. package/dist/avatar/styles.js.map +1 -1
  26. package/dist/badge/Badge.d.ts +1 -3
  27. package/dist/badge/Badge.js +0 -2
  28. package/dist/badge/Badge.js.map +1 -1
  29. package/dist/box/Box.d.ts +0 -2
  30. package/dist/box/Box.js +0 -2
  31. package/dist/box/Box.js.map +1 -1
  32. package/dist/box/styles.js.map +1 -1
  33. package/dist/button/AsyncButton.js.map +1 -1
  34. package/dist/button/Button.js.map +1 -1
  35. package/dist/button/ButtonUnstyled.d.ts +0 -2
  36. package/dist/button/ButtonUnstyled.js +0 -2
  37. package/dist/button/ButtonUnstyled.js.map +1 -1
  38. package/dist/button/FloatingActionButton.js.map +1 -1
  39. package/dist/button/TooltippedButton.js.map +1 -1
  40. package/dist/button/buttonStyles.js.map +1 -1
  41. package/dist/button/buttonUnstyledStyles.js.map +1 -1
  42. package/dist/card/Card.d.ts +2 -3
  43. package/dist/card/Card.js +0 -2
  44. package/dist/card/Card.js.map +1 -1
  45. package/dist/card/CardContent.d.ts +0 -2
  46. package/dist/card/CardContent.js +0 -2
  47. package/dist/card/CardContent.js.map +1 -1
  48. package/dist/card/CardFooter.d.ts +0 -3
  49. package/dist/card/CardFooter.js +0 -2
  50. package/dist/card/CardFooter.js.map +1 -1
  51. package/dist/card/CardHeader.d.ts +0 -2
  52. package/dist/card/CardHeader.js +0 -2
  53. package/dist/card/CardHeader.js.map +1 -1
  54. package/dist/card/CardSubtitle.d.ts +6 -3
  55. package/dist/card/CardSubtitle.js +2 -3
  56. package/dist/card/CardSubtitle.js.map +1 -1
  57. package/dist/card/CardTitle.d.ts +0 -3
  58. package/dist/card/CardTitle.js +0 -2
  59. package/dist/card/CardTitle.js.map +1 -1
  60. package/dist/card/ClickableCard.js.map +1 -1
  61. package/dist/card/styles.js +2 -4
  62. package/dist/card/styles.js.map +1 -1
  63. package/dist/chip/Chip.d.ts +0 -2
  64. package/dist/chip/Chip.js +0 -2
  65. package/dist/chip/Chip.js.map +1 -1
  66. package/dist/chip/styles.js.map +1 -1
  67. package/dist/cssUtils.d.ts +1 -1
  68. package/dist/cssUtils.js.map +1 -1
  69. package/dist/delegateEvent.js.map +1 -1
  70. package/dist/dialog/Dialog.js.map +1 -1
  71. package/dist/dialog/DialogContainer.d.ts +0 -2
  72. package/dist/dialog/DialogContainer.js +0 -2
  73. package/dist/dialog/DialogContainer.js.map +1 -1
  74. package/dist/dialog/DialogContent.d.ts +3 -3
  75. package/dist/dialog/DialogContent.js +3 -3
  76. package/dist/dialog/DialogContent.js.map +1 -1
  77. package/dist/dialog/DialogFooter.d.ts +2 -3
  78. package/dist/dialog/DialogFooter.js +2 -3
  79. package/dist/dialog/DialogFooter.js.map +1 -1
  80. package/dist/dialog/DialogHeader.d.ts +3 -3
  81. package/dist/dialog/DialogHeader.js +3 -3
  82. package/dist/dialog/DialogHeader.js.map +1 -1
  83. package/dist/dialog/DialogTitle.d.ts +3 -4
  84. package/dist/dialog/DialogTitle.js +3 -3
  85. package/dist/dialog/DialogTitle.js.map +1 -1
  86. package/dist/dialog/FixedDialog.js.map +1 -1
  87. package/dist/dialog/NestedDialogProvider.d.ts +0 -1
  88. package/dist/dialog/NestedDialogProvider.js.map +1 -1
  89. package/dist/dialog/styles.js.map +1 -1
  90. package/dist/divider/Divider.d.ts +0 -2
  91. package/dist/divider/Divider.js +0 -2
  92. package/dist/divider/Divider.js.map +1 -1
  93. package/dist/divider/styles.js.map +1 -1
  94. package/dist/draggable/useDraggable.js.map +1 -1
  95. package/dist/draggable/utils.js.map +1 -1
  96. package/dist/expansion-panel/ExpansionList.d.ts +1 -1
  97. package/dist/expansion-panel/ExpansionList.js +1 -1
  98. package/dist/expansion-panel/ExpansionList.js.map +1 -1
  99. package/dist/expansion-panel/ExpansionPanel.d.ts +8 -24
  100. package/dist/expansion-panel/ExpansionPanel.js +1 -12
  101. package/dist/expansion-panel/ExpansionPanel.js.map +1 -1
  102. package/dist/expansion-panel/ExpansionPanelHeader.d.ts +0 -1
  103. package/dist/expansion-panel/ExpansionPanelHeader.js +0 -1
  104. package/dist/expansion-panel/ExpansionPanelHeader.js.map +1 -1
  105. package/dist/expansion-panel/expansionPanelStyles.d.ts +19 -0
  106. package/dist/expansion-panel/expansionPanelStyles.js +14 -0
  107. package/dist/expansion-panel/expansionPanelStyles.js.map +1 -0
  108. package/dist/expansion-panel/useExpansionList.js.map +1 -1
  109. package/dist/expansion-panel/useExpansionPanels.js.map +1 -1
  110. package/dist/focus/useFocusContainer.js.map +1 -1
  111. package/dist/focus/utils.js.map +1 -1
  112. package/dist/form/Checkbox.d.ts +0 -1
  113. package/dist/form/Checkbox.js.map +1 -1
  114. package/dist/form/Fieldset.d.ts +0 -2
  115. package/dist/form/Fieldset.js.map +1 -1
  116. package/dist/form/FileInput.js.map +1 -1
  117. package/dist/form/Form.js.map +1 -1
  118. package/dist/form/FormMessage.d.ts +0 -3
  119. package/dist/form/FormMessage.js +0 -2
  120. package/dist/form/FormMessage.js.map +1 -1
  121. package/dist/form/FormMessageContainer.d.ts +0 -1
  122. package/dist/form/FormMessageContainer.js +0 -1
  123. package/dist/form/FormMessageContainer.js.map +1 -1
  124. package/dist/form/FormMessageCounter.d.ts +0 -2
  125. package/dist/form/FormMessageCounter.js +0 -2
  126. package/dist/form/FormMessageCounter.js.map +1 -1
  127. package/dist/form/InputToggle.js.map +1 -1
  128. package/dist/form/InputToggleIcon.d.ts +0 -2
  129. package/dist/form/InputToggleIcon.js +0 -2
  130. package/dist/form/InputToggleIcon.js.map +1 -1
  131. package/dist/form/Label.d.ts +0 -3
  132. package/dist/form/Label.js +0 -2
  133. package/dist/form/Label.js.map +1 -1
  134. package/dist/form/Legend.d.ts +0 -3
  135. package/dist/form/Legend.js +0 -2
  136. package/dist/form/Legend.js.map +1 -1
  137. package/dist/form/MenuItemCheckbox.d.ts +0 -1
  138. package/dist/form/MenuItemCheckbox.js.map +1 -1
  139. package/dist/form/MenuItemFileInput.js.map +1 -1
  140. package/dist/form/MenuItemInputToggle.js.map +1 -1
  141. package/dist/form/MenuItemRadio.d.ts +0 -1
  142. package/dist/form/MenuItemRadio.js.map +1 -1
  143. package/dist/form/MenuItemSwitch.d.ts +0 -1
  144. package/dist/form/MenuItemSwitch.js.map +1 -1
  145. package/dist/form/MenuItemTextField.js.map +1 -1
  146. package/dist/form/NativeSelect.d.ts +0 -2
  147. package/dist/form/NativeSelect.js +0 -2
  148. package/dist/form/NativeSelect.js.map +1 -1
  149. package/dist/form/OptGroup.js.map +1 -1
  150. package/dist/form/Option.js.map +1 -1
  151. package/dist/form/Password.js.map +1 -1
  152. package/dist/form/Radio.d.ts +0 -1
  153. package/dist/form/Radio.js.map +1 -1
  154. package/dist/form/ResizingTextAreaWrapper.js.map +1 -1
  155. package/dist/form/Select.js.map +1 -1
  156. package/dist/form/SelectedOption.d.ts +0 -2
  157. package/dist/form/SelectedOption.js +0 -2
  158. package/dist/form/SelectedOption.js.map +1 -1
  159. package/dist/form/Slider.js.map +1 -1
  160. package/dist/form/SliderContainer.d.ts +0 -2
  161. package/dist/form/SliderContainer.js +0 -2
  162. package/dist/form/SliderContainer.js.map +1 -1
  163. package/dist/form/SliderMark.d.ts +0 -2
  164. package/dist/form/SliderMark.js +0 -2
  165. package/dist/form/SliderMark.js.map +1 -1
  166. package/dist/form/SliderMarkLabel.d.ts +0 -2
  167. package/dist/form/SliderMarkLabel.js +0 -2
  168. package/dist/form/SliderMarkLabel.js.map +1 -1
  169. package/dist/form/SliderThumb.js.map +1 -1
  170. package/dist/form/SliderTrack.d.ts +0 -2
  171. package/dist/form/SliderTrack.js +0 -2
  172. package/dist/form/SliderTrack.js.map +1 -1
  173. package/dist/form/SliderValueMarks.d.ts +0 -2
  174. package/dist/form/SliderValueMarks.js +0 -2
  175. package/dist/form/SliderValueMarks.js.map +1 -1
  176. package/dist/form/SliderValueTooltip.js.map +1 -1
  177. package/dist/form/Switch.d.ts +0 -2
  178. package/dist/form/Switch.js +0 -2
  179. package/dist/form/Switch.js.map +1 -1
  180. package/dist/form/SwitchTrack.d.ts +2 -1
  181. package/dist/form/SwitchTrack.js +2 -1
  182. package/dist/form/SwitchTrack.js.map +1 -1
  183. package/dist/form/TextArea.js.map +1 -1
  184. package/dist/form/TextField.d.ts +0 -2
  185. package/dist/form/TextField.js +0 -2
  186. package/dist/form/TextField.js.map +1 -1
  187. package/dist/form/TextFieldAddon.d.ts +1 -4
  188. package/dist/form/TextFieldAddon.js +1 -3
  189. package/dist/form/TextFieldAddon.js.map +1 -1
  190. package/dist/form/TextFieldContainer.js.map +1 -1
  191. package/dist/form/fileUtils.js.map +1 -1
  192. package/dist/form/formConfig.js.map +1 -1
  193. package/dist/form/formMessageStyles.js.map +1 -1
  194. package/dist/form/inputToggleStyles.js.map +1 -1
  195. package/dist/form/menuItemInputToggleStyles.js.map +1 -1
  196. package/dist/form/nativeSelectStyles.js.map +1 -1
  197. package/dist/form/optionStyles.js.map +1 -1
  198. package/dist/form/passwordStyles.js.map +1 -1
  199. package/dist/form/selectStyles.js.map +1 -1
  200. package/dist/form/selectUtils.js.map +1 -1
  201. package/dist/form/sliderUtils.js.map +1 -1
  202. package/dist/form/switchStyles.js.map +1 -1
  203. package/dist/form/textAreaStyles.js.map +1 -1
  204. package/dist/form/textFieldContainerStyles.js.map +1 -1
  205. package/dist/form/textFieldStyles.js.map +1 -1
  206. package/dist/form/types.js.map +1 -1
  207. package/dist/form/useCheckboxGroup.js.map +1 -1
  208. package/dist/form/useCombobox.js.map +1 -1
  209. package/dist/form/useEditableCombobox.js.map +1 -1
  210. package/dist/form/useFileUpload.js.map +1 -1
  211. package/dist/form/useFormReset.js.map +1 -1
  212. package/dist/form/useListboxProvider.js.map +1 -1
  213. package/dist/form/useNumberField.js.map +1 -1
  214. package/dist/form/useRadioGroup.js.map +1 -1
  215. package/dist/form/useRangeSlider.js.map +1 -1
  216. package/dist/form/useResizingTextArea.js.map +1 -1
  217. package/dist/form/useSelectCombobox.js.map +1 -1
  218. package/dist/form/useSlider.js.map +1 -1
  219. package/dist/form/useTextField.js.map +1 -1
  220. package/dist/form/useTextFieldContainerAddons.js.map +1 -1
  221. package/dist/form/utils.js.map +1 -1
  222. package/dist/form/validation.js.map +1 -1
  223. package/dist/hoverMode/useHoverMode.js.map +1 -1
  224. package/dist/hoverMode/useHoverModeProvider.js.map +1 -1
  225. package/dist/icon/FontIcon.d.ts +10 -8
  226. package/dist/icon/FontIcon.js +1 -7
  227. package/dist/icon/FontIcon.js.map +1 -1
  228. package/dist/icon/IconRotator.d.ts +0 -2
  229. package/dist/icon/IconRotator.js +0 -2
  230. package/dist/icon/IconRotator.js.map +1 -1
  231. package/dist/icon/MaterialIcon.d.ts +18 -3
  232. package/dist/icon/MaterialIcon.js +13 -3
  233. package/dist/icon/MaterialIcon.js.map +1 -1
  234. package/dist/icon/MaterialSymbol.d.ts +0 -1
  235. package/dist/icon/MaterialSymbol.js +0 -1
  236. package/dist/icon/MaterialSymbol.js.map +1 -1
  237. package/dist/icon/SVGIcon.d.ts +3 -2
  238. package/dist/icon/SVGIcon.js +0 -2
  239. package/dist/icon/SVGIcon.js.map +1 -1
  240. package/dist/icon/TextIconSpacing.d.ts +0 -2
  241. package/dist/icon/TextIconSpacing.js +0 -2
  242. package/dist/icon/TextIconSpacing.js.map +1 -1
  243. package/dist/icon/_icon.scss +2 -2
  244. package/dist/icon/iconConfig.d.ts +1 -0
  245. package/dist/icon/iconConfig.js +1 -0
  246. package/dist/icon/iconConfig.js.map +1 -1
  247. package/dist/icon/material.d.ts +1 -1
  248. package/dist/icon/material.js.map +1 -1
  249. package/dist/icon/materialConfig.js.map +1 -1
  250. package/dist/icon/styles.js +1 -1
  251. package/dist/icon/styles.js.map +1 -1
  252. package/dist/interaction/Ripple.js.map +1 -1
  253. package/dist/interaction/RippleContainer.d.ts +0 -2
  254. package/dist/interaction/RippleContainer.js +0 -2
  255. package/dist/interaction/RippleContainer.js.map +1 -1
  256. package/dist/interaction/UserInteractionModeProvider.js.map +1 -1
  257. package/dist/interaction/config.js.map +1 -1
  258. package/dist/interaction/types.js.map +1 -1
  259. package/dist/interaction/useElementInteraction.js.map +1 -1
  260. package/dist/interaction/useHigherContrastChildren.js.map +1 -1
  261. package/dist/interaction/utils.js.map +1 -1
  262. package/dist/layout/LayoutAppBar.d.ts +0 -1
  263. package/dist/layout/LayoutAppBar.js.map +1 -1
  264. package/dist/layout/LayoutNav.js +1 -2
  265. package/dist/layout/LayoutNav.js.map +1 -1
  266. package/dist/layout/LayoutWindowSplitter.d.ts +0 -1
  267. package/dist/layout/LayoutWindowSplitter.js.map +1 -1
  268. package/dist/layout/Main.js.map +1 -1
  269. package/dist/layout/layoutNavStyles.js.map +1 -1
  270. package/dist/layout/layoutWindowSplitterStyles.js.map +1 -1
  271. package/dist/layout/mainStyles.js.map +1 -1
  272. package/dist/layout/useExpandableLayout.js.map +1 -1
  273. package/dist/layout/useHorizontalLayoutTransition.js +1 -1
  274. package/dist/layout/useHorizontalLayoutTransition.js.map +1 -1
  275. package/dist/layout/useLayoutAppBarHeight.js.map +1 -1
  276. package/dist/layout/useLayoutTree.d.ts +2 -2
  277. package/dist/layout/useLayoutTree.js.map +1 -1
  278. package/dist/layout/useLayoutWindowSplitter.js.map +1 -1
  279. package/dist/layout/useMainTabIndex.js.map +1 -1
  280. package/dist/layout/useResizableLayout.js.map +1 -1
  281. package/dist/layout/useTemporaryLayout.js.map +1 -1
  282. package/dist/link/Link.d.ts +2 -6
  283. package/dist/link/Link.js +1 -4
  284. package/dist/link/Link.js.map +1 -1
  285. package/dist/link/SkipToMainContent.d.ts +10 -3
  286. package/dist/link/SkipToMainContent.js +4 -1
  287. package/dist/link/SkipToMainContent.js.map +1 -1
  288. package/dist/link/styles.d.ts +2 -2
  289. package/dist/link/styles.js.map +1 -1
  290. package/dist/list/List.d.ts +0 -20
  291. package/dist/list/List.js +1 -14
  292. package/dist/list/List.js.map +1 -1
  293. package/dist/list/ListItem.d.ts +0 -16
  294. package/dist/list/ListItem.js.map +1 -1
  295. package/dist/list/ListItemAddon.d.ts +0 -2
  296. package/dist/list/ListItemAddon.js +0 -2
  297. package/dist/list/ListItemAddon.js.map +1 -1
  298. package/dist/list/ListItemChildren.d.ts +0 -2
  299. package/dist/list/ListItemChildren.js +0 -2
  300. package/dist/list/ListItemChildren.js.map +1 -1
  301. package/dist/list/ListItemLink.js.map +1 -1
  302. package/dist/list/ListItemText.d.ts +0 -2
  303. package/dist/list/ListItemText.js +0 -2
  304. package/dist/list/ListItemText.js.map +1 -1
  305. package/dist/list/ListSubheader.d.ts +3 -2
  306. package/dist/list/ListSubheader.js +0 -2
  307. package/dist/list/ListSubheader.js.map +1 -1
  308. package/dist/list/getListItemHeight.d.ts +2 -2
  309. package/dist/list/getListItemHeight.js +2 -2
  310. package/dist/list/getListItemHeight.js.map +1 -1
  311. package/dist/list/listItemStyles.d.ts +17 -1
  312. package/dist/list/listItemStyles.js.map +1 -1
  313. package/dist/list/listStyles.d.ts +18 -0
  314. package/dist/list/listStyles.js +14 -0
  315. package/dist/list/listStyles.js.map +1 -0
  316. package/dist/list/types.d.ts +9 -3
  317. package/dist/list/types.js +6 -1
  318. package/dist/list/types.js.map +1 -1
  319. package/dist/media-queries/AppSizeProvider.d.ts +8 -0
  320. package/dist/media-queries/AppSizeProvider.js +2 -0
  321. package/dist/media-queries/AppSizeProvider.js.map +1 -1
  322. package/dist/media-queries/appSize.d.ts +5 -5
  323. package/dist/media-queries/appSize.js.map +1 -1
  324. package/dist/media-queries/useMediaQuery.d.ts +1 -1
  325. package/dist/media-queries/useMediaQuery.js +1 -1
  326. package/dist/media-queries/useMediaQuery.js.map +1 -1
  327. package/dist/menu/DropdownMenu.js.map +1 -1
  328. package/dist/menu/Menu.js.map +1 -1
  329. package/dist/menu/MenuBar.d.ts +0 -1
  330. package/dist/menu/MenuBar.js.map +1 -1
  331. package/dist/menu/MenuButton.d.ts +0 -1
  332. package/dist/menu/MenuButton.js.map +1 -1
  333. package/dist/menu/MenuConfigurationProvider.js.map +1 -1
  334. package/dist/menu/MenuItem.d.ts +0 -1
  335. package/dist/menu/MenuItem.js.map +1 -1
  336. package/dist/menu/MenuItemButton.d.ts +0 -1
  337. package/dist/menu/MenuItemButton.js.map +1 -1
  338. package/dist/menu/MenuItemCircularProgress.js.map +1 -1
  339. package/dist/menu/MenuItemGroup.js.map +1 -1
  340. package/dist/menu/MenuItemSeparator.js.map +1 -1
  341. package/dist/menu/MenuSheet.js.map +1 -1
  342. package/dist/menu/MenuVisibilityProvider.js.map +1 -1
  343. package/dist/menu/MenuWidget.js.map +1 -1
  344. package/dist/menu/MenuWidgetKeyboardProvider.js.map +1 -1
  345. package/dist/menu/useContextMenu.js.map +1 -1
  346. package/dist/menu/useMenuBarProvider.d.ts +0 -1
  347. package/dist/menu/useMenuBarProvider.js.map +1 -1
  348. package/dist/menu/utils.js.map +1 -1
  349. package/dist/movement/constants.js.map +1 -1
  350. package/dist/movement/findMatchIndex.js.map +1 -1
  351. package/dist/movement/types.js.map +1 -1
  352. package/dist/movement/useKeyboardMovementProvider.d.ts +0 -1
  353. package/dist/movement/useKeyboardMovementProvider.js.map +1 -1
  354. package/dist/movement/utils.js.map +1 -1
  355. package/dist/navigation/CollapsibleNavGroup.js.map +1 -1
  356. package/dist/navigation/DefaultNavigationRenderer.js.map +1 -1
  357. package/dist/navigation/NavGroup.d.ts +0 -2
  358. package/dist/navigation/NavGroup.js +0 -2
  359. package/dist/navigation/NavGroup.js.map +1 -1
  360. package/dist/navigation/NavItem.d.ts +0 -2
  361. package/dist/navigation/NavItem.js +0 -2
  362. package/dist/navigation/NavItem.js.map +1 -1
  363. package/dist/navigation/NavItemButton.js.map +1 -1
  364. package/dist/navigation/NavItemLink.js.map +1 -1
  365. package/dist/navigation/NavSubheader.d.ts +0 -3
  366. package/dist/navigation/NavSubheader.js +0 -2
  367. package/dist/navigation/NavSubheader.js.map +1 -1
  368. package/dist/navigation/Navigation.js.map +1 -1
  369. package/dist/navigation/getHrefFromParents.js.map +1 -1
  370. package/dist/navigation/navGroupStyles.js.map +1 -1
  371. package/dist/navigation/navItemStyles.js.map +1 -1
  372. package/dist/navigation/types.js.map +1 -1
  373. package/dist/navigation/useActiveHeadingId.js.map +1 -1
  374. package/dist/overlay/Overlay.d.ts +1 -0
  375. package/dist/overlay/Overlay.js.map +1 -1
  376. package/dist/overlay/overlayStyles.js.map +1 -1
  377. package/dist/portal/Portal.d.ts +4 -0
  378. package/dist/portal/Portal.js.map +1 -1
  379. package/dist/portal/PortalContainerProvider.d.ts +8 -3
  380. package/dist/portal/PortalContainerProvider.js +1 -0
  381. package/dist/portal/PortalContainerProvider.js.map +1 -1
  382. package/dist/positioning/constants.js.map +1 -1
  383. package/dist/positioning/createHorizontalPosition.js.map +1 -1
  384. package/dist/positioning/createVerticalPosition.js.map +1 -1
  385. package/dist/positioning/getFixedPosition.js.map +1 -1
  386. package/dist/positioning/types.js.map +1 -1
  387. package/dist/positioning/useFixedPositioning.js.map +1 -1
  388. package/dist/positioning/utils.js.map +1 -1
  389. package/dist/progress/CircularProgress.d.ts +5 -6
  390. package/dist/progress/CircularProgress.js +0 -2
  391. package/dist/progress/CircularProgress.js.map +1 -1
  392. package/dist/progress/LinearProgress.d.ts +0 -2
  393. package/dist/progress/LinearProgress.js +0 -2
  394. package/dist/progress/LinearProgress.js.map +1 -1
  395. package/dist/progress/getProgressA11y.js.map +1 -1
  396. package/dist/progress/types.js.map +1 -1
  397. package/dist/responsive-item/ResponsiveItemContainer.d.ts +0 -2
  398. package/dist/responsive-item/ResponsiveItemContainer.js +0 -2
  399. package/dist/responsive-item/ResponsiveItemContainer.js.map +1 -1
  400. package/dist/responsive-item/ResponsiveItemOverlay.d.ts +0 -2
  401. package/dist/responsive-item/ResponsiveItemOverlay.js +0 -2
  402. package/dist/responsive-item/ResponsiveItemOverlay.js.map +1 -1
  403. package/dist/responsive-item/styles.js.map +1 -1
  404. package/dist/scroll/ScrollLock.js.map +1 -1
  405. package/dist/scroll/getScrollbarWidth.js.map +1 -1
  406. package/dist/scroll/useScrollLock.js.map +1 -1
  407. package/dist/searching/caseInsensitive.js.map +1 -1
  408. package/dist/searching/fuzzy.js.map +1 -1
  409. package/dist/searching/toSearchQuery.js.map +1 -1
  410. package/dist/searching/types.js.map +1 -1
  411. package/dist/searching/useFuzzyMatch.js.map +1 -1
  412. package/dist/searching/utils.js.map +1 -1
  413. package/dist/segmented-button/SegmentedButton.js.map +1 -1
  414. package/dist/segmented-button/SegmentedButtonContainer.d.ts +0 -2
  415. package/dist/segmented-button/SegmentedButtonContainer.js +0 -2
  416. package/dist/segmented-button/SegmentedButtonContainer.js.map +1 -1
  417. package/dist/segmented-button/segmentedButtonContainerStyles.js.map +1 -1
  418. package/dist/segmented-button/segmentedButtonStyles.js.map +1 -1
  419. package/dist/sheet/Sheet.d.ts +30 -16
  420. package/dist/sheet/Sheet.js +24 -14
  421. package/dist/sheet/Sheet.js.map +1 -1
  422. package/dist/sheet/styles.d.ts +29 -0
  423. package/dist/sheet/styles.js +13 -0
  424. package/dist/sheet/styles.js.map +1 -1
  425. package/dist/snackbar/DefaultToastRenderer.js.map +1 -1
  426. package/dist/snackbar/Snackbar.js.map +1 -1
  427. package/dist/snackbar/Toast.js.map +1 -1
  428. package/dist/snackbar/ToastActionButton.d.ts +0 -1
  429. package/dist/snackbar/ToastActionButton.js.map +1 -1
  430. package/dist/snackbar/ToastCloseButton.d.ts +0 -1
  431. package/dist/snackbar/ToastCloseButton.js.map +1 -1
  432. package/dist/snackbar/ToastContent.js.map +1 -1
  433. package/dist/snackbar/ToastManager.js.map +1 -1
  434. package/dist/snackbar/ToastManagerProvider.js.map +1 -1
  435. package/dist/snackbar/snackbarStyles.js.map +1 -1
  436. package/dist/snackbar/toastContentStyles.js.map +1 -1
  437. package/dist/snackbar/toastStyles.js.map +1 -1
  438. package/dist/snackbar/useCurrentToastActions.d.ts +0 -1
  439. package/dist/snackbar/useCurrentToastActions.js.map +1 -1
  440. package/dist/suspense/CircularProgressSuspense.d.ts +0 -2
  441. package/dist/suspense/CircularProgressSuspense.js +0 -2
  442. package/dist/suspense/CircularProgressSuspense.js.map +1 -1
  443. package/dist/suspense/NullSuspense.d.ts +0 -2
  444. package/dist/suspense/NullSuspense.js +0 -2
  445. package/dist/suspense/NullSuspense.js.map +1 -1
  446. package/dist/table/StickyTableSection.d.ts +23 -0
  447. package/dist/table/StickyTableSection.js +56 -0
  448. package/dist/table/StickyTableSection.js.map +1 -0
  449. package/dist/table/Table.d.ts +1 -1
  450. package/dist/table/Table.js.map +1 -1
  451. package/dist/table/TableBody.d.ts +1 -1
  452. package/dist/table/TableBody.js.map +1 -1
  453. package/dist/table/TableCell.d.ts +3 -2
  454. package/dist/table/TableCell.js.map +1 -1
  455. package/dist/table/TableCellContent.d.ts +1 -5
  456. package/dist/table/TableCellContent.js +0 -3
  457. package/dist/table/TableCellContent.js.map +1 -1
  458. package/dist/table/TableCheckbox.js.map +1 -1
  459. package/dist/table/TableConfigurationProvider.d.ts +1 -74
  460. package/dist/table/TableConfigurationProvider.js.map +1 -1
  461. package/dist/table/TableContainer.js.map +1 -1
  462. package/dist/table/TableContainerProvider.js.map +1 -1
  463. package/dist/table/TableFooter.d.ts +8 -17
  464. package/dist/table/TableFooter.js +17 -80
  465. package/dist/table/TableFooter.js.map +1 -1
  466. package/dist/table/TableHeader.d.ts +8 -17
  467. package/dist/table/TableHeader.js +20 -87
  468. package/dist/table/TableHeader.js.map +1 -1
  469. package/dist/table/TableRadio.js.map +1 -1
  470. package/dist/table/TableRow.d.ts +1 -1
  471. package/dist/table/TableRow.js.map +1 -1
  472. package/dist/table/tableCellStyles.d.ts +1 -1
  473. package/dist/table/tableCellStyles.js.map +1 -1
  474. package/dist/table/tableContainerStyles.js.map +1 -1
  475. package/dist/table/tableFooterStyles.js.map +1 -1
  476. package/dist/table/tableHeaderStyles.js.map +1 -1
  477. package/dist/table/tableRowStyles.js.map +1 -1
  478. package/dist/table/tableStyles.js.map +1 -1
  479. package/dist/table/types.d.ts +89 -9
  480. package/dist/table/types.js.map +1 -1
  481. package/dist/table/useStickyTableSection.d.ts +27 -0
  482. package/dist/table/useStickyTableSection.js +84 -0
  483. package/dist/table/useStickyTableSection.js.map +1 -0
  484. package/dist/table/useTableSectionConfig.d.ts +13 -0
  485. package/dist/table/useTableSectionConfig.js +33 -0
  486. package/dist/table/useTableSectionConfig.js.map +1 -0
  487. package/dist/tabs/Tab.d.ts +3 -0
  488. package/dist/tabs/Tab.js.map +1 -1
  489. package/dist/tabs/TabList.js.map +1 -1
  490. package/dist/tabs/TabListScrollButton.js +5 -1
  491. package/dist/tabs/TabListScrollButton.js.map +1 -1
  492. package/dist/tabs/_tabs.scss +21 -3
  493. package/dist/tabs/tabIndicatorStyles.js.map +1 -1
  494. package/dist/tabs/tabListScrollButtonStyles.d.ts +2 -0
  495. package/dist/tabs/tabListScrollButtonStyles.js +9 -5
  496. package/dist/tabs/tabListScrollButtonStyles.js.map +1 -1
  497. package/dist/tabs/tabListStyles.js.map +1 -1
  498. package/dist/tabs/tabStyles.js.map +1 -1
  499. package/dist/tabs/useTabList.d.ts +2 -0
  500. package/dist/tabs/useTabList.js +4 -2
  501. package/dist/tabs/useTabList.js.map +1 -1
  502. package/dist/tabs/useTabs.d.ts +33 -11
  503. package/dist/tabs/useTabs.js +9 -3
  504. package/dist/tabs/useTabs.js.map +1 -1
  505. package/dist/tabs/utils.js.map +1 -1
  506. package/dist/test-utils/IntersectionObserver.js.map +1 -1
  507. package/dist/test-utils/ResizeObserver.js.map +1 -1
  508. package/dist/test-utils/data-testid.d.ts +0 -1
  509. package/dist/test-utils/data-testid.js.map +1 -1
  510. package/dist/test-utils/index.js.map +1 -1
  511. package/dist/test-utils/jest-setup.js.map +1 -1
  512. package/dist/test-utils/matchMedia.js.map +1 -1
  513. package/dist/test-utils/polyfills/IntersectionObserver.js.map +1 -1
  514. package/dist/test-utils/polyfills/ResizeObserver.js.map +1 -1
  515. package/dist/test-utils/polyfills/TextDecoder.js.map +1 -1
  516. package/dist/test-utils/polyfills/TextEncoder.js.map +1 -1
  517. package/dist/test-utils/polyfills/index.js.map +1 -1
  518. package/dist/test-utils/polyfills/matchMedia.js.map +1 -1
  519. package/dist/test-utils/polyfills/offsetParent.js.map +1 -1
  520. package/dist/test-utils/polyfills/scrollIntoView.js.map +1 -1
  521. package/dist/test-utils/render.js.map +1 -1
  522. package/dist/test-utils/timers.js.map +1 -1
  523. package/dist/theme/LocalStorageColorSchemeProvider.js.map +1 -1
  524. package/dist/theme/ThemeProvider.js.map +1 -1
  525. package/dist/theme/_theme.scss +2 -1
  526. package/dist/theme/colors.js.map +1 -1
  527. package/dist/theme/cssVars.js.map +1 -1
  528. package/dist/theme/types.js.map +1 -1
  529. package/dist/theme/useCSSVariables.js.map +1 -1
  530. package/dist/theme/useColorScheme.d.ts +0 -1
  531. package/dist/theme/useColorScheme.js.map +1 -1
  532. package/dist/theme/useColorSchemeMetaTag.js.map +1 -1
  533. package/dist/theme/useColorSchemeProvider.js.map +1 -1
  534. package/dist/theme/usePrefersColorScheme.js.map +1 -1
  535. package/dist/theme/utils.js.map +1 -1
  536. package/dist/tooltip/Tooltip.d.ts +20 -9
  537. package/dist/tooltip/Tooltip.js.map +1 -1
  538. package/dist/tooltip/TooltipHoverModeProvider.js.map +1 -1
  539. package/dist/tooltip/constants.js.map +1 -1
  540. package/dist/tooltip/tooltipStyles.js.map +1 -1
  541. package/dist/tooltip/useTooltip.d.ts +30 -16
  542. package/dist/tooltip/useTooltip.js.map +1 -1
  543. package/dist/tooltip/useTooltipPosition.d.ts +2 -4
  544. package/dist/tooltip/useTooltipPosition.js.map +1 -1
  545. package/dist/tooltip/utils.js.map +1 -1
  546. package/dist/transition/CSSTransition.js.map +1 -1
  547. package/dist/transition/Collapse.js.map +1 -1
  548. package/dist/transition/CrossFade.js.map +1 -1
  549. package/dist/transition/ScaleTransition.js.map +1 -1
  550. package/dist/transition/SkeletonPlaceholder.js.map +1 -1
  551. package/dist/transition/Slide.js.map +1 -1
  552. package/dist/transition/SlideContainer.d.ts +2 -48
  553. package/dist/transition/SlideContainer.js +2 -48
  554. package/dist/transition/SlideContainer.js.map +1 -1
  555. package/dist/transition/collapseStyles.js.map +1 -1
  556. package/dist/transition/config.js.map +1 -1
  557. package/dist/transition/maxWidthTransition.js.map +1 -1
  558. package/dist/transition/skeletonPlaceholderUtils.js.map +1 -1
  559. package/dist/transition/types.d.ts +19 -24
  560. package/dist/transition/types.js.map +1 -1
  561. package/dist/transition/useCSSTransition.js.map +1 -1
  562. package/dist/transition/useCarousel.js.map +1 -1
  563. package/dist/transition/useCollapseTransition.js.map +1 -1
  564. package/dist/transition/useCrossFadeTransition.js.map +1 -1
  565. package/dist/transition/useMaxWidthTransition.js.map +1 -1
  566. package/dist/transition/useScaleTransition.js.map +1 -1
  567. package/dist/transition/useSkeletonPlaceholder.js.map +1 -1
  568. package/dist/transition/useSlideTransition.js.map +1 -1
  569. package/dist/transition/useTransition.d.ts +1 -0
  570. package/dist/transition/useTransition.js +1 -0
  571. package/dist/transition/useTransition.js.map +1 -1
  572. package/dist/transition/utils.js.map +1 -1
  573. package/dist/tree/DefaultTreeItemRenderer.d.ts +2 -3
  574. package/dist/tree/DefaultTreeItemRenderer.js +1 -1
  575. package/dist/tree/DefaultTreeItemRenderer.js.map +1 -1
  576. package/dist/tree/Tree.d.ts +3 -4
  577. package/dist/tree/Tree.js.map +1 -1
  578. package/dist/tree/TreeGroup.js.map +1 -1
  579. package/dist/tree/TreeItem.d.ts +10 -3
  580. package/dist/tree/TreeItem.js +5 -2
  581. package/dist/tree/TreeItem.js.map +1 -1
  582. package/dist/tree/TreeItemExpander.js.map +1 -1
  583. package/dist/tree/TreeProvider.js.map +1 -1
  584. package/dist/tree/styles.js.map +1 -1
  585. package/dist/tree/types.d.ts +11 -6
  586. package/dist/tree/types.js +1 -26
  587. package/dist/tree/types.js.map +1 -1
  588. package/dist/tree/useTree.d.ts +5 -5
  589. package/dist/tree/useTree.js.map +1 -1
  590. package/dist/tree/useTreeExpansion.d.ts +3 -3
  591. package/dist/tree/useTreeExpansion.js.map +1 -1
  592. package/dist/tree/useTreeItems.js.map +1 -1
  593. package/dist/tree/useTreeMovement.js.map +1 -1
  594. package/dist/tree/useTreeSelection.d.ts +3 -3
  595. package/dist/tree/useTreeSelection.js.map +1 -1
  596. package/dist/tree/utils.js.map +1 -1
  597. package/dist/types.js.map +1 -1
  598. package/dist/typography/SrOnly.d.ts +2 -1
  599. package/dist/typography/SrOnly.js +2 -1
  600. package/dist/typography/SrOnly.js.map +1 -1
  601. package/dist/typography/TextContainer.d.ts +4 -2
  602. package/dist/typography/TextContainer.js +2 -2
  603. package/dist/typography/TextContainer.js.map +1 -1
  604. package/dist/typography/Typography.d.ts +10 -2
  605. package/dist/typography/Typography.js +3 -2
  606. package/dist/typography/Typography.js.map +1 -1
  607. package/dist/typography/WritingDirectionProvider.d.ts +2 -2
  608. package/dist/typography/WritingDirectionProvider.js +2 -2
  609. package/dist/typography/WritingDirectionProvider.js.map +1 -1
  610. package/dist/typography/textContainerStyles.js.map +1 -1
  611. package/dist/typography/typographyStyles.js.map +1 -1
  612. package/dist/useAsyncFunction.js.map +1 -1
  613. package/dist/useDebouncedFunction.js.map +1 -1
  614. package/dist/useDropzone.js.map +1 -1
  615. package/dist/useElementSize.js.map +1 -1
  616. package/dist/useEnsuredId.js.map +1 -1
  617. package/dist/useEnsuredRef.js.map +1 -1
  618. package/dist/useEnsuredState.js.map +1 -1
  619. package/dist/useHtmlClassName.js.map +1 -1
  620. package/dist/useIntersectionObserver.js.map +1 -1
  621. package/dist/useIsomorphicLayoutEffect.js.map +1 -1
  622. package/dist/useLocalStorage.js.map +1 -1
  623. package/dist/useMutationObserver.js.map +1 -1
  624. package/dist/useOrientation.js.map +1 -1
  625. package/dist/usePageInactive.js.map +1 -1
  626. package/dist/useResizeListener.d.ts +7 -1
  627. package/dist/useResizeListener.js.map +1 -1
  628. package/dist/useResizeObserver.d.ts +3 -3
  629. package/dist/useResizeObserver.js.map +1 -1
  630. package/dist/useThrottledFunction.js.map +1 -1
  631. package/dist/useToggle.d.ts +4 -4
  632. package/dist/useToggle.js +1 -1
  633. package/dist/useToggle.js.map +1 -1
  634. package/dist/useUnmounted.js.map +1 -1
  635. package/dist/useWindowSize.js.map +1 -1
  636. package/dist/utils/RenderRecursively.js.map +1 -1
  637. package/dist/utils/alphaNumericSort.js.map +1 -1
  638. package/dist/utils/applyRef.js.map +1 -1
  639. package/dist/utils/bem.js.map +1 -1
  640. package/dist/utils/getClientPosition.js.map +1 -1
  641. package/dist/utils/getMiddleOfRange.js.map +1 -1
  642. package/dist/utils/getPercentage.js.map +1 -1
  643. package/dist/utils/getRangeDefaultValue.js.map +1 -1
  644. package/dist/utils/getRangeSteps.js.map +1 -1
  645. package/dist/utils/identity.js.map +1 -1
  646. package/dist/utils/isElementVisible.js.map +1 -1
  647. package/dist/utils/loop.js.map +1 -1
  648. package/dist/utils/nearest.js.map +1 -1
  649. package/dist/utils/parseCssLengthUnit.js.map +1 -1
  650. package/dist/utils/randomInt.js.map +1 -1
  651. package/dist/utils/wait.js.map +1 -1
  652. package/dist/utils/withinRange.js.map +1 -1
  653. package/dist/window-splitter/WindowSplitter.d.ts +2 -2
  654. package/dist/window-splitter/WindowSplitter.js +2 -2
  655. package/dist/window-splitter/WindowSplitter.js.map +1 -1
  656. package/dist/window-splitter/useWindowSplitter.js.map +1 -1
  657. package/package.json +25 -24
  658. package/src/RootHtml.tsx +0 -2
  659. package/src/app-bar/AppBar.tsx +0 -2
  660. package/src/app-bar/AppBarTitle.tsx +8 -6
  661. package/src/autocomplete/defaults.ts +3 -3
  662. package/src/avatar/Avatar.tsx +1 -4
  663. package/src/badge/Badge.tsx +1 -3
  664. package/src/box/Box.tsx +0 -2
  665. package/src/button/ButtonUnstyled.tsx +0 -2
  666. package/src/card/Card.tsx +2 -3
  667. package/src/card/CardContent.tsx +0 -2
  668. package/src/card/CardFooter.tsx +0 -2
  669. package/src/card/CardHeader.tsx +0 -2
  670. package/src/card/CardSubtitle.tsx +9 -2
  671. package/src/card/CardTitle.tsx +0 -2
  672. package/src/card/styles.ts +2 -6
  673. package/src/chip/Chip.tsx +0 -2
  674. package/src/cssUtils.ts +1 -1
  675. package/src/dialog/DialogContainer.tsx +0 -2
  676. package/src/dialog/DialogContent.tsx +3 -3
  677. package/src/dialog/DialogFooter.tsx +2 -3
  678. package/src/dialog/DialogHeader.tsx +3 -3
  679. package/src/dialog/DialogTitle.tsx +3 -3
  680. package/src/divider/Divider.tsx +0 -2
  681. package/src/expansion-panel/ExpansionList.tsx +1 -1
  682. package/src/expansion-panel/ExpansionPanel.tsx +9 -38
  683. package/src/expansion-panel/ExpansionPanelHeader.tsx +0 -1
  684. package/src/expansion-panel/expansionPanelStyles.ts +33 -0
  685. package/src/form/Fieldset.tsx +0 -2
  686. package/src/form/FormMessage.tsx +0 -2
  687. package/src/form/FormMessageContainer.tsx +0 -1
  688. package/src/form/FormMessageCounter.tsx +0 -2
  689. package/src/form/InputToggle.tsx +1 -1
  690. package/src/form/InputToggleIcon.tsx +0 -2
  691. package/src/form/Label.tsx +0 -2
  692. package/src/form/Legend.tsx +0 -2
  693. package/src/form/NativeSelect.tsx +0 -2
  694. package/src/form/Option.tsx +1 -1
  695. package/src/form/SelectedOption.tsx +0 -2
  696. package/src/form/SliderContainer.tsx +0 -2
  697. package/src/form/SliderMark.tsx +0 -2
  698. package/src/form/SliderMarkLabel.tsx +0 -2
  699. package/src/form/SliderTrack.tsx +0 -2
  700. package/src/form/SliderValueMarks.tsx +0 -2
  701. package/src/form/Switch.tsx +0 -2
  702. package/src/form/SwitchTrack.tsx +2 -1
  703. package/src/form/TextField.tsx +0 -2
  704. package/src/form/TextFieldAddon.tsx +1 -3
  705. package/src/icon/FontIcon.tsx +19 -11
  706. package/src/icon/IconRotator.tsx +0 -2
  707. package/src/icon/MaterialIcon.tsx +22 -5
  708. package/src/icon/MaterialSymbol.tsx +0 -1
  709. package/src/icon/SVGIcon.tsx +3 -2
  710. package/src/icon/TextIconSpacing.tsx +0 -2
  711. package/src/icon/iconConfig.tsx +1 -0
  712. package/src/icon/material.ts +276 -19
  713. package/src/icon/styles.ts +1 -1
  714. package/src/interaction/RippleContainer.tsx +0 -2
  715. package/src/layout/LayoutNav.tsx +3 -2
  716. package/src/layout/useHorizontalLayoutTransition.ts +1 -1
  717. package/src/layout/useLayoutTree.ts +2 -2
  718. package/src/link/Link.tsx +2 -6
  719. package/src/link/SkipToMainContent.tsx +11 -4
  720. package/src/link/styles.ts +2 -2
  721. package/src/list/List.tsx +1 -33
  722. package/src/list/ListItem.tsx +0 -17
  723. package/src/list/ListItemAddon.tsx +0 -2
  724. package/src/list/ListItemChildren.tsx +0 -2
  725. package/src/list/ListItemText.tsx +0 -2
  726. package/src/list/ListSubheader.tsx +3 -2
  727. package/src/list/getListItemHeight.ts +2 -2
  728. package/src/list/listItemStyles.ts +21 -4
  729. package/src/list/listStyles.ts +31 -0
  730. package/src/list/types.ts +9 -3
  731. package/src/media-queries/AppSizeProvider.tsx +8 -0
  732. package/src/media-queries/useMediaQuery.ts +1 -1
  733. package/src/menu/MenuConfigurationProvider.tsx +2 -2
  734. package/src/navigation/NavGroup.tsx +0 -2
  735. package/src/navigation/NavItem.tsx +0 -2
  736. package/src/navigation/NavSubheader.tsx +0 -2
  737. package/src/overlay/Overlay.tsx +1 -0
  738. package/src/portal/Portal.tsx +5 -0
  739. package/src/portal/PortalContainerProvider.tsx +16 -7
  740. package/src/progress/CircularProgress.tsx +5 -6
  741. package/src/progress/LinearProgress.tsx +0 -2
  742. package/src/responsive-item/ResponsiveItemContainer.tsx +0 -2
  743. package/src/responsive-item/ResponsiveItemOverlay.tsx +0 -2
  744. package/src/segmented-button/SegmentedButtonContainer.tsx +0 -2
  745. package/src/sheet/Sheet.tsx +36 -33
  746. package/src/sheet/styles.ts +50 -0
  747. package/src/suspense/CircularProgressSuspense.tsx +0 -2
  748. package/src/suspense/NullSuspense.tsx +0 -2
  749. package/src/table/StickyTableSection.tsx +91 -0
  750. package/src/table/Table.tsx +2 -5
  751. package/src/table/TableBody.tsx +1 -2
  752. package/src/table/TableCell.tsx +3 -5
  753. package/src/table/TableCellContent.tsx +1 -6
  754. package/src/table/TableConfigurationProvider.tsx +1 -86
  755. package/src/table/TableFooter.tsx +19 -116
  756. package/src/table/TableHeader.tsx +20 -118
  757. package/src/table/TableRow.tsx +2 -4
  758. package/src/table/tableCellStyles.ts +1 -1
  759. package/src/table/types.ts +105 -10
  760. package/src/table/useStickyTableSection.tsx +126 -0
  761. package/src/table/useTableSectionConfig.ts +45 -0
  762. package/src/tabs/Tab.tsx +3 -0
  763. package/src/tabs/TabListScrollButton.tsx +9 -2
  764. package/src/tabs/tabListScrollButtonStyles.ts +9 -5
  765. package/src/tabs/useTabList.ts +4 -0
  766. package/src/tabs/useTabs.ts +61 -14
  767. package/src/test-utils/IntersectionObserver.ts +1 -1
  768. package/src/tooltip/Tooltip.tsx +24 -8
  769. package/src/tooltip/useTooltip.ts +52 -27
  770. package/src/tooltip/useTooltipPosition.ts +2 -4
  771. package/src/transition/SlideContainer.tsx +2 -48
  772. package/src/transition/types.ts +23 -27
  773. package/src/transition/useTransition.ts +1 -0
  774. package/src/tree/DefaultTreeItemRenderer.tsx +3 -4
  775. package/src/tree/Tree.tsx +4 -6
  776. package/src/tree/TreeItem.tsx +11 -4
  777. package/src/tree/types.ts +16 -6
  778. package/src/tree/useTree.ts +5 -7
  779. package/src/tree/useTreeExpansion.ts +3 -3
  780. package/src/tree/useTreeSelection.ts +3 -3
  781. package/src/typography/SrOnly.tsx +2 -1
  782. package/src/typography/TextContainer.tsx +4 -2
  783. package/src/typography/Typography.tsx +10 -2
  784. package/src/typography/WritingDirectionProvider.tsx +2 -2
  785. package/src/useResizeListener.ts +8 -2
  786. package/src/useResizeObserver.ts +3 -3
  787. package/src/useToggle.ts +4 -4
  788. package/src/window-splitter/WindowSplitter.tsx +2 -2
  789. package/.eslintrc.cjs +0 -26
  790. package/.stylelintrc.json +0 -14
  791. package/.swcrc +0 -17
  792. package/.turbo/turbo-build.log +0 -22
  793. package/.turbo/turbo-lint.log +0 -12
  794. package/.turbo/turbo-test.log +0 -5498
  795. package/.turbo/turbo-typecheck.log +0 -26
  796. package/CHANGELOG.md +0 -310
  797. package/coverage/clover.xml +0 -775
  798. package/coverage/coverage-final.json +0 -5
  799. package/coverage/lcov-report/autocomplete/Autocomplete.tsx.html +0 -967
  800. package/coverage/lcov-report/autocomplete/index.html +0 -116
  801. package/coverage/lcov-report/base.css +0 -224
  802. package/coverage/lcov-report/block-navigation.js +0 -87
  803. package/coverage/lcov-report/button/Button.tsx.html +0 -676
  804. package/coverage/lcov-report/button/index.html +0 -116
  805. package/coverage/lcov-report/createHorizontalPosition.ts.html +0 -1075
  806. package/coverage/lcov-report/createVerticalPosition.ts.html +0 -997
  807. package/coverage/lcov-report/favicon.png +0 -0
  808. package/coverage/lcov-report/index.html +0 -161
  809. package/coverage/lcov-report/prettify.css +0 -1
  810. package/coverage/lcov-report/prettify.js +0 -2
  811. package/coverage/lcov-report/searching/fuzzy.ts.html +0 -607
  812. package/coverage/lcov-report/searching/index.html +0 -116
  813. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  814. package/coverage/lcov-report/sorter.js +0 -196
  815. package/coverage/lcov-report/typography/SrOnly.tsx.html +0 -325
  816. package/coverage/lcov-report/typography/index.html +0 -116
  817. package/coverage/lcov-report/utils.ts.html +0 -1225
  818. package/coverage/lcov.info +0 -836
  819. package/jest.config.ts +0 -68
  820. package/jest.setup.ts +0 -3
  821. package/scripts/copySassFiles.ts +0 -70
  822. package/scripts/tsconfig.json +0 -18
  823. package/src/__tests__/NoSsr.node.tsx +0 -26
  824. package/src/__tests__/NoSsr.tsx +0 -89
  825. package/src/__tests__/RootHtml.node.tsx +0 -46
  826. package/src/__tests__/__snapshots__/RootHtml.node.tsx.snap +0 -19
  827. package/src/__tests__/useAsyncFunction.tsx +0 -124
  828. package/src/__tests__/useDebouncedFunction.tsx +0 -108
  829. package/src/__tests__/useDropzone.tsx +0 -131
  830. package/src/__tests__/useElementSize.tsx +0 -181
  831. package/src/__tests__/useEnsuredId.tsx +0 -25
  832. package/src/__tests__/useEnsuredState.tsx +0 -74
  833. package/src/__tests__/useHtmlClassName.tsx +0 -54
  834. package/src/__tests__/useLocalStorage.tsx +0 -377
  835. package/src/__tests__/useOrientation.node.tsx +0 -20
  836. package/src/__tests__/useOrientation.tsx +0 -63
  837. package/src/__tests__/useResizeObserver.tsx +0 -258
  838. package/src/__tests__/useThrottledFunction.tsx +0 -226
  839. package/src/__tests__/useToggle.tsx +0 -78
  840. package/src/__tests__/useWindowSize.node.tsx +0 -56
  841. package/src/__tests__/useWindowSize.tsx +0 -155
  842. package/src/_box-shadows.scss +0 -219
  843. package/src/_core.scss +0 -432
  844. package/src/_utils.scss +0 -348
  845. package/src/app-bar/__tests__/AppBar.tsx +0 -121
  846. package/src/app-bar/__tests__/AppBarTitle.tsx +0 -39
  847. package/src/app-bar/__tests__/__snapshots__/AppBar.tsx.snap +0 -186
  848. package/src/app-bar/__tests__/__snapshots__/AppBarTitle.tsx.snap +0 -47
  849. package/src/app-bar/_app-bar.scss +0 -248
  850. package/src/autocomplete/__tests__/Autocomplete.tsx +0 -458
  851. package/src/autocomplete/__tests__/__snapshots__/Autocomplete.tsx.snap +0 -144
  852. package/src/autocomplete/_autocomplete.scss +0 -75
  853. package/src/avatar/__tests__/Avatar.tsx +0 -75
  854. package/src/avatar/__tests__/__snapshots__/Avatar.tsx.snap +0 -73
  855. package/src/avatar/_avatar.scss +0 -157
  856. package/src/badge/__tests__/Badge.tsx +0 -42
  857. package/src/badge/__tests__/__snapshots__/Badge.tsx.snap +0 -54
  858. package/src/badge/_badge.scss +0 -145
  859. package/src/box/__tests__/Box.tsx +0 -158
  860. package/src/box/__tests__/__snapshots__/Box.tsx.snap +0 -544
  861. package/src/box/_box.scss +0 -168
  862. package/src/button/__tests__/AsyncButton.tsx +0 -211
  863. package/src/button/__tests__/Button.tsx +0 -198
  864. package/src/button/__tests__/ButtonUnstyled.tsx +0 -37
  865. package/src/button/__tests__/TooltippedButton.tsx +0 -60
  866. package/src/button/__tests__/__snapshots__/AsyncButton.tsx.snap +0 -418
  867. package/src/button/__tests__/__snapshots__/Button.tsx.snap +0 -573
  868. package/src/button/__tests__/__snapshots__/ButtonUnstyled.tsx.snap +0 -22
  869. package/src/button/__tests__/__snapshots__/TooltippedButton.tsx.snap +0 -26
  870. package/src/button/__tests__/__snapshots__/buttonStyles.ts.snap +0 -11
  871. package/src/button/__tests__/buttonStyles.ts +0 -15
  872. package/src/button/_button.scss +0 -330
  873. package/src/card/__tests__/Card.tsx +0 -37
  874. package/src/card/__tests__/CardContent.tsx +0 -40
  875. package/src/card/__tests__/CardFooter.tsx +0 -34
  876. package/src/card/__tests__/CardHeader.tsx +0 -66
  877. package/src/card/__tests__/CardSubtitle.tsx +0 -30
  878. package/src/card/__tests__/CardTitle.tsx +0 -30
  879. package/src/card/__tests__/ClickableCard.tsx +0 -66
  880. package/src/card/__tests__/__snapshots__/Card.tsx.snap +0 -40
  881. package/src/card/__tests__/__snapshots__/CardContent.tsx.snap +0 -50
  882. package/src/card/__tests__/__snapshots__/CardFooter.tsx.snap +0 -30
  883. package/src/card/__tests__/__snapshots__/CardHeader.tsx.snap +0 -74
  884. package/src/card/__tests__/__snapshots__/CardSubtitle.tsx.snap +0 -18
  885. package/src/card/__tests__/__snapshots__/CardTitle.tsx.snap +0 -18
  886. package/src/card/__tests__/__snapshots__/ClickableCard.tsx.snap +0 -20
  887. package/src/card/__tests__/__snapshots__/styles.ts.snap +0 -13
  888. package/src/card/__tests__/styles.ts +0 -45
  889. package/src/card/_card.scss +0 -189
  890. package/src/chip/__tests__/Chip.tsx +0 -327
  891. package/src/chip/__tests__/__snapshots__/Chip.tsx.snap +0 -597
  892. package/src/chip/__tests__/__snapshots__/styles.ts.snap +0 -5
  893. package/src/chip/__tests__/styles.ts +0 -14
  894. package/src/chip/_chip.scss +0 -324
  895. package/src/dialog/__tests__/Dialog.tsx +0 -316
  896. package/src/dialog/__tests__/DialogContent.tsx +0 -53
  897. package/src/dialog/__tests__/DialogFooter.tsx +0 -70
  898. package/src/dialog/__tests__/DialogHeader.tsx +0 -37
  899. package/src/dialog/__tests__/DialogTitle.tsx +0 -41
  900. package/src/dialog/__tests__/__snapshots__/Dialog.tsx.snap +0 -84
  901. package/src/dialog/__tests__/__snapshots__/DialogContent.tsx.snap +0 -36
  902. package/src/dialog/__tests__/__snapshots__/DialogFooter.tsx.snap +0 -186
  903. package/src/dialog/__tests__/__snapshots__/DialogHeader.tsx.snap +0 -18
  904. package/src/dialog/__tests__/__snapshots__/DialogTitle.tsx.snap +0 -26
  905. package/src/dialog/_dialog.scss +0 -273
  906. package/src/divider/__tests__/Divider.tsx +0 -36
  907. package/src/divider/__tests__/__snapshots__/Divider.tsx.snap +0 -26
  908. package/src/divider/_divider.scss +0 -124
  909. package/src/draggable/__tests__/__snapshots__/useDraggable.tsx.snap +0 -49
  910. package/src/draggable/__tests__/useDraggable.tsx +0 -540
  911. package/src/draggable/_draggable.scss +0 -29
  912. package/src/expansion-panel/__tests__/ExpansionPanel.tsx +0 -290
  913. package/src/expansion-panel/__tests__/__snapshots__/ExpansionPanel.tsx.snap +0 -197
  914. package/src/expansion-panel/_expansion-panel.scss +0 -107
  915. package/src/focus/__tests__/useFocusContainer.tsx +0 -280
  916. package/src/form/__tests__/Checkbox.tsx +0 -42
  917. package/src/form/__tests__/Fieldset.tsx +0 -44
  918. package/src/form/__tests__/FileInput.tsx +0 -120
  919. package/src/form/__tests__/Label.tsx +0 -69
  920. package/src/form/__tests__/Legend.tsx +0 -34
  921. package/src/form/__tests__/MenuItemCheckbox.tsx +0 -53
  922. package/src/form/__tests__/MenuItemRadio.tsx +0 -53
  923. package/src/form/__tests__/Radio.tsx +0 -35
  924. package/src/form/__tests__/Select.tsx +0 -439
  925. package/src/form/__tests__/Switch.tsx +0 -152
  926. package/src/form/__tests__/TextArea.tsx +0 -433
  927. package/src/form/__tests__/TextField.tsx +0 -195
  928. package/src/form/__tests__/__snapshots__/Checkbox.tsx.snap +0 -99
  929. package/src/form/__tests__/__snapshots__/Fieldset.tsx.snap +0 -58
  930. package/src/form/__tests__/__snapshots__/FileInput.tsx.snap +0 -612
  931. package/src/form/__tests__/__snapshots__/Label.tsx.snap +0 -140
  932. package/src/form/__tests__/__snapshots__/Legend.tsx.snap +0 -30
  933. package/src/form/__tests__/__snapshots__/MenuItemCheckbox.tsx.snap +0 -96
  934. package/src/form/__tests__/__snapshots__/MenuItemRadio.tsx.snap +0 -96
  935. package/src/form/__tests__/__snapshots__/Radio.tsx.snap +0 -99
  936. package/src/form/__tests__/__snapshots__/Select.tsx.snap +0 -492
  937. package/src/form/__tests__/__snapshots__/Switch.tsx.snap +0 -428
  938. package/src/form/__tests__/__snapshots__/TextArea.tsx.snap +0 -548
  939. package/src/form/__tests__/__snapshots__/TextField.tsx.snap +0 -279
  940. package/src/form/__tests__/__snapshots__/useCheckboxGroup.tsx.snap +0 -481
  941. package/src/form/__tests__/__snapshots__/useRadioGroup.tsx.snap +0 -704
  942. package/src/form/__tests__/useCheckboxGroup.tsx +0 -292
  943. package/src/form/__tests__/useFileUpload.tsx +0 -289
  944. package/src/form/__tests__/useFormReset.tsx +0 -194
  945. package/src/form/__tests__/useRadioGroup.tsx +0 -227
  946. package/src/form/__tests__/utils.ts +0 -247
  947. package/src/form/_form.scss +0 -2190
  948. package/src/icon/__tests__/FontIcon.tsx +0 -45
  949. package/src/icon/__tests__/IconRotator.tsx +0 -120
  950. package/src/icon/__tests__/MaterialIcon.tsx +0 -79
  951. package/src/icon/__tests__/MaterialSymbol.tsx +0 -100
  952. package/src/icon/__tests__/SVGIcon.tsx +0 -40
  953. package/src/icon/__tests__/TextIconSpacing.tsx +0 -108
  954. package/src/icon/__tests__/__snapshots__/FontIcon.tsx.snap +0 -35
  955. package/src/icon/__tests__/__snapshots__/IconRotator.tsx.snap +0 -165
  956. package/src/icon/__tests__/__snapshots__/MaterialIcon.tsx.snap +0 -82
  957. package/src/icon/__tests__/__snapshots__/MaterialSymbol.tsx.snap +0 -42
  958. package/src/icon/__tests__/__snapshots__/SVGIcon.tsx.snap +0 -47
  959. package/src/icon/__tests__/__snapshots__/TextIconSpacing.tsx.snap +0 -101
  960. package/src/icon/__tests__/__snapshots__/styles.ts.snap +0 -29
  961. package/src/icon/__tests__/styles.ts +0 -28
  962. package/src/icon/_icon.scss +0 -213
  963. package/src/interaction/__tests__/UserInteractionModeProvider.tsx +0 -121
  964. package/src/interaction/__tests__/__snapshots__/useHigherContrastChildren.tsx.snap +0 -79
  965. package/src/interaction/__tests__/useHigherContrastChildren.tsx +0 -97
  966. package/src/interaction/_interaction.scss +0 -436
  967. package/src/layout/__tests__/LayoutAppBar.tsx +0 -117
  968. package/src/layout/__tests__/LayoutNav.tsx +0 -78
  969. package/src/layout/__tests__/LayoutWindowSplitter.tsx +0 -63
  970. package/src/layout/__tests__/Main.tsx +0 -51
  971. package/src/layout/__tests__/__snapshots__/LayoutAppBar.tsx.snap +0 -78
  972. package/src/layout/__tests__/__snapshots__/LayoutNav.tsx.snap +0 -31
  973. package/src/layout/__tests__/__snapshots__/LayoutWindowSplitter.tsx.snap +0 -60
  974. package/src/layout/__tests__/__snapshots__/Main.tsx.snap +0 -32
  975. package/src/layout/__tests__/__snapshots__/useExpandableLayout.tsx.snap +0 -116
  976. package/src/layout/__tests__/__snapshots__/useLayoutTree.tsx.snap +0 -676
  977. package/src/layout/__tests__/__snapshots__/useResizableLayout.tsx.snap +0 -95
  978. package/src/layout/__tests__/__snapshots__/useTemporaryLayout.tsx.snap +0 -141
  979. package/src/layout/__tests__/useExpandableLayout.tsx +0 -279
  980. package/src/layout/__tests__/useLayoutTree.tsx +0 -212
  981. package/src/layout/__tests__/useResizableLayout.tsx +0 -170
  982. package/src/layout/__tests__/useTemporaryLayout.tsx +0 -109
  983. package/src/layout/_layout.scss +0 -163
  984. package/src/link/__tests__/Link.tsx +0 -31
  985. package/src/link/__tests__/SkipToMainContent.tsx +0 -125
  986. package/src/link/__tests__/__snapshots__/Link.tsx.snap +0 -20
  987. package/src/link/__tests__/__snapshots__/SkipToMainContent.tsx.snap +0 -22
  988. package/src/link/_link.scss +0 -149
  989. package/src/list/__tests__/List.tsx +0 -58
  990. package/src/list/__tests__/ListItem.tsx +0 -280
  991. package/src/list/__tests__/ListItemLink.tsx +0 -89
  992. package/src/list/__tests__/ListSubheader.tsx +0 -81
  993. package/src/list/__tests__/__snapshots__/List.tsx.snap +0 -41
  994. package/src/list/__tests__/__snapshots__/ListItem.tsx.snap +0 -414
  995. package/src/list/__tests__/__snapshots__/ListItemLink.tsx.snap +0 -73
  996. package/src/list/__tests__/__snapshots__/ListSubheader.tsx.snap +0 -99
  997. package/src/list/__tests__/getListItemHeight.ts +0 -176
  998. package/src/list/_list.scss +0 -322
  999. package/src/media-queries/__tests__/AppSizeProvider.node.tsx +0 -37
  1000. package/src/media-queries/__tests__/AppSizeProvider.tsx +0 -119
  1001. package/src/media-queries/__tests__/useMediaQuery.node.tsx +0 -20
  1002. package/src/media-queries/__tests__/useMediaQuery.tsx +0 -59
  1003. package/src/media-queries/_media-queries.scss +0 -63
  1004. package/src/menu/__tests__/DropdownMenu.tsx +0 -627
  1005. package/src/menu/__tests__/MenuBar.tsx +0 -354
  1006. package/src/menu/__tests__/MenuItemCircularProgress.tsx +0 -39
  1007. package/src/menu/__tests__/MenuVisibilityProvider.tsx +0 -34
  1008. package/src/menu/__tests__/__snapshots__/DropdownMenu.tsx.snap +0 -292
  1009. package/src/menu/__tests__/__snapshots__/MenuBar.tsx.snap +0 -87
  1010. package/src/menu/__tests__/__snapshots__/MenuItemCircularProgress.tsx.snap +0 -68
  1011. package/src/menu/__tests__/__snapshots__/useContextMenu.tsx.snap +0 -54
  1012. package/src/menu/__tests__/useContextMenu.tsx +0 -41
  1013. package/src/menu/__tests__/utils.ts +0 -121
  1014. package/src/menu/_menu.scss +0 -116
  1015. package/src/movement/__tests__/findMatchIndex.ts +0 -244
  1016. package/src/movement/__tests__/utils.ts +0 -710
  1017. package/src/navigation/__tests__/Navigation.tsx +0 -97
  1018. package/src/navigation/__tests__/__snapshots__/Navigation.tsx.snap +0 -165
  1019. package/src/navigation/_navigation.scss +0 -99
  1020. package/src/overlay/__tests__/Overlay.tsx +0 -198
  1021. package/src/overlay/__tests__/__snapshots__/Overlay.tsx.snap +0 -77
  1022. package/src/overlay/_overlay.scss +0 -74
  1023. package/src/portal/__tests__/PortalContainerProvider.node.tsx +0 -26
  1024. package/src/portal/__tests__/PortalContainerProvider.tsx +0 -84
  1025. package/src/positioning/__tests__/__snapshots__/useFixedPositioning.tsx.snap +0 -87
  1026. package/src/positioning/__tests__/createHorizontalPosition.ts +0 -777
  1027. package/src/positioning/__tests__/createVerticalPosition.ts +0 -464
  1028. package/src/positioning/__tests__/useFixedPositioning.tsx +0 -205
  1029. package/src/positioning/__tests__/utils.ts +0 -1311
  1030. package/src/progress/__tests__/CircularProgress.tsx +0 -153
  1031. package/src/progress/__tests__/LinearProgress.tsx +0 -131
  1032. package/src/progress/__tests__/__snapshots__/CircularProgress.tsx.snap +0 -499
  1033. package/src/progress/__tests__/__snapshots__/LinearProgress.tsx.snap +0 -321
  1034. package/src/progress/__tests__/getProgressA11y.ts +0 -16
  1035. package/src/progress/_progress.scss +0 -577
  1036. package/src/responsive-item/__tests__/ResponsiveItemContainer.tsx +0 -56
  1037. package/src/responsive-item/__tests__/ResponsiveItemOverlay.tsx +0 -66
  1038. package/src/responsive-item/__tests__/__snapshots__/ResponsiveItemContainer.tsx.snap +0 -85
  1039. package/src/responsive-item/__tests__/__snapshots__/ResponsiveItemOverlay.tsx.snap +0 -151
  1040. package/src/responsive-item/__tests__/__snapshots__/styles.ts.snap +0 -9
  1041. package/src/responsive-item/__tests__/styles.ts +0 -32
  1042. package/src/responsive-item/_responsive-item.scss +0 -199
  1043. package/src/searching/__tests__/caseInsensitive.ts +0 -165
  1044. package/src/searching/__tests__/fuzzy.ts +0 -169
  1045. package/src/searching/__tests__/toSearchQuery.ts +0 -21
  1046. package/src/searching/__tests__/useFuzzyMatch.tsx +0 -200
  1047. package/src/segmented-button/__tests__/SegmentedButton.tsx +0 -61
  1048. package/src/segmented-button/__tests__/SegmentedButtonContainer.tsx +0 -38
  1049. package/src/segmented-button/__tests__/__snapshots__/SegmentedButton.tsx.snap +0 -116
  1050. package/src/segmented-button/__tests__/__snapshots__/SegmentedButtonContainer.tsx.snap +0 -22
  1051. package/src/segmented-button/_segmented-button.scss +0 -208
  1052. package/src/sheet/_sheet.scss +0 -189
  1053. package/src/snackbar/__tests__/Snackbar.tsx +0 -85
  1054. package/src/snackbar/__tests__/Toast.tsx +0 -105
  1055. package/src/snackbar/__tests__/ToastActionButton.tsx +0 -112
  1056. package/src/snackbar/__tests__/ToastCloseButton.tsx +0 -140
  1057. package/src/snackbar/__tests__/ToastContent.tsx +0 -88
  1058. package/src/snackbar/__tests__/ToastManagerProvider.tsx +0 -852
  1059. package/src/snackbar/__tests__/__snapshots__/Snackbar.tsx.snap +0 -176
  1060. package/src/snackbar/__tests__/__snapshots__/Toast.tsx.snap +0 -52
  1061. package/src/snackbar/__tests__/__snapshots__/ToastActionButton.tsx.snap +0 -36
  1062. package/src/snackbar/__tests__/__snapshots__/ToastCloseButton.tsx.snap +0 -104
  1063. package/src/snackbar/__tests__/__snapshots__/ToastContent.tsx.snap +0 -26
  1064. package/src/snackbar/__tests__/__snapshots__/ToastManagerProvider.tsx.snap +0 -290
  1065. package/src/snackbar/_snackbar.scss +0 -266
  1066. package/src/suspense/__tests__/CircularProgressSuspense.tsx +0 -90
  1067. package/src/suspense/__tests__/NullSuspense.tsx +0 -46
  1068. package/src/suspense/__tests__/__snapshots__/CircularProgressSuspense.tsx.snap +0 -24
  1069. package/src/table/__tests__/Table.tsx +0 -314
  1070. package/src/table/__tests__/TableBody.tsx +0 -52
  1071. package/src/table/__tests__/TableCheckbox.tsx +0 -89
  1072. package/src/table/__tests__/TableContainer.tsx +0 -31
  1073. package/src/table/__tests__/TableRadio.tsx +0 -112
  1074. package/src/table/__tests__/TableRow.tsx +0 -63
  1075. package/src/table/__tests__/__snapshots__/Table.tsx.snap +0 -2426
  1076. package/src/table/__tests__/__snapshots__/TableBody.tsx.snap +0 -54
  1077. package/src/table/__tests__/__snapshots__/TableCheckbox.tsx.snap +0 -142
  1078. package/src/table/__tests__/__snapshots__/TableContainer.tsx.snap +0 -16
  1079. package/src/table/__tests__/__snapshots__/TableRadio.tsx.snap +0 -138
  1080. package/src/table/__tests__/__snapshots__/TableRow.tsx.snap +0 -56
  1081. package/src/table/__tests__/__snapshots__/tableContainerStyles.ts.snap +0 -3
  1082. package/src/table/__tests__/__snapshots__/tableRowStyles.ts.snap +0 -3
  1083. package/src/table/__tests__/__snapshots__/tableStyles.ts.snap +0 -3
  1084. package/src/table/__tests__/tableContainerStyles.ts +0 -8
  1085. package/src/table/__tests__/tableRowStyles.ts +0 -8
  1086. package/src/table/__tests__/tableStyles.ts +0 -8
  1087. package/src/table/_table.scss +0 -447
  1088. package/src/tabs/__tests__/Tab.tsx +0 -51
  1089. package/src/tabs/__tests__/TabList.tsx +0 -640
  1090. package/src/tabs/__tests__/__snapshots__/Tab.tsx.snap +0 -85
  1091. package/src/tabs/__tests__/__snapshots__/TabList.tsx.snap +0 -51
  1092. package/src/tabs/__tests__/useTabs.tsx +0 -212
  1093. package/src/tabs/_tabs.scss +0 -273
  1094. package/src/test-utils/__tests__/ResizeObserver.ts +0 -171
  1095. package/src/theme/__tests__/LocalStorageColorSchemeProvider.tsx +0 -162
  1096. package/src/theme/__tests__/ThemeProvider.tsx +0 -90
  1097. package/src/theme/__tests__/__snapshots__/useCSSVariables.tsx.snap +0 -27
  1098. package/src/theme/__tests__/__snapshots__/useColorSchemeMetaTag.tsx.snap +0 -15
  1099. package/src/theme/__tests__/useCSSVariables.tsx +0 -177
  1100. package/src/theme/__tests__/useColorSchemeMetaTag.tsx +0 -36
  1101. package/src/theme/__tests__/utils.ts +0 -67
  1102. package/src/theme/_a11y.scss +0 -114
  1103. package/src/theme/_colors.scss +0 -1057
  1104. package/src/theme/_theme.scss +0 -519
  1105. package/src/tooltip/__tests__/Tooltip.tsx +0 -501
  1106. package/src/tooltip/__tests__/TooltipHoverModeProvider.tsx +0 -94
  1107. package/src/tooltip/__tests__/__snapshots__/Tooltip.tsx.snap +0 -34
  1108. package/src/tooltip/__tests__/utils.ts +0 -94
  1109. package/src/tooltip/_tooltip.scss +0 -155
  1110. package/src/transition/__tests__/CSSTransition.tsx +0 -182
  1111. package/src/transition/__tests__/Collapse.tsx +0 -209
  1112. package/src/transition/__tests__/CrossFade.tsx +0 -227
  1113. package/src/transition/__tests__/ScaleTransition.tsx +0 -204
  1114. package/src/transition/__tests__/SkeletonPlaceholder.tsx +0 -72
  1115. package/src/transition/__tests__/__snapshots__/CSSTransition.tsx.snap +0 -145
  1116. package/src/transition/__tests__/__snapshots__/Collapse.tsx.snap +0 -224
  1117. package/src/transition/__tests__/__snapshots__/CrossFade.tsx.snap +0 -240
  1118. package/src/transition/__tests__/__snapshots__/ScaleTransition.tsx.snap +0 -239
  1119. package/src/transition/__tests__/__snapshots__/SkeletonPlaceholder.tsx.snap +0 -24
  1120. package/src/transition/__tests__/__snapshots__/useCollapseTransition.tsx.snap +0 -361
  1121. package/src/transition/__tests__/__snapshots__/useCrossFadeTransition.tsx.snap +0 -258
  1122. package/src/transition/__tests__/__snapshots__/useMaxWidthTransition.tsx.snap +0 -68
  1123. package/src/transition/__tests__/__snapshots__/useScaleTransition.tsx.snap +0 -209
  1124. package/src/transition/__tests__/useCSSTransition.tsx +0 -190
  1125. package/src/transition/__tests__/useCollapseTransition.tsx +0 -316
  1126. package/src/transition/__tests__/useCrossFadeTransition.tsx +0 -229
  1127. package/src/transition/__tests__/useMaxWidthTransition.tsx +0 -123
  1128. package/src/transition/__tests__/useScaleTransition.tsx +0 -212
  1129. package/src/transition/__tests__/useTransition.tsx +0 -569
  1130. package/src/transition/__tests__/utils.ts +0 -620
  1131. package/src/transition/_transition.scss +0 -365
  1132. package/src/tree/__tests__/Tree.tsx +0 -735
  1133. package/src/tree/__tests__/TreeGroup.tsx +0 -76
  1134. package/src/tree/__tests__/TreeItemExpander.tsx +0 -74
  1135. package/src/tree/__tests__/__snapshots__/Tree.tsx.snap +0 -3618
  1136. package/src/tree/__tests__/__snapshots__/TreeItemExpander.tsx.snap +0 -11
  1137. package/src/tree/__tests__/utils.ts +0 -98
  1138. package/src/tree/_tree.scss +0 -176
  1139. package/src/typography/__tests__/SrOnly.tsx +0 -43
  1140. package/src/typography/__tests__/TextContainer.tsx +0 -45
  1141. package/src/typography/__tests__/Typography.tsx +0 -87
  1142. package/src/typography/__tests__/WritingDirectionProvider.node.tsx +0 -27
  1143. package/src/typography/__tests__/WritingDirectionProvider.tsx +0 -119
  1144. package/src/typography/__tests__/__snapshots__/SrOnly.tsx.snap +0 -56
  1145. package/src/typography/__tests__/__snapshots__/TextContainer.tsx.snap +0 -29
  1146. package/src/typography/__tests__/__snapshots__/Typography.tsx.snap +0 -112
  1147. package/src/typography/_typography.scss +0 -399
  1148. package/src/utils/__tests__/RenderRecursively.tsx +0 -87
  1149. package/src/utils/__tests__/__snapshots__/RenderRecursively.tsx.snap +0 -80
  1150. package/src/utils/__tests__/applyRef.ts +0 -30
  1151. package/src/utils/__tests__/bem.ts +0 -54
  1152. package/src/utils/__tests__/getMiddleOfRange.ts +0 -12
  1153. package/src/utils/__tests__/getPercentage.ts +0 -104
  1154. package/src/utils/__tests__/getRangeDefaultValue.ts +0 -47
  1155. package/src/utils/__tests__/getRangeSteps.ts +0 -14
  1156. package/src/utils/__tests__/loop.ts +0 -50
  1157. package/src/utils/__tests__/nearest.ts +0 -83
  1158. package/src/utils/__tests__/parseCssLengthUnit.node.ts +0 -28
  1159. package/src/utils/__tests__/parseCssLengthUnit.ts +0 -47
  1160. package/src/utils/__tests__/wait.ts +0 -12
  1161. package/src/utils/__tests__/withinRange.ts +0 -24
  1162. package/src/window-splitter/_window-splitter.scss +0 -143
  1163. package/tsconfig.json +0 -19
  1164. package/tsconfig.types.json +0 -12
  1165. package/tsdoc.json +0 -14
@@ -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"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;","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}\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"}
@@ -37,11 +37,13 @@ export interface TabListHookReturnValue {
37
37
  ref: RefObject<HTMLDivElement>;
38
38
  type: "back";
39
39
  vertical: boolean;
40
+ disableTransition?: boolean;
40
41
  };
41
42
  forwardProps: {
42
43
  ref: RefObject<HTMLDivElement>;
43
44
  type: "forward";
44
45
  vertical: boolean;
46
+ disableTransition?: boolean;
45
47
  };
46
48
  }
47
49
  /**
@@ -117,12 +117,14 @@ const noop = ()=>{
117
117
  backwardProps: {
118
118
  ref: backwardRef,
119
119
  type: "back",
120
- vertical
120
+ vertical,
121
+ disableTransition
121
122
  },
122
123
  forwardProps: {
123
124
  ref: forwardRef,
124
125
  type: "forward",
125
- vertical
126
+ vertical,
127
+ disableTransition
126
128
  },
127
129
  movementContext
128
130
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tabs/useTabList.ts"],"sourcesContent":["\"use client\";\nimport type {\n CSSProperties,\n FocusEventHandler,\n KeyboardEventHandler,\n MouseEventHandler,\n Ref,\n RefObject,\n} from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type {\n KeyboardMovementContext,\n KeyboardMovementProps,\n} from \"../movement/types.js\";\nimport { useKeyboardMovementProvider } from \"../movement/useKeyboardMovementProvider.js\";\nimport { useDir } from \"../typography/WritingDirectionProvider.js\";\nimport { useEnsuredRef } from \"../useEnsuredRef.js\";\nimport { useResizeObserver } from \"../useResizeObserver.js\";\nimport { getTabRoleOnly, scrollTabIntoView } from \"./utils.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-tab-size\"?: string;\n \"--rmd-tab-offset\"?: string | number;\n \"--rmd-tab-indicator-background\"?: string;\n }\n}\n\nconst TAB_SIZE_VAR = \"--rmd-tab-size\";\nconst TAB_OFFSET_VAR = \"--rmd-tab-offset\";\n\nconst noop = (): void => {\n // do nothing\n};\n\nexport type TabWidthVar = typeof TAB_SIZE_VAR;\nexport type TabOffsetVar = typeof TAB_OFFSET_VAR;\n\nexport type IndicatorCSSProperties = CSSProperties &\n Record<TabWidthVar | TabOffsetVar, string>;\n\nexport interface TabListHookOptions {\n ref: Ref<HTMLDivElement> | undefined;\n style: CSSProperties | undefined;\n activeIndex: number;\n setActiveIndex(nextActiveIndex: number): void;\n scrollButtons: boolean;\n activationMode: \"manual\" | \"automatic\";\n vertical: boolean;\n onClick: MouseEventHandler<HTMLDivElement> | undefined;\n onFocus: FocusEventHandler<HTMLDivElement> | undefined;\n onKeyDown: KeyboardEventHandler<HTMLDivElement> | undefined;\n disableTransition: boolean;\n}\n\nexport interface TabListHookReturnValue {\n elementProps: KeyboardMovementProps<HTMLDivElement> & {\n \"aria-orientation\": \"horizontal\" | \"vertical\";\n style: CSSProperties;\n ref: Ref<HTMLDivElement>;\n onClick: MouseEventHandler<HTMLDivElement>;\n };\n movementContext: KeyboardMovementContext;\n backwardProps: {\n ref: RefObject<HTMLDivElement>;\n type: \"back\";\n vertical: boolean;\n };\n forwardProps: {\n ref: RefObject<HTMLDivElement>;\n type: \"forward\";\n vertical: boolean;\n };\n}\n\n/**\n * @internal\n */\nexport function useTabList(\n options: TabListHookOptions\n): TabListHookReturnValue {\n const {\n ref: propRef,\n style,\n activeIndex,\n scrollButtons,\n onClick = noop,\n onFocus,\n onKeyDown,\n activationMode,\n vertical,\n setActiveIndex,\n disableTransition,\n } = options;\n\n const isRTL = useDir().dir === \"rtl\";\n\n const [indicatorStyles, setIndicatorStyles] =\n useState<IndicatorCSSProperties>(() => {\n const tabWidth = `${100 / 3}%`;\n return {\n [TAB_SIZE_VAR]: tabWidth,\n [TAB_OFFSET_VAR]: \"0px\",\n };\n });\n\n const [nodeRef, ref] = useEnsuredRef(propRef);\n const tabListRef = useResizeObserver({\n ref,\n disabled: disableTransition,\n onUpdate: useCallback(\n (entry) => {\n // this is kind of hacky -- the styles should update when switching between\n // RTL, but the RTL state isn't required for any styles. Just reference it\n // so that the hooks eslint rule doesn't show a warning...\n isRTL;\n\n const activeTab = getTabRoleOnly(entry.target)[activeIndex];\n if (!activeTab) {\n return;\n }\n\n const size = vertical ? activeTab.offsetHeight : activeTab.offsetWidth;\n const offset = vertical ? activeTab.offsetTop : activeTab.offsetLeft;\n const cssVars: IndicatorCSSProperties = {\n [TAB_SIZE_VAR]: `${size}px`,\n [TAB_OFFSET_VAR]: `${offset}px`,\n };\n\n setIndicatorStyles((prevStyles) => {\n if (\n prevStyles &&\n prevStyles[TAB_SIZE_VAR] === cssVars[TAB_SIZE_VAR] &&\n prevStyles[TAB_OFFSET_VAR] === cssVars[TAB_OFFSET_VAR]\n ) {\n return prevStyles;\n }\n\n return cssVars;\n });\n },\n [activeIndex, isRTL, vertical]\n ),\n });\n const forwardRef = useRef<HTMLDivElement>(null);\n const backwardRef = useRef<HTMLDivElement>(null);\n const { movementProps, movementContext } = useKeyboardMovementProvider({\n onClick(event) {\n onClick(event);\n if (event.isPropagationStopped() || !(event.target instanceof Element)) {\n return;\n }\n\n const clickedTab = event.target.closest(\"[role='tab']\");\n const tabs = getTabRoleOnly(event.currentTarget);\n const i = tabs.findIndex((tab) => tab === clickedTab);\n if (i !== -1) {\n setActiveIndex(i);\n }\n },\n onFocus,\n onKeyDown,\n onFocusChange(event) {\n const { index } = event;\n if (activationMode === \"automatic\") {\n setActiveIndex(index);\n } else if (scrollButtons) {\n scrollTabIntoView({\n activeIndex: index,\n backward: backwardRef.current,\n container: nodeRef.current,\n forward: forwardRef.current,\n vertical,\n });\n }\n },\n loopable: true,\n searchable: true,\n horizontal: !vertical,\n includeDisabled: true,\n tabIndexBehavior: \"roving\",\n getFocusableElements: getTabRoleOnly,\n });\n\n useEffect(() => {\n scrollTabIntoView({\n activeIndex,\n backward: backwardRef.current,\n container: nodeRef.current,\n forward: forwardRef.current,\n vertical,\n });\n }, [activeIndex, nodeRef, vertical]);\n\n return {\n elementProps: {\n \"aria-orientation\": vertical ? \"vertical\" : \"horizontal\",\n ref: tabListRef,\n style: {\n ...style,\n ...(disableTransition ? undefined : indicatorStyles),\n },\n ...movementProps,\n },\n backwardProps: {\n ref: backwardRef,\n type: \"back\",\n vertical,\n },\n forwardProps: {\n ref: forwardRef,\n type: \"forward\",\n vertical,\n },\n movementContext,\n };\n}\n"],"names":["useCallback","useEffect","useRef","useState","useKeyboardMovementProvider","useDir","useEnsuredRef","useResizeObserver","getTabRoleOnly","scrollTabIntoView","TAB_SIZE_VAR","TAB_OFFSET_VAR","noop","useTabList","options","ref","propRef","style","activeIndex","scrollButtons","onClick","onFocus","onKeyDown","activationMode","vertical","setActiveIndex","disableTransition","isRTL","dir","indicatorStyles","setIndicatorStyles","tabWidth","nodeRef","tabListRef","disabled","onUpdate","entry","activeTab","target","size","offsetHeight","offsetWidth","offset","offsetTop","offsetLeft","cssVars","prevStyles","forwardRef","backwardRef","movementProps","movementContext","event","isPropagationStopped","Element","clickedTab","closest","tabs","currentTarget","i","findIndex","tab","onFocusChange","index","backward","current","container","forward","loopable","searchable","horizontal","includeDisabled","tabIndexBehavior","getFocusableElements","elementProps","undefined","backwardProps","type","forwardProps"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
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":"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"}
@@ -1,6 +1,6 @@
1
- import type { Dispatch, Ref } from "react";
2
- import type { SlideDirection } from "../transition/SlideContainer.js";
3
- import type { UseStateInitializer, UseStateSetter } from "../types.js";
1
+ import { type Dispatch, type Ref } from "react";
2
+ import { type SlideDirection } from "../transition/SlideContainer.js";
3
+ import { type UseStateInitializer, type UseStateSetter } from "../types.js";
4
4
  /**
5
5
  * @since 6.0.0
6
6
  */
@@ -12,14 +12,6 @@ export interface TabsHookOptions<TabValue extends string | number = number> {
12
12
  * @defaultValue `"tab-" + useId()`
13
13
  */
14
14
  baseId?: string;
15
- /**
16
- * Set this to `true` if changing active tabs should no longer attempt to
17
- * scroll to the top of the tab panels container when using the
18
- * {@link TabsImplementation.getTabPanelsProps}.
19
- *
20
- * @defaultValue `false`
21
- */
22
- disableScrollFix?: boolean;
23
15
  /**
24
16
  * Set this to an **ordered** list of tab values when:
25
17
  * - using a `string` tab value
@@ -42,6 +34,26 @@ export interface TabsHookOptions<TabValue extends string | number = number> {
42
34
  * @defaultValue `0`
43
35
  */
44
36
  defaultActiveTab?: UseStateInitializer<TabValue>;
37
+ /** Convenience pass-through prop to {@link TabProps.stacked} */
38
+ stacked?: boolean;
39
+ /** Convenience pass-through prop to {@link TabProps.iconAfter} */
40
+ iconAfter?: boolean;
41
+ /** Convenience pass-through props to {@link TabListProps.vertical} */
42
+ vertical?: boolean;
43
+ /**
44
+ * Set this to `true` if changing active tabs should no longer attempt to
45
+ * scroll to the top of the tab panels container when using the
46
+ * {@link TabsImplementation.getTabPanelsProps}.
47
+ *
48
+ * @defaultValue `false`
49
+ */
50
+ disableScrollFix?: boolean;
51
+ /**
52
+ * Convenience prop to disable all transitions for the
53
+ * {@link TabsImplementation.getTabProps} and
54
+ * {@link TabsImplementation.getTabListProps}.
55
+ */
56
+ disableTransition?: boolean;
45
57
  }
46
58
  /**
47
59
  * @since 6.0.0
@@ -50,6 +62,14 @@ export interface ProvidedTabProps {
50
62
  "aria-controls": string;
51
63
  id: string;
52
64
  active: boolean;
65
+ /** Convenience pass-through prop from {@link TabsHookOptions.stacked} */
66
+ stacked?: boolean;
67
+ /** Convenience pass-through prop from {@link TabsHookOptions.iconAfter} */
68
+ iconAfter?: boolean;
69
+ /** Convenience pass-through prop from {@link TabsHookOptions.disableTransition} */
70
+ activeIndicator?: boolean;
71
+ /** Convenience pass-through prop from {@link TabsHookOptions.vertical} and {@link TabsHookOptions.disableTransition} */
72
+ verticalActiveIndicator?: boolean;
53
73
  }
54
74
  /**
55
75
  * @since 6.0.0
@@ -57,6 +77,8 @@ export interface ProvidedTabProps {
57
77
  export interface ProvidedTabListProps {
58
78
  activeIndex: number;
59
79
  setActiveIndex: Dispatch<number>;
80
+ vertical?: boolean;
81
+ disableTransition?: boolean;
60
82
  }
61
83
  /**
62
84
  * @since 6.0.0
@@ -10,7 +10,7 @@ const PANEL_PREFIX = "panel-";
10
10
  *
11
11
  * @since 6.0.0
12
12
  */ export function useTabs(options = {}) {
13
- const { baseId: propBaseId, disableScrollFix, tabs = EMPTY_LIST, activeTab: propActiveTab, setActiveTab: propSetActiveTab, defaultActiveTab } = options;
13
+ const { baseId: propBaseId, tabs = EMPTY_LIST, stacked, vertical, iconAfter, activeTab: propActiveTab, setActiveTab: propSetActiveTab, defaultActiveTab, disableScrollFix, disableTransition } = options;
14
14
  const baseId = useEnsuredId(propBaseId, "tab");
15
15
  const [direction, setDirection] = useState("left");
16
16
  const [activeTab, setActiveTab] = useEnsuredState({
@@ -41,7 +41,11 @@ const PANEL_PREFIX = "panel-";
41
41
  return {
42
42
  "aria-controls": getTabId(tabValue, PANEL_PREFIX),
43
43
  id: getTabId(tabValue),
44
- active: tabValue === activeTab
44
+ active: tabValue === activeTab,
45
+ stacked,
46
+ iconAfter,
47
+ activeIndicator: disableTransition,
48
+ verticalActiveIndicator: vertical && disableTransition
45
49
  };
46
50
  },
47
51
  getTabListProps () {
@@ -54,7 +58,9 @@ const PANEL_PREFIX = "panel-";
54
58
  } else {
55
59
  setActiveTab(nextActiveIndex);
56
60
  }
57
- }
61
+ },
62
+ vertical,
63
+ disableTransition
58
64
  };
59
65
  },
60
66
  getTabPanelProps (tabValue) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tabs/useTabs.ts"],"sourcesContent":["\"use client\";\nimport type { Dispatch, Ref, RefObject } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { SlideDirection } from \"../transition/SlideContainer.js\";\nimport type { UseStateInitializer, UseStateSetter } from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredState } from \"../useEnsuredState.js\";\n\nconst EMPTY_LIST = [] as const;\nconst PANEL_PREFIX = \"panel-\";\n\n/**\n * @since 6.0.0\n */\nexport interface TabsHookOptions<TabValue extends string | number = number> {\n /**\n * This can be used to generate the ids for the different components within\n * the tab widget.\n *\n * @defaultValue `\"tab-\" + useId()`\n */\n baseId?: string;\n\n /**\n * Set this to `true` if changing active tabs should no longer attempt to\n * scroll to the top of the tab panels container when using the\n * {@link TabsImplementation.getTabPanelsProps}.\n *\n * @defaultValue `false`\n */\n disableScrollFix?: boolean;\n\n /**\n * Set this to an **ordered** list of tab values when:\n * - using a `string` tab value\n * - using a `number` tab value does not represent a tab index\n *\n * See the examples on the {@link useTabs} for usage.\n */\n tabs?: readonly TabValue[];\n\n /**\n * Provide this value and {@link setActiveTab} to control the active tab\n * behavior.\n */\n activeTab?: TabValue;\n\n /** @see {@link activeTab} */\n setActiveTab?: Dispatch<TabValue>;\n\n /**\n * Set this to the default tab index when not controlling the active tab value\n * through {@link activeTab} and {@link setActiveTab}.\n *\n * @defaultValue `0`\n */\n defaultActiveTab?: UseStateInitializer<TabValue>;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabProps {\n \"aria-controls\": string;\n id: string;\n active: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabListProps {\n activeIndex: number;\n setActiveIndex: Dispatch<number>;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabPanelProps {\n \"aria-labelledby\": string;\n id: string;\n role: \"tabpanel\";\n active: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabPanelsProps<E extends HTMLElement> {\n ref: Ref<E>;\n direction: SlideDirection;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface TabsImplementation<TabValue extends string | number = number> {\n direction: SlideDirection;\n setDirection: UseStateSetter<SlideDirection>;\n activeTab?: TabValue;\n setActiveTab?(nextActiveTab: TabValue): void;\n getTabProps(tabValue: TabValue): ProvidedTabProps;\n getTabListProps(): ProvidedTabListProps;\n getTabPanelProps(tabValue: TabValue): ProvidedTabPanelProps;\n getTabPanelsProps<E extends HTMLElement>(): ProvidedTabPanelsProps<E>;\n}\n\n/**\n * @example Super Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * function Example(): ReactElement {\n * const {\n * activeTab,\n * setActiveTab,\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs();\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <Tab {...getTabProps(0)}>Tab 1</Tab>\n * <Tab {...getTabProps(1)}>Tab 2</Tab>\n * <Tab {...getTabProps(2)}>Tab 3</Tab>\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * <Slide {...getTabPanelProps(0)}>Tab 1 Content</Slide>\n * <Slide {...getTabPanelProps(1)}>Tab 2 Content</Slide>\n * <Slide {...getTabPanelProps(2)}>Tab 3 Content</Slide>\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs(): TabsImplementation<number> & {\n activeTab: number;\n setActiveTab: number;\n};\n/**\n * The tab behavior can be controlled by providing the `activeTab` and\n * `setActiveTab` options.\n *\n * @example Controlled\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n * import { useState } from \"react\";\n *\n * function Example(): ReactElement {\n * const [activeTab, setActiveTab] = useState(1);\n *\n * const {\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({\n * activeTab,\n * setActiveTab,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <Tab {...getTabProps(0)}>Tab 1</Tab>\n * <Tab {...getTabProps(1)}>Tab 2</Tab>\n * <Tab {...getTabProps(2)}>Tab 3</Tab>\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * <Slide {...getTabPanelProps(0)}>Tab 1 Content</Slide>\n * <Slide {...getTabPanelProps(1)}>Tab 2 Content</Slide>\n * <Slide {...getTabPanelProps(2)}>Tab 3 Content</Slide>\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends number>(\n options: TabsHookOptions<TabValue> & {\n tabs?: readonly TabValue[];\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n defaultActiveTab?: never;\n }\n): TabsImplementation<TabValue> & { activeTab?: never; setActiveTab?: never };\nexport function useTabs<TabValue extends number>(\n options: TabsHookOptions<TabValue> & {\n tabs?: readonly TabValue[];\n activeTab?: never;\n setActiveTab?: never;\n defaultActiveTab?: UseStateInitializer<TabValue>;\n }\n): TabsImplementation<TabValue> & {\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n};\n/**\n * When using string values, the {@link TabsHookOptions.tabs} option **must** be\n * provided to determine the correct active tab index.\n *\n * @example String Value Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * const tabs = [\"value-1\", \"value-2\", \"value-3\"];\n *\n * function Example(): ReactElement {\n * const {\n * activeTab,\n * setActiveTab,\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({ tabs });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * {tabs.map((value) => (\n * <Tab key={value} {...getTabProps(value)}>{value}</Tab>\n * ))}\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * {tabs.map((value) => (\n * <Slide key={value}>{value} Content</Slide>\n * ))}\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string>(\n options: TabsHookOptions<TabValue> & {\n tabs: readonly TabValue[];\n activeTab?: never;\n setActiveTab?: never;\n defaultActiveTab?: UseStateInitializer<TabValue>;\n }\n): TabsImplementation<TabValue> & {\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n};\n/**\n * When using string values, the {@link TabsHookOptions.tabs} option **must** be\n * provided to determine the correct active tab index.\n *\n * @example String Controlled Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * const tabs = [\"value-1\", \"value-2\", \"value-3\"] as const;\n *\n * function Example(): ReactElement {\n * const [activeTab, setActiveTab] = useState(tabs[0]);\n *\n * const {\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({\n * tabs,\n * activeTab,\n * setActiveTab,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * {tabs.map((value) => (\n * <Tab key={value} {...getTabProps(value)}>{value}</Tab>\n * ))}\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * {tabs.map((value) => (\n * <Slide key={value}>{value} Content</Slide>\n * ))}\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @example Navigation Tabs\n * ```tsx\n * \"use client\";\n * import {\n * RippleContainer,\n * Tab,\n * TabList,\n * useElementInteraction,\n * useEnsuredId,\n * useHigherContrastChildren,\n * useKeyboardMovementContext,\n * useTabs,\n * } from \"@react-md/core\";\n * import type { LinkProps } from \"next/link\";\n * import Link from \"next/link\";\n * import type { PropsWithChildren, ReactElement } from \"react\";\n * import { usePathname } from \"next/navigation\";\n *\n * interface TabLinkProps extends LinkProps {\n * active: boolean;\n * }\n *\n * function TabLink(props: LinkProps): ReactElement {\n * const {\n * id: propId,\n * children: propChildren,\n * active,\n * className,\n * ...remaining,\n * } = props;\n *\n * const id = useEnsuredId(propId, \"tab\");\n * const { activeDescendantId } = useKeyboardMovementContext();\n * const { handlers, ripples } = useElementInteraction(props);\n * const children = useHigherContrastChildren(propChildren);\n *\n * return (\n * <Link\n * {...props}\n * {...handlers}\n * id={id}\n * aria-selected={active}\n * role=\"tab\"\n * tabIndex={id === activeDescendantId ? 0 : -1}\n * className={tab({\n * className,\n * active,\n * // stacked,\n * // reversed,\n * })}\n * >\n * {children}\n * {ripples}\n * </Link>\n * );\n * }\n *\n * const noop = (): void => {\n * // do nothing\n * };\n *\n * const PATHNAME_TABS = [\"/\", \"/page-1\", \"/page-2\"];\n *\n * function Layout({ children }: PropsWithChildren) {\n * const pathname = usePathname();\n * const { getTabListProps, getTabProps } = useTabs({\n * tabs: PATHNAME_TABS,\n * activeTab: pathname,\n * setActiveTab: noop,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <TabLink {...getTabProps(\"/\")} href=\"/\">Home</TabLink>\n * <TabLink {...getTabProps(\"/page-1\")} href=\"/page-1\">Page 1</TabLink>\n * <TabLink {...getTabProps(\"/page-2\")} href=\"/page-2\">Page 2</TabLink>\n * </TabList>\n * <main>{children}</main>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string>(\n options: TabsHookOptions<TabValue> & {\n tabs: readonly TabValue[];\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n defaultActiveTab?: never;\n }\n): TabsImplementation<TabValue> & { activeTab?: never; setActiveTab?: never };\n/**\n * This hook can be uncontrolled/controlled and supports strongly typing the tab\n * values if needed. Check out the overloads for examples.\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string | number>(\n options: TabsHookOptions<TabValue> = {}\n): TabsImplementation<TabValue> {\n const {\n baseId: propBaseId,\n disableScrollFix,\n tabs = EMPTY_LIST,\n activeTab: propActiveTab,\n setActiveTab: propSetActiveTab,\n defaultActiveTab,\n } = options;\n\n const baseId = useEnsuredId(propBaseId, \"tab\");\n const [direction, setDirection] = useState<SlideDirection>(\"left\");\n\n const [activeTab, setActiveTab] = useEnsuredState({\n value: propActiveTab,\n setValue: propSetActiveTab,\n defaultValue: defaultActiveTab ?? (0 as TabValue),\n });\n\n const getTabIndex = (tabValue: TabValue): number =>\n typeof tabValue === \"string\" || tabs.length > 0\n ? tabs.indexOf(tabValue)\n : tabValue;\n const getTabId = (tabValue: TabValue, prefix = \"\"): string =>\n `${baseId}-${prefix}${getTabIndex(tabValue) + 1}`;\n\n const activeIndex = getTabIndex(activeTab);\n const tabPanelsRef = useRef<HTMLElement>(null);\n useEffect(() => {\n const container = tabPanelsRef.current;\n if (!container || disableScrollFix) {\n return;\n }\n\n container.scrollTop = 0;\n }, [disableScrollFix, activeTab]);\n\n return {\n activeTab,\n setActiveTab,\n direction,\n setDirection,\n getTabProps(tabValue) {\n return {\n \"aria-controls\": getTabId(tabValue, PANEL_PREFIX),\n id: getTabId(tabValue),\n active: tabValue === activeTab,\n };\n },\n getTabListProps() {\n return {\n activeIndex,\n setActiveIndex: (nextActiveIndex) => {\n setDirection(activeIndex < nextActiveIndex ? \"left\" : \"right\");\n if (typeof activeTab === \"string\" || tabs.length > 0) {\n setActiveTab(tabs[nextActiveIndex]);\n } else {\n setActiveTab(nextActiveIndex as TabValue);\n }\n },\n };\n },\n getTabPanelProps(tabValue) {\n return {\n \"aria-labelledby\": getTabId(tabValue),\n id: getTabId(tabValue, PANEL_PREFIX),\n role: \"tabpanel\",\n active: tabValue === activeTab,\n };\n },\n getTabPanelsProps<E>() {\n return {\n ref: tabPanelsRef as RefObject<E>,\n direction,\n };\n },\n };\n}\n"],"names":["useEffect","useRef","useState","useEnsuredId","useEnsuredState","EMPTY_LIST","PANEL_PREFIX","useTabs","options","baseId","propBaseId","disableScrollFix","tabs","activeTab","propActiveTab","setActiveTab","propSetActiveTab","defaultActiveTab","direction","setDirection","value","setValue","defaultValue","getTabIndex","tabValue","length","indexOf","getTabId","prefix","activeIndex","tabPanelsRef","container","current","scrollTop","getTabProps","id","active","getTabListProps","setActiveIndex","nextActiveIndex","getTabPanelProps","role","getTabPanelsProps","ref"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AAEA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AAGpD,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SAASC,eAAe,QAAQ,wBAAwB;AAExD,MAAMC,aAAa,EAAE;AACrB,MAAMC,eAAe;AA0YrB;;;;;CAKC,GACD,OAAO,SAASC,QACdC,UAAqC,CAAC,CAAC;IAEvC,MAAM,EACJC,QAAQC,UAAU,EAClBC,gBAAgB,EAChBC,OAAOP,UAAU,EACjBQ,WAAWC,aAAa,EACxBC,cAAcC,gBAAgB,EAC9BC,gBAAgB,EACjB,GAAGT;IAEJ,MAAMC,SAASN,aAAaO,YAAY;IACxC,MAAM,CAACQ,WAAWC,aAAa,GAAGjB,SAAyB;IAE3D,MAAM,CAACW,WAAWE,aAAa,GAAGX,gBAAgB;QAChDgB,OAAON;QACPO,UAAUL;QACVM,cAAcL,oBAAqB;IACrC;IAEA,MAAMM,cAAc,CAACC,WACnB,OAAOA,aAAa,YAAYZ,KAAKa,MAAM,GAAG,IAC1Cb,KAAKc,OAAO,CAACF,YACbA;IACN,MAAMG,WAAW,CAACH,UAAoBI,SAAS,EAAE,GAC/C,CAAC,EAAEnB,OAAO,CAAC,EAAEmB,OAAO,EAAEL,YAAYC,YAAY,EAAE,CAAC;IAEnD,MAAMK,cAAcN,YAAYV;IAChC,MAAMiB,eAAe7B,OAAoB;IACzCD,UAAU;QACR,MAAM+B,YAAYD,aAAaE,OAAO;QACtC,IAAI,CAACD,aAAapB,kBAAkB;YAClC;QACF;QAEAoB,UAAUE,SAAS,GAAG;IACxB,GAAG;QAACtB;QAAkBE;KAAU;IAEhC,OAAO;QACLA;QACAE;QACAG;QACAC;QACAe,aAAYV,QAAQ;YAClB,OAAO;gBACL,iBAAiBG,SAASH,UAAUlB;gBACpC6B,IAAIR,SAASH;gBACbY,QAAQZ,aAAaX;YACvB;QACF;QACAwB;YACE,OAAO;gBACLR;gBACAS,gBAAgB,CAACC;oBACfpB,aAAaU,cAAcU,kBAAkB,SAAS;oBACtD,IAAI,OAAO1B,cAAc,YAAYD,KAAKa,MAAM,GAAG,GAAG;wBACpDV,aAAaH,IAAI,CAAC2B,gBAAgB;oBACpC,OAAO;wBACLxB,aAAawB;oBACf;gBACF;YACF;QACF;QACAC,kBAAiBhB,QAAQ;YACvB,OAAO;gBACL,mBAAmBG,SAASH;gBAC5BW,IAAIR,SAASH,UAAUlB;gBACvBmC,MAAM;gBACNL,QAAQZ,aAAaX;YACvB;QACF;QACA6B;YACE,OAAO;gBACLC,KAAKb;gBACLZ;YACF;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/tabs/useTabs.ts"],"sourcesContent":["\"use client\";\nimport {\n type Dispatch,\n type Ref,\n type RefObject,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { type SlideDirection } from \"../transition/SlideContainer.js\";\nimport { type UseStateInitializer, type UseStateSetter } from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredState } from \"../useEnsuredState.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { type TabProps } from \"./Tab.js\";\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { type TabListProps } from \"./TabList.js\";\n\nconst EMPTY_LIST = [] as const;\nconst PANEL_PREFIX = \"panel-\";\n\n/**\n * @since 6.0.0\n */\nexport interface TabsHookOptions<TabValue extends string | number = number> {\n /**\n * This can be used to generate the ids for the different components within\n * the tab widget.\n *\n * @defaultValue `\"tab-\" + useId()`\n */\n baseId?: string;\n\n /**\n * Set this to an **ordered** list of tab values when:\n * - using a `string` tab value\n * - using a `number` tab value does not represent a tab index\n *\n * See the examples on the {@link useTabs} for usage.\n */\n tabs?: readonly TabValue[];\n\n /**\n * Provide this value and {@link setActiveTab} to control the active tab\n * behavior.\n */\n activeTab?: TabValue;\n\n /** @see {@link activeTab} */\n setActiveTab?: Dispatch<TabValue>;\n\n /**\n * Set this to the default tab index when not controlling the active tab value\n * through {@link activeTab} and {@link setActiveTab}.\n *\n * @defaultValue `0`\n */\n defaultActiveTab?: UseStateInitializer<TabValue>;\n\n /** Convenience pass-through prop to {@link TabProps.stacked} */\n stacked?: boolean;\n /** Convenience pass-through prop to {@link TabProps.iconAfter} */\n iconAfter?: boolean;\n\n /** Convenience pass-through props to {@link TabListProps.vertical} */\n vertical?: boolean;\n\n /**\n * Set this to `true` if changing active tabs should no longer attempt to\n * scroll to the top of the tab panels container when using the\n * {@link TabsImplementation.getTabPanelsProps}.\n *\n * @defaultValue `false`\n */\n disableScrollFix?: boolean;\n\n /**\n * Convenience prop to disable all transitions for the\n * {@link TabsImplementation.getTabProps} and\n * {@link TabsImplementation.getTabListProps}.\n */\n disableTransition?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabProps {\n \"aria-controls\": string;\n id: string;\n active: boolean;\n\n /** Convenience pass-through prop from {@link TabsHookOptions.stacked} */\n stacked?: boolean;\n /** Convenience pass-through prop from {@link TabsHookOptions.iconAfter} */\n iconAfter?: boolean;\n /** Convenience pass-through prop from {@link TabsHookOptions.disableTransition} */\n activeIndicator?: boolean;\n /** Convenience pass-through prop from {@link TabsHookOptions.vertical} and {@link TabsHookOptions.disableTransition} */\n verticalActiveIndicator?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabListProps {\n activeIndex: number;\n setActiveIndex: Dispatch<number>;\n vertical?: boolean;\n disableTransition?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabPanelProps {\n \"aria-labelledby\": string;\n id: string;\n role: \"tabpanel\";\n active: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabPanelsProps<E extends HTMLElement> {\n ref: Ref<E>;\n direction: SlideDirection;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface TabsImplementation<TabValue extends string | number = number> {\n direction: SlideDirection;\n setDirection: UseStateSetter<SlideDirection>;\n activeTab?: TabValue;\n setActiveTab?(nextActiveTab: TabValue): void;\n getTabProps(tabValue: TabValue): ProvidedTabProps;\n getTabListProps(): ProvidedTabListProps;\n getTabPanelProps(tabValue: TabValue): ProvidedTabPanelProps;\n getTabPanelsProps<E extends HTMLElement>(): ProvidedTabPanelsProps<E>;\n}\n\n/**\n * @example Super Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * function Example(): ReactElement {\n * const {\n * activeTab,\n * setActiveTab,\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs();\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <Tab {...getTabProps(0)}>Tab 1</Tab>\n * <Tab {...getTabProps(1)}>Tab 2</Tab>\n * <Tab {...getTabProps(2)}>Tab 3</Tab>\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * <Slide {...getTabPanelProps(0)}>Tab 1 Content</Slide>\n * <Slide {...getTabPanelProps(1)}>Tab 2 Content</Slide>\n * <Slide {...getTabPanelProps(2)}>Tab 3 Content</Slide>\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs(): TabsImplementation<number> & {\n activeTab: number;\n setActiveTab: number;\n};\n/**\n * The tab behavior can be controlled by providing the `activeTab` and\n * `setActiveTab` options.\n *\n * @example Controlled\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n * import { useState } from \"react\";\n *\n * function Example(): ReactElement {\n * const [activeTab, setActiveTab] = useState(1);\n *\n * const {\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({\n * activeTab,\n * setActiveTab,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <Tab {...getTabProps(0)}>Tab 1</Tab>\n * <Tab {...getTabProps(1)}>Tab 2</Tab>\n * <Tab {...getTabProps(2)}>Tab 3</Tab>\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * <Slide {...getTabPanelProps(0)}>Tab 1 Content</Slide>\n * <Slide {...getTabPanelProps(1)}>Tab 2 Content</Slide>\n * <Slide {...getTabPanelProps(2)}>Tab 3 Content</Slide>\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends number>(\n options: TabsHookOptions<TabValue> & {\n tabs?: readonly TabValue[];\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n defaultActiveTab?: never;\n }\n): TabsImplementation<TabValue> & { activeTab?: never; setActiveTab?: never };\nexport function useTabs<TabValue extends number>(\n options: TabsHookOptions<TabValue> & {\n tabs?: readonly TabValue[];\n activeTab?: never;\n setActiveTab?: never;\n defaultActiveTab?: UseStateInitializer<TabValue>;\n }\n): TabsImplementation<TabValue> & {\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n};\n/**\n * When using string values, the {@link TabsHookOptions.tabs} option **must** be\n * provided to determine the correct active tab index.\n *\n * @example String Value Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * const tabs = [\"value-1\", \"value-2\", \"value-3\"];\n *\n * function Example(): ReactElement {\n * const {\n * activeTab,\n * setActiveTab,\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({ tabs });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * {tabs.map((value) => (\n * <Tab key={value} {...getTabProps(value)}>{value}</Tab>\n * ))}\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * {tabs.map((value) => (\n * <Slide key={value}>{value} Content</Slide>\n * ))}\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string>(\n options: TabsHookOptions<TabValue> & {\n tabs: readonly TabValue[];\n activeTab?: never;\n setActiveTab?: never;\n defaultActiveTab?: UseStateInitializer<TabValue>;\n }\n): TabsImplementation<TabValue> & {\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n};\n/**\n * When using string values, the {@link TabsHookOptions.tabs} option **must** be\n * provided to determine the correct active tab index.\n *\n * @example String Controlled Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * const tabs = [\"value-1\", \"value-2\", \"value-3\"] as const;\n *\n * function Example(): ReactElement {\n * const [activeTab, setActiveTab] = useState(tabs[0]);\n *\n * const {\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({\n * tabs,\n * activeTab,\n * setActiveTab,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * {tabs.map((value) => (\n * <Tab key={value} {...getTabProps(value)}>{value}</Tab>\n * ))}\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * {tabs.map((value) => (\n * <Slide key={value}>{value} Content</Slide>\n * ))}\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @example Navigation Tabs\n * ```tsx\n * \"use client\";\n * import {\n * RippleContainer,\n * Tab,\n * TabList,\n * useElementInteraction,\n * useEnsuredId,\n * useHigherContrastChildren,\n * useKeyboardMovementContext,\n * useTabs,\n * } from \"@react-md/core\";\n * import type { LinkProps } from \"next/link\";\n * import Link from \"next/link\";\n * import type { PropsWithChildren, ReactElement } from \"react\";\n * import { usePathname } from \"next/navigation\";\n *\n * interface TabLinkProps extends LinkProps {\n * active: boolean;\n * }\n *\n * function TabLink(props: LinkProps): ReactElement {\n * const {\n * id: propId,\n * children: propChildren,\n * active,\n * className,\n * ...remaining,\n * } = props;\n *\n * const id = useEnsuredId(propId, \"tab\");\n * const { activeDescendantId } = useKeyboardMovementContext();\n * const { handlers, ripples } = useElementInteraction(props);\n * const children = useHigherContrastChildren(propChildren);\n *\n * return (\n * <Link\n * {...props}\n * {...handlers}\n * id={id}\n * aria-selected={active}\n * role=\"tab\"\n * tabIndex={id === activeDescendantId ? 0 : -1}\n * className={tab({\n * className,\n * active,\n * // stacked,\n * // reversed,\n * })}\n * >\n * {children}\n * {ripples}\n * </Link>\n * );\n * }\n *\n * const noop = (): void => {\n * // do nothing\n * };\n *\n * const PATHNAME_TABS = [\"/\", \"/page-1\", \"/page-2\"];\n *\n * function Layout({ children }: PropsWithChildren) {\n * const pathname = usePathname();\n * const { getTabListProps, getTabProps } = useTabs({\n * tabs: PATHNAME_TABS,\n * activeTab: pathname,\n * setActiveTab: noop,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <TabLink {...getTabProps(\"/\")} href=\"/\">Home</TabLink>\n * <TabLink {...getTabProps(\"/page-1\")} href=\"/page-1\">Page 1</TabLink>\n * <TabLink {...getTabProps(\"/page-2\")} href=\"/page-2\">Page 2</TabLink>\n * </TabList>\n * <main>{children}</main>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string>(\n options: TabsHookOptions<TabValue> & {\n tabs: readonly TabValue[];\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n defaultActiveTab?: never;\n }\n): TabsImplementation<TabValue> & { activeTab?: never; setActiveTab?: never };\n/**\n * This hook can be uncontrolled/controlled and supports strongly typing the tab\n * values if needed. Check out the overloads for examples.\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string | number>(\n options: TabsHookOptions<TabValue> = {}\n): TabsImplementation<TabValue> {\n const {\n baseId: propBaseId,\n tabs = EMPTY_LIST,\n stacked,\n vertical,\n iconAfter,\n activeTab: propActiveTab,\n setActiveTab: propSetActiveTab,\n defaultActiveTab,\n disableScrollFix,\n disableTransition,\n } = options;\n\n const baseId = useEnsuredId(propBaseId, \"tab\");\n const [direction, setDirection] = useState<SlideDirection>(\"left\");\n\n const [activeTab, setActiveTab] = useEnsuredState({\n value: propActiveTab,\n setValue: propSetActiveTab,\n defaultValue: defaultActiveTab ?? (0 as TabValue),\n });\n\n const getTabIndex = (tabValue: TabValue): number =>\n typeof tabValue === \"string\" || tabs.length > 0\n ? tabs.indexOf(tabValue)\n : tabValue;\n const getTabId = (tabValue: TabValue, prefix = \"\"): string =>\n `${baseId}-${prefix}${getTabIndex(tabValue) + 1}`;\n\n const activeIndex = getTabIndex(activeTab);\n const tabPanelsRef = useRef<HTMLElement>(null);\n useEffect(() => {\n const container = tabPanelsRef.current;\n if (!container || disableScrollFix) {\n return;\n }\n\n container.scrollTop = 0;\n }, [disableScrollFix, activeTab]);\n\n return {\n activeTab,\n setActiveTab,\n direction,\n setDirection,\n getTabProps(tabValue) {\n return {\n \"aria-controls\": getTabId(tabValue, PANEL_PREFIX),\n id: getTabId(tabValue),\n active: tabValue === activeTab,\n stacked,\n iconAfter,\n activeIndicator: disableTransition,\n verticalActiveIndicator: vertical && disableTransition,\n };\n },\n getTabListProps() {\n return {\n activeIndex,\n setActiveIndex: (nextActiveIndex) => {\n setDirection(activeIndex < nextActiveIndex ? \"left\" : \"right\");\n if (typeof activeTab === \"string\" || tabs.length > 0) {\n setActiveTab(tabs[nextActiveIndex]);\n } else {\n setActiveTab(nextActiveIndex as TabValue);\n }\n },\n vertical,\n disableTransition,\n };\n },\n getTabPanelProps(tabValue) {\n return {\n \"aria-labelledby\": getTabId(tabValue),\n id: getTabId(tabValue, PANEL_PREFIX),\n role: \"tabpanel\",\n active: tabValue === activeTab,\n };\n },\n getTabPanelsProps<E>() {\n return {\n ref: tabPanelsRef as RefObject<E>,\n direction,\n };\n },\n };\n}\n"],"names":["useEffect","useRef","useState","useEnsuredId","useEnsuredState","EMPTY_LIST","PANEL_PREFIX","useTabs","options","baseId","propBaseId","tabs","stacked","vertical","iconAfter","activeTab","propActiveTab","setActiveTab","propSetActiveTab","defaultActiveTab","disableScrollFix","disableTransition","direction","setDirection","value","setValue","defaultValue","getTabIndex","tabValue","length","indexOf","getTabId","prefix","activeIndex","tabPanelsRef","container","current","scrollTop","getTabProps","id","active","activeIndicator","verticalActiveIndicator","getTabListProps","setActiveIndex","nextActiveIndex","getTabPanelProps","role","getTabPanelsProps","ref"],"mappings":"AAAA;AACA,SAIEA,SAAS,EACTC,MAAM,EACNC,QAAQ,QACH,QAAQ;AAGf,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SAASC,eAAe,QAAQ,wBAAwB;AAOxD,MAAMC,aAAa,EAAE;AACrB,MAAMC,eAAe;AAoarB;;;;;CAKC,GACD,OAAO,SAASC,QACdC,UAAqC,CAAC,CAAC;IAEvC,MAAM,EACJC,QAAQC,UAAU,EAClBC,OAAON,UAAU,EACjBO,OAAO,EACPC,QAAQ,EACRC,SAAS,EACTC,WAAWC,aAAa,EACxBC,cAAcC,gBAAgB,EAC9BC,gBAAgB,EAChBC,gBAAgB,EAChBC,iBAAiB,EAClB,GAAGb;IAEJ,MAAMC,SAASN,aAAaO,YAAY;IACxC,MAAM,CAACY,WAAWC,aAAa,GAAGrB,SAAyB;IAE3D,MAAM,CAACa,WAAWE,aAAa,GAAGb,gBAAgB;QAChDoB,OAAOR;QACPS,UAAUP;QACVQ,cAAcP,oBAAqB;IACrC;IAEA,MAAMQ,cAAc,CAACC,WACnB,OAAOA,aAAa,YAAYjB,KAAKkB,MAAM,GAAG,IAC1ClB,KAAKmB,OAAO,CAACF,YACbA;IACN,MAAMG,WAAW,CAACH,UAAoBI,SAAS,EAAE,GAC/C,CAAC,EAAEvB,OAAO,CAAC,EAAEuB,OAAO,EAAEL,YAAYC,YAAY,EAAE,CAAC;IAEnD,MAAMK,cAAcN,YAAYZ;IAChC,MAAMmB,eAAejC,OAAoB;IACzCD,UAAU;QACR,MAAMmC,YAAYD,aAAaE,OAAO;QACtC,IAAI,CAACD,aAAaf,kBAAkB;YAClC;QACF;QAEAe,UAAUE,SAAS,GAAG;IACxB,GAAG;QAACjB;QAAkBL;KAAU;IAEhC,OAAO;QACLA;QACAE;QACAK;QACAC;QACAe,aAAYV,QAAQ;YAClB,OAAO;gBACL,iBAAiBG,SAASH,UAAUtB;gBACpCiC,IAAIR,SAASH;gBACbY,QAAQZ,aAAab;gBACrBH;gBACAE;gBACA2B,iBAAiBpB;gBACjBqB,yBAAyB7B,YAAYQ;YACvC;QACF;QACAsB;YACE,OAAO;gBACLV;gBACAW,gBAAgB,CAACC;oBACftB,aAAaU,cAAcY,kBAAkB,SAAS;oBACtD,IAAI,OAAO9B,cAAc,YAAYJ,KAAKkB,MAAM,GAAG,GAAG;wBACpDZ,aAAaN,IAAI,CAACkC,gBAAgB;oBACpC,OAAO;wBACL5B,aAAa4B;oBACf;gBACF;gBACAhC;gBACAQ;YACF;QACF;QACAyB,kBAAiBlB,QAAQ;YACvB,OAAO;gBACL,mBAAmBG,SAASH;gBAC5BW,IAAIR,SAASH,UAAUtB;gBACvByC,MAAM;gBACNP,QAAQZ,aAAab;YACvB;QACF;QACAiC;YACE,OAAO;gBACLC,KAAKf;gBACLZ;YACF;QACF;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/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"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","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\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 +1 @@
1
- {"version":3,"sources":["../../src/test-utils/IntersectionObserver.ts"],"sourcesContent":["export class IntersectionObserverMock implements IntersectionObserver {\n root: Document | Element | null;\n rootMargin: string;\n thresholds: readonly number[];\n\n elements: Set<Element>;\n\n constructor(\n public callback: IntersectionObserverCallback,\n options: IntersectionObserverInit = {}\n ) {\n this.root = options.root || null;\n this.rootMargin = options.rootMargin || \"\";\n this.thresholds =\n typeof options.threshold === \"number\"\n ? [options.threshold]\n : options.threshold ?? [];\n\n this.elements = new Set();\n }\n\n observe(target: Element): void {\n this.elements.add(target);\n\n this.callback(this.takeRecords(), this);\n }\n\n unobserve(target: Element): void {\n this.elements.delete(target);\n }\n\n takeRecords(): IntersectionObserverEntry[] {\n return [...this.elements].map<IntersectionObserverEntry>((target) => ({\n time: Date.now(),\n target,\n boundingClientRect: target.getBoundingClientRect(),\n intersectionRatio: 0,\n intersectionRect: target.getBoundingClientRect(),\n isIntersecting: false,\n rootBounds:\n this.root && \"getBoundingClientRect\" in this.root\n ? this.root.getBoundingClientRect()\n : null,\n }));\n }\n\n disconnect(): void {\n this.elements.clear();\n }\n}\n"],"names":["IntersectionObserverMock","observe","target","elements","add","callback","takeRecords","unobserve","delete","map","time","Date","now","boundingClientRect","getBoundingClientRect","intersectionRatio","intersectionRect","isIntersecting","rootBounds","root","disconnect","clear","constructor","options","rootMargin","thresholds","threshold","Set"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;;;AAAA,OAAO,MAAMA;IAqBXC,QAAQC,MAAe,EAAQ;QAC7B,IAAI,CAACC,QAAQ,CAACC,GAAG,CAACF;QAElB,IAAI,CAACG,QAAQ,CAAC,IAAI,CAACC,WAAW,IAAI,IAAI;IACxC;IAEAC,UAAUL,MAAe,EAAQ;QAC/B,IAAI,CAACC,QAAQ,CAACK,MAAM,CAACN;IACvB;IAEAI,cAA2C;QACzC,OAAO;eAAI,IAAI,CAACH,QAAQ;SAAC,CAACM,GAAG,CAA4B,CAACP,SAAY,CAAA;gBACpEQ,MAAMC,KAAKC,GAAG;gBACdV;gBACAW,oBAAoBX,OAAOY,qBAAqB;gBAChDC,mBAAmB;gBACnBC,kBAAkBd,OAAOY,qBAAqB;gBAC9CG,gBAAgB;gBAChBC,YACE,IAAI,CAACC,IAAI,IAAI,2BAA2B,IAAI,CAACA,IAAI,GAC7C,IAAI,CAACA,IAAI,CAACL,qBAAqB,KAC/B;YACR,CAAA;IACF;IAEAM,aAAmB;QACjB,IAAI,CAACjB,QAAQ,CAACkB,KAAK;IACrB;IAzCAC,YACE,AAAOjB,QAAsC,EAC7CkB,UAAoC,CAAC,CAAC,CACtC;;QATFJ,uBAAAA,QAAAA,KAAAA;QACAK,uBAAAA,cAAAA,KAAAA;QACAC,uBAAAA,cAAAA,KAAAA;QAEAtB,uBAAAA,YAAAA,KAAAA;aAGSE,WAAAA;QAGP,IAAI,CAACc,IAAI,GAAGI,QAAQJ,IAAI,IAAI;QAC5B,IAAI,CAACK,UAAU,GAAGD,QAAQC,UAAU,IAAI;QACxC,IAAI,CAACC,UAAU,GACb,OAAOF,QAAQG,SAAS,KAAK,WACzB;YAACH,QAAQG,SAAS;SAAC,GACnBH,QAAQG,SAAS,IAAI,EAAE;QAE7B,IAAI,CAACvB,QAAQ,GAAG,IAAIwB;IACtB;AA8BF"}
1
+ {"version":3,"sources":["../../src/test-utils/IntersectionObserver.ts"],"sourcesContent":["export class IntersectionObserverMock implements IntersectionObserver {\n root: Document | Element | null;\n rootMargin: string;\n thresholds: readonly number[];\n\n elements: Set<Element>;\n\n constructor(\n public callback: IntersectionObserverCallback,\n options: IntersectionObserverInit = {}\n ) {\n this.root = options.root || null;\n this.rootMargin = options.rootMargin || \"\";\n this.thresholds =\n typeof options.threshold === \"number\"\n ? [options.threshold]\n : (options.threshold ?? []);\n\n this.elements = new Set();\n }\n\n observe(target: Element): void {\n this.elements.add(target);\n\n this.callback(this.takeRecords(), this);\n }\n\n unobserve(target: Element): void {\n this.elements.delete(target);\n }\n\n takeRecords(): IntersectionObserverEntry[] {\n return [...this.elements].map<IntersectionObserverEntry>((target) => ({\n time: Date.now(),\n target,\n boundingClientRect: target.getBoundingClientRect(),\n intersectionRatio: 0,\n intersectionRect: target.getBoundingClientRect(),\n isIntersecting: false,\n rootBounds:\n this.root && \"getBoundingClientRect\" in this.root\n ? this.root.getBoundingClientRect()\n : null,\n }));\n }\n\n disconnect(): void {\n this.elements.clear();\n }\n}\n"],"names":["IntersectionObserverMock","observe","target","elements","add","callback","takeRecords","unobserve","delete","map","time","Date","now","boundingClientRect","getBoundingClientRect","intersectionRatio","intersectionRect","isIntersecting","rootBounds","root","disconnect","clear","constructor","options","rootMargin","thresholds","threshold","Set"],"mappings":";;;;;;;;;;;;;AAAA,OAAO,MAAMA;IAqBXC,QAAQC,MAAe,EAAQ;QAC7B,IAAI,CAACC,QAAQ,CAACC,GAAG,CAACF;QAElB,IAAI,CAACG,QAAQ,CAAC,IAAI,CAACC,WAAW,IAAI,IAAI;IACxC;IAEAC,UAAUL,MAAe,EAAQ;QAC/B,IAAI,CAACC,QAAQ,CAACK,MAAM,CAACN;IACvB;IAEAI,cAA2C;QACzC,OAAO;eAAI,IAAI,CAACH,QAAQ;SAAC,CAACM,GAAG,CAA4B,CAACP,SAAY,CAAA;gBACpEQ,MAAMC,KAAKC,GAAG;gBACdV;gBACAW,oBAAoBX,OAAOY,qBAAqB;gBAChDC,mBAAmB;gBACnBC,kBAAkBd,OAAOY,qBAAqB;gBAC9CG,gBAAgB;gBAChBC,YACE,IAAI,CAACC,IAAI,IAAI,2BAA2B,IAAI,CAACA,IAAI,GAC7C,IAAI,CAACA,IAAI,CAACL,qBAAqB,KAC/B;YACR,CAAA;IACF;IAEAM,aAAmB;QACjB,IAAI,CAACjB,QAAQ,CAACkB,KAAK;IACrB;IAzCAC,YACE,AAAOjB,QAAsC,EAC7CkB,UAAoC,CAAC,CAAC,CACtC;;QATFJ,uBAAAA,QAAAA,KAAAA;QACAK,uBAAAA,cAAAA,KAAAA;QACAC,uBAAAA,cAAAA,KAAAA;QAEAtB,uBAAAA,YAAAA,KAAAA;aAGSE,WAAAA;QAGP,IAAI,CAACc,IAAI,GAAGI,QAAQJ,IAAI,IAAI;QAC5B,IAAI,CAACK,UAAU,GAAGD,QAAQC,UAAU,IAAI;QACxC,IAAI,CAACC,UAAU,GACb,OAAOF,QAAQG,SAAS,KAAK,WACzB;YAACH,QAAQG,SAAS;SAAC,GAClBH,QAAQG,SAAS,IAAI,EAAE;QAE9B,IAAI,CAACvB,QAAQ,GAAG,IAAIwB;IACtB;AA8BF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/test-utils/ResizeObserver.ts"],"sourcesContent":["import { afterEach, jest } from \"@jest/globals\";\nimport {\n resizeObserverManager,\n type ResizeObserverManager,\n} from \"../useResizeObserver.js\";\n\n/**\n * @since 6.0.0\n */\nexport interface ResizeObserverEntrySize {\n height?: number;\n width?: number;\n}\n\n/**\n * @since 6.0.0\n */\nexport type GetResizeObserverEntryMock = (\n target: Element,\n size?: ResizeObserverEntrySize\n) => ResizeObserverEntry;\n\n/**\n * This is mostly an internal function to be used with the {@link ResizeObserverMock}\n * and {@link setupResizeObserverMock}\n *\n * @since 6.0.0\n */\nexport const createResizeObserverEntry: GetResizeObserverEntryMock = (\n target,\n size\n) => {\n const contentRect = target.getBoundingClientRect();\n if (typeof size?.height === \"number\") {\n contentRect.height = size.height;\n }\n if (typeof size?.width === \"number\") {\n contentRect.width = size.width;\n }\n\n const boxSize: ResizeObserverSize = {\n blockSize: contentRect.height,\n inlineSize: contentRect.width,\n };\n\n return {\n target,\n contentRect,\n borderBoxSize: [boxSize],\n contentBoxSize: [boxSize],\n devicePixelContentBoxSize: [],\n };\n};\n\n/**\n * This is the default ResizeObserver implementation if it does not already\n * exist in jsdom. You normally should not use this directly and instead use the\n * {@link setupResizeObserverMock} instead.\n *\n * @since 6.0.0\n */\nexport class ResizeObserverMock implements ResizeObserver {\n elements: Set<Element>;\n\n constructor(public callback: ResizeObserverCallback) {\n this.elements = new Set();\n }\n\n observe = (target: Element): void => {\n this.elements.add(target);\n this.resizeAllElements(createResizeObserverEntry);\n };\n\n unobserve = (target: Element): void => {\n this.elements.delete(target);\n };\n\n disconnect = (): void => {\n this.elements.clear();\n };\n\n /**\n * Triggers the resize event for a specific element. This must be wrapped in\n * `act`.\n *\n * @example Main Usage\n * ```tsx\n * import {\n * cleanupResizeObserverAfterEach,\n * setupResizeObserverMock,\n * } from \"@react-md/core/test-utils\";\n * import { useResizeObserver } from \"@react-md/core\";\n * import { ExampleComponent } from \"../ExampleComponent.js\";\n *\n * cleanupResizeObserverAfterEach();\n *\n * describe(\"ExampleComponent\", () => {\n * it(\"should do stuff\", () => {\n * const observer = setupResizeObserverMock();\n * render(<ExampleComponent />)\n *\n * const resizeTarget = screen.getByTestId(\"resize-target\")\n *\n * // you can trigger with a custom change\n * act(() => {\n * observer.resizeElement(resizeTarget, { height: 100, width: 100 });\n * });\n * // expect resize changes\n * });\n * })\n * ```\n */\n resizeElement = (\n target: Element,\n changesOrGetEntry:\n | GetResizeObserverEntryMock\n | ResizeObserverEntrySize\n | ResizeObserverEntry = createResizeObserverEntry\n ): void => {\n if (!this.elements.has(target)) {\n throw new Error(\n \"The `ResizeObserverMock` is not watching the target element and cannot be resized\"\n );\n }\n\n let entry: ResizeObserverEntry;\n if (typeof changesOrGetEntry === \"function\") {\n entry = changesOrGetEntry(target);\n } else if (!(\"contentRect\" in changesOrGetEntry)) {\n entry = createResizeObserverEntry(target, changesOrGetEntry);\n } else {\n entry = changesOrGetEntry;\n }\n\n this.callback([entry], this);\n };\n\n /**\n * You'll normally want to use {@link resizeElement} instead, but this can be\n * used to resize all the watched elements at once.\n *\n * @example\n * ```tsx\n * import {\n * act,\n * createResizeObserverEntry,\n * render,\n * screen,\n * setupResizeObserverMock,\n * } from \"@react-md/core/test-utils\";\n *\n * const observer = setupResizeObserverMock();\n * const { container } = render(<Test />)\n * expect(container).toMatchSnapshot()\n *\n * const target1 = screen.getByTestId('target-1');\n * const target2 = screen.getByTestId('target-2');\n * const target3 = screen.getByTestId('target-3');\n *\n * act(() => {\n * observer.resizeAllElements((element) => {\n * let height: number | undefined;\n * let width: number | undefined;\n * switch (element) {\n * case target1:\n * height = 400;\n * width = 250;\n * break;\n * case target2:\n * height = 100;\n * width = 380;\n * break;\n * case target3:\n * height = 24;\n * width = 24;\n * break;\n * }\n *\n * return createResizeObserverEntry(element, { height, width });\n * });\n * });\n * expect(container).toMatchSnapshot()\n * ```\n */\n resizeAllElements = (getEntry = createResizeObserverEntry): void => {\n const entries = [...this.elements].map((element) => getEntry(element));\n this.callback(entries, this);\n };\n}\n\n/**\n * @since 6.0.0\n */\nexport interface SetupResizeObserverMockOptions {\n /**\n * Set this to `true` to mimic the real `ResizeObserver` behavior where the\n * updates occur after an animation frame instead of invoking immediately.\n *\n * Keeping this as `false` is recommended since this option was only added to\n * make testing this function itself easier.\n *\n * @defaultValue `false`\n */\n raf?: boolean;\n\n /**\n * Keeping this as the `resizeObserverManager` is recommended since this\n * option was only added to make testing this function easier itself.\n *\n * @defaultValue `resizeObserverManager`\n */\n manager?: ResizeObserverManager;\n}\n\n/**\n * Initializes the `ResizeObserverMock` to be used for tests.\n *\n * @example Main Usage\n * ```tsx\n * import { useCallback, useState } from \"react\";\n * import {\n * cleanupResizeObserverAfterEach,\n * render,\n * screen,\n * setupResizeObserverMock,\n * } from \"@react-md/core/test-utils\";\n * import { useResizeObserver } from \"@react-md/core\";\n *\n * function ExampleComponent() {\n * const [size, setSize] = useState({ height: 0, width: 0 });\n * const ref = useResizeObserver({\n * onUpdate: useCallback((entry) => {\n * setSize({\n * height: entry.contentRect.height,\n * width: entry.contentRect.width,\n * });\n * });\n * });\n *\n * return (\n * <>\n * <div data-testid=\"size\">{JSON.stringify(size)}</div>\n * <div data-testid=\"resize-target\" ref={ref} />\n * </>\n * );\n * }\n *\n * cleanupResizeObserverAfterEach();\n *\n * describe(\"ExampleComponent\", () => {\n * it(\"should do stuff\", () => {\n * const observer = setupResizeObserverMock();\n * render(<ExampleComponent />)\n *\n * const size = screen.getByTestId(\"size\");\n * const resizeTarget = screen.getByTestId(\"resize-target\")\n *\n * // jsdom sets all element sizes to 0 by default\n * expect(size).toHaveTextContent(JSON.stringify({ height: 0, width: 0 }));\n *\n * // you can trigger with a custom change\n * act(() => {\n * observer.resizeElement(resizeTarget, { height: 100, width: 100 });\n * });\n * expect(size).toHaveTextContent(JSON.stringify({ height: 100, width: 100 }));\n *\n * // or you can mock the `getBoundingClientRect` result\n * jest.spyOn(resizeTarget, \"getBoundingClientRect\")\n * .mockReturnValue({\n * ...document.body.getBoundingClientRect(),\n * height: 200,\n * width: 200,\n * }):\n *\n * act(() => {\n * observer.resizeElement(resizeTarget);\n * });\n * expect(size).toHaveTextContent(JSON.stringify({ height: 200, width: 200 }));\n * });\n * })\n * ```\n *\n * @since 6.0.0\n */\nexport function setupResizeObserverMock(\n options: SetupResizeObserverMockOptions = {}\n): ResizeObserverMock {\n const { raf, manager = resizeObserverManager } = options;\n\n const resizeObserver = new ResizeObserverMock((entries) => {\n if (raf) {\n window.cancelAnimationFrame(manager.frame);\n manager.frame = window.requestAnimationFrame(() => {\n manager.handleResizeEntries(entries);\n });\n } else {\n manager.handleResizeEntries(entries);\n }\n });\n manager.sharedObserver = resizeObserver;\n return resizeObserver;\n}\n\n/**\n * @see {@link setupResizeObserverMock}\n * @since 6.0.0\n */\nexport function cleanupResizeObserverAfterEach(restoreAllMocks = true): void {\n afterEach(() => {\n resizeObserverManager.frame = 0;\n resizeObserverManager.subscriptions = new Map();\n resizeObserverManager.sharedObserver = undefined;\n\n if (restoreAllMocks) {\n jest.restoreAllMocks();\n }\n });\n}\n"],"names":["afterEach","jest","resizeObserverManager","createResizeObserverEntry","target","size","contentRect","getBoundingClientRect","height","width","boxSize","blockSize","inlineSize","borderBoxSize","contentBoxSize","devicePixelContentBoxSize","ResizeObserverMock","constructor","callback","elements","observe","unobserve","disconnect","resizeElement","resizeAllElements","add","delete","clear","changesOrGetEntry","has","Error","entry","getEntry","entries","map","element","Set","setupResizeObserverMock","options","raf","manager","resizeObserver","window","cancelAnimationFrame","frame","requestAnimationFrame","handleResizeEntries","sharedObserver","cleanupResizeObserverAfterEach","restoreAllMocks","subscriptions","Map","undefined"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../src/test-utils/ResizeObserver.ts"],"sourcesContent":["import { afterEach, jest } from \"@jest/globals\";\nimport {\n resizeObserverManager,\n type ResizeObserverManager,\n} from \"../useResizeObserver.js\";\n\n/**\n * @since 6.0.0\n */\nexport interface ResizeObserverEntrySize {\n height?: number;\n width?: number;\n}\n\n/**\n * @since 6.0.0\n */\nexport type GetResizeObserverEntryMock = (\n target: Element,\n size?: ResizeObserverEntrySize\n) => ResizeObserverEntry;\n\n/**\n * This is mostly an internal function to be used with the {@link ResizeObserverMock}\n * and {@link setupResizeObserverMock}\n *\n * @since 6.0.0\n */\nexport const createResizeObserverEntry: GetResizeObserverEntryMock = (\n target,\n size\n) => {\n const contentRect = target.getBoundingClientRect();\n if (typeof size?.height === \"number\") {\n contentRect.height = size.height;\n }\n if (typeof size?.width === \"number\") {\n contentRect.width = size.width;\n }\n\n const boxSize: ResizeObserverSize = {\n blockSize: contentRect.height,\n inlineSize: contentRect.width,\n };\n\n return {\n target,\n contentRect,\n borderBoxSize: [boxSize],\n contentBoxSize: [boxSize],\n devicePixelContentBoxSize: [],\n };\n};\n\n/**\n * This is the default ResizeObserver implementation if it does not already\n * exist in jsdom. You normally should not use this directly and instead use the\n * {@link setupResizeObserverMock} instead.\n *\n * @since 6.0.0\n */\nexport class ResizeObserverMock implements ResizeObserver {\n elements: Set<Element>;\n\n constructor(public callback: ResizeObserverCallback) {\n this.elements = new Set();\n }\n\n observe = (target: Element): void => {\n this.elements.add(target);\n this.resizeAllElements(createResizeObserverEntry);\n };\n\n unobserve = (target: Element): void => {\n this.elements.delete(target);\n };\n\n disconnect = (): void => {\n this.elements.clear();\n };\n\n /**\n * Triggers the resize event for a specific element. This must be wrapped in\n * `act`.\n *\n * @example Main Usage\n * ```tsx\n * import {\n * cleanupResizeObserverAfterEach,\n * setupResizeObserverMock,\n * } from \"@react-md/core/test-utils\";\n * import { useResizeObserver } from \"@react-md/core\";\n * import { ExampleComponent } from \"../ExampleComponent.js\";\n *\n * cleanupResizeObserverAfterEach();\n *\n * describe(\"ExampleComponent\", () => {\n * it(\"should do stuff\", () => {\n * const observer = setupResizeObserverMock();\n * render(<ExampleComponent />)\n *\n * const resizeTarget = screen.getByTestId(\"resize-target\")\n *\n * // you can trigger with a custom change\n * act(() => {\n * observer.resizeElement(resizeTarget, { height: 100, width: 100 });\n * });\n * // expect resize changes\n * });\n * })\n * ```\n */\n resizeElement = (\n target: Element,\n changesOrGetEntry:\n | GetResizeObserverEntryMock\n | ResizeObserverEntrySize\n | ResizeObserverEntry = createResizeObserverEntry\n ): void => {\n if (!this.elements.has(target)) {\n throw new Error(\n \"The `ResizeObserverMock` is not watching the target element and cannot be resized\"\n );\n }\n\n let entry: ResizeObserverEntry;\n if (typeof changesOrGetEntry === \"function\") {\n entry = changesOrGetEntry(target);\n } else if (!(\"contentRect\" in changesOrGetEntry)) {\n entry = createResizeObserverEntry(target, changesOrGetEntry);\n } else {\n entry = changesOrGetEntry;\n }\n\n this.callback([entry], this);\n };\n\n /**\n * You'll normally want to use {@link resizeElement} instead, but this can be\n * used to resize all the watched elements at once.\n *\n * @example\n * ```tsx\n * import {\n * act,\n * createResizeObserverEntry,\n * render,\n * screen,\n * setupResizeObserverMock,\n * } from \"@react-md/core/test-utils\";\n *\n * const observer = setupResizeObserverMock();\n * const { container } = render(<Test />)\n * expect(container).toMatchSnapshot()\n *\n * const target1 = screen.getByTestId('target-1');\n * const target2 = screen.getByTestId('target-2');\n * const target3 = screen.getByTestId('target-3');\n *\n * act(() => {\n * observer.resizeAllElements((element) => {\n * let height: number | undefined;\n * let width: number | undefined;\n * switch (element) {\n * case target1:\n * height = 400;\n * width = 250;\n * break;\n * case target2:\n * height = 100;\n * width = 380;\n * break;\n * case target3:\n * height = 24;\n * width = 24;\n * break;\n * }\n *\n * return createResizeObserverEntry(element, { height, width });\n * });\n * });\n * expect(container).toMatchSnapshot()\n * ```\n */\n resizeAllElements = (getEntry = createResizeObserverEntry): void => {\n const entries = [...this.elements].map((element) => getEntry(element));\n this.callback(entries, this);\n };\n}\n\n/**\n * @since 6.0.0\n */\nexport interface SetupResizeObserverMockOptions {\n /**\n * Set this to `true` to mimic the real `ResizeObserver` behavior where the\n * updates occur after an animation frame instead of invoking immediately.\n *\n * Keeping this as `false` is recommended since this option was only added to\n * make testing this function itself easier.\n *\n * @defaultValue `false`\n */\n raf?: boolean;\n\n /**\n * Keeping this as the `resizeObserverManager` is recommended since this\n * option was only added to make testing this function easier itself.\n *\n * @defaultValue `resizeObserverManager`\n */\n manager?: ResizeObserverManager;\n}\n\n/**\n * Initializes the `ResizeObserverMock` to be used for tests.\n *\n * @example Main Usage\n * ```tsx\n * import { useCallback, useState } from \"react\";\n * import {\n * cleanupResizeObserverAfterEach,\n * render,\n * screen,\n * setupResizeObserverMock,\n * } from \"@react-md/core/test-utils\";\n * import { useResizeObserver } from \"@react-md/core\";\n *\n * function ExampleComponent() {\n * const [size, setSize] = useState({ height: 0, width: 0 });\n * const ref = useResizeObserver({\n * onUpdate: useCallback((entry) => {\n * setSize({\n * height: entry.contentRect.height,\n * width: entry.contentRect.width,\n * });\n * });\n * });\n *\n * return (\n * <>\n * <div data-testid=\"size\">{JSON.stringify(size)}</div>\n * <div data-testid=\"resize-target\" ref={ref} />\n * </>\n * );\n * }\n *\n * cleanupResizeObserverAfterEach();\n *\n * describe(\"ExampleComponent\", () => {\n * it(\"should do stuff\", () => {\n * const observer = setupResizeObserverMock();\n * render(<ExampleComponent />)\n *\n * const size = screen.getByTestId(\"size\");\n * const resizeTarget = screen.getByTestId(\"resize-target\")\n *\n * // jsdom sets all element sizes to 0 by default\n * expect(size).toHaveTextContent(JSON.stringify({ height: 0, width: 0 }));\n *\n * // you can trigger with a custom change\n * act(() => {\n * observer.resizeElement(resizeTarget, { height: 100, width: 100 });\n * });\n * expect(size).toHaveTextContent(JSON.stringify({ height: 100, width: 100 }));\n *\n * // or you can mock the `getBoundingClientRect` result\n * jest.spyOn(resizeTarget, \"getBoundingClientRect\")\n * .mockReturnValue({\n * ...document.body.getBoundingClientRect(),\n * height: 200,\n * width: 200,\n * }):\n *\n * act(() => {\n * observer.resizeElement(resizeTarget);\n * });\n * expect(size).toHaveTextContent(JSON.stringify({ height: 200, width: 200 }));\n * });\n * })\n * ```\n *\n * @since 6.0.0\n */\nexport function setupResizeObserverMock(\n options: SetupResizeObserverMockOptions = {}\n): ResizeObserverMock {\n const { raf, manager = resizeObserverManager } = options;\n\n const resizeObserver = new ResizeObserverMock((entries) => {\n if (raf) {\n window.cancelAnimationFrame(manager.frame);\n manager.frame = window.requestAnimationFrame(() => {\n manager.handleResizeEntries(entries);\n });\n } else {\n manager.handleResizeEntries(entries);\n }\n });\n manager.sharedObserver = resizeObserver;\n return resizeObserver;\n}\n\n/**\n * @see {@link setupResizeObserverMock}\n * @since 6.0.0\n */\nexport function cleanupResizeObserverAfterEach(restoreAllMocks = true): void {\n afterEach(() => {\n resizeObserverManager.frame = 0;\n resizeObserverManager.subscriptions = new Map();\n resizeObserverManager.sharedObserver = undefined;\n\n if (restoreAllMocks) {\n jest.restoreAllMocks();\n }\n });\n}\n"],"names":["afterEach","jest","resizeObserverManager","createResizeObserverEntry","target","size","contentRect","getBoundingClientRect","height","width","boxSize","blockSize","inlineSize","borderBoxSize","contentBoxSize","devicePixelContentBoxSize","ResizeObserverMock","constructor","callback","elements","observe","unobserve","disconnect","resizeElement","resizeAllElements","add","delete","clear","changesOrGetEntry","has","Error","entry","getEntry","entries","map","element","Set","setupResizeObserverMock","options","raf","manager","resizeObserver","window","cancelAnimationFrame","frame","requestAnimationFrame","handleResizeEntries","sharedObserver","cleanupResizeObserverAfterEach","restoreAllMocks","subscriptions","Map","undefined"],"mappings":";;;;;;;;;;;;;AAAA,SAASA,SAAS,EAAEC,IAAI,QAAQ,gBAAgB;AAChD,SACEC,qBAAqB,QAEhB,0BAA0B;AAkBjC;;;;;CAKC,GACD,OAAO,MAAMC,4BAAwD,CACnEC,QACAC;IAEA,MAAMC,cAAcF,OAAOG,qBAAqB;IAChD,IAAI,OAAOF,MAAMG,WAAW,UAAU;QACpCF,YAAYE,MAAM,GAAGH,KAAKG,MAAM;IAClC;IACA,IAAI,OAAOH,MAAMI,UAAU,UAAU;QACnCH,YAAYG,KAAK,GAAGJ,KAAKI,KAAK;IAChC;IAEA,MAAMC,UAA8B;QAClCC,WAAWL,YAAYE,MAAM;QAC7BI,YAAYN,YAAYG,KAAK;IAC/B;IAEA,OAAO;QACLL;QACAE;QACAO,eAAe;YAACH;SAAQ;QACxBI,gBAAgB;YAACJ;SAAQ;QACzBK,2BAA2B,EAAE;IAC/B;AACF,EAAE;AAEF;;;;;;CAMC,GACD,OAAO,MAAMC;IAGXC,YAAY,AAAOC,QAAgC,CAAE;;QAFrDC,uBAAAA,YAAAA,KAAAA;QAMAC,uBAAAA,WAAAA,KAAAA;QAKAC,uBAAAA,aAAAA,KAAAA;QAIAC,uBAAAA,cAAAA,KAAAA;QAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BC,GACDC,uBAAAA,iBAAAA,KAAAA;QAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CC,GACDC,uBAAAA,qBAAAA,KAAAA;aAxHmBN,WAAAA;aAInBE,UAAU,CAAChB;YACT,IAAI,CAACe,QAAQ,CAACM,GAAG,CAACrB;YAClB,IAAI,CAACoB,iBAAiB,CAACrB;QACzB;aAEAkB,YAAY,CAACjB;YACX,IAAI,CAACe,QAAQ,CAACO,MAAM,CAACtB;QACvB;aAEAkB,aAAa;YACX,IAAI,CAACH,QAAQ,CAACQ,KAAK;QACrB;aAiCAJ,gBAAgB,CACdnB,QACAwB,oBAG0BzB,yBAAyB;YAEnD,IAAI,CAAC,IAAI,CAACgB,QAAQ,CAACU,GAAG,CAACzB,SAAS;gBAC9B,MAAM,IAAI0B,MACR;YAEJ;YAEA,IAAIC;YACJ,IAAI,OAAOH,sBAAsB,YAAY;gBAC3CG,QAAQH,kBAAkBxB;YAC5B,OAAO,IAAI,CAAE,CAAA,iBAAiBwB,iBAAgB,GAAI;gBAChDG,QAAQ5B,0BAA0BC,QAAQwB;YAC5C,OAAO;gBACLG,QAAQH;YACV;YAEA,IAAI,CAACV,QAAQ,CAAC;gBAACa;aAAM,EAAE,IAAI;QAC7B;aAiDAP,oBAAoB,CAACQ,WAAW7B,yBAAyB;YACvD,MAAM8B,UAAU;mBAAI,IAAI,CAACd,QAAQ;aAAC,CAACe,GAAG,CAAC,CAACC,UAAYH,SAASG;YAC7D,IAAI,CAACjB,QAAQ,CAACe,SAAS,IAAI;QAC7B;QA1HE,IAAI,CAACd,QAAQ,GAAG,IAAIiB;IACtB;AA0HF;AA0BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqEC,GACD,OAAO,SAASC,wBACdC,UAA0C,CAAC,CAAC;IAE5C,MAAM,EAAEC,GAAG,EAAEC,UAAUtC,qBAAqB,EAAE,GAAGoC;IAEjD,MAAMG,iBAAiB,IAAIzB,mBAAmB,CAACiB;QAC7C,IAAIM,KAAK;YACPG,OAAOC,oBAAoB,CAACH,QAAQI,KAAK;YACzCJ,QAAQI,KAAK,GAAGF,OAAOG,qBAAqB,CAAC;gBAC3CL,QAAQM,mBAAmB,CAACb;YAC9B;QACF,OAAO;YACLO,QAAQM,mBAAmB,CAACb;QAC9B;IACF;IACAO,QAAQO,cAAc,GAAGN;IACzB,OAAOA;AACT;AAEA;;;CAGC,GACD,OAAO,SAASO,+BAA+BC,kBAAkB,IAAI;IACnEjD,UAAU;QACRE,sBAAsB0C,KAAK,GAAG;QAC9B1C,sBAAsBgD,aAAa,GAAG,IAAIC;QAC1CjD,sBAAsB6C,cAAc,GAAGK;QAEvC,IAAIH,iBAAiB;YACnBhD,KAAKgD,eAAe;QACtB;IACF;AACF"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  declare module "react" {
3
2
  interface HTMLAttributes<T> extends React.AriaAttributes, React.DOMAttributes<T> {
4
3
  "data-testid"?: string | number;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/test-utils/data-testid.ts"],"sourcesContent":["/// <reference types=\"react\" />\n\ndeclare module \"react\" {\n interface HTMLAttributes<T>\n extends React.AriaAttributes,\n React.DOMAttributes<T> {\n \"data-testid\"?: string | number;\n }\n}\n"],"names":[],"rangeMappings":"","mappings":"AAAA,+BAA+B"}
1
+ {"version":3,"sources":["../../src/test-utils/data-testid.ts"],"sourcesContent":["/// <reference types=\"react\" />\n\ndeclare module \"react\" {\n interface HTMLAttributes<T>\n extends React.AriaAttributes,\n React.DOMAttributes<T> {\n \"data-testid\"?: string | number;\n }\n}\n"],"names":[],"mappings":"AAAA,+BAA+B"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/test-utils/index.ts"],"sourcesContent":["export * from \"@testing-library/react\";\nexport * from \"@testing-library/user-event\";\n\nexport * from \"./IntersectionObserver.js\";\nexport * from \"./ResizeObserver.js\";\nexport * from \"./matchMedia.js\";\nexport * from \"./render.js\";\nexport * from \"./timers.js\";\n"],"names":[],"rangeMappings":";;;;;;","mappings":"AAAA,cAAc,yBAAyB;AACvC,cAAc,8BAA8B;AAE5C,cAAc,4BAA4B;AAC1C,cAAc,sBAAsB;AACpC,cAAc,kBAAkB;AAChC,cAAc,cAAc;AAC5B,cAAc,cAAc"}
1
+ {"version":3,"sources":["../../src/test-utils/index.ts"],"sourcesContent":["export * from \"@testing-library/react\";\nexport * from \"@testing-library/user-event\";\n\nexport * from \"./IntersectionObserver.js\";\nexport * from \"./ResizeObserver.js\";\nexport * from \"./matchMedia.js\";\nexport * from \"./render.js\";\nexport * from \"./timers.js\";\n"],"names":[],"mappings":"AAAA,cAAc,yBAAyB;AACvC,cAAc,8BAA8B;AAE5C,cAAc,4BAA4B;AAC1C,cAAc,sBAAsB;AACpC,cAAc,kBAAkB;AAChC,cAAc,cAAc;AAC5B,cAAc,cAAc"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/test-utils/jest-setup.ts"],"sourcesContent":["import { beforeEach } from \"@jest/globals\";\nimport { INTERACTION_CONFIG } from \"../interaction/config.js\";\nimport { TRANSITION_CONFIG } from \"../transition/config.js\";\n\nbeforeEach(() => {\n // set the mode to `none` in tests since ripples require\n // `getBoundingClientRect()` to create correct CSS. You'll either see warnings\n // in the console around invalid css values or `NaN`.\n INTERACTION_CONFIG.mode = \"none\";\n\n // disable transitions in tests since it just makes it more difficult\n TRANSITION_CONFIG.disabled = true;\n});\n"],"names":["beforeEach","INTERACTION_CONFIG","TRANSITION_CONFIG","mode","disabled"],"rangeMappings":";;;;;;;;;;","mappings":"AAAA,SAASA,UAAU,QAAQ,gBAAgB;AAC3C,SAASC,kBAAkB,QAAQ,2BAA2B;AAC9D,SAASC,iBAAiB,QAAQ,0BAA0B;AAE5DF,WAAW;IACT,wDAAwD;IACxD,8EAA8E;IAC9E,qDAAqD;IACrDC,mBAAmBE,IAAI,GAAG;IAE1B,qEAAqE;IACrED,kBAAkBE,QAAQ,GAAG;AAC/B"}
1
+ {"version":3,"sources":["../../src/test-utils/jest-setup.ts"],"sourcesContent":["import { beforeEach } from \"@jest/globals\";\nimport { INTERACTION_CONFIG } from \"../interaction/config.js\";\nimport { TRANSITION_CONFIG } from \"../transition/config.js\";\n\nbeforeEach(() => {\n // set the mode to `none` in tests since ripples require\n // `getBoundingClientRect()` to create correct CSS. You'll either see warnings\n // in the console around invalid css values or `NaN`.\n INTERACTION_CONFIG.mode = \"none\";\n\n // disable transitions in tests since it just makes it more difficult\n TRANSITION_CONFIG.disabled = true;\n});\n"],"names":["beforeEach","INTERACTION_CONFIG","TRANSITION_CONFIG","mode","disabled"],"mappings":"AAAA,SAASA,UAAU,QAAQ,gBAAgB;AAC3C,SAASC,kBAAkB,QAAQ,2BAA2B;AAC9D,SAASC,iBAAiB,QAAQ,0BAA0B;AAE5DF,WAAW;IACT,wDAAwD;IACxD,8EAA8E;IAC9E,qDAAqD;IACrDC,mBAAmBE,IAAI,GAAG;IAE1B,qEAAqE;IACrED,kBAAkBE,QAAQ,GAAG;AAC/B"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/test-utils/matchMedia.ts"],"sourcesContent":["import { jest } from \"@jest/globals\";\nimport { act } from \"@testing-library/react\";\nimport {\n DEFAULT_DESKTOP_LARGE_MIN_WIDTH,\n DEFAULT_DESKTOP_MIN_WIDTH,\n DEFAULT_PHONE_MAX_WIDTH,\n DEFAULT_TABLET_MIN_WIDTH,\n} from \"../media-queries/appSize.js\";\n\nconst noop = (): void => {\n // do nothing\n};\n\n/**\n * @see {@link spyOnMatchMedia} instead\n * @internal\n * @since 6.0.0\n */\nexport const BASE_MEDIA_QUERY_LIST: MediaQueryList = {\n media: \"\",\n matches: false,\n onchange: noop,\n addListener: noop,\n addEventListener: noop,\n removeEventListener: noop,\n removeListener: noop,\n dispatchEvent: () => false,\n};\n\n/** @since 6.0.0 */\nexport type MatchMediaMatcher = (query: string) => boolean;\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for phone media queries\n */\nexport const matchPhone: MatchMediaMatcher = (query) =>\n query.includes(`${DEFAULT_PHONE_MAX_WIDTH}`);\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for tablet media queries\n */\nexport const matchTablet: MatchMediaMatcher = (query) =>\n query.includes(`${DEFAULT_TABLET_MIN_WIDTH}`);\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for desktop media queries\n */\nexport const matchDesktop: MatchMediaMatcher = (query) =>\n query.includes(`${DEFAULT_DESKTOP_MIN_WIDTH}`);\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for large desktop media queries\n */\nexport const matchLargeDesktop: MatchMediaMatcher = (query) =>\n query.includes(`${DEFAULT_DESKTOP_LARGE_MIN_WIDTH}`);\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for both desktop and large desktop media queries\n */\nexport const matchAnyDesktop: MatchMediaMatcher = (query) =>\n matchDesktop(query) || matchLargeDesktop(query);\n\n/**\n * @since 6.0.0\n */\nexport type MatchMediaSpiedFunction = jest.SpiedFunction<\n typeof window.matchMedia\n> & {\n /**\n * @example Default Behavior\n * ```tsx\n * const matchMedia = spyOnMatchMedia();\n * render(<Test />);\n *\n * // expect desktop results\n *\n * matchMedia.changeViewport(matchPhone);\n * // expect phone results\n * ```\n *\n * @example Custom Act Behavior\n * ```tsx\n * const matchMedia = spyOnMatchMedia();\n * const { rerender } = render(<Test />);\n *\n * // expect desktop results\n *\n * matchMedia.changeViewport(matchPhone, false);\n * rerender(<Test key=\"new-key\" />);\n *\n * // expect phone results\n * ```\n */\n changeViewport(matcher: MatchMediaMatcher, disableAct?: boolean): void;\n};\n\n/**\n * @example Default Behavior\n * ```tsx\n * import { matchPhone, render, spyOnMatchMedia } from \"@react-md/test-utils\";\n *\n * const matchMedia = spyOnMatchMedia();\n * render(<Test />);\n *\n * // expect desktop results\n *\n * matchMedia.changeViewport(matchPhone);\n * // expect phone results\n * ```\n *\n * @example Set Default Media\n * ```tsx\n * import { matchPhone, render, spyOnMatchMedia } from \"@react-md/test-utils\";\n *\n * const matchMedia = spyOnMatchMedia(matchPhone);\n * render(<Test />);\n *\n * // expect phone results\n * ```\n *\n * @since 6.0.0\n */\nexport function spyOnMatchMedia(\n defaultMatch: MatchMediaMatcher = matchDesktop\n): MatchMediaSpiedFunction {\n type Listener = (event: MediaQueryListEvent) => void;\n\n const listeners = new Map<string, Listener>();\n const matchMedia = jest\n .spyOn(window, \"matchMedia\")\n .mockImplementation((query) => ({\n ...BASE_MEDIA_QUERY_LIST,\n addEventListener(type: string, listener: Listener | EventListenerObject) {\n /* c8 ignore start */\n if (typeof listener !== \"function\" || type !== \"change\") {\n return;\n }\n /* c8 ignore stop */\n\n listeners.set(query, listener);\n },\n removeEventListener(\n type: string,\n listener: Listener | EventListenerObject\n ) {\n /* c8 ignore start */\n if (typeof listener !== \"function\" || type !== \"change\") {\n return;\n }\n /* c8 ignore stop */\n\n listeners.delete(query);\n },\n matches: defaultMatch(query),\n }));\n\n const changeViewport = (\n matcher: MatchMediaMatcher,\n disableAct = false\n ): void => {\n const update = (): void => {\n window.dispatchEvent(new Event(\"resize\"));\n\n const event = new Event(\"change\");\n listeners.forEach((listener, query) => {\n listener({\n ...event,\n media: \"\",\n matches: matcher(query),\n });\n });\n };\n if (disableAct) {\n update();\n } else {\n act(update);\n }\n };\n\n const mock = matchMedia as MatchMediaSpiedFunction;\n mock.changeViewport = changeViewport;\n\n return mock;\n}\n"],"names":["jest","act","DEFAULT_DESKTOP_LARGE_MIN_WIDTH","DEFAULT_DESKTOP_MIN_WIDTH","DEFAULT_PHONE_MAX_WIDTH","DEFAULT_TABLET_MIN_WIDTH","noop","BASE_MEDIA_QUERY_LIST","media","matches","onchange","addListener","addEventListener","removeEventListener","removeListener","dispatchEvent","matchPhone","query","includes","matchTablet","matchDesktop","matchLargeDesktop","matchAnyDesktop","spyOnMatchMedia","defaultMatch","listeners","Map","matchMedia","spyOn","window","mockImplementation","type","listener","set","delete","changeViewport","matcher","disableAct","update","Event","event","forEach","mock"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,IAAI,QAAQ,gBAAgB;AACrC,SAASC,GAAG,QAAQ,yBAAyB;AAC7C,SACEC,+BAA+B,EAC/BC,yBAAyB,EACzBC,uBAAuB,EACvBC,wBAAwB,QACnB,8BAA8B;AAErC,MAAMC,OAAO;AACX,aAAa;AACf;AAEA;;;;CAIC,GACD,OAAO,MAAMC,wBAAwC;IACnDC,OAAO;IACPC,SAAS;IACTC,UAAUJ;IACVK,aAAaL;IACbM,kBAAkBN;IAClBO,qBAAqBP;IACrBQ,gBAAgBR;IAChBS,eAAe,IAAM;AACvB,EAAE;AAKF;;;;CAIC,GACD,OAAO,MAAMC,aAAgC,CAACC,QAC5CA,MAAMC,QAAQ,CAAC,CAAC,EAAEd,wBAAwB,CAAC,EAAE;AAE/C;;;;CAIC,GACD,OAAO,MAAMe,cAAiC,CAACF,QAC7CA,MAAMC,QAAQ,CAAC,CAAC,EAAEb,yBAAyB,CAAC,EAAE;AAEhD;;;;CAIC,GACD,OAAO,MAAMe,eAAkC,CAACH,QAC9CA,MAAMC,QAAQ,CAAC,CAAC,EAAEf,0BAA0B,CAAC,EAAE;AAEjD;;;;CAIC,GACD,OAAO,MAAMkB,oBAAuC,CAACJ,QACnDA,MAAMC,QAAQ,CAAC,CAAC,EAAEhB,gCAAgC,CAAC,EAAE;AAEvD;;;;CAIC,GACD,OAAO,MAAMoB,kBAAqC,CAACL,QACjDG,aAAaH,UAAUI,kBAAkBJ,OAAO;AAoClD;;;;;;;;;;;;;;;;;;;;;;;;;CAyBC,GACD,OAAO,SAASM,gBACdC,eAAkCJ,YAAY;IAI9C,MAAMK,YAAY,IAAIC;IACtB,MAAMC,aAAa3B,KAChB4B,KAAK,CAACC,QAAQ,cACdC,kBAAkB,CAAC,CAACb,QAAW,CAAA;YAC9B,GAAGV,qBAAqB;YACxBK,kBAAiBmB,IAAY,EAAEC,QAAwC;gBACrE,mBAAmB,GACnB,IAAI,OAAOA,aAAa,cAAcD,SAAS,UAAU;oBACvD;gBACF;gBACA,kBAAkB,GAElBN,UAAUQ,GAAG,CAAChB,OAAOe;YACvB;YACAnB,qBACEkB,IAAY,EACZC,QAAwC;gBAExC,mBAAmB,GACnB,IAAI,OAAOA,aAAa,cAAcD,SAAS,UAAU;oBACvD;gBACF;gBACA,kBAAkB,GAElBN,UAAUS,MAAM,CAACjB;YACnB;YACAR,SAASe,aAAaP;QACxB,CAAA;IAEF,MAAMkB,iBAAiB,CACrBC,SACAC,aAAa,KAAK;QAElB,MAAMC,SAAS;YACbT,OAAOd,aAAa,CAAC,IAAIwB,MAAM;YAE/B,MAAMC,QAAQ,IAAID,MAAM;YACxBd,UAAUgB,OAAO,CAAC,CAACT,UAAUf;gBAC3Be,SAAS;oBACP,GAAGQ,KAAK;oBACRhC,OAAO;oBACPC,SAAS2B,QAAQnB;gBACnB;YACF;QACF;QACA,IAAIoB,YAAY;YACdC;QACF,OAAO;YACLrC,IAAIqC;QACN;IACF;IAEA,MAAMI,OAAOf;IACbe,KAAKP,cAAc,GAAGA;IAEtB,OAAOO;AACT"}
1
+ {"version":3,"sources":["../../src/test-utils/matchMedia.ts"],"sourcesContent":["import { jest } from \"@jest/globals\";\nimport { act } from \"@testing-library/react\";\nimport {\n DEFAULT_DESKTOP_LARGE_MIN_WIDTH,\n DEFAULT_DESKTOP_MIN_WIDTH,\n DEFAULT_PHONE_MAX_WIDTH,\n DEFAULT_TABLET_MIN_WIDTH,\n} from \"../media-queries/appSize.js\";\n\nconst noop = (): void => {\n // do nothing\n};\n\n/**\n * @see {@link spyOnMatchMedia} instead\n * @internal\n * @since 6.0.0\n */\nexport const BASE_MEDIA_QUERY_LIST: MediaQueryList = {\n media: \"\",\n matches: false,\n onchange: noop,\n addListener: noop,\n addEventListener: noop,\n removeEventListener: noop,\n removeListener: noop,\n dispatchEvent: () => false,\n};\n\n/** @since 6.0.0 */\nexport type MatchMediaMatcher = (query: string) => boolean;\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for phone media queries\n */\nexport const matchPhone: MatchMediaMatcher = (query) =>\n query.includes(`${DEFAULT_PHONE_MAX_WIDTH}`);\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for tablet media queries\n */\nexport const matchTablet: MatchMediaMatcher = (query) =>\n query.includes(`${DEFAULT_TABLET_MIN_WIDTH}`);\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for desktop media queries\n */\nexport const matchDesktop: MatchMediaMatcher = (query) =>\n query.includes(`${DEFAULT_DESKTOP_MIN_WIDTH}`);\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for large desktop media queries\n */\nexport const matchLargeDesktop: MatchMediaMatcher = (query) =>\n query.includes(`${DEFAULT_DESKTOP_LARGE_MIN_WIDTH}`);\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for both desktop and large desktop media queries\n */\nexport const matchAnyDesktop: MatchMediaMatcher = (query) =>\n matchDesktop(query) || matchLargeDesktop(query);\n\n/**\n * @since 6.0.0\n */\nexport type MatchMediaSpiedFunction = jest.SpiedFunction<\n typeof window.matchMedia\n> & {\n /**\n * @example Default Behavior\n * ```tsx\n * const matchMedia = spyOnMatchMedia();\n * render(<Test />);\n *\n * // expect desktop results\n *\n * matchMedia.changeViewport(matchPhone);\n * // expect phone results\n * ```\n *\n * @example Custom Act Behavior\n * ```tsx\n * const matchMedia = spyOnMatchMedia();\n * const { rerender } = render(<Test />);\n *\n * // expect desktop results\n *\n * matchMedia.changeViewport(matchPhone, false);\n * rerender(<Test key=\"new-key\" />);\n *\n * // expect phone results\n * ```\n */\n changeViewport(matcher: MatchMediaMatcher, disableAct?: boolean): void;\n};\n\n/**\n * @example Default Behavior\n * ```tsx\n * import { matchPhone, render, spyOnMatchMedia } from \"@react-md/test-utils\";\n *\n * const matchMedia = spyOnMatchMedia();\n * render(<Test />);\n *\n * // expect desktop results\n *\n * matchMedia.changeViewport(matchPhone);\n * // expect phone results\n * ```\n *\n * @example Set Default Media\n * ```tsx\n * import { matchPhone, render, spyOnMatchMedia } from \"@react-md/test-utils\";\n *\n * const matchMedia = spyOnMatchMedia(matchPhone);\n * render(<Test />);\n *\n * // expect phone results\n * ```\n *\n * @since 6.0.0\n */\nexport function spyOnMatchMedia(\n defaultMatch: MatchMediaMatcher = matchDesktop\n): MatchMediaSpiedFunction {\n type Listener = (event: MediaQueryListEvent) => void;\n\n const listeners = new Map<string, Listener>();\n const matchMedia = jest\n .spyOn(window, \"matchMedia\")\n .mockImplementation((query) => ({\n ...BASE_MEDIA_QUERY_LIST,\n addEventListener(type: string, listener: Listener | EventListenerObject) {\n /* c8 ignore start */\n if (typeof listener !== \"function\" || type !== \"change\") {\n return;\n }\n /* c8 ignore stop */\n\n listeners.set(query, listener);\n },\n removeEventListener(\n type: string,\n listener: Listener | EventListenerObject\n ) {\n /* c8 ignore start */\n if (typeof listener !== \"function\" || type !== \"change\") {\n return;\n }\n /* c8 ignore stop */\n\n listeners.delete(query);\n },\n matches: defaultMatch(query),\n }));\n\n const changeViewport = (\n matcher: MatchMediaMatcher,\n disableAct = false\n ): void => {\n const update = (): void => {\n window.dispatchEvent(new Event(\"resize\"));\n\n const event = new Event(\"change\");\n listeners.forEach((listener, query) => {\n listener({\n ...event,\n media: \"\",\n matches: matcher(query),\n });\n });\n };\n if (disableAct) {\n update();\n } else {\n act(update);\n }\n };\n\n const mock = matchMedia as MatchMediaSpiedFunction;\n mock.changeViewport = changeViewport;\n\n return mock;\n}\n"],"names":["jest","act","DEFAULT_DESKTOP_LARGE_MIN_WIDTH","DEFAULT_DESKTOP_MIN_WIDTH","DEFAULT_PHONE_MAX_WIDTH","DEFAULT_TABLET_MIN_WIDTH","noop","BASE_MEDIA_QUERY_LIST","media","matches","onchange","addListener","addEventListener","removeEventListener","removeListener","dispatchEvent","matchPhone","query","includes","matchTablet","matchDesktop","matchLargeDesktop","matchAnyDesktop","spyOnMatchMedia","defaultMatch","listeners","Map","matchMedia","spyOn","window","mockImplementation","type","listener","set","delete","changeViewport","matcher","disableAct","update","Event","event","forEach","mock"],"mappings":"AAAA,SAASA,IAAI,QAAQ,gBAAgB;AACrC,SAASC,GAAG,QAAQ,yBAAyB;AAC7C,SACEC,+BAA+B,EAC/BC,yBAAyB,EACzBC,uBAAuB,EACvBC,wBAAwB,QACnB,8BAA8B;AAErC,MAAMC,OAAO;AACX,aAAa;AACf;AAEA;;;;CAIC,GACD,OAAO,MAAMC,wBAAwC;IACnDC,OAAO;IACPC,SAAS;IACTC,UAAUJ;IACVK,aAAaL;IACbM,kBAAkBN;IAClBO,qBAAqBP;IACrBQ,gBAAgBR;IAChBS,eAAe,IAAM;AACvB,EAAE;AAKF;;;;CAIC,GACD,OAAO,MAAMC,aAAgC,CAACC,QAC5CA,MAAMC,QAAQ,CAAC,CAAC,EAAEd,wBAAwB,CAAC,EAAE;AAE/C;;;;CAIC,GACD,OAAO,MAAMe,cAAiC,CAACF,QAC7CA,MAAMC,QAAQ,CAAC,CAAC,EAAEb,yBAAyB,CAAC,EAAE;AAEhD;;;;CAIC,GACD,OAAO,MAAMe,eAAkC,CAACH,QAC9CA,MAAMC,QAAQ,CAAC,CAAC,EAAEf,0BAA0B,CAAC,EAAE;AAEjD;;;;CAIC,GACD,OAAO,MAAMkB,oBAAuC,CAACJ,QACnDA,MAAMC,QAAQ,CAAC,CAAC,EAAEhB,gCAAgC,CAAC,EAAE;AAEvD;;;;CAIC,GACD,OAAO,MAAMoB,kBAAqC,CAACL,QACjDG,aAAaH,UAAUI,kBAAkBJ,OAAO;AAoClD;;;;;;;;;;;;;;;;;;;;;;;;;CAyBC,GACD,OAAO,SAASM,gBACdC,eAAkCJ,YAAY;IAI9C,MAAMK,YAAY,IAAIC;IACtB,MAAMC,aAAa3B,KAChB4B,KAAK,CAACC,QAAQ,cACdC,kBAAkB,CAAC,CAACb,QAAW,CAAA;YAC9B,GAAGV,qBAAqB;YACxBK,kBAAiBmB,IAAY,EAAEC,QAAwC;gBACrE,mBAAmB,GACnB,IAAI,OAAOA,aAAa,cAAcD,SAAS,UAAU;oBACvD;gBACF;gBACA,kBAAkB,GAElBN,UAAUQ,GAAG,CAAChB,OAAOe;YACvB;YACAnB,qBACEkB,IAAY,EACZC,QAAwC;gBAExC,mBAAmB,GACnB,IAAI,OAAOA,aAAa,cAAcD,SAAS,UAAU;oBACvD;gBACF;gBACA,kBAAkB,GAElBN,UAAUS,MAAM,CAACjB;YACnB;YACAR,SAASe,aAAaP;QACxB,CAAA;IAEF,MAAMkB,iBAAiB,CACrBC,SACAC,aAAa,KAAK;QAElB,MAAMC,SAAS;YACbT,OAAOd,aAAa,CAAC,IAAIwB,MAAM;YAE/B,MAAMC,QAAQ,IAAID,MAAM;YACxBd,UAAUgB,OAAO,CAAC,CAACT,UAAUf;gBAC3Be,SAAS;oBACP,GAAGQ,KAAK;oBACRhC,OAAO;oBACPC,SAAS2B,QAAQnB;gBACnB;YACF;QACF;QACA,IAAIoB,YAAY;YACdC;QACF,OAAO;YACLrC,IAAIqC;QACN;IACF;IAEA,MAAMI,OAAOf;IACbe,KAAKP,cAAc,GAAGA;IAEtB,OAAOO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/test-utils/polyfills/IntersectionObserver.ts"],"sourcesContent":["import { IntersectionObserverMock } from \"../IntersectionObserver.js\";\n\nif (\n typeof window !== \"undefined\" &&\n typeof IntersectionObserver === \"undefined\"\n) {\n window.IntersectionObserver = IntersectionObserverMock;\n}\n"],"names":["IntersectionObserverMock","window","IntersectionObserver"],"rangeMappings":";;;","mappings":"AAAA,SAASA,wBAAwB,QAAQ,6BAA6B;AAEtE,IACE,OAAOC,WAAW,eAClB,OAAOC,yBAAyB,aAChC;IACAD,OAAOC,oBAAoB,GAAGF;AAChC"}
1
+ {"version":3,"sources":["../../../src/test-utils/polyfills/IntersectionObserver.ts"],"sourcesContent":["import { IntersectionObserverMock } from \"../IntersectionObserver.js\";\n\nif (\n typeof window !== \"undefined\" &&\n typeof IntersectionObserver === \"undefined\"\n) {\n window.IntersectionObserver = IntersectionObserverMock;\n}\n"],"names":["IntersectionObserverMock","window","IntersectionObserver"],"mappings":"AAAA,SAASA,wBAAwB,QAAQ,6BAA6B;AAEtE,IACE,OAAOC,WAAW,eAClB,OAAOC,yBAAyB,aAChC;IACAD,OAAOC,oBAAoB,GAAGF;AAChC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/test-utils/polyfills/ResizeObserver.ts"],"sourcesContent":["import { ResizeObserverMock } from \"../ResizeObserver.js\";\n\nif (typeof window !== \"undefined\" && typeof ResizeObserver === \"undefined\") {\n window.ResizeObserver = ResizeObserverMock;\n}\n"],"names":["ResizeObserverMock","window","ResizeObserver"],"rangeMappings":";;;","mappings":"AAAA,SAASA,kBAAkB,QAAQ,uBAAuB;AAE1D,IAAI,OAAOC,WAAW,eAAe,OAAOC,mBAAmB,aAAa;IAC1ED,OAAOC,cAAc,GAAGF;AAC1B"}
1
+ {"version":3,"sources":["../../../src/test-utils/polyfills/ResizeObserver.ts"],"sourcesContent":["import { ResizeObserverMock } from \"../ResizeObserver.js\";\n\nif (typeof window !== \"undefined\" && typeof ResizeObserver === \"undefined\") {\n window.ResizeObserver = ResizeObserverMock;\n}\n"],"names":["ResizeObserverMock","window","ResizeObserver"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,uBAAuB;AAE1D,IAAI,OAAOC,WAAW,eAAe,OAAOC,mBAAmB,aAAa;IAC1ED,OAAOC,cAAc,GAAGF;AAC1B"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/test-utils/polyfills/TextDecoder.ts"],"sourcesContent":["import { TextDecoder } from \"node:util\";\n\nif (typeof global.TextDecoder === \"undefined\") {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error browser TextDecoder does not support `null` while `node:util` does\n global.TextDecoder = TextDecoder;\n}\n"],"names":["TextDecoder","global"],"rangeMappings":";;;;;","mappings":"AAAA,SAASA,WAAW,QAAQ,YAAY;AAExC,IAAI,OAAOC,OAAOD,WAAW,KAAK,aAAa;IAC7C,6DAA6D;IAC7D,sFAAsF;IACtFC,OAAOD,WAAW,GAAGA;AACvB"}
1
+ {"version":3,"sources":["../../../src/test-utils/polyfills/TextDecoder.ts"],"sourcesContent":["import { TextDecoder } from \"node:util\";\n\nif (typeof global.TextDecoder === \"undefined\") {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error browser TextDecoder does not support `null` while `node:util` does\n global.TextDecoder = TextDecoder;\n}\n"],"names":["TextDecoder","global"],"mappings":"AAAA,SAASA,WAAW,QAAQ,YAAY;AAExC,IAAI,OAAOC,OAAOD,WAAW,KAAK,aAAa;IAC7C,6DAA6D;IAC7D,sFAAsF;IACtFC,OAAOD,WAAW,GAAGA;AACvB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/test-utils/polyfills/TextEncoder.ts"],"sourcesContent":["import { TextEncoder } from \"node:util\";\n\nif (typeof global.TextEncoder === \"undefined\") {\n global.TextEncoder = TextEncoder;\n}\n"],"names":["TextEncoder","global"],"rangeMappings":";;;","mappings":"AAAA,SAASA,WAAW,QAAQ,YAAY;AAExC,IAAI,OAAOC,OAAOD,WAAW,KAAK,aAAa;IAC7CC,OAAOD,WAAW,GAAGA;AACvB"}
1
+ {"version":3,"sources":["../../../src/test-utils/polyfills/TextEncoder.ts"],"sourcesContent":["import { TextEncoder } from \"node:util\";\n\nif (typeof global.TextEncoder === \"undefined\") {\n global.TextEncoder = TextEncoder;\n}\n"],"names":["TextEncoder","global"],"mappings":"AAAA,SAASA,WAAW,QAAQ,YAAY;AAExC,IAAI,OAAOC,OAAOD,WAAW,KAAK,aAAa;IAC7CC,OAAOD,WAAW,GAAGA;AACvB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/test-utils/polyfills/index.ts"],"sourcesContent":["import \"./IntersectionObserver.js\";\nimport \"./ResizeObserver.js\";\nimport \"./TextDecoder.js\";\nimport \"./TextEncoder.js\";\nimport \"./matchMedia.js\";\nimport \"./offsetParent.js\";\nimport \"./scrollIntoView.js\";\n"],"names":[],"rangeMappings":";;;;;;","mappings":"AAAA,OAAO,4BAA4B;AACnC,OAAO,sBAAsB;AAC7B,OAAO,mBAAmB;AAC1B,OAAO,mBAAmB;AAC1B,OAAO,kBAAkB;AACzB,OAAO,oBAAoB;AAC3B,OAAO,sBAAsB"}
1
+ {"version":3,"sources":["../../../src/test-utils/polyfills/index.ts"],"sourcesContent":["import \"./IntersectionObserver.js\";\nimport \"./ResizeObserver.js\";\nimport \"./TextDecoder.js\";\nimport \"./TextEncoder.js\";\nimport \"./matchMedia.js\";\nimport \"./offsetParent.js\";\nimport \"./scrollIntoView.js\";\n"],"names":[],"mappings":"AAAA,OAAO,4BAA4B;AACnC,OAAO,sBAAsB;AAC7B,OAAO,mBAAmB;AAC1B,OAAO,mBAAmB;AAC1B,OAAO,kBAAkB;AACzB,OAAO,oBAAoB;AAC3B,OAAO,sBAAsB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/test-utils/polyfills/matchMedia.ts"],"sourcesContent":["import { BASE_MEDIA_QUERY_LIST, matchDesktop } from \"../matchMedia.js\";\n\nif (typeof window !== \"undefined\" && typeof window.matchMedia !== \"function\") {\n window.matchMedia = (query) => ({\n ...BASE_MEDIA_QUERY_LIST,\n matches: matchDesktop(query),\n });\n}\n"],"names":["BASE_MEDIA_QUERY_LIST","matchDesktop","window","matchMedia","query","matches"],"rangeMappings":";;;;;;","mappings":"AAAA,SAASA,qBAAqB,EAAEC,YAAY,QAAQ,mBAAmB;AAEvE,IAAI,OAAOC,WAAW,eAAe,OAAOA,OAAOC,UAAU,KAAK,YAAY;IAC5ED,OAAOC,UAAU,GAAG,CAACC,QAAW,CAAA;YAC9B,GAAGJ,qBAAqB;YACxBK,SAASJ,aAAaG;QACxB,CAAA;AACF"}
1
+ {"version":3,"sources":["../../../src/test-utils/polyfills/matchMedia.ts"],"sourcesContent":["import { BASE_MEDIA_QUERY_LIST, matchDesktop } from \"../matchMedia.js\";\n\nif (typeof window !== \"undefined\" && typeof window.matchMedia !== \"function\") {\n window.matchMedia = (query) => ({\n ...BASE_MEDIA_QUERY_LIST,\n matches: matchDesktop(query),\n });\n}\n"],"names":["BASE_MEDIA_QUERY_LIST","matchDesktop","window","matchMedia","query","matches"],"mappings":"AAAA,SAASA,qBAAqB,EAAEC,YAAY,QAAQ,mBAAmB;AAEvE,IAAI,OAAOC,WAAW,eAAe,OAAOA,OAAOC,UAAU,KAAK,YAAY;IAC5ED,OAAOC,UAAU,GAAG,CAACC,QAAW,CAAA;YAC9B,GAAGJ,qBAAqB;YACxBK,SAASJ,aAAaG;QACxB,CAAA;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/test-utils/polyfills/offsetParent.ts"],"sourcesContent":["// this polyfill was added to support the tree keyboard movement behavior\nif (typeof window !== \"undefined\") {\n // Based off of https://github.com/jsdom/jsdom/issues/1261#issuecomment-512217225\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent\n //\n // Note: offsetParent returns null in the following situations:\n //\n // - The element or any ancestor has the display property set to none.\n // - The element has the position property set to fixed (Firefox returns <body>).\n // - The element is <body> or <html>.\n Object.defineProperty(HTMLElement.prototype, \"offsetParent\", {\n get(this: HTMLElement) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let element: ParentNode | null = this;\n while (\n element &&\n // it'll almost always be an html element, unless using document fragments\n !(element as HTMLElement).hidden &&\n (element as HTMLElement).style?.display?.toLowerCase() !== \"none\"\n ) {\n element = element.parentNode;\n }\n\n if (\n // the current element or a parent has display: none\n element ||\n // the current element is fixed\n this.style?.position?.toLowerCase() === \"fixed\" ||\n this.tagName.toLowerCase() === \"html\" ||\n this.tagName.toLowerCase() === \"body\"\n ) {\n return null;\n }\n\n return this.parentNode;\n },\n });\n}\n"],"names":["window","Object","defineProperty","HTMLElement","prototype","get","element","hidden","style","display","toLowerCase","parentNode","position","tagName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,yEAAyE;AACzE,IAAI,OAAOA,WAAW,aAAa;IACjC,iFAAiF;IACjF,EAAE;IACF,4EAA4E;IAC5E,EAAE;IACF,+DAA+D;IAC/D,EAAE;IACF,sEAAsE;IACtE,iFAAiF;IACjF,qCAAqC;IACrCC,OAAOC,cAAc,CAACC,YAAYC,SAAS,EAAE,gBAAgB;QAC3DC;YACE,4DAA4D;YAC5D,IAAIC,UAA6B,IAAI;YACrC,MACEA,WACA,0EAA0E;YAC1E,CAAC,AAACA,QAAwBC,MAAM,IAChC,AAACD,QAAwBE,KAAK,EAAEC,SAASC,kBAAkB,OAC3D;gBACAJ,UAAUA,QAAQK,UAAU;YAC9B;YAEA,IACE,oDAAoD;YACpDL,WACA,+BAA+B;YAC/B,IAAI,CAACE,KAAK,EAAEI,UAAUF,kBAAkB,WACxC,IAAI,CAACG,OAAO,CAACH,WAAW,OAAO,UAC/B,IAAI,CAACG,OAAO,CAACH,WAAW,OAAO,QAC/B;gBACA,OAAO;YACT;YAEA,OAAO,IAAI,CAACC,UAAU;QACxB;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/test-utils/polyfills/offsetParent.ts"],"sourcesContent":["// this polyfill was added to support the tree keyboard movement behavior\nif (typeof window !== \"undefined\") {\n // Based off of https://github.com/jsdom/jsdom/issues/1261#issuecomment-512217225\n //\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent\n //\n // Note: offsetParent returns null in the following situations:\n //\n // - The element or any ancestor has the display property set to none.\n // - The element has the position property set to fixed (Firefox returns <body>).\n // - The element is <body> or <html>.\n Object.defineProperty(HTMLElement.prototype, \"offsetParent\", {\n get(this: HTMLElement) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let element: ParentNode | null = this;\n while (\n element &&\n // it'll almost always be an html element, unless using document fragments\n !(element as HTMLElement).hidden &&\n (element as HTMLElement).style?.display?.toLowerCase() !== \"none\"\n ) {\n element = element.parentNode;\n }\n\n if (\n // the current element or a parent has display: none\n element ||\n // the current element is fixed\n this.style?.position?.toLowerCase() === \"fixed\" ||\n this.tagName.toLowerCase() === \"html\" ||\n this.tagName.toLowerCase() === \"body\"\n ) {\n return null;\n }\n\n return this.parentNode;\n },\n });\n}\n"],"names":["window","Object","defineProperty","HTMLElement","prototype","get","element","hidden","style","display","toLowerCase","parentNode","position","tagName"],"mappings":"AAAA,yEAAyE;AACzE,IAAI,OAAOA,WAAW,aAAa;IACjC,iFAAiF;IACjF,EAAE;IACF,4EAA4E;IAC5E,EAAE;IACF,+DAA+D;IAC/D,EAAE;IACF,sEAAsE;IACtE,iFAAiF;IACjF,qCAAqC;IACrCC,OAAOC,cAAc,CAACC,YAAYC,SAAS,EAAE,gBAAgB;QAC3DC;YACE,4DAA4D;YAC5D,IAAIC,UAA6B,IAAI;YACrC,MACEA,WACA,0EAA0E;YAC1E,CAAC,AAACA,QAAwBC,MAAM,IAChC,AAACD,QAAwBE,KAAK,EAAEC,SAASC,kBAAkB,OAC3D;gBACAJ,UAAUA,QAAQK,UAAU;YAC9B;YAEA,IACE,oDAAoD;YACpDL,WACA,+BAA+B;YAC/B,IAAI,CAACE,KAAK,EAAEI,UAAUF,kBAAkB,WACxC,IAAI,CAACG,OAAO,CAACH,WAAW,OAAO,UAC/B,IAAI,CAACG,OAAO,CAACH,WAAW,OAAO,QAC/B;gBACA,OAAO;YACT;YAEA,OAAO,IAAI,CAACC,UAAU;QACxB;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/test-utils/polyfills/scrollIntoView.ts"],"sourcesContent":["if (\n typeof window !== \"undefined\" &&\n typeof HTMLElement.prototype.scrollIntoView !== \"function\"\n) {\n // this is required for keyboard movement behavior\n HTMLElement.prototype.scrollIntoView = () => {\n // do nothing\n };\n}\n"],"names":["window","HTMLElement","prototype","scrollIntoView"],"rangeMappings":";;;;;","mappings":"AAAA,IACE,OAAOA,WAAW,eAClB,OAAOC,YAAYC,SAAS,CAACC,cAAc,KAAK,YAChD;IACA,kDAAkD;IAClDF,YAAYC,SAAS,CAACC,cAAc,GAAG;IACrC,aAAa;IACf;AACF"}
1
+ {"version":3,"sources":["../../../src/test-utils/polyfills/scrollIntoView.ts"],"sourcesContent":["if (\n typeof window !== \"undefined\" &&\n typeof HTMLElement.prototype.scrollIntoView !== \"function\"\n) {\n // this is required for keyboard movement behavior\n HTMLElement.prototype.scrollIntoView = () => {\n // do nothing\n };\n}\n"],"names":["window","HTMLElement","prototype","scrollIntoView"],"mappings":"AAAA,IACE,OAAOA,WAAW,eAClB,OAAOC,YAAYC,SAAS,CAACC,cAAc,KAAK,YAChD;IACA,kDAAkD;IAClDF,YAAYC,SAAS,CAACC,cAAc,GAAG;IACrC,aAAa;IACf;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/test-utils/render.tsx"],"sourcesContent":["import {\n render,\n type Queries,\n type RenderOptions,\n type RenderResult,\n type queries,\n} from \"@testing-library/react\";\nimport { Fragment, type ReactElement } from \"react\";\nimport { CoreProviders, type CoreProvidersProps } from \"../CoreProviders.js\";\n\n/**\n * @since 6.0.0\n */\nexport interface ReactMDRenderOptions<\n Q extends Queries = typeof queries,\n Container extends Element | DocumentFragment = HTMLElement,\n BaseElement extends Element | DocumentFragment = Container,\n> extends RenderOptions<Q, Container, BaseElement> {\n rmdConfig?: Omit<CoreProvidersProps, \"children\">;\n}\n\n/**\n * @since 6.0.0\n */\nexport function rmdRender<\n Q extends Queries = typeof queries,\n Container extends Element | DocumentFragment = HTMLElement,\n BaseElement extends Element | DocumentFragment = Container,\n>(\n ui: ReactElement,\n options: ReactMDRenderOptions<Q, Container, BaseElement> = {}\n): RenderResult<Q, Container, BaseElement> {\n const { wrapper: Wrapper = Fragment, rmdConfig, ...renderOptions } = options;\n\n return render(ui, {\n ...renderOptions,\n wrapper: function ReactMDTestWrapper(props) {\n return (\n <CoreProviders {...rmdConfig}>\n <Wrapper>{props.children}</Wrapper>\n </CoreProviders>\n );\n },\n });\n}\n"],"names":["render","Fragment","CoreProviders","rmdRender","ui","options","wrapper","Wrapper","rmdConfig","renderOptions","ReactMDTestWrapper","props","children"],"rangeMappings":";;;;;;;;;;;;;;;;;;;","mappings":";AAAA,SACEA,MAAM,QAKD,yBAAyB;AAChC,SAASC,QAAQ,QAA2B,QAAQ;AACpD,SAASC,aAAa,QAAiC,sBAAsB;AAa7E;;CAEC,GACD,OAAO,SAASC,UAKdC,EAAgB,EAChBC,UAA2D,CAAC,CAAC;IAE7D,MAAM,EAAEC,SAASC,UAAUN,QAAQ,EAAEO,SAAS,EAAE,GAAGC,eAAe,GAAGJ;IAErE,OAAOL,OAAOI,IAAI;QAChB,GAAGK,aAAa;QAChBH,SAAS,SAASI,mBAAmBC,KAAK;YACxC,qBACE,KAACT;gBAAe,GAAGM,SAAS;0BAC1B,cAAA,KAACD;8BAASI,MAAMC,QAAQ;;;QAG9B;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/test-utils/render.tsx"],"sourcesContent":["import {\n render,\n type Queries,\n type RenderOptions,\n type RenderResult,\n type queries,\n} from \"@testing-library/react\";\nimport { Fragment, type ReactElement } from \"react\";\nimport { CoreProviders, type CoreProvidersProps } from \"../CoreProviders.js\";\n\n/**\n * @since 6.0.0\n */\nexport interface ReactMDRenderOptions<\n Q extends Queries = typeof queries,\n Container extends Element | DocumentFragment = HTMLElement,\n BaseElement extends Element | DocumentFragment = Container,\n> extends RenderOptions<Q, Container, BaseElement> {\n rmdConfig?: Omit<CoreProvidersProps, \"children\">;\n}\n\n/**\n * @since 6.0.0\n */\nexport function rmdRender<\n Q extends Queries = typeof queries,\n Container extends Element | DocumentFragment = HTMLElement,\n BaseElement extends Element | DocumentFragment = Container,\n>(\n ui: ReactElement,\n options: ReactMDRenderOptions<Q, Container, BaseElement> = {}\n): RenderResult<Q, Container, BaseElement> {\n const { wrapper: Wrapper = Fragment, rmdConfig, ...renderOptions } = options;\n\n return render(ui, {\n ...renderOptions,\n wrapper: function ReactMDTestWrapper(props) {\n return (\n <CoreProviders {...rmdConfig}>\n <Wrapper>{props.children}</Wrapper>\n </CoreProviders>\n );\n },\n });\n}\n"],"names":["render","Fragment","CoreProviders","rmdRender","ui","options","wrapper","Wrapper","rmdConfig","renderOptions","ReactMDTestWrapper","props","children"],"mappings":";AAAA,SACEA,MAAM,QAKD,yBAAyB;AAChC,SAASC,QAAQ,QAA2B,QAAQ;AACpD,SAASC,aAAa,QAAiC,sBAAsB;AAa7E;;CAEC,GACD,OAAO,SAASC,UAKdC,EAAgB,EAChBC,UAA2D,CAAC,CAAC;IAE7D,MAAM,EAAEC,SAASC,UAAUN,QAAQ,EAAEO,SAAS,EAAE,GAAGC,eAAe,GAAGJ;IAErE,OAAOL,OAAOI,IAAI;QAChB,GAAGK,aAAa;QAChBH,SAAS,SAASI,mBAAmBC,KAAK;YACxC,qBACE,KAACT;gBAAe,GAAGM,SAAS;0BAC1B,cAAA,KAACD;8BAASI,MAAMC,QAAQ;;;QAG9B;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/test-utils/timers.ts"],"sourcesContent":["import { jest } from \"@jest/globals\";\n\n/**\n * @example\n * ```ts\n * import { useImmediateRaf } from \"@react-md/core/test-utils\";\n *\n * describe(\"some test suite\", () => {\n * it(\"should test something with requestAnimationFrame\", () => {\n * const raf = useImmediateRaf();\n *\n * // do some testing with requestAnimationFrame\n *\n * // reset to original at the end of the test\n * raf.mockRestore()\n * });\n * });\n * ```\n *\n * @example Automatic Cleanup\n * ```ts\n * import { useImmediateRaf } from \"@react-md/core/test-utils\";\n *\n * afterEach(() => {\n * jest.restoreAllMocks();\n * });\n *\n * describe(\"some test suite\", () => {\n * it(\"should test something with requestAnimationFrame\", () => {\n * const raf = useImmediateRaf();\n *\n * // do some testing with requestAnimationFrame\n * });\n * });\n * ```\n *\n * @since 6.0.0\n */\nexport const useImmediateRaf = (): jest.SpiedFunction<\n typeof requestAnimationFrame\n> =>\n jest.spyOn(window, \"requestAnimationFrame\").mockImplementation((cb) => {\n cb(0);\n return 0;\n });\n"],"names":["jest","useImmediateRaf","spyOn","window","mockImplementation","cb"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,SAASA,IAAI,QAAQ,gBAAgB;AAErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCC,GACD,OAAO,MAAMC,kBAAkB,IAG7BD,KAAKE,KAAK,CAACC,QAAQ,yBAAyBC,kBAAkB,CAAC,CAACC;QAC9DA,GAAG;QACH,OAAO;IACT,GAAG"}
1
+ {"version":3,"sources":["../../src/test-utils/timers.ts"],"sourcesContent":["import { jest } from \"@jest/globals\";\n\n/**\n * @example\n * ```ts\n * import { useImmediateRaf } from \"@react-md/core/test-utils\";\n *\n * describe(\"some test suite\", () => {\n * it(\"should test something with requestAnimationFrame\", () => {\n * const raf = useImmediateRaf();\n *\n * // do some testing with requestAnimationFrame\n *\n * // reset to original at the end of the test\n * raf.mockRestore()\n * });\n * });\n * ```\n *\n * @example Automatic Cleanup\n * ```ts\n * import { useImmediateRaf } from \"@react-md/core/test-utils\";\n *\n * afterEach(() => {\n * jest.restoreAllMocks();\n * });\n *\n * describe(\"some test suite\", () => {\n * it(\"should test something with requestAnimationFrame\", () => {\n * const raf = useImmediateRaf();\n *\n * // do some testing with requestAnimationFrame\n * });\n * });\n * ```\n *\n * @since 6.0.0\n */\nexport const useImmediateRaf = (): jest.SpiedFunction<\n typeof requestAnimationFrame\n> =>\n jest.spyOn(window, \"requestAnimationFrame\").mockImplementation((cb) => {\n cb(0);\n return 0;\n });\n"],"names":["jest","useImmediateRaf","spyOn","window","mockImplementation","cb"],"mappings":"AAAA,SAASA,IAAI,QAAQ,gBAAgB;AAErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCC,GACD,OAAO,MAAMC,kBAAkB,IAG7BD,KAAKE,KAAK,CAACC,QAAQ,yBAAyBC,kBAAkB,CAAC,CAACC;QAC9DA,GAAG;QACH,OAAO;IACT,GAAG"}