@mui/material 9.0.0-beta.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/Accordion/Accordion.d.mts +4 -4
  2. package/Accordion/Accordion.d.ts +4 -4
  3. package/AccordionActions/AccordionActions.d.mts +2 -2
  4. package/AccordionActions/AccordionActions.d.ts +2 -2
  5. package/AccordionDetails/AccordionDetails.d.mts +2 -2
  6. package/AccordionDetails/AccordionDetails.d.ts +2 -2
  7. package/AccordionSummary/AccordionSummary.d.mts +3 -3
  8. package/AccordionSummary/AccordionSummary.d.ts +3 -3
  9. package/AccordionSummary/AccordionSummary.js +1 -0
  10. package/AccordionSummary/AccordionSummary.mjs +1 -0
  11. package/Alert/Alert.d.mts +3 -3
  12. package/Alert/Alert.d.ts +3 -3
  13. package/AlertTitle/AlertTitle.d.mts +3 -3
  14. package/AlertTitle/AlertTitle.d.ts +3 -3
  15. package/AppBar/AppBar.d.mts +3 -3
  16. package/AppBar/AppBar.d.ts +3 -3
  17. package/Autocomplete/Autocomplete.d.mts +2 -2
  18. package/Autocomplete/Autocomplete.d.ts +2 -2
  19. package/Avatar/Avatar.d.mts +2 -2
  20. package/Avatar/Avatar.d.ts +2 -2
  21. package/AvatarGroup/AvatarGroup.d.mts +2 -2
  22. package/AvatarGroup/AvatarGroup.d.ts +2 -2
  23. package/Backdrop/Backdrop.d.mts +4 -4
  24. package/Backdrop/Backdrop.d.ts +4 -4
  25. package/Badge/Badge.d.mts +3 -3
  26. package/Badge/Badge.d.ts +3 -3
  27. package/BottomNavigation/BottomNavigation.d.mts +2 -2
  28. package/BottomNavigation/BottomNavigation.d.ts +2 -2
  29. package/BottomNavigationAction/BottomNavigationAction.d.mts +3 -3
  30. package/BottomNavigationAction/BottomNavigationAction.d.ts +3 -3
  31. package/BottomNavigationAction/BottomNavigationAction.js +1 -0
  32. package/BottomNavigationAction/BottomNavigationAction.mjs +1 -0
  33. package/Box/Box.d.mts +3 -3
  34. package/Box/Box.d.ts +3 -3
  35. package/Breadcrumbs/BreadcrumbCollapsed.js +5 -1
  36. package/Breadcrumbs/BreadcrumbCollapsed.mjs +5 -1
  37. package/Breadcrumbs/Breadcrumbs.d.mts +3 -3
  38. package/Breadcrumbs/Breadcrumbs.d.ts +3 -3
  39. package/Button/Button.d.mts +6 -6
  40. package/Button/Button.d.ts +6 -6
  41. package/Button/Button.js +1 -0
  42. package/Button/Button.mjs +1 -0
  43. package/ButtonBase/ButtonBase.d.mts +7 -2
  44. package/ButtonBase/ButtonBase.d.ts +7 -2
  45. package/ButtonBase/ButtonBase.js +84 -85
  46. package/ButtonBase/ButtonBase.mjs +84 -85
  47. package/ButtonBase/useButtonBase.d.mts +91 -0
  48. package/ButtonBase/useButtonBase.d.ts +91 -0
  49. package/ButtonBase/useButtonBase.js +174 -0
  50. package/ButtonBase/useButtonBase.mjs +167 -0
  51. package/ButtonGroup/ButtonGroup.d.mts +2 -2
  52. package/ButtonGroup/ButtonGroup.d.ts +2 -2
  53. package/CHANGELOG.md +76 -0
  54. package/Card/Card.d.mts +3 -3
  55. package/Card/Card.d.ts +3 -3
  56. package/CardActionArea/CardActionArea.d.mts +3 -3
  57. package/CardActionArea/CardActionArea.d.ts +3 -3
  58. package/CardActionArea/CardActionArea.js +1 -0
  59. package/CardActionArea/CardActionArea.mjs +1 -0
  60. package/CardActions/CardActions.d.mts +2 -2
  61. package/CardActions/CardActions.d.ts +2 -2
  62. package/CardContent/CardContent.d.mts +2 -2
  63. package/CardContent/CardContent.d.ts +2 -2
  64. package/CardHeader/CardHeader.d.mts +2 -2
  65. package/CardHeader/CardHeader.d.ts +2 -2
  66. package/CardMedia/CardMedia.d.mts +2 -2
  67. package/CardMedia/CardMedia.d.ts +2 -2
  68. package/Checkbox/Checkbox.d.mts +4 -4
  69. package/Checkbox/Checkbox.d.ts +4 -4
  70. package/Chip/Chip.d.mts +9 -2
  71. package/Chip/Chip.d.ts +9 -2
  72. package/Chip/Chip.js +18 -1
  73. package/Chip/Chip.mjs +18 -1
  74. package/CircularProgress/CircularProgress.d.mts +2 -2
  75. package/CircularProgress/CircularProgress.d.ts +2 -2
  76. package/ClickAwayListener/ClickAwayListener.d.mts +3 -3
  77. package/ClickAwayListener/ClickAwayListener.d.ts +3 -3
  78. package/ClickAwayListener/ClickAwayListener.js +3 -3
  79. package/ClickAwayListener/ClickAwayListener.mjs +3 -3
  80. package/Collapse/Collapse.d.mts +5 -5
  81. package/Collapse/Collapse.d.ts +5 -5
  82. package/Collapse/Collapse.js +6 -18
  83. package/Collapse/Collapse.mjs +7 -19
  84. package/Container/Container.d.mts +2 -2
  85. package/Container/Container.d.ts +2 -2
  86. package/CssBaseline/CssBaseline.d.mts +2 -2
  87. package/CssBaseline/CssBaseline.d.ts +2 -2
  88. package/Dialog/Dialog.d.mts +11 -4
  89. package/Dialog/Dialog.d.ts +11 -4
  90. package/Dialog/Dialog.js +9 -1
  91. package/Dialog/Dialog.mjs +9 -1
  92. package/DialogActions/DialogActions.d.mts +2 -2
  93. package/DialogActions/DialogActions.d.ts +2 -2
  94. package/DialogContent/DialogContent.d.mts +2 -2
  95. package/DialogContent/DialogContent.d.ts +2 -2
  96. package/DialogContentText/DialogContentText.d.mts +3 -3
  97. package/DialogContentText/DialogContentText.d.ts +3 -3
  98. package/DialogTitle/DialogTitle.d.mts +3 -3
  99. package/DialogTitle/DialogTitle.d.ts +3 -3
  100. package/Divider/Divider.d.mts +4 -4
  101. package/Divider/Divider.d.ts +4 -4
  102. package/Divider/Divider.js +0 -8
  103. package/Divider/Divider.mjs +0 -8
  104. package/Drawer/Drawer.d.mts +4 -4
  105. package/Drawer/Drawer.d.ts +4 -4
  106. package/Drawer/Drawer.js +1 -4
  107. package/Drawer/Drawer.mjs +1 -4
  108. package/Fab/Fab.d.mts +3 -3
  109. package/Fab/Fab.d.ts +3 -3
  110. package/Fab/Fab.js +1 -0
  111. package/Fab/Fab.mjs +1 -0
  112. package/Fade/Fade.d.mts +3 -3
  113. package/Fade/Fade.d.ts +3 -3
  114. package/Fade/Fade.js +28 -32
  115. package/Fade/Fade.mjs +29 -33
  116. package/FilledInput/FilledInput.d.mts +3 -3
  117. package/FilledInput/FilledInput.d.ts +3 -3
  118. package/FilledInput/FilledInput.js +1 -1
  119. package/FilledInput/FilledInput.mjs +1 -1
  120. package/FormControl/FormControl.d.mts +7 -7
  121. package/FormControl/FormControl.d.ts +7 -7
  122. package/FormControlLabel/FormControlLabel.d.mts +4 -4
  123. package/FormControlLabel/FormControlLabel.d.ts +4 -4
  124. package/FormGroup/FormGroup.d.mts +3 -3
  125. package/FormGroup/FormGroup.d.ts +3 -3
  126. package/FormHelperText/FormHelperText.d.mts +3 -3
  127. package/FormHelperText/FormHelperText.d.ts +3 -3
  128. package/FormLabel/FormLabel.d.mts +5 -5
  129. package/FormLabel/FormLabel.d.ts +5 -5
  130. package/GlobalStyles/GlobalStyles.d.mts +2 -2
  131. package/GlobalStyles/GlobalStyles.d.ts +2 -2
  132. package/Grid/Grid.d.mts +10 -5
  133. package/Grid/Grid.d.ts +10 -5
  134. package/Grid/Grid.js +10 -5
  135. package/Grid/Grid.mjs +10 -5
  136. package/Grid/gridClasses.js +1 -1
  137. package/Grid/gridClasses.mjs +1 -1
  138. package/Grow/Grow.d.mts +5 -5
  139. package/Grow/Grow.d.ts +5 -5
  140. package/Grow/Grow.js +30 -38
  141. package/Grow/Grow.mjs +31 -39
  142. package/Icon/Icon.d.mts +3 -3
  143. package/Icon/Icon.d.ts +3 -3
  144. package/IconButton/IconButton.d.mts +5 -5
  145. package/IconButton/IconButton.d.ts +5 -5
  146. package/IconButton/IconButton.js +1 -0
  147. package/IconButton/IconButton.mjs +1 -0
  148. package/ImageList/ImageList.d.mts +2 -2
  149. package/ImageList/ImageList.d.ts +2 -2
  150. package/ImageListItem/ImageListItem.d.mts +2 -2
  151. package/ImageListItem/ImageListItem.d.ts +2 -2
  152. package/ImageListItemBar/ImageListItemBar.d.mts +2 -2
  153. package/ImageListItemBar/ImageListItemBar.d.ts +2 -2
  154. package/InitColorSchemeScript/InitColorSchemeScript.d.mts +2 -2
  155. package/InitColorSchemeScript/InitColorSchemeScript.d.ts +2 -2
  156. package/InitColorSchemeScript/InitColorSchemeScript.js +2 -2
  157. package/InitColorSchemeScript/InitColorSchemeScript.mjs +2 -2
  158. package/Input/Input.d.mts +3 -3
  159. package/Input/Input.d.ts +3 -3
  160. package/Input/Input.js +1 -1
  161. package/Input/Input.mjs +1 -1
  162. package/InputAdornment/InputAdornment.d.mts +2 -2
  163. package/InputAdornment/InputAdornment.d.ts +2 -2
  164. package/InputAdornment/inputAdornmentClasses.d.mts +2 -2
  165. package/InputAdornment/inputAdornmentClasses.d.ts +2 -2
  166. package/InputBase/InputBase.d.mts +2 -2
  167. package/InputBase/InputBase.d.ts +2 -2
  168. package/InputLabel/InputLabel.d.mts +4 -4
  169. package/InputLabel/InputLabel.d.ts +4 -4
  170. package/LinearProgress/LinearProgress.d.mts +2 -2
  171. package/LinearProgress/LinearProgress.d.ts +2 -2
  172. package/Link/Link.d.mts +4 -4
  173. package/Link/Link.d.ts +4 -4
  174. package/List/List.d.mts +4 -4
  175. package/List/List.d.ts +4 -4
  176. package/ListItem/ListItem.d.mts +3 -3
  177. package/ListItem/ListItem.d.ts +3 -3
  178. package/ListItem/ListItem.js +1 -2
  179. package/ListItem/ListItem.mjs +1 -2
  180. package/ListItemAvatar/ListItemAvatar.d.mts +2 -2
  181. package/ListItemAvatar/ListItemAvatar.d.ts +2 -2
  182. package/ListItemButton/ListItemButton.d.mts +4 -4
  183. package/ListItemButton/ListItemButton.d.ts +4 -4
  184. package/ListItemButton/ListItemButton.js +1 -0
  185. package/ListItemButton/ListItemButton.mjs +1 -0
  186. package/ListItemIcon/ListItemIcon.d.mts +3 -3
  187. package/ListItemIcon/ListItemIcon.d.ts +3 -3
  188. package/ListItemIcon/ListItemIcon.js +1 -1
  189. package/ListItemIcon/ListItemIcon.mjs +1 -1
  190. package/ListItemSecondaryAction/ListItemSecondaryAction.d.mts +2 -2
  191. package/ListItemSecondaryAction/ListItemSecondaryAction.d.ts +2 -2
  192. package/ListItemText/ListItemText.d.mts +3 -3
  193. package/ListItemText/ListItemText.d.ts +3 -3
  194. package/ListSubheader/ListSubheader.d.mts +3 -3
  195. package/ListSubheader/ListSubheader.d.ts +3 -3
  196. package/ListSubheader/ListSubheader.js +0 -3
  197. package/ListSubheader/ListSubheader.mjs +0 -3
  198. package/Menu/Menu.d.mts +5 -5
  199. package/Menu/Menu.d.ts +5 -5
  200. package/Menu/Menu.js +15 -32
  201. package/Menu/Menu.mjs +15 -32
  202. package/MenuItem/MenuItem.d.mts +3 -3
  203. package/MenuItem/MenuItem.d.ts +3 -3
  204. package/MenuItem/MenuItem.js +36 -26
  205. package/MenuItem/MenuItem.mjs +34 -26
  206. package/MenuList/MenuList.d.mts +4 -4
  207. package/MenuList/MenuList.d.ts +4 -4
  208. package/MenuList/MenuList.js +136 -101
  209. package/MenuList/MenuList.mjs +135 -100
  210. package/MenuList/MenuListContext.d.mts +11 -0
  211. package/MenuList/MenuListContext.d.ts +11 -0
  212. package/MenuList/MenuListContext.js +25 -0
  213. package/MenuList/MenuListContext.mjs +19 -0
  214. package/MobileStepper/MobileStepper.d.mts +3 -3
  215. package/MobileStepper/MobileStepper.d.ts +3 -3
  216. package/Modal/Modal.d.mts +7 -7
  217. package/Modal/Modal.d.ts +7 -7
  218. package/NativeSelect/NativeSelect.d.mts +3 -3
  219. package/NativeSelect/NativeSelect.d.ts +3 -3
  220. package/NoSsr/NoSsr.d.mts +2 -2
  221. package/NoSsr/NoSsr.d.ts +2 -2
  222. package/NoSsr/NoSsr.js +2 -2
  223. package/NoSsr/NoSsr.mjs +2 -2
  224. package/OutlinedInput/OutlinedInput.d.mts +4 -4
  225. package/OutlinedInput/OutlinedInput.d.ts +4 -4
  226. package/Pagination/Pagination.d.mts +2 -2
  227. package/Pagination/Pagination.d.ts +2 -2
  228. package/PaginationItem/PaginationItem.d.mts +8 -3
  229. package/PaginationItem/PaginationItem.d.ts +8 -3
  230. package/PaginationItem/PaginationItem.js +6 -0
  231. package/PaginationItem/PaginationItem.mjs +6 -0
  232. package/Paper/Paper.d.mts +4 -4
  233. package/Paper/Paper.d.ts +4 -4
  234. package/PigmentContainer/PigmentContainer.d.mts +2 -2
  235. package/PigmentContainer/PigmentContainer.d.ts +2 -2
  236. package/PigmentContainer/PigmentContainer.js +2 -2
  237. package/PigmentContainer/PigmentContainer.mjs +2 -2
  238. package/PigmentGrid/PigmentGrid.d.mts +3 -3
  239. package/PigmentGrid/PigmentGrid.d.ts +3 -3
  240. package/PigmentGrid/PigmentGrid.js +3 -3
  241. package/PigmentGrid/PigmentGrid.mjs +3 -3
  242. package/PigmentStack/PigmentStack.d.mts +2 -2
  243. package/PigmentStack/PigmentStack.d.ts +2 -2
  244. package/PigmentStack/PigmentStack.js +2 -2
  245. package/PigmentStack/PigmentStack.mjs +2 -2
  246. package/Popover/Popover.d.mts +5 -5
  247. package/Popover/Popover.d.ts +5 -5
  248. package/Popover/Popover.js +19 -7
  249. package/Popover/Popover.mjs +18 -6
  250. package/Popper/Popper.d.mts +4 -4
  251. package/Popper/Popper.d.ts +4 -4
  252. package/Popper/Popper.js +4 -4
  253. package/Popper/Popper.mjs +4 -4
  254. package/Portal/Portal.d.mts +2 -2
  255. package/Portal/Portal.d.ts +2 -2
  256. package/Portal/Portal.js +2 -2
  257. package/Portal/Portal.mjs +2 -2
  258. package/README.md +3 -3
  259. package/Radio/Radio.d.mts +3 -3
  260. package/Radio/Radio.d.ts +3 -3
  261. package/RadioGroup/RadioGroup.d.mts +3 -3
  262. package/RadioGroup/RadioGroup.d.ts +3 -3
  263. package/Rating/Rating.d.mts +2 -2
  264. package/Rating/Rating.d.ts +2 -2
  265. package/ScopedCssBaseline/ScopedCssBaseline.d.mts +2 -2
  266. package/ScopedCssBaseline/ScopedCssBaseline.d.ts +2 -2
  267. package/Select/Select.d.mts +3 -3
  268. package/Select/Select.d.ts +3 -3
  269. package/Skeleton/Skeleton.d.mts +2 -2
  270. package/Skeleton/Skeleton.d.ts +2 -2
  271. package/Slide/Slide.d.mts +4 -4
  272. package/Slide/Slide.d.ts +4 -4
  273. package/Slide/Slide.js +43 -42
  274. package/Slide/Slide.mjs +44 -44
  275. package/Slider/Slider.d.mts +4 -4
  276. package/Slider/Slider.d.ts +4 -4
  277. package/Slider/Slider.js +1 -1
  278. package/Slider/Slider.mjs +1 -1
  279. package/Slider/useSlider.d.mts +1 -1
  280. package/Slider/useSlider.d.ts +1 -1
  281. package/Slider/useSlider.js +235 -209
  282. package/Slider/useSlider.mjs +235 -209
  283. package/Slider/useSlider.types.d.mts +2 -2
  284. package/Slider/useSlider.types.d.ts +2 -2
  285. package/Snackbar/Snackbar.d.mts +3 -3
  286. package/Snackbar/Snackbar.d.ts +3 -3
  287. package/SnackbarContent/SnackbarContent.d.mts +3 -3
  288. package/SnackbarContent/SnackbarContent.d.ts +3 -3
  289. package/SpeedDial/SpeedDial.d.mts +3 -3
  290. package/SpeedDial/SpeedDial.d.ts +3 -3
  291. package/SpeedDialAction/SpeedDialAction.d.mts +3 -3
  292. package/SpeedDialAction/SpeedDialAction.d.ts +3 -3
  293. package/SpeedDialIcon/SpeedDialIcon.d.mts +2 -2
  294. package/SpeedDialIcon/SpeedDialIcon.d.ts +2 -2
  295. package/Stack/Stack.d.mts +2 -2
  296. package/Stack/Stack.d.ts +2 -2
  297. package/Step/Step.d.mts +2 -2
  298. package/Step/Step.d.ts +2 -2
  299. package/StepButton/StepButton.d.mts +3 -3
  300. package/StepButton/StepButton.d.ts +3 -3
  301. package/StepButton/StepButton.js +44 -14
  302. package/StepButton/StepButton.mjs +44 -14
  303. package/StepConnector/StepConnector.d.mts +2 -2
  304. package/StepConnector/StepConnector.d.ts +2 -2
  305. package/StepConnector/StepConnector.js +1 -2
  306. package/StepConnector/StepConnector.mjs +1 -2
  307. package/StepContent/StepContent.d.mts +3 -3
  308. package/StepContent/StepContent.d.ts +3 -3
  309. package/StepIcon/StepIcon.d.mts +3 -3
  310. package/StepIcon/StepIcon.d.ts +3 -3
  311. package/StepLabel/StepLabel.d.mts +2 -2
  312. package/StepLabel/StepLabel.d.ts +2 -2
  313. package/Stepper/Stepper.d.mts +2 -2
  314. package/Stepper/Stepper.d.ts +2 -2
  315. package/Stepper/Stepper.js +54 -22
  316. package/Stepper/Stepper.mjs +54 -22
  317. package/Stepper/StepperContext.d.mts +0 -5
  318. package/Stepper/StepperContext.d.ts +0 -5
  319. package/Stepper/StepperContext.js +1 -2
  320. package/Stepper/StepperContext.mjs +0 -1
  321. package/SvgIcon/SvgIcon.d.mts +3 -3
  322. package/SvgIcon/SvgIcon.d.ts +3 -3
  323. package/SwipeableDrawer/SwipeableDrawer.d.mts +3 -3
  324. package/SwipeableDrawer/SwipeableDrawer.d.ts +3 -3
  325. package/SwipeableDrawer/SwipeableDrawer.js +0 -3
  326. package/SwipeableDrawer/SwipeableDrawer.mjs +0 -3
  327. package/Switch/Switch.d.mts +4 -4
  328. package/Switch/Switch.d.ts +4 -4
  329. package/Switch/Switch.js +4 -0
  330. package/Switch/Switch.mjs +4 -0
  331. package/Tab/Tab.d.mts +3 -3
  332. package/Tab/Tab.d.ts +3 -3
  333. package/Tab/Tab.js +17 -1
  334. package/Tab/Tab.mjs +17 -1
  335. package/TabScrollButton/TabScrollButton.d.mts +3 -3
  336. package/TabScrollButton/TabScrollButton.d.ts +3 -3
  337. package/TabScrollButton/TabScrollButton.js +6 -2
  338. package/TabScrollButton/TabScrollButton.mjs +6 -2
  339. package/Table/Table.d.mts +2 -2
  340. package/Table/Table.d.ts +2 -2
  341. package/TableBody/TableBody.d.mts +2 -2
  342. package/TableBody/TableBody.d.ts +2 -2
  343. package/TableCell/TableCell.d.mts +2 -2
  344. package/TableCell/TableCell.d.ts +2 -2
  345. package/TableContainer/TableContainer.d.mts +2 -2
  346. package/TableContainer/TableContainer.d.ts +2 -2
  347. package/TableFooter/TableFooter.d.mts +2 -2
  348. package/TableFooter/TableFooter.d.ts +2 -2
  349. package/TableHead/TableHead.d.mts +2 -2
  350. package/TableHead/TableHead.d.ts +2 -2
  351. package/TablePagination/TablePagination.d.mts +4 -4
  352. package/TablePagination/TablePagination.d.ts +4 -4
  353. package/TablePaginationActions/TablePaginationActions.d.mts +2 -2
  354. package/TablePaginationActions/TablePaginationActions.d.ts +2 -2
  355. package/TableRow/TableRow.d.mts +2 -2
  356. package/TableRow/TableRow.d.ts +2 -2
  357. package/TableSortLabel/TableSortLabel.d.mts +3 -3
  358. package/TableSortLabel/TableSortLabel.d.ts +3 -3
  359. package/TableSortLabel/TableSortLabel.js +5 -3
  360. package/TableSortLabel/TableSortLabel.mjs +5 -3
  361. package/Tabs/Tabs.d.mts +2 -2
  362. package/Tabs/Tabs.d.ts +2 -2
  363. package/Tabs/Tabs.js +30 -21
  364. package/Tabs/Tabs.mjs +29 -20
  365. package/TextField/TextField.d.mts +10 -10
  366. package/TextField/TextField.d.ts +10 -10
  367. package/TextareaAutosize/TextareaAutosize.d.mts +2 -2
  368. package/TextareaAutosize/TextareaAutosize.d.ts +2 -2
  369. package/TextareaAutosize/TextareaAutosize.js +2 -2
  370. package/TextareaAutosize/TextareaAutosize.mjs +2 -2
  371. package/ToggleButton/ToggleButton.d.mts +3 -3
  372. package/ToggleButton/ToggleButton.d.ts +3 -3
  373. package/ToggleButton/ToggleButton.js +1 -0
  374. package/ToggleButton/ToggleButton.mjs +1 -0
  375. package/ToggleButtonGroup/ToggleButtonGroup.d.mts +2 -2
  376. package/ToggleButtonGroup/ToggleButtonGroup.d.ts +2 -2
  377. package/Toolbar/Toolbar.d.mts +2 -2
  378. package/Toolbar/Toolbar.d.ts +2 -2
  379. package/Tooltip/Tooltip.d.mts +3 -3
  380. package/Tooltip/Tooltip.d.ts +3 -3
  381. package/Typography/Typography.d.mts +4 -4
  382. package/Typography/Typography.d.ts +4 -4
  383. package/Zoom/Zoom.d.mts +3 -3
  384. package/Zoom/Zoom.d.ts +3 -3
  385. package/Zoom/Zoom.js +24 -30
  386. package/Zoom/Zoom.mjs +25 -31
  387. package/index.js +1 -1
  388. package/index.mjs +1 -1
  389. package/internal/SwitchBase.d.mts +2 -2
  390. package/internal/SwitchBase.d.ts +2 -2
  391. package/internal/SwitchBase.js +5 -1
  392. package/internal/SwitchBase.mjs +5 -1
  393. package/locale/psAF.js +1 -1
  394. package/locale/psAF.mjs +1 -1
  395. package/package.json +51 -51
  396. package/styles/createThemeNoVars.js +1 -1
  397. package/styles/createThemeNoVars.mjs +1 -1
  398. package/styles/createThemeWithVars.js +9 -9
  399. package/styles/createThemeWithVars.mjs +9 -9
  400. package/transitions/utils.d.mts +7 -0
  401. package/transitions/utils.d.ts +7 -0
  402. package/transitions/utils.js +27 -0
  403. package/transitions/utils.mjs +25 -0
  404. package/useAutocomplete/useAutocomplete.js +8 -0
  405. package/useAutocomplete/useAutocomplete.mjs +8 -0
  406. package/utils/focusWithVisible.js +24 -0
  407. package/utils/focusWithVisible.mjs +19 -0
  408. package/utils/index.d.mts +0 -1
  409. package/utils/index.d.ts +0 -1
  410. package/utils/index.js +0 -7
  411. package/utils/index.mjs +0 -1
  412. package/utils/useFocusableWhenDisabled.d.mts +30 -0
  413. package/utils/useFocusableWhenDisabled.d.ts +30 -0
  414. package/utils/useFocusableWhenDisabled.js +47 -0
  415. package/utils/useFocusableWhenDisabled.mjs +41 -0
  416. package/utils/useRovingTabIndex.d.mts +1 -2
  417. package/utils/useRovingTabIndex.d.ts +1 -2
  418. package/utils/useRovingTabIndex.js +25 -4
  419. package/utils/useRovingTabIndex.mjs +1 -2
  420. package/version/index.js +2 -2
  421. package/version/index.mjs +2 -2
