@mui/material 6.0.0-beta.0 → 6.0.0-beta.1

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 (207) 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 +32 -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 +1 -1
  21. package/Modal/ModalManager.d.ts +25 -0
  22. package/Modal/ModalManager.js +211 -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 +1 -1
  36. package/Popper/BasePopper.d.ts +7 -0
  37. package/Popper/BasePopper.js +370 -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 +647 -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 +3 -3
  60. package/Snackbar/useSnackbar.d.ts +14 -0
  61. package/Snackbar/useSnackbar.js +133 -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 +222 -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 +1 -1
  77. package/Unstable_TrapFocus/FocusTrap.d.ts +10 -0
  78. package/Unstable_TrapFocus/FocusTrap.js +330 -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/modern/Autocomplete/Autocomplete.js +1 -1
  86. package/modern/Badge/Badge.js +2 -2
  87. package/modern/Badge/useBadge.js +41 -0
  88. package/modern/Badge/useBadge.types.js +1 -0
  89. package/modern/Breadcrumbs/Breadcrumbs.js +1 -1
  90. package/modern/ClickAwayListener/ClickAwayListener.js +178 -0
  91. package/modern/ClickAwayListener/index.js +1 -1
  92. package/modern/InputBase/InputBase.js +2 -2
  93. package/modern/ListItem/ListItem.js +1 -1
  94. package/modern/Menu/Menu.js +1 -1
  95. package/modern/Modal/Modal.js +1 -1
  96. package/modern/Modal/ModalManager.js +211 -0
  97. package/modern/Modal/index.js +1 -1
  98. package/modern/Modal/useModal.js +195 -0
  99. package/modern/Modal/useModal.types.js +1 -0
  100. package/modern/NoSsr/NoSsr.js +73 -0
  101. package/modern/NoSsr/NoSsr.types.js +1 -0
  102. package/modern/NoSsr/index.js +1 -1
  103. package/modern/Popover/Popover.js +1 -1
  104. package/modern/Popper/BasePopper.js +370 -0
  105. package/modern/Popper/BasePopper.types.js +1 -0
  106. package/modern/Popper/Popper.js +1 -1
  107. package/modern/Popper/index.js +2 -1
  108. package/modern/Popper/popperClasses.js +7 -0
  109. package/modern/Portal/Portal.js +92 -0
  110. package/modern/Portal/Portal.types.js +1 -0
  111. package/modern/Portal/index.js +1 -1
  112. package/modern/Slider/Slider.js +3 -2
  113. package/modern/Slider/useSlider.js +647 -0
  114. package/modern/Slider/useSlider.types.js +1 -0
  115. package/modern/Snackbar/Snackbar.js +3 -3
  116. package/modern/Snackbar/useSnackbar.js +133 -0
  117. package/modern/Snackbar/useSnackbar.types.js +1 -0
  118. package/modern/SwipeableDrawer/SwipeableDrawer.js +1 -1
  119. package/modern/TabScrollButton/TabScrollButton.js +1 -1
  120. package/modern/TablePagination/TablePagination.js +1 -1
  121. package/modern/Tabs/Tabs.js +1 -1
  122. package/modern/TextareaAutosize/TextareaAutosize.js +222 -0
  123. package/modern/TextareaAutosize/TextareaAutosize.types.js +1 -0
  124. package/modern/TextareaAutosize/index.js +1 -1
  125. package/modern/Tooltip/Tooltip.js +1 -1
  126. package/modern/Unstable_TrapFocus/FocusTrap.js +330 -0
  127. package/modern/Unstable_TrapFocus/FocusTrap.types.js +1 -0
  128. package/modern/Unstable_TrapFocus/index.js +1 -1
  129. package/modern/index.js +2 -2
  130. package/modern/useAutocomplete/useAutocomplete.js +976 -2
  131. package/modern/utils/PolymorphicComponent.js +1 -0
  132. package/modern/utils/areArraysEqual.js +4 -0
  133. package/modern/utils/index.js +1 -1
  134. package/modern/utils/isHostComponent.js +7 -0
  135. package/modern/utils/omitEventHandlers.js +18 -0
  136. package/modern/utils/shouldSpreadAdditionalProps.js +1 -1
  137. package/modern/utils/useSlot.js +3 -1
  138. package/node/Autocomplete/Autocomplete.js +3 -3
  139. package/node/Badge/Badge.js +5 -5
  140. package/node/Badge/useBadge.js +46 -0
  141. package/node/Badge/useBadge.types.js +5 -0
  142. package/node/Breadcrumbs/Breadcrumbs.js +2 -2
  143. package/node/ClickAwayListener/ClickAwayListener.js +184 -0
  144. package/node/ClickAwayListener/index.js +1 -1
  145. package/node/InputBase/InputBase.js +7 -7
  146. package/node/ListItem/ListItem.js +3 -3
  147. package/node/Menu/Menu.js +3 -3
  148. package/node/Modal/Modal.js +2 -2
  149. package/node/Modal/ModalManager.js +219 -0
  150. package/node/Modal/index.js +2 -2
  151. package/node/Modal/useModal.js +205 -0
  152. package/node/Modal/useModal.types.js +5 -0
  153. package/node/NoSsr/NoSsr.js +81 -0
  154. package/node/NoSsr/NoSsr.types.js +5 -0
  155. package/node/NoSsr/index.js +3 -2
  156. package/node/Popover/Popover.js +2 -2
  157. package/node/Popper/BasePopper.js +379 -0
  158. package/node/Popper/BasePopper.types.js +5 -0
  159. package/node/Popper/Popper.js +2 -2
  160. package/node/Popper/index.js +14 -1
  161. package/node/Popper/popperClasses.js +15 -0
  162. package/node/Portal/Portal.js +100 -0
  163. package/node/Portal/Portal.types.js +5 -0
  164. package/node/Portal/index.js +3 -2
  165. package/node/Slider/Slider.js +14 -13
  166. package/node/Slider/useSlider.js +670 -0
  167. package/node/Slider/useSlider.types.js +5 -0
  168. package/node/Snackbar/Snackbar.js +6 -6
  169. package/node/Snackbar/useSnackbar.js +141 -0
  170. package/node/Snackbar/useSnackbar.types.js +5 -0
  171. package/node/SwipeableDrawer/SwipeableDrawer.js +2 -2
  172. package/node/TabScrollButton/TabScrollButton.js +3 -3
  173. package/node/TablePagination/TablePagination.js +2 -2
  174. package/node/Tabs/Tabs.js +3 -3
  175. package/node/TextareaAutosize/TextareaAutosize.js +230 -0
  176. package/node/TextareaAutosize/TextareaAutosize.types.js +5 -0
  177. package/node/TextareaAutosize/index.js +3 -2
  178. package/node/Tooltip/Tooltip.js +5 -5
  179. package/node/Unstable_TrapFocus/FocusTrap.js +339 -0
  180. package/node/Unstable_TrapFocus/FocusTrap.types.js +5 -0
  181. package/node/Unstable_TrapFocus/index.js +3 -2
  182. package/node/index.js +3 -3
  183. package/node/useAutocomplete/useAutocomplete.js +985 -18
  184. package/node/utils/PolymorphicComponent.js +5 -0
  185. package/node/utils/areArraysEqual.js +10 -0
  186. package/node/utils/index.js +2 -2
  187. package/node/utils/isHostComponent.js +13 -0
  188. package/node/utils/omitEventHandlers.js +24 -0
  189. package/node/utils/shouldSpreadAdditionalProps.js +3 -2
  190. package/node/utils/useSlot.js +6 -4
  191. package/package.json +6 -7
  192. package/styles/overrides.d.ts +1 -1
  193. package/useAutocomplete/useAutocomplete.d.ts +468 -2
  194. package/useAutocomplete/useAutocomplete.js +976 -2
  195. package/utils/PolymorphicComponent.d.ts +17 -0
  196. package/utils/PolymorphicComponent.js +1 -0
  197. package/utils/areArraysEqual.d.ts +3 -0
  198. package/utils/areArraysEqual.js +4 -0
  199. package/utils/index.d.ts +2 -1
  200. package/utils/index.js +1 -1
  201. package/utils/isHostComponent.d.ts +6 -0
  202. package/utils/isHostComponent.js +7 -0
  203. package/utils/omitEventHandlers.d.ts +9 -0
  204. package/utils/omitEventHandlers.js +18 -0
  205. package/utils/shouldSpreadAdditionalProps.js +1 -1
  206. package/utils/types.d.ts +2 -1
  207. package/utils/useSlot.js +3 -1
