@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
@@ -20,35 +20,45 @@ var _visuallyHidden = _interopRequireDefault(require("@mui/utils/visuallyHidden"
20
20
  var _clamp = _interopRequireDefault(require("@mui/utils/clamp"));
21
21
  var _extractEventHandlers = _interopRequireDefault(require("@mui/utils/extractEventHandlers"));
22
22
  var _areArraysEqual = _interopRequireDefault(require("../utils/areArraysEqual"));
23
+ var _getActiveElement = _interopRequireDefault(require("../utils/getActiveElement"));
23
24
  const INTENTIONAL_DRAG_COUNT_THRESHOLD = 2;
25
+ const EMPTY_MARKS = [];
26
+ const EMPTY_OBJ = {};
24
27
  function getNewValue(currentValue, step, direction, min, max) {
25
28
  return direction === 1 ? Math.min(currentValue + step, max) : Math.max(currentValue - step, min);
26
29
  }
27
30
  function asc(a, b) {
28
31
  return a - b;
29
32
  }
30
- function findClosest(values, currentValue) {
31
- const {
32
- index: closestIndex
33
- } = values.reduce((acc, value, index) => {
33
+ function findClosest(values, currentValue, preferredIndex = -1) {
34
+ const closestValue = values.reduce((acc, value, index) => {
34
35
  const distance = Math.abs(currentValue - value);
35
- if (acc === null || distance < acc.distance || distance === acc.distance) {
36
+ if (acc == null || distance <= acc.distance) {
36
37
  return {
37
38
  distance,
38
39
  index
39
40
  };
40
41
  }
41
42
  return acc;
42
- }, null) ?? {};
43
+ }, null) ?? EMPTY_OBJ;
44
+ const {
45
+ index: closestIndex
46
+ } = closestValue;
47
+ if (closestIndex == null) {
48
+ return closestIndex;
49
+ }
50
+ if (preferredIndex >= 0 && values[preferredIndex] === values[closestIndex]) {
51
+ return preferredIndex;
52
+ }
43
53
  return closestIndex;
44
54
  }
45
- function trackFinger(event, touchId) {
55
+ function trackFinger(event, touchIdRef) {
46
56
  // The event is TouchEvent
47
- if (touchId.current !== undefined && event.changedTouches) {
57
+ if (touchIdRef.current != null && event.changedTouches) {
48
58
  const touchEvent = event;
49
59
  for (let i = 0; i < touchEvent.changedTouches.length; i += 1) {
50
60
  const touch = touchEvent.changedTouches[i];
51
- if (touch.identifier === touchId.current) {
61
+ if (touch.identifier === touchIdRef.current) {
52
62
  return {
53
63
  x: touch.clientX,
54
64
  y: touch.clientY
@@ -58,7 +68,7 @@ function trackFinger(event, touchId) {
58
68
  return false;
59
69
  }
60
70
 
61
- // The event is MouseEvent
71
+ // The event is PointerEvent or MouseEvent
62
72
  return {
63
73
  x: event.clientX,
64
74
  y: event.clientY
@@ -85,26 +95,18 @@ function roundValueToStep(value, step, min) {
85
95
  const nearest = Math.round((value - min) / step) * step + min;
86
96
  return Number(nearest.toFixed(getDecimalPrecision(step)));
87
97
  }
88
- function setValueIndex({
89
- values,
90
- newValue,
91
- index
92
- }) {
98
+ function setValueIndex(values, newValue, index) {
93
99
  const output = values.slice();
94
100
  output[index] = newValue;
95
101
  return output.sort(asc);
96
102
  }
97
- function focusThumb({
98
- sliderRef,
99
- activeIndex,
100
- setActive,
101
- focusVisible
102
- }) {
103
+ function focusThumb(sliderRef, activeIndex, setActive, focusVisible) {
103
104
  const doc = (0, _ownerDocument.default)(sliderRef.current);
104
- if (!sliderRef.current?.contains(doc.activeElement) || Number(doc?.activeElement?.getAttribute('data-index')) !== activeIndex) {
105
+ const activeElement = (0, _getActiveElement.default)(doc);
106
+ if (!sliderRef.current?.contains(activeElement) || Number(activeElement?.getAttribute('data-index')) !== activeIndex) {
105
107
  const input = sliderRef.current?.querySelector(`[type="range"][data-index="${activeIndex}"]`);
106
108
  if (input != null) {
107
- if (focusVisible === undefined) {
109
+ if (focusVisible == null) {
108
110
  input.focus({
109
111
  preventScroll: true
110
112
  });
@@ -113,7 +115,7 @@ function focusThumb({
113
115
  preventScroll: true,
114
116
  // Prevent pointer-driven focus rings in browsers that support this option.
115
117
  // Chrome 144+ supports `focusVisible` in `HTMLElement.focus()` options.
116
- // @ts-ignore - `focusVisible` is not yet in TypeScript's lib.dom FocusOptions.
118
+ // @ts-expect-error `focusVisible` is not yet in TypeScript's lib.dom FocusOptions.
117
119
  focusVisible
118
120
  });
119
121
  }
@@ -159,29 +161,7 @@ const axisProps = {
159
161
  }
160
162
  };
161
163
  const Identity = x => x;
162
-
163
- // TODO: remove support for Safari < 13.
164
- // https://caniuse.com/#search=touch-action
165
- //
166
- // Safari, on iOS, supports touch action since v13.
167
- // Over 80% of the iOS phones are compatible
168
- // in August 2020.
169
- // Utilizing the CSS.supports method to check if touch-action is supported.
170
- // Since CSS.supports is supported on all but Edge@12 and IE and touch-action
171
- // is supported on both Edge@12 and IE if CSS.supports is not available that means that
172
- // touch-action will be supported
173
164
  exports.Identity = Identity;
174
- let cachedSupportsTouchActionNone;
175
- function doesSupportTouchActionNone() {
176
- if (cachedSupportsTouchActionNone === undefined) {
177
- if (typeof CSS !== 'undefined' && typeof CSS.supports === 'function') {
178
- cachedSupportsTouchActionNone = CSS.supports('touch-action', 'none');
179
- } else {
180
- cachedSupportsTouchActionNone = true;
181
- }
182
- }
183
- return cachedSupportsTouchActionNone;
184
- }
185
165
  function useSlider(parameters) {
186
166
  const {
187
167
  'aria-labelledby': ariaLabelledby,
@@ -203,35 +183,42 @@ function useSlider(parameters) {
203
183
  tabIndex,
204
184
  value: valueProp
205
185
  } = parameters;
206
- const touchId = React.useRef(undefined);
207
- const focusFrame = React.useRef(null);
186
+ const touchIdRef = React.useRef(undefined);
187
+ const focusFrameRef = React.useRef(null);
208
188
  // We can't use the :active browser pseudo-classes.
209
189
  // - The active state isn't triggered when clicking on the rail.
210
190
  // - The active state isn't transferred when inversing a range slider.
211
191
  const [active, setActive] = React.useState(-1);
212
192
  const [open, setOpen] = React.useState(-1);
213
193
  const [dragging, setDragging] = React.useState(false);
214
- const moveCount = React.useRef(0);
194
+ const moveCountRef = React.useRef(0);
195
+ // Ref (not state) because setActive() always accompanies updates, providing the re-render.
196
+ const lastUsedThumbIndexRef = React.useRef(-1);
197
+ // Prevents duplicate listener registration when both pointer and touch events fire
198
+ // for the same physical touch interaction.
199
+ const pointerDownHandledRef = React.useRef(false);
200
+ // Tracks which pointer owns the current drag session, so stray pointerup/pointermove
201
+ // events from a second pointer don't interfere.
202
+ const activePointerIdRef = React.useRef(-1);
215
203
  const cancelFocusFrame = (0, _useEventCallback.default)(() => {
216
- if (focusFrame.current != null) {
217
- cancelAnimationFrame(focusFrame.current);
218
- focusFrame.current = null;
204
+ if (focusFrameRef.current != null) {
205
+ cancelAnimationFrame(focusFrameRef.current);
206
+ focusFrameRef.current = null;
219
207
  }
220
208
  });
221
- // lastChangedValue is updated whenever onChange is triggered.
222
- const lastChangedValue = React.useRef(null);
209
+ // lastChangedValueRef is updated whenever onChange is triggered.
210
+ const lastChangedValueRef = React.useRef(null);
223
211
  const [valueDerived, setValueState] = (0, _useControlled.default)({
224
212
  controlled: valueProp,
225
213
  default: defaultValue ?? min,
226
214
  name: 'Slider'
227
215
  });
228
- const handleChange = onChange && ((event, value, thumbIndex) => {
216
+ const handleChange = (0, _useEventCallback.default)((event, value, thumbIndex) => {
229
217
  // Redefine target to allow name and value to be read.
230
218
  // This allows seamless integration with the most popular form libraries.
231
219
  // https://github.com/mui/material-ui/issues/13485#issuecomment-676048492
232
220
  // Clone the event to not override `target` of the original event.
233
- const nativeEvent = event.nativeEvent || event;
234
- // @ts-ignore The nativeEvent is function, not object
221
+ const nativeEvent = 'nativeEvent' in event ? event.nativeEvent : event;
235
222
  const clonedEvent = new nativeEvent.constructor(nativeEvent.type, nativeEvent);
236
223
  Object.defineProperty(clonedEvent, 'target', {
237
224
  writable: true,
@@ -240,16 +227,43 @@ function useSlider(parameters) {
240
227
  name
241
228
  }
242
229
  });
243
- lastChangedValue.current = value;
244
- onChange(clonedEvent, value, thumbIndex);
230
+ lastChangedValueRef.current = value;
231
+ onChange?.(clonedEvent, value, thumbIndex);
245
232
  });
246
233
  const range = Array.isArray(valueDerived);
247
- let values = range ? valueDerived.slice().sort(asc) : [valueDerived];
248
- values = values.map(value => value == null ? min : (0, _clamp.default)(value, min, max));
249
- const marks = marksProp === true && step !== null ? [...Array(Math.floor((max - min) / step) + 1)].map((_, index) => ({
250
- value: min + step * index
251
- })) : marksProp || [];
252
- const marksValues = marks.map(mark => mark.value);
234
+ const values = React.useMemo(() => {
235
+ if (typeof valueDerived === 'number') {
236
+ return [(0, _clamp.default)(valueDerived, min, max)];
237
+ }
238
+ if (valueDerived == null) {
239
+ return [min];
240
+ }
241
+ const sortedValues = valueDerived.slice().sort(asc);
242
+ for (let i = 0; i < sortedValues.length; i += 1) {
243
+ const value = sortedValues[i];
244
+ sortedValues[i] = value == null ? min : (0, _clamp.default)(value, min, max);
245
+ }
246
+ return sortedValues;
247
+ }, [valueDerived, min, max]);
248
+ const marks = React.useMemo(() => {
249
+ if (marksProp === true && step != null) {
250
+ const generatedMarks = new Array(Math.floor((max - min) / step) + 1);
251
+ for (let i = 0; i < generatedMarks.length; i += 1) {
252
+ generatedMarks[i] = {
253
+ value: min + step * i
254
+ };
255
+ }
256
+ return generatedMarks;
257
+ }
258
+ return Array.isArray(marksProp) ? marksProp : EMPTY_MARKS;
259
+ }, [marksProp, step, min, max]);
260
+ const marksValues = React.useMemo(() => {
261
+ const markValues = new Array(marks.length);
262
+ for (let i = 0; i < marks.length; i += 1) {
263
+ markValues[i] = marks[i].value;
264
+ }
265
+ return markValues;
266
+ }, [marks]);
253
267
  const [focusedThumbIndex, setFocusedThumbIndex] = React.useState(-1);
254
268
  const sliderRef = React.useRef(null);
255
269
  const handleRef = (0, _useForkRef.default)(ref, sliderRef);
@@ -290,29 +304,22 @@ function useSlider(parameters) {
290
304
  newValue = (0, _clamp.default)(newValue, values[index - 1] || -Infinity, values[index + 1] || Infinity);
291
305
  }
292
306
  const previousValue = newValue;
293
- newValue = setValueIndex({
294
- values,
295
- newValue,
296
- index
297
- });
307
+ newValue = setValueIndex(values, newValue, index);
298
308
  let activeIndex = index;
299
309
 
300
310
  // Potentially swap the index if needed.
301
311
  if (!disableSwap) {
302
312
  activeIndex = newValue.indexOf(previousValue);
303
313
  }
304
- focusThumb({
305
- sliderRef,
306
- activeIndex
307
- });
314
+ focusThumb(sliderRef, activeIndex);
308
315
  }
309
316
  setValueState(newValue);
310
317
  setFocusedThumbIndex(index);
311
- if (handleChange && !areValuesEqual(newValue, valueDerived)) {
318
+ if (onChange && !areValuesEqual(newValue, valueDerived)) {
312
319
  handleChange(event, newValue, index);
313
320
  }
314
321
  if (onChangeCommitted) {
315
- onChangeCommitted(event, lastChangedValue.current ?? newValue);
322
+ onChangeCommitted(event, lastChangedValueRef.current ?? newValue);
316
323
  }
317
324
  };
318
325
  const createHandleHiddenInputKeyDown = otherHandlers => event => {
@@ -380,12 +387,14 @@ function useSlider(parameters) {
380
387
  otherHandlers?.onKeyDown?.(event);
381
388
  };
382
389
  (0, _useEnhancedEffect.default)(() => {
383
- if (disabled && sliderRef.current.contains(document.activeElement)) {
390
+ const activeElement = (0, _getActiveElement.default)((0, _ownerDocument.default)(sliderRef.current));
391
+ if (disabled && sliderRef.current?.contains(activeElement)) {
384
392
  // This is necessary because Firefox and Safari will keep focus
385
393
  // on a disabled element:
386
394
  // https://codesandbox.io/p/sandbox/mui-pr-22247-forked-h151h?file=/src/App.js
387
- // @ts-ignore
388
- document.activeElement?.blur();
395
+ if (activeElement != null && 'blur' in activeElement) {
396
+ activeElement.blur();
397
+ }
389
398
  }
390
399
  }, [disabled]);
391
400
  if (disabled && active !== -1) {
@@ -396,22 +405,27 @@ function useSlider(parameters) {
396
405
  }
397
406
  const createHandleHiddenInputChange = otherHandlers => event => {
398
407
  otherHandlers.onChange?.(event);
399
- // this handles value change by Pointer or Touch events
400
- // @ts-ignore
401
- changeValue(event, event.target.valueAsNumber);
408
+ // Handles value changes reported through the hidden range input.
409
+ changeValue(event, event.currentTarget.valueAsNumber);
402
410
  };
403
- const previousIndex = React.useRef(undefined);
411
+ const previousIndexRef = React.useRef(undefined);
404
412
  let axis = orientation;
405
413
  if (isRtl && orientation === 'horizontal') {
406
414
  axis += '-reverse';
407
415
  }
408
- const getFingerNewValue = ({
409
- finger,
410
- move = false
411
- }) => {
416
+
417
+ // Converts finger coordinates to a slider value and determines the active thumb.
418
+ // For range sliders, reads `previousIndexRef.current` to decide which thumb is active:
419
+ // -1 = initial press → find closest thumb
420
+ // ≥0 = drag in progress → keep same thumb
421
+ // Callers must reset `previousIndexRef.current = -1` before calling on a new interaction.
422
+ const getValueAtFinger = finger => {
412
423
  const {
413
424
  current: slider
414
425
  } = sliderRef;
426
+ if (!slider) {
427
+ return null;
428
+ }
415
429
  const {
416
430
  width,
417
431
  height,
@@ -438,27 +452,20 @@ function useSlider(parameters) {
438
452
  newValue = (0, _clamp.default)(newValue, min, max);
439
453
  let activeIndex = 0;
440
454
  if (range) {
441
- if (!move) {
442
- activeIndex = findClosest(values, newValue);
443
- } else {
444
- activeIndex = previousIndex.current;
445
- }
455
+ const isDragging = previousIndexRef.current !== -1;
456
+ activeIndex = isDragging ? previousIndexRef.current : findClosest(values, newValue, lastUsedThumbIndexRef.current);
446
457
 
447
458
  // Bound the new value to the thumb's neighbours.
448
459
  if (disableSwap) {
449
460
  newValue = (0, _clamp.default)(newValue, values[activeIndex - 1] || -Infinity, values[activeIndex + 1] || Infinity);
450
461
  }
451
462
  const previousValue = newValue;
452
- newValue = setValueIndex({
453
- values,
454
- newValue,
455
- index: activeIndex
456
- });
463
+ newValue = setValueIndex(values, newValue, activeIndex);
457
464
 
458
465
  // Potentially swap the index if needed.
459
- if (!(disableSwap && move)) {
466
+ if (!(disableSwap && isDragging)) {
460
467
  activeIndex = newValue.indexOf(previousValue);
461
- previousIndex.current = activeIndex;
468
+ previousIndexRef.current = activeIndex;
462
469
  }
463
470
  }
464
471
  return {
@@ -467,60 +474,61 @@ function useSlider(parameters) {
467
474
  };
468
475
  };
469
476
  const handleTouchMove = (0, _useEventCallback.default)(nativeEvent => {
470
- const finger = trackFinger(nativeEvent, touchId);
477
+ // Ignore pointer events from a different pointer than the one that started the drag.
478
+ if ('pointerId' in nativeEvent && nativeEvent.pointerId !== activePointerIdRef.current) {
479
+ return;
480
+ }
481
+ const finger = trackFinger(nativeEvent, touchIdRef);
471
482
  if (!finger) {
472
483
  return;
473
484
  }
474
- moveCount.current += 1;
485
+ moveCountRef.current += 1;
475
486
 
476
- // Cancel move in case some other element consumed a mouseup event and it was not fired.
477
- // @ts-ignore buttons doesn't not exists on touch event
478
- if (nativeEvent.type === 'mousemove' && nativeEvent.buttons === 0) {
487
+ // Cancel move in case some other element consumed a pointerup event and it was not fired.
488
+ if (nativeEvent.type === 'pointermove' && nativeEvent.buttons === 0) {
479
489
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
480
490
  handleTouchEnd(nativeEvent);
481
491
  return;
482
492
  }
483
- const {
484
- newValue,
485
- activeIndex
486
- } = getFingerNewValue({
487
- finger,
488
- move: true
489
- });
490
- focusThumb({
491
- sliderRef,
492
- activeIndex,
493
- setActive,
494
- focusVisible: false
495
- });
496
- setValueState(newValue);
497
- if (!dragging && moveCount.current > INTENTIONAL_DRAG_COUNT_THRESHOLD) {
493
+ const newFingerValue = getValueAtFinger(finger);
494
+ if (!newFingerValue) {
495
+ return;
496
+ }
497
+ focusThumb(sliderRef, newFingerValue.activeIndex, setActive, false);
498
+ lastUsedThumbIndexRef.current = newFingerValue.activeIndex;
499
+ setValueState(newFingerValue.newValue);
500
+ if (!dragging && moveCountRef.current > INTENTIONAL_DRAG_COUNT_THRESHOLD) {
498
501
  setDragging(true);
499
502
  }
500
- if (handleChange && !areValuesEqual(newValue, valueDerived)) {
501
- handleChange(nativeEvent, newValue, activeIndex);
503
+ if (onChange && !areValuesEqual(newFingerValue.newValue, valueDerived)) {
504
+ handleChange(nativeEvent, newFingerValue.newValue, newFingerValue.activeIndex);
502
505
  }
503
506
  });
504
507
  const handleTouchEnd = (0, _useEventCallback.default)(nativeEvent => {
505
- const finger = trackFinger(nativeEvent, touchId);
508
+ // Ignore pointer events from a different pointer than the one that started the drag.
509
+ if ('pointerId' in nativeEvent && nativeEvent.pointerId !== activePointerIdRef.current) {
510
+ return;
511
+ }
512
+ const finger = trackFinger(nativeEvent, touchIdRef);
506
513
  setDragging(false);
507
514
  if (!finger) {
508
515
  return;
509
516
  }
510
- const {
511
- newValue
512
- } = getFingerNewValue({
513
- finger,
514
- move: true
515
- });
517
+ const newFingerValue = getValueAtFinger(finger);
516
518
  setActive(-1);
517
519
  if (nativeEvent.type === 'touchend') {
518
520
  setOpen(-1);
519
521
  }
520
- if (onChangeCommitted) {
521
- onChangeCommitted(nativeEvent, lastChangedValue.current ?? newValue);
522
+ if (newFingerValue && onChangeCommitted) {
523
+ onChangeCommitted(nativeEvent, lastChangedValueRef.current ?? newFingerValue.newValue);
524
+ }
525
+
526
+ // Release pointer capture if applicable
527
+ if ('pointerType' in nativeEvent && sliderRef.current?.hasPointerCapture(nativeEvent.pointerId)) {
528
+ sliderRef.current.releasePointerCapture(nativeEvent.pointerId);
522
529
  }
523
- touchId.current = undefined;
530
+ touchIdRef.current = undefined;
531
+ activePointerIdRef.current = -1;
524
532
 
525
533
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
526
534
  stopListening();
@@ -529,35 +537,36 @@ function useSlider(parameters) {
529
537
  if (disabled) {
530
538
  return;
531
539
  }
532
- // If touch-action: none; is not supported we need to prevent the scroll manually.
533
- if (!doesSupportTouchActionNone()) {
534
- nativeEvent.preventDefault();
540
+
541
+ // If the pointer path already handled this interaction,
542
+ // only record the touch identifier and skip duplicate listener registration.
543
+ if (pointerDownHandledRef.current) {
544
+ pointerDownHandledRef.current = false;
545
+ const touch = nativeEvent.changedTouches[0];
546
+ if (touch != null) {
547
+ touchIdRef.current = touch.identifier;
548
+ }
549
+ return;
535
550
  }
536
551
  const touch = nativeEvent.changedTouches[0];
537
552
  if (touch != null) {
538
553
  // A number that uniquely identifies the current finger in the touch session.
539
- touchId.current = touch.identifier;
554
+ touchIdRef.current = touch.identifier;
540
555
  }
541
- const finger = trackFinger(nativeEvent, touchId);
556
+ const finger = trackFinger(nativeEvent, touchIdRef);
542
557
  if (finger !== false) {
543
- const {
544
- newValue,
545
- activeIndex
546
- } = getFingerNewValue({
547
- finger
548
- });
549
- focusThumb({
550
- sliderRef,
551
- activeIndex,
552
- setActive,
553
- focusVisible: false
554
- });
555
- setValueState(newValue);
556
- if (handleChange && !areValuesEqual(newValue, valueDerived)) {
557
- handleChange(nativeEvent, newValue, activeIndex);
558
+ previousIndexRef.current = -1;
559
+ const newFingerValue = getValueAtFinger(finger);
560
+ if (newFingerValue) {
561
+ focusThumb(sliderRef, newFingerValue.activeIndex, setActive, false);
562
+ lastUsedThumbIndexRef.current = newFingerValue.activeIndex;
563
+ setValueState(newFingerValue.newValue);
564
+ if (onChange && !areValuesEqual(newFingerValue.newValue, valueDerived)) {
565
+ handleChange(nativeEvent, newFingerValue.newValue, newFingerValue.activeIndex);
566
+ }
558
567
  }
559
568
  }
560
- moveCount.current = 0;
569
+ moveCountRef.current = 0;
561
570
  const doc = (0, _ownerDocument.default)(sliderRef.current);
562
571
  doc.addEventListener('touchmove', handleTouchMove, {
563
572
  passive: true
@@ -568,17 +577,18 @@ function useSlider(parameters) {
568
577
  });
569
578
  const stopListening = React.useCallback(() => {
570
579
  const doc = (0, _ownerDocument.default)(sliderRef.current);
571
- doc.removeEventListener('mousemove', handleTouchMove);
572
- doc.removeEventListener('mouseup', handleTouchEnd);
580
+ doc.removeEventListener('pointermove', handleTouchMove);
581
+ doc.removeEventListener('pointerup', handleTouchEnd);
573
582
  doc.removeEventListener('touchmove', handleTouchMove);
574
583
  doc.removeEventListener('touchend', handleTouchEnd);
575
584
  }, [handleTouchEnd, handleTouchMove]);
576
585
  React.useEffect(() => {
577
- const {
578
- current: slider
579
- } = sliderRef;
586
+ const slider = sliderRef.current;
587
+ if (!slider) {
588
+ return undefined;
589
+ }
580
590
  slider.addEventListener('touchstart', handleTouchStart, {
581
- passive: doesSupportTouchActionNone()
591
+ passive: true
582
592
  });
583
593
  return () => {
584
594
  slider.removeEventListener('touchstart', handleTouchStart);
@@ -592,62 +602,67 @@ function useSlider(parameters) {
592
602
  cancelFocusFrame();
593
603
  }
594
604
  }, [disabled, stopListening, cancelFocusFrame]);
595
- const createHandleMouseDown = otherHandlers => event => {
596
- otherHandlers.onMouseDown?.(event);
597
- if (disabled) {
598
- return;
599
- }
600
- if (event.defaultPrevented) {
601
- return;
602
- }
605
+ const createHandlePointerDown = otherHandlers => event => {
606
+ otherHandlers.onPointerDown?.(event);
603
607
 
604
- // Only handle left clicks
605
- if (event.button !== 0) {
608
+ // On touch devices, the browser fires both pointerdown and touchstart for the
609
+ // same physical touch. Mark this BEFORE early returns so handleTouchStart always
610
+ // knows the pointer path saw this interaction — even if it was prevented or disabled.
611
+ if (event.pointerType === 'touch') {
612
+ pointerDownHandledRef.current = true;
613
+ }
614
+ if (disabled || event.defaultPrevented || event.button !== 0) {
606
615
  return;
607
616
  }
608
- const finger = trackFinger(event, touchId);
617
+ const finger = trackFinger(event, touchIdRef);
609
618
  if (finger !== false) {
610
- const {
611
- newValue,
612
- activeIndex
613
- } = getFingerNewValue({
614
- finger
615
- });
616
- const doc = (0, _ownerDocument.default)(sliderRef.current);
617
- const activeElement = doc.activeElement;
618
- const pressedOnFocusedThumb = sliderRef.current?.contains(activeElement) && Number(activeElement?.getAttribute('data-index')) === activeIndex;
619
- setActive(activeIndex);
620
- if (pressedOnFocusedThumb) {
621
- event.preventDefault();
622
- } else {
623
- cancelFocusFrame();
624
- focusFrame.current = requestAnimationFrame(() => {
625
- focusFrame.current = null;
626
- focusThumb({
627
- sliderRef,
628
- activeIndex,
629
- focusVisible: false
619
+ previousIndexRef.current = -1;
620
+ const newFingerValue = getValueAtFinger(finger);
621
+ if (newFingerValue) {
622
+ const thumbInput = sliderRef.current?.querySelector(`input[type="range"][data-index="${newFingerValue.activeIndex}"]`);
623
+ const doc = (0, _ownerDocument.default)(sliderRef.current);
624
+ const pressedOnFocusedThumb = thumbInput != null && thumbInput === (0, _getActiveElement.default)(doc);
625
+ setActive(newFingerValue.activeIndex);
626
+ lastUsedThumbIndexRef.current = newFingerValue.activeIndex;
627
+ if (pressedOnFocusedThumb) {
628
+ event.preventDefault();
629
+ } else {
630
+ cancelFocusFrame();
631
+ focusFrameRef.current = requestAnimationFrame(() => {
632
+ focusFrameRef.current = null;
633
+ focusThumb(sliderRef, newFingerValue.activeIndex, undefined, false);
630
634
  });
631
- });
632
- }
633
- setValueState(newValue);
634
- if (handleChange && !areValuesEqual(newValue, valueDerived)) {
635
- handleChange(event, newValue, activeIndex);
635
+ }
636
+ setValueState(newFingerValue.newValue);
637
+ if (onChange && !areValuesEqual(newFingerValue.newValue, valueDerived)) {
638
+ handleChange(event, newFingerValue.newValue, newFingerValue.activeIndex);
639
+ }
636
640
  }
637
641
  }
638
- moveCount.current = 0;
642
+ moveCountRef.current = 0;
643
+ activePointerIdRef.current = event.pointerId;
639
644
  const doc = (0, _ownerDocument.default)(sliderRef.current);
640
- doc.addEventListener('mousemove', handleTouchMove, {
645
+
646
+ // Use pointer capture for reliable drag tracking
647
+ try {
648
+ event.currentTarget.setPointerCapture(event.pointerId);
649
+ } catch {
650
+ // setPointerCapture can throw if the pointerId is invalid (e.g. synthetic
651
+ // events in tests, or the pointer was already released). The slider still
652
+ // works via document-level listeners; pointer capture is a progressive
653
+ // enhancement for reliable drag tracking.
654
+ }
655
+ doc.addEventListener('pointermove', handleTouchMove, {
641
656
  passive: true
642
657
  });
643
- doc.addEventListener('mouseup', handleTouchEnd);
658
+ doc.addEventListener('pointerup', handleTouchEnd);
644
659
  };
645
660
  const trackOffset = valueToPercent(range ? values[0] : min, min, max);
646
661
  const trackLeap = valueToPercent(values[values.length - 1], min, max) - trackOffset;
647
- const getRootProps = (externalProps = {}) => {
662
+ const getRootProps = (externalProps = EMPTY_OBJ) => {
648
663
  const externalHandlers = (0, _extractEventHandlers.default)(externalProps);
649
664
  const ownEventHandlers = {
650
- onMouseDown: createHandleMouseDown(externalHandlers || {})
665
+ onPointerDown: createHandlePointerDown(externalHandlers)
651
666
  };
652
667
  const mergedEventHandlers = {
653
668
  ...externalHandlers,
@@ -668,11 +683,11 @@ function useSlider(parameters) {
668
683
  otherHandlers.onMouseLeave?.(event);
669
684
  setOpen(-1);
670
685
  };
671
- const getThumbProps = (externalProps = {}) => {
686
+ const getThumbProps = (externalProps = EMPTY_OBJ) => {
672
687
  const externalHandlers = (0, _extractEventHandlers.default)(externalProps);
673
688
  const ownEventHandlers = {
674
- onMouseOver: createHandleMouseOver(externalHandlers || {}),
675
- onMouseLeave: createHandleMouseLeave(externalHandlers || {})
689
+ onMouseOver: createHandleMouseOver(externalHandlers),
690
+ onMouseLeave: createHandleMouseLeave(externalHandlers)
676
691
  };
677
692
  return {
678
693
  ...externalProps,
@@ -681,22 +696,33 @@ function useSlider(parameters) {
681
696
  };
682
697
  };
683
698
  const getThumbStyle = index => {
699
+ let zIndex;
700
+ if (range) {
701
+ if (active === index) {
702
+ zIndex = 2;
703
+ } else if (lastUsedThumbIndexRef.current === index) {
704
+ zIndex = 1;
705
+ }
706
+ } else if (active === index) {
707
+ zIndex = 1;
708
+ }
684
709
  return {
685
710
  // So the non active thumb doesn't show its label on hover.
686
- pointerEvents: active !== -1 && active !== index ? 'none' : undefined
711
+ pointerEvents: active !== -1 && active !== index ? 'none' : undefined,
712
+ zIndex
687
713
  };
688
714
  };
689
715
  let cssWritingMode;
690
716
  if (orientation === 'vertical') {
691
717
  cssWritingMode = isRtl ? 'vertical-rl' : 'vertical-lr';
692
718
  }
693
- const getHiddenInputProps = (externalProps = {}) => {
719
+ const getHiddenInputProps = (externalProps = EMPTY_OBJ) => {
694
720
  const externalHandlers = (0, _extractEventHandlers.default)(externalProps);
695
721
  const ownEventHandlers = {
696
- onChange: createHandleHiddenInputChange(externalHandlers || {}),
697
- onFocus: createHandleHiddenInputFocus(externalHandlers || {}),
698
- onBlur: createHandleHiddenInputBlur(externalHandlers || {}),
699
- onKeyDown: createHandleHiddenInputKeyDown(externalHandlers || {})
722
+ onChange: createHandleHiddenInputChange(externalHandlers),
723
+ onFocus: createHandleHiddenInputFocus(externalHandlers),
724
+ onBlur: createHandleHiddenInputBlur(externalHandlers),
725
+ onKeyDown: createHandleHiddenInputKeyDown(externalHandlers)
700
726
  };
701
727
  const mergedEventHandlers = {
702
728
  ...externalHandlers,
@@ -735,7 +761,7 @@ function useSlider(parameters) {
735
761
  getHiddenInputProps,
736
762
  getRootProps,
737
763
  getThumbProps,
738
- marks: marks,
764
+ marks,
739
765
  open,
740
766
  range,
741
767
  rootRef: handleRef,