@@ -80,12 +80,12 @@ export interface BreadcrumbsTypeMap<AdditionalProps = {}, RootComponent extends
80
80
  *
81
81
  * Demos:
82
82
  *
83
- * - [Breadcrumbs](https://next.mui.com/material-ui/react-breadcrumbs/)
83
+ * - [Breadcrumbs](https://mui.com/material-ui/react-breadcrumbs/)
84
84
  *
85
85
  * API:
86
86
  *
87
- * - [Breadcrumbs API](https://next.mui.com/material-ui/api/breadcrumbs/)
88
- * - inherits [Typography API](https://next.mui.com/material-ui/api/typography/)
87
+ * - [Breadcrumbs API](https://mui.com/material-ui/api/breadcrumbs/)
88
+ * - inherits [Typography API](https://mui.com/material-ui/api/typography/)
89
89
  */
90
90
  declare const Breadcrumbs: OverridableComponent<BreadcrumbsTypeMap>;
91
91
  export type BreadcrumbsProps<RootComponent extends React.ElementType = BreadcrumbsTypeMap['defaultComponent'], AdditionalProps = {}> = OverrideProps<BreadcrumbsTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
@@ -115,15 +115,15 @@ export type ExtendButton<TypeMap extends OverridableTypeMap> = ((props: {
115
115
  *
116
116
  * Demos:
117
117
  *
118
- * - [Button Group](https://next.mui.com/material-ui/react-button-group/)
119
- * - [Button](https://next.mui.com/material-ui/react-button/)
120
- * - [Menubar](https://next.mui.com/material-ui/react-menubar/)
121
- * - [Number Field](https://next.mui.com/material-ui/react-number-field/)
118
+ * - [Button Group](https://mui.com/material-ui/react-button-group/)
119
+ * - [Button](https://mui.com/material-ui/react-button/)
120
+ * - [Menubar](https://mui.com/material-ui/react-menubar/)
121
+ * - [Number Field](https://mui.com/material-ui/react-number-field/)
122
122
  *
123
123
  * API:
124
124
  *
125
- * - [Button API](https://next.mui.com/material-ui/api/button/)
126
- * - inherits [ButtonBase API](https://next.mui.com/material-ui/api/button-base/)
125
+ * - [Button API](https://mui.com/material-ui/api/button/)
126
+ * - inherits [ButtonBase API](https://mui.com/material-ui/api/button-base/)
127
127
  */
128
128
  declare const Button: ExtendButtonBase<ButtonTypeMap>;
129
129
  export type ButtonProps<RootComponent extends React.ElementType = ButtonTypeMap['defaultComponent'], AdditionalProps = {}> = OverrideProps<ButtonTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
@@ -115,15 +115,15 @@ export type ExtendButton<TypeMap extends OverridableTypeMap> = ((props: {
115
115
  *
116
116
  * Demos:
117
117
  *
118
- * - [Button Group](https://next.mui.com/material-ui/react-button-group/)
119
- * - [Button](https://next.mui.com/material-ui/react-button/)
120
- * - [Menubar](https://next.mui.com/material-ui/react-menubar/)
121
- * - [Number Field](https://next.mui.com/material-ui/react-number-field/)
118
+ * - [Button Group](https://mui.com/material-ui/react-button-group/)
119
+ * - [Button](https://mui.com/material-ui/react-button/)
120
+ * - [Menubar](https://mui.com/material-ui/react-menubar/)
121
+ * - [Number Field](https://mui.com/material-ui/react-number-field/)
122
122
  *
123
123
  * API:
124
124
  *
125
- * - [Button API](https://next.mui.com/material-ui/api/button/)
126
- * - inherits [ButtonBase API](https://next.mui.com/material-ui/api/button-base/)
125
+ * - [Button API](https://mui.com/material-ui/api/button/)
126
+ * - inherits [ButtonBase API](https://mui.com/material-ui/api/button-base/)
127
127
  */
128
128
  declare const Button: ExtendButtonBase<ButtonTypeMap>;
129
129
  export type ButtonProps<RootComponent extends React.ElementType = ButtonTypeMap['defaultComponent'], AdditionalProps = {}> = OverrideProps<ButtonTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
package/Button/Button.js CHANGED
@@ -566,6 +566,7 @@ const Button = /*#__PURE__*/React.forwardRef(function Button(inProps, ref) {
566
566
  focusRipple: !disableFocusRipple,
567
567
  focusVisibleClassName: (0, _clsx.default)(classes.focusVisible, focusVisibleClassName),
568
568
  ref: ref,
569
+ internalNativeButton: true,
569
570
  type: type,
570
571
  id: loading ? loadingId : idProp,
571
572
  ...other,
package/Button/Button.mjs CHANGED
@@ -559,6 +559,7 @@ const Button = /*#__PURE__*/React.forwardRef(function Button(inProps, ref) {
559
559
  focusRipple: !disableFocusRipple,
560
560
  focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),
561
561
  ref: ref,
562
+ internalNativeButton: true,
562
563
  type: type,
563
564
  id: loading ? loadingId : idProp,
564
565
  ...other,
@@ -62,6 +62,11 @@ export interface ButtonBaseOwnProps {
62
62
  * @default 'a'
63
63
  */
64
64
  LinkComponent?: React.ElementType | undefined;
65
+ /**
66
+ * Whether the custom component is expected to render a native `<button>` element
67
+ * when passing a React component to the `component` or `slots` prop.
68
+ */
69
+ nativeButton?: boolean | undefined;
65
70
  /**
66
71
  * Callback fired when the component is focused with a keyboard.
67
72
  * We trigger a `onFocus` callback too.
@@ -109,11 +114,11 @@ export type ExtendButtonBase<TypeMap extends OverridableTypeMap> = ((props: {
109
114
  *
110
115
  * Demos:
111
116
  *
112
- * - [Button](https://next.mui.com/material-ui/react-button/)
117
+ * - [Button](https://mui.com/material-ui/react-button/)
113
118
  *
114
119
  * API:
115
120
  *
116
- * - [ButtonBase API](https://next.mui.com/material-ui/api/button-base/)
121
+ * - [ButtonBase API](https://mui.com/material-ui/api/button-base/)
117
122
  */
118
123
  declare const ButtonBase: ExtendButtonBase<ButtonBaseTypeMap>;
119
124
  export type ButtonBaseProps<RootComponent extends React.ElementType = ButtonBaseTypeMap['defaultComponent'], AdditionalProps = {}> = OverrideProps<ButtonBaseTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
@@ -62,6 +62,11 @@ export interface ButtonBaseOwnProps {
62
62
  * @default 'a'
63
63
  */
64
64
  LinkComponent?: React.ElementType | undefined;
65
+ /**
66
+ * Whether the custom component is expected to render a native `<button>` element
67
+ * when passing a React component to the `component` or `slots` prop.
68
+ */
69
+ nativeButton?: boolean | undefined;
65
70
  /**
66
71
  * Callback fired when the component is focused with a keyboard.
67
72
  * We trigger a `onFocus` callback too.
@@ -109,11 +114,11 @@ export type ExtendButtonBase<TypeMap extends OverridableTypeMap> = ((props: {
109
114
  *
110
115
  * Demos:
111
116
  *
112
- * - [Button](https://next.mui.com/material-ui/react-button/)
117
+ * - [Button](https://mui.com/material-ui/react-button/)
113
118
  *
114
119
  * API:
115
120
  *
116
- * - [ButtonBase API](https://next.mui.com/material-ui/api/button-base/)
121
+ * - [ButtonBase API](https://mui.com/material-ui/api/button-base/)
117
122
  */
118
123
  declare const ButtonBase: ExtendButtonBase<ButtonBaseTypeMap>;
119
124
  export type ButtonBaseProps<RootComponent extends React.ElementType = ButtonBaseTypeMap['defaultComponent'], AdditionalProps = {}> = OverrideProps<ButtonBaseTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
@@ -18,6 +18,7 @@ var _zeroStyled = require("../zero-styled");
18
18
  var _DefaultPropsProvider = require("../DefaultPropsProvider");
19
19
  var _useForkRef = _interopRequireDefault(require("../utils/useForkRef"));
20
20
  var _useEventCallback = _interopRequireDefault(require("../utils/useEventCallback"));
21
+ var _useButtonBase = _interopRequireDefault(require("./useButtonBase"));
21
22
  var _useLazyRipple = _interopRequireDefault(require("../useLazyRipple"));
22
23
  var _TouchRipple = _interopRequireDefault(require("./TouchRipple"));
23
24
  var _buttonBaseClasses = _interopRequireWildcard(require("./buttonBaseClasses"));
@@ -27,13 +28,14 @@ const useUtilityClasses = ownerState => {
27
28
  disabled,
28
29
  focusVisible,
29
30
  focusVisibleClassName,
31
+ suppressFocusVisible,
30
32
  classes
31
33
  } = ownerState;
32
34
  const slots = {
33
- root: ['root', disabled && 'disabled', focusVisible && 'focusVisible']
35
+ root: ['root', disabled && 'disabled', focusVisible && !suppressFocusVisible && 'focusVisible']
34
36
  };
35
37
  const composedClasses = (0, _composeClasses.default)(slots, _buttonBaseClasses.getButtonBaseUtilityClass, classes);
36
- if (focusVisible && focusVisibleClassName) {
38
+ if (focusVisible && !suppressFocusVisible && focusVisibleClassName) {
37
39
  composedClasses.root += ` ${focusVisibleClassName}`;
38
40
  }
39
41
  return composedClasses;
@@ -102,15 +104,25 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
102
104
  disableTouchRipple = false,
103
105
  focusRipple = false,
104
106
  focusVisibleClassName,
107
+ /* eslint-disable react/prop-types */
108
+ // replaces internal handling in Chip, other components can opt-in individually to use this in the future
109
+ focusableWhenDisabled,
110
+ // escape hatch to suppress the focusVisible state and callback
111
+ // used by anchored <Menu>s to to suppress focus visible styling when opened with a pointer
112
+ suppressFocusVisible = false,
113
+ // private prop to allow native vs non-native button props to be resolved before mount
114
+ internalNativeButton: internalNativeButtonProp,
115
+ /* eslint-enable react/prop-types */
105
116
  LinkComponent = 'a',
117
+ nativeButton: nativeButtonProp,
106
118
  onBlur,
107
- onClick,
119
+ onClick: onClickProp,
108
120
  onContextMenu,
109
121
  onDragLeave,
110
122
  onFocus,
111
123
  onFocusVisible,
112
- onKeyDown,
113
- onKeyUp,
124
+ onKeyDown: onKeyDownProp,
125
+ onKeyUp: onKeyUpProp,
114
126
  onMouseDown,
115
127
  onMouseLeave,
116
128
  onMouseUp,
@@ -123,19 +135,68 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
123
135
  type,
124
136
  ...other
125
137
  } = props;
126
- const buttonRef = React.useRef(null);
138
+ const isLink = Boolean(other.href || other.to);
139
+ const hasFormAction = Boolean(other.formAction);
140
+ let ComponentProp = component;
141
+ if (ComponentProp === 'button' && isLink) {
142
+ ComponentProp = LinkComponent;
143
+ }
144
+ const internalNativeButton = typeof ComponentProp === 'string' ? ComponentProp === 'button' : internalNativeButtonProp ?? false;
145
+ const nativeButton = nativeButtonProp ?? internalNativeButton;
127
146
  const ripple = (0, _useLazyRipple.default)();
128
147
  const handleRippleRef = (0, _useForkRef.default)(ripple.ref, touchRippleRef);
129
148
  const [focusVisible, setFocusVisible] = React.useState(false);
130
- if (disabled && focusVisible) {
149
+ if ((disabled || suppressFocusVisible) && focusVisible) {
131
150
  setFocusVisible(false);
132
151
  }
152
+ const handleBeforeKeyDown = (0, _useEventCallback.default)(event => {
153
+ // Check if key is already down to avoid repeats being counted as multiple activations
154
+ if (focusRipple && !event.repeat && focusVisible && event.key === ' ') {
155
+ ripple.stop(event, () => {
156
+ ripple.start(event);
157
+ });
158
+ }
159
+ });
160
+ const handleBeforeKeyUp = (0, _useEventCallback.default)(event => {
161
+ // calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed
162
+ // https://codesandbox.io/p/sandbox/button-keyup-preventdefault-dn7f0
163
+ if (focusRipple && event.key === ' ' && focusVisible && !event.defaultPrevented) {
164
+ ripple.stop(event, () => {
165
+ ripple.pulsate(event);
166
+ });
167
+ }
168
+ });
169
+ const {
170
+ getButtonProps,
171
+ rootRef: buttonRef
172
+ } = (0, _useButtonBase.default)({
173
+ nativeButton,
174
+ nativeButtonProp,
175
+ internalNativeButton,
176
+ allowInferredHostMismatch: isLink || typeof ComponentProp === 'string',
177
+ disabled,
178
+ type,
179
+ hasFormAction,
180
+ tabIndex,
181
+ onBeforeKeyDown: handleBeforeKeyDown,
182
+ onBeforeKeyUp: handleBeforeKeyUp
183
+ });
184
+ const {
185
+ onClick,
186
+ onKeyDown,
187
+ onKeyUp,
188
+ ...buttonProps
189
+ } = getButtonProps({
190
+ onClick: onClickProp,
191
+ onKeyDown: onKeyDownProp,
192
+ onKeyUp: onKeyUpProp
193
+ });
133
194
  React.useImperativeHandle(action, () => ({
134
195
  focusVisible: () => {
135
196
  setFocusVisible(true);
136
197
  buttonRef.current.focus();
137
198
  }
138
- }), []);
199
+ }), [buttonRef]);
139
200
  const enableTouchRipple = ripple.shouldMount && !disableRipple && !disabled;
140
201
  React.useEffect(() => {
141
202
  if (focusVisible && focusRipple && !disableRipple) {
@@ -170,7 +231,7 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
170
231
  if (!buttonRef.current) {
171
232
  buttonRef.current = event.currentTarget;
172
233
  }
173
- if ((0, _isFocusVisible.default)(event.target)) {
234
+ if (!suppressFocusVisible && (0, _isFocusVisible.default)(event.target)) {
174
235
  setFocusVisible(true);
175
236
  if (onFocusVisible) {
176
237
  onFocusVisible(event);
@@ -180,79 +241,13 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
180
241
  onFocus(event);
181
242
  }
182
243
  });
183
- const isNonNativeButton = () => {
184
- const button = buttonRef.current;
185
- if (!button) {
186
- return component && component !== 'button';
187
- }
188
- if (button.tagName === 'BUTTON') {
189
- return false;
190
- }
191
- return !(button.tagName === 'A' && button.href);
192
- };
193
- const handleKeyDown = (0, _useEventCallback.default)(event => {
194
- if (disabled) {
195
- return;
196
- }
197
-
198
- // Check if key is already down to avoid repeats being counted as multiple activations
199
- if (focusRipple && !event.repeat && focusVisible && event.key === ' ') {
200
- ripple.stop(event, () => {
201
- ripple.start(event);
202
- });
203
- }
204
- if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ') {
205
- event.preventDefault();
206
- }
207
- if (onKeyDown) {
208
- onKeyDown(event);
209
- }
210
-
211
- // Keyboard accessibility for non interactive elements
212
- if (event.target === event.currentTarget && isNonNativeButton() && event.key === 'Enter' && !disabled) {
213
- event.preventDefault();
214
- event.currentTarget.click();
215
- }
216
- });
217
- const handleKeyUp = (0, _useEventCallback.default)(event => {
244
+ const linkProps = {};
245
+ if (isLink) {
246
+ linkProps.tabIndex = disabled ? -1 : tabIndex;
218
247
  if (disabled) {
219
- return;
220
- }
221
-
222
- // calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed
223
- // https://codesandbox.io/p/sandbox/button-keyup-preventdefault-dn7f0
224
- if (focusRipple && event.key === ' ' && focusVisible && !event.defaultPrevented) {
225
- ripple.stop(event, () => {
226
- ripple.pulsate(event);
227
- });
228
- }
229
- if (onKeyUp) {
230
- onKeyUp(event);
231
- }
232
-
233
- // Keyboard accessibility for non interactive elements
234
- if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ' && !event.defaultPrevented && !disabled) {
235
- event.currentTarget.click();
236
- }
237
- });
238
- let ComponentProp = component;
239
- if (ComponentProp === 'button' && (other.href || other.to)) {
240
- ComponentProp = LinkComponent;
241
- }
242
- const buttonProps = {};
243
- if (ComponentProp === 'button') {
244
- const hasFormAttributes = !!other.formAction;
245
- // ButtonBase was defaulting to type="button" when no type prop was provided, which prevented form submission and broke formAction functionality.
246
- // The fix checks for form-related attributes and skips the default type to allow the browser's natural submit behavior (type="submit").
247
- buttonProps.type = type === undefined && !hasFormAttributes ? 'button' : type;
248
- buttonProps.disabled = disabled;
249
- } else {
250
- if (!other.href && !other.to) {
251
- buttonProps.role = 'button';
252
- }
253
- if (disabled) {
254
- buttonProps['aria-disabled'] = disabled;
248
+ linkProps['aria-disabled'] = disabled;
255
249
  }
250
+ linkProps.type = type;
256
251
  }
257
252
  const handleRef = (0, _useForkRef.default)(ref, buttonRef);
258
253
  const ownerState = {
@@ -263,6 +258,7 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
263
258
  disableRipple,
264
259
  disableTouchRipple,
265
260
  focusRipple,
261
+ suppressFocusVisible,
266
262
  tabIndex,
267
263
  focusVisible
268
264
  };
@@ -275,8 +271,8 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
275
271
  onClick: onClick,
276
272
  onContextMenu: handleContextMenu,
277
273
  onFocus: handleFocus,
278
- onKeyDown: handleKeyDown,
279
- onKeyUp: handleKeyUp,
274
+ onKeyDown: onKeyDown,
275
+ onKeyUp: onKeyUp,
280
276
  onMouseDown: handleMouseDown,
281
277
  onMouseLeave: handleMouseLeave,
282
278
  onMouseUp: handleMouseUp,
@@ -285,9 +281,7 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
285
281
  onTouchMove: handleTouchMove,
286
282
  onTouchStart: handleTouchStart,
287
283
  ref: handleRef,
288
- tabIndex: disabled ? -1 : tabIndex,
289
- type: type,
290
- ...buttonProps,
284
+ ...(isLink ? linkProps : buttonProps),
291
285
  ...other,
292
286
  children: [children, enableTouchRipple ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_TouchRipple.default, {
293
287
  ref: handleRippleRef,
@@ -385,6 +379,11 @@ process.env.NODE_ENV !== "production" ? ButtonBase.propTypes /* remove-proptypes
385
379
  * @default 'a'
386
380
  */
387
381
  LinkComponent: _propTypes.default.elementType,
382
+ /**
383
+ * Whether the custom component is expected to render a native `<button>` element
384
+ * when passing a React component to the `component` or `slots` prop.
385
+ */
386
+ nativeButton: _propTypes.default.bool,
388
387
  /**
389
388
  * @ignore
390
389
  */
@@ -11,6 +11,7 @@ import { styled } from "../zero-styled/index.mjs";
11
11
  import { useDefaultProps } from "../DefaultPropsProvider/index.mjs";
12
12
  import useForkRef from "../utils/useForkRef.mjs";
13
13
  import useEventCallback from "../utils/useEventCallback.mjs";
14
+ import useButtonBase from "./useButtonBase.mjs";
14
15
  import useLazyRipple from "../useLazyRipple/index.mjs";
15
16
  import TouchRipple from "./TouchRipple.mjs";
16
17
  import buttonBaseClasses, { getButtonBaseUtilityClass } from "./buttonBaseClasses.mjs";
@@ -20,13 +21,14 @@ const useUtilityClasses = ownerState => {
20
21
  disabled,
21
22
  focusVisible,
22
23
  focusVisibleClassName,
24
+ suppressFocusVisible,
23
25
  classes
24
26
  } = ownerState;
25
27
  const slots = {
26
- root: ['root', disabled && 'disabled', focusVisible && 'focusVisible']
28
+ root: ['root', disabled && 'disabled', focusVisible && !suppressFocusVisible && 'focusVisible']
27
29
  };
28
30
  const composedClasses = composeClasses(slots, getButtonBaseUtilityClass, classes);
29
- if (focusVisible && focusVisibleClassName) {
31
+ if (focusVisible && !suppressFocusVisible && focusVisibleClassName) {
30
32
  composedClasses.root += ` ${focusVisibleClassName}`;
31
33
  }
32
34
  return composedClasses;
@@ -95,15 +97,25 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
95
97
  disableTouchRipple = false,
96
98
  focusRipple = false,
97
99
  focusVisibleClassName,
100
+ /* eslint-disable react/prop-types */
101
+ // replaces internal handling in Chip, other components can opt-in individually to use this in the future
102
+ focusableWhenDisabled,
103
+ // escape hatch to suppress the focusVisible state and callback
104
+ // used by anchored <Menu>s to to suppress focus visible styling when opened with a pointer
105
+ suppressFocusVisible = false,
106
+ // private prop to allow native vs non-native button props to be resolved before mount
107
+ internalNativeButton: internalNativeButtonProp,
108
+ /* eslint-enable react/prop-types */
98
109
  LinkComponent = 'a',
110
+ nativeButton: nativeButtonProp,
99
111
  onBlur,
100
- onClick,
112
+ onClick: onClickProp,
101
113
  onContextMenu,
102
114
  onDragLeave,
103
115
  onFocus,
104
116
  onFocusVisible,
105
- onKeyDown,
106
- onKeyUp,
117
+ onKeyDown: onKeyDownProp,
118
+ onKeyUp: onKeyUpProp,
107
119
  onMouseDown,
108
120
  onMouseLeave,
109
121
  onMouseUp,
@@ -116,19 +128,68 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
116
128
  type,
117
129
  ...other
118
130
  } = props;
119
- const buttonRef = React.useRef(null);
131
+ const isLink = Boolean(other.href || other.to);
132
+ const hasFormAction = Boolean(other.formAction);
133
+ let ComponentProp = component;
134
+ if (ComponentProp === 'button' && isLink) {
135
+ ComponentProp = LinkComponent;
136
+ }
137
+ const internalNativeButton = typeof ComponentProp === 'string' ? ComponentProp === 'button' : internalNativeButtonProp ?? false;
138
+ const nativeButton = nativeButtonProp ?? internalNativeButton;
120
139
  const ripple = useLazyRipple();
121
140
  const handleRippleRef = useForkRef(ripple.ref, touchRippleRef);
122
141
  const [focusVisible, setFocusVisible] = React.useState(false);
123
- if (disabled && focusVisible) {
142
+ if ((disabled || suppressFocusVisible) && focusVisible) {
124
143
  setFocusVisible(false);
125
144
  }
145
+ const handleBeforeKeyDown = useEventCallback(event => {
146
+ // Check if key is already down to avoid repeats being counted as multiple activations
147
+ if (focusRipple && !event.repeat && focusVisible && event.key === ' ') {
148
+ ripple.stop(event, () => {
149
+ ripple.start(event);
150
+ });
151
+ }
152
+ });
153
+ const handleBeforeKeyUp = useEventCallback(event => {
154
+ // calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed
155
+ // https://codesandbox.io/p/sandbox/button-keyup-preventdefault-dn7f0
156
+ if (focusRipple && event.key === ' ' && focusVisible && !event.defaultPrevented) {
157
+ ripple.stop(event, () => {
158
+ ripple.pulsate(event);
159
+ });
160
+ }
161
+ });
162
+ const {
163
+ getButtonProps,
164
+ rootRef: buttonRef
165
+ } = useButtonBase({
166
+ nativeButton,
167
+ nativeButtonProp,
168
+ internalNativeButton,
169
+ allowInferredHostMismatch: isLink || typeof ComponentProp === 'string',
170
+ disabled,
171
+ type,
172
+ hasFormAction,
173
+ tabIndex,
174
+ onBeforeKeyDown: handleBeforeKeyDown,
175
+ onBeforeKeyUp: handleBeforeKeyUp
176
+ });
177
+ const {
178
+ onClick,
179
+ onKeyDown,
180
+ onKeyUp,
181
+ ...buttonProps
182
+ } = getButtonProps({
183
+ onClick: onClickProp,
184
+ onKeyDown: onKeyDownProp,
185
+ onKeyUp: onKeyUpProp
186
+ });
126
187
  React.useImperativeHandle(action, () => ({
127
188
  focusVisible: () => {
128
189
  setFocusVisible(true);
129
190
  buttonRef.current.focus();
130
191
  }
131
- }), []);
192
+ }), [buttonRef]);
132
193
  const enableTouchRipple = ripple.shouldMount && !disableRipple && !disabled;
133
194
  React.useEffect(() => {
134
195
  if (focusVisible && focusRipple && !disableRipple) {
@@ -163,7 +224,7 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
163
224
  if (!buttonRef.current) {
164
225
  buttonRef.current = event.currentTarget;
165
226
  }
166
- if (isFocusVisible(event.target)) {
227
+ if (!suppressFocusVisible && isFocusVisible(event.target)) {
167
228
  setFocusVisible(true);
168
229
  if (onFocusVisible) {
169
230
  onFocusVisible(event);
@@ -173,79 +234,13 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
173
234
  onFocus(event);
174
235
  }
175
236
  });
176
- const isNonNativeButton = () => {
177
- const button = buttonRef.current;
178
- if (!button) {
179
- return component && component !== 'button';
180
- }
181
- if (button.tagName === 'BUTTON') {
182
- return false;
183
- }
184
- return !(button.tagName === 'A' && button.href);
185
- };
186
- const handleKeyDown = useEventCallback(event => {
187
- if (disabled) {
188
- return;
189
- }
190
-
191
- // Check if key is already down to avoid repeats being counted as multiple activations
192
- if (focusRipple && !event.repeat && focusVisible && event.key === ' ') {
193
- ripple.stop(event, () => {
194
- ripple.start(event);
195
- });
196
- }
197
- if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ') {
198
- event.preventDefault();
199
- }
200
- if (onKeyDown) {
201
- onKeyDown(event);
202
- }
203
-
204
- // Keyboard accessibility for non interactive elements
205
- if (event.target === event.currentTarget && isNonNativeButton() && event.key === 'Enter' && !disabled) {
206
- event.preventDefault();
207
- event.currentTarget.click();
208
- }
209
- });
210
- const handleKeyUp = useEventCallback(event => {
237
+ const linkProps = {};
238
+ if (isLink) {
239
+ linkProps.tabIndex = disabled ? -1 : tabIndex;
211
240
  if (disabled) {
212
- return;
213
- }
214
-
215
- // calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed
216
- // https://codesandbox.io/p/sandbox/button-keyup-preventdefault-dn7f0
217
- if (focusRipple && event.key === ' ' && focusVisible && !event.defaultPrevented) {
218
- ripple.stop(event, () => {
219
- ripple.pulsate(event);
220
- });
221
- }
222
- if (onKeyUp) {
223
- onKeyUp(event);
224
- }
225
-
226
- // Keyboard accessibility for non interactive elements
227
- if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ' && !event.defaultPrevented && !disabled) {
228
- event.currentTarget.click();
229
- }
230
- });
231
- let ComponentProp = component;
232
- if (ComponentProp === 'button' && (other.href || other.to)) {
233
- ComponentProp = LinkComponent;
234
- }
235
- const buttonProps = {};
236
- if (ComponentProp === 'button') {
237
- const hasFormAttributes = !!other.formAction;
238
- // ButtonBase was defaulting to type="button" when no type prop was provided, which prevented form submission and broke formAction functionality.
239
- // The fix checks for form-related attributes and skips the default type to allow the browser's natural submit behavior (type="submit").
240
- buttonProps.type = type === undefined && !hasFormAttributes ? 'button' : type;
241
- buttonProps.disabled = disabled;
242
- } else {
243
- if (!other.href && !other.to) {
244
- buttonProps.role = 'button';
245
- }
246
- if (disabled) {
247
- buttonProps['aria-disabled'] = disabled;
241
+ linkProps['aria-disabled'] = disabled;
248
242
  }
243
+ linkProps.type = type;
249
244
  }
250
245
  const handleRef = useForkRef(ref, buttonRef);
251
246
  const ownerState = {
@@ -256,6 +251,7 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
256
251
  disableRipple,
257
252
  disableTouchRipple,
258
253
  focusRipple,
254
+ suppressFocusVisible,
259
255
  tabIndex,
260
256
  focusVisible
261
257
  };
@@ -268,8 +264,8 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
268
264
  onClick: onClick,
269
265
  onContextMenu: handleContextMenu,
270
266
  onFocus: handleFocus,
271
- onKeyDown: handleKeyDown,
272
- onKeyUp: handleKeyUp,
267
+ onKeyDown: onKeyDown,
268
+ onKeyUp: onKeyUp,
273
269
  onMouseDown: handleMouseDown,
274
270
  onMouseLeave: handleMouseLeave,
275
271
  onMouseUp: handleMouseUp,
@@ -278,9 +274,7 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
278
274
  onTouchMove: handleTouchMove,
279
275
  onTouchStart: handleTouchStart,
280
276
  ref: handleRef,
281
- tabIndex: disabled ? -1 : tabIndex,
282
- type: type,
283
- ...buttonProps,
277
+ ...(isLink ? linkProps : buttonProps),
284
278
  ...other,
285
279
  children: [children, enableTouchRipple ? /*#__PURE__*/_jsx(TouchRipple, {
286
280
  ref: handleRippleRef,
@@ -378,6 +372,11 @@ process.env.NODE_ENV !== "production" ? ButtonBase.propTypes /* remove-proptypes
378
372
  * @default 'a'
379
373
  */
380
374
  LinkComponent: PropTypes.elementType,
375
+ /**
376
+ * Whether the custom component is expected to render a native `<button>` element
377
+ * when passing a React component to the `component` or `slots` prop.
378
+ */
379
+ nativeButton: PropTypes.bool,
381
380
  /**
382
381
  * @ignore
383
382
  */