@react-md/core 1.0.0-next.1 → 1.0.0-next.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +8 -0
- package/coverage/clover.xml +2 -2
- package/coverage/lcov-report/DefaultToastRenderer.tsx.html +166 -112
- package/coverage/lcov-report/Snackbar.tsx.html +360 -402
- package/coverage/lcov-report/Toast.tsx.html +868 -0
- package/coverage/lcov-report/ToastManager.tsx.html +1783 -0
- package/coverage/lcov-report/ToastManagerProvider.tsx.html +216 -216
- package/coverage/lcov-report/icon/FontIcon.tsx.html +28 -28
- package/coverage/lcov-report/icon/index.html +1 -1
- package/coverage/lcov-report/index.html +1 -1
- package/coverage/lcov-report/snackbar/Snackbar.tsx.html +55 -97
- package/coverage/lcov-report/snackbar/Toast.tsx.html +546 -501
- package/coverage/lcov-report/snackbar/ToastManager.tsx.html +269 -269
- package/coverage/lcov-report/snackbar/ToastManagerProvider.tsx.html +23 -23
- package/coverage/lcov-report/snackbar/index.html +59 -14
- package/coverage/lcov-report/snackbar/snackbarStyles.ts.html +12 -87
- package/coverage/lcov-report/snackbar/toastStyles.ts.html +206 -146
- package/coverage/lcov-report/snackbar/useCurrentToastActions.ts.html +226 -0
- package/coverage/lcov-report/snackbarStyles.ts.html +46 -121
- package/coverage/lcov-report/transition/config.ts.html +5 -5
- package/coverage/lcov-report/transition/index.html +1 -1
- package/coverage/lcov-report/typography/Typography.tsx.html +108 -402
- package/coverage/lcov-report/typography/index.html +10 -10
- package/dist/_core.scss +34 -1
- package/dist/_utils.scss +57 -0
- package/dist/app-bar/_app-bar.scss +15 -23
- package/dist/avatar/_avatar.scss +25 -34
- package/dist/badge/_badge.scss +71 -44
- package/dist/box/_box.scss +18 -29
- package/dist/button/_button.scss +50 -62
- package/dist/card/_card.scss +14 -23
- package/dist/chip/_chip.scss +33 -46
- package/dist/dialog/_dialog.scss +95 -93
- package/dist/divider/Divider.d.ts +0 -1
- package/dist/divider/Divider.js.map +1 -1
- package/dist/divider/_divider.scss +33 -43
- package/dist/form/Label.d.ts +5 -5
- package/dist/form/Label.js.map +1 -1
- package/dist/form/TextArea.js +1 -1
- package/dist/form/TextArea.js.map +1 -1
- package/dist/form/TextFieldContainerStyles.d.ts +7 -7
- package/dist/form/TextFieldContainerStyles.js.map +1 -1
- package/dist/form/_form.scss +200 -203
- package/dist/form/textAreaStyles.d.ts +2 -2
- package/dist/form/textAreaStyles.js.map +1 -1
- package/dist/form/types.d.ts +0 -2
- package/dist/form/types.js.map +1 -1
- package/dist/icon/_icon.scss +31 -47
- package/dist/interaction/_interaction.scss +47 -57
- package/dist/layout/_layout.scss +14 -19
- package/dist/link/_link.scss +15 -23
- package/dist/list/_list.scss +53 -63
- package/dist/menu/_menu.scss +16 -27
- package/dist/overlay/_overlay.scss +14 -19
- package/dist/progress/_progress.scss +25 -30
- package/dist/segmented-button/_segmented-button.scss +32 -43
- package/dist/sheet/_sheet.scss +24 -42
- package/dist/snackbar/DefaultToastRenderer.js +1 -1
- package/dist/snackbar/DefaultToastRenderer.js.map +1 -1
- package/dist/snackbar/Snackbar.d.ts +1 -3
- package/dist/snackbar/Snackbar.js +2 -3
- package/dist/snackbar/Snackbar.js.map +1 -1
- package/dist/snackbar/Toast.d.ts +1 -1
- package/dist/snackbar/Toast.js +5 -1
- package/dist/snackbar/Toast.js.map +1 -1
- package/dist/snackbar/ToastManager.d.ts +2 -1
- package/dist/snackbar/ToastManager.js +1 -1
- package/dist/snackbar/ToastManager.js.map +1 -1
- package/dist/snackbar/_snackbar.scss +15 -23
- package/dist/table/_table.scss +55 -70
- package/dist/tabs/_tabs.scss +25 -30
- package/dist/theme/_theme.scss +31 -89
- package/dist/tooltip/_tooltip.scss +16 -25
- package/dist/transition/_transition.scss +38 -37
- package/dist/tree/_tree.scss +102 -109
- package/dist/typography/_typography.scss +17 -22
- package/dist/window-splitter/_window-splitter.scss +19 -45
- package/package.json +1 -1
- package/src/_core.scss +34 -1
- package/src/_utils.scss +57 -0
- package/src/app-bar/_app-bar.scss +15 -23
- package/src/avatar/_avatar.scss +25 -34
- package/src/badge/_badge.scss +71 -44
- package/src/box/_box.scss +18 -29
- package/src/button/_button.scss +50 -62
- package/src/card/_card.scss +14 -23
- package/src/chip/_chip.scss +33 -46
- package/src/dialog/_dialog.scss +95 -93
- package/src/divider/Divider.tsx +0 -1
- package/src/divider/_divider.scss +33 -43
- package/src/form/Label.tsx +5 -5
- package/src/form/TextArea.tsx +1 -1
- package/src/form/TextFieldContainerStyles.ts +7 -7
- package/src/form/_form.scss +200 -203
- package/src/form/textAreaStyles.ts +2 -2
- package/src/form/types.ts +0 -2
- package/src/icon/_icon.scss +31 -47
- package/src/interaction/_interaction.scss +47 -57
- package/src/layout/_layout.scss +14 -19
- package/src/link/_link.scss +15 -23
- package/src/list/_list.scss +53 -63
- package/src/menu/_menu.scss +16 -27
- package/src/overlay/_overlay.scss +14 -19
- package/src/progress/_progress.scss +25 -30
- package/src/segmented-button/_segmented-button.scss +32 -43
- package/src/sheet/_sheet.scss +24 -42
- package/src/snackbar/DefaultToastRenderer.tsx +1 -1
- package/src/snackbar/Snackbar.tsx +17 -25
- package/src/snackbar/Toast.tsx +7 -2
- package/src/snackbar/ToastManager.tsx +3 -2
- package/src/snackbar/__tests__/Snackbar.tsx +12 -11
- package/src/snackbar/__tests__/ToastManagerProvider.tsx +20 -42
- package/src/snackbar/__tests__/__snapshots__/Snackbar.tsx.snap +127 -27
- package/src/snackbar/__tests__/__snapshots__/ToastManagerProvider.tsx.snap +23 -8
- package/src/snackbar/_snackbar.scss +15 -23
- package/src/table/_table.scss +55 -70
- package/src/tabs/_tabs.scss +25 -30
- package/src/theme/_theme.scss +31 -89
- package/src/tooltip/_tooltip.scss +16 -25
- package/src/transition/_transition.scss +38 -37
- package/src/tree/_tree.scss +102 -109
- package/src/typography/_typography.scss +17 -22
- package/src/window-splitter/_window-splitter.scss +19 -45
- package/.turbo/turbo-lint.log +0 -12
- package/.turbo/turbo-test.log +0 -166
- package/.turbo/turbo-typecheck.log +0 -4
- package/dist/divider/VerticalDivider.d.ts +0 -32
- package/dist/divider/useVerticalDividerHeight.d.ts +0 -37
- package/dist/icon/MaterialIconsProvider.d.ts +0 -12
- package/dist/icon/MaterialIconsProvider.js +0 -17
- package/dist/icon/MaterialIconsProvider.js.map +0 -1
- package/dist/icon/MaterialSymbolsProvider.d.ts +0 -145
- package/dist/icon/MaterialSymbolsProvider.js +0 -60
- package/dist/icon/MaterialSymbolsProvider.js.map +0 -1
- package/dist/link/LinkProvider.d.ts +0 -29
- package/dist/menu/menuConfig.d.ts +0 -60
- package/dist/tooltip/useOverflowTooltip.d.ts +0 -61
|
@@ -206,45 +206,27 @@ $linear-vertical-reverse-short-styles: (
|
|
|
206
206
|
),
|
|
207
207
|
) !default;
|
|
208
208
|
|
|
209
|
-
$
|
|
210
|
-
background-color
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
var: --rmd-progress-color,
|
|
216
|
-
value: $color,
|
|
217
|
-
),
|
|
218
|
-
circular-size: (
|
|
219
|
-
var: --rmd-progress-circular-size,
|
|
220
|
-
value: $circular-size,
|
|
221
|
-
),
|
|
222
|
-
circular-stroke-width: (
|
|
223
|
-
var: --rmd-progress-circular-width,
|
|
224
|
-
value: $circular-stroke-width,
|
|
225
|
-
),
|
|
226
|
-
linear-size: (
|
|
227
|
-
var: --rmd-progress-linear-size,
|
|
228
|
-
value: $linear-size,
|
|
229
|
-
),
|
|
209
|
+
$variables: (
|
|
210
|
+
background-color,
|
|
211
|
+
color,
|
|
212
|
+
circular-size,
|
|
213
|
+
circular-stroke-width,
|
|
214
|
+
linear-size
|
|
230
215
|
);
|
|
231
216
|
|
|
232
217
|
@function get-var($name, $fallback: null) {
|
|
233
|
-
$
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
@if $value {
|
|
238
|
-
@return var(#{$var}, #{$value});
|
|
218
|
+
$var: utils.get-var-name($variables, $name, "progress");
|
|
219
|
+
@if $fallback {
|
|
220
|
+
@return var(#{$var}, #{$fallback});
|
|
239
221
|
}
|
|
240
222
|
|
|
241
223
|
@return var(#{$var});
|
|
242
224
|
}
|
|
243
225
|
|
|
244
226
|
@mixin set-var($name, $value) {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
227
|
+
@if $value {
|
|
228
|
+
#{utils.get-var-name($variables, $name, "progress")}: #{$value};
|
|
229
|
+
}
|
|
248
230
|
}
|
|
249
231
|
|
|
250
232
|
@mixin use-var($property, $name: $property, $fallback: null) {
|
|
@@ -566,6 +548,19 @@ $var-lookup: (
|
|
|
566
548
|
}
|
|
567
549
|
}
|
|
568
550
|
|
|
551
|
+
@mixin variables {
|
|
552
|
+
@if not $disable-circular {
|
|
553
|
+
@include set-var(circular-size, $circular-size);
|
|
554
|
+
@include set-var(circular-stroke-width, $circular-stroke-width);
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
@if not $disable-linear {
|
|
558
|
+
@include set-var(background-color, $background-color);
|
|
559
|
+
@include set-var(color, $color);
|
|
560
|
+
@include set-var(linear-size, $linear-size);
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
|
|
569
564
|
@mixin styles {
|
|
570
565
|
@if not $disable-circular {
|
|
571
566
|
@include _circular-progress;
|
|
@@ -59,29 +59,33 @@ $selected-background-color: theme.get-default-color(
|
|
|
59
59
|
|
|
60
60
|
$typography-styles: typography.$button-styles !default;
|
|
61
61
|
|
|
62
|
-
$
|
|
63
|
-
outline-width
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
var: --rmd-segmented-button-outline-color,
|
|
69
|
-
value: $outline-color,
|
|
70
|
-
),
|
|
71
|
-
color: (
|
|
72
|
-
var: --rmd-segmented-button-color,
|
|
73
|
-
value: currentcolor,
|
|
74
|
-
),
|
|
75
|
-
selected-background-color: (
|
|
76
|
-
var: --rmd-segmented-button-selected-background-color,
|
|
77
|
-
value: $selected-background-color,
|
|
78
|
-
),
|
|
79
|
-
selected-color: (
|
|
80
|
-
var: --rmd-segmented-button-selected-color,
|
|
81
|
-
value: $selected-color,
|
|
82
|
-
),
|
|
62
|
+
$variables: (
|
|
63
|
+
outline-width,
|
|
64
|
+
outline-color,
|
|
65
|
+
color,
|
|
66
|
+
selected-background-color,
|
|
67
|
+
selected-color
|
|
83
68
|
);
|
|
84
69
|
|
|
70
|
+
@function get-var($name, $fallback: null) {
|
|
71
|
+
$var: utils.get-var-name($variables, $name, "segmented-button");
|
|
72
|
+
@if $fallback {
|
|
73
|
+
@return var(#{$var}, #{$fallback});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@return var(#{$var});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@mixin set-var($name, $value) {
|
|
80
|
+
@if $value {
|
|
81
|
+
#{utils.get-var-name($variables, $name, "segmented-button")}: #{$value};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@mixin use-var($property, $name: $property, $fallback: null) {
|
|
86
|
+
#{$property}: get-var($name, $fallback);
|
|
87
|
+
}
|
|
88
|
+
|
|
85
89
|
@mixin use-light-theme {
|
|
86
90
|
@if not $disable-everything {
|
|
87
91
|
@if $light-theme-outline-color != $dark-theme-outline-color {
|
|
@@ -124,29 +128,14 @@ $var-lookup: (
|
|
|
124
128
|
}
|
|
125
129
|
}
|
|
126
130
|
|
|
127
|
-
@
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
@
|
|
131
|
+
@mixin variables {
|
|
132
|
+
@if not $disable-everything {
|
|
133
|
+
@include set-var(outline-width, $outline-width);
|
|
134
|
+
@include set-var(outline-color, $outline-color);
|
|
135
|
+
@include set-var(color, currentcolor);
|
|
136
|
+
@include set-var(selected-background-color, $selected-background-color);
|
|
137
|
+
@include set-var(selected-color, $selected-color);
|
|
134
138
|
}
|
|
135
|
-
|
|
136
|
-
@return var(#{$var});
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
@mixin set-var($name, $value) {
|
|
140
|
-
$var: map.get(
|
|
141
|
-
utils.validate($var-lookup, $name, "segmented button var"),
|
|
142
|
-
var
|
|
143
|
-
);
|
|
144
|
-
|
|
145
|
-
#{$var}: #{$value};
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
@mixin use-var($property, $name: $property, $fallback: null) {
|
|
149
|
-
#{$property}: get-var($name, $fallback);
|
|
150
139
|
}
|
|
151
140
|
|
|
152
141
|
@mixin styles {
|
package/src/sheet/_sheet.scss
CHANGED
|
@@ -30,63 +30,45 @@ $touch-max-height: calc(100% - #{$touch-margin}) !default;
|
|
|
30
30
|
$recommended-min-height: 3.5rem !default;
|
|
31
31
|
$recommended-max-height: 50% !default;
|
|
32
32
|
|
|
33
|
-
$
|
|
34
|
-
height
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
max-height: (
|
|
43
|
-
var: --rmd-sheet-max-height,
|
|
44
|
-
value: null,
|
|
45
|
-
),
|
|
46
|
-
touch-width: (
|
|
47
|
-
var: --rmd-sheet-touch-width,
|
|
48
|
-
value: $touch-width,
|
|
49
|
-
),
|
|
50
|
-
touch-max-height: (
|
|
51
|
-
var: --rmd-sheet-touch-max-height,
|
|
52
|
-
value: $touch-max-height,
|
|
53
|
-
),
|
|
54
|
-
static-width: (
|
|
55
|
-
var: --rmd-sheet-static-width,
|
|
56
|
-
value: $static-width,
|
|
57
|
-
),
|
|
58
|
-
transform-offscreen: (
|
|
59
|
-
var: --rmd-sheet-transform-offscreen,
|
|
60
|
-
value: null,
|
|
61
|
-
),
|
|
62
|
-
z-index: (
|
|
63
|
-
var: --rmd-sheet-z-index,
|
|
64
|
-
value: $z-index,
|
|
65
|
-
),
|
|
33
|
+
$variables: (
|
|
34
|
+
height,
|
|
35
|
+
width,
|
|
36
|
+
max-height,
|
|
37
|
+
touch-width,
|
|
38
|
+
touch-max-height,
|
|
39
|
+
static-width,
|
|
40
|
+
transform-offscreen,
|
|
41
|
+
z-index
|
|
66
42
|
);
|
|
67
43
|
|
|
68
44
|
@function get-var($name, $fallback: null) {
|
|
69
|
-
$
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
@if $value {
|
|
74
|
-
@return var(#{$var}, #{$value});
|
|
45
|
+
$var: utils.get-var-name($variables, $name, "sheet");
|
|
46
|
+
@if $fallback {
|
|
47
|
+
@return var(#{$var}, #{$fallback});
|
|
75
48
|
}
|
|
76
49
|
|
|
77
50
|
@return var(#{$var});
|
|
78
51
|
}
|
|
79
52
|
|
|
80
53
|
@mixin set-var($name, $value) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
54
|
+
@if $value {
|
|
55
|
+
#{utils.get-var-name($variables, $name, "sheet")}: #{$value};
|
|
56
|
+
}
|
|
84
57
|
}
|
|
85
58
|
|
|
86
59
|
@mixin use-var($property, $name: $property, $fallback: null) {
|
|
87
60
|
#{$property}: get-var($name, $fallback);
|
|
88
61
|
}
|
|
89
62
|
|
|
63
|
+
@mixin variables {
|
|
64
|
+
@if not $disable-everything {
|
|
65
|
+
@include set-var(touch-width, $touch-width);
|
|
66
|
+
@include set-var(touch-max-height, $touch-max-height);
|
|
67
|
+
@include set-var(static-width, $static-width);
|
|
68
|
+
@include set-var(z-index, $z-index);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
90
72
|
@mixin styles {
|
|
91
73
|
@if not $disable-everything {
|
|
92
74
|
.rmd-sheet {
|
|
@@ -61,7 +61,7 @@ export function DefaultToastRenderer(props: ToastRendererProps): ReactElement {
|
|
|
61
61
|
} = props;
|
|
62
62
|
const {
|
|
63
63
|
closeButtonProps,
|
|
64
|
-
closeButton = !!closeButtonProps,
|
|
64
|
+
closeButton = !!closeButtonProps || !!remaining.closeButtonProps,
|
|
65
65
|
onEntered: defaultEntered = noop,
|
|
66
66
|
onExited: defaultExited = noop,
|
|
67
67
|
onMouseEnter: defaultMouseEnter = noop,
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
3
|
-
forwardRef,
|
|
4
|
-
type AriaRole,
|
|
5
|
-
type ComponentType,
|
|
6
|
-
type HTMLAttributes,
|
|
7
|
-
} from "react";
|
|
2
|
+
import { forwardRef, type ComponentType, type HTMLAttributes } from "react";
|
|
8
3
|
import { Portal } from "../portal/Portal.js";
|
|
9
4
|
import { useEnsuredId } from "../useEnsuredId.js";
|
|
10
5
|
import {
|
|
@@ -24,9 +19,6 @@ export interface SnackbarProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
24
19
|
*/
|
|
25
20
|
id?: string;
|
|
26
21
|
|
|
27
|
-
/** @defaultValue `"status"` */
|
|
28
|
-
role?: AriaRole;
|
|
29
|
-
|
|
30
22
|
/**
|
|
31
23
|
* Set this to the number of toasts that can be visible within the snackbar at
|
|
32
24
|
* the same time. Any toasts added after this value will be added into the
|
|
@@ -154,7 +146,6 @@ export const Snackbar = forwardRef<HTMLDivElement, SnackbarProps>(
|
|
|
154
146
|
function Snackbar(props, ref) {
|
|
155
147
|
const {
|
|
156
148
|
id: propId,
|
|
157
|
-
role = "status",
|
|
158
149
|
className,
|
|
159
150
|
limit = 1,
|
|
160
151
|
position = "bottom",
|
|
@@ -168,21 +159,22 @@ export const Snackbar = forwardRef<HTMLDivElement, SnackbarProps>(
|
|
|
168
159
|
|
|
169
160
|
return (
|
|
170
161
|
<Portal disabled={disablePortal}>
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
162
|
+
{queue.length > 0 && (
|
|
163
|
+
<div
|
|
164
|
+
{...remaining}
|
|
165
|
+
id={id}
|
|
166
|
+
ref={ref}
|
|
167
|
+
className={snackbar({ position, className })}
|
|
168
|
+
>
|
|
169
|
+
{queue.map((toast) => (
|
|
170
|
+
<RenderToast
|
|
171
|
+
{...toast}
|
|
172
|
+
key={toast.toastId}
|
|
173
|
+
toastDefaults={toastDefaults}
|
|
174
|
+
/>
|
|
175
|
+
))}
|
|
176
|
+
</div>
|
|
177
|
+
)}
|
|
186
178
|
</Portal>
|
|
187
179
|
);
|
|
188
180
|
}
|
package/src/snackbar/Toast.tsx
CHANGED
|
@@ -38,7 +38,7 @@ export interface ConfigurableToastProps
|
|
|
38
38
|
/**
|
|
39
39
|
* Note: This is set while creating the toast.
|
|
40
40
|
*
|
|
41
|
-
* @defaultValue `visibleTime === null ? "alert" :
|
|
41
|
+
* @defaultValue `visibleTime === null ? "alert" : "status"`
|
|
42
42
|
*/
|
|
43
43
|
role?: AriaRole;
|
|
44
44
|
|
|
@@ -149,7 +149,7 @@ export const Toast = forwardRef<HTMLDivElement, ToastProps>(
|
|
|
149
149
|
actionButton: propActionButton,
|
|
150
150
|
paused,
|
|
151
151
|
visible,
|
|
152
|
-
closeIcon,
|
|
152
|
+
closeIcon: propCloseIcon,
|
|
153
153
|
closeButtonProps,
|
|
154
154
|
closeButton = !!closeButtonProps,
|
|
155
155
|
contentProps,
|
|
@@ -190,6 +190,11 @@ export const Toast = forwardRef<HTMLDivElement, ToastProps>(
|
|
|
190
190
|
);
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
+
let closeIcon = propCloseIcon;
|
|
194
|
+
if (typeof closeButtonProps?.children !== "undefined") {
|
|
195
|
+
closeIcon = closeButtonProps.children;
|
|
196
|
+
}
|
|
197
|
+
|
|
193
198
|
const action = !!actionButton;
|
|
194
199
|
const reordered = stacked && action && closeButton;
|
|
195
200
|
const { elementProps, rendered } = useScaleTransition({
|
|
@@ -15,7 +15,8 @@ export const DEFAULT_TOAST_VISIBLE_TIME = 5000;
|
|
|
15
15
|
* - `"replace"` - if there is a currently visible toast, it will start the
|
|
16
16
|
* leave transition and display the newly added toast instead.
|
|
17
17
|
* - `"immediate"` - the same behavior as `"replace"` except that if there was a
|
|
18
|
-
* currently visible toast,
|
|
18
|
+
* currently visible toast, the toast will be shown again once the `"immediate"`
|
|
19
|
+
* toast is hidden.
|
|
19
20
|
*
|
|
20
21
|
* @remarks \@since 6.0.0 Renamed from `MessagePriority` to `ToastPriority`
|
|
21
22
|
*/
|
|
@@ -304,7 +305,7 @@ export class ToastManager {
|
|
|
304
305
|
const {
|
|
305
306
|
toastId = nanoid(),
|
|
306
307
|
visibleTime = DEFAULT_TOAST_VISIBLE_TIME,
|
|
307
|
-
role = visibleTime === null ? "alert" :
|
|
308
|
+
role = visibleTime === null ? "alert" : "status",
|
|
308
309
|
priority = "normal",
|
|
309
310
|
duplicates = "restart",
|
|
310
311
|
} = toast;
|
|
@@ -16,12 +16,13 @@ const render = (
|
|
|
16
16
|
ui: ReactElement,
|
|
17
17
|
options?: ReactMDRenderOptions
|
|
18
18
|
): RenderResult => {
|
|
19
|
+
const manager = new ToastManager();
|
|
20
|
+
manager.addToast({ children: "Toast" });
|
|
21
|
+
|
|
19
22
|
return rmdRender(ui, {
|
|
20
23
|
...options,
|
|
21
24
|
wrapper: ({ children }) => (
|
|
22
|
-
<ToastManagerProvider manager={
|
|
23
|
-
{children}
|
|
24
|
-
</ToastManagerProvider>
|
|
25
|
+
<ToastManagerProvider manager={manager}>{children}</ToastManagerProvider>
|
|
25
26
|
),
|
|
26
27
|
});
|
|
27
28
|
};
|
|
@@ -30,12 +31,12 @@ describe("Snackbar", () => {
|
|
|
30
31
|
it("should apply the correct styling, HTML attributes, and allow a ref", () => {
|
|
31
32
|
const ref = createRef<HTMLDivElement>();
|
|
32
33
|
const props = {
|
|
33
|
-
"
|
|
34
|
+
"data-testid": "snackbar",
|
|
34
35
|
ref,
|
|
35
36
|
} as const;
|
|
36
37
|
const { rerender } = render(<Snackbar {...props} />);
|
|
37
38
|
|
|
38
|
-
const snackbar = screen.
|
|
39
|
+
const snackbar = screen.getByTestId("snackbar");
|
|
39
40
|
expect(ref.current).toBeInstanceOf(HTMLDivElement);
|
|
40
41
|
expect(ref.current).toBe(snackbar);
|
|
41
42
|
expect(snackbar).toMatchSnapshot();
|
|
@@ -60,8 +61,8 @@ describe("Snackbar", () => {
|
|
|
60
61
|
"top-right",
|
|
61
62
|
];
|
|
62
63
|
|
|
63
|
-
const { rerender } = render(<Snackbar />);
|
|
64
|
-
const snackbar = screen.
|
|
64
|
+
const { rerender } = render(<Snackbar data-testid="snackbar" />);
|
|
65
|
+
const snackbar = screen.getByTestId("snackbar");
|
|
65
66
|
expect(snackbar).toMatchSnapshot();
|
|
66
67
|
|
|
67
68
|
positions.forEach((position) => {
|
|
@@ -72,13 +73,13 @@ describe("Snackbar", () => {
|
|
|
72
73
|
});
|
|
73
74
|
|
|
74
75
|
it("should allow the portal behavior to be disabled", () => {
|
|
75
|
-
const { container, rerender } = render(<Snackbar />);
|
|
76
|
-
let snackbar = screen.
|
|
76
|
+
const { container, rerender } = render(<Snackbar data-testid="snackbar" />);
|
|
77
|
+
let snackbar = screen.getByTestId("snackbar");
|
|
77
78
|
expect(container).not.toContainElement(snackbar);
|
|
78
79
|
expect(snackbar).toBeInTheDocument();
|
|
79
80
|
|
|
80
|
-
rerender(<Snackbar disablePortal />);
|
|
81
|
-
snackbar = screen.
|
|
81
|
+
rerender(<Snackbar data-testid="snackbar" disablePortal />);
|
|
82
|
+
snackbar = screen.getByTestId("snackbar");
|
|
82
83
|
expect(container).toContainElement(snackbar);
|
|
83
84
|
});
|
|
84
85
|
});
|
|
@@ -78,7 +78,7 @@ function SimpleTest(props: SimpleTestProps): ReactElement {
|
|
|
78
78
|
Button
|
|
79
79
|
</Button>
|
|
80
80
|
{children}
|
|
81
|
-
<Snackbar {...snackbar} />
|
|
81
|
+
<Snackbar data-testid="snackbar" {...snackbar} />
|
|
82
82
|
</>
|
|
83
83
|
);
|
|
84
84
|
}
|
|
@@ -101,21 +101,18 @@ describe("ToastManagerProvider", () => {
|
|
|
101
101
|
<Button onClick={() => addToast({ children: "Hello, world!" })}>
|
|
102
102
|
Button
|
|
103
103
|
</Button>
|
|
104
|
-
<Snackbar />
|
|
104
|
+
<Snackbar data-testid="snackbar" />
|
|
105
105
|
</>
|
|
106
106
|
);
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
rmdRender(<Test />);
|
|
110
110
|
const button = screen.getByRole("button", { name: "Button" });
|
|
111
|
-
|
|
112
|
-
expect(snackbar).toBeInTheDocument();
|
|
111
|
+
expect(() => screen.getByTestId("snackbar")).toThrow();
|
|
113
112
|
|
|
114
113
|
await user.click(button);
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
throw new Error();
|
|
118
|
-
}
|
|
114
|
+
const snackbar = await screen.findByTestId("snackbar");
|
|
115
|
+
const message = await screen.findByRole("status");
|
|
119
116
|
|
|
120
117
|
expect(snackbar).toMatchSnapshot();
|
|
121
118
|
|
|
@@ -126,20 +123,14 @@ describe("ToastManagerProvider", () => {
|
|
|
126
123
|
});
|
|
127
124
|
|
|
128
125
|
it("should allow toasts to be added outside of a react component (like redux)", async () => {
|
|
129
|
-
rmdRender(<Snackbar />);
|
|
130
|
-
const snackbar = screen.getByRole("status");
|
|
131
|
-
expect(snackbar).toBeInTheDocument();
|
|
132
|
-
expect(snackbar).toBeEmptyDOMElement();
|
|
126
|
+
rmdRender(<Snackbar data-testid="snackbar" />);
|
|
133
127
|
|
|
134
128
|
act(() => {
|
|
135
129
|
addToast({ toastId: "toast-id", children: "Fired outside of react!" });
|
|
136
130
|
});
|
|
137
131
|
|
|
138
|
-
let toast = screen.
|
|
132
|
+
let toast = await screen.findByRole("status");
|
|
139
133
|
expect(toast).toBeInTheDocument();
|
|
140
|
-
await waitFor(() => {
|
|
141
|
-
expect(toast.parentElement).not.toHaveClass(ENTER_CLASS_NAME);
|
|
142
|
-
});
|
|
143
134
|
|
|
144
135
|
act(() => {
|
|
145
136
|
popToast();
|
|
@@ -150,8 +141,7 @@ describe("ToastManagerProvider", () => {
|
|
|
150
141
|
addToast({ toastId: "toast-id", children: "Fired outside of react!" });
|
|
151
142
|
addToast({ toastId: "toast-id-2", children: "Second toast" });
|
|
152
143
|
});
|
|
153
|
-
toast = screen.
|
|
154
|
-
expect(toast).toBeInTheDocument();
|
|
144
|
+
toast = await screen.findByRole("status");
|
|
155
145
|
|
|
156
146
|
act(() => {
|
|
157
147
|
removeToast("invalid-toast-id", false);
|
|
@@ -170,7 +160,7 @@ describe("ToastManagerProvider", () => {
|
|
|
170
160
|
addToast({ children: "Toast" });
|
|
171
161
|
clearToasts();
|
|
172
162
|
});
|
|
173
|
-
expect(snackbar).
|
|
163
|
+
expect(() => screen.getByTestId("snackbar")).toThrow();
|
|
174
164
|
});
|
|
175
165
|
|
|
176
166
|
it("should not add a toast to another toast manager", async () => {
|
|
@@ -185,21 +175,20 @@ describe("ToastManagerProvider", () => {
|
|
|
185
175
|
<Button onClick={() => addToast({ children: "Global" })}>
|
|
186
176
|
Global
|
|
187
177
|
</Button>
|
|
188
|
-
<Snackbar />
|
|
178
|
+
<Snackbar data-testid="snackbar" />
|
|
189
179
|
</>
|
|
190
180
|
);
|
|
191
181
|
}
|
|
192
182
|
|
|
193
183
|
renderWithManager(<Test />);
|
|
194
|
-
const snackbar = screen.getByRole("status");
|
|
195
184
|
const scopedAdd = screen.getByRole("button", { name: "Scoped" });
|
|
196
185
|
const globalAdd = screen.getByRole("button", { name: "Global" });
|
|
197
186
|
|
|
198
187
|
await user.click(globalAdd);
|
|
199
|
-
expect(snackbar).
|
|
188
|
+
expect(() => screen.getByTestId("snackbar")).toThrow();
|
|
200
189
|
|
|
201
190
|
await user.click(scopedAdd);
|
|
202
|
-
|
|
191
|
+
const snackbar = await screen.findByTestId("snackbar");
|
|
203
192
|
expect(within(snackbar).getByText("Scoped")).toBeInTheDocument();
|
|
204
193
|
});
|
|
205
194
|
});
|
|
@@ -221,15 +210,10 @@ describe("ToastManagerProvider", () => {
|
|
|
221
210
|
// eslint-disable-next-line testing-library/render-result-naming-convention
|
|
222
211
|
const result = renderWithManager(<SimpleTest {...props} />);
|
|
223
212
|
const button = screen.getByRole("button", { name: "Button" });
|
|
224
|
-
const snackbar = screen.getByRole("status");
|
|
225
|
-
expect(snackbar).toBeEmptyDOMElement();
|
|
226
213
|
|
|
227
214
|
await user.click(button);
|
|
228
|
-
|
|
229
|
-
const message =
|
|
230
|
-
if (!message) {
|
|
231
|
-
throw new Error();
|
|
232
|
-
}
|
|
215
|
+
const snackbar = await screen.findByTestId("snackbar");
|
|
216
|
+
const message = await screen.findByRole("status");
|
|
233
217
|
|
|
234
218
|
act(() => {
|
|
235
219
|
jest.runOnlyPendingTimers();
|
|
@@ -331,15 +315,9 @@ describe("ToastManagerProvider", () => {
|
|
|
331
315
|
const user = userEvent.setup({ delay: null });
|
|
332
316
|
renderWithManager(<SimpleTest toast={{ toastId: "same-toast-id" }} />);
|
|
333
317
|
const button = screen.getByRole("button", { name: "Button" });
|
|
334
|
-
const snackbar = screen.getByRole("status");
|
|
335
|
-
expect(snackbar).toBeEmptyDOMElement();
|
|
336
318
|
|
|
337
319
|
await user.click(button);
|
|
338
|
-
|
|
339
|
-
const message = snackbar.firstElementChild;
|
|
340
|
-
if (!message) {
|
|
341
|
-
throw new Error();
|
|
342
|
-
}
|
|
320
|
+
const message = await screen.findByRole("status");
|
|
343
321
|
|
|
344
322
|
act(() => {
|
|
345
323
|
jest.runOnlyPendingTimers();
|
|
@@ -456,7 +434,7 @@ describe("ToastManagerProvider", () => {
|
|
|
456
434
|
</>
|
|
457
435
|
);
|
|
458
436
|
}
|
|
459
|
-
const { user, message
|
|
437
|
+
const { user, message } = await init({
|
|
460
438
|
children: <Children />,
|
|
461
439
|
});
|
|
462
440
|
act(() => {
|
|
@@ -474,8 +452,8 @@ describe("ToastManagerProvider", () => {
|
|
|
474
452
|
|
|
475
453
|
const testFullFlow = async (button: HTMLElement): Promise<void> => {
|
|
476
454
|
await user.click(button);
|
|
477
|
-
|
|
478
|
-
const nextMessage = snackbar.
|
|
455
|
+
const snackbar = await screen.findByTestId("snackbar");
|
|
456
|
+
const nextMessage = within(snackbar).getByRole("status");
|
|
479
457
|
expect(nextMessage).toHaveClass(ENTER_CLASS_NAME);
|
|
480
458
|
act(() => {
|
|
481
459
|
jest.runOnlyPendingTimers();
|
|
@@ -746,17 +724,17 @@ describe("ToastManagerProvider", () => {
|
|
|
746
724
|
>
|
|
747
725
|
Alert
|
|
748
726
|
</Button>
|
|
749
|
-
<Snackbar />
|
|
727
|
+
<Snackbar data-testid="snackbar" />
|
|
750
728
|
</>
|
|
751
729
|
);
|
|
752
730
|
}
|
|
753
731
|
|
|
754
732
|
renderWithManager(<Test />);
|
|
755
|
-
const snackbar = screen.getByRole("status");
|
|
756
733
|
const button = screen.getByRole("button", { name: "Alert" });
|
|
757
734
|
|
|
758
735
|
await user.click(button);
|
|
759
736
|
|
|
737
|
+
const snackbar = screen.getByTestId("snackbar");
|
|
760
738
|
const alert = screen.getByRole("alert");
|
|
761
739
|
expect(snackbar).toMatchSnapshot();
|
|
762
740
|
|