@mui/material 5.16.1 → 5.16.3

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 (252) hide show
  1. package/Autocomplete/Autocomplete.d.ts +6 -7
  2. package/Autocomplete/Autocomplete.js +1 -1
  3. package/Badge/Badge.d.ts +1 -1
  4. package/Badge/Badge.js +2 -2
  5. package/Badge/useBadge.d.ts +13 -0
  6. package/Badge/useBadge.js +41 -0
  7. package/Badge/useBadge.types.d.ts +40 -0
  8. package/Badge/useBadge.types.js +1 -0
  9. package/Breadcrumbs/Breadcrumbs.d.ts +1 -1
  10. package/Breadcrumbs/Breadcrumbs.js +1 -1
  11. package/CHANGELOG.md +35 -0
  12. package/ClickAwayListener/ClickAwayListener.d.ts +47 -0
  13. package/ClickAwayListener/ClickAwayListener.js +178 -0
  14. package/ClickAwayListener/index.d.ts +2 -2
  15. package/ClickAwayListener/index.js +1 -1
  16. package/InputBase/InputBase.js +2 -2
  17. package/ListItem/ListItem.js +1 -1
  18. package/Menu/Menu.js +1 -1
  19. package/Modal/Modal.d.ts +1 -1
  20. package/Modal/Modal.js +2 -2
  21. package/Modal/ModalManager.d.ts +25 -0
  22. package/Modal/ModalManager.js +213 -0
  23. package/Modal/index.d.ts +1 -1
  24. package/Modal/index.js +1 -1
  25. package/Modal/useModal.d.ts +13 -0
  26. package/Modal/useModal.js +195 -0
  27. package/Modal/useModal.types.d.ts +115 -0
  28. package/Modal/useModal.types.js +1 -0
  29. package/NoSsr/NoSsr.d.ts +25 -0
  30. package/NoSsr/NoSsr.js +73 -0
  31. package/NoSsr/NoSsr.types.d.ts +18 -0
  32. package/NoSsr/NoSsr.types.js +1 -0
  33. package/NoSsr/index.d.ts +3 -2
  34. package/NoSsr/index.js +1 -1
  35. package/Popover/Popover.js +2 -1
  36. package/Popper/BasePopper.d.ts +7 -0
  37. package/Popper/BasePopper.js +372 -0
  38. package/Popper/BasePopper.types.d.ts +130 -0
  39. package/Popper/BasePopper.types.js +1 -0
  40. package/Popper/Popper.d.ts +1 -1
  41. package/Popper/Popper.js +1 -1
  42. package/Popper/index.d.ts +2 -1
  43. package/Popper/index.js +2 -1
  44. package/Popper/popperClasses.d.ts +8 -0
  45. package/Popper/popperClasses.js +7 -0
  46. package/Portal/Portal.d.ts +16 -0
  47. package/Portal/Portal.js +92 -0
  48. package/Portal/Portal.types.d.ts +23 -0
  49. package/Portal/Portal.types.js +1 -0
  50. package/Portal/index.d.ts +3 -2
  51. package/Portal/index.js +1 -1
  52. package/Slider/Slider.d.ts +2 -2
  53. package/Slider/Slider.js +3 -2
  54. package/Slider/useSlider.d.ts +14 -0
  55. package/Slider/useSlider.js +655 -0
  56. package/Slider/useSlider.types.d.ts +228 -0
  57. package/Slider/useSlider.types.js +1 -0
  58. package/Snackbar/Snackbar.d.ts +1 -1
  59. package/Snackbar/Snackbar.js +4 -5
  60. package/Snackbar/useSnackbar.d.ts +14 -0
  61. package/Snackbar/useSnackbar.js +131 -0
  62. package/Snackbar/useSnackbar.types.d.ts +60 -0
  63. package/Snackbar/useSnackbar.types.js +1 -0
  64. package/SwipeableDrawer/SwipeableDrawer.js +1 -1
  65. package/TabScrollButton/TabScrollButton.d.ts +1 -1
  66. package/TabScrollButton/TabScrollButton.js +1 -1
  67. package/TablePagination/TablePagination.js +1 -1
  68. package/Tabs/Tabs.d.ts +1 -1
  69. package/Tabs/Tabs.js +1 -1
  70. package/TextareaAutosize/TextareaAutosize.d.ts +14 -0
  71. package/TextareaAutosize/TextareaAutosize.js +223 -0
  72. package/TextareaAutosize/TextareaAutosize.types.d.ts +13 -0
  73. package/TextareaAutosize/TextareaAutosize.types.js +1 -0
  74. package/TextareaAutosize/index.d.ts +3 -2
  75. package/TextareaAutosize/index.js +1 -1
  76. package/Tooltip/Tooltip.js +2 -3
  77. package/Unstable_TrapFocus/FocusTrap.d.ts +10 -0
  78. package/Unstable_TrapFocus/FocusTrap.js +332 -0
  79. package/Unstable_TrapFocus/FocusTrap.types.d.ts +51 -0
  80. package/Unstable_TrapFocus/FocusTrap.types.js +1 -0
  81. package/Unstable_TrapFocus/index.d.ts +2 -2
  82. package/Unstable_TrapFocus/index.js +1 -1
  83. package/index.d.ts +1 -1
  84. package/index.js +2 -2
  85. package/legacy/Autocomplete/Autocomplete.js +1 -1
  86. package/legacy/Badge/Badge.js +2 -2
  87. package/legacy/Badge/useBadge.js +42 -0
  88. package/legacy/Badge/useBadge.types.js +1 -0
  89. package/legacy/Breadcrumbs/Breadcrumbs.js +1 -1
  90. package/legacy/ClickAwayListener/ClickAwayListener.js +181 -0
  91. package/legacy/ClickAwayListener/index.js +1 -1
  92. package/legacy/InputBase/InputBase.js +2 -2
  93. package/legacy/ListItem/ListItem.js +1 -1
  94. package/legacy/Menu/Menu.js +1 -1
  95. package/legacy/Modal/Modal.js +2 -2
  96. package/legacy/Modal/ModalManager.js +233 -0
  97. package/legacy/Modal/index.js +1 -1
  98. package/legacy/Modal/useModal.js +206 -0
  99. package/legacy/Modal/useModal.types.js +1 -0
  100. package/legacy/NoSsr/NoSsr.js +75 -0
  101. package/legacy/NoSsr/NoSsr.types.js +1 -0
  102. package/legacy/NoSsr/index.js +1 -1
  103. package/legacy/Popover/Popover.js +2 -1
  104. package/legacy/Popper/BasePopper.js +380 -0
  105. package/legacy/Popper/BasePopper.types.js +1 -0
  106. package/legacy/Popper/Popper.js +1 -1
  107. package/legacy/Popper/index.js +2 -1
  108. package/legacy/Popper/popperClasses.js +7 -0
  109. package/legacy/Portal/Portal.js +92 -0
  110. package/legacy/Portal/Portal.types.js +1 -0
  111. package/legacy/Portal/index.js +1 -1
  112. package/legacy/Slider/Slider.js +3 -2
  113. package/legacy/Slider/useSlider.js +701 -0
  114. package/legacy/Slider/useSlider.types.js +1 -0
  115. package/legacy/Snackbar/Snackbar.js +4 -5
  116. package/legacy/Snackbar/useSnackbar.js +141 -0
  117. package/legacy/Snackbar/useSnackbar.types.js +1 -0
  118. package/legacy/SwipeableDrawer/SwipeableDrawer.js +1 -1
  119. package/legacy/TabScrollButton/TabScrollButton.js +1 -1
  120. package/legacy/TablePagination/TablePagination.js +1 -1
  121. package/legacy/Tabs/Tabs.js +1 -1
  122. package/legacy/TextareaAutosize/TextareaAutosize.js +220 -0
  123. package/legacy/TextareaAutosize/TextareaAutosize.types.js +1 -0
  124. package/legacy/TextareaAutosize/index.js +1 -1
  125. package/legacy/Tooltip/Tooltip.js +2 -3
  126. package/legacy/Unstable_TrapFocus/FocusTrap.js +341 -0
  127. package/legacy/Unstable_TrapFocus/FocusTrap.types.js +1 -0
  128. package/legacy/Unstable_TrapFocus/index.js +1 -1
  129. package/legacy/index.js +2 -2
  130. package/legacy/useAutocomplete/useAutocomplete.js +1078 -2
  131. package/legacy/utils/PolymorphicComponent.js +1 -0
  132. package/legacy/utils/areArraysEqual.js +9 -0
  133. package/legacy/utils/index.js +1 -1
  134. package/legacy/utils/shouldSpreadAdditionalProps.js +1 -1
  135. package/legacy/utils/useSlot.js +3 -1
  136. package/modern/Autocomplete/Autocomplete.js +1 -1
  137. package/modern/Badge/Badge.js +2 -2
  138. package/modern/Badge/useBadge.js +41 -0
  139. package/modern/Badge/useBadge.types.js +1 -0
  140. package/modern/Breadcrumbs/Breadcrumbs.js +1 -1
  141. package/modern/ClickAwayListener/ClickAwayListener.js +178 -0
  142. package/modern/ClickAwayListener/index.js +1 -1
  143. package/modern/InputBase/InputBase.js +2 -2
  144. package/modern/ListItem/ListItem.js +1 -1
  145. package/modern/Menu/Menu.js +1 -1
  146. package/modern/Modal/Modal.js +2 -2
  147. package/modern/Modal/ModalManager.js +213 -0
  148. package/modern/Modal/index.js +1 -1
  149. package/modern/Modal/useModal.js +193 -0
  150. package/modern/Modal/useModal.types.js +1 -0
  151. package/modern/NoSsr/NoSsr.js +73 -0
  152. package/modern/NoSsr/NoSsr.types.js +1 -0
  153. package/modern/NoSsr/index.js +1 -1
  154. package/modern/Popover/Popover.js +2 -1
  155. package/modern/Popper/BasePopper.js +371 -0
  156. package/modern/Popper/BasePopper.types.js +1 -0
  157. package/modern/Popper/Popper.js +1 -1
  158. package/modern/Popper/index.js +2 -1
  159. package/modern/Popper/popperClasses.js +7 -0
  160. package/modern/Portal/Portal.js +92 -0
  161. package/modern/Portal/Portal.types.js +1 -0
  162. package/modern/Portal/index.js +1 -1
  163. package/modern/Slider/Slider.js +3 -2
  164. package/modern/Slider/useSlider.js +643 -0
  165. package/modern/Slider/useSlider.types.js +1 -0
  166. package/modern/Snackbar/Snackbar.js +4 -5
  167. package/modern/Snackbar/useSnackbar.js +131 -0
  168. package/modern/Snackbar/useSnackbar.types.js +1 -0
  169. package/modern/SwipeableDrawer/SwipeableDrawer.js +1 -1
  170. package/modern/TabScrollButton/TabScrollButton.js +1 -1
  171. package/modern/TablePagination/TablePagination.js +1 -1
  172. package/modern/Tabs/Tabs.js +1 -1
  173. package/modern/TextareaAutosize/TextareaAutosize.js +223 -0
  174. package/modern/TextareaAutosize/TextareaAutosize.types.js +1 -0
  175. package/modern/TextareaAutosize/index.js +1 -1
  176. package/modern/Tooltip/Tooltip.js +2 -3
  177. package/modern/Unstable_TrapFocus/FocusTrap.js +331 -0
  178. package/modern/Unstable_TrapFocus/FocusTrap.types.js +1 -0
  179. package/modern/Unstable_TrapFocus/index.js +1 -1
  180. package/modern/index.js +2 -2
  181. package/modern/useAutocomplete/useAutocomplete.js +987 -2
  182. package/modern/utils/PolymorphicComponent.js +1 -0
  183. package/modern/utils/areArraysEqual.js +4 -0
  184. package/modern/utils/index.js +1 -1
  185. package/modern/utils/shouldSpreadAdditionalProps.js +1 -1
  186. package/modern/utils/useSlot.js +3 -1
  187. package/node/Autocomplete/Autocomplete.js +3 -3
  188. package/node/Badge/Badge.js +5 -5
  189. package/node/Badge/useBadge.js +46 -0
  190. package/node/Badge/useBadge.types.js +5 -0
  191. package/node/Breadcrumbs/Breadcrumbs.js +2 -2
  192. package/node/ClickAwayListener/ClickAwayListener.js +184 -0
  193. package/node/ClickAwayListener/index.js +1 -1
  194. package/node/InputBase/InputBase.js +7 -7
  195. package/node/ListItem/ListItem.js +3 -3
  196. package/node/Menu/Menu.js +3 -3
  197. package/node/Modal/Modal.js +5 -5
  198. package/node/Modal/ModalManager.js +221 -0
  199. package/node/Modal/index.js +2 -2
  200. package/node/Modal/useModal.js +203 -0
  201. package/node/Modal/useModal.types.js +5 -0
  202. package/node/NoSsr/NoSsr.js +81 -0
  203. package/node/NoSsr/NoSsr.types.js +5 -0
  204. package/node/NoSsr/index.js +3 -2
  205. package/node/Popover/Popover.js +5 -4
  206. package/node/Popper/BasePopper.js +380 -0
  207. package/node/Popper/BasePopper.types.js +5 -0
  208. package/node/Popper/Popper.js +2 -2
  209. package/node/Popper/index.js +14 -1
  210. package/node/Popper/popperClasses.js +15 -0
  211. package/node/Portal/Portal.js +100 -0
  212. package/node/Portal/Portal.types.js +5 -0
  213. package/node/Portal/index.js +3 -2
  214. package/node/Slider/Slider.js +14 -13
  215. package/node/Slider/useSlider.js +666 -0
  216. package/node/Slider/useSlider.types.js +5 -0
  217. package/node/Snackbar/Snackbar.js +9 -10
  218. package/node/Snackbar/useSnackbar.js +139 -0
  219. package/node/Snackbar/useSnackbar.types.js +5 -0
  220. package/node/SwipeableDrawer/SwipeableDrawer.js +2 -2
  221. package/node/TabScrollButton/TabScrollButton.js +3 -3
  222. package/node/TablePagination/TablePagination.js +2 -2
  223. package/node/Tabs/Tabs.js +3 -3
  224. package/node/TextareaAutosize/TextareaAutosize.js +230 -0
  225. package/node/TextareaAutosize/TextareaAutosize.types.js +5 -0
  226. package/node/TextareaAutosize/index.js +3 -2
  227. package/node/Tooltip/Tooltip.js +10 -11
  228. package/node/Unstable_TrapFocus/FocusTrap.js +339 -0
  229. package/node/Unstable_TrapFocus/FocusTrap.types.js +5 -0
  230. package/node/Unstable_TrapFocus/index.js +3 -2
  231. package/node/index.js +3 -3
  232. package/node/useAutocomplete/useAutocomplete.js +997 -18
  233. package/node/utils/PolymorphicComponent.js +5 -0
  234. package/node/utils/areArraysEqual.js +10 -0
  235. package/node/utils/index.js +2 -2
  236. package/node/utils/shouldSpreadAdditionalProps.js +3 -2
  237. package/node/utils/useSlot.js +6 -4
  238. package/package.json +5 -5
  239. package/styles/overrides.d.ts +1 -1
  240. package/umd/material-ui.development.js +9190 -9248
  241. package/umd/material-ui.production.min.js +3 -3
  242. package/useAutocomplete/useAutocomplete.d.ts +460 -2
  243. package/useAutocomplete/useAutocomplete.js +994 -2
  244. package/utils/PolymorphicComponent.d.ts +17 -0
  245. package/utils/PolymorphicComponent.js +1 -0
  246. package/utils/areArraysEqual.d.ts +3 -0
  247. package/utils/areArraysEqual.js +4 -0
  248. package/utils/index.d.ts +2 -1
  249. package/utils/index.js +1 -1
  250. package/utils/shouldSpreadAdditionalProps.js +1 -1
  251. package/utils/types.d.ts +2 -1
  252. package/utils/useSlot.js +3 -1
