@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,883 +0,0 @@
|
|
|
1
|
-
import PauseIcon from '@mui/icons-material/Pause';
|
|
2
|
-
import PersonIcon from '@mui/icons-material/Person';
|
|
3
|
-
import PlayArrowIcon from '@mui/icons-material/PlayArrow';
|
|
4
|
-
import SettingsIcon from '@mui/icons-material/Settings';
|
|
5
|
-
import SkipNextIcon from '@mui/icons-material/SkipNext';
|
|
6
|
-
import SkipPreviousIcon from '@mui/icons-material/SkipPrevious';
|
|
7
|
-
import VolumeUpIcon from '@mui/icons-material/VolumeUp';
|
|
8
|
-
import {
|
|
9
|
-
Avatar,
|
|
10
|
-
Box,
|
|
11
|
-
Button,
|
|
12
|
-
Card,
|
|
13
|
-
CardContent,
|
|
14
|
-
Chip,
|
|
15
|
-
Divider,
|
|
16
|
-
FormControlLabel,
|
|
17
|
-
Grid,
|
|
18
|
-
IconButton,
|
|
19
|
-
List,
|
|
20
|
-
ListItem,
|
|
21
|
-
ListItemText,
|
|
22
|
-
Paper,
|
|
23
|
-
Slider,
|
|
24
|
-
Stack,
|
|
25
|
-
Switch,
|
|
26
|
-
TextField,
|
|
27
|
-
Typography,
|
|
28
|
-
} from '@mui/material';
|
|
29
|
-
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
30
|
-
import React, { useState } from 'react';
|
|
31
|
-
|
|
32
|
-
import { Sheet } from './Sheet';
|
|
33
|
-
import type { SheetProps } from './Sheet.types';
|
|
34
|
-
|
|
35
|
-
const meta: Meta<typeof Sheet> = {
|
|
36
|
-
title: 'DataDisplay/Sheet',
|
|
37
|
-
component: Sheet,
|
|
38
|
-
parameters: {
|
|
39
|
-
layout: 'centered',
|
|
40
|
-
},
|
|
41
|
-
tags: ['autodocs', 'component:Sheet'],
|
|
42
|
-
argTypes: {
|
|
43
|
-
position: {
|
|
44
|
-
control: 'select',
|
|
45
|
-
options: ['top', 'bottom', 'left', 'right'],
|
|
46
|
-
},
|
|
47
|
-
variant: {
|
|
48
|
-
control: 'select',
|
|
49
|
-
options: ['default', 'glass', 'gradient', 'elevated', 'minimal', 'draggable'],
|
|
50
|
-
},
|
|
51
|
-
size: {
|
|
52
|
-
control: 'select',
|
|
53
|
-
options: ['xs', 'sm', 'md', 'lg', 'xl', 'full'],
|
|
54
|
-
},
|
|
55
|
-
color: {
|
|
56
|
-
control: 'select',
|
|
57
|
-
options: ['primary', 'secondary', 'success', 'error', 'warning', 'info'],
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
export default meta;
|
|
63
|
-
type Story = StoryObj<typeof Sheet>;
|
|
64
|
-
|
|
65
|
-
const SheetWrapper: React.FC<SheetProps & { buttonText?: string }> = ({
|
|
66
|
-
buttonText = 'Open Sheet',
|
|
67
|
-
...props
|
|
68
|
-
}) => {
|
|
69
|
-
const [open, setOpen] = useState(false);
|
|
70
|
-
|
|
71
|
-
return (
|
|
72
|
-
<>
|
|
73
|
-
<Button variant="contained" onClick={() => setOpen(true)}>
|
|
74
|
-
{buttonText}
|
|
75
|
-
</Button>
|
|
76
|
-
<Sheet {...props} open={open} onOpenChange={setOpen} />
|
|
77
|
-
</>
|
|
78
|
-
);
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
export const Default: Story = {
|
|
82
|
-
render: (args) => (
|
|
83
|
-
<SheetWrapper {...args}>
|
|
84
|
-
<Typography variant="h6" gutterBottom>
|
|
85
|
-
Default Sheet Content
|
|
86
|
-
</Typography>
|
|
87
|
-
<Typography variant="body2" color="text.secondary">
|
|
88
|
-
This is a basic sheet component that slides in from the bottom.
|
|
89
|
-
</Typography>
|
|
90
|
-
</SheetWrapper>
|
|
91
|
-
),
|
|
92
|
-
args: {
|
|
93
|
-
title: 'Sheet Title',
|
|
94
|
-
description: 'This is a sheet description',
|
|
95
|
-
position: 'bottom',
|
|
96
|
-
},
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
export const Positions: Story = {
|
|
100
|
-
render: () => (
|
|
101
|
-
<Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
|
|
102
|
-
{(['top', 'bottom', 'left', 'right'] as const).map((position) => (
|
|
103
|
-
<SheetWrapper
|
|
104
|
-
key={position}
|
|
105
|
-
position={position}
|
|
106
|
-
title={`${position} Sheet`}
|
|
107
|
-
buttonText={`Open ${position}`}
|
|
108
|
-
>
|
|
109
|
-
<Typography>This sheet slides in from the {position}</Typography>
|
|
110
|
-
</SheetWrapper>
|
|
111
|
-
))}
|
|
112
|
-
</Box>
|
|
113
|
-
),
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
export const Sizes: Story = {
|
|
117
|
-
render: () => (
|
|
118
|
-
<Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
|
|
119
|
-
{(['xs', 'sm', 'md', 'lg', 'xl', 'full'] as const).map((size) => (
|
|
120
|
-
<SheetWrapper
|
|
121
|
-
key={size}
|
|
122
|
-
size={size}
|
|
123
|
-
title={`Size: ${size.toUpperCase()}`}
|
|
124
|
-
buttonText={`Size ${size}`}
|
|
125
|
-
>
|
|
126
|
-
<Typography>This is a {size} sized sheet</Typography>
|
|
127
|
-
</SheetWrapper>
|
|
128
|
-
))}
|
|
129
|
-
</Box>
|
|
130
|
-
),
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
export const Variants: Story = {
|
|
134
|
-
render: () => (
|
|
135
|
-
<Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
|
|
136
|
-
{(['default', 'glass', 'gradient', 'elevated', 'minimal'] as const).map((variant) => (
|
|
137
|
-
<SheetWrapper
|
|
138
|
-
key={variant}
|
|
139
|
-
variant={variant}
|
|
140
|
-
title={`${variant} Variant`}
|
|
141
|
-
buttonText={variant}
|
|
142
|
-
glow={variant === 'glass'}
|
|
143
|
-
glass={variant === 'glass'}
|
|
144
|
-
gradient={variant === 'gradient'}
|
|
145
|
-
>
|
|
146
|
-
<Typography>This is a {variant} variant sheet</Typography>
|
|
147
|
-
</SheetWrapper>
|
|
148
|
-
))}
|
|
149
|
-
</Box>
|
|
150
|
-
),
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
const DraggableBottomSheetComponent = () => {
|
|
154
|
-
const [open, setOpen] = useState(false);
|
|
155
|
-
const [currentSnapPoint, setCurrentSnapPoint] = useState(0.5);
|
|
156
|
-
|
|
157
|
-
return (
|
|
158
|
-
<>
|
|
159
|
-
<Button variant="contained" onClick={() => setOpen(true)}>
|
|
160
|
-
Open Draggable Bottom Sheet
|
|
161
|
-
</Button>
|
|
162
|
-
<Sheet
|
|
163
|
-
open={open}
|
|
164
|
-
onOpenChange={setOpen}
|
|
165
|
-
variant="draggable"
|
|
166
|
-
position="bottom"
|
|
167
|
-
title="Draggable Sheet"
|
|
168
|
-
description={`Current height: ${Math.round(currentSnapPoint * 100)}%`}
|
|
169
|
-
snapPoints={[0.25, 0.5, 0.75, 1]}
|
|
170
|
-
defaultSnapPoint={0.5}
|
|
171
|
-
onSnapPointChange={setCurrentSnapPoint}
|
|
172
|
-
showHandle
|
|
173
|
-
>
|
|
174
|
-
<Stack spacing={2}>
|
|
175
|
-
<Typography variant="body1">
|
|
176
|
-
Drag the handle to resize this sheet. It will snap to 25%, 50%, 75%, or 100% height.
|
|
177
|
-
</Typography>
|
|
178
|
-
<Paper elevation={2} sx={{ p: 2 }}>
|
|
179
|
-
<Typography variant="h6" gutterBottom>
|
|
180
|
-
Features:
|
|
181
|
-
</Typography>
|
|
182
|
-
<List dense>
|
|
183
|
-
<ListItem>• Smooth spring animations</ListItem>
|
|
184
|
-
<ListItem>• Velocity-based snapping</ListItem>
|
|
185
|
-
<ListItem>• Boundary resistance</ListItem>
|
|
186
|
-
<ListItem>• Touch and mouse support</ListItem>
|
|
187
|
-
</List>
|
|
188
|
-
</Paper>
|
|
189
|
-
<Box sx={{ bgcolor: 'grey.100', p: 2, borderRadius: 1 }}>
|
|
190
|
-
<Typography variant="body2" color="text.secondary">
|
|
191
|
-
Try dragging quickly to trigger velocity-based snapping!
|
|
192
|
-
</Typography>
|
|
193
|
-
</Box>
|
|
194
|
-
</Stack>
|
|
195
|
-
</Sheet>
|
|
196
|
-
</>
|
|
197
|
-
);
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
export const DraggableBottomSheet: Story = {
|
|
201
|
-
render: () => <DraggableBottomSheetComponent />,
|
|
202
|
-
};
|
|
203
|
-
|
|
204
|
-
const MusicPlayerComponent = () => {
|
|
205
|
-
const [open, setOpen] = useState(false);
|
|
206
|
-
const [isPlaying, setIsPlaying] = useState(false);
|
|
207
|
-
const [volume, setVolume] = useState(30);
|
|
208
|
-
const [progress, setProgress] = useState(45);
|
|
209
|
-
|
|
210
|
-
return (
|
|
211
|
-
<>
|
|
212
|
-
<Button variant="contained" startIcon={<PlayArrowIcon />} onClick={() => setOpen(true)}>
|
|
213
|
-
Open Music Player
|
|
214
|
-
</Button>
|
|
215
|
-
<Sheet
|
|
216
|
-
open={open}
|
|
217
|
-
onOpenChange={setOpen}
|
|
218
|
-
variant="draggable"
|
|
219
|
-
position="bottom"
|
|
220
|
-
snapPoints={[0.15, 0.5, 0.95]}
|
|
221
|
-
defaultSnapPoint={0.15}
|
|
222
|
-
showHandle
|
|
223
|
-
color="secondary"
|
|
224
|
-
glow
|
|
225
|
-
>
|
|
226
|
-
<Box sx={{ p: 2 }}>
|
|
227
|
-
{/* Mini Player View */}
|
|
228
|
-
<Box sx={{ display: 'flex', alignItems: 'center', mb: 3 }}>
|
|
229
|
-
<Avatar sx={{ width: 60, height: 60, mr: 2 }} src="https://via.placeholder.com/60" />
|
|
230
|
-
<Box sx={{ flex: 1 }}>
|
|
231
|
-
<Typography variant="subtitle1" fontWeight="bold">
|
|
232
|
-
Song Title
|
|
233
|
-
</Typography>
|
|
234
|
-
<Typography variant="body2" color="text.secondary">
|
|
235
|
-
Artist Name
|
|
236
|
-
</Typography>
|
|
237
|
-
</Box>
|
|
238
|
-
<IconButton onClick={() => setIsPlaying(!isPlaying)}>
|
|
239
|
-
{isPlaying ? <PauseIcon /> : <PlayArrowIcon />}
|
|
240
|
-
</IconButton>
|
|
241
|
-
</Box>
|
|
242
|
-
|
|
243
|
-
{/* Expanded Controls */}
|
|
244
|
-
<Stack spacing={2}>
|
|
245
|
-
<Slider
|
|
246
|
-
value={progress}
|
|
247
|
-
onChange={(e, v) => setProgress(v as number)}
|
|
248
|
-
aria-label="Progress"
|
|
249
|
-
/>
|
|
250
|
-
<Box sx={{ display: 'flex', justifyContent: 'space-between' }}>
|
|
251
|
-
<Typography variant="caption">1:45</Typography>
|
|
252
|
-
<Typography variant="caption">3:20</Typography>
|
|
253
|
-
</Box>
|
|
254
|
-
|
|
255
|
-
<Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 2 }}>
|
|
256
|
-
<IconButton>
|
|
257
|
-
<SkipPreviousIcon />
|
|
258
|
-
</IconButton>
|
|
259
|
-
<IconButton
|
|
260
|
-
sx={{
|
|
261
|
-
bgcolor: 'primary.main',
|
|
262
|
-
color: 'white',
|
|
263
|
-
'&:hover': { bgcolor: 'primary.dark' },
|
|
264
|
-
}}
|
|
265
|
-
onClick={() => setIsPlaying(!isPlaying)}
|
|
266
|
-
>
|
|
267
|
-
{isPlaying ? <PauseIcon /> : <PlayArrowIcon />}
|
|
268
|
-
</IconButton>
|
|
269
|
-
<IconButton>
|
|
270
|
-
<SkipNextIcon />
|
|
271
|
-
</IconButton>
|
|
272
|
-
</Box>
|
|
273
|
-
|
|
274
|
-
<Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>
|
|
275
|
-
<VolumeUpIcon />
|
|
276
|
-
<Slider
|
|
277
|
-
value={volume}
|
|
278
|
-
onChange={(e, v) => setVolume(v as number)}
|
|
279
|
-
aria-label="Volume"
|
|
280
|
-
/>
|
|
281
|
-
</Box>
|
|
282
|
-
</Stack>
|
|
283
|
-
</Box>
|
|
284
|
-
</Sheet>
|
|
285
|
-
</>
|
|
286
|
-
);
|
|
287
|
-
};
|
|
288
|
-
|
|
289
|
-
export const MusicPlayer: Story = {
|
|
290
|
-
render: () => <MusicPlayerComponent />,
|
|
291
|
-
};
|
|
292
|
-
|
|
293
|
-
const CustomSnapPointsComponent = () => {
|
|
294
|
-
const [open, setOpen] = useState(false);
|
|
295
|
-
const [snapPoint, setSnapPoint] = useState(0.3);
|
|
296
|
-
|
|
297
|
-
return (
|
|
298
|
-
<>
|
|
299
|
-
<Button variant="contained" onClick={() => setOpen(true)}>
|
|
300
|
-
Open Custom Snap Points
|
|
301
|
-
</Button>
|
|
302
|
-
<Sheet
|
|
303
|
-
open={open}
|
|
304
|
-
onOpenChange={setOpen}
|
|
305
|
-
variant="draggable"
|
|
306
|
-
position="bottom"
|
|
307
|
-
title="Custom Snap Points"
|
|
308
|
-
snapPoints={[0.1, 0.3, 0.6, 0.9]}
|
|
309
|
-
defaultSnapPoint={0.3}
|
|
310
|
-
onSnapPointChange={setSnapPoint}
|
|
311
|
-
showHandle
|
|
312
|
-
minSnapPoint={0.1}
|
|
313
|
-
maxSnapPoint={0.9}
|
|
314
|
-
>
|
|
315
|
-
<Stack spacing={2}>
|
|
316
|
-
<Paper sx={{ p: 2, bgcolor: 'primary.main', color: 'white' }}>
|
|
317
|
-
<Typography variant="h6">Current: {Math.round(snapPoint * 100)}%</Typography>
|
|
318
|
-
</Paper>
|
|
319
|
-
<Typography>This sheet has custom snap points at:</Typography>
|
|
320
|
-
<Grid container spacing={1}>
|
|
321
|
-
{[10, 30, 60, 90].map((percent) => (
|
|
322
|
-
<Grid item xs={3} key={percent}>
|
|
323
|
-
<Card>
|
|
324
|
-
<CardContent>
|
|
325
|
-
<Typography align="center" fontWeight="bold">
|
|
326
|
-
{percent}%
|
|
327
|
-
</Typography>
|
|
328
|
-
</CardContent>
|
|
329
|
-
</Card>
|
|
330
|
-
</Grid>
|
|
331
|
-
))}
|
|
332
|
-
</Grid>
|
|
333
|
-
<Typography variant="body2" color="text.secondary">
|
|
334
|
-
The sheet is constrained between 10% and 90% height.
|
|
335
|
-
</Typography>
|
|
336
|
-
</Stack>
|
|
337
|
-
</Sheet>
|
|
338
|
-
</>
|
|
339
|
-
);
|
|
340
|
-
};
|
|
341
|
-
|
|
342
|
-
export const CustomSnapPoints: Story = {
|
|
343
|
-
render: () => <CustomSnapPointsComponent />,
|
|
344
|
-
};
|
|
345
|
-
|
|
346
|
-
const WithResistanceComponent = () => {
|
|
347
|
-
const [open, setOpen] = useState(false);
|
|
348
|
-
|
|
349
|
-
return (
|
|
350
|
-
<>
|
|
351
|
-
<Button variant="contained" onClick={() => setOpen(true)}>
|
|
352
|
-
Open Sheet with High Resistance
|
|
353
|
-
</Button>
|
|
354
|
-
<Sheet
|
|
355
|
-
open={open}
|
|
356
|
-
onOpenChange={setOpen}
|
|
357
|
-
variant="draggable"
|
|
358
|
-
position="bottom"
|
|
359
|
-
title="High Drag Resistance"
|
|
360
|
-
description="Feel the resistance at boundaries"
|
|
361
|
-
snapPoints={[0.3, 0.7]}
|
|
362
|
-
defaultSnapPoint={0.3}
|
|
363
|
-
dragResistance={0.1}
|
|
364
|
-
showHandle
|
|
365
|
-
>
|
|
366
|
-
<Typography variant="body1" paragraph>
|
|
367
|
-
This sheet has high drag resistance (0.1) at the boundaries.
|
|
368
|
-
</Typography>
|
|
369
|
-
<Typography variant="body2" color="text.secondary">
|
|
370
|
-
Try dragging beyond the snap points to feel the rubber-band effect.
|
|
371
|
-
</Typography>
|
|
372
|
-
</Sheet>
|
|
373
|
-
</>
|
|
374
|
-
);
|
|
375
|
-
};
|
|
376
|
-
|
|
377
|
-
export const WithResistance: Story = {
|
|
378
|
-
render: () => <WithResistanceComponent />,
|
|
379
|
-
};
|
|
380
|
-
|
|
381
|
-
const DraggableWithContentComponent = () => {
|
|
382
|
-
const [open, setOpen] = useState(false);
|
|
383
|
-
const items = Array.from({ length: 20 }, (_, i) => ({
|
|
384
|
-
id: i + 1,
|
|
385
|
-
title: `Item ${i + 1}`,
|
|
386
|
-
description: `Description for item ${i + 1}`,
|
|
387
|
-
}));
|
|
388
|
-
|
|
389
|
-
return (
|
|
390
|
-
<>
|
|
391
|
-
<Button variant="contained" onClick={() => setOpen(true)}>
|
|
392
|
-
Open Draggable List
|
|
393
|
-
</Button>
|
|
394
|
-
<Sheet
|
|
395
|
-
open={open}
|
|
396
|
-
onOpenChange={setOpen}
|
|
397
|
-
variant="draggable"
|
|
398
|
-
position="bottom"
|
|
399
|
-
title="Scrollable Content"
|
|
400
|
-
description="Drag to resize, scroll to navigate"
|
|
401
|
-
snapPoints={[0.25, 0.5, 0.75, 1]}
|
|
402
|
-
defaultSnapPoint={0.5}
|
|
403
|
-
showHandle
|
|
404
|
-
footer={
|
|
405
|
-
<Button variant="contained" fullWidth>
|
|
406
|
-
Load More Items
|
|
407
|
-
</Button>
|
|
408
|
-
}
|
|
409
|
-
>
|
|
410
|
-
<List>
|
|
411
|
-
{items.map((item) => (
|
|
412
|
-
<ListItem key={item.id} divider>
|
|
413
|
-
<ListItemText primary={item.title} secondary={item.description} />
|
|
414
|
-
</ListItem>
|
|
415
|
-
))}
|
|
416
|
-
</List>
|
|
417
|
-
</Sheet>
|
|
418
|
-
</>
|
|
419
|
-
);
|
|
420
|
-
};
|
|
421
|
-
|
|
422
|
-
export const DraggableWithContent: Story = {
|
|
423
|
-
render: () => <DraggableWithContentComponent />,
|
|
424
|
-
};
|
|
425
|
-
|
|
426
|
-
export const WithForm: Story = {
|
|
427
|
-
render: (args) => (
|
|
428
|
-
<SheetWrapper
|
|
429
|
-
{...args}
|
|
430
|
-
title="User Settings"
|
|
431
|
-
description="Update your profile information"
|
|
432
|
-
footer={
|
|
433
|
-
<Box sx={{ display: 'flex', gap: 2, justifyContent: 'flex-end' }}>
|
|
434
|
-
<Button variant="outlined">Cancel</Button>
|
|
435
|
-
<Button variant="contained" color="primary">
|
|
436
|
-
Save Changes
|
|
437
|
-
</Button>
|
|
438
|
-
</Box>
|
|
439
|
-
}
|
|
440
|
-
>
|
|
441
|
-
<Stack spacing={3}>
|
|
442
|
-
<TextField label="Full Name" fullWidth defaultValue="John Doe" />
|
|
443
|
-
<TextField label="Email" type="email" fullWidth defaultValue="john.doe@example.com" />
|
|
444
|
-
<TextField
|
|
445
|
-
label="Bio"
|
|
446
|
-
multiline
|
|
447
|
-
rows={4}
|
|
448
|
-
fullWidth
|
|
449
|
-
placeholder="Tell us about yourself..."
|
|
450
|
-
/>
|
|
451
|
-
<FormControlLabel control={<Switch defaultChecked />} label="Email notifications" />
|
|
452
|
-
<FormControlLabel control={<Switch />} label="Make profile public" />
|
|
453
|
-
</Stack>
|
|
454
|
-
</SheetWrapper>
|
|
455
|
-
),
|
|
456
|
-
args: {
|
|
457
|
-
position: 'right',
|
|
458
|
-
size: 'md',
|
|
459
|
-
},
|
|
460
|
-
};
|
|
461
|
-
|
|
462
|
-
export const WithList: Story = {
|
|
463
|
-
render: (args) => {
|
|
464
|
-
const items = [
|
|
465
|
-
{ id: 1, name: 'John Doe', role: 'Admin', status: 'active' },
|
|
466
|
-
{ id: 2, name: 'Jane Smith', role: 'User', status: 'active' },
|
|
467
|
-
{ id: 3, name: 'Bob Johnson', role: 'Moderator', status: 'inactive' },
|
|
468
|
-
{ id: 4, name: 'Alice Brown', role: 'User', status: 'active' },
|
|
469
|
-
];
|
|
470
|
-
|
|
471
|
-
return (
|
|
472
|
-
<SheetWrapper {...args} title="Team Members" description="Manage your team">
|
|
473
|
-
<List>
|
|
474
|
-
{items.map((item) => (
|
|
475
|
-
<ListItem key={item.id}>
|
|
476
|
-
<Avatar sx={{ mr: 2 }}>
|
|
477
|
-
<PersonIcon />
|
|
478
|
-
</Avatar>
|
|
479
|
-
<ListItemText primary={item.name} secondary={item.role} />
|
|
480
|
-
<Chip
|
|
481
|
-
label={item.status}
|
|
482
|
-
color={item.status === 'active' ? 'success' : 'default'}
|
|
483
|
-
size="small"
|
|
484
|
-
/>
|
|
485
|
-
</ListItem>
|
|
486
|
-
))}
|
|
487
|
-
</List>
|
|
488
|
-
</SheetWrapper>
|
|
489
|
-
);
|
|
490
|
-
},
|
|
491
|
-
args: {
|
|
492
|
-
position: 'left',
|
|
493
|
-
size: 'sm',
|
|
494
|
-
},
|
|
495
|
-
};
|
|
496
|
-
|
|
497
|
-
export const Glass: Story = {
|
|
498
|
-
render: (args) => (
|
|
499
|
-
<SheetWrapper
|
|
500
|
-
{...args}
|
|
501
|
-
variant="glass"
|
|
502
|
-
glass
|
|
503
|
-
glow
|
|
504
|
-
title="Glass Effect"
|
|
505
|
-
description="Beautiful glassmorphism design"
|
|
506
|
-
>
|
|
507
|
-
<Box sx={{ p: 2 }}>
|
|
508
|
-
<Typography variant="h6" gutterBottom>
|
|
509
|
-
Modern Glass Design
|
|
510
|
-
</Typography>
|
|
511
|
-
<Typography variant="body2" color="text.secondary" paragraph>
|
|
512
|
-
This sheet features a glass morphism effect with backdrop blur and transparency.
|
|
513
|
-
</Typography>
|
|
514
|
-
<Button variant="contained" fullWidth>
|
|
515
|
-
Action Button
|
|
516
|
-
</Button>
|
|
517
|
-
</Box>
|
|
518
|
-
</SheetWrapper>
|
|
519
|
-
),
|
|
520
|
-
};
|
|
521
|
-
|
|
522
|
-
export const Gradient: Story = {
|
|
523
|
-
render: (args) => (
|
|
524
|
-
<SheetWrapper {...args} variant="gradient" gradient color="primary" title="Gradient Background">
|
|
525
|
-
<Typography variant="h6" gutterBottom>
|
|
526
|
-
Beautiful Gradient
|
|
527
|
-
</Typography>
|
|
528
|
-
<Typography variant="body2" color="text.secondary">
|
|
529
|
-
This sheet has a subtle gradient background effect.
|
|
530
|
-
</Typography>
|
|
531
|
-
</SheetWrapper>
|
|
532
|
-
),
|
|
533
|
-
};
|
|
534
|
-
|
|
535
|
-
export const WithEffects: Story = {
|
|
536
|
-
render: (args) => (
|
|
537
|
-
<SheetWrapper
|
|
538
|
-
{...args}
|
|
539
|
-
variant="glass"
|
|
540
|
-
glow
|
|
541
|
-
pulse
|
|
542
|
-
glass
|
|
543
|
-
title="Enhanced Effects"
|
|
544
|
-
description="Multiple visual effects combined"
|
|
545
|
-
>
|
|
546
|
-
<Typography>This sheet combines glow and pulse effects with glass morphism.</Typography>
|
|
547
|
-
</SheetWrapper>
|
|
548
|
-
),
|
|
549
|
-
};
|
|
550
|
-
|
|
551
|
-
export const Swipeable: Story = {
|
|
552
|
-
render: (args) => (
|
|
553
|
-
<SheetWrapper
|
|
554
|
-
{...args}
|
|
555
|
-
swipeable
|
|
556
|
-
title="Swipeable Sheet"
|
|
557
|
-
description="Swipe down to close"
|
|
558
|
-
buttonText="Open Swipeable"
|
|
559
|
-
>
|
|
560
|
-
<Typography variant="body1" paragraph>
|
|
561
|
-
This sheet can be swiped to close on mobile devices.
|
|
562
|
-
</Typography>
|
|
563
|
-
<Typography variant="body2" color="text.secondary">
|
|
564
|
-
Try swiping down from the handle to dismiss.
|
|
565
|
-
</Typography>
|
|
566
|
-
</SheetWrapper>
|
|
567
|
-
),
|
|
568
|
-
args: {
|
|
569
|
-
position: 'bottom',
|
|
570
|
-
showHandle: true,
|
|
571
|
-
},
|
|
572
|
-
};
|
|
573
|
-
|
|
574
|
-
export const Persistent: Story = {
|
|
575
|
-
render: (args) => (
|
|
576
|
-
<SheetWrapper
|
|
577
|
-
{...args}
|
|
578
|
-
persistent
|
|
579
|
-
closeOnOverlayClick={false}
|
|
580
|
-
closeOnEscape={false}
|
|
581
|
-
showCloseButton={false}
|
|
582
|
-
title="Persistent Sheet"
|
|
583
|
-
description="Cannot be closed by user"
|
|
584
|
-
footer={
|
|
585
|
-
<Button variant="contained" color="error" fullWidth>
|
|
586
|
-
Force Close (Only way to close)
|
|
587
|
-
</Button>
|
|
588
|
-
}
|
|
589
|
-
>
|
|
590
|
-
<Typography variant="body1" paragraph>
|
|
591
|
-
This sheet is persistent and cannot be closed by:
|
|
592
|
-
</Typography>
|
|
593
|
-
<List>
|
|
594
|
-
<ListItem>• Clicking the overlay</ListItem>
|
|
595
|
-
<ListItem>• Pressing Escape key</ListItem>
|
|
596
|
-
<ListItem>• Close button (hidden)</ListItem>
|
|
597
|
-
</List>
|
|
598
|
-
</SheetWrapper>
|
|
599
|
-
),
|
|
600
|
-
};
|
|
601
|
-
|
|
602
|
-
export const Loading: Story = {
|
|
603
|
-
render: (args) => (
|
|
604
|
-
<SheetWrapper {...args} loading title="Loading Content" description="Please wait..." />
|
|
605
|
-
),
|
|
606
|
-
};
|
|
607
|
-
|
|
608
|
-
export const NoOverlay: Story = {
|
|
609
|
-
render: (args) => (
|
|
610
|
-
<SheetWrapper
|
|
611
|
-
{...args}
|
|
612
|
-
showOverlay={false}
|
|
613
|
-
title="No Overlay"
|
|
614
|
-
description="Sheet without backdrop overlay"
|
|
615
|
-
>
|
|
616
|
-
<Typography>This sheet appears without a backdrop overlay.</Typography>
|
|
617
|
-
</SheetWrapper>
|
|
618
|
-
),
|
|
619
|
-
};
|
|
620
|
-
|
|
621
|
-
export const CustomHeader: Story = {
|
|
622
|
-
render: (args) => (
|
|
623
|
-
<SheetWrapper
|
|
624
|
-
{...args}
|
|
625
|
-
header={
|
|
626
|
-
<Box sx={{ display: 'flex', alignItems: 'center', gap: 2, mt: 2 }}>
|
|
627
|
-
<Avatar>
|
|
628
|
-
<PersonIcon />
|
|
629
|
-
</Avatar>
|
|
630
|
-
<Box>
|
|
631
|
-
<Typography variant="h6">John Doe</Typography>
|
|
632
|
-
<Typography variant="caption" color="text.secondary">
|
|
633
|
-
john.doe@example.com
|
|
634
|
-
</Typography>
|
|
635
|
-
</Box>
|
|
636
|
-
</Box>
|
|
637
|
-
}
|
|
638
|
-
>
|
|
639
|
-
<Typography>Sheet with custom header content</Typography>
|
|
640
|
-
</SheetWrapper>
|
|
641
|
-
),
|
|
642
|
-
};
|
|
643
|
-
|
|
644
|
-
export const FullHeight: Story = {
|
|
645
|
-
render: (args) => (
|
|
646
|
-
<SheetWrapper {...args} fullHeight title="Full Height Sheet" position="right" size="md">
|
|
647
|
-
<Box sx={{ height: '100%', display: 'flex', flexDirection: 'column' }}>
|
|
648
|
-
<Typography variant="h6" gutterBottom>
|
|
649
|
-
Full Height Content
|
|
650
|
-
</Typography>
|
|
651
|
-
<Box sx={{ flex: 1, bgcolor: 'grey.100', p: 2, borderRadius: 1 }}>
|
|
652
|
-
<Typography variant="body2" color="text.secondary">
|
|
653
|
-
This content area expands to fill the full height
|
|
654
|
-
</Typography>
|
|
655
|
-
</Box>
|
|
656
|
-
</Box>
|
|
657
|
-
</SheetWrapper>
|
|
658
|
-
),
|
|
659
|
-
};
|
|
660
|
-
|
|
661
|
-
const SettingsComponent = () => {
|
|
662
|
-
const [open, setOpen] = useState(false);
|
|
663
|
-
const [notifications, setNotifications] = useState(true);
|
|
664
|
-
const [darkMode, setDarkMode] = useState(false);
|
|
665
|
-
const [autoSave, setAutoSave] = useState(true);
|
|
666
|
-
|
|
667
|
-
return (
|
|
668
|
-
<>
|
|
669
|
-
<Button variant="contained" startIcon={<SettingsIcon />} onClick={() => setOpen(true)}>
|
|
670
|
-
Open Settings
|
|
671
|
-
</Button>
|
|
672
|
-
<Sheet
|
|
673
|
-
open={open}
|
|
674
|
-
onOpenChange={setOpen}
|
|
675
|
-
title="Application Settings"
|
|
676
|
-
position="right"
|
|
677
|
-
size="md"
|
|
678
|
-
variant="elevated"
|
|
679
|
-
footer={
|
|
680
|
-
<Box sx={{ display: 'flex', gap: 2 }}>
|
|
681
|
-
<Button variant="outlined" onClick={() => setOpen(false)} fullWidth>
|
|
682
|
-
Cancel
|
|
683
|
-
</Button>
|
|
684
|
-
<Button variant="contained" color="primary" onClick={() => setOpen(false)} fullWidth>
|
|
685
|
-
Save
|
|
686
|
-
</Button>
|
|
687
|
-
</Box>
|
|
688
|
-
}
|
|
689
|
-
>
|
|
690
|
-
<Stack spacing={3}>
|
|
691
|
-
<Box>
|
|
692
|
-
<Typography variant="subtitle2" gutterBottom>
|
|
693
|
-
Appearance
|
|
694
|
-
</Typography>
|
|
695
|
-
<FormControlLabel
|
|
696
|
-
control={
|
|
697
|
-
<Switch checked={darkMode} onChange={(e) => setDarkMode(e.target.checked)} />
|
|
698
|
-
}
|
|
699
|
-
label="Dark Mode"
|
|
700
|
-
/>
|
|
701
|
-
</Box>
|
|
702
|
-
|
|
703
|
-
<Divider />
|
|
704
|
-
|
|
705
|
-
<Box>
|
|
706
|
-
<Typography variant="subtitle2" gutterBottom>
|
|
707
|
-
Notifications
|
|
708
|
-
</Typography>
|
|
709
|
-
<FormControlLabel
|
|
710
|
-
control={
|
|
711
|
-
<Switch
|
|
712
|
-
checked={notifications}
|
|
713
|
-
onChange={(e) => setNotifications(e.target.checked)}
|
|
714
|
-
/>
|
|
715
|
-
}
|
|
716
|
-
label="Enable Notifications"
|
|
717
|
-
/>
|
|
718
|
-
</Box>
|
|
719
|
-
|
|
720
|
-
<Divider />
|
|
721
|
-
|
|
722
|
-
<Box>
|
|
723
|
-
<Typography variant="subtitle2" gutterBottom>
|
|
724
|
-
Data & Storage
|
|
725
|
-
</Typography>
|
|
726
|
-
<FormControlLabel
|
|
727
|
-
control={
|
|
728
|
-
<Switch checked={autoSave} onChange={(e) => setAutoSave(e.target.checked)} />
|
|
729
|
-
}
|
|
730
|
-
label="Auto-save"
|
|
731
|
-
/>
|
|
732
|
-
</Box>
|
|
733
|
-
</Stack>
|
|
734
|
-
</Sheet>
|
|
735
|
-
</>
|
|
736
|
-
);
|
|
737
|
-
};
|
|
738
|
-
|
|
739
|
-
export const Settings: Story = {
|
|
740
|
-
render: () => <SettingsComponent />,
|
|
741
|
-
};
|
|
742
|
-
|
|
743
|
-
// Required story exports for validation
|
|
744
|
-
export const AllVariants: Story = {
|
|
745
|
-
render: () => (
|
|
746
|
-
<Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
|
|
747
|
-
{(['default', 'glass', 'gradient', 'elevated', 'minimal', 'draggable'] as const).map(
|
|
748
|
-
(variant) => (
|
|
749
|
-
<SheetWrapper
|
|
750
|
-
key={variant}
|
|
751
|
-
variant={variant}
|
|
752
|
-
title={`${variant} Variant`}
|
|
753
|
-
buttonText={variant}
|
|
754
|
-
glow={variant === 'glass'}
|
|
755
|
-
glass={variant === 'glass'}
|
|
756
|
-
gradient={variant === 'gradient'}
|
|
757
|
-
>
|
|
758
|
-
<Typography>This is a {variant} variant sheet</Typography>
|
|
759
|
-
</SheetWrapper>
|
|
760
|
-
),
|
|
761
|
-
)}
|
|
762
|
-
</Box>
|
|
763
|
-
),
|
|
764
|
-
};
|
|
765
|
-
|
|
766
|
-
export const AllSizes: Story = {
|
|
767
|
-
render: () => (
|
|
768
|
-
<Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
|
|
769
|
-
{(['xs', 'sm', 'md', 'lg', 'xl', 'full'] as const).map((size) => (
|
|
770
|
-
<SheetWrapper
|
|
771
|
-
key={size}
|
|
772
|
-
size={size}
|
|
773
|
-
title={`Size: ${size.toUpperCase()}`}
|
|
774
|
-
buttonText={`Size ${size}`}
|
|
775
|
-
>
|
|
776
|
-
<Typography>This is a {size} sized sheet</Typography>
|
|
777
|
-
</SheetWrapper>
|
|
778
|
-
))}
|
|
779
|
-
</Box>
|
|
780
|
-
),
|
|
781
|
-
};
|
|
782
|
-
|
|
783
|
-
export const AllStates: Story = {
|
|
784
|
-
render: () => (
|
|
785
|
-
<Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
|
|
786
|
-
<SheetWrapper title="Loading State" buttonText="Loading" loading />
|
|
787
|
-
<SheetWrapper title="Disabled State" buttonText="Disabled" disabled>
|
|
788
|
-
<Typography>Disabled content</Typography>
|
|
789
|
-
</SheetWrapper>
|
|
790
|
-
<SheetWrapper
|
|
791
|
-
title="Persistent State"
|
|
792
|
-
buttonText="Persistent"
|
|
793
|
-
persistent
|
|
794
|
-
closeOnOverlayClick={false}
|
|
795
|
-
closeOnEscape={false}
|
|
796
|
-
>
|
|
797
|
-
<Typography>Persistent sheet - cannot be easily closed</Typography>
|
|
798
|
-
</SheetWrapper>
|
|
799
|
-
<SheetWrapper title="No Overlay State" buttonText="No Overlay" showOverlay={false}>
|
|
800
|
-
<Typography>Sheet without backdrop</Typography>
|
|
801
|
-
</SheetWrapper>
|
|
802
|
-
</Box>
|
|
803
|
-
),
|
|
804
|
-
};
|
|
805
|
-
|
|
806
|
-
export const InteractiveStates: Story = {
|
|
807
|
-
render: () => (
|
|
808
|
-
<Box sx={{ display: 'flex', gap: 2, flexWrap: 'wrap' }}>
|
|
809
|
-
<SheetWrapper
|
|
810
|
-
title="Swipeable Sheet"
|
|
811
|
-
buttonText="Swipeable"
|
|
812
|
-
swipeable
|
|
813
|
-
showHandle
|
|
814
|
-
position="bottom"
|
|
815
|
-
>
|
|
816
|
-
<Typography>Swipe down to close (mobile)</Typography>
|
|
817
|
-
</SheetWrapper>
|
|
818
|
-
<SheetWrapper
|
|
819
|
-
variant="draggable"
|
|
820
|
-
title="Draggable Sheet"
|
|
821
|
-
buttonText="Draggable"
|
|
822
|
-
position="bottom"
|
|
823
|
-
snapPoints={[0.25, 0.5, 0.75]}
|
|
824
|
-
defaultSnapPoint={0.5}
|
|
825
|
-
showHandle
|
|
826
|
-
>
|
|
827
|
-
<Typography>Drag to resize</Typography>
|
|
828
|
-
</SheetWrapper>
|
|
829
|
-
<SheetWrapper title="With Effects" buttonText="Glow & Glass" variant="glass" glow glass pulse>
|
|
830
|
-
<Typography>Interactive visual effects</Typography>
|
|
831
|
-
</SheetWrapper>
|
|
832
|
-
</Box>
|
|
833
|
-
),
|
|
834
|
-
};
|
|
835
|
-
|
|
836
|
-
export const Responsive: Story = {
|
|
837
|
-
parameters: {
|
|
838
|
-
viewport: {
|
|
839
|
-
viewports: {
|
|
840
|
-
mobile: { name: 'Mobile', styles: { width: '375px', height: '667px' } },
|
|
841
|
-
tablet: { name: 'Tablet', styles: { width: '768px', height: '1024px' } },
|
|
842
|
-
desktop: { name: 'Desktop', styles: { width: '1440px', height: '900px' } },
|
|
843
|
-
},
|
|
844
|
-
},
|
|
845
|
-
chromatic: {
|
|
846
|
-
viewports: [375, 768, 1440],
|
|
847
|
-
},
|
|
848
|
-
},
|
|
849
|
-
render: () => (
|
|
850
|
-
<Box>
|
|
851
|
-
<Typography variant="body2" sx={{ mb: 2 }}>
|
|
852
|
-
This sheet adapts to different screen sizes
|
|
853
|
-
</Typography>
|
|
854
|
-
<SheetWrapper
|
|
855
|
-
title="Responsive Sheet"
|
|
856
|
-
description="Adapts to viewport size"
|
|
857
|
-
buttonText="Open Responsive Sheet"
|
|
858
|
-
position="bottom"
|
|
859
|
-
size="md"
|
|
860
|
-
>
|
|
861
|
-
<Stack spacing={2}>
|
|
862
|
-
<Typography variant="h6">Responsive Content</Typography>
|
|
863
|
-
<Typography variant="body2">
|
|
864
|
-
This sheet adjusts its behavior and appearance based on the viewport size.
|
|
865
|
-
</Typography>
|
|
866
|
-
<Box
|
|
867
|
-
sx={{
|
|
868
|
-
display: 'grid',
|
|
869
|
-
gridTemplateColumns: { xs: '1fr', sm: '1fr 1fr', md: '1fr 1fr 1fr' },
|
|
870
|
-
gap: 2,
|
|
871
|
-
}}
|
|
872
|
-
>
|
|
873
|
-
{[1, 2, 3, 4, 5, 6].map((i) => (
|
|
874
|
-
<Paper key={i} sx={{ p: 2 }}>
|
|
875
|
-
<Typography>Item {i}</Typography>
|
|
876
|
-
</Paper>
|
|
877
|
-
))}
|
|
878
|
-
</Box>
|
|
879
|
-
</Stack>
|
|
880
|
-
</SheetWrapper>
|
|
881
|
-
</Box>
|
|
882
|
-
),
|
|
883
|
-
};
|