@12-apps/ui 1.5.0 → 1.5.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/package.json +17 -9
- package/src/button/index.ts +1 -0
- package/src/social-login-button/index.ts +1 -0
- package/src/{social-login-button.tsx → social-login-button/social-login-button.tsx} +5 -5
- package/src/user-avatar/index.ts +1 -0
- package/src/{user-avatar.tsx → user-avatar/user-avatar.tsx} +4 -4
- package/eslint.config.js +0 -89
- package/src/__tests__/data-grid.test.tsx +0 -125
- package/src/__tests__/package-wiring.test.ts +0 -41
- package/src/__tests__/setup.ts +0 -1
- package/src/__tests__/social-login-button.test.tsx +0 -186
- package/src/__tests__/user-avatar.test.tsx +0 -195
- package/src/__tests__/viewport.test.ts +0 -50
- package/src/components/command/__tests__/command.test.tsx +0 -112
- package/src/components/data-display/Alert/Alert.stories.tsx +0 -559
- package/src/components/data-display/Alert/Alert.test.stories.tsx +0 -707
- package/src/components/data-display/AlertDialog/AlertDialog.stories.tsx +0 -362
- package/src/components/data-display/AlertDialog/AlertDialog.test.stories.tsx +0 -763
- package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.stories.tsx +0 -230
- package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.test.stories.tsx +0 -270
- package/src/components/data-display/Avatar/Avatar.stories.tsx +0 -721
- package/src/components/data-display/Avatar/Avatar.test.stories.tsx +0 -822
- package/src/components/data-display/Badge/Badge.stories.tsx +0 -1134
- package/src/components/data-display/Badge/Badge.test.stories.tsx +0 -1194
- package/src/components/data-display/Banner/Banner.stories.tsx +0 -528
- package/src/components/data-display/Banner/Banner.test.stories.tsx +0 -511
- package/src/components/data-display/Carousel/Carousel.stories.tsx +0 -607
- package/src/components/data-display/Carousel/Carousel.test.stories.tsx +0 -701
- package/src/components/data-display/Chart/Chart.stories.tsx +0 -568
- package/src/components/data-display/Chart/Chart.test.stories.tsx +0 -174
- package/src/components/data-display/Chart/SpecChart.stories.tsx +0 -150
- package/src/components/data-display/Chart/SpecChart.test.stories.tsx +0 -56
- package/src/components/data-display/Chart/__tests__/SpecChart.test.tsx +0 -60
- package/src/components/data-display/Chart/__tests__/chart-format.test.ts +0 -43
- package/src/components/data-display/Chart/__tests__/chart-spec.test.ts +0 -119
- package/src/components/data-display/Chip/Chip.stories.tsx +0 -252
- package/src/components/data-display/Chip/Chip.test.stories.tsx +0 -266
- package/src/components/data-display/DataGrid/DataGrid.stories.tsx +0 -515
- package/src/components/data-display/DataGrid/DataGrid.test.stories.tsx +0 -653
- package/src/components/data-display/DataViews/__tests__/DataViewsGrid.test.tsx +0 -271
- package/src/components/data-display/DataViews/__tests__/DataViewsTableBase.test.tsx +0 -134
- package/src/components/data-display/DataViews/__tests__/SaveViewModal.test.tsx +0 -83
- package/src/components/data-display/DataViews/__tests__/data-views-filter.test.ts +0 -115
- package/src/components/data-display/DataViews/__tests__/data-views-preview.test.ts +0 -53
- package/src/components/data-display/DataViews/__tests__/range-pill.test.tsx +0 -114
- package/src/components/data-display/DataViews/base-card.stories.tsx +0 -136
- package/src/components/data-display/DescriptionItem/DescriptionItem.stories.tsx +0 -254
- package/src/components/data-display/EmptyState/EmptyState.stories.tsx +0 -282
- package/src/components/data-display/EmptyState/EmptyState.test.stories.tsx +0 -441
- package/src/components/data-display/ErrorState/ErrorState.stories.tsx +0 -110
- package/src/components/data-display/ErrorState/ErrorState.test.stories.tsx +0 -133
- package/src/components/data-display/HoverCard/HoverCard.stories.tsx +0 -650
- package/src/components/data-display/HoverCard/HoverCard.test.stories.tsx +0 -929
- package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.stories.tsx +0 -411
- package/src/components/data-display/LazyImage/LazyImage.stories.tsx +0 -387
- package/src/components/data-display/Lightbox/Lightbox.stories.tsx +0 -315
- package/src/components/data-display/Lightbox/Lightbox.test.stories.tsx +0 -598
- package/src/components/data-display/LoadingState/LoadingState.stories.tsx +0 -124
- package/src/components/data-display/LoadingState/LoadingState.test.stories.tsx +0 -99
- package/src/components/data-display/MapPreview/MapPreview.stories.tsx +0 -458
- package/src/components/data-display/MapPreview/MapPreview.test.stories.tsx +0 -394
- package/src/components/data-display/Popover/Popover.stories.tsx +0 -295
- package/src/components/data-display/Popover/Popover.test.stories.tsx +0 -1162
- package/src/components/data-display/Progress/Progress.stories.tsx +0 -481
- package/src/components/data-display/Progress/Progress.test.stories.tsx +0 -2070
- package/src/components/data-display/SectionOnboarding/SectionOnboarding.stories.tsx +0 -160
- package/src/components/data-display/SectionOnboarding/SectionOnboarding.test.stories.tsx +0 -190
- package/src/components/data-display/Sheet/Sheet.stories.tsx +0 -883
- package/src/components/data-display/Sheet/Sheet.test.stories.tsx +0 -1105
- package/src/components/data-display/StatCard/StatCard.stories.tsx +0 -167
- package/src/components/data-display/StatCard/StatCard.test.stories.tsx +0 -240
- package/src/components/data-display/Stepper/Stepper.stories.tsx +0 -540
- package/src/components/data-display/Stepper/Stepper.test.stories.tsx +0 -600
- package/src/components/data-display/Table/Table.stories.tsx +0 -803
- package/src/components/data-display/Table/Table.test.stories.tsx +0 -369
- package/src/components/data-display/Timeline/Timeline.stories.tsx +0 -442
- package/src/components/data-display/Timeline/Timeline.test.stories.tsx +0 -930
- package/src/components/data-display/TimingDiagram/TimingDiagram.stories.tsx +0 -475
- package/src/components/data-display/TimingDiagram/TimingDiagram.test.stories.tsx +0 -734
- package/src/components/data-display/Tooltip/Tooltip.stories.tsx +0 -468
- package/src/components/data-display/Tooltip/Tooltip.test.stories.tsx +0 -1154
- package/src/components/feedback/ConfirmAction/ConfirmAction.stories.tsx +0 -146
- package/src/components/feedback/ConfirmAction/ConfirmAction.test.stories.tsx +0 -114
- package/src/components/feedback/ConfirmAction/__tests__/confirm-action.test.tsx +0 -288
- package/src/components/feedback/Dialog/Dialog.stories.tsx +0 -833
- package/src/components/feedback/Dialog/Dialog.test.stories.tsx +0 -964
- package/src/components/feedback/Dialog/__tests__/dialog-content-spacing.test.tsx +0 -66
- package/src/components/feedback/Modal/Modal.stories.tsx +0 -765
- package/src/components/feedback/Modal/Modal.test.stories.tsx +0 -251
- package/src/components/feedback/Sonner/Sonner.stories.tsx +0 -698
- package/src/components/feedback/Sonner/Sonner.test.stories.tsx +0 -896
- package/src/components/feedback/StackedModal/StackedModal.stories.tsx +0 -1783
- package/src/components/feedback/StackedModal/StackedModal.test.stories.tsx +0 -973
- package/src/components/feedback/StackedModal/__tests__/stacked-modal-viewport.test.tsx +0 -104
- package/src/components/feedback/Toast/Toast.stories.tsx +0 -548
- package/src/components/feedback/Toast/Toast.test.stories.tsx +0 -834
- package/src/components/feedback/TutorialOverlay/TutorialOverlay.stories.tsx +0 -691
- package/src/components/feedback/TutorialOverlay/TutorialOverlay.test.stories.tsx +0 -634
- package/src/components/form/AddressAutocomplete/AddressAutocomplete.stories.tsx +0 -665
- package/src/components/form/AddressAutocomplete/AddressAutocomplete.test.stories.tsx +0 -727
- package/src/components/form/Autocomplete/Autocomplete.stories.tsx +0 -715
- package/src/components/form/Autocomplete/Autocomplete.test.stories.tsx +0 -825
- package/src/components/form/Button/Button.stories.tsx +0 -365
- package/src/components/form/Button/Button.test.stories.tsx +0 -607
- package/src/components/form/Calendar/Calendar.stories.tsx +0 -349
- package/src/components/form/Calendar/Calendar.test.stories.tsx +0 -464
- package/src/components/form/CepField/CepField.stories.tsx +0 -138
- package/src/components/form/CepField/CepField.test.stories.tsx +0 -281
- package/src/components/form/Checkbox/Checkbox.stories.tsx +0 -265
- package/src/components/form/Checkbox/Checkbox.test.stories.tsx +0 -181
- package/src/components/form/CodeEditor/CodeEditor.stories.tsx +0 -871
- package/src/components/form/CodeEditor/CodeEditor.test.stories.tsx +0 -574
- package/src/components/form/Command/Command.stories.tsx +0 -580
- package/src/components/form/Command/Command.test.stories.tsx +0 -215
- package/src/components/form/CreatableSelect/CreatableSelect.stories.tsx +0 -112
- package/src/components/form/CreatableSelect/CreatableSelect.test.stories.tsx +0 -134
- package/src/components/form/Form/Form.stories.tsx +0 -687
- package/src/components/form/Form/Form.test.stories.tsx +0 -601
- package/src/components/form/Input/Input.stories.tsx +0 -260
- package/src/components/form/Input/Input.test.stories.tsx +0 -1191
- package/src/components/form/InputOTP/InputOTP.stories.tsx +0 -774
- package/src/components/form/InputOTP/InputOTP.test.stories.tsx +0 -588
- package/src/components/form/Label/Label.stories.tsx +0 -473
- package/src/components/form/Label/Label.test.stories.tsx +0 -915
- package/src/components/form/Menubar/Menubar.stories.tsx +0 -472
- package/src/components/form/Menubar/Menubar.test.stories.tsx +0 -584
- package/src/components/form/PasswordStrength/PasswordStrength.stories.tsx +0 -562
- package/src/components/form/PasswordStrength/PasswordStrength.test.stories.tsx +0 -327
- package/src/components/form/PhoneInput/PhoneInput.stories.tsx +0 -495
- package/src/components/form/PhoneInput/PhoneInput.test.stories.tsx +0 -666
- package/src/components/form/RadioGroup/RadioGroup.stories.tsx +0 -518
- package/src/components/form/RadioGroup/RadioGroup.test.stories.tsx +0 -685
- package/src/components/form/RichTextEditor/RichTextEditor.stories.tsx +0 -261
- package/src/components/form/RichTextEditor/RichTextEditor.test.stories.tsx +0 -491
- package/src/components/form/SearchPalette/SearchPalette.stories.tsx +0 -135
- package/src/components/form/Select/Select.stories.tsx +0 -364
- package/src/components/form/Select/Select.test.stories.tsx +0 -985
- package/src/components/form/Slider/Slider.stories.tsx +0 -418
- package/src/components/form/Slider/Slider.test.stories.tsx +0 -1042
- package/src/components/form/Switch/Switch.stories.tsx +0 -697
- package/src/components/form/Switch/Switch.test.stories.tsx +0 -597
- package/src/components/form/Textarea/Textarea.stories.tsx +0 -473
- package/src/components/form/Textarea/Textarea.test.stories.tsx +0 -702
- package/src/components/form/Toggle/Toggle.stories.tsx +0 -638
- package/src/components/form/Toggle/Toggle.test.stories.tsx +0 -1159
- package/src/components/form/ToggleGroup/ToggleGroup.stories.tsx +0 -617
- package/src/components/form/ToggleGroup/ToggleGroup.test.stories.tsx +0 -915
- package/src/components/form/UploadButton/UploadButton.stories.tsx +0 -367
- package/src/components/form/UploadButton/UploadButton.test.stories.tsx +0 -573
- package/src/components/form/total-form/total-form.test.tsx +0 -214
- package/src/components/layout/Accordion/Accordion.stories.tsx +0 -694
- package/src/components/layout/Accordion/Accordion.test.stories.tsx +0 -1344
- package/src/components/layout/Card/Card.stories.tsx +0 -591
- package/src/components/layout/Card/Card.test.stories.tsx +0 -1134
- package/src/components/layout/CardGrid/__tests__/CardGrid.test.tsx +0 -92
- package/src/components/layout/Collapsible/Collapsible.stories.tsx +0 -180
- package/src/components/layout/Collapsible/Collapsible.test.stories.tsx +0 -308
- package/src/components/layout/Container/Container.stories.tsx +0 -557
- package/src/components/layout/Container/Container.test.stories.tsx +0 -745
- package/src/components/layout/ContentToolbar/ContentToolbar.stories.tsx +0 -129
- package/src/components/layout/ContentToolbar/ContentToolbar.test.stories.tsx +0 -251
- package/src/components/layout/ContentToolbar/__tests__/ColumnsMenu.test.tsx +0 -39
- package/src/components/layout/ContentToolbar/__tests__/MultiSelectDropdown.test.tsx +0 -131
- package/src/components/layout/ContentToolbar/__tests__/SavedViewsMenu.test.tsx +0 -99
- package/src/components/layout/Dashboard/Dashboard.stories.tsx +0 -104
- package/src/components/layout/Dashboard/Dashboard.test.stories.tsx +0 -190
- package/src/components/layout/Drawer/Drawer.stories.tsx +0 -658
- package/src/components/layout/Drawer/Drawer.test.stories.tsx +0 -1343
- package/src/components/layout/Resizable/Resizable.stories.tsx +0 -1039
- package/src/components/layout/Resizable/Resizable.test.stories.tsx +0 -754
- package/src/components/layout/ScrollArea/ScrollArea.stories.tsx +0 -651
- package/src/components/layout/ScrollArea/ScrollArea.test.stories.tsx +0 -619
- package/src/components/layout/Separator/Separator.stories.tsx +0 -563
- package/src/components/layout/Separator/Separator.test.stories.tsx +0 -518
- package/src/components/layout/SettingsLayout/SettingsLayout.stories.tsx +0 -192
- package/src/components/layout/SettingsLayout/SettingsLayout.test.stories.tsx +0 -175
- package/src/components/layout/Sidebar/Sidebar.stories.tsx +0 -609
- package/src/components/layout/Sidebar/Sidebar.test.stories.tsx +0 -1324
- package/src/components/layout/Skeleton/Skeleton.stories.tsx +0 -689
- package/src/components/layout/Skeleton/Skeleton.test.stories.tsx +0 -521
- package/src/components/layout/Spacer/Spacer.stories.tsx +0 -502
- package/src/components/layout/Spacer/Spacer.test.stories.tsx +0 -474
- package/src/components/layout/TableFilter/TableFilter.stories.tsx +0 -82
- package/src/components/layout/TableFilter/TableFilter.test.stories.tsx +0 -87
- package/src/components/navigation/Breadcrumbs/Breadcrumbs.stories.tsx +0 -638
- package/src/components/navigation/Breadcrumbs/Breadcrumbs.test.stories.tsx +0 -1008
- package/src/components/navigation/CommandPalette/CommandPalette.stories.tsx +0 -386
- package/src/components/navigation/CommandPalette/CommandPalette.test.stories.tsx +0 -435
- package/src/components/navigation/ContextMenu/ContextMenu.stories.tsx +0 -614
- package/src/components/navigation/ContextMenu/ContextMenu.test.stories.tsx +0 -845
- package/src/components/navigation/DropdownMenu/DropdownMenu.stories.tsx +0 -578
- package/src/components/navigation/DropdownMenu/DropdownMenu.test.stories.tsx +0 -660
- package/src/components/navigation/NavigationMenu/stories/NavigationMenu.stories.tsx +0 -516
- package/src/components/navigation/NavigationMenu/stories/NavigationMenu.test.stories.tsx +0 -935
- package/src/components/navigation/NavigationMenu/stories/NavigationMenuHorizontal.stories.tsx +0 -501
- package/src/components/navigation/NavigationMenu/stories/NavigationMenuVertical.stories.tsx +0 -453
- package/src/components/navigation/Pagination/Pagination.stories.tsx +0 -602
- package/src/components/navigation/Pagination/Pagination.test.stories.tsx +0 -520
- package/src/components/navigation/Tabs/Tabs.stories.tsx +0 -1004
- package/src/components/navigation/Tabs/Tabs.test.stories.tsx +0 -1225
- package/src/components/typography/Blockquote/Blockquote.stories.tsx +0 -359
- package/src/components/typography/Blockquote/Blockquote.test.stories.tsx +0 -432
- package/src/components/typography/Code/Code.stories.tsx +0 -686
- package/src/components/typography/Code/Code.test.stories.tsx +0 -703
- package/src/components/typography/Heading/Heading.stories.tsx +0 -451
- package/src/components/typography/Heading/Heading.test.stories.tsx +0 -830
- package/src/components/typography/Paragraph/Paragraph.stories.tsx +0 -280
- package/src/components/typography/Paragraph/Paragraph.test.stories.tsx +0 -231
- package/src/components/typography/Text/Text.stories.tsx +0 -359
- package/src/components/typography/Text/Text.test.stories.tsx +0 -759
- package/src/components/utility/AnimatedIcon/AnimatedIcon.stories.tsx +0 -945
- package/src/components/utility/AnimatedIcon/AnimatedIcon.test.stories.tsx +0 -603
- package/src/components/utility/AspectRatio/AspectRatio.stories.tsx +0 -414
- package/src/components/utility/AspectRatio/AspectRatio.test.stories.tsx +0 -859
- package/src/components/utility/InfiniteScroll/InfiniteScroll.stories.tsx +0 -620
- package/src/components/utility/InfiniteScroll/InfiniteScroll.test.stories.tsx +0 -361
- package/src/components/utility/InstallPrompt/InstallPrompt.stories.tsx +0 -118
- package/src/components/utility/InstallPrompt/InstallPrompt.test.stories.tsx +0 -83
- package/src/components/utility/InstallPrompt/__tests__/InstallPrompt.ios.test.tsx +0 -65
- package/src/components/utility/InstallPrompt/__tests__/usePwaInstall.test.tsx +0 -271
- package/src/components/utility/Portal/Portal.stories.tsx +0 -340
- package/src/components/utility/Portal/Portal.test.stories.tsx +0 -2086
- package/src/components/utility/Transition/Transition.stories.tsx +0 -493
- package/src/components/utility/Transition/Transition.test.stories.tsx +0 -854
- package/src/components/utility/VirtualList/VirtualList.stories.tsx +0 -1073
- package/src/components/utility/VirtualList/VirtualList.test.stories.tsx +0 -1085
- package/src/components/utility/WorkflowStep/WorkflowStep.stories.tsx +0 -431
- package/src/components/utility/WorkflowStep/WorkflowStep.test.stories.tsx +0 -364
- /package/src/{button.tsx → button/button.tsx} +0 -0
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* StackedModal on iOS: the slide-over panel is `position: fixed` and full-height,
|
|
3
|
-
* so it must be sized against the DYNAMIC viewport. With `100vh` the panel runs
|
|
4
|
-
* underneath the mobile browser toolbar, which leaves the tail of the scroll area
|
|
5
|
-
* — the "Criar produto" submit row — permanently out of reach: overscrolling to
|
|
6
|
-
* it rubber-bands and springs straight back.
|
|
7
|
-
*/
|
|
8
|
-
import { cleanup, render, screen } from "@testing-library/react";
|
|
9
|
-
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
10
|
-
|
|
11
|
-
import { StackedModal, StackedModalProvider } from "../index";
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Answers `max-width` media queries with `true` so `useMediaQuery` reports a
|
|
15
|
-
* phone — jsdom otherwise matches nothing and the modal always renders in its
|
|
16
|
-
* desktop shape (actions in the header, no bottom action bar).
|
|
17
|
-
*/
|
|
18
|
-
function stubPhoneViewport(): void {
|
|
19
|
-
vi.stubGlobal(
|
|
20
|
-
"matchMedia",
|
|
21
|
-
(query: string): MediaQueryList =>
|
|
22
|
-
({
|
|
23
|
-
matches: query.includes("max-width"),
|
|
24
|
-
media: query,
|
|
25
|
-
onchange: null,
|
|
26
|
-
addListener: () => undefined,
|
|
27
|
-
removeListener: () => undefined,
|
|
28
|
-
addEventListener: () => undefined,
|
|
29
|
-
removeEventListener: () => undefined,
|
|
30
|
-
dispatchEvent: () => false,
|
|
31
|
-
}) as MediaQueryList,
|
|
32
|
-
);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/** All CSS emotion has injected into the document, as one searchable string. */
|
|
36
|
-
function injectedCss(): string {
|
|
37
|
-
return Array.from(document.querySelectorAll("style"))
|
|
38
|
-
.map((tag) => {
|
|
39
|
-
// Emotion writes rules through the CSSOM in "speedy" mode, leaving the
|
|
40
|
-
// tag's text empty — read both shapes so this holds either way.
|
|
41
|
-
const fromRules = Array.from(tag.sheet?.cssRules ?? [])
|
|
42
|
-
.map((rule) => rule.cssText)
|
|
43
|
-
.join("");
|
|
44
|
-
return `${tag.textContent ?? ""}${fromRules}`;
|
|
45
|
-
})
|
|
46
|
-
.join("");
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
function renderModal(actions?: React.ReactNode): void {
|
|
50
|
-
render(
|
|
51
|
-
<StackedModalProvider>
|
|
52
|
-
<StackedModal
|
|
53
|
-
open
|
|
54
|
-
onClose={() => undefined}
|
|
55
|
-
navigationTitle="Novo produto"
|
|
56
|
-
modalId="viewport-spec"
|
|
57
|
-
dataTestId="viewport-modal"
|
|
58
|
-
actions={actions}
|
|
59
|
-
>
|
|
60
|
-
<div>corpo</div>
|
|
61
|
-
</StackedModal>
|
|
62
|
-
</StackedModalProvider>,
|
|
63
|
-
);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
afterEach(() => {
|
|
67
|
-
cleanup();
|
|
68
|
-
vi.unstubAllGlobals();
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
describe("StackedModal viewport sizing", () => {
|
|
72
|
-
it("pins the panel to the dynamic viewport instead of a bare 100vh", async () => {
|
|
73
|
-
renderModal();
|
|
74
|
-
await screen.findByTestId("viewport-modal-header");
|
|
75
|
-
|
|
76
|
-
const css = injectedCss();
|
|
77
|
-
expect(css).toContain("100dvh");
|
|
78
|
-
// The dvh sizing must be guarded so browsers without dynamic viewport units
|
|
79
|
-
// still get the 100vh fallback rather than no height at all.
|
|
80
|
-
expect(css).toContain("@supports (height: 100dvh)");
|
|
81
|
-
expect(css).toContain("100vh");
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
it("lets the scroll area own its overscroll so it can't rubber-band the panel", async () => {
|
|
85
|
-
renderModal();
|
|
86
|
-
const content = await screen.findByTestId("viewport-modal-content");
|
|
87
|
-
|
|
88
|
-
expect(injectedCss()).toContain("overscroll-behavior:contain");
|
|
89
|
-
expect(content).toBeInTheDocument();
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
it("clears the home indicator under the mobile action bar", async () => {
|
|
93
|
-
stubPhoneViewport();
|
|
94
|
-
renderModal(<button type="button">Criar</button>);
|
|
95
|
-
|
|
96
|
-
// On a phone the actions move out of the header into a pinned bottom bar…
|
|
97
|
-
const footer = await screen.findByTestId("viewport-modal-footer");
|
|
98
|
-
expect(footer).toHaveTextContent("Criar");
|
|
99
|
-
// …which pads past its own 16px by the home-indicator inset.
|
|
100
|
-
expect(injectedCss()).toContain(
|
|
101
|
-
"max(16px, calc(16px + env(safe-area-inset-bottom)))",
|
|
102
|
-
);
|
|
103
|
-
});
|
|
104
|
-
});
|
|
@@ -1,548 +0,0 @@
|
|
|
1
|
-
import { Box, Button, ButtonGroup,Typography } from '@mui/material';
|
|
2
|
-
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
3
|
-
import React, { useEffect,useState } from 'react';
|
|
4
|
-
|
|
5
|
-
import { Toast, ToastProvider, useToast } from './Toast';
|
|
6
|
-
|
|
7
|
-
const meta: Meta<typeof Toast> = {
|
|
8
|
-
title: 'Feedback/Toast',
|
|
9
|
-
component: Toast,
|
|
10
|
-
tags: ['autodocs', 'component:Toast'],
|
|
11
|
-
parameters: {
|
|
12
|
-
layout: 'centered',
|
|
13
|
-
docs: {
|
|
14
|
-
description: {
|
|
15
|
-
component:
|
|
16
|
-
'A flexible toast notification system with multiple variants and promise support.',
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
},
|
|
20
|
-
decorators: [
|
|
21
|
-
(Story) => (
|
|
22
|
-
<ToastProvider>
|
|
23
|
-
<Story />
|
|
24
|
-
</ToastProvider>
|
|
25
|
-
),
|
|
26
|
-
],
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export default meta;
|
|
30
|
-
type Story = StoryObj<typeof Toast>;
|
|
31
|
-
|
|
32
|
-
// Required story export: Default
|
|
33
|
-
export const Default: Story = {
|
|
34
|
-
args: {
|
|
35
|
-
message: 'This is a default toast notification',
|
|
36
|
-
variant: 'default',
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const ToastDemo = () => {
|
|
41
|
-
const { addToast, promise } = useToast();
|
|
42
|
-
|
|
43
|
-
const showDefault = () => {
|
|
44
|
-
addToast({
|
|
45
|
-
message: 'Default toast notification',
|
|
46
|
-
variant: 'default',
|
|
47
|
-
});
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
const showSuccess = () => {
|
|
51
|
-
addToast({
|
|
52
|
-
message: 'Success! Your action was completed.',
|
|
53
|
-
variant: 'success',
|
|
54
|
-
duration: 4000,
|
|
55
|
-
});
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const showError = () => {
|
|
59
|
-
addToast({
|
|
60
|
-
message: 'Error: Something went wrong.',
|
|
61
|
-
variant: 'error',
|
|
62
|
-
duration: 6000,
|
|
63
|
-
});
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
const showWarning = () => {
|
|
67
|
-
addToast({
|
|
68
|
-
message: 'Warning: Please review your input.',
|
|
69
|
-
variant: 'warning',
|
|
70
|
-
});
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
const showInfo = () => {
|
|
74
|
-
addToast({
|
|
75
|
-
message: "Info: Here's some helpful information.",
|
|
76
|
-
variant: 'info',
|
|
77
|
-
});
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
const showWithAction = () => {
|
|
81
|
-
addToast({
|
|
82
|
-
message: 'Your file has been saved.',
|
|
83
|
-
variant: 'success',
|
|
84
|
-
action: {
|
|
85
|
-
label: 'View',
|
|
86
|
-
onClick: () => {
|
|
87
|
-
addToast({
|
|
88
|
-
message: 'Opening file...',
|
|
89
|
-
variant: 'info',
|
|
90
|
-
});
|
|
91
|
-
},
|
|
92
|
-
},
|
|
93
|
-
});
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
const showPersistent = () => {
|
|
97
|
-
addToast({
|
|
98
|
-
message: 'This toast stays until you dismiss it.',
|
|
99
|
-
variant: 'info',
|
|
100
|
-
persistent: true,
|
|
101
|
-
});
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
const showGlass = () => {
|
|
105
|
-
addToast({
|
|
106
|
-
message: 'Beautiful glass morphism effect',
|
|
107
|
-
variant: 'default',
|
|
108
|
-
glass: true,
|
|
109
|
-
duration: 6000,
|
|
110
|
-
});
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
const showPromise = async () => {
|
|
114
|
-
const mockPromise = new Promise((resolve, reject) => {
|
|
115
|
-
window.setTimeout(() => {
|
|
116
|
-
if (Math.random() > 0.5) {
|
|
117
|
-
resolve('Success!');
|
|
118
|
-
} else {
|
|
119
|
-
reject(new Error('Failed!'));
|
|
120
|
-
}
|
|
121
|
-
}, 2000);
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
try {
|
|
125
|
-
await promise(mockPromise, {
|
|
126
|
-
loading: 'Processing your request...',
|
|
127
|
-
success: 'Request completed successfully!',
|
|
128
|
-
error: 'Request failed. Please try again.',
|
|
129
|
-
});
|
|
130
|
-
} catch {
|
|
131
|
-
// Error is already handled by the promise function
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
return (
|
|
136
|
-
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, p: 3 }}>
|
|
137
|
-
<Typography variant="h6" gutterBottom>
|
|
138
|
-
Toast Notifications Demo
|
|
139
|
-
</Typography>
|
|
140
|
-
|
|
141
|
-
<ButtonGroup orientation="vertical" variant="outlined" fullWidth>
|
|
142
|
-
<Button onClick={showDefault}>Default Toast</Button>
|
|
143
|
-
<Button onClick={showSuccess} color="success">
|
|
144
|
-
Success Toast
|
|
145
|
-
</Button>
|
|
146
|
-
<Button onClick={showError} color="error">
|
|
147
|
-
Error Toast
|
|
148
|
-
</Button>
|
|
149
|
-
<Button onClick={showWarning} color="warning">
|
|
150
|
-
Warning Toast
|
|
151
|
-
</Button>
|
|
152
|
-
<Button onClick={showInfo} color="info">
|
|
153
|
-
Info Toast
|
|
154
|
-
</Button>
|
|
155
|
-
</ButtonGroup>
|
|
156
|
-
|
|
157
|
-
<ButtonGroup orientation="vertical" variant="contained" fullWidth>
|
|
158
|
-
<Button onClick={showWithAction}>Toast with Action</Button>
|
|
159
|
-
<Button onClick={showPersistent}>Persistent Toast</Button>
|
|
160
|
-
<Button onClick={showGlass}>Glass Effect</Button>
|
|
161
|
-
<Button onClick={showPromise}>Promise Toast</Button>
|
|
162
|
-
</ButtonGroup>
|
|
163
|
-
</Box>
|
|
164
|
-
);
|
|
165
|
-
};
|
|
166
|
-
|
|
167
|
-
export const Interactive: Story = {
|
|
168
|
-
render: () => <ToastDemo />,
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
const BasicTypesComponent = () => {
|
|
172
|
-
const [showToasts, setShowToasts] = useState(false);
|
|
173
|
-
const { addToast } = useToast();
|
|
174
|
-
|
|
175
|
-
useEffect(() => {
|
|
176
|
-
if (!showToasts) return;
|
|
177
|
-
|
|
178
|
-
// Show different types with delays
|
|
179
|
-
window.setTimeout(() => addToast({ message: 'Default notification', variant: 'default' }), 100);
|
|
180
|
-
window.setTimeout(
|
|
181
|
-
() => addToast({ message: 'Success! Task completed.', variant: 'success' }),
|
|
182
|
-
600,
|
|
183
|
-
);
|
|
184
|
-
window.setTimeout(
|
|
185
|
-
() => addToast({ message: 'Error: Something went wrong.', variant: 'error' }),
|
|
186
|
-
1100,
|
|
187
|
-
);
|
|
188
|
-
window.setTimeout(
|
|
189
|
-
() => addToast({ message: 'Warning: Please check this.', variant: 'warning' }),
|
|
190
|
-
1600,
|
|
191
|
-
);
|
|
192
|
-
window.setTimeout(
|
|
193
|
-
() => addToast({ message: 'Info: Helpful information.', variant: 'info' }),
|
|
194
|
-
2100,
|
|
195
|
-
);
|
|
196
|
-
|
|
197
|
-
setShowToasts(false);
|
|
198
|
-
}, [showToasts, addToast]);
|
|
199
|
-
|
|
200
|
-
return (
|
|
201
|
-
<Button variant="contained" onClick={() => setShowToasts(true)}>
|
|
202
|
-
Show All Toast Types
|
|
203
|
-
</Button>
|
|
204
|
-
);
|
|
205
|
-
};
|
|
206
|
-
|
|
207
|
-
export const BasicTypes: Story = {
|
|
208
|
-
render: () => <BasicTypesComponent />,
|
|
209
|
-
};
|
|
210
|
-
|
|
211
|
-
const GlassMorphismComponent = () => {
|
|
212
|
-
const { addToast } = useToast();
|
|
213
|
-
|
|
214
|
-
return (
|
|
215
|
-
<Box
|
|
216
|
-
sx={{
|
|
217
|
-
minHeight: '300px',
|
|
218
|
-
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
|
|
219
|
-
p: 4,
|
|
220
|
-
borderRadius: 2,
|
|
221
|
-
display: 'flex',
|
|
222
|
-
alignItems: 'center',
|
|
223
|
-
justifyContent: 'center',
|
|
224
|
-
}}
|
|
225
|
-
>
|
|
226
|
-
<Button
|
|
227
|
-
variant="contained"
|
|
228
|
-
onClick={() =>
|
|
229
|
-
addToast({
|
|
230
|
-
message: 'Glass morphism toast with blur effects',
|
|
231
|
-
variant: 'success',
|
|
232
|
-
glass: true,
|
|
233
|
-
duration: 8000,
|
|
234
|
-
})
|
|
235
|
-
}
|
|
236
|
-
sx={{
|
|
237
|
-
backgroundColor: 'rgba(255,255,255,0.2)',
|
|
238
|
-
backdropFilter: 'blur(10px)',
|
|
239
|
-
'&:hover': {
|
|
240
|
-
backgroundColor: 'rgba(255,255,255,0.3)',
|
|
241
|
-
},
|
|
242
|
-
}}
|
|
243
|
-
>
|
|
244
|
-
Show Glass Toast
|
|
245
|
-
</Button>
|
|
246
|
-
</Box>
|
|
247
|
-
);
|
|
248
|
-
};
|
|
249
|
-
|
|
250
|
-
export const GlassMorphism: Story = {
|
|
251
|
-
render: () => <GlassMorphismComponent />,
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
const PromiseHandlingComponent = () => {
|
|
255
|
-
const { promise } = useToast();
|
|
256
|
-
|
|
257
|
-
const handleQuickPromise = () => {
|
|
258
|
-
const quickPromise = new Promise((resolve) => {
|
|
259
|
-
window.setTimeout(() => resolve('Quick success!'), 1000);
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
promise(quickPromise, {
|
|
263
|
-
loading: 'Quick loading...',
|
|
264
|
-
success: 'Done in 1 second!',
|
|
265
|
-
error: 'Quick failed',
|
|
266
|
-
});
|
|
267
|
-
};
|
|
268
|
-
|
|
269
|
-
const handleSlowPromise = () => {
|
|
270
|
-
const slowPromise = new Promise((resolve) => {
|
|
271
|
-
window.setTimeout(() => resolve('Slow success!'), 3000);
|
|
272
|
-
});
|
|
273
|
-
|
|
274
|
-
promise(slowPromise, {
|
|
275
|
-
loading: 'This will take 3 seconds...',
|
|
276
|
-
success: (data) => `Completed: ${data}`,
|
|
277
|
-
error: 'Slow operation failed',
|
|
278
|
-
});
|
|
279
|
-
};
|
|
280
|
-
|
|
281
|
-
const handleFailingPromise = () => {
|
|
282
|
-
const failingPromise = new Promise((_, reject) => {
|
|
283
|
-
window.setTimeout(() => reject(new Error('Simulated failure')), 1500);
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
promise(failingPromise, {
|
|
287
|
-
loading: 'Processing (will fail)...',
|
|
288
|
-
success: "This won't show",
|
|
289
|
-
error: (error: Error) => `Error: ${error.message}`,
|
|
290
|
-
});
|
|
291
|
-
};
|
|
292
|
-
|
|
293
|
-
return (
|
|
294
|
-
<Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
|
|
295
|
-
<Button variant="contained" onClick={handleQuickPromise}>
|
|
296
|
-
Quick Promise (1s)
|
|
297
|
-
</Button>
|
|
298
|
-
<Button variant="contained" onClick={handleSlowPromise}>
|
|
299
|
-
Slow Promise (3s)
|
|
300
|
-
</Button>
|
|
301
|
-
<Button variant="outlined" color="error" onClick={handleFailingPromise}>
|
|
302
|
-
Failing Promise
|
|
303
|
-
</Button>
|
|
304
|
-
</Box>
|
|
305
|
-
);
|
|
306
|
-
};
|
|
307
|
-
|
|
308
|
-
export const PromiseHandling: Story = {
|
|
309
|
-
render: () => <PromiseHandlingComponent />,
|
|
310
|
-
};
|
|
311
|
-
|
|
312
|
-
// Required story export: AllVariants
|
|
313
|
-
const AllVariantsComponent = () => (
|
|
314
|
-
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
|
|
315
|
-
<Toast message="Default variant" variant="default" />
|
|
316
|
-
<Toast message="Success variant" variant="success" />
|
|
317
|
-
<Toast message="Error variant" variant="error" />
|
|
318
|
-
<Toast message="Warning variant" variant="warning" />
|
|
319
|
-
<Toast message="Info variant" variant="info" />
|
|
320
|
-
<Toast message="Promise variant (loading)" variant="promise" />
|
|
321
|
-
</Box>
|
|
322
|
-
);
|
|
323
|
-
|
|
324
|
-
export const AllVariants: Story = {
|
|
325
|
-
render: () => <AllVariantsComponent />,
|
|
326
|
-
parameters: {
|
|
327
|
-
docs: {
|
|
328
|
-
description: {
|
|
329
|
-
story: 'All available toast variants displayed together.',
|
|
330
|
-
},
|
|
331
|
-
},
|
|
332
|
-
},
|
|
333
|
-
};
|
|
334
|
-
|
|
335
|
-
// Required story export: AllSizes
|
|
336
|
-
const AllSizesComponent = () => {
|
|
337
|
-
const { addToast } = useToast();
|
|
338
|
-
|
|
339
|
-
return (
|
|
340
|
-
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
|
|
341
|
-
<Button
|
|
342
|
-
variant="contained"
|
|
343
|
-
onClick={() =>
|
|
344
|
-
addToast({
|
|
345
|
-
message: 'Short message',
|
|
346
|
-
variant: 'info',
|
|
347
|
-
})
|
|
348
|
-
}
|
|
349
|
-
>
|
|
350
|
-
Short Toast
|
|
351
|
-
</Button>
|
|
352
|
-
<Button
|
|
353
|
-
variant="contained"
|
|
354
|
-
onClick={() =>
|
|
355
|
-
addToast({
|
|
356
|
-
message: 'This is a medium length toast message with more content to display to the user.',
|
|
357
|
-
variant: 'info',
|
|
358
|
-
})
|
|
359
|
-
}
|
|
360
|
-
>
|
|
361
|
-
Medium Toast
|
|
362
|
-
</Button>
|
|
363
|
-
<Button
|
|
364
|
-
variant="contained"
|
|
365
|
-
onClick={() =>
|
|
366
|
-
addToast({
|
|
367
|
-
message: 'This is a very long toast message that contains a lot of information and will likely wrap to multiple lines. It includes detailed instructions and explanations that might be necessary for complex user notifications or system messages that require more context.',
|
|
368
|
-
variant: 'info',
|
|
369
|
-
duration: 10000,
|
|
370
|
-
})
|
|
371
|
-
}
|
|
372
|
-
>
|
|
373
|
-
Long Toast
|
|
374
|
-
</Button>
|
|
375
|
-
</Box>
|
|
376
|
-
);
|
|
377
|
-
};
|
|
378
|
-
|
|
379
|
-
export const AllSizes: Story = {
|
|
380
|
-
render: () => <AllSizesComponent />,
|
|
381
|
-
parameters: {
|
|
382
|
-
docs: {
|
|
383
|
-
description: {
|
|
384
|
-
story: 'Toast notifications with different content lengths.',
|
|
385
|
-
},
|
|
386
|
-
},
|
|
387
|
-
},
|
|
388
|
-
};
|
|
389
|
-
|
|
390
|
-
// Required story export: AllStates
|
|
391
|
-
const AllStatesComponent = () => (
|
|
392
|
-
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
|
|
393
|
-
<Toast message="Normal state" variant="info" />
|
|
394
|
-
<Toast message="With close button" variant="info" closable={true} />
|
|
395
|
-
<Toast message="Without close button" variant="info" closable={false} />
|
|
396
|
-
<Toast
|
|
397
|
-
message="With action button"
|
|
398
|
-
variant="success"
|
|
399
|
-
action={{
|
|
400
|
-
label: 'Undo',
|
|
401
|
-
onClick: () => {
|
|
402
|
-
// Action clicked
|
|
403
|
-
},
|
|
404
|
-
}}
|
|
405
|
-
/>
|
|
406
|
-
<Toast message="Glass effect enabled" variant="info" glass={true} />
|
|
407
|
-
<Toast message="Persistent toast (no auto-dismiss)" variant="warning" persistent={true} />
|
|
408
|
-
</Box>
|
|
409
|
-
);
|
|
410
|
-
|
|
411
|
-
export const AllStates: Story = {
|
|
412
|
-
render: () => <AllStatesComponent />,
|
|
413
|
-
parameters: {
|
|
414
|
-
docs: {
|
|
415
|
-
description: {
|
|
416
|
-
story: 'Different toast states and configurations.',
|
|
417
|
-
},
|
|
418
|
-
},
|
|
419
|
-
},
|
|
420
|
-
};
|
|
421
|
-
|
|
422
|
-
// Required story export: InteractiveStates
|
|
423
|
-
const InteractiveStatesComponent = () => {
|
|
424
|
-
const { addToast } = useToast();
|
|
425
|
-
const [isHovered, setIsHovered] = useState(false);
|
|
426
|
-
|
|
427
|
-
return (
|
|
428
|
-
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>
|
|
429
|
-
<Box
|
|
430
|
-
onMouseEnter={() => setIsHovered(true)}
|
|
431
|
-
onMouseLeave={() => setIsHovered(false)}
|
|
432
|
-
sx={{
|
|
433
|
-
p: 2,
|
|
434
|
-
border: '1px solid',
|
|
435
|
-
borderColor: isHovered ? 'primary.main' : 'divider',
|
|
436
|
-
borderRadius: 1,
|
|
437
|
-
transition: 'all 0.3s',
|
|
438
|
-
}}
|
|
439
|
-
>
|
|
440
|
-
<Toast
|
|
441
|
-
message={isHovered ? 'Toast is hovered' : 'Hover over this area'}
|
|
442
|
-
variant={isHovered ? 'success' : 'default'}
|
|
443
|
-
/>
|
|
444
|
-
</Box>
|
|
445
|
-
<Button
|
|
446
|
-
variant="contained"
|
|
447
|
-
onClick={() => {
|
|
448
|
-
addToast({
|
|
449
|
-
message: 'Click the close button or wait 5 seconds',
|
|
450
|
-
variant: 'info',
|
|
451
|
-
duration: 5000,
|
|
452
|
-
closable: true,
|
|
453
|
-
});
|
|
454
|
-
}}
|
|
455
|
-
>
|
|
456
|
-
Show Dismissible Toast
|
|
457
|
-
</Button>
|
|
458
|
-
<Button
|
|
459
|
-
variant="contained"
|
|
460
|
-
color="primary"
|
|
461
|
-
onClick={() => {
|
|
462
|
-
addToast({
|
|
463
|
-
message: 'Interactive toast with action',
|
|
464
|
-
variant: 'success',
|
|
465
|
-
action: {
|
|
466
|
-
label: 'View Details',
|
|
467
|
-
onClick: () => {
|
|
468
|
-
addToast({
|
|
469
|
-
message: 'Action button was clicked!',
|
|
470
|
-
variant: 'info',
|
|
471
|
-
});
|
|
472
|
-
},
|
|
473
|
-
},
|
|
474
|
-
});
|
|
475
|
-
}}
|
|
476
|
-
>
|
|
477
|
-
Toast with Interactive Action
|
|
478
|
-
</Button>
|
|
479
|
-
</Box>
|
|
480
|
-
);
|
|
481
|
-
};
|
|
482
|
-
|
|
483
|
-
export const InteractiveStates: Story = {
|
|
484
|
-
render: () => <InteractiveStatesComponent />,
|
|
485
|
-
parameters: {
|
|
486
|
-
docs: {
|
|
487
|
-
description: {
|
|
488
|
-
story: 'Interactive toast states including hover and click interactions.',
|
|
489
|
-
},
|
|
490
|
-
},
|
|
491
|
-
},
|
|
492
|
-
};
|
|
493
|
-
|
|
494
|
-
// Required story export: Responsive
|
|
495
|
-
const ResponsiveComponent = () => {
|
|
496
|
-
const { addToast } = useToast();
|
|
497
|
-
|
|
498
|
-
const showResponsiveToast = (position: string) => {
|
|
499
|
-
addToast({
|
|
500
|
-
message: `Toast at ${position}`,
|
|
501
|
-
variant: 'info',
|
|
502
|
-
duration: 3000,
|
|
503
|
-
});
|
|
504
|
-
};
|
|
505
|
-
|
|
506
|
-
return (
|
|
507
|
-
<Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, width: '100%' }}>
|
|
508
|
-
<Typography variant="h6">Responsive Toast Positions</Typography>
|
|
509
|
-
<Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(150px, 1fr))', gap: 1 }}>
|
|
510
|
-
<Button variant="outlined" onClick={() => showResponsiveToast('top-left')}>
|
|
511
|
-
Top Left
|
|
512
|
-
</Button>
|
|
513
|
-
<Button variant="outlined" onClick={() => showResponsiveToast('top-center')}>
|
|
514
|
-
Top Center
|
|
515
|
-
</Button>
|
|
516
|
-
<Button variant="outlined" onClick={() => showResponsiveToast('top-right')}>
|
|
517
|
-
Top Right
|
|
518
|
-
</Button>
|
|
519
|
-
<Button variant="outlined" onClick={() => showResponsiveToast('bottom-left')}>
|
|
520
|
-
Bottom Left
|
|
521
|
-
</Button>
|
|
522
|
-
<Button variant="outlined" onClick={() => showResponsiveToast('bottom-center')}>
|
|
523
|
-
Bottom Center
|
|
524
|
-
</Button>
|
|
525
|
-
<Button variant="outlined" onClick={() => showResponsiveToast('bottom-right')}>
|
|
526
|
-
Bottom Right
|
|
527
|
-
</Button>
|
|
528
|
-
</Box>
|
|
529
|
-
<Typography variant="body2" color="text.secondary">
|
|
530
|
-
Toasts adapt to different screen sizes and maintain proper positioning
|
|
531
|
-
</Typography>
|
|
532
|
-
</Box>
|
|
533
|
-
);
|
|
534
|
-
};
|
|
535
|
-
|
|
536
|
-
export const Responsive: Story = {
|
|
537
|
-
render: () => <ResponsiveComponent />,
|
|
538
|
-
parameters: {
|
|
539
|
-
viewport: {
|
|
540
|
-
defaultViewport: 'responsive',
|
|
541
|
-
},
|
|
542
|
-
docs: {
|
|
543
|
-
description: {
|
|
544
|
-
story: 'Toast notifications adapt to different screen sizes and positions.',
|
|
545
|
-
},
|
|
546
|
-
},
|
|
547
|
-
},
|
|
548
|
-
};
|