@@ -0,0 +1,228 @@
1
+ import * as React from 'react';
2
+ export interface UseSliderParameters {
3
+ /**
4
+ * The id of the element containing a label for the slider.
5
+ */
6
+ 'aria-labelledby'?: string;
7
+ /**
8
+ * The default value. Use when the component is not controlled.
9
+ */
10
+ defaultValue?: number | ReadonlyArray<number>;
11
+ /**
12
+ * If `true`, the component is disabled.
13
+ * @default false
14
+ */
15
+ disabled?: boolean;
16
+ /**
17
+ * If `true`, the active thumb doesn't swap when moving pointer over a thumb while dragging another thumb.
18
+ * @default false
19
+ */
20
+ disableSwap?: boolean;
21
+ /**
22
+ * If `true` the Slider will be rendered right-to-left (with the lowest value on the right-hand side).
23
+ * @default false
24
+ */
25
+ isRtl?: boolean;
26
+ /**
27
+ * Marks indicate predetermined values to which the user can move the slider.
28
+ * If `true` the marks are spaced according the value of the `step` prop.
29
+ * If an array, it should contain objects with `value` and an optional `label` keys.
30
+ * @default false
31
+ */
32
+ marks?: boolean | ReadonlyArray<Mark>;
33
+ /**
34
+ * The maximum allowed value of the slider.
35
+ * Should not be equal to min.
36
+ * @default 100
37
+ */
38
+ max?: number;
39
+ /**
40
+ * The minimum allowed value of the slider.
41
+ * Should not be equal to max.
42
+ * @default 0
43
+ */
44
+ min?: number;
45
+ /**
46
+ * Name attribute of the hidden `input` element.
47
+ */
48
+ name?: string;
49
+ /**
50
+ * Callback function that is fired when the slider's value changed.
51
+ *
52
+ * @param {Event} event The event source of the callback.
53
+ * You can pull out the new value by accessing `event.target.value` (any).
54
+ * **Warning**: This is a generic event not a change event.
55
+ * @param {number | number[]} value The new value.
56
+ * @param {number} activeThumb Index of the currently moved thumb.
57
+ */
58
+ onChange?: (event: Event, value: number | number[], activeThumb: number) => void;
59
+ /**
60
+ * Callback function that is fired when the `mouseup` is triggered.
61
+ *
62
+ * @param {React.SyntheticEvent | Event} event The event source of the callback. **Warning**: This is a generic event not a change event.
63
+ * @param {number | number[]} value The new value.
64
+ */
65
+ onChangeCommitted?: (event: React.SyntheticEvent | Event, value: number | number[]) => void;
66
+ /**
67
+ * The component orientation.
68
+ * @default 'horizontal'
69
+ */
70
+ orientation?: 'horizontal' | 'vertical';
71
+ /**
72
+ * The ref attached to the root of the Slider.
73
+ */
74
+ rootRef?: React.Ref<Element>;
75
+ /**
76
+ * A transformation function, to change the scale of the slider.
77
+ * @param {any} x
78
+ * @returns {any}
79
+ * @default function Identity(x) {
80
+ * return x;
81
+ * }
82
+ */
83
+ scale?: (value: number) => number;
84
+ /**
85
+ * The granularity with which the slider can step through values when using Page Up/Page Down or Shift + Arrow Up/Arrow Down.
86
+ * @default 10
87
+ */
88
+ shiftStep?: number;
89
+ /**
90
+ * The granularity with which the slider can step through values. (A "discrete" slider.)
91
+ * The `min` prop serves as the origin for the valid values.
92
+ * We recommend (max - min) to be evenly divisible by the step.
93
+ *
94
+ * When step is `null`, the thumb can only be slid onto marks provided with the `marks` prop.
95
+ * @default 1
96
+ */
97
+ step?: number | null;
98
+ /**
99
+ * Tab index attribute of the hidden `input` element.
100
+ */
101
+ tabIndex?: number;
102
+ /**
103
+ * The value of the slider.
104
+ * For ranged sliders, provide an array with two values.
105
+ */
106
+ value?: number | ReadonlyArray<number>;
107
+ }
108
+ export interface Mark {
109
+ value: number;
110
+ label?: React.ReactNode;
111
+ }
112
+ export type UseSliderRootSlotOwnProps = {
113
+ onMouseDown: React.MouseEventHandler;
114
+ ref: React.RefCallback<Element> | null;
115
+ };
116
+ export type UseSliderRootSlotProps<ExternalProps = {}> = Omit<ExternalProps, keyof UseSliderRootSlotOwnProps> & UseSliderRootSlotOwnProps;
117
+ export type UseSliderThumbSlotOwnProps = {
118
+ onMouseLeave: React.MouseEventHandler;
119
+ onMouseOver: React.MouseEventHandler;
120
+ };
121
+ export type UseSliderThumbSlotProps<ExternalProps = {}> = Omit<ExternalProps, keyof UseSliderThumbSlotOwnProps> & UseSliderThumbSlotOwnProps;
122
+ export type UseSliderHiddenInputOwnProps = {
123
+ 'aria-labelledby'?: string;
124
+ 'aria-orientation'?: React.AriaAttributes['aria-orientation'];
125
+ 'aria-valuemax'?: React.AriaAttributes['aria-valuemax'];
126
+ 'aria-valuemin'?: React.AriaAttributes['aria-valuemin'];
127
+ disabled: boolean;
128
+ name?: string;
129
+ onBlur: React.FocusEventHandler;
130
+ onChange: React.ChangeEventHandler;
131
+ onFocus: React.FocusEventHandler;
132
+ step?: number | 'any';
133
+ style: React.CSSProperties;
134
+ tabIndex?: number;
135
+ type?: React.InputHTMLAttributes<HTMLInputElement>['type'];
136
+ };
137
+ export type UseSliderHiddenInputProps<ExternalProps = {}> = Omit<ExternalProps, keyof UseSliderHiddenInputOwnProps> & UseSliderHiddenInputOwnProps;
138
+ export type Axis = 'horizontal' | 'vertical' | 'horizontal-reverse';
139
+ export interface AxisProps<T extends Axis> {
140
+ offset: (percent: number) => T extends 'horizontal' ? {
141
+ left: string;
142
+ } : T extends 'vertical' ? {
143
+ bottom: string;
144
+ } : T extends 'horizontal-reverse' ? {
145
+ right: string;
146
+ } : never;
147
+ leap: (percent: number) => T extends 'horizontal' | 'horizontal-reverse' ? {
148
+ width: string;
149
+ } : T extends 'vertical' ? {
150
+ height: string;
151
+ } : never;
152
+ }
153
+ export interface UseSliderReturnValue {
154
+ /**
155
+ * The active index of the slider.
156
+ */
157
+ active: number;
158
+ /**
159
+ * The orientation of the slider.
160
+ */
161
+ axis: Axis;
162
+ /**
163
+ * Returns the `offset` and `leap` methods to calculate the positioning styles based on the slider axis.
164
+ */
165
+ axisProps: {
166
+ [key in Axis]: AxisProps<key>;
167
+ };
168
+ /**
169
+ * If `true`, the slider is being dragged.
170
+ */
171
+ dragging: boolean;
172
+ /**
173
+ * The index of the thumb which is focused on the slider.
174
+ */
175
+ focusedThumbIndex: number;
176
+ /**
177
+ * Resolver for the hidden input slot's props.
178
+ * @param externalProps props for the hidden input slot
179
+ * @returns props that should be spread on the hidden input slot
180
+ */
181
+ getHiddenInputProps: <ExternalProps extends Record<string, unknown> = {}>(externalProps?: ExternalProps) => UseSliderHiddenInputProps<ExternalProps>;
182
+ /**
183
+ * Resolver for the root slot's props.
184
+ * @param externalProps props for the root slot
185
+ * @returns props that should be spread on the root slot
186
+ */
187
+ getRootProps: <ExternalProps extends Record<string, unknown> = {}>(externalProps?: ExternalProps) => UseSliderRootSlotProps<ExternalProps>;
188
+ /**
189
+ * Resolver for the thumb slot's props.
190
+ * @param externalProps props for the thumb slot
191
+ * @returns props that should be spread on the thumb slot
192
+ */
193
+ getThumbProps: <ExternalProps extends Record<string, unknown> = {}>(externalProps?: ExternalProps) => UseSliderThumbSlotProps<ExternalProps>;
194
+ /**
195
+ * Resolver for the thumb slot's style prop.
196
+ * @param index of the currently moved thumb
197
+ * @returns props that should be spread on the style prop of thumb slot
198
+ */
199
+ getThumbStyle: (index: number) => object;
200
+ /**
201
+ * The marks of the slider. Marks indicate predetermined values to which the user can move the slider.
202
+ */
203
+ marks: Mark[];
204
+ /**
205
+ * The thumb index for the current value when in hover state.
206
+ */
207
+ open: number;
208
+ /**
209
+ * If `true`, the slider is a range slider when the `value` prop passed is an array.
210
+ */
211
+ range: boolean;
212
+ /**
213
+ * Ref to the root slot's DOM node.
214
+ */
215
+ rootRef: React.RefCallback<Element> | null;
216
+ /**
217
+ * The track leap for the current value of the slider.
218
+ */
219
+ trackLeap: number;
220
+ /**
221
+ * The track offset for the current value of the slider.
222
+ */
223
+ trackOffset: number;
224
+ /**
225
+ * The possible values of the slider.
226
+ */
227
+ values: number[];
228
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { SxProps } from '@mui/system';
3
- import { ClickAwayListenerProps } from '@mui/base/ClickAwayListener';
3
+ import { ClickAwayListenerProps } from '../ClickAwayListener';
4
4
  import { Theme } from '../styles';
5
5
  import { InternalStandardProps as StandardProps } from '..';
6
6
  import { SnackbarContentProps } from '../SnackbarContent';
@@ -2,10 +2,10 @@
2
2
 
3
3
  import * as React from 'react';
4
4
  import PropTypes from 'prop-types';
5
- import { useSlotProps } from '@mui/base/utils';
6
5
  import composeClasses from '@mui/utils/composeClasses';
7
- import { ClickAwayListener } from '@mui/base/ClickAwayListener';
8
- import { useSnackbar } from '@mui/base/useSnackbar';
6
+ import useSlotProps from '@mui/utils/useSlotProps';
7
+ import useSnackbar from './useSnackbar';
8
+ import ClickAwayListener from '../ClickAwayListener';
9
9
  import { styled, useTheme } from '../zero-styled';
10
10
  import { useDefaultProps } from '../DefaultPropsProvider';
11
11
  import capitalize from '../utils/capitalize';
@@ -0,0 +1,14 @@
1
+ import { UseSnackbarParameters, UseSnackbarReturnValue } from './useSnackbar.types';
2
+ /**
3
+ * The basic building block for creating custom snackbar.
4
+ *
5
+ * Demos:
6
+ *
7
+ * - [Snackbar](https://next.mui.com/base-ui/react-snackbar/#hook)
8
+ *
9
+ * API:
10
+ *
11
+ * - [useSnackbar API](https://next.mui.com/base-ui/react-snackbar/hooks-api/#use-snackbar)
12
+ */
13
+ declare function useSnackbar(parameters?: UseSnackbarParameters): UseSnackbarReturnValue;
14
+ export default useSnackbar;
@@ -0,0 +1,133 @@
1
+ 'use client';
2
+
3
+ import * as React from 'react';
4
+ import { unstable_useEventCallback as useEventCallback, unstable_useTimeout as useTimeout } from '@mui/utils';
5
+ import extractEventHandlers from '@mui/utils/extractEventHandlers';
6
+ /**
7
+ * The basic building block for creating custom snackbar.
8
+ *
9
+ * Demos:
10
+ *
11
+ * - [Snackbar](https://next.mui.com/base-ui/react-snackbar/#hook)
12
+ *
13
+ * API:
14
+ *
15
+ * - [useSnackbar API](https://next.mui.com/base-ui/react-snackbar/hooks-api/#use-snackbar)
16
+ */
17
+ function useSnackbar(parameters = {}) {
18
+ const {
19
+ autoHideDuration = null,
20
+ disableWindowBlurListener = false,
21
+ onClose,
22
+ open,
23
+ resumeHideDuration
24
+ } = parameters;
25
+ const timerAutoHide = useTimeout();
26
+ React.useEffect(() => {
27
+ if (!open) {
28
+ return undefined;
29
+ }
30
+
31
+ /**
32
+ * @param {KeyboardEvent} nativeEvent
33
+ */
34
+ function handleKeyDown(nativeEvent) {
35
+ if (!nativeEvent.defaultPrevented) {
36
+ if (nativeEvent.key === 'Escape') {
37
+ // not calling `preventDefault` since we don't know if people may ignore this event e.g. a permanently open snackbar
38
+ onClose?.(nativeEvent, 'escapeKeyDown');
39
+ }
40
+ }
41
+ }
42
+ document.addEventListener('keydown', handleKeyDown);
43
+ return () => {
44
+ document.removeEventListener('keydown', handleKeyDown);
45
+ };
46
+ }, [open, onClose]);
47
+ const handleClose = useEventCallback((event, reason) => {
48
+ onClose?.(event, reason);
49
+ });
50
+ const setAutoHideTimer = useEventCallback(autoHideDurationParam => {
51
+ if (!onClose || autoHideDurationParam == null) {
52
+ return;
53
+ }
54
+ timerAutoHide.start(autoHideDurationParam, () => {
55
+ handleClose(null, 'timeout');
56
+ });
57
+ });
58
+ React.useEffect(() => {
59
+ if (open) {
60
+ setAutoHideTimer(autoHideDuration);
61
+ }
62
+ return timerAutoHide.clear;
63
+ }, [open, autoHideDuration, setAutoHideTimer, timerAutoHide]);
64
+ const handleClickAway = event => {
65
+ onClose?.(event, 'clickaway');
66
+ };
67
+
68
+ // Pause the timer when the user is interacting with the Snackbar
69
+ // or when the user hide the window.
70
+ const handlePause = timerAutoHide.clear;
71
+
72
+ // Restart the timer when the user is no longer interacting with the Snackbar
73
+ // or when the window is shown back.
74
+ const handleResume = React.useCallback(() => {
75
+ if (autoHideDuration != null) {
76
+ setAutoHideTimer(resumeHideDuration != null ? resumeHideDuration : autoHideDuration * 0.5);
77
+ }
78
+ }, [autoHideDuration, resumeHideDuration, setAutoHideTimer]);
79
+ const createHandleBlur = otherHandlers => event => {
80
+ const onBlurCallback = otherHandlers.onBlur;
81
+ onBlurCallback?.(event);
82
+ handleResume();
83
+ };
84
+ const createHandleFocus = otherHandlers => event => {
85
+ const onFocusCallback = otherHandlers.onFocus;
86
+ onFocusCallback?.(event);
87
+ handlePause();
88
+ };
89
+ const createMouseEnter = otherHandlers => event => {
90
+ const onMouseEnterCallback = otherHandlers.onMouseEnter;
91
+ onMouseEnterCallback?.(event);
92
+ handlePause();
93
+ };
94
+ const createMouseLeave = otherHandlers => event => {
95
+ const onMouseLeaveCallback = otherHandlers.onMouseLeave;
96
+ onMouseLeaveCallback?.(event);
97
+ handleResume();
98
+ };
99
+ React.useEffect(() => {
100
+ // TODO: window global should be refactored here
101
+ if (!disableWindowBlurListener && open) {
102
+ window.addEventListener('focus', handleResume);
103
+ window.addEventListener('blur', handlePause);
104
+ return () => {
105
+ window.removeEventListener('focus', handleResume);
106
+ window.removeEventListener('blur', handlePause);
107
+ };
108
+ }
109
+ return undefined;
110
+ }, [disableWindowBlurListener, open, handleResume, handlePause]);
111
+ const getRootProps = (externalProps = {}) => {
112
+ const externalEventHandlers = {
113
+ ...extractEventHandlers(parameters),
114
+ ...extractEventHandlers(externalProps)
115
+ };
116
+ return {
117
+ // ClickAwayListener adds an `onClick` prop which results in the alert not being announced.
118
+ // See https://github.com/mui/material-ui/issues/29080
119
+ role: 'presentation',
120
+ ...externalProps,
121
+ ...externalEventHandlers,
122
+ onBlur: createHandleBlur(externalEventHandlers),
123
+ onFocus: createHandleFocus(externalEventHandlers),
124
+ onMouseEnter: createMouseEnter(externalEventHandlers),
125
+ onMouseLeave: createMouseLeave(externalEventHandlers)
126
+ };
127
+ };
128
+ return {
129
+ getRootProps,
130
+ onClickAway: handleClickAway
131
+ };
132
+ }
133
+ export default useSnackbar;
@@ -0,0 +1,60 @@
1
+ /// <reference types="react" />
2
+ export type SnackbarCloseReason = 'timeout' | 'clickaway' | 'escapeKeyDown';
3
+ export interface UseSnackbarParameters {
4
+ /**
5
+ * The number of milliseconds to wait before automatically calling the
6
+ * `onClose` function. `onClose` should then set the state of the `open`
7
+ * prop to hide the Snackbar. This behavior is disabled by default with
8
+ * the `null` value.
9
+ * @default null
10
+ */
11
+ autoHideDuration?: number | null;
12
+ /**
13
+ * If `true`, the `autoHideDuration` timer will expire even if the window is not focused.
14
+ * @default false
15
+ */
16
+ disableWindowBlurListener?: boolean;
17
+ /**
18
+ * Callback fired when the component requests to be closed.
19
+ * Typically `onClose` is used to set state in the parent component,
20
+ * which is used to control the `Snackbar` `open` prop.
21
+ * The `reason` parameter can optionally be used to control the response to `onClose`,
22
+ * for example ignoring `clickaway`.
23
+ *
24
+ * @param {React.SyntheticEvent<any> | Event} event The event source of the callback.
25
+ * @param {string} reason Can be: `"timeout"` (`autoHideDuration` expired), `"clickaway"`, or `"escapeKeyDown"`.
26
+ */
27
+ onClose?: (event: React.SyntheticEvent<any> | Event | null, reason: SnackbarCloseReason) => void;
28
+ /**
29
+ * If `true`, the component is shown.
30
+ */
31
+ open?: boolean;
32
+ /**
33
+ * The number of milliseconds to wait before dismissing after user interaction.
34
+ * If `autoHideDuration` prop isn't specified, it does nothing.
35
+ * If `autoHideDuration` prop is specified but `resumeHideDuration` isn't,
36
+ * we default to `autoHideDuration / 2` ms.
37
+ */
38
+ resumeHideDuration?: number;
39
+ }
40
+ export type UseSnackbarRootSlotProps<ExternalProps = {}> = ExternalProps & UseSnackbarRootSlotOwnProps;
41
+ export interface UseSnackbarRootSlotOwnProps {
42
+ onBlur: React.FocusEventHandler;
43
+ onFocus: React.FocusEventHandler;
44
+ onMouseEnter: React.MouseEventHandler;
45
+ onMouseLeave: React.MouseEventHandler;
46
+ ref?: React.RefCallback<Element>;
47
+ role: React.AriaRole;
48
+ }
49
+ export interface UseSnackbarReturnValue {
50
+ /**
51
+ * Resolver for the root slot's props.
52
+ * @param externalProps props for the root slot
53
+ * @returns props that should be spread on the root slot
54
+ */
55
+ getRootProps: <ExternalProps extends Record<string, unknown> = {}>(externalProps?: ExternalProps) => UseSnackbarRootSlotProps<ExternalProps>;
56
+ /**
57
+ * Callback fired when a "click away" event is detected.
58
+ */
59
+ onClickAway: (event: React.SyntheticEvent<any> | Event) => void;
60
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -4,7 +4,7 @@ import * as React from 'react';
4
4
  import * as ReactDOM from 'react-dom';
5
5
  import PropTypes from 'prop-types';
6
6
  import elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';
7
- import { NoSsr } from '@mui/base';
7
+ import NoSsr from '../NoSsr';
8
8
  import Drawer, { getAnchor, isHorizontal } from '../Drawer/Drawer';
9
9
  import useForkRef from '../utils/useForkRef';
10
10
  import ownerDocument from '../utils/ownerDocument';
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { SxProps } from '@mui/system';
3
- import { SlotComponentProps } from '@mui/base';
3
+ import { SlotComponentProps } from '../utils/types';
4
4
  import { ButtonBaseProps } from '../ButtonBase';
5
5
  import { SvgIcon, Theme } from '..';
6
6
  import { TabScrollButtonClasses } from './tabScrollButtonClasses';
@@ -4,9 +4,9 @@
4
4
  import * as React from 'react';
5
5
  import PropTypes from 'prop-types';
6
6
  import clsx from 'clsx';
7
- import { useSlotProps } from '@mui/base/utils';
8
7
  import composeClasses from '@mui/utils/composeClasses';
9
8
  import { useRtl } from '@mui/system/RtlProvider';
9
+ import useSlotProps from '@mui/utils/useSlotProps';
10
10
  import KeyboardArrowLeft from '../internal/svg-icons/KeyboardArrowLeft';
11
11
  import KeyboardArrowRight from '../internal/svg-icons/KeyboardArrowRight';
12
12
  import ButtonBase from '../ButtonBase';
@@ -6,8 +6,8 @@ import PropTypes from 'prop-types';
6
6
  import clsx from 'clsx';
7
7
  import integerPropType from '@mui/utils/integerPropType';
8
8
  import chainPropTypes from '@mui/utils/chainPropTypes';
9
- import { isHostComponent } from '@mui/base/utils';
10
9
  import composeClasses from '@mui/utils/composeClasses';
10
+ import isHostComponent from '../utils/isHostComponent';
11
11
  import { styled } from '../zero-styled';
12
12
  import { useDefaultProps } from '../DefaultPropsProvider';
13
13
  import InputBase from '../InputBase';
package/Tabs/Tabs.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { SxProps } from '@mui/system';
3
- import { SlotComponentProps } from '@mui/base';
4
3
  import { OverridableStringUnion } from '@mui/types';
4
+ import { SlotComponentProps } from '../utils/types';
5
5
  import { Theme } from '../styles';
6
6
  import { TabScrollButtonProps } from '../TabScrollButton';
7
7
  import { OverridableComponent, OverrideProps } from '../OverridableComponent';
package/Tabs/Tabs.js CHANGED
@@ -5,9 +5,9 @@ import { isFragment } from 'react-is';
5
5
  import PropTypes from 'prop-types';
6
6
  import clsx from 'clsx';
7
7
  import refType from '@mui/utils/refType';
8
- import { useSlotProps } from '@mui/base/utils';
9
8
  import composeClasses from '@mui/utils/composeClasses';
10
9
  import { useRtl } from '@mui/system/RtlProvider';
10
+ import useSlotProps from '@mui/utils/useSlotProps';
11
11
  import { styled, useTheme } from '../zero-styled';
12
12
  import { useDefaultProps } from '../DefaultPropsProvider';
13
13
  import debounce from '../utils/debounce';
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import { TextareaAutosizeProps } from './TextareaAutosize.types';
3
+ /**
4
+ *
5
+ * Demos:
6
+ *
7
+ * - [Textarea Autosize](https://next.mui.com/material-ui/react-textarea-autosize/)
8
+ *
9
+ * API:
10
+ *
11
+ * - [TextareaAutosize API](https://next.mui.com/material-ui/api/textarea-autosize/)
12
+ */
13
+ declare const TextareaAutosize: React.ForwardRefExoticComponent<TextareaAutosizeProps & React.RefAttributes<Element>>;
14
+ export default TextareaAutosize;