@@ -0,0 +1,131 @@
1
+ 'use client';
2
+
3
+ import _extends from "@babel/runtime/helpers/esm/extends";
4
+ import * as React from 'react';
5
+ import { unstable_useEventCallback as useEventCallback, unstable_useTimeout as useTimeout } from '@mui/utils';
6
+ import extractEventHandlers from '@mui/utils/extractEventHandlers';
7
+ /**
8
+ * The basic building block for creating custom snackbar.
9
+ *
10
+ * Demos:
11
+ *
12
+ * - [Snackbar](https://mui.com/base-ui/react-snackbar/#hook)
13
+ *
14
+ * API:
15
+ *
16
+ * - [useSnackbar API](https://mui.com/base-ui/react-snackbar/hooks-api/#use-snackbar)
17
+ */
18
+ function useSnackbar(parameters = {}) {
19
+ const {
20
+ autoHideDuration = null,
21
+ disableWindowBlurListener = false,
22
+ onClose,
23
+ open,
24
+ resumeHideDuration
25
+ } = parameters;
26
+ const timerAutoHide = useTimeout();
27
+ React.useEffect(() => {
28
+ if (!open) {
29
+ return undefined;
30
+ }
31
+
32
+ /**
33
+ * @param {KeyboardEvent} nativeEvent
34
+ */
35
+ function handleKeyDown(nativeEvent) {
36
+ if (!nativeEvent.defaultPrevented) {
37
+ // IE11, Edge (prior to using Blink?) use 'Esc'
38
+ if (nativeEvent.key === 'Escape' || nativeEvent.key === 'Esc') {
39
+ // not calling `preventDefault` since we don't know if people may ignore this event e.g. a permanently open snackbar
40
+ onClose?.(nativeEvent, 'escapeKeyDown');
41
+ }
42
+ }
43
+ }
44
+ document.addEventListener('keydown', handleKeyDown);
45
+ return () => {
46
+ document.removeEventListener('keydown', handleKeyDown);
47
+ };
48
+ }, [open, onClose]);
49
+ const handleClose = useEventCallback((event, reason) => {
50
+ onClose?.(event, reason);
51
+ });
52
+ const setAutoHideTimer = useEventCallback(autoHideDurationParam => {
53
+ if (!onClose || autoHideDurationParam == null) {
54
+ return;
55
+ }
56
+ timerAutoHide.start(autoHideDurationParam, () => {
57
+ handleClose(null, 'timeout');
58
+ });
59
+ });
60
+ React.useEffect(() => {
61
+ if (open) {
62
+ setAutoHideTimer(autoHideDuration);
63
+ }
64
+ return timerAutoHide.clear;
65
+ }, [open, autoHideDuration, setAutoHideTimer, timerAutoHide]);
66
+ const handleClickAway = event => {
67
+ onClose?.(event, 'clickaway');
68
+ };
69
+
70
+ // Pause the timer when the user is interacting with the Snackbar
71
+ // or when the user hide the window.
72
+ const handlePause = timerAutoHide.clear;
73
+
74
+ // Restart the timer when the user is no longer interacting with the Snackbar
75
+ // or when the window is shown back.
76
+ const handleResume = React.useCallback(() => {
77
+ if (autoHideDuration != null) {
78
+ setAutoHideTimer(resumeHideDuration != null ? resumeHideDuration : autoHideDuration * 0.5);
79
+ }
80
+ }, [autoHideDuration, resumeHideDuration, setAutoHideTimer]);
81
+ const createHandleBlur = otherHandlers => event => {
82
+ const onBlurCallback = otherHandlers.onBlur;
83
+ onBlurCallback?.(event);
84
+ handleResume();
85
+ };
86
+ const createHandleFocus = otherHandlers => event => {
87
+ const onFocusCallback = otherHandlers.onFocus;
88
+ onFocusCallback?.(event);
89
+ handlePause();
90
+ };
91
+ const createMouseEnter = otherHandlers => event => {
92
+ const onMouseEnterCallback = otherHandlers.onMouseEnter;
93
+ onMouseEnterCallback?.(event);
94
+ handlePause();
95
+ };
96
+ const createMouseLeave = otherHandlers => event => {
97
+ const onMouseLeaveCallback = otherHandlers.onMouseLeave;
98
+ onMouseLeaveCallback?.(event);
99
+ handleResume();
100
+ };
101
+ React.useEffect(() => {
102
+ // TODO: window global should be refactored here
103
+ if (!disableWindowBlurListener && open) {
104
+ window.addEventListener('focus', handleResume);
105
+ window.addEventListener('blur', handlePause);
106
+ return () => {
107
+ window.removeEventListener('focus', handleResume);
108
+ window.removeEventListener('blur', handlePause);
109
+ };
110
+ }
111
+ return undefined;
112
+ }, [disableWindowBlurListener, open, handleResume, handlePause]);
113
+ const getRootProps = (externalProps = {}) => {
114
+ const externalEventHandlers = _extends({}, extractEventHandlers(parameters), extractEventHandlers(externalProps));
115
+ return _extends({
116
+ // ClickAwayListener adds an `onClick` prop which results in the alert not being announced.
117
+ // See https://github.com/mui/material-ui/issues/29080
118
+ role: 'presentation'
119
+ }, externalProps, externalEventHandlers, {
120
+ onBlur: createHandleBlur(externalEventHandlers),
121
+ onFocus: createHandleFocus(externalEventHandlers),
122
+ onMouseEnter: createMouseEnter(externalEventHandlers),
123
+ onMouseLeave: createMouseLeave(externalEventHandlers)
124
+ });
125
+ };
126
+ return {
127
+ getRootProps,
128
+ onClickAway: handleClickAway
129
+ };
130
+ }
131
+ export default useSnackbar;
@@ -0,0 +1 @@
1
+ export {};
@@ -8,7 +8,7 @@ import * as React from 'react';
8
8
  import * as ReactDOM from 'react-dom';
