@mui/material 6.0.0-beta.0 → 6.0.0-beta.2
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.
- package/Autocomplete/Autocomplete.d.ts +6 -7
- package/Autocomplete/Autocomplete.js +1 -1
- package/Badge/Badge.d.ts +1 -1
- package/Badge/Badge.js +2 -2
- package/Badge/useBadge.d.ts +13 -0
- package/Badge/useBadge.js +41 -0
- package/Badge/useBadge.types.d.ts +40 -0
- package/Badge/useBadge.types.js +1 -0
- package/Breadcrumbs/Breadcrumbs.d.ts +1 -1
- package/Breadcrumbs/Breadcrumbs.js +1 -1
- package/CHANGELOG.md +48 -0
- package/ClickAwayListener/ClickAwayListener.d.ts +47 -0
- package/ClickAwayListener/ClickAwayListener.js +178 -0
- package/ClickAwayListener/index.d.ts +2 -2
- package/ClickAwayListener/index.js +1 -1
- package/InputBase/InputBase.js +2 -2
- package/ListItem/ListItem.js +1 -1
- package/Menu/Menu.js +1 -1
- package/Modal/Modal.d.ts +1 -1
- package/Modal/Modal.js +1 -1
- package/Modal/ModalManager.d.ts +25 -0
- package/Modal/ModalManager.js +211 -0
- package/Modal/index.d.ts +1 -1
- package/Modal/index.js +1 -1
- package/Modal/useModal.d.ts +13 -0
- package/Modal/useModal.js +195 -0
- package/Modal/useModal.types.d.ts +115 -0
- package/Modal/useModal.types.js +1 -0
- package/NoSsr/NoSsr.d.ts +25 -0
- package/NoSsr/NoSsr.js +73 -0
- package/NoSsr/NoSsr.types.d.ts +18 -0
- package/NoSsr/NoSsr.types.js +1 -0
- package/NoSsr/index.d.ts +3 -2
- package/NoSsr/index.js +1 -1
- package/Popover/Popover.js +1 -1
- package/Popper/BasePopper.d.ts +7 -0
- package/Popper/BasePopper.js +370 -0
- package/Popper/BasePopper.types.d.ts +130 -0
- package/Popper/BasePopper.types.js +1 -0
- package/Popper/Popper.d.ts +1 -1
- package/Popper/Popper.js +1 -1
- package/Popper/index.d.ts +2 -1
- package/Popper/index.js +2 -1
- package/Popper/popperClasses.d.ts +8 -0
- package/Popper/popperClasses.js +7 -0
- package/Portal/Portal.d.ts +16 -0
- package/Portal/Portal.js +92 -0
- package/Portal/Portal.types.d.ts +23 -0
- package/Portal/Portal.types.js +1 -0
- package/Portal/index.d.ts +3 -2
- package/Portal/index.js +1 -1
- package/Slider/Slider.d.ts +2 -2
- package/Slider/Slider.js +3 -2
- package/Slider/useSlider.d.ts +14 -0
- package/Slider/useSlider.js +647 -0
- package/Slider/useSlider.types.d.ts +228 -0
- package/Slider/useSlider.types.js +1 -0
- package/Snackbar/Snackbar.d.ts +1 -1
- package/Snackbar/Snackbar.js +3 -3
- package/Snackbar/useSnackbar.d.ts +14 -0
- package/Snackbar/useSnackbar.js +133 -0
- package/Snackbar/useSnackbar.types.d.ts +60 -0
- package/Snackbar/useSnackbar.types.js +1 -0
- package/SwipeableDrawer/SwipeableDrawer.js +1 -1
- package/TabScrollButton/TabScrollButton.d.ts +1 -1
- package/TabScrollButton/TabScrollButton.js +1 -1
- package/TablePagination/TablePagination.js +1 -1
- package/Tabs/Tabs.d.ts +1 -1
- package/Tabs/Tabs.js +1 -1
- package/TextareaAutosize/TextareaAutosize.d.ts +14 -0
- package/TextareaAutosize/TextareaAutosize.js +222 -0
- package/TextareaAutosize/TextareaAutosize.types.d.ts +13 -0
- package/TextareaAutosize/TextareaAutosize.types.js +1 -0
- package/TextareaAutosize/index.d.ts +3 -2
- package/TextareaAutosize/index.js +1 -1
- package/Tooltip/Tooltip.js +1 -1
- package/Unstable_TrapFocus/FocusTrap.d.ts +10 -0
- package/Unstable_TrapFocus/FocusTrap.js +330 -0
- package/Unstable_TrapFocus/FocusTrap.types.d.ts +51 -0
- package/Unstable_TrapFocus/FocusTrap.types.js +1 -0
- package/Unstable_TrapFocus/index.d.ts +2 -2
- package/Unstable_TrapFocus/index.js +1 -1
- package/index.d.ts +1 -1
- package/index.js +2 -2
- package/modern/Autocomplete/Autocomplete.js +1 -1
- package/modern/Badge/Badge.js +2 -2
- package/modern/Badge/useBadge.js +41 -0
- package/modern/Badge/useBadge.types.js +1 -0
- package/modern/Breadcrumbs/Breadcrumbs.js +1 -1
- package/modern/ClickAwayListener/ClickAwayListener.js +178 -0
- package/modern/ClickAwayListener/index.js +1 -1
- package/modern/InputBase/InputBase.js +2 -2
- package/modern/ListItem/ListItem.js +1 -1
- package/modern/Menu/Menu.js +1 -1
- package/modern/Modal/Modal.js +1 -1
- package/modern/Modal/ModalManager.js +211 -0
- package/modern/Modal/index.js +1 -1
- package/modern/Modal/useModal.js +195 -0
- package/modern/Modal/useModal.types.js +1 -0
- package/modern/NoSsr/NoSsr.js +73 -0
- package/modern/NoSsr/NoSsr.types.js +1 -0
- package/modern/NoSsr/index.js +1 -1
- package/modern/Popover/Popover.js +1 -1
- package/modern/Popper/BasePopper.js +370 -0
- package/modern/Popper/BasePopper.types.js +1 -0
- package/modern/Popper/Popper.js +1 -1
- package/modern/Popper/index.js +2 -1
- package/modern/Popper/popperClasses.js +7 -0
- package/modern/Portal/Portal.js +92 -0
- package/modern/Portal/Portal.types.js +1 -0
- package/modern/Portal/index.js +1 -1
- package/modern/Slider/Slider.js +3 -2
- package/modern/Slider/useSlider.js +647 -0
- package/modern/Slider/useSlider.types.js +1 -0
- package/modern/Snackbar/Snackbar.js +3 -3
- package/modern/Snackbar/useSnackbar.js +133 -0
- package/modern/Snackbar/useSnackbar.types.js +1 -0
- package/modern/SwipeableDrawer/SwipeableDrawer.js +1 -1
- package/modern/TabScrollButton/TabScrollButton.js +1 -1
- package/modern/TablePagination/TablePagination.js +1 -1
- package/modern/Tabs/Tabs.js +1 -1
- package/modern/TextareaAutosize/TextareaAutosize.js +222 -0
- package/modern/TextareaAutosize/TextareaAutosize.types.js +1 -0
- package/modern/TextareaAutosize/index.js +1 -1
- package/modern/Tooltip/Tooltip.js +1 -1
- package/modern/Unstable_TrapFocus/FocusTrap.js +330 -0
- package/modern/Unstable_TrapFocus/FocusTrap.types.js +1 -0
- package/modern/Unstable_TrapFocus/index.js +1 -1
- package/modern/index.js +2 -2
- package/modern/useAutocomplete/useAutocomplete.js +976 -2
- package/modern/utils/PolymorphicComponent.js +1 -0
- package/modern/utils/areArraysEqual.js +4 -0
- package/modern/utils/index.js +1 -1
- package/modern/utils/isHostComponent.js +7 -0
- package/modern/utils/omitEventHandlers.js +18 -0
- package/modern/utils/shouldSpreadAdditionalProps.js +1 -1
- package/modern/utils/useSlot.js +3 -1
- package/node/Autocomplete/Autocomplete.js +3 -3
- package/node/Badge/Badge.js +5 -5
- package/node/Badge/useBadge.js +46 -0
- package/node/Badge/useBadge.types.js +5 -0
- package/node/Breadcrumbs/Breadcrumbs.js +2 -2
- package/node/ClickAwayListener/ClickAwayListener.js +184 -0
- package/node/ClickAwayListener/index.js +1 -1
- package/node/InputBase/InputBase.js +7 -7
- package/node/ListItem/ListItem.js +3 -3
- package/node/Menu/Menu.js +3 -3
- package/node/Modal/Modal.js +2 -2
- package/node/Modal/ModalManager.js +219 -0
- package/node/Modal/index.js +2 -2
- package/node/Modal/useModal.js +205 -0
- package/node/Modal/useModal.types.js +5 -0
- package/node/NoSsr/NoSsr.js +81 -0
- package/node/NoSsr/NoSsr.types.js +5 -0
- package/node/NoSsr/index.js +3 -2
- package/node/Popover/Popover.js +2 -2
- package/node/Popper/BasePopper.js +379 -0
- package/node/Popper/BasePopper.types.js +5 -0
- package/node/Popper/Popper.js +2 -2
- package/node/Popper/index.js +14 -1
- package/node/Popper/popperClasses.js +15 -0
- package/node/Portal/Portal.js +100 -0
- package/node/Portal/Portal.types.js +5 -0
- package/node/Portal/index.js +3 -2
- package/node/Slider/Slider.js +14 -13
- package/node/Slider/useSlider.js +670 -0
- package/node/Slider/useSlider.types.js +5 -0
- package/node/Snackbar/Snackbar.js +6 -6
- package/node/Snackbar/useSnackbar.js +141 -0
- package/node/Snackbar/useSnackbar.types.js +5 -0
- package/node/SwipeableDrawer/SwipeableDrawer.js +2 -2
- package/node/TabScrollButton/TabScrollButton.js +3 -3
- package/node/TablePagination/TablePagination.js +2 -2
- package/node/Tabs/Tabs.js +3 -3
- package/node/TextareaAutosize/TextareaAutosize.js +230 -0
- package/node/TextareaAutosize/TextareaAutosize.types.js +5 -0
- package/node/TextareaAutosize/index.js +3 -2
- package/node/Tooltip/Tooltip.js +5 -5
- package/node/Unstable_TrapFocus/FocusTrap.js +339 -0
- package/node/Unstable_TrapFocus/FocusTrap.types.js +5 -0
- package/node/Unstable_TrapFocus/index.js +3 -2
- package/node/index.js +3 -3
- package/node/useAutocomplete/useAutocomplete.js +985 -18
- package/node/utils/PolymorphicComponent.js +5 -0
- package/node/utils/areArraysEqual.js +10 -0
- package/node/utils/index.js +2 -2
- package/node/utils/isHostComponent.js +13 -0
- package/node/utils/omitEventHandlers.js +24 -0
- package/node/utils/shouldSpreadAdditionalProps.js +3 -2
- package/node/utils/useSlot.js +6 -4
- package/package.json +8 -8
- package/styles/overrides.d.ts +1 -1
- package/useAutocomplete/useAutocomplete.d.ts +468 -2
- package/useAutocomplete/useAutocomplete.js +976 -2
- package/utils/PolymorphicComponent.d.ts +17 -0
- package/utils/PolymorphicComponent.js +1 -0
- package/utils/areArraysEqual.d.ts +3 -0
- package/utils/areArraysEqual.js +4 -0
- package/utils/index.d.ts +2 -1
- package/utils/index.js +1 -1
- package/utils/isHostComponent.d.ts +6 -0
- package/utils/isHostComponent.js +7 -0
- package/utils/omitEventHandlers.d.ts +9 -0
- package/utils/omitEventHandlers.js +18 -0
- package/utils/shouldSpreadAdditionalProps.js +1 -1
- package/utils/types.d.ts +2 -1
- 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 {};
|
package/Snackbar/Snackbar.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { SxProps } from '@mui/system';
|
|
3
|
-
import { ClickAwayListenerProps } from '
|
|
3
|
+
import { ClickAwayListenerProps } from '../ClickAwayListener';
|
|
4
4
|
import { Theme } from '../styles';
|
|
5
5
|
import { InternalStandardProps as StandardProps } from '..';
|
|
6
6
|
import { SnackbarContentProps } from '../SnackbarContent';
|
package/Snackbar/Snackbar.js
CHANGED
|
@@ -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
|
|
8
|
-
import
|
|
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
|
|
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 '
|
|
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;
|