9
9
  import PropTypes from 'prop-types';
10
10
  import elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';
11
- import { NoSsr } from '@mui/base';
11
+ import NoSsr from '../NoSsr';
12
12
  import { useDefaultProps } from '../DefaultPropsProvider';
13
13
  import Drawer, { getAnchor, isHorizontal } from '../Drawer/Drawer';
14
14
  import useForkRef from '../utils/useForkRef';
@@ -7,9 +7,9 @@ const _excluded = ["className", "slots", "slotProps", "direction", "orientation"
7
7
  import * as React from 'react';
8
8
  import PropTypes from 'prop-types';
9
9
  import clsx from 'clsx';
10
- import { useSlotProps } from '@mui/base/utils';
11
10
  import composeClasses from '@mui/utils/composeClasses';
12
11
  import { useRtl } from '@mui/system/RtlProvider';
12
+ import useSlotProps from '@mui/utils/useSlotProps';
13
13
  import KeyboardArrowLeft from '../internal/svg-icons/KeyboardArrowLeft';
14
14
  import KeyboardArrowRight from '../internal/svg-icons/KeyboardArrowRight';
15
15
  import ButtonBase from '../ButtonBase';
@@ -9,8 +9,8 @@ import PropTypes from 'prop-types';
9
9
  import clsx from 'clsx';
10
10
  import integerPropType from '@mui/utils/integerPropType';
11
11
  import chainPropTypes from '@mui/utils/chainPropTypes';
12
- import { isHostComponent } from '@mui/base/utils';
13
12
  import composeClasses from '@mui/utils/composeClasses';
13
+ import isHostComponent from '@mui/utils/isHostComponent';
14
14
  import styled from '../styles/styled';
15
15
  import { useDefaultProps } from '../DefaultPropsProvider';
16
16
  import InputBase from '../InputBase';
@@ -8,9 +8,9 @@ import { isFragment } from 'react-is';
8
8
  import PropTypes from 'prop-types';
9
9
  import clsx from 'clsx';
10
10
  import refType from '@mui/utils/refType';
11
- import { useSlotProps } from '@mui/base/utils';
12
11
  import composeClasses from '@mui/utils/composeClasses';
13
12
  import { useRtl } from '@mui/system/RtlProvider';
13
+ import useSlotProps from '@mui/utils/useSlotProps';
14
14
  import styled from '../styles/styled';
15
15
  import { useDefaultProps } from '../DefaultPropsProvider';
16
16
  import useTheme from '../styles/useTheme';
@@ -0,0 +1,223 @@
1
+ 'use client';
2
+
3
+ import _extends from "@babel/runtime/helpers/esm/extends";
4
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
5
+ const _excluded = ["onChange", "maxRows", "minRows", "style", "value"];
6
+ import * as React from 'react';
7
+ import PropTypes from 'prop-types';
8
+ import { unstable_debounce as debounce, unstable_useForkRef as useForkRef, unstable_useEnhancedEffect as useEnhancedEffect, unstable_ownerWindow as ownerWindow } from '@mui/utils';
9
+ import { jsx as _jsx } from "react/jsx-runtime";
10
+ import { jsxs as _jsxs } from "react/jsx-runtime";
11
+ function getStyleValue(value) {
12
+ return parseInt(value, 10) || 0;
13
+ }
14
+ const styles = {
15
+ shadow: {
16
+ // Visibility needed to hide the extra text area on iPads
17
+ visibility: 'hidden',
18
+ // Remove from the content flow
19
+ position: 'absolute',
20
+ // Ignore the scrollbar width
21
+ overflow: 'hidden',
22
+ height: 0,
23
+ top: 0,
24
+ left: 0,
25
+ // Create a new layer, increase the isolation of the computed values
26
+ transform: 'translateZ(0)'
27
+ }
28
+ };
29
+ function isEmpty(obj) {
30
+ return obj === undefined || obj === null || Object.keys(obj).length === 0 || obj.outerHeightStyle === 0 && !obj.overflowing;
31
+ }
32
+
33
+ /**
34
+ *
35
+ * Demos:
36
+ *
37
+ * - [Textarea Autosize](https://mui.com/material-ui/react-textarea-autosize/)
38
+ *
39
+ * API:
40
+ *
41
+ * - [TextareaAutosize API](https://mui.com/material-ui/api/textarea-autosize/)
42
+ */
43
+ const TextareaAutosize = /*#__PURE__*/React.forwardRef(function TextareaAutosize(props, forwardedRef) {
44
+ const {
45
+ onChange,
46
+ maxRows,
47
+ minRows = 1,
48
+ style,
49
+ value
50
+ } = props,
51
+ other = _objectWithoutPropertiesLoose(props, _excluded);
52
+ const {
53
+ current: isControlled
54
+ } = React.useRef(value != null);
55
+ const inputRef = React.useRef(null);
56
+ const handleRef = useForkRef(forwardedRef, inputRef);
57
+ const heightRef = React.useRef(null);
58
+ const shadowRef = React.useRef(null);
59
+ const calculateTextareaStyles = React.useCallback(() => {
60
+ const input = inputRef.current;
61
+ const containerWindow = ownerWindow(input);
62
+ const computedStyle = containerWindow.getComputedStyle(input);
63
+
64
+ // If input's width is shrunk and it's not visible, don't sync height.
65
+ if (computedStyle.width === '0px') {
66
+ return {
67
+ outerHeightStyle: 0,
68
+ overflowing: false
69
+ };
70
+ }
71
+ const inputShallow = shadowRef.current;
72
+ inputShallow.style.width = computedStyle.width;
73
+ inputShallow.value = input.value || props.placeholder || 'x';
74
+ if (inputShallow.value.slice(-1) === '\n') {
75
+ // Certain fonts which overflow the line height will cause the textarea
76
+ // to report a different scrollHeight depending on whether the last line
77
+ // is empty. Make it non-empty to avoid this issue.
78
+ inputShallow.value += ' ';
79
+ }
80
+ const boxSizing = computedStyle.boxSizing;
81
+ const padding = getStyleValue(computedStyle.paddingBottom) + getStyleValue(computedStyle.paddingTop);
82
+ const border = getStyleValue(computedStyle.borderBottomWidth) + getStyleValue(computedStyle.borderTopWidth);
83
+
84
+ // The height of the inner content
85
+ const innerHeight = inputShallow.scrollHeight;
86
+
87
+ // Measure height of a textarea with a single row
88
+ inputShallow.value = 'x';
89
+ const singleRowHeight = inputShallow.scrollHeight;
90
+
91
+ // The height of the outer content
92
+ let outerHeight = innerHeight;
93
+ if (minRows) {
94
+ outerHeight = Math.max(Number(minRows) * singleRowHeight, outerHeight);
95
+ }
96
+ if (maxRows) {
97
+ outerHeight = Math.min(Number(maxRows) * singleRowHeight, outerHeight);
98
+ }
99
+ outerHeight = Math.max(outerHeight, singleRowHeight);
100
+
101
+ // Take the box sizing into account for applying this value as a style.
102
+ const outerHeightStyle = outerHeight + (boxSizing === 'border-box' ? padding + border : 0);
103
+ const overflowing = Math.abs(outerHeight - innerHeight) <= 1;
104
+ return {
105
+ outerHeightStyle,
106
+ overflowing
107
+ };
108
+ }, [maxRows, minRows, props.placeholder]);
109
+ const syncHeight = React.useCallback(() => {
110
+ const textareaStyles = calculateTextareaStyles();
111
+ if (isEmpty(textareaStyles)) {
112
+ return;
113
+ }
114
+ const outerHeightStyle = textareaStyles.outerHeightStyle;
115
+ const input = inputRef.current;
116
+ if (heightRef.current !== outerHeightStyle) {
117
+ heightRef.current = outerHeightStyle;
118
+ input.style.height = `${outerHeightStyle}px`;
119
+ }
120
+ input.style.overflow = textareaStyles.overflowing ? 'hidden' : '';
121
+ }, [calculateTextareaStyles]);
122
+ useEnhancedEffect(() => {
123
+ const handleResize = () => {
124
+ syncHeight();
125
+ };
126
+ // Workaround a "ResizeObserver loop completed with undelivered notifications" error
127
+ // in test.
128
+ // Note that we might need to use this logic in production per https://github.com/WICG/resize-observer/issues/38
129
+ // Also see https://github.com/mui/mui-x/issues/8733
130
+ let rAF;
131
+ const rAFHandleResize = () => {
132
+ cancelAnimationFrame(rAF);
133
+ rAF = requestAnimationFrame(() => {
134
+ handleResize();
135
+ });
136
+ };
137
+ const debounceHandleResize = debounce(handleResize);
138
+ const input = inputRef.current;
139
+ const containerWindow = ownerWindow(input);
140
+ containerWindow.addEventListener('resize', debounceHandleResize);
141
+ let resizeObserver;
142
+ if (typeof ResizeObserver !== 'undefined') {
143
+ resizeObserver = new ResizeObserver(process.env.NODE_ENV === 'test' ? rAFHandleResize : handleResize);
144
+ resizeObserver.observe(input);
145
+ }
146
+ return () => {
147
+ debounceHandleResize.clear();
148
+ cancelAnimationFrame(rAF);
149
+ containerWindow.removeEventListener('resize', debounceHandleResize);
150
+ if (resizeObserver) {
151
+ resizeObserver.disconnect();
152
+ }
153
+ };
154
+ }, [calculateTextareaStyles, syncHeight]);
155
+ useEnhancedEffect(() => {
156
+ syncHeight();
157
+ });
158
+ const handleChange = event => {
159
+ if (!isControlled) {
160
+ syncHeight();
161
+ }
162
+ if (onChange) {
163
+ onChange(event);
164
+ }
165
+ };
166
+ return /*#__PURE__*/_jsxs(React.Fragment, {
167
+ children: [/*#__PURE__*/_jsx("textarea", _extends({
168
+ value: value,
169
+ onChange: handleChange,
170
+ ref: handleRef
171
+ // Apply the rows prop to get a "correct" first SSR paint
172
+ ,
173
+ rows: minRows,
174
+ style: style
175
+ }, other)), /*#__PURE__*/_jsx("textarea", {
176
+ "aria-hidden": true,
177
+ className: props.className,
178
+ readOnly: true,
179
+ ref: shadowRef,
180
+ tabIndex: -1,
181
+ style: _extends({}, styles.shadow, style, {
182
+ paddingTop: 0,
183
+ paddingBottom: 0
184
+ })
185
+ })]
186
+ });
187
+ });
188
+ process.env.NODE_ENV !== "production" ? TextareaAutosize.propTypes /* remove-proptypes */ = {
189
+ // ┌────────────────────────────── Warning ──────────────────────────────┐
190
+ // │ These PropTypes are generated from the TypeScript type definitions. │
191
+ // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │
192
+ // └─────────────────────────────────────────────────────────────────────┘
193
+ /**
194
+ * @ignore
195
+ */
196
+ className: PropTypes.string,
197
+ /**
198
+ * Maximum number of rows to display.
199
+ */
200
+ maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
201
+ /**
202
+ * Minimum number of rows to display.
203
+ * @default 1
204
+ */
205
+ minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
206
+ /**
207
+ * @ignore
208
+ */
209
+ onChange: PropTypes.func,
210
+ /**
211
+ * @ignore
212
+ */
213
+ placeholder: PropTypes.string,
214
+ /**
215
+ * @ignore
216
+ */
217
+ style: PropTypes.object,
218
+ /**
219
+ * @ignore
220
+ */
221
+ value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.number, PropTypes.string])
222
+ } : void 0;
223
+ export default TextareaAutosize;
@@ -0,0 +1 @@
1
+ export {};
@@ -1 +1 @@
1
- export { TextareaAutosize as default } from '@mui/base/TextareaAutosize';
1
+ export { default } from './TextareaAutosize';
@@ -8,12 +8,11 @@ import PropTypes from 'prop-types';
8
8
  import clsx from 'clsx';
9
9
  import useTimeout, { Timeout } from '@mui/utils/useTimeout';
10
10
  import elementAcceptingRef from '@mui/utils/elementAcceptingRef';
11
- import { appendOwnerState } from '@mui/base/utils';
12
11
  import composeClasses from '@mui/utils/composeClasses';
13
12
  import { alpha } from '@mui/system/colorManipulator';
14
13
  import { useRtl } from '@mui/system/RtlProvider';
15
- import styled from '../styles/styled';
16
- import useTheme from '../styles/useTheme';
14
+ import appendOwnerState from '@mui/utils/appendOwnerState';
15
+ import { styled, useTheme } from '../styles';
17
16
  import { useDefaultProps } from '../DefaultPropsProvider';
18
17
  import capitalize from '../utils/capitalize';
19
18
  import Grow from '../Grow';